status: add more complete tests for --rev

The 'status --rev' code is not very well tested, which has bitten us
as recently as in issue4321. Let's add some more tests, some of which
uncover bugs. Remove the few existing tests that are now covered in a
more thorough and consistent way.
This commit is contained in:
Martin von Zweigbergk 2014-10-12 22:23:43 -07:00
parent a9b00f4522
commit 7eeee3a877
2 changed files with 156 additions and 13 deletions

156
tests/test-status-rev.t Normal file
View File

@ -0,0 +1,156 @@
Tests of 'hg status --rev <rev>' to make sure status between <rev> and '.' get
combined correctly with the dirstate status.
Sets up a history for a number of files where the filename describes the file's
history. The first two letters of the filename describe the first two commits;
the third letter describes the dirstate for the file. For example, a file called
'amr' was added in the first commit, modified in the second and then removed in
the dirstate.
These codes are used for commits:
x: does not exist
a: added
c: clean
m: modified
r: removed
These codes are used for dirstate:
d: in dirstate, but deleted from disk
f: removed from dirstate, but file exists (forgotten)
r: removed from dirstate and disk
q: added, but deleted from disk (q for q-rious?)
u: not in dirstate, but file exists (unknown)
$ hg init
$ touch .hgignore
$ hg add .hgignore
$ hg commit -m initial
First letter: first commit
$ echo a >acc
$ echo a >acd
$ echo a >acf
$ echo a >acm
$ echo a >acr
$ echo a >amc
$ echo a >amd
$ echo a >amf
$ echo a >amm
$ echo a >amr
$ echo a >ara
$ echo a >arq
$ echo a >aru
$ hg commit -Aqm first
Second letter: second commit
$ echo b >xad
$ echo b >xaf
$ echo b >xam
$ echo b >xar
$ echo b >amc
$ echo b >amd
$ echo b >amf
$ echo b >amm
$ echo b >amr
$ hg rm ara
$ hg rm arq
$ hg rm aru
$ hg commit -Aqm second
Third letter: dirstate
$ echo c >acm
$ echo c >amm
$ echo c >xam
$ echo c >ara && hg add ara
$ echo c >arq && hg add arq && rm arq
$ echo c >aru
$ hg rm amr
$ hg rm acr
$ hg rm xar
$ rm acd
$ rm amd
$ rm xad
$ hg forget acf
$ hg forget amf
$ hg forget xaf
$ touch xxu
Status compared to one revision back
$ hg status -A --rev 1 acc
C acc
BROKEN: file appears twice; should be '!'
$ hg status -A --rev 1 acd
! acd
C acd
$ hg status -A --rev 1 acf
R acf
$ hg status -A --rev 1 acm
M acm
$ hg status -A --rev 1 acr
R acr
$ hg status -A --rev 1 amc
M amc
BROKEN: file appears twice; should be '!'
$ hg status -A --rev 1 amd
! amd
C amd
$ hg status -A --rev 1 amf
R amf
$ hg status -A --rev 1 amm
M amm
$ hg status -A --rev 1 amr
R amr
$ hg status -A --rev 1 ara
M ara
BROKEN: file appears twice; should be '!'
$ hg status -A --rev 1 arq
R arq
! arq
$ hg status -A --rev 1 aru
R aru
$ hg status -A --rev 1 xad
! xad
$ hg status -A --rev 1 xaf
$ hg status -A --rev 1 xam
A xam
$ hg status -A --rev 1 xar
$ hg status -A --rev 1 xxu
? xxu
Status compared to two revisions back
$ hg status -A --rev 0 acc
A acc
$ hg status -A --rev 0 acd
! acd
BROKEN: file exists, so should be listed (as '?')
$ hg status -A --rev 0 acf
$ hg status -A --rev 0 acm
A acm
$ hg status -A --rev 0 acr
$ hg status -A --rev 0 amc
A amc
$ hg status -A --rev 0 amd
! amd
BROKEN: file exists, so should be listed (as '?')
$ hg status -A --rev 0 amf
$ hg status -A --rev 0 amm
A amm
$ hg status -A --rev 0 amr
$ hg status -A --rev 0 ara
A ara
$ hg status -A --rev 0 arq
! arq
$ hg status -A --rev 0 aru
? aru
$ hg status -A --rev 0 xad
! xad
BROKEN: file exists, so should be listed (as '?')
$ hg status -A --rev 0 xaf
$ hg status -A --rev 0 xam
A xam
$ hg status -A --rev 0 xar

View File

@ -322,19 +322,6 @@ hg status -A --change 1 and revset:
R removed
C deleted
status against non-parent with unknown file (issue4321)
$ touch unknown
$ hg status --rev 0 unknown
? unknown
status of removed but existing in working directory. "? removed" should
not be included:
$ touch removed
$ hg status --rev 0 removed
R removed
$ cd ..
hg status of binary file starting with '\1\n', a separator for metadata: