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
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 >
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.
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. > > >
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: