convert: added GNU Arch (tla) tests and related fixes
authorAleix Conchillo Flaque <aleix@member.fsf.org>
Tue, 12 Feb 2008 11:35:06 +0100
changeset 6079 ea34059b89de
parent 6078 ebc23d34102f
child 6080 4baad19c4801
convert: added GNU Arch (tla) tests and related fixes
hgext/convert/gnuarch.py
tests/hghave
tests/test-convert-tla
tests/test-convert-tla.out
--- 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