##// END OF EJS Templates
merge: duplicate 'if f in copied' into each branch
merge: duplicate 'if f in copied' into each branch

File last commit:

r23464:73d4f655 default
r23474:9f4ac44a default
Show More
test-rename-dir-merge.t
223 lines | 5.0 KiB | text/troff | Tads3Lexer
/ tests / test-rename-dir-merge.t
$ hg init t
$ cd t
$ mkdir a
$ echo foo > a/a
$ echo bar > a/b
$ hg ci -Am "0"
adding a/a
adding a/b
$ hg co -C 0
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg mv a b
moving a/a to b/a (glob)
moving a/b to b/b (glob)
$ hg ci -m "1 mv a/ b/"
$ hg co -C 0
2 files updated, 0 files merged, 2 files removed, 0 files unresolved
$ echo baz > a/c
$ echo quux > a/d
$ hg add a/c
$ hg ci -m "2 add a/c"
created new head
$ hg merge --debug 1
searching for copies back to rev 1
unmatched files in local:
a/c
unmatched files in other:
b/a
b/b
all copies found (* = to merge, ! = divergent, % = renamed and deleted):
src: 'a/a' -> dst: 'b/a'
src: 'a/b' -> dst: 'b/b'
checking for directory renames
discovered dir src: 'a/' -> dst: 'b/'
pending file src: 'a/c' -> dst: 'b/c'
resolving manifests
branchmerge: True, force: False, partial: False
ancestor: f9b20c0d4c51, local: ce36d17b18fb+, remote: 397f8b00a740
a/a: other deleted -> r
removing a/a
a/b: other deleted -> r
removing a/b
updating: a/b 2/5 files (40.00%)
b/a: remote created -> g
getting b/a
b/b: remote created -> g
getting b/b
updating: b/b 4/5 files (80.00%)
b/c: remote directory rename - move from a/c -> dm
updating: b/c 5/5 files (100.00%)
moving a/c to b/c (glob)
3 files updated, 0 files merged, 2 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ echo a/* b/*
a/d b/a b/b b/c
$ hg st -C
M b/a
M b/b
A b/c
a/c
R a/a
R a/b
R a/c
? a/d
$ hg ci -m "3 merge 2+1"
$ hg debugrename b/c
b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88 (glob)
$ hg co -C 1
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg merge --debug 2
searching for copies back to rev 1
unmatched files in local:
b/a
b/b
unmatched files in other:
a/c
all copies found (* = to merge, ! = divergent, % = renamed and deleted):
src: 'a/a' -> dst: 'b/a'
src: 'a/b' -> dst: 'b/b'
checking for directory renames
discovered dir src: 'a/' -> dst: 'b/'
pending file src: 'a/c' -> dst: 'b/c'
resolving manifests
branchmerge: True, force: False, partial: False
ancestor: f9b20c0d4c51, local: 397f8b00a740+, remote: ce36d17b18fb
b/c: local directory rename - get from a/c -> dg
updating: b/c 1/1 files (100.00%)
getting a/c to b/c
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ echo a/* b/*
a/d b/a b/b b/c
$ hg st -C
A b/c
a/c
? a/d
$ hg ci -m "4 merge 1+2"
created new head
$ hg debugrename b/c
b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88 (glob)
Local directory rename with conflicting file added in remote source directory
and untracked in local target directory.
BROKEN: the uncommitted file is overwritten; we should abort
$ hg co -qC 1
$ echo target > b/c
$ hg merge 2
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg st -A
A b/c
a/c
? a/d
C b/a
C b/b
$ cat b/c
baz
Local directory rename with conflicting file added in remote source directory
and committed in local target directory.
BROKEN: the local file is overwritten; it should be merged
$ hg co -qC 1
$ echo target > b/c
$ hg add b/c
$ hg commit -qm 'new file in target directory'
$ hg merge 2
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg st -A
A b/c
a/c
? a/d
C b/a
C b/b
$ cat b/c
baz
Remote directory rename with conflicting file added in remote target directory
and committed in local source directory.
BROKEN: the remote is ignored; it should be merged
$ hg co -qC 2
$ rm b/c
$ hg st -A
? a/d
C a/a
C a/b
C a/c
$ hg merge 5
3 files updated, 0 files merged, 2 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg st -A
M b/a
M b/b
A b/c
a/c
R a/a
R a/b
R a/c
? a/d
$ cat b/c
baz
Second scenario with two repos:
$ cd ..
$ hg init r1
$ cd r1
$ mkdir a
$ echo foo > a/f
$ hg add a
adding a/f (glob)
$ hg ci -m "a/f == foo"
$ cd ..
$ hg clone r1 r2
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd r2
$ hg mv a b
moving a/f to b/f (glob)
$ echo foo1 > b/f
$ hg ci -m" a -> b, b/f == foo1"
$ cd ..
$ cd r1
$ mkdir a/aa
$ echo bar > a/aa/g
$ hg add a/aa
adding a/aa/g (glob)
$ hg ci -m "a/aa/g"
$ hg pull ../r2
pulling from ../r2
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
$ hg merge
2 files updated, 0 files merged, 1 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg st -C
M b/f
A b/aa/g
a/aa/g
R a/aa/g
R a/f
$ cd ..