convert: some tidyups, doc improvements, and test fixes
The various back end options are now documented.
The hg source can now be configured not to hand out a revision ID.
--- a/hgext/convert/__init__.py Mon Nov 26 17:24:21 2007 -0800
+++ b/hgext/convert/__init__.py Tue Nov 27 09:44:09 2007 -0800
@@ -332,6 +332,24 @@
The 'rename' directive renames a file or directory. To rename from a
subdirectory into the root of the repository, use '.' as the path to
rename to.
+
+ Back end options:
+
+ --config convert.hg.clonebranches=False (boolean)
+ hg target: XXX not documented
+ --config convert.hg.saverev=True (boolean)
+ hg source: allow target to preserve source revision ID
+ --config convert.hg.tagsbranch=default (branch name)
+ hg target: XXX not documented
+ --config convert.hg.usebranchnames=True (boolean)
+ hg target: preserve branch names
+
+ --config convert.svn.branches=branches (directory name)
+ svn source: specify the directory containing branches
+ --config convert.svn.tags=tags (directory name)
+ svn source: specify the directory containing tags
+ --config convert.svn.trunk=trunk (directory name)
+ svn source: specify the name of the trunk branch
"""
util._encoding = 'UTF-8'
--- a/hgext/convert/common.py Mon Nov 26 17:24:21 2007 -0800
+++ b/hgext/convert/common.py Tue Nov 27 09:44:09 2007 -0800
@@ -40,7 +40,7 @@
class converter_source(object):
"""Conversion source interface"""
- def __init__(self, ui, path, rev=None):
+ def __init__(self, ui, path=None, rev=None):
"""Initialize conversion source (or raise NoRepo("message")
exception if path is not a valid repository)"""
self.ui = ui
--- a/hgext/convert/filemap.py Mon Nov 26 17:24:21 2007 -0800
+++ b/hgext/convert/filemap.py Tue Nov 27 09:44:09 2007 -0800
@@ -7,7 +7,7 @@
import shlex
from mercurial.i18n import _
from mercurial import util
-from common import SKIPREV
+from common import SKIPREV, converter_source
def rpairs(name):
e = len(name)
@@ -110,9 +110,9 @@
# touch files we're interested in, but also merges that merge two
# or more interesting revisions.
-class filemap_source(object):
+class filemap_source(converter_source):
def __init__(self, ui, baseconverter, filemap):
- self.ui = ui
+ super(filemap_source, self).__init__(ui)
self.base = baseconverter
self.filemapper = filemapper(ui, filemap)
self.commits = {}
@@ -344,9 +344,3 @@
def gettags(self):
return self.base.gettags()
-
- def before(self):
- pass
-
- def after(self):
- pass
--- a/hgext/convert/hg.py Mon Nov 26 17:24:21 2007 -0800
+++ b/hgext/convert/hg.py Tue Nov 27 09:44:09 2007 -0800
@@ -1,10 +1,16 @@
# hg backend for convert extension
-# Note for hg->hg conversion: Old versions of Mercurial didn't trim
-# the whitespace from the ends of commit messages, but new versions
-# do. Changesets created by those older versions, then converted, may
-# thus have different hashes for changesets that are otherwise
-# identical.
+# Notes for hg->hg conversion:
+#
+# * Old versions of Mercurial didn't trim the whitespace from the ends
+# of commit messages, but new versions do. Changesets created by
+# those older versions, then converted, may thus have different
+# hashes for changesets that are otherwise identical.
+#
+# * By default, the source revision is stored in the converted
+# revision. This will cause the converted revision to have a
+# different identity than the source. To avoid this, use the
+# following option: "--config convert.hg.saverev=false"
import os, time
@@ -181,6 +187,7 @@
class mercurial_source(converter_source):
def __init__(self, ui, path, rev=None):
converter_source.__init__(self, ui, path, rev)
+ self.saverev = ui.configbool('convert', 'hg.saverev', True)
try:
self.repo = hg.repository(self.ui, path)
# try to provoke an exception if this isn't really a hg
@@ -239,8 +246,12 @@
def getcommit(self, rev):
ctx = self.changectx(rev)
parents = [hex(p.node()) for p in ctx.parents() if p.node() != nullid]
+ if self.saverev:
+ crev = rev
+ else:
+ crev = None
return commit(author=ctx.user(), date=util.datestr(ctx.date()),
- desc=ctx.description(), rev=rev, parents=parents,
+ desc=ctx.description(), rev=crev, parents=parents,
branch=ctx.branch(), extra=ctx.extra())
def gettags(self):
--- a/tests/test-convert Mon Nov 26 17:24:21 2007 -0800
+++ b/tests/test-convert Tue Nov 27 09:44:09 2007 -0800
@@ -1,7 +1,11 @@
#!/bin/sh
-echo "[extensions]" >> $HGRCPATH
-echo "convert=" >> $HGRCPATH
+cat >> $HGRCPATH <<EOF
+[extensions]
+convert=
+[convert]
+hg.saverev=False
+EOF
hg help convert
--- a/tests/test-convert-cvs.out Mon Nov 26 17:24:21 2007 -0800
+++ b/tests/test-convert-cvs.out Tue Nov 27 09:44:09 2007 -0800
@@ -44,7 +44,6 @@
checking in src/a,v
checking in src/b/c,v
% convert again
-destination src-hg is a Mercurial repository
connecting to cvsrepo
scanning source...
sorting...
@@ -56,7 +55,6 @@
c
c
% convert again with --filemap
-destination src-filemap is a Mercurial repository
connecting to cvsrepo
scanning source...
sorting...
--- a/tests/test-convert-hg-sink Mon Nov 26 17:24:21 2007 -0800
+++ b/tests/test-convert-hg-sink Tue Nov 27 09:44:09 2007 -0800
@@ -1,7 +1,11 @@
#!/bin/sh
-echo "[extensions]" >> $HGRCPATH
-echo "hgext.convert=" >> $HGRCPATH
+cat >> $HGRCPATH <<EOF
+[extensions]
+convert=
+[convert]
+hg.saverev=False
+EOF
hg init orig
cd orig
--- a/tests/test-convert-hg-sink.out Mon Nov 26 17:24:21 2007 -0800
+++ b/tests/test-convert-hg-sink.out Tue Nov 27 09:44:09 2007 -0800
@@ -37,7 +37,6 @@
a 0 -1 unset baz
copy: bar -> baz
% add a new revision in the original repo
-destination new is a Mercurial repository
scanning source...
sorting...
converting...
--- a/tests/test-convert-hg-source Mon Nov 26 17:24:21 2007 -0800
+++ b/tests/test-convert-hg-source Tue Nov 27 09:44:09 2007 -0800
@@ -1,7 +1,11 @@
#!/bin/sh
-echo "[extensions]" >> $HGRCPATH
-echo "hgext.convert=" >> $HGRCPATH
+cat >> $HGRCPATH <<EOF
+[extensions]
+convert=
+[convert]
+hg.saverev=False
+EOF
hg init orig
cd orig
--- a/tests/test-convert-svn-source.out Mon Nov 26 17:24:21 2007 -0800
+++ b/tests/test-convert-svn-source.out Tue Nov 27 09:44:09 2007 -0800
@@ -25,7 +25,6 @@
Committed revision 3.
% test incremental conversion
assuming destination trunk-hg
-destination trunk-hg is a Mercurial repository
scanning source...
sorting...
converting...
@@ -86,7 +85,6 @@
Transmitting file data .
Committed revision 11.
% test incremental conversion
-destination A-hg is a Mercurial repository
scanning source...
sorting...
converting...
--- a/tests/test-convert.out Mon Nov 26 17:24:21 2007 -0800
+++ b/tests/test-convert.out Tue Nov 27 09:44:09 2007 -0800
@@ -55,6 +55,24 @@
subdirectory into the root of the repository, use '.' as the path to
rename to.
+ Back end options:
+
+ --config convert.hg.clonebranches=False (boolean)
+ hg target: XXX not documented
+ --config convert.hg.saverev=True (boolean)
+ hg source: allow target to preserve source revision ID
+ --config convert.hg.tagsbranch=default (branch name)
+ hg target: XXX not documented
+ --config convert.hg.usebranchnames=True (boolean)
+ hg target: preserve branch names
+
+ --config convert.svn.branches=branches (directory name)
+ svn source: specify the directory containing branches
+ --config convert.svn.tags=tags (directory name)
+ svn source: specify the directory containing tags
+ --config convert.svn.trunk=trunk (directory name)
+ svn source: specify the name of the trunk branch
+
options:
-A --authors username mapping filename