test-revert: name files by state, not by state transition
authorMartin von Zweigbergk <martinvonz@google.com>
Mon, 20 Oct 2014 22:54:18 -0700
changeset 23159 20d3e2d73432
parent 23158 33a67fa048bf
child 23160 4f4e6815f286
test-revert: name files by state, not by state transition This is the main patch in a series. See motivation in earlier patch. In this patch, we actually change the names of the generated files. For example, the file that is currently called missing_clean becomes missing_missing_missing-tracked and it's clearer that it should be tracked. It turns out that since the state was not previously clear, it ended up testing an untracked state, which was the same as for missing_clean. We'll fix this in a later patch. Let's also change the content from (base,parent,wc) to (content1,content2,content3) to make them all the same length so they line up when displayed.
tests/test-revert.t
--- a/tests/test-revert.t	Fri Oct 17 06:27:43 2014 -0700
+++ b/tests/test-revert.t	Mon Oct 20 22:54:18 2014 -0700
@@ -398,26 +398,23 @@
 Systematic behavior validation of most possible cases
 =====================================================
 
-This section tests most of the possible combinations of working directory
-changes and inter-revision changes. The number of possible cases is significant
+This section tests most of the possible combinations of revision states and
+working directory states. The number of possible cases is significant but they
 but they all have a slightly different handling. So this section commits to
-generating and testing all of them to allow safe refactoring of the revert code.
+and testing all of them to allow safe refactoring of the revert code.
 
 A python script is used to generate a file history for each combination of
-changes between, on one side the working directory and its parent and on
-the other side, changes between a revert target (--rev) and working directory
-parent. The three states generated are:
+states, on one side the content (or lack thereof) in two revisions, and
+on the other side, the content and "tracked-ness" of the working directory. The
+three states generated are:
 
 - a "base" revision
 - a "parent" revision
 - the working directory (based on "parent")
 
-The file generated have names of the form:
+The files generated have names of the form:
 
- <changeset-state>_<working-copy-state>
-
-Here, "changeset-state" conveys the state in "base" and "parent" (or the change
-that happen between them), "working-copy-state" is self explanatory.
+ <rev1-content>_<rev2-content>_<working-copy-content>-<tracked-ness>
 
 All known states are not tested yet. See inline documentation for details.
 Special cases from merge and rename are not tested by this section.
@@ -434,13 +431,13 @@
   > # None means no file at all
   > ctxcontent = {
   >     # clean: no change from base to parent
-  >     'clean': ['base', 'base'],
+  >     'clean': ['content1', 'content1'],
   >     # modified: file content change from base to parent
-  >     'modified': ['base', 'parent'],
+  >     'modified': ['content1', 'content2'],
   >     # added: file is missing from base and added in parent
-  >     'added': [None, 'parent'],
+  >     'added': [None, 'content2'],
   >     # removed: file exist in base but is removed from parent
-  >     'removed': ['base', None],
+  >     'removed': ['content1', None],
   >     # file exist neither in base not in parent
   >     'missing': [None, None],
   > }
@@ -448,25 +445,25 @@
   > # content of file in working copy
   > wccontent = {
   >     # clean: wc content is the same as parent
-  >     'clean': lambda cc: cc[1],
+  >     'clean': (True, lambda cc: cc[1]),
   >     # revert: wc content is the same as base
-  >     'revert': lambda cc: cc[0],
+  >     'revert': (True, lambda cc: cc[0]),
   >     # wc: file exist with a content different from base and parent
-  >     'wc': lambda cc: 'wc',
+  >     'wc': (True, lambda cc: 'content3'),
   >     # deleted: file is recorded as tracked but missing
   >     #          rely on file deletion outside of this script
-  >     'deleted': lambda cc:'TOBEDELETED',
+  >     'deleted': (True, lambda cc:'TOBEDELETED'),
   > }
   > # untracked-X is a version of X where the file is not tracked (? unknown)
-  > wccontent['untracked-clean'] = wccontent['clean']
-  > wccontent['untracked-deleted'] = wccontent['deleted']
-  > wccontent['untracked-revert'] = wccontent['revert']
-  > wccontent['untracked-wc'] = wccontent['wc']
+  > wccontent['untracked-clean'] = (False, wccontent['clean'][1])
+  > wccontent['untracked-deleted'] = (False, wccontent['deleted'][1])
+  > wccontent['untracked-revert'] = (False, wccontent['revert'][1])
+  > wccontent['untracked-wc'] = (False, wccontent['wc'][1])
   > 
   > # build the combination of possible states
   > combination = []
   > for ctxkey, ctxvalue in sorted(ctxcontent.iteritems()):
-  >     for wckey in sorted(wccontent):
+  >     for wckey, (tracked, wcfunc) in sorted(wccontent.iteritems()):
   >         base, parent = ctxvalue
   >         if (base == parent and 'revert' in wckey):
   >             continue
@@ -474,9 +471,15 @@
   >             continue
   >         if not parent and 'deleted' in wckey:
   >             continue
-  >         filename = "%s_%s" % (ctxkey, wckey)
-  >         combination.append((filename, base, parent,
-  >                             wccontent[wckey](ctxvalue)))
+  >         def statestring(content):
+  >             return content in (None, 'TOBEDELETED') and 'missing' or content
+  >         wcc = wcfunc(ctxvalue)
+  >         trackedstring = tracked and 'tracked' or 'untracked'
+  >         filename = "%s_%s_%s-%s" % (statestring(base),
+  >                                     statestring(parent),
+  >                                     statestring(wcc),
+  >                                     trackedstring)
+  >         combination.append((filename, base, parent, wcc))
   > 
   > # retrieve the state we must generate
   > target = sys.argv[1]
@@ -509,36 +512,36 @@
 check list of planned files
 
   $ python gen-revert-cases.py filelist
-  added_clean
-  added_deleted
-  added_untracked-clean
-  added_untracked-deleted
-  added_untracked-wc
-  added_wc
-  clean_clean
-  clean_deleted
-  clean_untracked-clean
-  clean_untracked-deleted
-  clean_untracked-wc
-  clean_wc
-  missing_clean
-  missing_untracked-clean
-  missing_untracked-wc
-  missing_wc
-  modified_clean
-  modified_deleted
-  modified_revert
-  modified_untracked-clean
-  modified_untracked-deleted
-  modified_untracked-revert
-  modified_untracked-wc
-  modified_wc
-  removed_clean
-  removed_revert
-  removed_untracked-clean
-  removed_untracked-revert
-  removed_untracked-wc
-  removed_wc
+  missing_content2_content2-tracked
+  missing_content2_missing-tracked
+  missing_content2_content2-untracked
+  missing_content2_missing-untracked
+  missing_content2_content3-untracked
+  missing_content2_content3-tracked
+  content1_content1_content1-tracked
+  content1_content1_missing-tracked
+  content1_content1_content1-untracked
+  content1_content1_missing-untracked
+  content1_content1_content3-untracked
+  content1_content1_content3-tracked
+  missing_missing_missing-tracked
+  missing_missing_missing-untracked
+  missing_missing_content3-untracked
+  missing_missing_content3-tracked
+  content1_content2_content2-tracked
+  content1_content2_missing-tracked
+  content1_content2_content1-tracked
+  content1_content2_content2-untracked
+  content1_content2_missing-untracked
+  content1_content2_content1-untracked
+  content1_content2_content3-untracked
+  content1_content2_content3-tracked
+  content1_missing_missing-tracked
+  content1_missing_content1-tracked
+  content1_missing_missing-untracked
+  content1_missing_content1-untracked
+  content1_missing_content3-untracked
+  content1_missing_content3-tracked
 
 Script to make a simple text version of the content
 ---------------------------------------------------
@@ -565,223 +568,223 @@
 
   $ python ../gen-revert-cases.py base
   $ hg addremove --similarity 0
-  adding clean_clean
-  adding clean_deleted
-  adding clean_untracked-clean
-  adding clean_untracked-deleted
-  adding clean_untracked-wc
-  adding clean_wc
-  adding modified_clean
-  adding modified_deleted
-  adding modified_revert
-  adding modified_untracked-clean
-  adding modified_untracked-deleted
-  adding modified_untracked-revert
-  adding modified_untracked-wc
-  adding modified_wc
-  adding removed_clean
-  adding removed_revert
-  adding removed_untracked-clean
-  adding removed_untracked-revert
-  adding removed_untracked-wc
-  adding removed_wc
+  adding content1_content1_content1-tracked
+  adding content1_content1_content1-untracked
+  adding content1_content1_content3-tracked
+  adding content1_content1_content3-untracked
+  adding content1_content1_missing-tracked
+  adding content1_content1_missing-untracked
+  adding content1_content2_content1-tracked
+  adding content1_content2_content1-untracked
+  adding content1_content2_content2-tracked
+  adding content1_content2_content2-untracked
+  adding content1_content2_content3-tracked
+  adding content1_content2_content3-untracked
+  adding content1_content2_missing-tracked
+  adding content1_content2_missing-untracked
+  adding content1_missing_content1-tracked
+  adding content1_missing_content1-untracked
+  adding content1_missing_content3-tracked
+  adding content1_missing_content3-untracked
+  adding content1_missing_missing-tracked
+  adding content1_missing_missing-untracked
   $ hg status
-  A clean_clean
-  A clean_deleted
-  A clean_untracked-clean
-  A clean_untracked-deleted
-  A clean_untracked-wc
-  A clean_wc
-  A modified_clean
-  A modified_deleted
-  A modified_revert
-  A modified_untracked-clean
-  A modified_untracked-deleted
-  A modified_untracked-revert
-  A modified_untracked-wc
-  A modified_wc
-  A removed_clean
-  A removed_revert
-  A removed_untracked-clean
-  A removed_untracked-revert
-  A removed_untracked-wc
-  A removed_wc
+  A content1_content1_content1-tracked
+  A content1_content1_content1-untracked
+  A content1_content1_content3-tracked
+  A content1_content1_content3-untracked
+  A content1_content1_missing-tracked
+  A content1_content1_missing-untracked
+  A content1_content2_content1-tracked
+  A content1_content2_content1-untracked
+  A content1_content2_content2-tracked
+  A content1_content2_content2-untracked
+  A content1_content2_content3-tracked
+  A content1_content2_content3-untracked
+  A content1_content2_missing-tracked
+  A content1_content2_missing-untracked
+  A content1_missing_content1-tracked
+  A content1_missing_content1-untracked
+  A content1_missing_content3-tracked
+  A content1_missing_content3-untracked
+  A content1_missing_missing-tracked
+  A content1_missing_missing-untracked
   $ hg commit -m 'base'
 
 (create a simple text version of the content)
 
   $ python ../dircontent.py > ../content-base.txt
   $ cat ../content-base.txt
-  base   clean_clean
-  base   clean_deleted
-  base   clean_untracked-clean
-  base   clean_untracked-deleted
-  base   clean_untracked-wc
-  base   clean_wc
-  base   modified_clean
-  base   modified_deleted
-  base   modified_revert
-  base   modified_untracked-clean
-  base   modified_untracked-deleted
-  base   modified_untracked-revert
-  base   modified_untracked-wc
-  base   modified_wc
-  base   removed_clean
-  base   removed_revert
-  base   removed_untracked-clean
-  base   removed_untracked-revert
-  base   removed_untracked-wc
-  base   removed_wc
+  content1 content1_content1_content1-tracked
+  content1 content1_content1_content1-untracked
+  content1 content1_content1_content3-tracked
+  content1 content1_content1_content3-untracked
+  content1 content1_content1_missing-tracked
+  content1 content1_content1_missing-untracked
+  content1 content1_content2_content1-tracked
+  content1 content1_content2_content1-untracked
+  content1 content1_content2_content2-tracked
+  content1 content1_content2_content2-untracked
+  content1 content1_content2_content3-tracked
+  content1 content1_content2_content3-untracked
+  content1 content1_content2_missing-tracked
+  content1 content1_content2_missing-untracked
+  content1 content1_missing_content1-tracked
+  content1 content1_missing_content1-untracked
+  content1 content1_missing_content3-tracked
+  content1 content1_missing_content3-untracked
+  content1 content1_missing_missing-tracked
+  content1 content1_missing_missing-untracked
 
 Create parent changeset
 
   $ python ../gen-revert-cases.py parent
   $ hg addremove --similarity 0
-  adding added_clean
-  adding added_deleted
-  adding added_untracked-clean
-  adding added_untracked-deleted
-  adding added_untracked-wc
-  adding added_wc
-  removing removed_clean
-  removing removed_revert
-  removing removed_untracked-clean
-  removing removed_untracked-revert
-  removing removed_untracked-wc
-  removing removed_wc
+  removing content1_missing_content1-tracked
+  removing content1_missing_content1-untracked
+  removing content1_missing_content3-tracked
+  removing content1_missing_content3-untracked
+  removing content1_missing_missing-tracked
+  removing content1_missing_missing-untracked
+  adding missing_content2_content2-tracked
+  adding missing_content2_content2-untracked
+  adding missing_content2_content3-tracked
+  adding missing_content2_content3-untracked
+  adding missing_content2_missing-tracked
+  adding missing_content2_missing-untracked
   $ hg status
-  M modified_clean
-  M modified_deleted
-  M modified_revert
-  M modified_untracked-clean
-  M modified_untracked-deleted
-  M modified_untracked-revert
-  M modified_untracked-wc
-  M modified_wc
-  A added_clean
-  A added_deleted
-  A added_untracked-clean
-  A added_untracked-deleted
-  A added_untracked-wc
-  A added_wc
-  R removed_clean
-  R removed_revert
-  R removed_untracked-clean
-  R removed_untracked-revert
-  R removed_untracked-wc
-  R removed_wc
+  M content1_content2_content1-tracked
+  M content1_content2_content1-untracked
+  M content1_content2_content2-tracked
+  M content1_content2_content2-untracked
+  M content1_content2_content3-tracked
+  M content1_content2_content3-untracked
+  M content1_content2_missing-tracked
+  M content1_content2_missing-untracked
+  A missing_content2_content2-tracked
+  A missing_content2_content2-untracked
+  A missing_content2_content3-tracked
+  A missing_content2_content3-untracked
+  A missing_content2_missing-tracked
+  A missing_content2_missing-untracked
+  R content1_missing_content1-tracked
+  R content1_missing_content1-untracked
+  R content1_missing_content3-tracked
+  R content1_missing_content3-untracked
+  R content1_missing_missing-tracked
+  R content1_missing_missing-untracked
   $ hg commit -m 'parent'
 
 (create a simple text version of the content)
 
   $ python ../dircontent.py > ../content-parent.txt
   $ cat ../content-parent.txt
-  parent added_clean
-  parent added_deleted
-  parent added_untracked-clean
-  parent added_untracked-deleted
-  parent added_untracked-wc
-  parent added_wc
-  base   clean_clean
-  base   clean_deleted
-  base   clean_untracked-clean
-  base   clean_untracked-deleted
-  base   clean_untracked-wc
-  base   clean_wc
-  parent modified_clean
-  parent modified_deleted
-  parent modified_revert
-  parent modified_untracked-clean
-  parent modified_untracked-deleted
-  parent modified_untracked-revert
-  parent modified_untracked-wc
-  parent modified_wc
+  content1 content1_content1_content1-tracked
+  content1 content1_content1_content1-untracked
+  content1 content1_content1_content3-tracked
+  content1 content1_content1_content3-untracked
+  content1 content1_content1_missing-tracked
+  content1 content1_content1_missing-untracked
+  content2 content1_content2_content1-tracked
+  content2 content1_content2_content1-untracked
+  content2 content1_content2_content2-tracked
+  content2 content1_content2_content2-untracked
+  content2 content1_content2_content3-tracked
+  content2 content1_content2_content3-untracked
+  content2 content1_content2_missing-tracked
+  content2 content1_content2_missing-untracked
+  content2 missing_content2_content2-tracked
+  content2 missing_content2_content2-untracked
+  content2 missing_content2_content3-tracked
+  content2 missing_content2_content3-untracked
+  content2 missing_content2_missing-tracked
+  content2 missing_content2_missing-untracked
 
 Setup working directory
 
   $ python ../gen-revert-cases.py wc
   $ hg addremove --similarity 0
-  adding missing_untracked-wc
-  adding missing_wc
-  adding removed_revert
-  adding removed_untracked-revert
-  adding removed_untracked-wc
-  adding removed_wc
-  $ hg forget *untracked*
-  $ rm *deleted*
+  adding content1_missing_content1-tracked
+  adding content1_missing_content1-untracked
+  adding content1_missing_content3-tracked
+  adding content1_missing_content3-untracked
+  adding missing_missing_content3-tracked
+  adding missing_missing_content3-untracked
+  $ hg forget *_*_*-untracked
+  $ rm *_*_missing-*
   $ hg status
-  M added_wc
-  M clean_wc
-  M modified_revert
-  M modified_wc
-  A missing_wc
-  A removed_revert
-  A removed_wc
-  R added_untracked-clean
-  R added_untracked-deleted
-  R added_untracked-wc
-  R clean_untracked-clean
-  R clean_untracked-deleted
-  R clean_untracked-wc
-  R modified_untracked-clean
-  R modified_untracked-deleted
-  R modified_untracked-revert
-  R modified_untracked-wc
-  ! added_deleted
-  ! clean_deleted
-  ! modified_deleted
-  ? missing_untracked-wc
-  ? removed_untracked-revert
-  ? removed_untracked-wc
+  M content1_content1_content3-tracked
+  M content1_content2_content1-tracked
+  M content1_content2_content3-tracked
+  M missing_content2_content3-tracked
+  A content1_missing_content1-tracked
+  A content1_missing_content3-tracked
+  A missing_missing_content3-tracked
+  R content1_content1_content1-untracked
+  R content1_content1_content3-untracked
+  R content1_content1_missing-untracked
+  R content1_content2_content1-untracked
+  R content1_content2_content2-untracked
+  R content1_content2_content3-untracked
+  R content1_content2_missing-untracked
+  R missing_content2_content2-untracked
+  R missing_content2_content3-untracked
+  R missing_content2_missing-untracked
+  ! content1_content1_missing-tracked
+  ! content1_content2_missing-tracked
+  ! missing_content2_missing-tracked
+  ? content1_missing_content1-untracked
+  ? content1_missing_content3-untracked
+  ? missing_missing_content3-untracked
 
   $ hg status --rev 'desc("base")'
-  M clean_wc
-  M modified_clean
-  M modified_wc
-  M removed_wc
-  A added_clean
-  A added_wc
-  A missing_wc
-  R clean_untracked-clean
-  R clean_untracked-deleted
-  R clean_untracked-wc
-  R modified_untracked-clean
-  R modified_untracked-deleted
-  R modified_untracked-revert
-  R modified_untracked-wc
-  R removed_clean
-  R removed_untracked-clean
-  R removed_untracked-revert
-  R removed_untracked-wc
-  ! added_deleted
-  ! clean_deleted
-  ! modified_deleted
-  ? missing_untracked-wc
+  M content1_content1_content3-tracked
+  M content1_content2_content2-tracked
+  M content1_content2_content3-tracked
+  M content1_missing_content3-tracked
+  A missing_content2_content2-tracked
+  A missing_content2_content3-tracked
+  A missing_missing_content3-tracked
+  R content1_content1_content1-untracked
+  R content1_content1_content3-untracked
+  R content1_content1_missing-untracked
+  R content1_content2_content1-untracked
+  R content1_content2_content2-untracked
+  R content1_content2_content3-untracked
+  R content1_content2_missing-untracked
+  R content1_missing_content1-untracked
+  R content1_missing_content3-untracked
+  R content1_missing_missing-tracked
+  R content1_missing_missing-untracked
+  ! content1_content1_missing-tracked
+  ! content1_content2_missing-tracked
+  ! missing_content2_missing-tracked
+  ? missing_missing_content3-untracked
 
 (create a simple text version of the content)
 
   $ python ../dircontent.py > ../content-wc.txt
   $ cat ../content-wc.txt
-  parent added_clean
-  parent added_untracked-clean
-  wc     added_untracked-wc
-  wc     added_wc
-  base   clean_clean
-  base   clean_untracked-clean
-  wc     clean_untracked-wc
-  wc     clean_wc
-  wc     missing_untracked-wc
-  wc     missing_wc
-  parent modified_clean
-  base   modified_revert
-  parent modified_untracked-clean
-  base   modified_untracked-revert
-  wc     modified_untracked-wc
-  wc     modified_wc
-  base   removed_revert
-  base   removed_untracked-revert
-  wc     removed_untracked-wc
-  wc     removed_wc
+  content1 content1_content1_content1-tracked
+  content1 content1_content1_content1-untracked
+  content3 content1_content1_content3-tracked
+  content3 content1_content1_content3-untracked
+  content1 content1_content2_content1-tracked
+  content1 content1_content2_content1-untracked
+  content2 content1_content2_content2-tracked
+  content2 content1_content2_content2-untracked
+  content3 content1_content2_content3-tracked
+  content3 content1_content2_content3-untracked
+  content1 content1_missing_content1-tracked
+  content1 content1_missing_content1-untracked
+  content3 content1_missing_content3-tracked
+  content3 content1_missing_content3-untracked
+  content2 missing_content2_content2-tracked
+  content2 missing_content2_content2-untracked
+  content3 missing_content2_content3-tracked
+  content3 missing_content2_content3-untracked
+  content3 missing_missing_content3-tracked
+  content3 missing_missing_content3-untracked
 
   $ cd ..
 
@@ -796,26 +799,26 @@
 check revert output
 
   $ hg revert --all
-  reverting added_deleted
-  undeleting added_untracked-clean
-  undeleting added_untracked-deleted
-  undeleting added_untracked-wc
-  reverting added_wc
-  reverting clean_deleted
-  undeleting clean_untracked-clean
-  undeleting clean_untracked-deleted
-  undeleting clean_untracked-wc
-  reverting clean_wc
-  forgetting missing_wc
-  reverting modified_deleted
-  reverting modified_revert
-  undeleting modified_untracked-clean
-  undeleting modified_untracked-deleted
-  undeleting modified_untracked-revert
-  undeleting modified_untracked-wc
-  reverting modified_wc
-  forgetting removed_revert
-  forgetting removed_wc
+  undeleting content1_content1_content1-untracked
+  reverting content1_content1_content3-tracked
+  undeleting content1_content1_content3-untracked
+  reverting content1_content1_missing-tracked
+  undeleting content1_content1_missing-untracked
+  reverting content1_content2_content1-tracked
+  undeleting content1_content2_content1-untracked
+  undeleting content1_content2_content2-untracked
+  reverting content1_content2_content3-tracked
+  undeleting content1_content2_content3-untracked
+  reverting content1_content2_missing-tracked
+  undeleting content1_content2_missing-untracked
+  forgetting content1_missing_content1-tracked
+  forgetting content1_missing_content3-tracked
+  undeleting missing_content2_content2-untracked
+  reverting missing_content2_content3-tracked
+  undeleting missing_content2_content3-untracked
+  reverting missing_content2_missing-tracked
+  undeleting missing_content2_missing-untracked
+  forgetting missing_missing_content3-tracked
 
 Compare resulting directory with revert target.
 
@@ -825,20 +828,20 @@
   $ python ../dircontent.py > ../content-parent-all.txt
   $ cd ..
   $ diff -U 0 -- content-parent.txt content-parent-all.txt | grep _
-  +wc     added_untracked-wc.orig
-  +wc     added_wc.orig
-  +wc     clean_untracked-wc.orig
-  +wc     clean_wc.orig
-  +wc     missing_untracked-wc
-  +wc     missing_wc
-  +base   modified_revert.orig
-  +base   modified_untracked-revert.orig
-  +wc     modified_untracked-wc.orig
-  +wc     modified_wc.orig
-  +base   removed_revert
-  +base   removed_untracked-revert
-  +wc     removed_untracked-wc
-  +wc     removed_wc
+  +content3 content1_content1_content3-tracked.orig
+  +content3 content1_content1_content3-untracked.orig
+  +content1 content1_content2_content1-tracked.orig
+  +content1 content1_content2_content1-untracked.orig
+  +content3 content1_content2_content3-tracked.orig
+  +content3 content1_content2_content3-untracked.orig
+  +content1 content1_missing_content1-tracked
+  +content1 content1_missing_content1-untracked
+  +content3 content1_missing_content3-tracked
+  +content3 content1_missing_content3-untracked
+  +content3 missing_content2_content3-tracked.orig
+  +content3 missing_content2_content3-untracked.orig
+  +content3 missing_missing_content3-tracked
+  +content3 missing_missing_content3-untracked
 
 Test revert --all to "base" content
 -----------------------------------
@@ -851,27 +854,27 @@
 check revert output
 
   $ hg revert --all --rev 'desc(base)'
-  removing added_clean
-  removing added_deleted
-  removing added_wc
-  reverting clean_deleted
-  undeleting clean_untracked-clean
-  undeleting clean_untracked-deleted
-  undeleting clean_untracked-wc
-  reverting clean_wc
-  forgetting missing_wc
-  reverting modified_clean
-  reverting modified_deleted
-  undeleting modified_untracked-clean
-  undeleting modified_untracked-deleted
-  undeleting modified_untracked-revert
-  undeleting modified_untracked-wc
-  reverting modified_wc
-  adding removed_clean
-  adding removed_untracked-clean
-  adding removed_untracked-revert
-  adding removed_untracked-wc
-  reverting removed_wc
+  undeleting content1_content1_content1-untracked
+  reverting content1_content1_content3-tracked
+  undeleting content1_content1_content3-untracked
+  reverting content1_content1_missing-tracked
+  undeleting content1_content1_missing-untracked
+  undeleting content1_content2_content1-untracked
+  reverting content1_content2_content2-tracked
+  undeleting content1_content2_content2-untracked
+  reverting content1_content2_content3-tracked
+  undeleting content1_content2_content3-untracked
+  reverting content1_content2_missing-tracked
+  undeleting content1_content2_missing-untracked
+  adding content1_missing_content1-untracked
+  reverting content1_missing_content3-tracked
+  adding content1_missing_content3-untracked
+  adding content1_missing_missing-tracked
+  adding content1_missing_missing-untracked
+  removing missing_content2_content2-tracked
+  removing missing_content2_content3-tracked
+  removing missing_content2_missing-tracked
+  forgetting missing_missing_content3-tracked
 
 Compare resulting directory with revert target.
 
@@ -881,18 +884,18 @@
   $ python ../dircontent.py > ../content-base-all.txt
   $ cd ..
   $ diff -U 0 -- content-base.txt content-base-all.txt | grep _
-  +parent added_untracked-clean
-  +wc     added_untracked-wc
-  +wc     added_wc.orig
-  +wc     clean_untracked-wc.orig
-  +wc     clean_wc.orig
-  +wc     missing_untracked-wc
-  +wc     missing_wc
-  +parent modified_untracked-clean.orig
-  +wc     modified_untracked-wc.orig
-  +wc     modified_wc.orig
-  +wc     removed_untracked-wc.orig
-  +wc     removed_wc.orig
+  +content3 content1_content1_content3-tracked.orig
+  +content3 content1_content1_content3-untracked.orig
+  +content2 content1_content2_content2-untracked.orig
+  +content3 content1_content2_content3-tracked.orig
+  +content3 content1_content2_content3-untracked.orig
+  +content3 content1_missing_content3-tracked.orig
+  +content3 content1_missing_content3-untracked.orig
+  +content2 missing_content2_content2-untracked
+  +content3 missing_content2_content3-tracked.orig
+  +content3 missing_content2_content3-untracked
+  +content3 missing_missing_content3-tracked
+  +content3 missing_missing_content3-untracked
 
 Test revert to parent content with explicit file name
 -----------------------------------------------------
@@ -910,75 +913,75 @@
   >   hg revert $file;
   >   echo
   > done
-  ### revert for: added_clean
-  no changes needed to added_clean
+  ### revert for: missing_content2_content2-tracked
+  no changes needed to missing_content2_content2-tracked
   
-  ### revert for: added_deleted
+  ### revert for: missing_content2_missing-tracked
   
-  ### revert for: added_untracked-clean
+  ### revert for: missing_content2_content2-untracked
   
-  ### revert for: added_untracked-deleted
+  ### revert for: missing_content2_missing-untracked
   
-  ### revert for: added_untracked-wc
+  ### revert for: missing_content2_content3-untracked
   
-  ### revert for: added_wc
+  ### revert for: missing_content2_content3-tracked
   
-  ### revert for: clean_clean
-  no changes needed to clean_clean
+  ### revert for: content1_content1_content1-tracked
+  no changes needed to content1_content1_content1-tracked
   
-  ### revert for: clean_deleted
+  ### revert for: content1_content1_missing-tracked
   
-  ### revert for: clean_untracked-clean
+  ### revert for: content1_content1_content1-untracked
   
-  ### revert for: clean_untracked-deleted
+  ### revert for: content1_content1_missing-untracked
   
-  ### revert for: clean_untracked-wc
+  ### revert for: content1_content1_content3-untracked
   
-  ### revert for: clean_wc
+  ### revert for: content1_content1_content3-tracked
   
-  ### revert for: missing_clean
-  missing_clean: no such file in rev * (glob)
+  ### revert for: missing_missing_missing-tracked
+  missing_missing_missing-tracked: no such file in rev * (glob)
   
-  ### revert for: missing_untracked-clean
-  missing_untracked-clean: no such file in rev * (glob)
+  ### revert for: missing_missing_missing-untracked
+  missing_missing_missing-untracked: no such file in rev * (glob)
   
-  ### revert for: missing_untracked-wc
-  file not managed: missing_untracked-wc
+  ### revert for: missing_missing_content3-untracked
+  file not managed: missing_missing_content3-untracked
   
-  ### revert for: missing_wc
+  ### revert for: missing_missing_content3-tracked
   
-  ### revert for: modified_clean
-  no changes needed to modified_clean
+  ### revert for: content1_content2_content2-tracked
+  no changes needed to content1_content2_content2-tracked
   
-  ### revert for: modified_deleted
+  ### revert for: content1_content2_missing-tracked
   
-  ### revert for: modified_revert
+  ### revert for: content1_content2_content1-tracked
   
-  ### revert for: modified_untracked-clean
+  ### revert for: content1_content2_content2-untracked
   
-  ### revert for: modified_untracked-deleted
+  ### revert for: content1_content2_missing-untracked
   
-  ### revert for: modified_untracked-revert
+  ### revert for: content1_content2_content1-untracked
   
-  ### revert for: modified_untracked-wc
+  ### revert for: content1_content2_content3-untracked
   
-  ### revert for: modified_wc
+  ### revert for: content1_content2_content3-tracked
   
-  ### revert for: removed_clean
-  removed_clean: no such file in rev * (glob)
+  ### revert for: content1_missing_missing-tracked
+  content1_missing_missing-tracked: no such file in rev * (glob)
   
-  ### revert for: removed_revert
+  ### revert for: content1_missing_content1-tracked
   
-  ### revert for: removed_untracked-clean
-  removed_untracked-clean: no such file in rev * (glob)
+  ### revert for: content1_missing_missing-untracked
+  content1_missing_missing-untracked: no such file in rev * (glob)
   
-  ### revert for: removed_untracked-revert
-  file not managed: removed_untracked-revert
+  ### revert for: content1_missing_content1-untracked
+  file not managed: content1_missing_content1-untracked
   
-  ### revert for: removed_untracked-wc
-  file not managed: removed_untracked-wc
+  ### revert for: content1_missing_content3-untracked
+  file not managed: content1_missing_content3-untracked
   
-  ### revert for: removed_wc
+  ### revert for: content1_missing_content3-tracked
   
 
 check resulting directory against the --all run
@@ -1005,74 +1008,74 @@
   >   hg revert $file --rev 'desc(base)';
   >   echo
   > done
-  ### revert for: added_clean
+  ### revert for: missing_content2_content2-tracked
   
-  ### revert for: added_deleted
+  ### revert for: missing_content2_missing-tracked
   
-  ### revert for: added_untracked-clean
-  no changes needed to added_untracked-clean
+  ### revert for: missing_content2_content2-untracked
+  no changes needed to missing_content2_content2-untracked
   
-  ### revert for: added_untracked-deleted
-  no changes needed to added_untracked-deleted
+  ### revert for: missing_content2_missing-untracked
+  no changes needed to missing_content2_missing-untracked
   
-  ### revert for: added_untracked-wc
-  no changes needed to added_untracked-wc
+  ### revert for: missing_content2_content3-untracked
+  no changes needed to missing_content2_content3-untracked
   
-  ### revert for: added_wc
+  ### revert for: missing_content2_content3-tracked
   
-  ### revert for: clean_clean
-  no changes needed to clean_clean
+  ### revert for: content1_content1_content1-tracked
+  no changes needed to content1_content1_content1-tracked
   
-  ### revert for: clean_deleted
+  ### revert for: content1_content1_missing-tracked
   
-  ### revert for: clean_untracked-clean
+  ### revert for: content1_content1_content1-untracked
   
-  ### revert for: clean_untracked-deleted
+  ### revert for: content1_content1_missing-untracked
   
-  ### revert for: clean_untracked-wc
+  ### revert for: content1_content1_content3-untracked
   
-  ### revert for: clean_wc
+  ### revert for: content1_content1_content3-tracked
   
-  ### revert for: missing_clean
-  missing_clean: no such file in rev * (glob)
+  ### revert for: missing_missing_missing-tracked
+  missing_missing_missing-tracked: no such file in rev * (glob)
   
-  ### revert for: missing_untracked-clean
-  missing_untracked-clean: no such file in rev * (glob)
+  ### revert for: missing_missing_missing-untracked
+  missing_missing_missing-untracked: no such file in rev * (glob)
   
-  ### revert for: missing_untracked-wc
-  file not managed: missing_untracked-wc
+  ### revert for: missing_missing_content3-untracked
+  file not managed: missing_missing_content3-untracked
   
-  ### revert for: missing_wc
+  ### revert for: missing_missing_content3-tracked
   
-  ### revert for: modified_clean
+  ### revert for: content1_content2_content2-tracked
   
-  ### revert for: modified_deleted
+  ### revert for: content1_content2_missing-tracked
   
-  ### revert for: modified_revert
-  no changes needed to modified_revert
+  ### revert for: content1_content2_content1-tracked
+  no changes needed to content1_content2_content1-tracked
   
-  ### revert for: modified_untracked-clean
+  ### revert for: content1_content2_content2-untracked
   
-  ### revert for: modified_untracked-deleted
+  ### revert for: content1_content2_missing-untracked
   
-  ### revert for: modified_untracked-revert
+  ### revert for: content1_content2_content1-untracked
   
-  ### revert for: modified_untracked-wc
+  ### revert for: content1_content2_content3-untracked
   
-  ### revert for: modified_wc
+  ### revert for: content1_content2_content3-tracked
   
-  ### revert for: removed_clean
+  ### revert for: content1_missing_missing-tracked
   
-  ### revert for: removed_revert
-  no changes needed to removed_revert
+  ### revert for: content1_missing_content1-tracked
+  no changes needed to content1_missing_content1-tracked
   
-  ### revert for: removed_untracked-clean
+  ### revert for: content1_missing_missing-untracked
   
-  ### revert for: removed_untracked-revert
+  ### revert for: content1_missing_content1-untracked
   
-  ### revert for: removed_untracked-wc
+  ### revert for: content1_missing_content3-untracked
   
-  ### revert for: removed_wc
+  ### revert for: content1_missing_content3-tracked
   
 
 check resulting directory against the --all run