mirror of
https://github.com/facebook/sapling.git
synced 2024-10-12 01:39:21 +03:00
da0b66a8ec
Summary: This solves an issue vipannalla saw that the heuristics logic behaves incorrectly when running `hg up -C c4a88583; hg graft 23001ead`. The file `great_persons_on_ex_civilization-inl.h` would be marked as "unresolved" and removed from the working copy potentially due to other mergedriver actions, while it should be merged cleanly and do not appear in mergestate at all. After debugging, the file was only renamed on one side, and not changed on the other side. In the heuristics code path, the file was reported as copied and confused the callsite. Reviewed By: singhsrb Differential Revision: D14195031 fbshipit-source-id: 0602fd56b75219f851c0175debfe72c4d49d652d
243 lines
5.7 KiB
Perl
243 lines
5.7 KiB
Perl
$ . "$TESTDIR/copytrace.sh"
|
|
$ cat >> $HGRCPATH << EOF
|
|
> [extensions]
|
|
> amend=
|
|
> copytrace=
|
|
> rebase=
|
|
> shelve=
|
|
> [experimental]
|
|
> copytrace=off
|
|
> evolution=createmarkers
|
|
> EOF
|
|
|
|
Test amend copytrace
|
|
$ hg init repo
|
|
$ initclient repo
|
|
$ cd repo
|
|
$ echo x > x
|
|
$ hg add x
|
|
$ hg ci -m initial
|
|
$ echo a > a
|
|
$ hg add a
|
|
$ hg ci -m "create a"
|
|
$ echo b > a
|
|
$ hg ci -qm "mod a"
|
|
$ hg up -q ".^"
|
|
$ hg mv a b
|
|
$ hg amend
|
|
hint[amend-restack]: descendants of 9f815da0cfb3 are left behind - use 'hg restack' to rebase them
|
|
hint[hint-ack]: use 'hg hint --ack amend-restack' to silence these hints
|
|
$ hg rebase --restack
|
|
rebasing 2:ad25e018afa9 "mod a"
|
|
merging b and a to b
|
|
$ ls
|
|
b
|
|
x
|
|
$ cat b
|
|
a
|
|
$ hg update 4
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ cat b
|
|
b
|
|
$ cd ..
|
|
$ rm -rf repo
|
|
|
|
Test amend copytrace with multiple stacked commits
|
|
$ hg init repo
|
|
$ initclient repo
|
|
$ cd repo
|
|
$ echo x > x
|
|
$ hg add x
|
|
$ hg ci -m initial
|
|
$ echo a > a
|
|
$ echo b > b
|
|
$ echo c > c
|
|
$ hg add a b c
|
|
$ hg ci -m "create a b c"
|
|
$ echo a1 > a
|
|
$ hg ci -qm "mod a"
|
|
$ echo b2 > b
|
|
$ hg ci -qm "mod b"
|
|
$ echo c3 > c
|
|
$ hg ci -qm "mod c"
|
|
$ hg bookmark test-top
|
|
$ hg up -q '.~3'
|
|
$ hg mv a a1
|
|
$ hg mv b b2
|
|
$ hg amend
|
|
hint[amend-restack]: descendants of ec8c441da632 are left behind - use 'hg restack' to rebase them
|
|
hint[hint-ack]: use 'hg hint --ack amend-restack' to silence these hints
|
|
$ hg mv c c3
|
|
$ hg amend
|
|
$ hg rebase --restack
|
|
rebasing 2:797127d4e250 "mod a"
|
|
merging a1 and a to a1
|
|
rebasing 3:e2aabbfe749a "mod b"
|
|
merging b2 and b to b2
|
|
rebasing 4:4f8d18558559 "mod c" (test-top)
|
|
merging c3 and c to c3
|
|
$ hg up test-top
|
|
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
(activating bookmark test-top)
|
|
$ cat a1 b2 c3
|
|
a1
|
|
b2
|
|
c3
|
|
$ cd ..
|
|
$ rm -rf repo
|
|
|
|
Test amend copytrace with multiple renames of the same file
|
|
$ hg init repo
|
|
$ initclient repo
|
|
$ cd repo
|
|
$ echo x > x
|
|
$ hg add x
|
|
$ hg ci -m initial
|
|
$ echo a > a
|
|
$ hg add a
|
|
$ hg ci -m "create a"
|
|
$ echo b > a
|
|
$ hg ci -qm "mod a"
|
|
$ hg up -q ".^"
|
|
$ hg mv a b
|
|
$ hg amend
|
|
hint[amend-restack]: descendants of 9f815da0cfb3 are left behind - use 'hg restack' to rebase them
|
|
hint[hint-ack]: use 'hg hint --ack amend-restack' to silence these hints
|
|
$ hg mv b c
|
|
$ hg amend
|
|
$ hg rebase --restack
|
|
rebasing 2:ad25e018afa9 "mod a"
|
|
merging c and a to c
|
|
$ hg update 5
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ cat c
|
|
b
|
|
$ cd ..
|
|
$ rm -rf repo
|
|
|
|
Test amend copytrace with copies
|
|
$ hg init repo
|
|
$ initclient repo
|
|
$ cd repo
|
|
$ echo x > x
|
|
$ hg add x
|
|
$ hg ci -m initial
|
|
$ echo a > a
|
|
$ echo i > i
|
|
$ hg add a i
|
|
$ hg ci -m "create a i"
|
|
$ echo b > a
|
|
$ hg ci -qm "mod a"
|
|
$ echo j > i
|
|
$ hg ci -qm "mod i"
|
|
$ hg bookmark test-top
|
|
$ hg up -q ".~2"
|
|
$ hg cp a b
|
|
$ hg amend
|
|
hint[amend-restack]: descendants of 0157114ee1b3 are left behind - use 'hg restack' to rebase them
|
|
hint[hint-ack]: use 'hg hint --ack amend-restack' to silence these hints
|
|
$ hg cp i j
|
|
$ hg amend
|
|
$ hg cp b c
|
|
$ hg amend
|
|
$ hg rebase --restack
|
|
rebasing 2:6938f0d82b23 "mod a"
|
|
rebasing 3:df8dfcb1d237 "mod i" (test-top)
|
|
$ hg up test-top
|
|
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
(activating bookmark test-top)
|
|
$ cat a b c i j
|
|
b
|
|
a
|
|
a
|
|
j
|
|
i
|
|
$ cd ..
|
|
$ rm -rf repo
|
|
|
|
Test rebase after amend deletion of copy
|
|
$ hg init repo
|
|
$ initclient repo
|
|
$ cd repo
|
|
$ echo x > x
|
|
$ hg add x
|
|
$ hg ci -m initial
|
|
$ echo a > a
|
|
$ hg add a
|
|
$ hg ci -m "create a"
|
|
$ echo b > a
|
|
$ hg ci -qm "mod a"
|
|
$ hg up -q ".^"
|
|
$ hg cp a b
|
|
$ hg amend
|
|
hint[amend-restack]: descendants of 9f815da0cfb3 are left behind - use 'hg restack' to rebase them
|
|
hint[hint-ack]: use 'hg hint --ack amend-restack' to silence these hints
|
|
$ hg rm b
|
|
$ hg amend
|
|
$ hg rebase --restack
|
|
rebasing 2:ad25e018afa9 "mod a"
|
|
$ cd ..
|
|
$ rm -rf repo
|
|
|
|
Test failure to rebase deletion after rename
|
|
$ hg init repo
|
|
$ initclient repo
|
|
$ cd repo
|
|
$ echo x > x
|
|
$ hg add x
|
|
$ hg ci -m initial
|
|
$ echo a > a
|
|
$ hg add a
|
|
$ hg ci -m "create a"
|
|
$ echo b > a
|
|
$ hg ci -qm "mod a"
|
|
$ hg rm a
|
|
$ hg ci -m "delete a"
|
|
$ hg up -q ".~2"
|
|
$ hg mv a b
|
|
$ hg amend
|
|
hint[amend-restack]: descendants of 9f815da0cfb3 are left behind - use 'hg restack' to rebase them
|
|
hint[hint-ack]: use 'hg hint --ack amend-restack' to silence these hints
|
|
$ hg rebase --restack
|
|
rebasing 2:ad25e018afa9 "mod a"
|
|
merging b and a to b
|
|
rebasing 3:ba0395f0e180 "delete a"
|
|
abort: a@ba0395f0e180: not found in manifest!
|
|
[255]
|
|
$ hg rebase --abort
|
|
rebase aborted
|
|
$ cd ..
|
|
$ rm -rf repo
|
|
|
|
Test amend copytrace can be disabled
|
|
$ cat >> $HGRCPATH << EOF
|
|
> [copytrace]
|
|
> enableamendcopytrace=false
|
|
> EOF
|
|
$ hg init repo
|
|
$ initclient repo
|
|
$ cd repo
|
|
$ echo x > x
|
|
$ hg add x
|
|
$ hg ci -m initial
|
|
$ echo a > a
|
|
$ hg add a
|
|
$ hg ci -m "create a"
|
|
$ echo b > a
|
|
$ hg ci -qm "mod a"
|
|
$ hg up -q ".^"
|
|
$ hg mv a b
|
|
$ hg amend
|
|
hint[amend-restack]: descendants of 9f815da0cfb3 are left behind - use 'hg restack' to rebase them
|
|
hint[hint-ack]: use 'hg hint --ack amend-restack' to silence these hints
|
|
$ hg rebase --restack
|
|
rebasing 2:ad25e018afa9 "mod a"
|
|
other [source] changed a which local [dest] deleted
|
|
hint: if this message is due to a moved file, you can ask mercurial to attempt to automatically resolve this change by re-running with the --tracecopies flag, but this will significantly slow down the operation, so you will need to be patient.
|
|
Source control team is working on fixing this problem.
|
|
use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
|
|
unresolved conflicts (see hg resolve, then hg rebase --continue)
|
|
[1]
|
|
$ cd ..
|
|
$ rm -rf repo
|