-
Notifications
You must be signed in to change notification settings - Fork 0
/
packed_package.ml
90 lines (87 loc) · 2.9 KB
/
packed_package.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
open Util
open Pkg
open Repository
let read_package repo name version arch =
if not (create_tmp_dir ()) then None
else
match provide_transport_shape repo name version arch with
| None -> None
| Some path ->
let unpack_args =
[|!program_tar; "-xf"; path;
"-C"; Tpm_config.tmp_dir; Tpm_config.desc_file_name|]
in
try
match run_program unpack_args with
| (_, WEXITED 0) ->
Xml.parse_file
(Tpm_config.tmp_dir ^ "/" ^ Tpm_config.desc_file_name)
|> pkg_of_xml
| _ -> print_endline
"Packed: Could not unpack the package (tar failed)";
None
with
| Unix.Unix_error (c, _, _) -> print_endline
("Packed: Could not read the package: " ^ Unix.error_message c);
None
| _ -> print_endline ("Packed: Could not read the package"); None
let unpack_packed_shape repo name version arch =
if not (create_tmp_dir ()) then false
else
match provide_transport_shape repo name version arch with
| None -> false
| Some path ->
let unpack_package_args =
[|!program_tar; "-xf"; path; "-C"; Tpm_config.tmp_dir|]
in
try
match run_program unpack_package_args with
| (_, WEXITED 0) -> true
| _ -> print_endline
"Packed: Could not unpack the package (tar failed)";
false
with
| Unix.Unix_error (c, _, _) -> print_endline
("Packed: Failed to unpack the package: " ^ Unix.error_message c);
false
| _ -> print_endline "Packed: Failed to unpack the package"; false
let unpack_files_to spkg destination exclude_files status =
let exclude_files =
List.map
(fun fn ->
let fn =
if String.length fn > 0
then
String.sub fn 1 (String.length fn - 1)
else fn
in
"--exclude=" ^ fn)
exclude_files
|>
Array.of_list
in
let unpack_files_args =
Array.append
[|!program_tar;
"-xpI"; !program_gzip;
"-f"; Tpm_config.tmp_dir ^ "/" ^ Tpm_config.destdir_name ^ ".tar.gz";
"-C"; destination|]
exclude_files
in
try
if
try
match run_program unpack_files_args with
| (_, WEXITED 0) -> true
| _ -> false
with
_ -> false
then true
else
(print_endline
"Packed: Could not install the package's files (tar failed)";
false)
with
| Sys_error msg -> print_endline
("Packed: Could not install the package's files: " ^ msg); false
| _ -> print_endline ("Packed: Could not install the package's files"); false