##// END OF EJS Templates
win32: remove text man pages from Windows package...
win32: remove text man pages from Windows package The HTML versions are still packaged, and do not suffer from eoln problems. This solves issue531 (addition through subtraction)

File last commit:

r5621:badbefa5 default
r5630:44482de0 default
Show More
__init__.py
401 lines | 13.1 KiB | text/x-python | PythonLexer
Edouard Gomez
Turns convert.py into a real extension
r4513 # convert.py Foreign SCM converter
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512 #
Thomas Arendsen Hein
Updated copyright notices and add "and others" to "hg version"
r4635 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512 #
Edouard Gomez
Turns convert.py into a real extension
r4513 # This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512
Bryan O'Sullivan
convert: abstract map files into a class
r5510 from common import NoRepo, SKIPREV, converter_source, converter_sink, mapfile
Brendan Cully
Split convert extension into common and repository type modules
r4536 from cvs import convert_cvs
Bryan O'Sullivan
convert: support darcs as a source repo
r5359 from darcs import darcs_source
Brendan Cully
Split convert extension into common and repository type modules
r4536 from git import convert_git
Bryan O'Sullivan
convert: Support Mercurial as a source, as well as a sink
r5013 from hg import mercurial_source, mercurial_sink
Bryan O'Sullivan
convert: add support for Subversion as a sink
r5513 from subversion import debugsvnlog, svn_source, svn_sink
Alexis S. L. Carvalho
convert: readd --filemap...
r5377 import filemap
Brendan Cully
Split convert extension into common and repository type modules
r4536
Alexis S. L. Carvalho
convert: move filemapper class to a separate file
r5376 import os, shutil
Thomas Arendsen Hein
Some small cleanups for convert extension:...
r4532 from mercurial import hg, ui, util, commands
Bryan O'Sullivan
convert: add filename filtering and renaming support
r5016 from mercurial.i18n import _
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512
Thomas Arendsen Hein
convert: Use debugsvnlog instead of git-like debug-svn-log.
r5138 commands.norepo += " convert debugsvnlog"
Edouard Gomez
Turns convert.py into a real extension
r4513
Bryan O'Sullivan
convert: refactor sink initialisation, to remove hardcoding of hg...
r5441 source_converters = [
('cvs', convert_cvs),
('git', convert_git),
('svn', svn_source),
('hg', mercurial_source),
('darcs', darcs_source),
]
sink_converters = [
('hg', mercurial_sink),
Bryan O'Sullivan
convert: add support for Subversion as a sink
r5513 ('svn', svn_sink),
Bryan O'Sullivan
convert: refactor sink initialisation, to remove hardcoding of hg...
r5441 ]
def convertsource(ui, path, type, rev):
Alexis S. L. Carvalho
convert: display all errors if we couldn't open the source repo...
r5521 exceptions = []
Bryan O'Sullivan
convert: refactor sink initialisation, to remove hardcoding of hg...
r5441 for name, source in source_converters:
Brendan Cully
convert: split converter into convertsource and convertsink
r4763 try:
Bryan O'Sullivan
convert: refactor sink initialisation, to remove hardcoding of hg...
r5441 if not type or name == type:
return source(ui, path, rev)
Benoit Boissinot
convert: do not output when trying to load svn bindings
r5415 except NoRepo, inst:
Alexis S. L. Carvalho
convert: display all errors if we couldn't open the source repo...
r5521 exceptions.append(inst)
if not ui.quiet:
for inst in exceptions:
ui.write(_("%s\n") % inst)
Brendan Cully
convert: split converter into convertsource and convertsink
r4763 raise util.Abort('%s: unknown repository type' % path)
Bryan O'Sullivan
convert: refactor sink initialisation, to remove hardcoding of hg...
r5441 def convertsink(ui, path, type):
for name, sink in sink_converters:
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512 try:
Bryan O'Sullivan
convert: refactor sink initialisation, to remove hardcoding of hg...
r5441 if not type or name == type:
return sink(ui, path)
Benoit Boissinot
convert: do not output when trying to load svn bindings
r5415 except NoRepo, inst:
ui.note(_("convert: %s\n") % inst)
Brendan Cully
convert: split converter into convertsource and convertsink
r4763 raise util.Abort('%s: unknown repository type' % path)
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512
Alexis S. L. Carvalho
convert: rename a class and a function
r5281 class converter(object):
Alexis S. L. Carvalho
convert: disable current --filemap support...
r5375 def __init__(self, ui, source, dest, revmapfile, opts):
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512
self.source = source
self.dest = dest
Edouard Gomez
Turns convert.py into a real extension
r4513 self.ui = ui
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512 self.opts = opts
self.commitcache = {}
Edouard Gomez
convert extension: Add support for username mapping...
r4589 self.authors = {}
Brendan Cully
convert: fix various authormap handling bugs
r4590 self.authorfile = None
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512
Bryan O'Sullivan
convert: abstract map files into a class
r5510 self.map = mapfile(ui, revmapfile)
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512
Edouard Gomez
convert extension: Add support for username mapping...
r4589 # Read first the dst author map if any
Brendan Cully
convert: fix various authormap handling bugs
r4590 authorfile = self.dest.authorfile()
if authorfile and os.path.exists(authorfile):
self.readauthormap(authorfile)
Edouard Gomez
convert extension: Add support for username mapping...
r4589 # Extend/Override with new author map if necessary
Brendan Cully
convert: fix various authormap handling bugs
r4590 if opts.get('authors'):
Edouard Gomez
convert extension: Add support for username mapping...
r4589 self.readauthormap(opts.get('authors'))
Brendan Cully
convert: fix various authormap handling bugs
r4590 self.authorfile = self.dest.authorfile()
Edouard Gomez
convert extension: Add support for username mapping...
r4589
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512 def walktree(self, heads):
Hollis Blanchard
fix 'convert' with single commit repositories...
r4719 '''Return a mapping that identifies the uncommitted parents of every
uncommitted changeset.'''
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512 visit = heads
known = {}
parents = {}
while visit:
n = visit.pop(0)
if n in known or n in self.map: continue
known[n] = 1
Patrick Mezard
convert: wrap cached commits author remapping
r5203 commit = self.cachecommit(n)
Hollis Blanchard
fix 'convert' with single commit repositories...
r4719 parents[n] = []
Patrick Mezard
convert: wrap cached commits author remapping
r5203 for p in commit.parents:
Hollis Blanchard
fix 'convert' with single commit repositories...
r4719 parents[n].append(p)
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512 visit.append(p)
return parents
def toposort(self, parents):
Hollis Blanchard
fix 'convert' with single commit repositories...
r4719 '''Return an ordering such that every uncommitted changeset is
preceeded by all its uncommitted ancestors.'''
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512 visit = parents.keys()
seen = {}
children = {}
while visit:
n = visit.pop(0)
if n in seen: continue
seen[n] = 1
Hollis Blanchard
fix 'convert' with single commit repositories...
r4719 # Ensure that nodes without parents are present in the 'children'
# mapping.
children.setdefault(n, [])
for p in parents[n]:
if not p in self.map:
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512 visit.append(p)
Hollis Blanchard
fix 'convert' with single commit repositories...
r4719 children.setdefault(p, []).append(n)
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512
s = []
removed = {}
visit = children.keys()
while visit:
n = visit.pop(0)
if n in removed: continue
dep = 0
if n in parents:
for p in parents[n]:
if p in self.map: continue
if p not in removed:
# we're still dependent
visit.append(n)
dep = 1
break
if not dep:
# all n's parents are in the list
removed[n] = 1
if n not in self.map:
s.append(n)
if n in children:
for c in children[n]:
visit.insert(0, c)
Edouard Gomez
Turns convert.py into a real extension
r4513 if self.opts.get('datesort'):
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512 depth = {}
for n in s:
depth[n] = 0
Thomas Arendsen Hein
Some small cleanups for convert extension:...
r4532 pl = [p for p in self.commitcache[n].parents
if p not in self.map]
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512 if pl:
depth[n] = max([depth[p] for p in pl]) + 1
s = [(depth[n], self.commitcache[n].date, n) for n in s]
s.sort()
s = [e[2] for e in s]
return s
Edouard Gomez
convert extension: Add support for username mapping...
r4589 def writeauthormap(self):
Brendan Cully
convert: fix various authormap handling bugs
r4590 authorfile = self.authorfile
if authorfile:
Edouard Gomez
convert extension: Add support for username mapping...
r4589 self.ui.status('Writing author map file %s\n' % authorfile)
ofile = open(authorfile, 'w+')
for author in self.authors:
ofile.write("%s=%s\n" % (author, self.authors[author]))
ofile.close()
def readauthormap(self, authorfile):
Brendan Cully
convert: fix various authormap handling bugs
r4590 afile = open(authorfile, 'r')
for line in afile:
try:
srcauthor = line.split('=')[0].strip()
dstauthor = line.split('=')[1].strip()
if srcauthor in self.authors and dstauthor != self.authors[srcauthor]:
self.ui.status(
'Overriding mapping for author %s, was %s, will be %s\n'
% (srcauthor, self.authors[srcauthor], dstauthor))
else:
self.ui.debug('Mapping author %s to %s\n'
% (srcauthor, dstauthor))
Edouard Gomez
convert extension: Add support for username mapping...
r4589 self.authors[srcauthor] = dstauthor
Brendan Cully
convert: fix various authormap handling bugs
r4590 except IndexError:
self.ui.warn(
'Ignoring bad line in author file map %s: %s\n'
% (authorfile, line))
afile.close()
Edouard Gomez
convert extension: Add support for username mapping...
r4589
Patrick Mezard
convert: wrap cached commits author remapping
r5203 def cachecommit(self, rev):
commit = self.source.getcommit(rev)
commit.author = self.authors.get(commit.author, commit.author)
self.commitcache[rev] = commit
return commit
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512 def copy(self, rev):
Bryan O'Sullivan
convert: add filename filtering and renaming support
r5016 commit = self.commitcache[rev]
do_copies = hasattr(self.dest, 'copyfile')
filenames = []
Thomas Arendsen Hein
removed trailing whitespace
r4957
Alexis S. L. Carvalho
convert: allow the converter_source to say "skip this revision"...
r5374 changes = self.source.getchanges(rev)
if isinstance(changes, basestring):
if changes == SKIPREV:
dest = SKIPREV
else:
dest = self.map[changes]
Bryan O'Sullivan
convert: abstract map files into a class
r5510 self.map[rev] = dest
Alexis S. L. Carvalho
convert: allow the converter_source to say "skip this revision"...
r5374 return
files, copies = changes
Brendan Cully
convert: hg: optionally create branches as clones...
r5173 parents = [self.map[r] for r in commit.parents]
if commit.parents:
Patrick Mezard
convert: load parent commits on-demand
r5204 prev = commit.parents[0]
if prev not in self.commitcache:
self.cachecommit(prev)
pbranch = self.commitcache[prev].branch
Brendan Cully
convert: hg: optionally create branches as clones...
r5173 else:
pbranch = None
self.dest.setbranch(commit.branch, pbranch, parents)
Brendan Cully
convert: look up copies in getchanges instead of getcommit...
r5121 for f, v in files:
Alexis S. L. Carvalho
convert: disable current --filemap support...
r5375 filenames.append(f)
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512 try:
data = self.source.getfile(f, v)
except IOError, inst:
Alexis S. L. Carvalho
convert: disable current --filemap support...
r5375 self.dest.delfile(f)
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512 else:
e = self.source.getmode(f, v)
Alexis S. L. Carvalho
convert: disable current --filemap support...
r5375 self.dest.putfile(f, e, data)
Daniel Holth
convert extension: Add SVN converter
r4765 if do_copies:
Brendan Cully
convert: look up copies in getchanges instead of getcommit...
r5121 if f in copies:
Alexis S. L. Carvalho
convert: disable current --filemap support...
r5375 copyf = copies[f]
# Merely marks that a copy happened.
self.dest.copyfile(copyf, f)
Daniel Holth
convert extension: Add SVN converter
r4765
Alexis S. L. Carvalho
convert: disable current --filemap support...
r5375 newnode = self.dest.putcommit(filenames, parents, commit)
Bryan O'Sullivan
convert: tell the source repository when a rev has been converted...
r5554 self.source.converted(rev, newnode)
Bryan O'Sullivan
convert: abstract map files into a class
r5510 self.map[rev] = newnode
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512
def convert(self):
Edouard Gomez
convert extension: Save a few opens on the map file...
r4588 try:
Bryan O'Sullivan
convert: add before/after hooks for converter sources
r5356 self.source.before()
Bryan O'Sullivan
convert: acquire/release locks periodically
r5014 self.dest.before()
Bryan O'Sullivan
convert: abstract map files into a class
r5510 self.source.setrevmap(self.map)
Edouard Gomez
convert extension: Save a few opens on the map file...
r4588 self.ui.status("scanning source...\n")
heads = self.source.getheads()
parents = self.walktree(heads)
self.ui.status("sorting...\n")
t = self.toposort(parents)
num = len(t)
c = None
self.ui.status("converting...\n")
for c in t:
num -= 1
desc = self.commitcache[c].desc
if "\n" in desc:
desc = desc.splitlines()[0]
self.ui.status("%d %s\n" % (num, desc))
self.copy(c)
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512
Edouard Gomez
convert extension: Save a few opens on the map file...
r4588 tags = self.source.gettags()
ctags = {}
for k in tags:
v = tags[k]
Alexis S. L. Carvalho
convert: allow the converter_source to say "skip this revision"...
r5374 if self.map.get(v, SKIPREV) != SKIPREV:
Edouard Gomez
convert extension: Save a few opens on the map file...
r4588 ctags[k] = self.map[v]
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512
Edouard Gomez
convert extension: Save a few opens on the map file...
r4588 if c and ctags:
nrev = self.dest.puttags(ctags)
# write another hash correspondence to override the previous
# one so we don't end up with extra tag heads
if nrev:
Bryan O'Sullivan
convert: abstract map files into a class
r5510 self.map[c] = nrev
Edouard Gomez
convert extension: Add support for username mapping...
r4589
self.writeauthormap()
Edouard Gomez
convert extension: Save a few opens on the map file...
r4588 finally:
self.cleanup()
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512
Edouard Gomez
convert extension: Save a few opens on the map file...
r4588 def cleanup(self):
Bryan O'Sullivan
convert: add before/after hooks for converter sources
r5356 try:
self.dest.after()
finally:
self.source.after()
Bryan O'Sullivan
convert: abstract map files into a class
r5510 self.map.close()
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512
Alexis S. L. Carvalho
convert: rename a class and a function
r5281 def convert(ui, src, dest=None, revmapfile=None, **opts):
Thomas Arendsen Hein
Backout ad09ce1d393c and replace ''' with """ to make some highlighting happy....
r4958 """Convert a foreign SCM repository to a Mercurial one.
Edouard Gomez
Turns convert.py into a real extension
r4513
Accepted source formats:
"Rafael Villar Burke "
Update convert help text...
r5484 - Mercurial
Edouard Gomez
Turns convert.py into a real extension
r4513 - CVS
Bryan O'Sullivan
convert: support darcs as a source repo
r5359 - Darcs
- git
- Subversion
Edouard Gomez
Turns convert.py into a real extension
r4513
Accepted destination formats:
- Mercurial
Bryan O'Sullivan
convert: add support for Subversion as a sink
r5513 - Subversion (history on branches is not preserved)
Edouard Gomez
Turns convert.py into a real extension
r4513
Brendan Cully
convert: add -r argument specifying latest revision to convert
r4760 If no revision is given, all revisions will be converted. Otherwise,
convert will only import up to the named revision (given in a format
understood by the source).
Thomas Arendsen Hein
convert: Use clone's behaviour for the default destionation name....
r4883 If no destination directory name is specified, it defaults to the
Thomas Arendsen Hein
Backout ad09ce1d393c and replace ''' with """ to make some highlighting happy....
r4958 basename of the source with '-hg' appended. If the destination
repository doesn't exist, it will be created.
Edouard Gomez
Turns convert.py into a real extension
r4513
"Rafael Villar Burke "
Update convert help text...
r5484 If <MAPFILE> isn't given, it will be put in a default location
(<dest>/.hg/shamap by default). The <MAPFILE> is a simple text
Thomas Arendsen Hein
convert: Use clone's behaviour for the default destionation name....
r4883 file that maps each source commit ID to the destination ID for
that revision, like so:
Edouard Gomez
Turns convert.py into a real extension
r4513 <source ID> <destination ID>
Thomas Arendsen Hein
Backout ad09ce1d393c and replace ''' with """ to make some highlighting happy....
r4958 If the file doesn't exist, it's automatically created. It's updated
Edouard Gomez
Turns convert.py into a real extension
r4513 on each commit copied, so convert-repo can be interrupted and can
be run repeatedly to copy new commits.
Edouard Gomez
convert extension: Add support for username mapping...
r4589
The [username mapping] file is a simple text file that maps each source
commit author to a destination commit author. It is handy for source SCMs
that use unix logins to identify authors (eg: CVS). One line per author
mapping and the line format is:
srcauthor=whatever string you want
Bryan O'Sullivan
convert: document filemap.
r5256
The filemap is a file that allows filtering and remapping of files
and directories. Comment lines start with '#'. Each line can
contain one of the following directives:
include path/to/file
exclude path/to/file
rename from/file to/file
The 'include' directive causes a file, or all files under a
"Rafael Villar Burke "
Update convert help text...
r5484 directory, to be included in the destination repository, and the
Benoit Boissinot
fix typo in convert help text, update test
r5488 exclusion of all other files and dirs not explicitely included.
"Rafael Villar Burke "
Update convert help text...
r5484 The 'exclude' directive causes files or directories to be omitted.
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.
Bryan O'Sullivan
convert: some tidyups, doc improvements, and test fixes...
r5556
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
Thomas Arendsen Hein
Backout ad09ce1d393c and replace ''' with """ to make some highlighting happy....
r4958 """
Edouard Gomez
Turns convert.py into a real extension
r4513
Alexis S. L. Carvalho
convert: manually set encoding to UTF-8...
r4895 util._encoding = 'UTF-8'
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512 if not dest:
Thomas Arendsen Hein
convert: Use clone's behaviour for the default destionation name....
r4883 dest = hg.defaultdest(src) + "-hg"
Edouard Gomez
Turns convert.py into a real extension
r4513 ui.status("assuming destination %s\n" % dest)
Edouard Gomez
Add some more smart when initializing destination repository
r4521
Bryan O'Sullivan
convert: refactor sink initialisation, to remove hardcoding of hg...
r5441 destc = convertsink(ui, dest, opts.get('dest_type'))
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512
Brendan Cully
convert: initialize source after destination, cleaning up if source is unusable
r4761 try:
Bryan O'Sullivan
convert: refactor sink initialisation, to remove hardcoding of hg...
r5441 srcc = convertsource(ui, src, opts.get('source_type'),
opts.get('rev'))
Brendan Cully
convert: initialize source after destination, cleaning up if source is unusable
r4761 except Exception:
Bryan O'Sullivan
convert: refactor sink initialisation, to remove hardcoding of hg...
r5441 for path in destc.created:
shutil.rmtree(path, True)
Brendan Cully
convert: initialize source after destination, cleaning up if source is unusable
r4761 raise
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512
Alexis S. L. Carvalho
convert: readd --filemap...
r5377 fmap = opts.get('filemap')
if fmap:
srcc = filemap.filemap_source(ui, srcc, fmap)
Alexis S. L. Carvalho
convert: add a mode where mercurial_sink skips empty revisions....
r5378 destc.setfilemapmode(True)
Alexis S. L. Carvalho
convert: readd --filemap...
r5377
Bryan O'Sullivan
convert: rename mapfile to revmapfile, so we can map more than just revs
r5011 if not revmapfile:
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512 try:
Bryan O'Sullivan
convert: rename mapfile to revmapfile, so we can map more than just revs
r5011 revmapfile = destc.revmapfile()
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512 except:
Bryan O'Sullivan
convert: rename mapfile to revmapfile, so we can map more than just revs
r5011 revmapfile = os.path.join(destc, "map")
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512
Alexis S. L. Carvalho
convert: disable current --filemap support...
r5375 c = converter(ui, srcc, destc, revmapfile, opts)
Thomas Arendsen Hein
Move convert-repo to hgext/convert/__init__.py
r4512 c.convert()
Patrick Mezard
convert: replace fork with subprocess call.
r5127
Edouard Gomez
Turns convert.py into a real extension
r4513 cmdtable = {
Thomas Arendsen Hein
Some small cleanups for convert extension:...
r4532 "convert":
Alexis S. L. Carvalho
convert: rename a class and a function
r5281 (convert,
Edouard Gomez
convert extension: Add support for username mapping...
r4589 [('A', 'authors', '', 'username mapping filename'),
Bryan O'Sullivan
convert: refactor sink initialisation, to remove hardcoding of hg...
r5441 ('d', 'dest-type', '', 'destination repository type'),
Bryan O'Sullivan
convert: add filename filtering and renaming support
r5016 ('', 'filemap', '', 'remap file names using contents of file'),
Brendan Cully
convert: add -r argument specifying latest revision to convert
r4760 ('r', 'rev', '', 'import up to target revision REV'),
Bryan O'Sullivan
convert: refactor sink initialisation, to remove hardcoding of hg...
r5441 ('s', 'source-type', '', 'source repository type'),
Edouard Gomez
convert extension: Add support for username mapping...
r4589 ('', 'datesort', None, 'try to sort changesets by date')],
Thomas Arendsen Hein
Some small cleanups for convert extension:...
r4532 'hg convert [OPTION]... SOURCE [DEST [MAPFILE]]'),
Thomas Arendsen Hein
convert: Use debugsvnlog instead of git-like debug-svn-log.
r5138 "debugsvnlog":
Patrick Mezard
convert: replace fork with subprocess call.
r5127 (debugsvnlog,
[],
Thomas Arendsen Hein
convert: Use debugsvnlog instead of git-like debug-svn-log.
r5138 'hg debugsvnlog'),
Edouard Gomez
Turns convert.py into a real extension
r4513 }
Patrick Mezard
convert: replace fork with subprocess call.
r5127