convert: clear the dirstate before a conversion, invalidate it afterwards
Clearing it before the conversion protects us from whatever data were
there (file copies in particular).
Invalidating it after the conversion avoids writing a possibly
inconsistent dirstate to disk.
--- a/hgext/convert/hg.py Sat Sep 01 02:49:18 2007 -0300
+++ b/hgext/convert/hg.py Sat Sep 01 02:49:18 2007 -0300
@@ -32,8 +32,10 @@
def before(self):
self.wlock = self.repo.wlock()
self.lock = self.repo.lock()
+ self.repo.dirstate.clear()
def after(self):
+ self.repo.dirstate.invalidate()
self.lock = None
self.wlock = None
--- a/tests/test-convert-hg-sink Sat Sep 01 02:49:18 2007 -0300
+++ b/tests/test-convert-hg-sink Sat Sep 01 02:49:18 2007 -0300
@@ -24,4 +24,30 @@
hg convert orig new 2>&1 | grep -v 'subversion python bindings could not be loaded'
cd new
hg out ../orig
-true
+
+echo '% dirstate should be empty:'
+hg debugstate
+hg parents -q
+
+hg up -C
+hg copy bar baz
+echo '% put something in the dirstate:'
+hg debugstate > debugstate
+grep baz debugstate
+
+echo '% add a new revision in the original repo'
+cd ../orig
+echo baz > baz
+hg ci -qAm 'add baz'
+
+cd ..
+hg convert orig new 2>&1 | grep -v 'subversion python bindings could not be loaded'
+cd new
+hg out ../orig
+echo '% dirstate should be the same (no output below):'
+hg debugstate > new-debugstate
+diff debugstate new-debugstate
+
+echo '% no copies'
+hg up -C
+hg debugrename baz
--- a/tests/test-convert-hg-sink.out Sat Sep 01 02:49:18 2007 -0300
+++ b/tests/test-convert-hg-sink.out Sat Sep 01 02:49:18 2007 -0300
@@ -31,3 +31,21 @@
comparing with ../orig
searching for changes
no changes found
+% dirstate should be empty:
+3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+% put something in the dirstate:
+a 0 -1 unset baz
+copy: bar -> baz
+% add a new revision in the original repo
+destination new is a Mercurial repository
+scanning source...
+sorting...
+converting...
+0 add baz
+comparing with ../orig
+searching for changes
+no changes found
+% dirstate should be the same (no output below):
+% no copies
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+baz not renamed