mergecopies: invoke _computenonoverlap for both base and tca during merges
The algorithm of _checkcopies can only walk backwards in the DAG, never
forward. Because of this, the two _checkcopies patches need to run from
their respective endpoints to the TCA to cover the entire subgraph where
the merge is being performed. However, detection of files new in both
endpoints, as well as directory rename detection, need to run with respect
to the merge base, so we need lists of new files both from the TCA's and
the merge base's viewpoint to correctly detect renames in a graft-like
merge scenario.
(Series reworked by Pierre-Yves David)
$ echo "[extensions]" >> $HGRCPATH
$ echo "mq=" >> $HGRCPATH
$ hg init a
$ cd a
$ echo 'base' > base
$ hg ci -Ambase
adding base
$ hg qnew -mmqbase mqbase
$ hg qrename mqbase renamed
$ mkdir .hg/patches/foo
$ hg qrename renamed foo
$ hg qseries
foo/renamed
$ ls .hg/patches/foo
renamed
$ mkdir .hg/patches/bar
$ hg qrename foo/renamed bar
$ hg qseries
bar/renamed
$ ls .hg/patches/bar
renamed
$ hg qrename bar/renamed baz
$ hg qseries
baz
$ ls .hg/patches/baz
.hg/patches/baz
$ hg qrename baz new/dir
$ hg qseries
new/dir
$ ls .hg/patches/new/dir
.hg/patches/new/dir
$ cd ..
Test patch being renamed before committed:
$ hg init b
$ cd b
$ hg qinit -c
$ hg qnew x
$ hg qrename y
$ hg qcommit -m rename
$ cd ..
Test overlapping renames (issue2388)
$ hg init c
$ cd c
$ hg qinit -c
$ echo a > a
$ hg add
adding a
$ hg qnew patcha
$ echo b > b
$ hg add
adding b
$ hg qnew patchb
$ hg ci --mq -m c1
$ hg qrename patchb patchc
$ hg qrename patcha patchb
$ hg st --mq
M patchb
M series
A patchc
R patcha
$ cd ..
Test renames with mq repo (issue2097)
$ hg init issue2097
$ cd issue2097
$ hg qnew p0
$ (cd .hg/patches && hg init)
$ hg qren p0 p1
$ hg debugstate --mq
$ hg ci --mq -mq0
nothing changed
[1]
$ cd ..
Test renaming to a folded patch (issue3058)
$ hg init issue3058
$ cd issue3058
$ hg init --mq
$ echo a > a
$ hg add a
$ hg qnew adda
$ echo b >> a
$ hg qnew addb
$ hg qpop
popping addb
now at: adda
$ hg ci --mq -m "save mq"
$ hg qfold addb
$ hg qmv addb
$ cat .hg/patches/addb
# HG changeset patch
# Parent 0000000000000000000000000000000000000000
diff -r 000000000000 a
--- /dev/null * (glob)
+++ b/a * (glob)
@@ -0,0 +1,2 @@
+a
+b
$ cd ..