diff --git a/tests/generate-working-copy-states.py b/tests/generate-working-copy-states.py --- a/tests/generate-working-copy-states.py +++ b/tests/generate-working-copy-states.py @@ -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 +# state (|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 @@ def generatestates(maxchangesets, parent 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) diff --git a/tests/test-revert.t b/tests/test-revert.t --- a/tests/test-revert.t +++ b/tests/test-revert.t @@ -430,7 +430,7 @@ Write the python script to disk 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 appropriate repo state 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 @@ Generate base changeset 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 @@ Create parent changeset 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 @@ Test revert to parent content with expli 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 @@ Test revert to "base" content with expli 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 diff --git a/tests/test-status-rev.t b/tests/test-status-rev.t --- a/tests/test-status-rev.t +++ b/tests/test-status-rev.t @@ -5,7 +5,7 @@ combined correctly with the dirstate sta 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 @@ First commit 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 @@ Second commit 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