changeset 5279:2dbd750b3ddd

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.
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
date Sat, 01 Sep 2007 02:49:18 -0300
parents 70e9a527cc61
children 11e1e574da02
files hgext/convert/hg.py tests/test-convert-hg-sink tests/test-convert-hg-sink.out
diffstat 3 files changed, 47 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/convert/hg.py
+++ b/hgext/convert/hg.py
@@ -32,8 +32,10 @@ class mercurial_sink(converter_sink):
     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
+++ b/tests/test-convert-hg-sink
@@ -24,4 +24,30 @@ cd ..
 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
+++ b/tests/test-convert-hg-sink.out
@@ -31,3 +31,21 @@ 0 Added tag some-tag for changeset ad681
 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