# HG changeset patch # User Greg Ward # Date 1437935552 14400 # Node ID ae32828c68d7a926d184fb10cde3c4e4ed3200bc # Parent b3faf593a4712f694b90fd7c3170d7bafdab29f3# Parent beea8322489001f538bffda1b76d64d6fb9c9399 Merge in Jelmer Vernooij's switch to python-fastimport over pyfastimport. Better to use his maintained library than my dusty old forgotten one. Incidentally, this merge deliberately leaves out efc96910ddf2 and descendants: that change broke the tests. diff -r beea83224890 -r ae32828c68d7 hgfastimport/__init__.py --- a/hgfastimport/__init__.py Sun Jul 26 14:25:46 2015 -0400 +++ b/hgfastimport/__init__.py Sun Jul 26 14:32:32 2015 -0400 @@ -1,8 +1,8 @@ -from mercurial import encoding, util +from mercurial import encoding from mercurial.i18n import _ from hgext.convert import convcmd, hg -from hgfastimport.hgimport import fastimport_source +from hgimport import fastimport_source def fastimport(ui, repo, *sources, **opts): """Convert a git fastimport dump into Mercurial changesets. diff -r beea83224890 -r ae32828c68d7 hgfastimport/hgimport.py --- a/hgfastimport/hgimport.py Sun Jul 26 14:25:46 2015 -0400 +++ b/hgfastimport/hgimport.py Sun Jul 26 14:32:32 2015 -0400 @@ -141,6 +141,8 @@ class HgImportProcessor(processor.ImportProcessor): + tagprefix = "refs/tags/" + def __init__(self, ui, repo): super(HgImportProcessor, self).__init__() self.ui = ui @@ -213,19 +215,21 @@ # This command means nothing to us pass - def _getcommit(self, committish): + def _getcommit(self, commitref): """Given a mark reference or a branch name, return the - appropriate commit object. Return None if committish is a - branch with no commits. Raises KeyError if anything else is out - of whack. + appropriate commit object. Return None if commitref is a tag + or a branch with no commits. Raises KeyError if anything else + is out of whack. """ - if committish.startswith(":"): + if commitref.startswith(":"): # KeyError here indicates the input stream is broken. - return self.commitmap[committish] + return self.commitmap[commitref] + elif commitref.startswith(self.tagprefix): + return None else: - branch = self._getbranch(committish) + branch = self._getbranch(commitref) if branch is None: - raise ValueError("invalid committish: %r" % committish) + raise ValueError("invalid commit ref: %r" % commitref) heads = self.branchmap.get(branch) if heads is None: @@ -258,6 +262,10 @@ # of the fixup branch should be configurable! fixup = (cmd.ref == "refs/heads/TAG.FIXUP") + if cmd.ref.startswith(self.tagprefix) and cmd.mark: + tag = cmd.ref[len(self.tagprefix):] + self.tags.append((tag, ':' + cmd.mark)) + if cmd.from_: first_parent = cmd.from_ else: @@ -337,7 +345,7 @@ self.ui.debug("processed commit %s\n" % cmd) def convert_date(self, c): - res = (int(c[2]), int(c[3])) + res = (int(c[2]), -int(c[3])) #print c, res #print type((0, 0)), type(res), len(res), type(res) is type((0, 0)) #if type(res) is type((0, 0)) and len(res) == 2: @@ -346,7 +354,6 @@ return "%d %d" % res def reset_handler(self, cmd): - tagprefix = "refs/tags/" branch = self._getbranch(cmd.ref) if branch: # The usual case for 'reset': (re)create the named branch. @@ -362,15 +369,16 @@ #else: # # XXX filename? line number? # self.ui.warn("ignoring branch reset with no 'from'\n") - elif cmd.ref.startswith(tagprefix): + elif cmd.ref.startswith(self.tagprefix): # Create a "lightweight tag" in Git terms. As I understand # it, that's a tag with no description and no history -- # rather like CVS tags. cvs2git turns CVS tags into Git # lightweight tags, so we should make sure they become # Mercurial tags. But we don't have to fake a history for # them; save them up for the end. - tag = cmd.ref[len(tagprefix):] - self.tags.append((tag, cmd.from_)) + if cmd.from_ is not None: + tag = cmd.ref[len(self.tagprefix):] + self.tags.append((tag, cmd.from_)) def tag_handler(self, cmd): pass diff -r beea83224890 -r ae32828c68d7 tests/test-fastimport-git.out --- a/tests/test-fastimport-git.out Sun Jul 26 14:25:46 2015 -0400 +++ b/tests/test-fastimport-git.out Sun Jul 26 14:32:32 2015 -0400 @@ -6,18 +6,18 @@ 0 modify Removing blob dir 'HGTMP/test-fastimport-git/simplegit/.hg/blobs' ... % hg log -o changeset: 1:0a3befda043d +o changeset: 1:3ba674918e3f | tag: tip | user: Joe Contributor -| date: Fri Jan 11 01:20:00 2008 +0400 +| date: Thu Jan 10 17:20:00 2008 -0400 | files: ooga | description: | modify | | -o changeset: 0:9a4b81675bd1 +o changeset: 0:339e2fa74ac1 user: Example - date: Fri Jan 11 01:21:00 2008 +0400 + date: Thu Jan 10 17:21:00 2008 -0400 files: foo.txt ooga description: initial revision diff -r beea83224890 -r ae32828c68d7 tests/test-fastimport-nonascii.out --- a/tests/test-fastimport-nonascii.out Sun Jul 26 14:25:46 2015 -0400 +++ b/tests/test-fastimport-nonascii.out Sun Jul 26 14:32:32 2015 -0400 @@ -16,10 +16,10 @@ converting... 0 blah % log with non-ASCII author -changeset: 0:e10eff2ea202 +changeset: 0:1988a11c4df7 tag: tip user: Jürgen -date: Tue Aug 11 10:13:20 2009 -0400 +date: Tue Aug 11 18:13:20 2009 +0400 summary: blah % import dump with non-ASCII message @@ -29,10 +29,10 @@ 0 fix na?ve implementation that ?le threw together for ?5 Removing blob dir 'HGTMP/test-fastimport-nonascii/message/.hg/blobs' ... % log with non-ASCII message -changeset: 0:cfd47dca9906 +changeset: 0:52b3afdff0e7 tag: tip user: Dave -date: Tue Aug 11 10:13:50 2009 -0400 +date: Tue Aug 11 18:13:50 2009 +0400 summary: fix naïve implementation that Øle threw together for €5 % manifest