Skip to content

Commit 2841797

Browse files
committed
update with the latest ocaml-patch
1 parent d83fd0b commit 2841797

File tree

2 files changed

+21
-38
lines changed

2 files changed

+21
-38
lines changed

src/core/opamSystem.ml

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1660,26 +1660,14 @@ let internal_patch ~patch_filename ~dir diffs =
16601660
raise (Internal_patch_error (fmt "Patch %S does not apply cleanly." patch_filename))
16611661
in
16621662
let apply diff = match diff.Patch.operation with
1663-
| Patch.Edit file ->
1664-
let file, content =
1665-
let file = get_path file in
1666-
let content =
1667-
if Sys.file_exists file then
1668-
Some (read file)
1669-
else
1670-
None
1671-
in
1672-
(file, content)
1673-
in
1674-
let content = patch content diff in
1675-
write file content
1676-
| Patch.Rename (src, dst) ->
1663+
| Patch.Edit (src, dst) ->
16771664
let src = get_path src in
16781665
let dst = get_path dst in
16791666
let content = read src in
16801667
let content = patch (Some content) diff in
16811668
write dst content;
1682-
Unix.unlink src
1669+
if not (String.equal src dst) then
1670+
Unix.unlink src;
16831671
| Patch.Delete file ->
16841672
let file = get_path file in
16851673
Unix.unlink file

src/repository/opamRepositoryBackend.ml

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -70,37 +70,32 @@ let job_text name label =
7070
(OpamConsole.colorise `green (OpamRepositoryName.to_string name))
7171
label)
7272

73-
type diff_state =
74-
| Mine of string
75-
| Theirs of string
76-
| Both of string * string
77-
7873
let getfiles parent_dir dir =
7974
let dir = Filename.concat (OpamFilename.Dir.to_string parent_dir) dir in
8075
OpamSystem.get_files dir
8176

8277
let get_files_for_diff parent_dir dir1 dir2 = match dir1, dir2 with
8378
| None, None -> assert false
8479
| Some dir, None ->
85-
List.map (fun file -> Mine (Filename.concat dir file)) (getfiles parent_dir dir)
80+
List.map (fun file -> Patch.Delete (Filename.concat dir file)) (getfiles parent_dir dir)
8681
| None, Some dir ->
87-
List.map (fun file -> Theirs (Filename.concat dir file)) (getfiles parent_dir dir)
82+
List.map (fun file -> Patch.Create (Filename.concat dir file)) (getfiles parent_dir dir)
8883
| Some dir1, Some dir2 ->
8984
let files1 = List.fast_sort String.compare (getfiles parent_dir dir1) in
9085
let files2 = List.fast_sort String.compare (getfiles parent_dir dir2) in
9186
let rec aux acc files1 files2 = match files1, files2 with
9287
| (file1::files1 as orig1), (file2::files2 as orig2) ->
9388
let cmp = String.compare file1 file2 in
9489
if cmp = 0 then
95-
aux (Both (Filename.concat dir1 file1, Filename.concat dir2 file2) :: acc) files1 files2
90+
aux (Patch.Edit (Filename.concat dir1 file1, Filename.concat dir2 file2) :: acc) files1 files2
9691
else if cmp < 0 then
97-
aux (Mine (Filename.concat dir1 file1) :: acc) files1 orig2
92+
aux (Patch.Delete (Filename.concat dir1 file1) :: acc) files1 orig2
9893
else
99-
aux (Theirs (Filename.concat dir2 file2) :: acc) orig1 files2
94+
aux (Patch.Create (Filename.concat dir2 file2) :: acc) orig1 files2
10095
| file1::files1, [] ->
101-
aux (Mine (Filename.concat dir1 file1) :: acc) files1 []
96+
aux (Patch.Delete (Filename.concat dir1 file1) :: acc) files1 []
10297
| [], file2::files2 ->
103-
aux (Theirs (Filename.concat dir2 file2) :: acc) [] files2
98+
aux (Patch.Create (Filename.concat dir2 file2) :: acc) [] files2
10499
| [], [] ->
105100
acc
106101
in
@@ -123,15 +118,15 @@ let get_diff parent_dir dir1 dir2 =
123118
let rec aux diffs dir1 dir2 =
124119
let files = get_files_for_diff parent_dir dir1 dir2 in
125120
let diffs =
126-
List.fold_left (fun diffs state ->
127-
let filename, file1, file2 = match state with
128-
| Mine filename -> (filename, Some filename, None)
129-
| Theirs filename -> (filename, None, Some filename)
130-
| Both (file1, file2) -> (file2, Some file1, Some file2)
131-
(* TODO: not quite right here, maybe we want to change ocaml-patch to always have two files *)
121+
List.fold_left (fun diffs operation ->
122+
let file1, file2 = match operation with
123+
| Patch.Delete filename -> (Some filename, None)
124+
| Patch.Create filename -> (None, Some filename)
125+
| Patch.Edit (file1, file2)
126+
| Patch.Rename_only (file1, file2) -> (Some file1, Some file2)
132127
in
133128
let add_to_diffs content1 content2 diffs =
134-
match Patch.diff ~filename content1 content2 with
129+
match Patch.diff operation content1 content2 with
135130
| None -> diffs
136131
| Some diff -> diff :: diffs
137132
in
@@ -163,13 +158,13 @@ let get_diff parent_dir dir1 dir2 =
163158
| Some {Unix.st_kind = Unix.S_DIR; _}, Some {Unix.st_kind = Unix.S_LNK; _} ->
164159
assert false (* TODO *)
165160
| Some {Unix.st_kind = Unix.S_CHR; _}, _ | _, Some {Unix.st_kind = Unix.S_CHR; _} ->
166-
failwith (Printf.sprintf "Character devices (%s) are unsupported" filename)
161+
failwith "Character devices are unsupported"
167162
| Some {Unix.st_kind = Unix.S_BLK; _}, _ | _, Some {Unix.st_kind = Unix.S_BLK; _} ->
168-
failwith (Printf.sprintf "Block devices (%s) are unsupported" filename)
163+
failwith "Block devices are unsupported"
169164
| Some {Unix.st_kind = Unix.S_FIFO; _}, _ | _, Some {Unix.st_kind = Unix.S_FIFO; _} ->
170-
failwith (Printf.sprintf "Named pipes (%s) are unsupported" filename)
165+
failwith "Named pipes are unsupported"
171166
| Some {Unix.st_kind = Unix.S_SOCK; _}, _ | _, Some {Unix.st_kind = Unix.S_SOCK; _} ->
172-
failwith (Printf.sprintf "Sockets (%s) are unsupported" filename)
167+
failwith "Sockets are unsupported"
173168
| None, None -> assert false)
174169
diffs files
175170
in

0 commit comments

Comments
 (0)