copies: eliminate criss-crosses when chaining
Before the copies refactoring, we declared that if a and b were
present in source and destination, we ignored copies between them. The
refactored code could however report b was a copy of a and vice versa
in a situation where we looked for differences between two identical
changesets that copy a to b.
y
/
x
\
y'
run only on case-insensitive filesystems
$ "$TESTDIR/hghave" icasefs || exit 80
################################
test for branch merging
################################
$ hg init repo1
$ cd repo1
create base revision
$ echo base > base.txt
$ hg add base.txt
$ hg commit -m 'base'
add same file in different case on both heads
$ echo a > a.txt
$ hg add a.txt
$ hg commit -m 'add a.txt'
$ hg update 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo A > A.TXT
$ hg add A.TXT
$ hg commit -m 'add A.TXT'
created new head
merge another, and fail with case-folding collision
$ hg merge
abort: case-folding collision between a.txt and A.TXT
[255]
check clean-ness of working directory
$ hg status
$ hg parents --template '{rev}\n'
2
$ cd ..
################################
test for linear updates
################################
$ hg init repo2
$ cd repo2
create base revision (rev:0)
$ hg import --bypass --exact - <<EOF
> # HG changeset patch
> # User null
> # Date 1 0
> # Node ID e1bdf414b0ea9c831fd3a14e94a0a18e1410f98b
> # Parent 0000000000000000000000000000000000000000
> add a
>
> diff --git a/a b/a
> new file mode 100644
> --- /dev/null
> +++ b/a
> @@ -0,0 +1,3 @@
> +this is line 1
> +this is line 2
> +this is line 3
> EOF
applying patch from stdin
create rename revision (rev:1)
$ hg import --bypass --exact - <<EOF
> # HG changeset patch
> # User null
> # Date 1 0
> # Node ID 9dca9f19bb91851bc693544b598b0740629edfad
> # Parent e1bdf414b0ea9c831fd3a14e94a0a18e1410f98b
> rename a to A
>
> diff --git a/a b/A
> rename from a
> rename to A
> EOF
applying patch from stdin
update to base revision, and modify 'a'
$ hg update 0
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo 'this is added line' >> a
update to current tip linearly
$ hg update 1
merging a and A to A
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
check status and contents of file
$ hg status -A
M A
$ cat A
this is line 1
this is line 2
this is line 3
this is added line