diff --git a/hgext/convert/common.py b/hgext/convert/common.py --- a/hgext/convert/common.py +++ b/hgext/convert/common.py @@ -208,7 +208,8 @@ class converter_sink(object): mapping equivalent authors identifiers for each system.""" return None - def putcommit(self, files, copies, parents, commit, source, revmap): + def putcommit(self, files, copies, parents, commit, source, + revmap, tagmap): """Create a revision with all changed files listed in 'files' and having listed parents. 'commit' is a commit object containing at a minimum the author, date, and message for this diff --git a/hgext/convert/convcmd.py b/hgext/convert/convcmd.py --- a/hgext/convert/convcmd.py +++ b/hgext/convert/convcmd.py @@ -121,6 +121,7 @@ class converter(object): self.splicemap = self.parsesplicemap(opts.get('splicemap')) self.branchmap = mapfile(ui, opts.get('branchmap')) self.closemap = self.parseclosemap(opts.get('closemap')) + self.tagmap = mapfile(ui, opts.get('tagmap')) def parseclosemap(self, path): """ check and validate the closemap format and @@ -448,7 +449,7 @@ class converter(object): commit.extra['close'] = 1 newnode = self.dest.putcommit(files, copies, parents, commit, - source, self.map) + source, self.map, self.tagmap) source.close() self.source.converted(rev, newnode) self.map[rev] = newnode @@ -484,6 +485,9 @@ class converter(object): self.ui.progress(_('converting'), None) tags = self.source.gettags() + tags = dict((self.tagmap.get(k, k), v) + for k, v in tags.iteritems()) + ctags = {} for k in tags: v = tags[k] diff --git a/hgext/convert/hg.py b/hgext/convert/hg.py --- a/hgext/convert/hg.py +++ b/hgext/convert/hg.py @@ -120,7 +120,7 @@ class mercurial_sink(converter_sink): self.repo.pull(prepo, [prepo.lookup(h) for h in heads]) self.before() - def _rewritetags(self, source, revmap, data): + def _rewritetags(self, source, revmap, tagmap, data): fp = cStringIO.StringIO() for line in data.splitlines(): s = line.split(' ', 1) @@ -129,17 +129,18 @@ class mercurial_sink(converter_sink): revid = revmap.get(source.lookuprev(s[0])) if not revid: continue - fp.write('%s %s\n' % (revid, s[1])) + fp.write('%s %s\n' % (revid, tagmap.get(s[1], s[1]))) return fp.getvalue() - def putcommit(self, files, copies, parents, commit, source, revmap): + def putcommit(self, files, copies, parents, commit, source, + revmap, tagmap): files = dict(files) def getfilectx(repo, memctx, f): v = files[f] data, mode = source.getfile(f, v) if f == '.hgtags': - data = self._rewritetags(source, revmap, data) + data = self._rewritetags(source, revmap, tagmap, data) return context.memfilectx(f, data, 'l' in mode, 'x' in mode, copies.get(f)) diff --git a/hgext/convert/subversion.py b/hgext/convert/subversion.py --- a/hgext/convert/subversion.py +++ b/hgext/convert/subversion.py @@ -1183,7 +1183,8 @@ class svn_sink(converter_sink, commandli def revid(self, rev): return u"svn:%s@%s" % (self.uuid, rev) - def putcommit(self, files, copies, parents, commit, source, revmap): + def putcommit(self, files, copies, parents, commit, source, + revmap, tagmap): for parent in parents: try: return self.revid(self.childmap[parent])