[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