debugdirstate: add command to rebuildstate test to modify dirstate
Debugging the dirstate helps if you have options to add files for normal lookup
or drop them from the dirstate. This patch adds a convenience command to
test-rebuilddirstate.t to modify the dirstate. It will be used in the next patch
to write proper tests for debugrebuilddirstate --minimal
--- a/tests/test-rebuildstate.t Wed Dec 02 06:33:52 2015 +0000
+++ b/tests/test-rebuildstate.t Tue Dec 01 11:17:14 2015 -0800
@@ -1,3 +1,34 @@
+
+ $ cat > adddrop.py <<EOF
+ > from mercurial import cmdutil
+ > cmdtable = {}
+ > command = cmdutil.command(cmdtable)
+ > @command('debugadddrop',
+ > [('', 'drop', False, 'drop file from dirstate', 'FILE'),
+ > ('', 'normal-lookup', False, 'add file to dirstate', 'FILE')],
+ > 'hg debugadddrop')
+ > def debugadddrop(ui, repo, *pats, **opts):
+ > '''Add or drop unnamed arguments to or from the dirstate'''
+ > drop = opts.get('drop')
+ > nl = opts.get('normal_lookup')
+ > if nl and drop:
+ > raise error.Abort('drop and normal-lookup are mutually exclusive')
+ > wlock = repo.wlock()
+ > try:
+ > for file in pats:
+ > if opts.get('normal_lookup'):
+ > repo.dirstate.normallookup(file)
+ > else:
+ > repo.dirstate.drop(file)
+ >
+ > repo.dirstate.write(repo.currenttransaction())
+ > finally:
+ > wlock.release()
+ > EOF
+
+ $ echo "[extensions]" >> $HGRCPATH
+ $ echo "debugadddrop=`pwd`/adddrop.py" >> $HGRCPATH
+
basic test for hg debugrebuildstate
$ hg init repo
@@ -20,6 +51,15 @@
n 644 -1 set bar
n 644 -1 set foo
+ $ hg debugadddrop --normal-lookup file1 file2
+ $ hg debugadddrop --drop bar
+ $ hg debugadddrop --drop
+ $ hg debugstate --nodates
+ n 0 -1 unset file1
+ n 0 -1 unset file2
+ n 644 -1 set foo
+ $ hg debugrebuildstate
+
status
$ hg st -A