##// END OF EJS Templates
merge: keep destination filename as key in actions for merge with dir rename...
Mads Kiilerich -
r20944:5b8d5803 default
parent child Browse files
Show More
@@ -334,11 +334,13 b' def _checkcollision(repo, wmf, actions):'
334 334 def nop(f, args):
335 335 pass
336 336
337 def renameop(f, args):
338 f2, fd, flags = args
339 if f:
340 pmmf.discard(f)
341 pmmf.add(fd)
337 def renamemoveop(f, args):
338 f2, flags = args
339 pmmf.discard(f2)
340 pmmf.add(f)
341 def renamegetop(f, args):
342 f2, flags = args
343 pmmf.add(f)
342 344 def mergeop(f, args):
343 345 f2, fa, fd, move, anc = args
344 346 if move:
@@ -347,7 +349,8 b' def _checkcollision(repo, wmf, actions):'
347 349
348 350 opmap = {
349 351 "a": addop,
350 "d": renameop,
352 "dm": renamemoveop,
353 "dg": renamegetop,
351 354 "dr": nop,
352 355 "e": nop,
353 356 "f": addop, # untracked file should be kept in working directory
@@ -472,10 +475,10 b' def manifestmerge(repo, wctx, p2, pa, br'
472 475 "versions differ"))
473 476 elif f in copied: # files we'll deal with on m2 side
474 477 pass
475 elif n1 and f in movewithdir: # directory rename
478 elif n1 and f in movewithdir: # directory rename, move local
476 479 f2 = movewithdir[f]
477 actions.append((f, "d", (None, f2, fl1),
478 "remote renamed directory to " + f2))
480 actions.append((f2, "dm", (f, fl1),
481 "remote directory rename - move from " + f))
479 482 elif n1 and f in copy:
480 483 f2 = copy[f]
481 484 actions.append((f, "m", (f2, f2, f, False, pa.node()),
@@ -492,8 +495,8 b' def manifestmerge(repo, wctx, p2, pa, br'
492 495 actions.append((f, "r", None, "other deleted"))
493 496 elif n2 and f in movewithdir:
494 497 f2 = movewithdir[f]
495 actions.append((None, "d", (f, f2, fl2),
496 "local renamed directory to " + f2))
498 actions.append((f2, "dg", (f, fl2),
499 "local directory rename - get from " + f))
497 500 elif n2 and f in copy:
498 501 f2 = copy[f]
499 502 if f2 in m2:
@@ -693,16 +696,17 b' def applyupdates(repo, actions, wctx, mc'
693 696 updated += 1
694 697 else:
695 698 merged += 1
696 elif m == "d": # directory rename
697 f2, fd, flags = args
698 if f:
699 repo.ui.note(_("moving %s to %s\n") % (f, fd))
700 audit(fd)
701 repo.wwrite(fd, wctx.filectx(f).data(), flags)
702 util.unlinkpath(repo.wjoin(f))
703 if f2:
704 repo.ui.note(_("getting %s to %s\n") % (f2, fd))
705 repo.wwrite(fd, mctx.filectx(f2).data(), flags)
699 elif m == "dm": # directory rename, move local
700 f0, flags = args
701 repo.ui.note(_("moving %s to %s\n") % (f0, f))
702 audit(f)
703 repo.wwrite(f, wctx.filectx(f0).data(), flags)
704 util.unlinkpath(repo.wjoin(f0))
705 updated += 1
706 elif m == "dg": # local directory rename, get
707 f0, flags = args
708 repo.ui.note(_("getting %s to %s\n") % (f0, f))
709 repo.wwrite(f, mctx.filectx(f0).data(), flags)
706 710 updated += 1
707 711 elif m == "dr": # divergent renames
708 712 fl, = args
@@ -811,22 +815,25 b' def recordupdates(repo, actions, branchm'
811 815 repo.dirstate.normallookup(fd)
812 816 if move:
813 817 repo.dirstate.drop(f)
814 elif m == "d": # directory rename
815 f2, fd, flag = args
816 if not f2 and f not in repo.dirstate:
818 elif m == "dm": # directory rename, move local
819 f0, flag = args
820 if f0 not in repo.dirstate:
817 821 # untracked file moved
818 822 continue
819 823 if branchmerge:
820 repo.dirstate.add(fd)
821 if f:
822 repo.dirstate.remove(f)
823 repo.dirstate.copy(f, fd)
824 if f2:
825 repo.dirstate.copy(f2, fd)
824 repo.dirstate.add(f)
825 repo.dirstate.remove(f0)
826 repo.dirstate.copy(f0, f)
826 827 else:
827 repo.dirstate.normal(fd)
828 if f:
829 repo.dirstate.drop(f)
828 repo.dirstate.normal(f)
829 repo.dirstate.drop(f0)
830 elif m == "dg": # directory rename, get
831 f0, flag = args
832 if branchmerge:
833 repo.dirstate.add(f)
834 repo.dirstate.copy(f0, f)
835 else:
836 repo.dirstate.normal(f)
830 837
831 838 def update(repo, node, branchmerge, force, partial, ancestor=None,
832 839 mergeancestor=False):
@@ -41,16 +41,16 b''
41 41 ancestor: f9b20c0d4c51, local: ce36d17b18fb+, remote: 397f8b00a740
42 42 a/a: other deleted -> r
43 43 a/b: other deleted -> r
44 a/c: remote renamed directory to b/c -> d
45 44 b/a: remote created -> g
46 45 b/b: remote created -> g
46 b/c: remote directory rename - move from a/c -> dm
47 47 removing a/a
48 48 removing a/b
49 49 updating: a/b 2/5 files (40.00%)
50 50 getting b/a
51 51 getting b/b
52 52 updating: b/b 4/5 files (80.00%)
53 updating: a/c 5/5 files (100.00%)
53 updating: b/c 5/5 files (100.00%)
54 54 moving a/c to b/c (glob)
55 55 3 files updated, 0 files merged, 2 files removed, 0 files unresolved
56 56 (branch merge, don't forget to commit)
@@ -88,8 +88,8 b''
88 88 resolving manifests
89 89 branchmerge: True, force: False, partial: False
90 90 ancestor: f9b20c0d4c51, local: 397f8b00a740+, remote: ce36d17b18fb
91 None: local renamed directory to b/c -> d
92 updating:None 1/1 files (100.00%)
91 b/c: local directory rename - get from a/c -> dg
92 updating: b/c 1/1 files (100.00%)
93 93 getting a/c to b/c
94 94 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
95 95 (branch merge, don't forget to commit)
General Comments 0
You need to be logged in to leave comments. Login now