mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 23:38:50 +03:00
0bf3f9f6fd
If file data starts with '\1\n', it will be escaped in the revlog to create an empty metadata block, thus adding four bytes to the size in the revlog size index. There's no way to detect that this has happened in filelog.size() faster than decompressing each revision [1]. For filectx.cmp(), we have the size of the file in the working directory available. If it differs by exactly four bytes, it may be this case, so do a full comparison. [1]: http://markmail.org/message/5akdbmmqx7vq2fsg
298 lines
5.0 KiB
Perl
298 lines
5.0 KiB
Perl
$ hg init repo1
|
|
$ cd repo1
|
|
$ mkdir a b a/1 b/1 b/2
|
|
$ touch in_root a/in_a b/in_b a/1/in_a_1 b/1/in_b_1 b/2/in_b_2
|
|
|
|
hg status in repo root:
|
|
|
|
$ hg status
|
|
? a/1/in_a_1
|
|
? a/in_a
|
|
? b/1/in_b_1
|
|
? b/2/in_b_2
|
|
? b/in_b
|
|
? in_root
|
|
|
|
hg status . in repo root:
|
|
|
|
$ hg status .
|
|
? a/1/in_a_1
|
|
? a/in_a
|
|
? b/1/in_b_1
|
|
? b/2/in_b_2
|
|
? b/in_b
|
|
? in_root
|
|
|
|
$ hg status --cwd a
|
|
? a/1/in_a_1
|
|
? a/in_a
|
|
? b/1/in_b_1
|
|
? b/2/in_b_2
|
|
? b/in_b
|
|
? in_root
|
|
$ hg status --cwd a .
|
|
? 1/in_a_1
|
|
? in_a
|
|
$ hg status --cwd a ..
|
|
? 1/in_a_1
|
|
? in_a
|
|
? ../b/1/in_b_1
|
|
? ../b/2/in_b_2
|
|
? ../b/in_b
|
|
? ../in_root
|
|
|
|
$ hg status --cwd b
|
|
? a/1/in_a_1
|
|
? a/in_a
|
|
? b/1/in_b_1
|
|
? b/2/in_b_2
|
|
? b/in_b
|
|
? in_root
|
|
$ hg status --cwd b .
|
|
? 1/in_b_1
|
|
? 2/in_b_2
|
|
? in_b
|
|
$ hg status --cwd b ..
|
|
? ../a/1/in_a_1
|
|
? ../a/in_a
|
|
? 1/in_b_1
|
|
? 2/in_b_2
|
|
? in_b
|
|
? ../in_root
|
|
|
|
$ hg status --cwd a/1
|
|
? a/1/in_a_1
|
|
? a/in_a
|
|
? b/1/in_b_1
|
|
? b/2/in_b_2
|
|
? b/in_b
|
|
? in_root
|
|
$ hg status --cwd a/1 .
|
|
? in_a_1
|
|
$ hg status --cwd a/1 ..
|
|
? in_a_1
|
|
? ../in_a
|
|
|
|
$ hg status --cwd b/1
|
|
? a/1/in_a_1
|
|
? a/in_a
|
|
? b/1/in_b_1
|
|
? b/2/in_b_2
|
|
? b/in_b
|
|
? in_root
|
|
$ hg status --cwd b/1 .
|
|
? in_b_1
|
|
$ hg status --cwd b/1 ..
|
|
? in_b_1
|
|
? ../2/in_b_2
|
|
? ../in_b
|
|
|
|
$ hg status --cwd b/2
|
|
? a/1/in_a_1
|
|
? a/in_a
|
|
? b/1/in_b_1
|
|
? b/2/in_b_2
|
|
? b/in_b
|
|
? in_root
|
|
$ hg status --cwd b/2 .
|
|
? in_b_2
|
|
$ hg status --cwd b/2 ..
|
|
? ../1/in_b_1
|
|
? in_b_2
|
|
? ../in_b
|
|
$ cd ..
|
|
|
|
$ hg init repo2
|
|
$ cd repo2
|
|
$ touch modified removed deleted ignored
|
|
$ echo "^ignored$" > .hgignore
|
|
$ hg ci -A -m 'initial checkin'
|
|
adding .hgignore
|
|
adding deleted
|
|
adding modified
|
|
adding removed
|
|
$ touch modified added unknown ignored
|
|
$ hg add added
|
|
$ hg remove removed
|
|
$ rm deleted
|
|
|
|
hg status:
|
|
|
|
$ hg status
|
|
A added
|
|
R removed
|
|
! deleted
|
|
? unknown
|
|
|
|
hg status modified added removed deleted unknown never-existed ignored:
|
|
|
|
$ hg status modified added removed deleted unknown never-existed ignored
|
|
never-existed: * (glob)
|
|
A added
|
|
R removed
|
|
! deleted
|
|
? unknown
|
|
|
|
$ hg copy modified copied
|
|
|
|
hg status -C:
|
|
|
|
$ hg status -C
|
|
A added
|
|
A copied
|
|
modified
|
|
R removed
|
|
! deleted
|
|
? unknown
|
|
|
|
hg status -A:
|
|
|
|
$ hg status -A
|
|
A added
|
|
A copied
|
|
modified
|
|
R removed
|
|
! deleted
|
|
? unknown
|
|
I ignored
|
|
C .hgignore
|
|
C modified
|
|
|
|
|
|
$ echo "^ignoreddir$" > .hgignore
|
|
$ mkdir ignoreddir
|
|
$ touch ignoreddir/file
|
|
|
|
hg status ignoreddir/file:
|
|
|
|
$ hg status ignoreddir/file
|
|
|
|
hg status -i ignoreddir/file:
|
|
|
|
$ hg status -i ignoreddir/file
|
|
I ignoreddir/file
|
|
$ cd ..
|
|
|
|
Check 'status -q' and some combinations
|
|
|
|
$ hg init repo3
|
|
$ cd repo3
|
|
$ touch modified removed deleted ignored
|
|
$ echo "^ignored$" > .hgignore
|
|
$ hg commit -A -m 'initial checkin'
|
|
adding .hgignore
|
|
adding deleted
|
|
adding modified
|
|
adding removed
|
|
$ touch added unknown ignored
|
|
$ hg add added
|
|
$ echo "test" >> modified
|
|
$ hg remove removed
|
|
$ rm deleted
|
|
$ hg copy modified copied
|
|
|
|
Run status with 2 different flags.
|
|
Check if result is the same or different.
|
|
If result is not as expected, raise error
|
|
|
|
$ assert() {
|
|
> hg status $1 > ../a
|
|
> hg status $2 > ../b
|
|
> if diff ../a ../b > /dev/null; then
|
|
> out=0
|
|
> else
|
|
> out=1
|
|
> fi
|
|
> if [ $3 -eq 0 ]; then
|
|
> df="same"
|
|
> else
|
|
> df="different"
|
|
> fi
|
|
> if [ $out -ne $3 ]; then
|
|
> echo "Error on $1 and $2, should be $df."
|
|
> fi
|
|
> }
|
|
|
|
Assert flag1 flag2 [0-same | 1-different]
|
|
|
|
$ assert "-q" "-mard" 0
|
|
$ assert "-A" "-marduicC" 0
|
|
$ assert "-qA" "-mardcC" 0
|
|
$ assert "-qAui" "-A" 0
|
|
$ assert "-qAu" "-marducC" 0
|
|
$ assert "-qAi" "-mardicC" 0
|
|
$ assert "-qu" "-u" 0
|
|
$ assert "-q" "-u" 1
|
|
$ assert "-m" "-a" 1
|
|
$ assert "-r" "-d" 1
|
|
$ cd ..
|
|
|
|
$ hg init repo4
|
|
$ cd repo4
|
|
$ touch modified removed deleted
|
|
$ hg ci -q -A -m 'initial checkin'
|
|
$ touch added unknown
|
|
$ hg add added
|
|
$ hg remove removed
|
|
$ rm deleted
|
|
$ echo x > modified
|
|
$ hg copy modified copied
|
|
$ hg ci -m 'test checkin' -d "1000001 0"
|
|
$ rm *
|
|
$ touch unrelated
|
|
$ hg ci -q -A -m 'unrelated checkin' -d "1000002 0"
|
|
|
|
hg status --change 1:
|
|
|
|
$ hg status --change 1
|
|
M modified
|
|
A added
|
|
A copied
|
|
R removed
|
|
|
|
hg status --change 1 unrelated:
|
|
|
|
$ hg status --change 1 unrelated
|
|
|
|
hg status -C --change 1 added modified copied removed deleted:
|
|
|
|
$ hg status -C --change 1 added modified copied removed deleted
|
|
M modified
|
|
A added
|
|
A copied
|
|
modified
|
|
R removed
|
|
|
|
hg status -A --change 1 and revset:
|
|
|
|
$ hg status -A --change '1|1'
|
|
M modified
|
|
A added
|
|
A copied
|
|
modified
|
|
R removed
|
|
C deleted
|
|
|
|
$ cd ..
|
|
|
|
hg status of binary file starting with '\1\n', a separator for metadata:
|
|
|
|
$ hg init repo5
|
|
$ cd repo5
|
|
$ printf '\1\nfoo' > 010a
|
|
$ hg ci -q -A -m 'initial checkin'
|
|
$ hg status -A
|
|
C 010a
|
|
|
|
$ printf '\1\nbar' > 010a
|
|
$ hg status -A
|
|
M 010a
|
|
$ hg ci -q -m 'modify 010a'
|
|
$ hg status -A --rev 0:1
|
|
M 010a
|
|
|
|
$ touch empty
|
|
$ hg ci -q -A -m 'add another file'
|
|
$ hg status -A --rev 1:2 010a
|
|
C 010a
|