convert/bzr: make it work with filemaps (
issue1631)
The bzr converter maintains a child -> parents mapping and drop entries
whenever a child is read. It does not work with filemaps, getchangedfiles() may
be called more than once when filtered files belong to merge revisions.
getchanges() still works that way but it is not clear whether a similar issue
can arise when interacting with merges.
--- a/hgext/convert/bzr.py Fri Apr 24 10:34:11 2009 +0200
+++ b/hgext/convert/bzr.py Sun Apr 26 11:35:53 2009 +0200
@@ -123,9 +123,8 @@
def getchangedfiles(self, rev, i):
self._modecache = {}
curtree = self.sourcerepo.revision_tree(rev)
- parentids = self._parentids.pop(rev)
if i is not None:
- parentid = parentids[i]
+ parentid = self._parentids[rev][i]
else:
# no parent id, get the empty revision
parentid = revision.NULL_REVISION
--- a/tests/test-convert-bzr Fri Apr 24 10:34:11 2009 +0200
+++ b/tests/test-convert-bzr Sun Apr 26 11:35:53 2009 +0200
@@ -27,6 +27,12 @@
echo "% test --rev option"
hg convert -r 1 source source-1-hg
glog -R source-1-hg
+echo "% test with filemap"
+cat > filemap <<EOF
+exclude a
+EOF
+hg convert --filemap filemap source source-filemap-hg
+hg -R source-filemap-hg manifest -r tip
cd ..
echo % merge
--- a/tests/test-convert-bzr.out Fri Apr 24 10:34:11 2009 +0200
+++ b/tests/test-convert-bzr.out Sun Apr 26 11:35:53 2009 +0200
@@ -25,6 +25,16 @@
0 Initial add: a, c, e
o 0 "Initial add: a, c, e" files: a c e
+% test with filemap
+initializing destination source-filemap-hg repository
+scanning source...
+sorting...
+converting...
+1 Initial add: a, c, e
+0 rename a into b, create a, rename c into d
+b
+d
+f
% merge
initializing destination source-hg repository
scanning source...