equal
deleted
inserted
replaced
142 if c1 != ca or c2 != ca: # merge needed? |
142 if c1 != ca or c2 != ca: # merge needed? |
143 copy[f] = of |
143 copy[f] = of |
144 elif of in ma: |
144 elif of in ma: |
145 diverge.setdefault(of, []).append(f) |
145 diverge.setdefault(of, []).append(f) |
146 |
146 |
147 repo.ui.debug(_(" searching for copies back to rev %d\n") % limit) |
147 repo.ui.debug(" searching for copies back to rev %d\n" % limit) |
148 |
148 |
149 u1 = _nonoverlap(m1, m2, ma) |
149 u1 = _nonoverlap(m1, m2, ma) |
150 u2 = _nonoverlap(m2, m1, ma) |
150 u2 = _nonoverlap(m2, m1, ma) |
151 |
151 |
152 if u1: |
152 if u1: |
153 repo.ui.debug(_(" unmatched files in local:\n %s\n") |
153 repo.ui.debug(" unmatched files in local:\n %s\n" |
154 % "\n ".join(u1)) |
154 % "\n ".join(u1)) |
155 if u2: |
155 if u2: |
156 repo.ui.debug(_(" unmatched files in other:\n %s\n") |
156 repo.ui.debug(" unmatched files in other:\n %s\n" |
157 % "\n ".join(u2)) |
157 % "\n ".join(u2)) |
158 |
158 |
159 for f in u1: |
159 for f in u1: |
160 checkcopies(f, m1, m2) |
160 checkcopies(f, m1, m2) |
161 for f in u2: |
161 for f in u2: |
167 del diverge[of] # not actually divergent |
167 del diverge[of] # not actually divergent |
168 else: |
168 else: |
169 diverge2.update(fl) # reverse map for below |
169 diverge2.update(fl) # reverse map for below |
170 |
170 |
171 if fullcopy: |
171 if fullcopy: |
172 repo.ui.debug(_(" all copies found (* = to merge, ! = divergent):\n")) |
172 repo.ui.debug(" all copies found (* = to merge, ! = divergent):\n") |
173 for f in fullcopy: |
173 for f in fullcopy: |
174 note = "" |
174 note = "" |
175 if f in copy: note += "*" |
175 if f in copy: note += "*" |
176 if f in diverge2: note += "!" |
176 if f in diverge2: note += "!" |
177 repo.ui.debug(" %s -> %s %s\n" % (f, fullcopy[f], note)) |
177 repo.ui.debug(" %s -> %s %s\n" % (f, fullcopy[f], note)) |
178 del diverge2 |
178 del diverge2 |
179 |
179 |
180 if not fullcopy or not checkdirs: |
180 if not fullcopy or not checkdirs: |
181 return copy, diverge |
181 return copy, diverge |
182 |
182 |
183 repo.ui.debug(_(" checking for directory renames\n")) |
183 repo.ui.debug(" checking for directory renames\n") |
184 |
184 |
185 # generate a directory move map |
185 # generate a directory move map |
186 d1, d2 = _dirs(m1), _dirs(m2) |
186 d1, d2 = _dirs(m1), _dirs(m2) |
187 invalid = set() |
187 invalid = set() |
188 dirmove = {} |
188 dirmove = {} |
214 |
214 |
215 if not dirmove: |
215 if not dirmove: |
216 return copy, diverge |
216 return copy, diverge |
217 |
217 |
218 for d in dirmove: |
218 for d in dirmove: |
219 repo.ui.debug(_(" dir %s -> %s\n") % (d, dirmove[d])) |
219 repo.ui.debug(" dir %s -> %s\n" % (d, dirmove[d])) |
220 |
220 |
221 # check unaccounted nonoverlapping files against directory moves |
221 # check unaccounted nonoverlapping files against directory moves |
222 for f in u1 + u2: |
222 for f in u1 + u2: |
223 if f not in fullcopy: |
223 if f not in fullcopy: |
224 for d in dirmove: |
224 for d in dirmove: |
225 if f.startswith(d): |
225 if f.startswith(d): |
226 # new file added in a directory that was moved, move it |
226 # new file added in a directory that was moved, move it |
227 df = dirmove[d] + f[len(d):] |
227 df = dirmove[d] + f[len(d):] |
228 if df not in copy: |
228 if df not in copy: |
229 copy[f] = df |
229 copy[f] = df |
230 repo.ui.debug(_(" file %s -> %s\n") % (f, copy[f])) |
230 repo.ui.debug(" file %s -> %s\n" % (f, copy[f])) |
231 break |
231 break |
232 |
232 |
233 return copy, diverge |
233 return copy, diverge |