opener: force copy on 'a'ppend if nlinks() returns 0 (
issue1922)
If pywin32 is not installed, 'os.lstat(pathname).st_nlink' is used for
nlinks(), which is always zero for all files on Windows.
To make sure we break up hardlinks if pywin32 is missing, we force
nlink = 2 if nlinks() returns < 1.
(this completely fixes
issue1922)
$ "$TESTDIR/hghave" svn svn-bindings || exit 80
$ fixpath()
> {
> tr '\\' /
> }
$ cat > $HGRCPATH <<EOF
> [extensions]
> convert =
> graphlog =
> EOF
$ svnadmin create svn-repo
$ svnadmin load -q svn-repo < "$TESTDIR/svn/move.svndump"
$ svnpath=`pwd | fixpath`
SVN wants all paths to start with a slash. Unfortunately,
Windows ones don't. Handle that.
$ expr "$svnpath" : "\/" > /dev/null
> if [ $? -ne 0 ]; then
> svnpath="/$svnpath"
> fi
> svnurl="file://$svnpath/svn-repo"
Convert trunk and branches
$ hg convert --datesort "$svnurl"/subproject A-hg
initializing destination A-hg repository
scanning source...
sorting...
converting...
13 createtrunk
12 moved1
11 moved1
10 moved2
9 changeb and rm d2
8 changeb and rm d2
7 moved1again
6 moved1again
5 copyfilefrompast
4 copydirfrompast
3 add d3
2 copy dir and remove subdir
1 add d4old
0 rename d4old into d4new
$ cd A-hg
$ hg glog --template '{rev} {desc|firstline} files: {files}\n'
o 13 rename d4old into d4new files: d4new/g d4old/g
|
o 12 add d4old files: d4old/g
|
o 11 copy dir and remove subdir files: d3/d31/e d4/d31/e d4/f
|
o 10 add d3 files: d3/d31/e d3/f
|
o 9 copydirfrompast files: d2/d
|
o 8 copyfilefrompast files: d
|
o 7 moved1again files: d1/b d1/c
|
| o 6 moved1again files:
| |
o | 5 changeb and rm d2 files: d1/b d2/d
| |
| o 4 changeb and rm d2 files: b
| |
o | 3 moved2 files: d2/d
| |
o | 2 moved1 files: d1/b d1/c
| |
| o 1 moved1 files: b c
|
o 0 createtrunk files:
Check move copy records
$ hg st --rev 12:13 --copies
A d4new/g
d4old/g
R d4old/g
Check branches
$ hg branches
default 13:* (glob)
d1 6:* (glob)
$ cd ..
$ mkdir test-replace
$ cd test-replace
$ svnadmin create svn-repo
$ svnadmin load -q svn-repo < "$TESTDIR/svn/replace.svndump"
Convert files being replaced by directories
$ hg convert svn-repo hg-repo
initializing destination hg-repo repository
scanning source...
sorting...
converting...
6 initial
5 clobber symlink
4 clobber1
3 clobber2
2 adddb
1 branch
0 clobberdir
$ cd hg-repo
Manifest before
$ hg -v manifest -r 1
644 a
644 d/b
644 d2/a
644 @ dlink
644 @ dlink2
644 dlink3
Manifest after clobber1
$ hg -v manifest -r 2
644 a/b
644 d/b
644 d2/a
644 dlink/b
644 @ dlink2
644 dlink3
Manifest after clobber2
$ hg -v manifest -r 3
644 a/b
644 d/b
644 d2/a
644 dlink/b
644 @ dlink2
644 @ dlink3
Manifest after clobberdir
$ hg -v manifest -r 6
644 a/b
644 d/b
644 d2/a
644 d2/c
644 dlink/b
644 @ dlink2
644 @ dlink3
Try updating
$ hg up -qC default
$ cd ..
Test convert progress bar'
$ cat >> $HGRCPATH <<EOF
> [extensions]
> progress =
> [progress]
> assume-tty = 1
> delay = 0
> refresh = 0
> EOF
$ cat > filtercr.py <<EOF
> import sys, re
> for line in sys.stdin:
> line = re.sub(r'\r+[^\n]', lambda m: '\n' + m.group()[-1:], line)
> sys.stdout.write(line)
> EOF
$ hg convert svn-repo hg-progress 2>&1 | python filtercr.py
scanning [ <=> ] 1
scanning [ <=> ] 2
scanning [ <=> ] 3
scanning [ <=> ] 4
scanning [ <=> ] 5
scanning [ <=> ] 6
scanning [ <=> ] 7
converting [ ] 0/7
getting files [========> ] 1/6
getting files [==================> ] 2/6
getting files [============================> ] 3/6
getting files [======================================> ] 4/6
getting files [================================================> ] 5/6
getting files [==========================================================>] 6/6
converting [=======> ] 1/7
scanning paths [ ] 0/1
getting files [==========================================================>] 1/1
converting [================> ] 2/7
scanning paths [ ] 0/2
scanning paths [============================> ] 1/2
getting files [=============> ] 1/4
getting files [============================> ] 2/4
getting files [===========================================> ] 3/4
getting files [==========================================================>] 4/4
converting [=========================> ] 3/7
scanning paths [ ] 0/1
getting files [==========================================================>] 1/1
converting [==================================> ] 4/7
scanning paths [ ] 0/1
getting files [==========================================================>] 1/1
converting [===========================================> ] 5/7
scanning paths [ ] 0/3
scanning paths [==================> ] 1/3
scanning paths [=====================================> ] 2/3
getting files [======> ] 1/8
getting files [=============> ] 2/8
getting files [=====================> ] 3/8
getting files [============================> ] 4/8
getting files [===================================> ] 5/8
getting files [===========================================> ] 6/8
getting files [==================================================> ] 7/8
getting files [==========================================================>] 8/8
converting [====================================================> ] 6/7
scanning paths [ ] 0/1
getting files [======> ] 1/8
getting files [=============> ] 2/8
getting files [=====================> ] 3/8
getting files [============================> ] 4/8
getting files [===================================> ] 5/8
getting files [===========================================> ] 6/8
getting files [==================================================> ] 7/8
getting files [==========================================================>] 8/8
initializing destination hg-progress repository
scanning source...
sorting...
converting...
6 initial
5 clobber symlink
4 clobber1
3 clobber2
2 adddb
1 branch
0 clobberdir