merge: move initial handling of mergeactions near to later one
We build `mergeactions` in the beginning and use it in end. Let's build it just
before where it will be used. Helps making code much easier to understand.
Differential Revision: https://phab.mercurial-scm.org/D8983
--- a/mercurial/merge.py Thu Jun 25 13:16:55 2020 +0530
+++ b/mercurial/merge.py Thu Sep 03 13:25:29 2020 +0530
@@ -1407,49 +1407,6 @@
# mergestate so that it can be reused on commit
ms.addcommitinfo(f, op)
- moves = []
-
- # 'cd' and 'dc' actions are treated like other merge conflicts
- mergeactions = list(
- mresult.getactions(
- [
- mergestatemod.ACTION_CHANGED_DELETED,
- mergestatemod.ACTION_DELETED_CHANGED,
- mergestatemod.ACTION_MERGE,
- ],
- sort=True,
- )
- )
- for f, args, msg in mergeactions:
- f1, f2, fa, move, anc = args
- if f == b'.hgsubstate': # merged internally
- continue
- if f1 is None:
- fcl = filemerge.absentfilectx(wctx, fa)
- else:
- repo.ui.debug(b" preserving %s for resolve of %s\n" % (f1, f))
- fcl = wctx[f1]
- if f2 is None:
- fco = filemerge.absentfilectx(mctx, fa)
- else:
- fco = mctx[f2]
- actx = repo[anc]
- if fa in actx:
- fca = actx[fa]
- else:
- # TODO: move to absentfilectx
- fca = repo.filectx(f1, fileid=nullrev)
- ms.add(fcl, fco, fca, f)
- if f1 != f and move:
- moves.append(f1)
-
- # remove renamed files after safely stored
- for f in moves:
- if wctx[f].lexists():
- repo.ui.debug(b"removing %s\n" % f)
- wctx[f].audit()
- wctx[f].remove()
-
numupdates = mresult.len() - mresult.len(mergeresult.NO_OP_ACTIONS)
progress = repo.ui.makeprogress(
_(b'updating'), unit=_(b'files'), total=numupdates
@@ -1597,6 +1554,49 @@
wctx[f].audit()
wctx[f].setflags(b'l' in flags, b'x' in flags)
+ moves = []
+
+ # 'cd' and 'dc' actions are treated like other merge conflicts
+ mergeactions = list(
+ mresult.getactions(
+ [
+ mergestatemod.ACTION_CHANGED_DELETED,
+ mergestatemod.ACTION_DELETED_CHANGED,
+ mergestatemod.ACTION_MERGE,
+ ],
+ sort=True,
+ )
+ )
+ for f, args, msg in mergeactions:
+ f1, f2, fa, move, anc = args
+ if f == b'.hgsubstate': # merged internally
+ continue
+ if f1 is None:
+ fcl = filemerge.absentfilectx(wctx, fa)
+ else:
+ repo.ui.debug(b" preserving %s for resolve of %s\n" % (f1, f))
+ fcl = wctx[f1]
+ if f2 is None:
+ fco = filemerge.absentfilectx(mctx, fa)
+ else:
+ fco = mctx[f2]
+ actx = repo[anc]
+ if fa in actx:
+ fca = actx[fa]
+ else:
+ # TODO: move to absentfilectx
+ fca = repo.filectx(f1, fileid=nullrev)
+ ms.add(fcl, fco, fca, f)
+ if f1 != f and move:
+ moves.append(f1)
+
+ # remove renamed files after safely stored
+ for f in moves:
+ if wctx[f].lexists():
+ repo.ui.debug(b"removing %s\n" % f)
+ wctx[f].audit()
+ wctx[f].remove()
+
# these actions updates the file
updated = mresult.len(
(
--- a/tests/test-graft.t Thu Jun 25 13:16:55 2020 +0530
+++ b/tests/test-graft.t Thu Sep 03 13:25:29 2020 +0530
@@ -247,9 +247,9 @@
resolving manifests
branchmerge: True, force: True, partial: False
ancestor: 4c60f11aa304, local: 1905859650ec+, remote: 9c233e8e184d
- preserving e for resolve of e
d: remote is newer -> g
getting d
+ preserving e for resolve of e
e: versions differ -> m (premerge)
picked tool ':merge' for e (binary False symlink False changedelete False)
merging e
--- a/tests/test-merge-criss-cross.t Thu Jun 25 13:16:55 2020 +0530
+++ b/tests/test-merge-criss-cross.t Thu Sep 03 13:25:29 2020 +0530
@@ -78,9 +78,9 @@
resolving manifests
branchmerge: True, force: False, partial: False
ancestor: 0f6b37dbe527, local: 3b08d01b0ab5+, remote: adfe50279922
- preserving f2 for resolve of f2
f1: remote is newer -> g
getting f1
+ preserving f2 for resolve of f2
f2: versions differ -> m (premerge)
picked tool ':dump' for f2 (binary False symlink False changedelete False)
merging f2
--- a/tests/test-rename-merge1.t Thu Jun 25 13:16:55 2020 +0530
+++ b/tests/test-rename-merge1.t Thu Sep 03 13:25:29 2020 +0530
@@ -40,10 +40,10 @@
note: possible conflict - a2 was renamed multiple times to:
b2
c2
+ b2: remote created -> g
+ getting b2
preserving a for resolve of b
removing a
- b2: remote created -> g
- getting b2
b: remote moved from a -> m (premerge)
picked tool ':merge' for b (binary False symlink False changedelete False)
merging a and b to b
--- a/tests/test-rename-merge2.t Thu Jun 25 13:16:55 2020 +0530
+++ b/tests/test-rename-merge2.t Thu Sep 03 13:25:29 2020 +0530
@@ -89,6 +89,7 @@
preserving rev for resolve of rev
starting 4 threads for background file closing (?)
b: remote copied from a -> m (premerge)
+ starting 4 threads for background file closing (?)
picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob)
merging a and b to b
my b@e300d1c794ec+ other b@4ce40f5aca24 ancestor a@924404dff337
@@ -124,10 +125,10 @@
resolving manifests
branchmerge: True, force: False, partial: False
ancestor: 924404dff337, local: 86a2aa42fc76+, remote: f4db7e329e71
+ a: remote is newer -> g
+ getting a
preserving b for resolve of b
preserving rev for resolve of rev
- a: remote is newer -> g
- getting a
b: local copied/moved from a -> m (premerge)
picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob)
merging b and a to b
@@ -241,9 +242,9 @@
resolving manifests
branchmerge: True, force: False, partial: False
ancestor: 924404dff337, local: 94b33a1b7f2d+, remote: 4ce40f5aca24
- preserving rev for resolve of rev
b: remote created -> g
getting b
+ preserving rev for resolve of rev
rev: versions differ -> m (premerge)
picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob)
merging rev
@@ -306,11 +307,11 @@
resolving manifests
branchmerge: True, force: False, partial: False
ancestor: 924404dff337, local: 94b33a1b7f2d+, remote: bdb19105162a
- preserving rev for resolve of rev
a: other deleted -> r
removing a
b: remote created -> g
getting b
+ preserving rev for resolve of rev
rev: versions differ -> m (premerge)
picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob)
merging rev
@@ -422,9 +423,9 @@
note: possible conflict - a was renamed multiple times to:
b
c
- preserving rev for resolve of rev
c: remote created -> g
getting c
+ preserving rev for resolve of rev
rev: versions differ -> m (premerge)
picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob)
merging rev
@@ -493,10 +494,10 @@
resolving manifests
branchmerge: True, force: False, partial: False
ancestor: 924404dff337, local: 59318016310c+, remote: bdb19105162a
+ a: other deleted -> r
+ removing a
preserving b for resolve of b
preserving rev for resolve of rev
- a: other deleted -> r
- removing a
starting 4 threads for background file closing (?)
b: both created -> m (premerge)
picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob)
@@ -534,10 +535,10 @@
resolving manifests
branchmerge: True, force: False, partial: False
ancestor: 924404dff337, local: 86a2aa42fc76+, remote: 8dbce441892a
+ a: remote is newer -> g
+ getting a
preserving b for resolve of b
preserving rev for resolve of rev
- a: remote is newer -> g
- getting a
b: both renamed from a -> m (premerge)
picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob)
merging b
@@ -571,10 +572,10 @@
resolving manifests
branchmerge: True, force: False, partial: False
ancestor: 924404dff337, local: 59318016310c+, remote: bdb19105162a
+ a: other deleted -> r
+ removing a
preserving b for resolve of b
preserving rev for resolve of rev
- a: other deleted -> r
- removing a
starting 4 threads for background file closing (?)
b: both created -> m (premerge)
picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob)
@@ -612,10 +613,10 @@
resolving manifests
branchmerge: True, force: False, partial: False
ancestor: 924404dff337, local: 86a2aa42fc76+, remote: 8dbce441892a
+ a: remote is newer -> g
+ getting a
preserving b for resolve of b
preserving rev for resolve of rev
- a: remote is newer -> g
- getting a
b: both renamed from a -> m (premerge)
picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob)
merging b
@@ -653,6 +654,7 @@
preserving rev for resolve of rev
starting 4 threads for background file closing (?)
b: both renamed from a -> m (premerge)
+ starting 4 threads for background file closing (?)
picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob)
merging b
my b@0b76e65c8289+ other b@4ce40f5aca24 ancestor a@924404dff337
@@ -848,10 +850,10 @@
resolving manifests
branchmerge: True, force: False, partial: False
ancestor: 924404dff337, local: 02963e448370+, remote: 2b958612230f
+ c: remote created -> g
+ getting c
preserving b for resolve of b
preserving rev for resolve of rev
- c: remote created -> g
- getting c
b: local copied/moved from a -> m (premerge)
picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob)
merging b and a to b
--- a/tests/test-up-local-change.t Thu Jun 25 13:16:55 2020 +0530
+++ b/tests/test-up-local-change.t Thu Sep 03 13:25:29 2020 +0530
@@ -43,9 +43,9 @@
resolving manifests
branchmerge: False, force: False, partial: False
ancestor: c19d34741b0a, local: c19d34741b0a+, remote: 1e71731e6fbb
- preserving a for resolve of a
b: remote created -> g
getting b
+ preserving a for resolve of a
a: versions differ -> m (premerge)
picked tool 'true' for a (binary False symlink False changedelete False)
merging a
@@ -68,9 +68,9 @@
resolving manifests
branchmerge: False, force: False, partial: False
ancestor: 1e71731e6fbb, local: 1e71731e6fbb+, remote: c19d34741b0a
- preserving a for resolve of a
b: other deleted -> r
removing b
+ preserving a for resolve of a
starting 4 threads for background file closing (?)
a: versions differ -> m (premerge)
picked tool 'true' for a (binary False symlink False changedelete False)
@@ -92,9 +92,9 @@
resolving manifests
branchmerge: False, force: False, partial: False
ancestor: c19d34741b0a, local: c19d34741b0a+, remote: 1e71731e6fbb
- preserving a for resolve of a
b: remote created -> g
getting b
+ preserving a for resolve of a
a: versions differ -> m (premerge)
picked tool 'true' for a (binary False symlink False changedelete False)
merging a