merge: store ACTION_KEEP_ABSENT when we are keeping the file absent locally
If a file is not present on the local side, and it's unchanged between other
merge parent and ancestor, we don't use any action, neither we had a if-else
branch for that condition. This leads to bid-merge missing that there is a
such action possible which can be performed.
As test changes demonstrate, we now choose the locally deleted side instead
of choosing the remote one consistently. This is also wrong behavior which is
resulted because of missing possible action. It will be fixed in next patch.
This whole logic is not acurrate as we should prompt user on what to do
when this kind of criss-cross merge is in play.
Differential Revision: https://phab.mercurial-scm.org/D8940
Minimal hgk check
$ echo "[extensions]" >> $HGRCPATH
$ echo "hgk=" >> $HGRCPATH
$ hg init repo
$ cd repo
$ echo a > a
$ hg ci -Am adda
adding a
$ hg debug-cat-file commit 0
tree a0c8bcbbb45c
parent 000000000000
author test 0 0
revision 0
branch default
phase draft
adda
$ echo b > b
$ hg ci -Am addb
adding b
$ hg log -T '{node}\n'
102a90ea7b4a3361e4082ed620918c261189a36a
07f4944404050f47db2e5c5071e0e84e7a27bba9
$ hg debug-diff-tree 07f494440405 102a90ea7b4a
:000000 100664 000000000000 1e88685f5dde N b b
$ hg debug-diff-tree 07f494440405 102a90ea7b4a --patch
diff --git a/b b/b
new file mode 100644
--- /dev/null
+++ b/b
@@ -0,0 +1,1 @@
+b
Ensure that diff-tree output isn't affected by diffopts
$ hg --config diff.noprefix=True debug-diff-tree 07f494440405 102a90ea7b4a
:000000 100664 000000000000 1e88685f5dde N b b
$ hg --config diff.noprefix=True debug-diff-tree --patch 07f494440405 102a90ea7b4a
diff --git a/b b/b
new file mode 100644
--- /dev/null
+++ b/b
@@ -0,0 +1,1 @@
+b
$ cd ..