[PATCH 2 of 3] convert: add converted revision properties

Patrick Mezard pmezard at gmail.com
Thu Sep 18 11:53:03 UTC 2008


# HG changeset patch
# User Patrick Mezard <pmezard at gmail.com>
# Date 1221737490 -7200
# Node ID 39f8e50e5cfe202d8fe5db4ec0e0b1eac16ccb42
# Parent  252f622570a453cadb84d174aa8070a61fdc57d0
convert: add converted revision properties

diff --git a/hgext/convert/__init__.py b/hgext/convert/__init__.py
--- a/hgext/convert/__init__.py
+++ b/hgext/convert/__init__.py
@@ -171,6 +171,11 @@
     --config convert.hg.usebranchnames=True   (boolean)
         preserve branch names
 
+    The following property can also be used with changeset templaters:
+
+    - convertedrev: revision number (svn), or revision identifier (hg,
+        git, mtn) of the source revision.
+
     """
     return convcmd.convert(ui, src, dest, revmapfile, **opts)
 
@@ -195,3 +200,18 @@
          [],
          'hg debugsvnlog'),
 }
+
+def reposetup(ui, repo):
+    if not repo.local():
+        return
+
+    def convertedrev(repo, rev, extra):
+        e = extra.get('convert_revision')
+        if not e:
+            return ''
+        if not e.startswith('svn:'):
+            return e
+        return convcmd.splitrev(e)[2]
+
+    repo.addextprop('convertedrev', convertedrev)
+
diff --git a/hgext/convert/convcmd.py b/hgext/convert/convcmd.py
--- a/hgext/convert/convcmd.py
+++ b/hgext/convert/convcmd.py
@@ -10,7 +10,7 @@
 from darcs import darcs_source
 from git import convert_git
 from hg import mercurial_source, mercurial_sink
-from subversion import debugsvnlog, svn_source, svn_sink
+from subversion import debugsvnlog, splitrev, svn_source, svn_sink
 from monotone import monotone_source
 from gnuarch import gnuarch_source
 import filemap
diff --git a/hgext/convert/subversion.py b/hgext/convert/subversion.py
--- a/hgext/convert/subversion.py
+++ b/hgext/convert/subversion.py
@@ -56,6 +56,16 @@
             path = '/' + util.normpath(path)
         return 'file://%s' % path
     return path
+
+def splitrev(rev):
+    url, revnum = rev.split('@', 1)
+    revnum = int(revnum)
+    parts = url.split('/', 1)
+    uuid = parts.pop(0)[4:]
+    mod = ''
+    if parts:
+        mod = '/' + parts[0]
+    return uuid, mod, revnum
 
 def optrev(number):
     optrev = svn.core.svn_opt_revision_t()
@@ -444,14 +454,7 @@
         return int(rev.split('@')[-1])
 
     def revsplit(self, rev):
-        url, revnum = rev.encode(self.encoding).split('@', 1)
-        revnum = int(revnum)
-        parts = url.split('/', 1)
-        uuid = parts.pop(0)[4:]
-        mod = ''
-        if parts:
-            mod = '/' + parts[0]
-        return uuid, mod, revnum
+        return splitrev(rev.encode(self.encoding))
 
     def latest(self, path, stop=0):
         """Find the latest revid affecting path, up to stop. It may return
diff --git a/tests/test-convert-git b/tests/test-convert-git
--- a/tests/test-convert-git
+++ b/tests/test-convert-git
@@ -126,6 +126,7 @@
 hg -q convert --datesort git-repo2 fullrepo
 hg up -q -R fullrepo
 glog -R fullrepo
+hg -R fullrepo log --template '#rev# #convertedrev#\n'
 hg -R fullrepo manifest --debug
 
 splitrepo 'octopus merge' 'foo bar baz'
diff --git a/tests/test-convert-git.out b/tests/test-convert-git.out
--- a/tests/test-convert-git.out
+++ b/tests/test-convert-git.out
@@ -44,6 +44,16 @@
 |/
 o  0 "add foo" files: foo
 
+9 7c60a49dcad9e283ddf4fae23b0f82e4df6e13cc
+8 017c067493b5d793b09de3f27b0f8a5c153ff173
+7 7d2c24e3a393f1e2cb9a8a056a926b4e82905f51
+6 deb61f0573141205f782cee4b5f0a8d9ea1660f4
+5 deb61f0573141205f782cee4b5f0a8d9ea1660f4
+4 5309dc2c5d1610ac42958d2581de7d4d0b3100ae
+3 003f66b837987c77d18bfec007d8f6b452406fea
+2 b1db934f437223e151ddd52fa03af85a02866327
+1 1f1d4386e14a2fe82ceea95496eddd3729dbbfa0
+0 9ae79575692d429bdf6f60e3257562fbfe73ab7d
 245a3b8bc653999c2b22cdabd517ccb47aecafdf 644   bar
 354ae8da6e890359ef49ade27b68bbc361f3ca88 644   baz
 9277c9cc8dd4576fc01a17939b4351e5ada93466 644   foo
