--- a/hgext/convert/gnuarch.py Tue Feb 12 10:38:34 2008 +0100
+++ b/hgext/convert/gnuarch.py Tue Feb 12 11:35:06 2008 +0100
@@ -227,6 +227,11 @@
files = self._readcontents(self.tmppath)
self.changes[rev].add_files += files
+ def _stripbasepath(self, path):
+ if path.startswith('./'):
+ return path[2:]
+ return path
+
def _parsecatlog(self, data, rev):
summary = []
for l in data:
@@ -248,27 +253,27 @@
l = l.strip()
# Added file (ignore added directory)
if l.startswith('A') and not l.startswith('A/'):
- file = l[1:].strip()
+ file = self._stripbasepath(l[1:].strip())
if not self._exclude(file):
self.changes[rev].add_files.append(file)
# Deleted file (ignore deleted directory)
elif l.startswith('D') and not l.startswith('D/'):
- file = l[1:].strip()
+ file = self._stripbasepath(l[1:].strip())
if not self._exclude(file):
self.changes[rev].del_files.append(file)
# Modified binary file
elif l.startswith('Mb'):
- file = l[2:].strip()
+ file = self._stripbasepath(l[2:].strip())
if not self._exclude(file):
self.changes[rev].mod_files.append(file)
# Modified link
elif l.startswith('M->'):
- file = l[3:].strip()
+ file = self._stripbasepath(l[3:].strip())
if not self._exclude(file):
self.changes[rev].mod_files.append(file)
# Modified file
elif l.startswith('M'):
- file = l[1:].strip()
+ file = self._stripbasepath(l[1:].strip())
if not self._exclude(file):
self.changes[rev].mod_files.append(file)
# Renamed file (or link)
@@ -276,11 +281,13 @@
files = l[2:].strip().split(' ')
if len(files) == 1:
files = l[2:].strip().split('\t')
- if not self._exclude(files[0]) and not self._exclude(files[1]):
- self.changes[rev].ren_files[files[0]] = files[1]
+ src = self._stripbasepath(files[0])
+ dst = self._stripbasepath(files[1])
+ if not self._exclude(src) and not self._exclude(dst):
+ self.changes[rev].ren_files[src] = dst
# Conversion from file to link or from link to file (modified)
elif l.startswith('ch'):
- file = l[2:].strip()
+ file = self._stripbasepath(l[2:].strip())
if not self._exclude(file):
self.changes[rev].mod_files.append(file)
# Renamed directory
@@ -288,5 +295,7 @@
dirs = l[2:].strip().split(' ')
if len(dirs) == 1:
dirs = l[2:].strip().split('\t')
- if not self._exclude(dirs[0]) and not self._exclude(dirs[1]):
- self.changes[rev].ren_dirs[dirs[0]] = dirs[1]
+ src = self._stripbasepath(dirs[0])
+ dst = self._stripbasepath(dirs[1])
+ if not self._exclude(src) and not self._exclude(dst):
+ self.changes[rev].ren_dirs[src] = dst
--- a/tests/hghave Tue Feb 12 10:38:34 2008 +0100
+++ b/tests/hghave Tue Feb 12 11:35:06 2008 +0100
@@ -88,6 +88,9 @@
def has_symlink():
return hasattr(os, "symlink")
+def has_tla():
+ return matchoutput('tla --version 2>&1', r'The GNU Arch Revision')
+
def has_unix_permissions():
d = tempfile.mkdtemp(prefix=tempprefix, dir=".")
try:
@@ -118,6 +121,7 @@
"svn": (has_svn, "subversion client and admin tools"),
"svn-bindings": (has_svn_bindings, "subversion python bindings"),
"symlink": (has_symlink, "symbolic links"),
+ "tla": (has_tla, "GNU Arch tla client"),
"unix-permissions": (has_unix_permissions, "unix-style permissions"),
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-tla Tue Feb 12 11:35:06 2008 +0100
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+"$TESTDIR/hghave" tla || exit 80
+
+echo "[extensions]" >> $HGRCPATH
+echo "convert=" >> $HGRCPATH
+echo 'hgext.graphlog =' >> $HGRCPATH
+
+echo % create tla archive
+tla make-archive tla@mercurial--convert `pwd`/hg-test-convert-tla
+
+echo % initialize tla repo
+mkdir tla-repo
+cd tla-repo/
+tla init-tree tla@mercurial--convert/tla--test--0
+tla import
+
+echo % create initial files
+echo 'this is a file' > a
+tla add a
+mkdir src
+tla add src
+cd src
+dd count=1 if=/dev/zero of=b > /dev/null 2> /dev/null
+tla add b
+tla commit -s "added a file, src and src/b (binary)"
+
+echo % create link file and modify a
+ln -s ../a a-link
+tla add a-link
+echo 'this a modification to a' >> ../a
+tla commit -s "added link to a and modify a"
+
+echo % create second link and modify b
+ln -s ../a a-link-2
+tla add a-link-2
+dd count=1 seek=1 if=/dev/zero of=b > /dev/null 2> /dev/null
+tla commit -s "added second link and modify b"
+
+echo % b file to link and a-link-2 to regular file
+rm -f a-link-2
+echo 'this is now a regular file' > a-link-2
+ln -sf ../a b
+tla commit -s "file to link and link to file test"
+
+echo % move a-link-2 file and src directory
+cd ..
+tla mv src/a-link-2 c
+tla mv src test
+tla commit -s "move and rename a-link-2 file and src directory"
+
+cd ..
+
+echo % converting tla repo to Mercurial
+hg convert tla-repo tla-repo-hg
+
+tla register-archive -d tla@mercurial--convert
+
+glog()
+{
+ hg glog --template '#rev# "#desc|firstline#" files: #files#\n' "$@"
+}
+
+echo % show graph log
+glog -R tla-repo-hg
+hg -R tla-repo-hg manifest --debug
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-tla.out Tue Feb 12 11:35:06 2008 +0100
@@ -0,0 +1,72 @@
+% create tla archive
+% initialize tla repo
+* creating version tla@mercurial--convert/tla--test--0
+* imported tla@mercurial--convert/tla--test--0
+% create initial files
+A/ .arch-ids
+A/ src
+A/ src/.arch-ids
+A .arch-ids/a.id
+A a
+A src/.arch-ids/=id
+A src/.arch-ids/b.id
+A src/b
+* update pristine tree (tla@mercurial--convert/tla--test--0--base-0 => tla--test--0--patch-1)
+* committed tla@mercurial--convert/tla--test--0--patch-1
+% create link file and modify a
+A src/.arch-ids/a-link.id
+A src/a-link
+M a
+* update pristine tree (tla@mercurial--convert/tla--test--0--patch-1 => tla--test--0--patch-2)
+* committed tla@mercurial--convert/tla--test--0--patch-2
+% create second link and modify b
+A src/.arch-ids/a-link-2.id
+A src/a-link-2
+Mb src/b
+* update pristine tree (tla@mercurial--convert/tla--test--0--patch-2 => tla--test--0--patch-3)
+* committed tla@mercurial--convert/tla--test--0--patch-3
+% b file to link and a-link-2 to regular file
+fl src/b
+lf src/a-link-2
+* update pristine tree (tla@mercurial--convert/tla--test--0--patch-3 => tla--test--0--patch-4)
+* committed tla@mercurial--convert/tla--test--0--patch-4
+% move a-link-2 file and src directory
+D/ src/.arch-ids
+A/ test/.arch-ids
+/> src test
+=> src/.arch-ids/a-link-2.id .arch-ids/c.id
+=> src/a-link-2 c
+=> src/.arch-ids/=id test/.arch-ids/=id
+=> src/.arch-ids/a-link.id test/.arch-ids/a-link.id
+=> src/.arch-ids/b.id test/.arch-ids/b.id
+* update pristine tree (tla@mercurial--convert/tla--test--0--patch-4 => tla--test--0--patch-5)
+* committed tla@mercurial--convert/tla--test--0--patch-5
+% converting tla repo to Mercurial
+initializing destination tla-repo-hg repository
+analyzing tree version tla@mercurial--convert/tla--test--0...
+scanning source...
+sorting...
+converting...
+5 initial import
+4 added a file, src and src/b (binary)
+3 added link to a and modify a
+2 added second link and modify b
+1 file to link and link to file test
+0 move and rename a-link-2 file and src directory
+% show graph log
+o 5 "move and rename a-link-2 file and src directory" files: c src/a-link src/a-link-2 src/b test/a-link test/b
+|
+o 4 "file to link and link to file test" files: src/a-link-2 src/b
+|
+o 3 "added second link and modify b" files: src/a-link-2 src/b
+|
+o 2 "added link to a and modify a" files: a src/a-link
+|
+o 1 "added a file, src and src/b (binary)" files: a src/b
+|
+o 0 "initial import" files:
+
+c4072c4b72e1cabace081888efa148ee80ca3cbb 644 a
+e3207be798aaf87a444a62903621edab4ddc1fb6 644 c
+1f6b5bb93f1da278ef1fead1e4740a03d8802e9f 644 @ test/a-link
+1f6b5bb93f1da278ef1fead1e4740a03d8802e9f 644 @ test/b