# HG changeset patch # User Martin von Zweigbergk # Date 1415518674 28800 # Node ID e51027c85dcd89214df85caa55475206280777c4 # Parent 390a2610eaef62cc66ed389c347c206e9891516a generate-working-copy-states: generalize for depth The script can currently generate filenames and contents for exactly two changesets plus the working copy. For some tests (e.g. of plain dirstate status), only one changeset is needed, while for others (e.g. merge), three changesets are needed. Let's prepare for such tests by generalizing the code for any number of changesets. diff -r 390a2610eaef -r e51027c85dcd tests/generate-working-copy-states.py --- a/tests/generate-working-copy-states.py Sat Nov 29 14:39:33 2014 -0800 +++ b/tests/generate-working-copy-states.py Sat Nov 08 23:37:54 2014 -0800 @@ -2,29 +2,34 @@ import sys import os -# build the combination of possible states -combination = [] -for base in [None, 'content1']: - for parent in set([None, 'content2']) | set([base]): - for wcc in set([None, 'content3']) | set([base, parent]): - for tracked in ('untracked', 'tracked'): - def statestring(content): - return content is None and 'missing' or content - filename = "%s_%s_%s-%s" % (statestring(base), - statestring(parent), - statestring(wcc), - tracked) - combination.append((filename, base, parent, wcc)) +# Generates pairs of (filename, contents), where 'contents' is a list +# describing the file's content at each revision (or in the working copy). +# At each revision, it is either None or the file's actual content. When not +# None, it may be either new content or the same content as an earlier +# revisions, so all of (modified,clean,added,removed) can be tested. +def generatestates(maxchangesets, parentcontents): + depth = len(parentcontents) + if depth == maxchangesets + 1: + for tracked in ('untracked', 'tracked'): + filename = "_".join([(content is None and 'missing' or content) for + content in parentcontents]) + "-" + tracked + yield (filename, parentcontents) + else: + for content in (set([None, 'content' + str(depth + 1)]) | + set(parentcontents)): + for combination in generatestates(maxchangesets, + parentcontents + [content]): + yield combination -# make sure we have stable output -combination.sort() +# sort to make sure we have stable output +combinations = sorted(generatestates(2, [])) # retrieve the state we must generate target = sys.argv[1] # compute file content content = [] -for filename, base, parent, wcc in combination: +for filename, [base, parent, wcc] in combinations: if target == 'filelist': print filename elif target == 'base':