changeset 23447:815e76a45b24

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.
author Martin von Zweigbergk <martinvonz@google.com>
date Sun, 09 Nov 2014 00:10:29 -0800
parents e51027c85dcd
children 6a92b5fcfba8
files tests/generate-working-copy-states.py tests/test-revert.t tests/test-status-rev.t
diffstat 3 files changed, 55 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- 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