208 # are files different? |
208 # are files different? |
209 if n != m2[f]: |
209 if n != m2[f]: |
210 a = ma.get(f, nullid) |
210 a = ma.get(f, nullid) |
211 # are both different from the ancestor? |
211 # are both different from the ancestor? |
212 if not overwrite and n != a and m2[f] != a: |
212 if not overwrite and n != a and m2[f] != a: |
213 act("versions differ", f, "m", fmerge(f)) |
213 act("versions differ", "m", f, fmerge(f)) |
214 # are we clobbering? |
214 # are we clobbering? |
215 # is remote's version newer? |
215 # is remote's version newer? |
216 # or are we going back in time and clean? |
216 # or are we going back in time and clean? |
217 elif overwrite or m2[f] != a or (backwards and not n[20:]): |
217 elif overwrite or m2[f] != a or (backwards and not n[20:]): |
218 act("remote is newer", f, "g", m2.execf(f)) |
218 act("remote is newer", "g", f, m2.execf(f)) |
219 # local is newer, not overwrite, check mode bits |
219 # local is newer, not overwrite, check mode bits |
220 elif fmerge(f) != m1.execf(f): |
220 elif fmerge(f) != m1.execf(f): |
221 act("update permissions", f, "e", m2.execf(f)) |
221 act("update permissions", "e", f, m2.execf(f)) |
222 # contents same, check mode bits |
222 # contents same, check mode bits |
223 elif m1.execf(f) != m2.execf(f): |
223 elif m1.execf(f) != m2.execf(f): |
224 if overwrite or fmerge(f) != m1.execf(f): |
224 if overwrite or fmerge(f) != m1.execf(f): |
225 act("update permissions", f, "e", m2.execf(f)) |
225 act("update permissions", "e", f, m2.execf(f)) |
226 elif f in copy: |
226 elif f in copy: |
227 f2 = copy[f] |
227 f2 = copy[f] |
228 if f in ma: # case 3,20 A/B/A |
228 if f in ma: # case 3,20 A/B/A |
229 act("remote moved", |
229 act("remote moved", "c", |
230 f, "c", f2, f2, fmerge(f, f2, f), True) |
230 f, f2, f2, fmerge(f, f2, f), True) |
231 else: |
231 else: |
232 if f2 in m1: # case 2 A,B/B/B |
232 if f2 in m1: # case 2 A,B/B/B |
233 act("local copied", |
233 act("local copied", "c", |
234 f, "c", f2, f, fmerge(f, f2, f2), False) |
234 f, f2, f, fmerge(f, f2, f2), False) |
235 else: # case 4,21 A/B/B |
235 else: # case 4,21 A/B/B |
236 act("local moved", |
236 act("local moved", "c", |
237 f, "c", f2, f, fmerge(f, f2, f2), False) |
237 f, f2, f, fmerge(f, f2, f2), False) |
238 elif f in ma: |
238 elif f in ma: |
239 if n != ma[f] and not overwrite: |
239 if n != ma[f] and not overwrite: |
240 if repo.ui.prompt( |
240 if repo.ui.prompt( |
241 (_(" local changed %s which remote deleted\n") % f) + |
241 (_(" local changed %s which remote deleted\n") % f) + |
242 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) == _("d"): |
242 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) == _("d"): |
243 act("prompt delete", f, "r") |
243 act("prompt delete", "r", f) |
244 else: |
244 else: |
245 act("other deleted", f, "r") |
245 act("other deleted", "r", f) |
246 else: |
246 else: |
247 # file is created on branch or in working directory |
247 # file is created on branch or in working directory |
248 if (overwrite and n[20:] != "u") or (backwards and not n[20:]): |
248 if (overwrite and n[20:] != "u") or (backwards and not n[20:]): |
249 act("remote deleted", f, "r") |
249 act("remote deleted", "r", f) |
250 |
250 |
251 for f, n in m2.iteritems(): |
251 for f, n in m2.iteritems(): |
252 if partial and not partial(f): |
252 if partial and not partial(f): |
253 continue |
253 continue |
254 if f in m1: |
254 if f in m1: |
256 if f in copy: |
256 if f in copy: |
257 f2 = copy[f] |
257 f2 = copy[f] |
258 if f2 not in m2: # already seen |
258 if f2 not in m2: # already seen |
259 continue |
259 continue |
260 # rename case 1, A/A,B/A |
260 # rename case 1, A/A,B/A |
261 act("remote copied", f2, "c", f, f, fmerge(f2, f, f2), False) |
261 act("remote copied", "c", f2, f, f, fmerge(f2, f, f2), False) |
262 elif f in ma: |
262 elif f in ma: |
263 if overwrite or backwards: |
263 if overwrite or backwards: |
264 act("recreating", f, "g", m2.execf(f)) |
264 act("recreating", "g", f, m2.execf(f)) |
265 elif n != ma[f]: |
265 elif n != ma[f]: |
266 if repo.ui.prompt( |
266 if repo.ui.prompt( |
267 (_("remote changed %s which local deleted\n") % f) + |
267 (_("remote changed %s which local deleted\n") % f) + |
268 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) == _("k"): |
268 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) == _("k"): |
269 act("prompt recreating", f, "g", m2.execf(f)) |
269 act("prompt recreating", "g", f, m2.execf(f)) |
270 else: |
270 else: |
271 act("remote created", f, "g", m2.execf(f)) |
271 act("remote created", "g", f, m2.execf(f)) |
272 |
272 |
273 return action |
273 return action |
274 |
274 |
275 def applyupdates(repo, action, wctx, mctx): |
275 def applyupdates(repo, action, wctx, mctx): |
276 updated, merged, removed, unresolved = 0, 0, 0, 0 |
276 updated, merged, removed, unresolved = 0, 0, 0, 0 |