##// END OF EJS Templates
subrepo: calculate _relpath for hgsubrepo based on self instead of parent...
subrepo: calculate _relpath for hgsubrepo based on self instead of parent Prior to 105758d1b37b, the subrelpath() (now _relpath) for hgsubrepo was calculated by removing the root path of the outermost repo from the root path of the subrepo. Since the root paths use platform specific separators, and the relative path is printed by various commands, the output of these commands require a glob (and check-code.py enforces this). In an effort to be generic to all subrepos, 105758d1b37b started calculating this path based on the parent repo, and then joining the subrepo path in .hgsub. One of the tests in test-subrepo.t creates a subrepo inside a directory, so the path being joined contained '/' instead of '\'. This made the test fail with a '~' status, because the glob is unnecessary[1]. Removing them made the test work, but then check-code complains. We can't just drop the check-code rule, because sub-subrepos are still joined with '\'. Presumably the other subrepo types have this issue as well, but there likely isn't a test with git or svn repos inside a subdirectory. This simply restores the exact _relpath value (and output) for hgsubrepos prior to 105758d1b37b. [1] http://www.selenic.com/pipermail/mercurial-devel/2015-April/068720.html

File last commit:

r23840:ddc17eaf default
r24786:56e15db9 default
Show More
test-merge-remove.t
114 lines | 2.1 KiB | text/troff | Tads3Lexer
$ hg init
$ echo foo > foo
$ echo bar > bar
$ hg ci -qAm 'add foo bar'
$ echo foo2 >> foo
$ echo bleh > bar
$ hg ci -m 'change foo bar'
$ hg up -qC 0
$ hg mv foo foo1
$ echo foo1 > foo1
$ hg cat foo >> foo1
$ hg ci -m 'mv foo foo1'
created new head
$ hg merge
merging foo1 and foo to foo1
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg debugstate --nodates
m 0 -2 unset bar
m 0 -2 unset foo1
copy: foo -> foo1
$ hg st -q
M bar
M foo1
Removing foo1 and bar:
$ cp foo1 F
$ cp bar B
$ hg rm -f foo1 bar
$ hg debugstate --nodates
r 0 -1 set bar
r 0 -1 set foo1
copy: foo -> foo1
$ hg st -qC
R bar
R foo1
Re-adding foo1 and bar:
$ cp F foo1
$ cp B bar
$ hg add -v foo1 bar
adding bar
adding foo1
$ hg debugstate --nodates
n 0 -2 unset bar
n 0 -2 unset foo1
copy: foo -> foo1
$ hg st -qC
M bar
M foo1
foo
Reverting foo1 and bar:
$ hg revert -vr . foo1 bar
saving current version of bar as bar.orig
reverting bar
saving current version of foo1 as foo1.orig
reverting foo1
$ hg debugstate --nodates
n 0 -2 unset bar
n 0 -2 unset foo1
copy: foo -> foo1
$ hg st -qC
M bar
M foo1
foo
$ hg diff
Merge should not overwrite local file that is untracked after remove
$ rm *
$ hg up -qC
$ hg rm bar
$ hg ci -m 'remove bar'
$ echo 'memories of buried pirate treasure' > bar
$ hg merge
bar: untracked file differs
abort: untracked files in working directory differ from files in requested revision
[255]
$ cat bar
memories of buried pirate treasure
Those who use force will lose
$ hg merge -f
remote changed bar which local deleted
use (c)hanged version or leave (d)eleted? c
merging foo1 and foo to foo1
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ cat bar
bleh
$ hg st
M bar
M foo1