Skip to content

Commit ea78b35

Browse files
authored
Merge pull request #95 from MisterDA/tar-2.0
Update to tar 2.0 and refactor Tar_transfer
2 parents afa73a4 + ee70883 commit ea78b35

File tree

3 files changed

+14
-23
lines changed

3 files changed

+14
-23
lines changed

dune-project

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
(fmt (>= 0.8.9))
1818
logs
1919
cmdliner
20-
tar-unix
20+
(tar-unix (>= 2.0.0))
2121
yojson
2222
sexplib
2323
ppx_deriving

lib/tar_transfer.ml

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ open Lwt.Infix
22

33
let ( / ) = Filename.concat
44

5+
let level = Tar.Header.GNU
6+
57
module Tar_lwt_unix = struct
68
include Tar_lwt_unix
79

@@ -32,8 +34,8 @@ module Tar_lwt_unix = struct
3234

3335
module HW = Tar.HeaderWriter(Lwt)(Writer)
3436

35-
let write_block (header: Tar.Header.t) (body: Lwt_unix.file_descr -> unit Lwt.t) (fd : Lwt_unix.file_descr) =
36-
HW.write ~level:Tar.Header.GNU header fd
37+
let write_block ?level (header: Tar.Header.t) (body: Lwt_unix.file_descr -> unit Lwt.t) (fd : Lwt_unix.file_descr) =
38+
HW.write ?level header fd
3739
>>= fun () ->
3840
body fd >>= fun () ->
3941
Writer.really_write fd (Tar.Header.zero_padding header)
@@ -62,7 +64,7 @@ let copy_file ~src ~dst ~to_untar ~user =
6264
~group_id:user.Obuilder_spec.gid
6365
dst stat.Lwt_unix.LargeFile.st_size
6466
in
65-
Tar_lwt_unix.write_block hdr (fun ofd ->
67+
Tar_lwt_unix.write_block ~level hdr (fun ofd ->
6668
Lwt_io.(with_file ~mode:input) src (copy_to ~dst:ofd)
6769
) to_untar
6870

@@ -77,7 +79,7 @@ let copy_symlink ~src ~target ~dst ~to_untar ~user =
7779
~group_id:user.Obuilder_spec.gid
7880
dst 0L
7981
in
80-
Tar_lwt_unix.write_block hdr (fun _ -> Lwt.return_unit) to_untar
82+
Tar_lwt_unix.write_block ~level hdr (fun _ -> Lwt.return_unit) to_untar
8183

8284
let rec copy_dir ~src_dir ~src ~dst ~(items:(Manifest.t list)) ~to_untar ~user =
8385
Log.debug(fun f -> f "Copy dir %S -> %S@." src dst);
@@ -90,8 +92,10 @@ let rec copy_dir ~src_dir ~src ~dst ~(items:(Manifest.t list)) ~to_untar ~user =
9092
~group_id:user.Obuilder_spec.gid
9193
(dst ^ "/") 0L
9294
in
93-
Tar_lwt_unix.write_block hdr (fun _ -> Lwt.return_unit) to_untar
94-
end >>= fun () ->
95+
Tar_lwt_unix.write_block ~level hdr (fun _ -> Lwt.return_unit) to_untar
96+
end >>= fun () -> send_dir ~src_dir ~dst ~to_untar ~user items
97+
98+
and send_dir ~src_dir ~dst ~to_untar ~user items =
9599
items |> Lwt_list.iter_s (function
96100
| `File (src, _) ->
97101
let src = src_dir / src in
@@ -109,21 +113,8 @@ let rec copy_dir ~src_dir ~src ~dst ~(items:(Manifest.t list)) ~to_untar ~user =
109113
let remove_leading_slashes = Astring.String.drop ~sat:((=) '/')
110114

111115
let send_files ~src_dir ~src_manifest ~dst_dir ~user ~to_untar =
112-
let dst_dir = remove_leading_slashes dst_dir in
113-
src_manifest |> Lwt_list.iter_s (function
114-
| `File (path, _) ->
115-
let src = src_dir / path in
116-
let dst = dst_dir / (Filename.basename path) in
117-
copy_file ~src ~dst ~to_untar ~user
118-
| `Symlink (src, target) ->
119-
let src = src_dir / src in
120-
let dst = dst_dir / Filename.basename src in
121-
copy_symlink ~src ~target ~dst ~to_untar ~user
122-
| `Dir (src, items) ->
123-
let dst = dst_dir / Filename.basename src in
124-
copy_dir ~src_dir ~src ~dst ~items ~to_untar ~user
125-
)
126-
>>= fun () ->
116+
let dst = remove_leading_slashes dst_dir in
117+
send_dir ~src_dir ~dst ~to_untar ~user src_manifest >>= fun () ->
127118
Tar_lwt_unix.write_end to_untar
128119

129120
let send_file ~src_dir ~src_manifest ~dst ~user ~to_untar =

obuilder.opam

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ depends: [
1515
"fmt" {>= "0.8.9"}
1616
"logs"
1717
"cmdliner"
18-
"tar-unix"
18+
"tar-unix" {>= "2.0.0"}
1919
"yojson"
2020
"sexplib"
2121
"ppx_deriving"

0 commit comments

Comments
 (0)