diff --git a/tests/test-convert-hg-startrev b/tests/test-convert-hg-startrev
--- a/tests/test-convert-hg-startrev
+++ b/tests/test-convert-hg-startrev
@@ -57,5 +57,7 @@
 hg up -C
 hg cat -r tip a b
 hg -q verify
+echo % test convertedrev property
+hg log --template '#rev# #convertedrev# #desc#\n'
 cd ..
 
diff --git a/tests/test-convert-hg-startrev.out b/tests/test-convert-hg-startrev.out
--- a/tests/test-convert-hg-startrev.out
+++ b/tests/test-convert-hg-startrev.out
@@ -86,3 +86,6 @@
 a
 b
 b
+% test convertedrev property
+1 d248623a9b6921cd91e482390e0a1c5daa73ad82 5: change a
+0 7c7d9d335cf1e64a18a42c9e837cb4e5508d0cd4 4: merge 2 and 3, copy d from b
diff --git a/tests/test-convert-mtn b/tests/test-convert-mtn
--- a/tests/test-convert-mtn
+++ b/tests/test-convert-mtn
@@ -74,7 +74,7 @@
 
 glog()
 {
-    hg glog --template '#rev# "#desc|firstline#" files: #files#\n' "$@"
+    hg glog --template '#rev# #convertedrev# "#desc|firstline#" files: #files#\n' "$@"
 }
 
 cd repo.mtn-hg
diff --git a/tests/test-convert-mtn.out b/tests/test-convert-mtn.out
--- a/tests/test-convert-mtn.out
+++ b/tests/test-convert-mtn.out
@@ -47,17 +47,17 @@
 1 emptydir
 0 dropdirectory
 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
-@  5 "dropdirectory" files: dir2/dir/subdir/f
+@  5 ba57ba5ac63178529d37fa8a2a1a012fc0e42047 "dropdirectory" files: dir2/dir/subdir/f
 |
-o  4 "emptydir" files: dir2/dir/subdir/f
+o  4 27a423be1e406595cc57f50f42a8790fa0a93d8e "emptydir" files: dir2/dir/subdir/f
 |
-o  3 "movedir" files: dir/a dir2/a
+o  3 5de5abe7c15eae70cf3acdda23c9c319ea50c1af "movedir" files: dir/a dir2/a
 |
-o  2 "update2 "with" quotes" files: bin bin2 dir/b e
+o  2 6c6977a6ef609ec80e40779f89dbd2772c96de62 "update2 "with" quotes" files: bin bin2 dir/b e
 |
-o  1 "update1" files: a bin c dir/a dir/b
+o  1 4daf60753d6fe21a06ce5f716303fe55fd6d3a56 "update1" files: a bin c dir/a dir/b
 |
-o  0 "initialize" files: a bin c dir/b
+o  0 803ef0bf815e35b951dbd4310acd1e45e675016e "initialize" files: a bin c dir/b
 
 % manifest
 bin2
diff --git a/tests/test-convert-svn-source b/tests/test-convert-svn-source
--- a/tests/test-convert-svn-source
+++ b/tests/test-convert-svn-source
@@ -79,7 +79,7 @@
 echo % test filemap
 echo 'include letter2.txt' > filemap
 hg convert --filemap filemap $svnurl/trunk fmap
-hg glog -R fmap --template '#rev# #desc|firstline# files: #files#\n'
+hg glog -R fmap --template '#rev# #convertedrev# #desc|firstline# files: #files#\n'
 
 echo % test stop revision
 hg convert --rev 1 $svnurl/trunk stoprev
diff --git a/tests/test-convert-svn-source.out b/tests/test-convert-svn-source.out
--- a/tests/test-convert-svn-source.out
+++ b/tests/test-convert-svn-source.out
@@ -77,9 +77,9 @@
 2 nice day
 1 second letter
 0 work in progress
-o  1 work in progress files: letter2.txt
+o  1 8 work in progress files: letter2.txt
 |
-o  0 second letter files: letter2.txt
+o  0 6 second letter files: letter2.txt
 
 % test stop revision
 initializing destination stoprev repository
diff --git a/tests/test-convert.out b/tests/test-convert.out
--- a/tests/test-convert.out
+++ b/tests/test-convert.out
@@ -158,6 +158,11 @@
     --config convert.hg.usebranchnames=True   (boolean)
         preserve branch names
 
+    The following property can also be used with changeset templaters:
+
+    - convertedrev: revision number (svn), or revision identifier (hg,
+        git, mtn) of the source revision.
+
 options:
 
  -A --authors      username mapping filename



More information about the Mercurial-devel mailing list