comparison mercurial/merge.py @ 30586:43a9e02a7b7f

graft: support grafting changes to new file in renamed directory (issue5436)
author G?bor Stefanik <gabor.stefanik@nng.com>
date Mon, 05 Dec 2016 17:40:01 +0100
parents 20a42325fdef
children 41f6af50c0d8
comparison
equal deleted inserted replaced
30585:51e7c83e05ee 30586:43a9e02a7b7f
792 acceptremote = accept the incoming changes without prompting 792 acceptremote = accept the incoming changes without prompting
793 """ 793 """
794 if matcher is not None and matcher.always(): 794 if matcher is not None and matcher.always():
795 matcher = None 795 matcher = None
796 796
797 copy, movewithdir, diverge, renamedelete = {}, {}, {}, {} 797 copy, movewithdir, diverge, renamedelete, dirmove = {}, {}, {}, {}, {}
798 798
799 # manifests fetched in order are going to be faster, so prime the caches 799 # manifests fetched in order are going to be faster, so prime the caches
800 [x.manifest() for x in 800 [x.manifest() for x in
801 sorted(wctx.parents() + [p2, pa], key=lambda x: x.rev())] 801 sorted(wctx.parents() + [p2, pa], key=lambda x: x.rev())]
802 802
803 if followcopies: 803 if followcopies:
804 ret = copies.mergecopies(repo, wctx, p2, pa) 804 ret = copies.mergecopies(repo, wctx, p2, pa)
805 copy, movewithdir, diverge, renamedelete = ret 805 copy, movewithdir, diverge, renamedelete, dirmove = ret
806 806
807 repo.ui.note(_("resolving manifests\n")) 807 repo.ui.note(_("resolving manifests\n"))
808 repo.ui.debug(" branchmerge: %s, force: %s, partial: %s\n" 808 repo.ui.debug(" branchmerge: %s, force: %s, partial: %s\n"
809 % (bool(branchmerge), bool(force), bool(matcher))) 809 % (bool(branchmerge), bool(force), bool(matcher)))
810 repo.ui.debug(" ancestor: %s, local: %s, remote: %s\n" % (pa, wctx, p2)) 810 repo.ui.debug(" ancestor: %s, local: %s, remote: %s\n" % (pa, wctx, p2))
919 actions[f] = ('c', (fl2,), "remote created") 919 actions[f] = ('c', (fl2,), "remote created")
920 else: 920 else:
921 actions[f] = ('cm', (fl2, pa.node()), 921 actions[f] = ('cm', (fl2, pa.node()),
922 "remote created, get or merge") 922 "remote created, get or merge")
923 elif n2 != ma[f]: 923 elif n2 != ma[f]:
924 if acceptremote: 924 df = None
925 for d in dirmove:
926 if f.startswith(d):
927 # new file added in a directory that was moved
928 df = dirmove[d] + f[len(d):]
929 break
930 if df in m1:
931 actions[df] = ('m', (df, f, f, False, pa.node()),
932 "local directory rename - respect move from " + f)
933 elif acceptremote:
925 actions[f] = ('c', (fl2,), "remote recreating") 934 actions[f] = ('c', (fl2,), "remote recreating")
926 else: 935 else:
927 actions[f] = ('dc', (None, f, f, False, pa.node()), 936 actions[f] = ('dc', (None, f, f, False, pa.node()),
928 "prompt deleted/changed") 937 "prompt deleted/changed")
929 938