Mercurial > public > mercurial-scm > hg
diff tests/generate-working-copy-states.py @ 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 | 3849b89459b0 |
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)