[Updated] [+++ ] D8988: merge: store commitinfo if mergetool resolved a dc or cd conflict
pulkit (Pulkit Goyal)
phabricator at mercurial-scm.org
Wed Sep 9 13:46:21 UTC 2020
pulkit updated this revision to Diff 22587.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D8988?vs=22552&id=22587
BRANCH
default
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D8988/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D8988
AFFECTED FILES
mercurial/merge.py
tests/test-merge-criss-cross.t
CHANGE DETAILS
diff --git a/tests/test-merge-criss-cross.t b/tests/test-merge-criss-cross.t
--- a/tests/test-merge-criss-cross.t
+++ b/tests/test-merge-criss-cross.t
@@ -537,6 +537,16 @@
$ hg merge 'desc("updating-both-file")' -t :local
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
+ $ hg debugmergestate
+ local (working copy): 7801bc9b9899de5e304bd162cafde9b78e10ab9b
+ other (merge rev): 9b610631ab29024c5f44af7d2c19658ef8f8f071
+ file: the-file (state "r")
+ local path: the-file (hash 0000000000000000000000000000000000000000, flags "")
+ ancestor path: the-file (node 4b69178b9bdae28b651393b46e631427a72f217a)
+ other path: the-file (node 59e363a07dc876278f0e41756236f30213b6b460)
+ extra: FORCE_NEW_FILENODE = yes
+ extra: ancestorlinknode = 955800955977bd6c103836ee3e437276e940a589
+ extra: other-file (filenode-source = other)
$ hg ci -m "merge-deleting-the-file-from-deleted"
$ hg manifest
other-file
@@ -550,6 +560,15 @@
$ hg merge 'desc("delete-the-file")' -t :other
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
(branch merge, don't forget to commit)
+ $ hg debugmergestate
+ local (working copy): 9b610631ab29024c5f44af7d2c19658ef8f8f071
+ other (merge rev): 7801bc9b9899de5e304bd162cafde9b78e10ab9b
+ file: the-file (state "r")
+ local path: the-file (hash 6d2e02da5a9fe0691363dc6b573845fa271eaa35, flags "")
+ ancestor path: the-file (node 4b69178b9bdae28b651393b46e631427a72f217a)
+ other path: the-file (node 0000000000000000000000000000000000000000)
+ extra: FORCE_NEW_FILENODE = yes
+ extra: ancestorlinknode = 955800955977bd6c103836ee3e437276e940a589
$ hg ci -m "merge-deleting-the-file-from-updated"
created new head
$ hg manifest
@@ -564,6 +583,16 @@
$ hg merge 'desc("updating-both-file")' -t :other
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
+ $ hg debugmergestate
+ local (working copy): 7801bc9b9899de5e304bd162cafde9b78e10ab9b
+ other (merge rev): 9b610631ab29024c5f44af7d2c19658ef8f8f071
+ file: the-file (state "r")
+ local path: the-file (hash 0000000000000000000000000000000000000000, flags "")
+ ancestor path: the-file (node 4b69178b9bdae28b651393b46e631427a72f217a)
+ other path: the-file (node 59e363a07dc876278f0e41756236f30213b6b460)
+ extra: FORCE_NEW_FILENODE = yes
+ extra: ancestorlinknode = 955800955977bd6c103836ee3e437276e940a589
+ extra: other-file (filenode-source = other)
$ hg ci -m "merge-keeping-the-file-from-deleted"
created new head
$ hg manifest
@@ -581,6 +610,15 @@
$ hg merge 'desc("delete-the-file")' -t :local
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
+ $ hg debugmergestate
+ local (working copy): 9b610631ab29024c5f44af7d2c19658ef8f8f071
+ other (merge rev): 7801bc9b9899de5e304bd162cafde9b78e10ab9b
+ file: the-file (state "r")
+ local path: the-file (hash 6d2e02da5a9fe0691363dc6b573845fa271eaa35, flags "")
+ ancestor path: the-file (node 4b69178b9bdae28b651393b46e631427a72f217a)
+ other path: the-file (node 0000000000000000000000000000000000000000)
+ extra: FORCE_NEW_FILENODE = yes
+ extra: ancestorlinknode = 955800955977bd6c103836ee3e437276e940a589
$ hg ci -m "merge-keeping-the-file-from-updated"
created new head
$ hg manifest
diff --git a/mercurial/merge.py b/mercurial/merge.py
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
@@ -1690,6 +1690,27 @@
if not complete:
numupdates += 1
tocomplete.append((f, args, msg))
+ else:
+ action = mresult.getfile(f)[0]
+ if action in (
+ mergestatemod.ACTION_DELETED_CHANGED,
+ mergestatemod.ACTION_CHANGED_DELETED,
+ ):
+ # the merge was conflicting and either the mergetool
+ # choosed by the user or the user themselves on the prompt
+ # made a choice.
+ # If the changed file was kept, at commit we end up using
+ # the same filelog. This is not completely correct behavior
+ # as the new file post merge also represents that a
+ # conflicting change-delete merge was resolved in it's
+ # favor. Hence we will like to create a new filenode for
+ # that. Let's store this in mergestate extras
+ repo.ui.debug(
+ b"file %s had %s conflicts and mergetool resolved it, storing info in commitinfo\n"
+ % (f, action)
+ )
+
+ ms.addcommitinfo(f, {b'FORCE_NEW_FILENODE': b'yes'})
# merge
for f, args, msg in tocomplete:
To: pulkit, #hg-reviewers
Cc: mercurial-patches
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-patches/attachments/20200909/5c6cbb8f/attachment-0002.html>
More information about the Mercurial-patches
mailing list