Patchwork status: add more complete tests for --rev

login
register
mail settings
Submitter Martin von Zweigbergk
Date Oct. 13, 2014, 11:35 p.m.
Message ID <86a63c4c19ceb5af99f0.1413243327@handduk2.mtv.corp.google.com>
Download mbox | patch
Permalink /patch/6245/
State Accepted
Headers show

Comments

Martin von Zweigbergk - Oct. 13, 2014, 11:35 p.m.
# HG changeset patch
# User Martin von Zweigbergk <martinvonz@gmail.com>
# Date 1413177823 25200
#      Sun Oct 12 22:23:43 2014 -0700
# Node ID 86a63c4c19ceb5af99f0ea1cbd35314c1213b49e
# Parent  75d0edb68b417964110e3fcd69187c867f31a119
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.
Pierre-Yves David - Oct. 13, 2014, 11:41 p.m.
On 10/13/2014 04:35 PM, Martin von Zweigbergk wrote:
> # HG changeset patch
> # User Martin von Zweigbergk <martinvonz@gmail.com>
> # Date 1413177823 25200
> #      Sun Oct 12 22:23:43 2014 -0700
> # Node ID 86a63c4c19ceb5af99f0ea1cbd35314c1213b49e
> # Parent  75d0edb68b417964110e3fcd69187c867f31a119
> 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.

The same kind of processing recently happened for revert. Maybe we can 
reuse some logic from there. Can you give it a look ?

>
> diff --git a/tests/test-status-rev.t b/tests/test-status-rev.t
> new file mode 100644
> --- /dev/null
> +++ b/tests/test-status-rev.t
> @@ -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
> diff --git a/tests/test-status.t b/tests/test-status.t
> --- a/tests/test-status.t
> +++ b/tests/test-status.t
> @@ -322,19 +322,6 @@
>     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:
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
>
Matt Mackall - Oct. 18, 2014, 7:45 p.m.
On Mon, 2014-10-13 at 16:35 -0700, Martin von Zweigbergk wrote:
> # HG changeset patch
> # User Martin von Zweigbergk <martinvonz@gmail.com>
> # Date 1413177823 25200
> #      Sun Oct 12 22:23:43 2014 -0700
> # Node ID 86a63c4c19ceb5af99f0ea1cbd35314c1213b49e
> # Parent  75d0edb68b417964110e3fcd69187c867f31a119
> status: add more complete tests for --rev

Queued for default, thanks.
Martin von Zweigbergk - Oct. 18, 2014, 8:04 p.m.
I was chatting with Marmoute on IRC about this. I told him I was going to
clean up test-revert and then send an updated version of this patch. I hope
to send these patches either tonight or tomorrow night. Sorry, I should
have updated this thread.

On Sat, Oct 18, 2014, 12:45 Matt Mackall <mpm@selenic.com> wrote:

> On Mon, 2014-10-13 at 16:35 -0700, Martin von Zweigbergk wrote:
> > # HG changeset patch
> > # User Martin von Zweigbergk <martinvonz@gmail.com>
> > # Date 1413177823 25200
> > #      Sun Oct 12 22:23:43 2014 -0700
> > # Node ID 86a63c4c19ceb5af99f0ea1cbd35314c1213b49e
> > # Parent  75d0edb68b417964110e3fcd69187c867f31a119
> > status: add more complete tests for --rev
>
> Queued for default, thanks.
>
> --
> Mathematics is the supreme nostalgia of our time.
>
>
>
Matt Mackall - Oct. 18, 2014, 8:10 p.m.
On Sat, 2014-10-18 at 20:04 +0000, Martin von Zweigbergk wrote:
> I was chatting with Marmoute on IRC about this. I told him I was going to
> clean up test-revert and then send an updated version of this patch. I hope
> to send these patches either tonight or tomorrow night. Sorry, I should
> have updated this thread.

We have a calendar-based release schedule that you'll want to
familiarize yourself with:

http://mercurial.selenic.com/wiki/TimeBasedReleasePlan

Patch

diff --git a/tests/test-status-rev.t b/tests/test-status-rev.t
new file mode 100644
--- /dev/null
+++ b/tests/test-status-rev.t
@@ -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
diff --git a/tests/test-status.t b/tests/test-status.t
--- a/tests/test-status.t
+++ b/tests/test-status.t
@@ -322,19 +322,6 @@ 
   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: