tests/generate-working-copy-states.py
changeset 23195 29977b315be1
child 23445 390a2610eaef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/generate-working-copy-states.py	Mon Nov 03 16:27:01 2014 -0800
@@ -0,0 +1,50 @@
+# generate proper file state to test working copy behavior
+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 (False, True):
+                def statestring(content):
+                    return content is None and 'missing' or content
+                trackedstring = tracked and 'tracked' or 'untracked'
+                filename = "%s_%s_%s-%s" % (statestring(base),
+                                            statestring(parent),
+                                            statestring(wcc),
+                                            trackedstring)
+                combination.append((filename, base, parent, wcc))
+
+# make sure we have stable output
+combination.sort()
+
+# retrieve the state we must generate
+target = sys.argv[1]
+
+# compute file content
+content = []
+for filename, base, parent, wcc in combination:
+    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'))
+    else:
+        print >> sys.stderr, "unknown target:", target
+        sys.exit(1)
+
+# write actual content
+for filename, data in content:
+    if data is not None:
+        f = open(filename, 'w')
+        f.write(data + '\n')
+        f.close()
+    elif os.path.exists(filename):
+        os.remove(filename)