@@ -70,37 +70,32 @@ let job_text name label =
70
70
(OpamConsole. colorise `green (OpamRepositoryName. to_string name))
71
71
label)
72
72
73
- type diff_state =
74
- | Mine of string
75
- | Theirs of string
76
- | Both of string * string
77
-
78
73
let getfiles parent_dir dir =
79
74
let dir = Filename. concat (OpamFilename.Dir. to_string parent_dir) dir in
80
75
OpamSystem. get_files dir
81
76
82
77
let get_files_for_diff parent_dir dir1 dir2 = match dir1, dir2 with
83
78
| None , None -> assert false
84
79
| 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)
86
81
| 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)
88
83
| Some dir1 , Some dir2 ->
89
84
let files1 = List. fast_sort String. compare (getfiles parent_dir dir1) in
90
85
let files2 = List. fast_sort String. compare (getfiles parent_dir dir2) in
91
86
let rec aux acc files1 files2 = match files1, files2 with
92
87
| (file1 ::files1 as orig1 ), (file2 ::files2 as orig2 ) ->
93
88
let cmp = String. compare file1 file2 in
94
89
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
96
91
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
98
93
else
99
- aux (Theirs (Filename. concat dir2 file2) :: acc) orig1 files2
94
+ aux (Patch. Create (Filename. concat dir2 file2) :: acc) orig1 files2
100
95
| file1 ::files1 , [] ->
101
- aux (Mine (Filename. concat dir1 file1) :: acc) files1 []
96
+ aux (Patch. Delete (Filename. concat dir1 file1) :: acc) files1 []
102
97
| [] , file2 ::files2 ->
103
- aux (Theirs (Filename. concat dir2 file2) :: acc) [] files2
98
+ aux (Patch. Create (Filename. concat dir2 file2) :: acc) [] files2
104
99
| [] , [] ->
105
100
acc
106
101
in
@@ -123,15 +118,15 @@ let get_diff parent_dir dir1 dir2 =
123
118
let rec aux diffs dir1 dir2 =
124
119
let files = get_files_for_diff parent_dir dir1 dir2 in
125
120
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 )
132
127
in
133
128
let add_to_diffs content1 content2 diffs =
134
- match Patch. diff ~filename content1 content2 with
129
+ match Patch. diff operation content1 content2 with
135
130
| None -> diffs
136
131
| Some diff -> diff :: diffs
137
132
in
@@ -163,13 +158,13 @@ let get_diff parent_dir dir1 dir2 =
163
158
| Some {Unix. st_kind = Unix. S_DIR ; _} , Some {Unix. st_kind = Unix. S_LNK ; _} ->
164
159
assert false (* TODO *)
165
160
| 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"
167
162
| 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"
169
164
| 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"
171
166
| 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"
173
168
| None , None -> assert false )
174
169
diffs files
175
170
in
0 commit comments