generate-working-copy-states: accept depth arguments on command line
Add a parameter to generate-working-copy-states.py that indicates
how many changesets are wanted. This number impacts all the
subcommands. The current 'filelist' subcommand becomes 'filelist 2',
the current 'base' and 'parent' subcommands become 'state 2 1' and
'state 2 2' respectively, while 'wc' becomes 'state 2 wc'.
See earlier patch for motivation.
--- a/tests/generate-working-copy-states.py Sat Nov 08 23:37:54 2014 -0800
+++ b/tests/generate-working-copy-states.py Sun Nov 09 00:10:29 2014 -0800
@@ -1,4 +1,34 @@
-# generate proper file state to test working copy behavior
+# Helper script used for generating history and working copy files and content.
+# The file's name corresponds to its history. The number of changesets can
+# be specified on the command line. With 2 changesets, files with names like
+# content1_content2_content1-untracked are generated. The first two filename
+# segments describe the contents in the two changesets. The third segment
+# ("content1-untracked") describes the state in the working copy, i.e.
+# the file has content "content1" and is untracked (since it was previously
+# tracked, it has been forgotten).
+#
+# This script generates the filenames and their content, but it's up to the
+# caller to tell hg about the state.
+#
+# There are two subcommands:
+# filelist <numchangesets>
+# state <numchangesets> (<changeset>|wc)
+#
+# Typical usage:
+#
+# $ python $TESTDIR/generate-working-copy-states.py state 2 1
+# $ hg addremove --similarity 0
+# $ hg commit -m 'first'
+#
+# $ python $TESTDIR/generate-working-copy-states.py state 2 1
+# $ hg addremove --similarity 0
+# $ hg commit -m 'second'
+#
+# $ python $TESTDIR/generate-working-copy-states.py state 2 wc
+# $ hg addremove --similarity 0
+# $ hg forget *_*_*-untracked
+# $ rm *_*_missing-*
+
import sys
import os
@@ -21,25 +51,27 @@
parentcontents + [content]):
yield combination
-# sort to make sure we have stable output
-combinations = sorted(generatestates(2, []))
+# retrieve the command line arguments
+target = sys.argv[1]
+maxchangesets = int(sys.argv[2])
+if target == 'state':
+ depth = sys.argv[3]
-# retrieve the state we must generate
-target = sys.argv[1]
+# sort to make sure we have stable output
+combinations = sorted(generatestates(maxchangesets, []))
# compute file content
content = []
-for filename, [base, parent, wcc] in combinations:
+for filename, states in combinations:
if target == 'filelist':
print filename
- elif target == 'base':
- content.append((filename, base))
- elif target == 'parent':
- content.append((filename, parent))
- elif target == 'wc':
- # Make sure there is content so the file gets written and can be
- # tracked. It will be deleted outside of this script.
- content.append((filename, wcc or 'TOBEDELETED'))
+ elif target == 'state':
+ if depth == 'wc':
+ # Make sure there is content so the file gets written and can be
+ # tracked. It will be deleted outside of this script.
+ content.append((filename, states[maxchangesets] or 'TOBEDELETED'))
+ else:
+ content.append((filename, states[int(depth) - 1]))
else:
print >> sys.stderr, "unknown target:", target
sys.exit(1)
--- a/tests/test-revert.t Sat Nov 08 23:37:54 2014 -0800
+++ b/tests/test-revert.t Sun Nov 09 00:10:29 2014 -0800
@@ -430,7 +430,7 @@
check list of planned files
- $ python $TESTDIR/generate-working-copy-states.py filelist
+ $ python $TESTDIR/generate-working-copy-states.py filelist 2
content1_content1_content1-tracked
content1_content1_content1-untracked
content1_content1_content3-tracked
@@ -485,7 +485,7 @@
Generate base changeset
- $ python $TESTDIR/generate-working-copy-states.py base
+ $ python $TESTDIR/generate-working-copy-states.py state 2 1
$ hg addremove --similarity 0
adding content1_content1_content1-tracked
adding content1_content1_content1-untracked
@@ -557,7 +557,7 @@
Create parent changeset
- $ python $TESTDIR/generate-working-copy-states.py parent
+ $ python $TESTDIR/generate-working-copy-states.py state 2 2
$ hg addremove --similarity 0
removing content1_missing_content1-tracked
removing content1_missing_content1-untracked
@@ -621,7 +621,7 @@
Setup working directory
- $ python $TESTDIR/generate-working-copy-states.py wc
+ $ python $TESTDIR/generate-working-copy-states.py state 2 wc
$ hg addremove --similarity 0
adding content1_missing_content1-tracked
adding content1_missing_content1-untracked
@@ -838,7 +838,7 @@
revert all files individually and check the output
(output is expected to be different than in the --all case)
- $ for file in `python $TESTDIR/generate-working-copy-states.py filelist`; do
+ $ for file in `python $TESTDIR/generate-working-copy-states.py filelist 2`; do
> echo '### revert for:' $file;
> hg revert $file;
> echo
@@ -931,7 +931,7 @@
revert all files individually and check the output
(output is expected to be different than in the --all case)
- $ for file in `python $TESTDIR/generate-working-copy-states.py filelist`; do
+ $ for file in `python $TESTDIR/generate-working-copy-states.py filelist 2`; do
> echo '### revert for:' $file;
> hg revert $file --rev 'desc(base)';
> echo
--- a/tests/test-status-rev.t Sat Nov 08 23:37:54 2014 -0800
+++ b/tests/test-status-rev.t Sun Nov 09 00:10:29 2014 -0800
@@ -5,7 +5,7 @@
First commit
- $ python $TESTDIR/generate-working-copy-states.py base
+ $ python $TESTDIR/generate-working-copy-states.py state 2 1
$ hg addremove --similarity 0
adding content1_content1_content1-tracked
adding content1_content1_content1-untracked
@@ -31,7 +31,7 @@
Second commit
- $ python $TESTDIR/generate-working-copy-states.py parent
+ $ python $TESTDIR/generate-working-copy-states.py state 2 2
$ hg addremove --similarity 0
removing content1_missing_content1-tracked
removing content1_missing_content1-untracked
@@ -49,7 +49,7 @@
Working copy
- $ python $TESTDIR/generate-working-copy-states.py wc
+ $ python $TESTDIR/generate-working-copy-states.py state 2 wc
$ hg addremove --similarity 0
adding content1_missing_content1-tracked
adding content1_missing_content1-untracked