tests/test-status-rev.t
author Gregory Szorc <gregory.szorc@gmail.com>
Fri, 24 Oct 2014 10:40:37 -0700
branchstable
changeset 23081 e62c330a044f
parent 23037 eeaed3d2b004
child 23196 daa73289dd2a
permissions -rw-r--r--
bookmarks: explicitly track identical bookmarks bookmarks.compare() previously lumped identical bookmarks in the "invalid" bucket. This patch adds a "same" bucket. An 8-tuple for holding this state is pretty gnarly. The return value should probably be converted into a class to increase readability. But that is beyond the scope of a patch intended to be a late arrival to stable.

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