Mercurial > hg > hg-fastimport
changeset 73:a99e5c6c8e1c
Fix compatibility with 4.6+
Update to work with hg 4.5+
Switch to modern @command decorator API
Adds compatiblility with hg 4.2
Clean up formatting and add description
Update to work with hg 3.4+
Update to work with hg 3.2+
This breaks compatibility with <3.2.
Merged from patches from github:danielj7/hg-fastimport
| author | Daniel Johnson <daniel@daniel-johnson.org> |
|---|---|
| date | Sun, 12 Aug 2018 07:54:35 -0400 |
| parents | 6b716ecb1cf3 |
| children | a4f13dc5e3f7 |
| files | hgfastimport/__init__.py hgfastimport/hgimport.py |
| diffstat | 2 files changed, 50 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/hgfastimport/__init__.py Fri Dec 13 22:38:47 2013 -0500 +++ b/hgfastimport/__init__.py Sun Aug 12 07:54:35 2018 -0400 @@ -1,8 +1,36 @@ -from mercurial import encoding +''' import Git fast-import streams ''' +from __future__ import absolute_import + +from mercurial import ( + cmdutil, + encoding, + util, +) + from mercurial.i18n import _ -from hgext.convert import convcmd, hg + +from hgext.convert import ( + convcmd, + hg, +) + +from .hgimport import fastimport_source -from hgimport import fastimport_source +cmdtable = {} +try: + from mercurial import registrar + command = registrar.command(cmdtable) +except (ImportError, AttributeError): + command = cmdutil.command(cmdtable) + +testedwith = '4.7' + +@command("fastimport", + [('', 'branchsort', None, _('try to sort changesets by branches')), + ('', 'datesort', None, _('try to sort changesets by date')), + ('', 'sourcesort', None, _('preserve source changesets order'))], + _('hg fastimport SOURCE ...'), + norepo=False) def fastimport(ui, repo, *sources, **opts): """Convert a git fastimport dump into Mercurial changesets. @@ -29,8 +57,8 @@ encoding.encoding = 'UTF-8' # sink is the current repo, src is the list of fastimport streams - destc = hg.mercurial_sink(ui, repo.root) - srcc = fastimport_source(ui, repo, sources) + destc = hg.mercurial_sink(ui, 'hg', repo.root) + srcc = fastimport_source(ui, 'fastimport', repo, sources) # XXX figuring out sortmode copied straight from hgext/convert/convcmd.py defaultsort = 'branchsort' # for efficiency and consistency @@ -39,19 +67,8 @@ if len(sortmode) > 1: raise util.Abort(_('more than one sort mode specified')) sortmode = sortmode and sortmode[0] or defaultsort - + # not implemented: filemap, revmapfile revmapfile = destc.revmapfile() c = convcmd.converter(ui, srcc, destc, revmapfile, opts) c.convert(sortmode) - -# XXX sort options copied straight from hgext/convert/__init__.py -cmdtable = { - "fastimport": - (fastimport, - [('', 'branchsort', None, _('try to sort changesets by branches')), - ('', 'datesort', None, _('try to sort changesets by date')), - ('', 'sourcesort', None, _('preserve source changesets order')), - ], - 'hg fastimport SOURCE ...') -}
--- a/hgfastimport/hgimport.py Fri Dec 13 22:38:47 2013 -0500 +++ b/hgfastimport/hgimport.py Sun Aug 12 07:54:35 2018 -0400 @@ -26,6 +26,8 @@ import sys from hgext.convert import common, hg as converthg +from mercurial import util +from mercurial.i18n import _ from fastimport import processor, parser @@ -34,11 +36,12 @@ """Interface between the fastimport processor below and Mercurial's normal conversion infrastructure. """ - def __init__(self, ui, repo, sources): + def __init__(self, ui, repotype, repo, sources): self.ui = ui self.sources = sources self.processor = HgImportProcessor(ui, repo) self.parsed = False + self.repotype = repotype # converter_source methods @@ -58,21 +61,26 @@ def getfile(self, name, fileid): if fileid is None: # deleted file - raise IOError + return None, None return (self.processor.getblob(fileid), self.processor.getmode(name, fileid)) - def getchanges(self, commitid): - """Returns a tuple of (files, copies). + def getchanges(self, commitid, full): + """Returns a tuple of (files, copies, cleanp2). files is a sorted list of (filename, id) tuples for all files changed between commitid and its first parent returned by - getcommit(). id is the source revision id of the file. + getcommit(). + commitid id is the source revision id of the file. + cleanp2 is currently unused and an empty set is returned. copies is a dictionary of dest: source """ + if full: + raise util.Abort(_("convert from fastimport does not support --full")) return (self.processor.modified[commitid], - self.processor.copies[commitid]) + self.processor.copies[commitid], + set()) def getcommit(self, commitid): """Return the commit object for commitid""" @@ -307,7 +315,8 @@ date = self.convert_date(userinfo) parents = filter(None, [first_parent, second_parent]) - commit = common.commit(user, date, text, parents, branch, rev=cmd.id) + commit = common.commit(user, date, text, parents, branch, + rev=cmd.id, sortkey=int(cmd.id[1:])) self.commitmap[cmd.id] = commit heads = self.branchmap.get(branch)
