# HG changeset patch # User Alexis S. L. Carvalho # Date 1188625758 10800 # Node ID 2dbd750b3ddddd43aaf253eb905d0ef3d509cb6f # Parent 70e9a527cc610a2eb2234335e11a672415ff0b8a 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. diff -r 70e9a527cc61 -r 2dbd750b3ddd hgext/convert/hg.py --- 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 diff -r 70e9a527cc61 -r 2dbd750b3ddd tests/test-convert-hg-sink --- 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 diff -r 70e9a527cc61 -r 2dbd750b3ddd tests/test-convert-hg-sink.out --- 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