annotate hgext3rd/fastimport/hgimport.py @ 89:e6602cc471d5

Use vendor/python_fastimport rather than depending on the library This is now quite important as upstream dropped support for Python-2 which some hg-fastimport users might still need.
author Roy Marples <roy@marples.name>
date Tue, 19 Jan 2021 23:00:57 +0000
parents 59a9e4d0aa72
children efe678b023d3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
1 # Copyright (C) 2008 Canonical Ltd
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
2 #
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
3 # This program is free software; you can redistribute it and/or modify
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
4 # it under the terms of the GNU General Public License as published by
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
5 # the Free Software Foundation; either version 2 of the License, or
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
6 # (at your option) any later version.
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
7 #
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
8 # This program is distributed in the hope that it will be useful,
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
11 # GNU General Public License for more details.
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
12 #
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
13 # You should have received a copy of the GNU General Public License
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
14 # along with this program; if not, write to the Free Software
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
16
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
17 """Processor of import commands.
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
18
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
19 This module provides core processing functionality including an abstract class
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
20 for basing real processors on. See the processors package for examples.
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
21 """
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
22
1
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
23 import os
11
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
24 import shutil
62
76bd0ea8add3 Update to cope with API differences.
Jelmer Vernooij <jelmer@samba.org>
parents: 55
diff changeset
25 import stat
76bd0ea8add3 Update to cope with API differences.
Jelmer Vernooij <jelmer@samba.org>
parents: 55
diff changeset
26 import sys
11
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
27
55
a88f0dd05e92 Adapt to Mercurial 1.6 API change.
Greg Ward <greg-hg@gerg.ca>
parents: 52
diff changeset
28 from hgext.convert import common, hg as converthg
73
a99e5c6c8e1c Fix compatibility with 4.6+
Daniel Johnson <daniel@daniel-johnson.org>
parents: 71
diff changeset
29 from mercurial import util
a99e5c6c8e1c Fix compatibility with 4.6+
Daniel Johnson <daniel@daniel-johnson.org>
parents: 71
diff changeset
30 from mercurial.i18n import _
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
31
89
e6602cc471d5 Use vendor/python_fastimport rather than depending on the library
Roy Marples <roy@marples.name>
parents: 79
diff changeset
32 from .vendor.python_fastimport import processor, parser
55
a88f0dd05e92 Adapt to Mercurial 1.6 API change.
Greg Ward <greg-hg@gerg.ca>
parents: 52
diff changeset
33
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
34 class fastimport_source(common.converter_source):
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
35 """Interface between the fastimport processor below and Mercurial's
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
36 normal conversion infrastructure.
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
37 """
73
a99e5c6c8e1c Fix compatibility with 4.6+
Daniel Johnson <daniel@daniel-johnson.org>
parents: 71
diff changeset
38 def __init__(self, ui, repotype, repo, sources):
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
39 self.ui = ui
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
40 self.sources = sources
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
41 self.processor = HgImportProcessor(ui, repo)
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
42 self.parsed = False
73
a99e5c6c8e1c Fix compatibility with 4.6+
Daniel Johnson <daniel@daniel-johnson.org>
parents: 71
diff changeset
43 self.repotype = repotype
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
44
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
45 # converter_source methods
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
46
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
47 def before(self):
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
48 self.processor.setup()
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
49
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
50 def after(self):
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
51 self.processor.teardown()
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
52
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
53 def getheads(self):
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
54 """Return a list of this repository's heads"""
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
55 self._parse()
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
56 allheads = []
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
57 for branchheads in self.processor.branchmap.values():
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
58 allheads.extend(branchheads)
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
59 return allheads
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
60
68
47bc97e1c46f Drop support for Mercurial <= 1.5.
Greg Ward <greg@gerg.ca>
parents: 66
diff changeset
61 def getfile(self, name, fileid):
47bc97e1c46f Drop support for Mercurial <= 1.5.
Greg Ward <greg@gerg.ca>
parents: 66
diff changeset
62 if fileid is None: # deleted file
73
a99e5c6c8e1c Fix compatibility with 4.6+
Daniel Johnson <daniel@daniel-johnson.org>
parents: 71
diff changeset
63 return None, None
68
47bc97e1c46f Drop support for Mercurial <= 1.5.
Greg Ward <greg@gerg.ca>
parents: 66
diff changeset
64 return (self.processor.getblob(fileid),
47bc97e1c46f Drop support for Mercurial <= 1.5.
Greg Ward <greg@gerg.ca>
parents: 66
diff changeset
65 self.processor.getmode(name, fileid))
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
66
73
a99e5c6c8e1c Fix compatibility with 4.6+
Daniel Johnson <daniel@daniel-johnson.org>
parents: 71
diff changeset
67 def getchanges(self, commitid, full):
a99e5c6c8e1c Fix compatibility with 4.6+
Daniel Johnson <daniel@daniel-johnson.org>
parents: 71
diff changeset
68 """Returns a tuple of (files, copies, cleanp2).
0
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
69
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
70 files is a sorted list of (filename, id) tuples for all files
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
71 changed between commitid and its first parent returned by
73
a99e5c6c8e1c Fix compatibility with 4.6+
Daniel Johnson <daniel@daniel-johnson.org>
parents: 71
diff changeset
72 getcommit().
a99e5c6c8e1c Fix compatibility with 4.6+
Daniel Johnson <daniel@daniel-johnson.org>
parents: 71
diff changeset
73 commitid id is the source revision id of the file.
a99e5c6c8e1c Fix compatibility with 4.6+
Daniel Johnson <daniel@daniel-johnson.org>
parents: 71
diff changeset
74 cleanp2 is currently unused and an empty set is returned.
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
75
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
76 copies is a dictionary of dest: source
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
77 """
73
a99e5c6c8e1c Fix compatibility with 4.6+
Daniel Johnson <daniel@daniel-johnson.org>
parents: 71
diff changeset
78 if full:
a99e5c6c8e1c Fix compatibility with 4.6+
Daniel Johnson <daniel@daniel-johnson.org>
parents: 71
diff changeset
79 raise util.Abort(_("convert from fastimport does not support --full"))
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
80 return (self.processor.modified[commitid],
73
a99e5c6c8e1c Fix compatibility with 4.6+
Daniel Johnson <daniel@daniel-johnson.org>
parents: 71
diff changeset
81 self.processor.copies[commitid],
a99e5c6c8e1c Fix compatibility with 4.6+
Daniel Johnson <daniel@daniel-johnson.org>
parents: 71
diff changeset
82 set())
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
83
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
84 def getcommit(self, commitid):
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
85 """Return the commit object for commitid"""
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
86 if commitid is None:
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
87 return None
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
88 else:
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
89 return self.processor.commitmap[commitid]
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
90
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
91 def gettags(self):
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
92 """Return the tags as a dictionary of name: revision"""
49
ed66bd7bd2f6 comment
Greg Ward <greg-hg@gerg.ca>
parents: 48
diff changeset
93 # oops, this loses order
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
94 return dict(self.processor.tags)
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
95
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
96 def getchangedfiles(self, rev, i):
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
97 """Return the files changed by rev compared to parent[i].
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
98
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
99 i is an index selecting one of the parents of rev. The return
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
100 value should be the list of files that are different in rev and
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
101 this parent.
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
102
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
103 If rev has no parents, i is None.
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
104
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
105 This function is only needed to support --filemap
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
106 """
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
107 raise NotImplementedError()
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
108
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
109 # private worker methods
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
110
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
111 def _parse(self):
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
112 if self.parsed:
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
113 return
62
76bd0ea8add3 Update to cope with API differences.
Jelmer Vernooij <jelmer@samba.org>
parents: 55
diff changeset
114 for source in self.sources:
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
115 if source == b"-":
62
76bd0ea8add3 Update to cope with API differences.
Jelmer Vernooij <jelmer@samba.org>
parents: 55
diff changeset
116 infile = sys.stdin
76bd0ea8add3 Update to cope with API differences.
Jelmer Vernooij <jelmer@samba.org>
parents: 55
diff changeset
117 else:
76bd0ea8add3 Update to cope with API differences.
Jelmer Vernooij <jelmer@samba.org>
parents: 55
diff changeset
118 infile = open(source, 'rb')
76bd0ea8add3 Update to cope with API differences.
Jelmer Vernooij <jelmer@samba.org>
parents: 55
diff changeset
119 try:
76bd0ea8add3 Update to cope with API differences.
Jelmer Vernooij <jelmer@samba.org>
parents: 55
diff changeset
120 p = parser.ImportParser(infile)
76bd0ea8add3 Update to cope with API differences.
Jelmer Vernooij <jelmer@samba.org>
parents: 55
diff changeset
121 self.processor.process(p.iter_commands)
76bd0ea8add3 Update to cope with API differences.
Jelmer Vernooij <jelmer@samba.org>
parents: 55
diff changeset
122 finally:
76bd0ea8add3 Update to cope with API differences.
Jelmer Vernooij <jelmer@samba.org>
parents: 55
diff changeset
123 if infile is not sys.stdin:
76bd0ea8add3 Update to cope with API differences.
Jelmer Vernooij <jelmer@samba.org>
parents: 55
diff changeset
124 infile.close()
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
125 self.parsed = True
1
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
126
62
76bd0ea8add3 Update to cope with API differences.
Jelmer Vernooij <jelmer@samba.org>
parents: 55
diff changeset
127
1
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
128 class HgImportProcessor(processor.ImportProcessor):
0
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
129
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
130 tagprefix = b"refs/tags/"
58
c370e587f483 Handle commits commands that reference a tag better.
Greg Ward <gward@intelerad.com>
parents: 57
diff changeset
131
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
132 def __init__(self, ui, repo):
42
71f1e5ed6213 Convert "lightweight" tags, since that's how cvs2git handle CVS tags.
Greg Ward <greg-hg@gerg.ca>
parents: 41
diff changeset
133 super(HgImportProcessor, self).__init__()
0
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
134 self.ui = ui
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
135 self.repo = repo
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
136
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
137 self.commitmap = {} # map commit ID (":1") to commit object
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
138 self.branchmap = {} # map branch name to list of heads
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
139
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
140 # see HgImportCommitHandler for details on these three
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
141 self.modified = {} # map commit id to list of file mods
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
142 self.filemodes = {} # map commit id to {filename: mode} map
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
143 self.copies = {} # map commit id to dict of file copies
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
144
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
145 self.tags = [] # list of (tag, mark) tuples
1
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
146
11
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
147 self.numblobs = 0 # for progress reporting
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
148 self.blobdir = None
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
149
34
08e2157aaa9a Remove local fork of bzr-fastimport; use my fastimport library instead.
Greg Ward <greg-hg@gerg.ca>
parents: 33
diff changeset
150 def setup(self):
08e2157aaa9a Remove local fork of bzr-fastimport; use my fastimport library instead.
Greg Ward <greg-hg@gerg.ca>
parents: 33
diff changeset
151 """Setup before processing any streams."""
08e2157aaa9a Remove local fork of bzr-fastimport; use my fastimport library instead.
Greg Ward <greg-hg@gerg.ca>
parents: 33
diff changeset
152 pass
08e2157aaa9a Remove local fork of bzr-fastimport; use my fastimport library instead.
Greg Ward <greg-hg@gerg.ca>
parents: 33
diff changeset
153
11
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
154 def teardown(self):
34
08e2157aaa9a Remove local fork of bzr-fastimport; use my fastimport library instead.
Greg Ward <greg-hg@gerg.ca>
parents: 33
diff changeset
155 """Cleanup after processing all streams."""
11
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
156 if self.blobdir and os.path.exists(self.blobdir):
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
157 self.ui.debug(b"Removing blob dir %s ...\n" % self.blobdir)
11
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
158 shutil.rmtree(self.blobdir)
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
159
0
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
160 def progress_handler(self, cmd):
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
161 self.ui.write(b"Progress: %s\n" % cmd.message)
0
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
162
11
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
163 def blob_handler(self, cmd):
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
164 self.writeblob(cmd.id, cmd.data)
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
165
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
166 def _getblobfilename(self, blobid):
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
167 if self.blobdir is None:
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
168 raise RuntimeError("no blobs seen, so no blob directory created")
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
169 # XXX should escape ":" for windows
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
170 return os.path.join(self.blobdir, b"blob-" + blobid)
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
171
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
172 def getblob(self, fileid):
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
173 (commitid, blobid) = fileid
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
174 f = open(self._getblobfilename(blobid), "rb")
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
175 try:
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
176 return f.read()
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
177 finally:
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
178 f.close()
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
179
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
180 def writeblob(self, blobid, data):
11
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
181 if self.blobdir is None: # no blobs seen yet
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
182 self.blobdir = os.path.join(self.repo.root, b".hg", b"blobs")
11
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
183 os.mkdir(self.blobdir)
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
184
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
185 fn = self._getblobfilename(blobid)
11
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
186 blobfile = open(fn, "wb")
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
187 #self.ui.debug("writing blob %s to %s (%d bytes)\n"
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
188 # % (blobid, fn, len(data)))
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
189 blobfile.write(data)
11
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
190 blobfile.close()
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
191
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
192 self.numblobs += 1
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
193 if self.numblobs % 500 == 0:
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
194 self.ui.status(b"%d blobs read\n" % self.numblobs)
11
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
195
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
196 def getmode(self, name, fileid):
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
197 (commitid, blobid) = fileid
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
198 return self.filemodes[commitid][name]
0
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
199
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
200 def checkpoint_handler(self, cmd):
1
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
201 # This command means nothing to us
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
202 pass
0
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
203
57
e827bffa5fc5 Rename local variable committish to commitref.
Greg Ward <gward@intelerad.com>
parents: 55
diff changeset
204 def _getcommit(self, commitref):
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
205 """Given a mark reference or a branch name, return the
58
c370e587f483 Handle commits commands that reference a tag better.
Greg Ward <gward@intelerad.com>
parents: 57
diff changeset
206 appropriate commit object. Return None if commitref is a tag
c370e587f483 Handle commits commands that reference a tag better.
Greg Ward <gward@intelerad.com>
parents: 57
diff changeset
207 or a branch with no commits. Raises KeyError if anything else
c370e587f483 Handle commits commands that reference a tag better.
Greg Ward <gward@intelerad.com>
parents: 57
diff changeset
208 is out of whack.
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
209 """
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
210 if commitref.startswith(b":"):
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
211 # KeyError here indicates the input stream is broken.
57
e827bffa5fc5 Rename local variable committish to commitref.
Greg Ward <gward@intelerad.com>
parents: 55
diff changeset
212 return self.commitmap[commitref]
58
c370e587f483 Handle commits commands that reference a tag better.
Greg Ward <gward@intelerad.com>
parents: 57
diff changeset
213 elif commitref.startswith(self.tagprefix):
c370e587f483 Handle commits commands that reference a tag better.
Greg Ward <gward@intelerad.com>
parents: 57
diff changeset
214 return None
1
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
215 else:
57
e827bffa5fc5 Rename local variable committish to commitref.
Greg Ward <gward@intelerad.com>
parents: 55
diff changeset
216 branch = self._getbranch(commitref)
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
217 if branch is None:
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
218 raise ValueError(b"invalid commit ref: %s" % commitref)
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
219
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
220 heads = self.branchmap.get(branch)
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
221 if heads is None:
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
222 return None
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
223 else:
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
224 # KeyError here indicates bad commit id in self.branchmap.
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
225 return self.commitmap[heads[-1]]
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
226
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
227 def _getbranch(self, ref):
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
228 """Translate a Git head ref to corresponding Mercurial branch
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
229 name. E.g. \"refs/heads/foo\" is translated to \"foo\".
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
230 Special case: \"refs/heads/master\" becomes \"default\". If
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
231 'ref' is not a head ref, return None.
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
232 """
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
233 prefix = b"refs/heads/"
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
234 if ref.startswith(prefix):
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
235 branch = ref[len(prefix):]
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
236 if branch == b"master":
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
237 return b"default"
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
238 else:
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
239 return branch
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
240 else:
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
241 return None
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
242
1
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
243 def commit_handler(self, cmd):
39
177a133519bc Handle fixup branches for tag/branch creation better.
Greg Ward <greg-hg@gerg.ca>
parents: 37
diff changeset
244 # XXX this assumes the fixup branch name used by cvs2git. In
177a133519bc Handle fixup branches for tag/branch creation better.
Greg Ward <greg-hg@gerg.ca>
parents: 37
diff changeset
245 # contrast, git-fast-import(1) recommends "TAG_FIXUP" (not under
177a133519bc Handle fixup branches for tag/branch creation better.
Greg Ward <greg-hg@gerg.ca>
parents: 37
diff changeset
246 # refs/heads), and implies that it can be called whatever the
177a133519bc Handle fixup branches for tag/branch creation better.
Greg Ward <greg-hg@gerg.ca>
parents: 37
diff changeset
247 # creator of the fastimport dump wants to call it. So the name
177a133519bc Handle fixup branches for tag/branch creation better.
Greg Ward <greg-hg@gerg.ca>
parents: 37
diff changeset
248 # of the fixup branch should be configurable!
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
249 fixup = (cmd.ref == b"refs/heads/TAG.FIXUP")
39
177a133519bc Handle fixup branches for tag/branch creation better.
Greg Ward <greg-hg@gerg.ca>
parents: 37
diff changeset
250
58
c370e587f483 Handle commits commands that reference a tag better.
Greg Ward <gward@intelerad.com>
parents: 57
diff changeset
251 if cmd.ref.startswith(self.tagprefix) and cmd.mark:
c370e587f483 Handle commits commands that reference a tag better.
Greg Ward <gward@intelerad.com>
parents: 57
diff changeset
252 tag = cmd.ref[len(self.tagprefix):]
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
253 self.tags.append((tag, b':' + cmd.mark))
58
c370e587f483 Handle commits commands that reference a tag better.
Greg Ward <gward@intelerad.com>
parents: 57
diff changeset
254
1
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
255 if cmd.from_:
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
256 first_parent = cmd.from_
1
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
257 else:
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
258 first_parent = self._getcommit(cmd.ref) # commit object
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
259 if first_parent is not None:
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
260 first_parent = first_parent.rev # commit id
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
261
34
08e2157aaa9a Remove local fork of bzr-fastimport; use my fastimport library instead.
Greg Ward <greg-hg@gerg.ca>
parents: 33
diff changeset
262 if cmd.merges:
08e2157aaa9a Remove local fork of bzr-fastimport; use my fastimport library instead.
Greg Ward <greg-hg@gerg.ca>
parents: 33
diff changeset
263 if len(cmd.merges) > 1:
1
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
264 raise NotImplementedError("Can't handle more than two parents")
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
265 second_parent = cmd.merges[0]
44
61ff7b929cea Handle fixup commits and branch creation as produced by cvs2git.
Greg Ward <greg-hg@gerg.ca>
parents: 43
diff changeset
266 else:
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
267 second_parent = None
44
61ff7b929cea Handle fixup commits and branch creation as produced by cvs2git.
Greg Ward <greg-hg@gerg.ca>
parents: 43
diff changeset
268
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
269 if first_parent is None and second_parent is not None:
44
61ff7b929cea Handle fixup commits and branch creation as produced by cvs2git.
Greg Ward <greg-hg@gerg.ca>
parents: 43
diff changeset
270 # First commit on a new branch that has 'merge' but no 'from':
61ff7b929cea Handle fixup commits and branch creation as produced by cvs2git.
Greg Ward <greg-hg@gerg.ca>
parents: 43
diff changeset
271 # special case meaning branch starts with no files; the contents of
61ff7b929cea Handle fixup commits and branch creation as produced by cvs2git.
Greg Ward <greg-hg@gerg.ca>
parents: 43
diff changeset
272 # the first commit (this one) determine the list of files at branch
61ff7b929cea Handle fixup commits and branch creation as produced by cvs2git.
Greg Ward <greg-hg@gerg.ca>
parents: 43
diff changeset
273 # time.
61ff7b929cea Handle fixup commits and branch creation as produced by cvs2git.
Greg Ward <greg-hg@gerg.ca>
parents: 43
diff changeset
274 first_parent = second_parent
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
275 second_parent = None
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
276 no_files = True # XXX this is ignored...
44
61ff7b929cea Handle fixup commits and branch creation as produced by cvs2git.
Greg Ward <greg-hg@gerg.ca>
parents: 43
diff changeset
277
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
278 bfirst_parent = first_parent or b''
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
279 bsecond_parent = second_parent or b''
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
280 self.ui.debug(b"commit %s: first_parent = %s, second_parent = %s\n"
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
281 % (cmd, bfirst_parent, bsecond_parent))
44
61ff7b929cea Handle fixup commits and branch creation as produced by cvs2git.
Greg Ward <greg-hg@gerg.ca>
parents: 43
diff changeset
282 assert ((first_parent != second_parent) or
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
283 (first_parent is second_parent is None)), \
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
284 (b"commit %s: first_parent == second parent = %s"
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
285 % (cmd, bfirst_parent))
44
61ff7b929cea Handle fixup commits and branch creation as produced by cvs2git.
Greg Ward <greg-hg@gerg.ca>
parents: 43
diff changeset
286
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
287 # Figure out the Mercurial branch name.
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
288 if fixup and first_parent is not None:
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
289 # If this is a fixup commit, pretend it happened on the same
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
290 # branch as its first parent. (We don't want a Mercurial
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
291 # named branch called "TAG.FIXUP" in the output repository.)
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
292 branch = self.commitmap[first_parent].branch
1
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
293 else:
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
294 branch = self._getbranch(cmd.ref)
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
295
11
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
296 commit_handler = HgImportCommitHandler(
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
297 self, cmd, self.ui)
1
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
298 commit_handler.process()
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
299 self.modified[cmd.id] = commit_handler.modified
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
300 self.filemodes[cmd.id] = commit_handler.mode
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
301 self.copies[cmd.id] = commit_handler.copies
16
234128693c29 Format the commit user as Full Name <user@example.com>
Paul Aurich <paul@darkrain42.org>
parents: 15
diff changeset
302
234128693c29 Format the commit user as Full Name <user@example.com>
Paul Aurich <paul@darkrain42.org>
parents: 15
diff changeset
303 # in case we are converting from git or bzr, prefer author but
234128693c29 Format the commit user as Full Name <user@example.com>
Paul Aurich <paul@darkrain42.org>
parents: 15
diff changeset
304 # fallback to committer (committer is required, author is
234128693c29 Format the commit user as Full Name <user@example.com>
Paul Aurich <paul@darkrain42.org>
parents: 15
diff changeset
305 # optional)
234128693c29 Format the commit user as Full Name <user@example.com>
Paul Aurich <paul@darkrain42.org>
parents: 15
diff changeset
306 userinfo = cmd.author or cmd.committer
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
307 if userinfo[0] == userinfo[1]:
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
308 # In order to conform to fastimport syntax, cvs2git with no
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
309 # authormap produces author names like "jsmith <jsmith>"; if
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
310 # we see that, revert to plain old "jsmith".
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
311 user = userinfo[0]
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
312 else:
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
313 user = b"%s <%s>" % (userinfo[0], userinfo[1])
34
08e2157aaa9a Remove local fork of bzr-fastimport; use my fastimport library instead.
Greg Ward <greg-hg@gerg.ca>
parents: 33
diff changeset
314
62
76bd0ea8add3 Update to cope with API differences.
Jelmer Vernooij <jelmer@samba.org>
parents: 55
diff changeset
315 text = cmd.message
34
08e2157aaa9a Remove local fork of bzr-fastimport; use my fastimport library instead.
Greg Ward <greg-hg@gerg.ca>
parents: 33
diff changeset
316 date = self.convert_date(userinfo)
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
317 parents = []
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
318 if first_parent:
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
319 parents.append(first_parent)
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
320 if second_parent:
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
321 parents.append(second_parent)
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
322
73
a99e5c6c8e1c Fix compatibility with 4.6+
Daniel Johnson <daniel@daniel-johnson.org>
parents: 71
diff changeset
323 commit = common.commit(user, date, text, parents, branch,
a99e5c6c8e1c Fix compatibility with 4.6+
Daniel Johnson <daniel@daniel-johnson.org>
parents: 71
diff changeset
324 rev=cmd.id, sortkey=int(cmd.id[1:]))
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
325
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
326 self.commitmap[cmd.id] = commit
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
327 heads = self.branchmap.get(branch)
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
328 if heads is None:
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
329 heads = [cmd.id]
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
330 else:
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
331 # adding to an existing branch: replace the previous head
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
332 try:
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
333 heads.remove(first_parent)
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
334 except ValueError: # first parent not a head: no problem
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
335 pass
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
336 heads.append(cmd.id) # at end means this is tipmost
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
337 self.branchmap[branch] = heads
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
338 self.ui.debug(b"processed commit %s\n" % cmd)
0
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
339
1
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
340 def convert_date(self, c):
59
c82b6a84884f Convert timezones correctly.
Greg Ward <gward@intelerad.com>
parents: 58
diff changeset
341 res = (int(c[2]), -int(c[3]))
1
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
342 #print c, res
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
343 #print type((0, 0)), type(res), len(res), type(res) is type((0, 0))
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
344 #if type(res) is type((0, 0)) and len(res) == 2:
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
345 # print "go for it"
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
346 #return res
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
347 return b"%d %d" % res
1
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
348
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
349 def reset_handler(self, cmd):
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
350 branch = self._getbranch(cmd.ref)
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
351 if branch:
42
71f1e5ed6213 Convert "lightweight" tags, since that's how cvs2git handle CVS tags.
Greg Ward <greg-hg@gerg.ca>
parents: 41
diff changeset
352 # The usual case for 'reset': (re)create the named branch.
71f1e5ed6213 Convert "lightweight" tags, since that's how cvs2git handle CVS tags.
Greg Ward <greg-hg@gerg.ca>
parents: 41
diff changeset
353 # XXX what should we do if cmd.from_ is None?
71f1e5ed6213 Convert "lightweight" tags, since that's how cvs2git handle CVS tags.
Greg Ward <greg-hg@gerg.ca>
parents: 41
diff changeset
354 if cmd.from_ is not None:
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
355 self.branchmap[branch] = [cmd.from_]
44
61ff7b929cea Handle fixup commits and branch creation as produced by cvs2git.
Greg Ward <greg-hg@gerg.ca>
parents: 43
diff changeset
356 else:
61ff7b929cea Handle fixup commits and branch creation as produced by cvs2git.
Greg Ward <greg-hg@gerg.ca>
parents: 43
diff changeset
357 # pretend the branch never existed... is this right?!?
61ff7b929cea Handle fixup commits and branch creation as produced by cvs2git.
Greg Ward <greg-hg@gerg.ca>
parents: 43
diff changeset
358 try:
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
359 del self.branchmap[branch]
44
61ff7b929cea Handle fixup commits and branch creation as produced by cvs2git.
Greg Ward <greg-hg@gerg.ca>
parents: 43
diff changeset
360 except KeyError:
61ff7b929cea Handle fixup commits and branch creation as produced by cvs2git.
Greg Ward <greg-hg@gerg.ca>
parents: 43
diff changeset
361 pass
42
71f1e5ed6213 Convert "lightweight" tags, since that's how cvs2git handle CVS tags.
Greg Ward <greg-hg@gerg.ca>
parents: 41
diff changeset
362 #else:
71f1e5ed6213 Convert "lightweight" tags, since that's how cvs2git handle CVS tags.
Greg Ward <greg-hg@gerg.ca>
parents: 41
diff changeset
363 # # XXX filename? line number?
71f1e5ed6213 Convert "lightweight" tags, since that's how cvs2git handle CVS tags.
Greg Ward <greg-hg@gerg.ca>
parents: 41
diff changeset
364 # self.ui.warn("ignoring branch reset with no 'from'\n")
58
c370e587f483 Handle commits commands that reference a tag better.
Greg Ward <gward@intelerad.com>
parents: 57
diff changeset
365 elif cmd.ref.startswith(self.tagprefix):
42
71f1e5ed6213 Convert "lightweight" tags, since that's how cvs2git handle CVS tags.
Greg Ward <greg-hg@gerg.ca>
parents: 41
diff changeset
366 # Create a "lightweight tag" in Git terms. As I understand
71f1e5ed6213 Convert "lightweight" tags, since that's how cvs2git handle CVS tags.
Greg Ward <greg-hg@gerg.ca>
parents: 41
diff changeset
367 # it, that's a tag with no description and no history --
71f1e5ed6213 Convert "lightweight" tags, since that's how cvs2git handle CVS tags.
Greg Ward <greg-hg@gerg.ca>
parents: 41
diff changeset
368 # rather like CVS tags. cvs2git turns CVS tags into Git
71f1e5ed6213 Convert "lightweight" tags, since that's how cvs2git handle CVS tags.
Greg Ward <greg-hg@gerg.ca>
parents: 41
diff changeset
369 # lightweight tags, so we should make sure they become
71f1e5ed6213 Convert "lightweight" tags, since that's how cvs2git handle CVS tags.
Greg Ward <greg-hg@gerg.ca>
parents: 41
diff changeset
370 # Mercurial tags. But we don't have to fake a history for
71f1e5ed6213 Convert "lightweight" tags, since that's how cvs2git handle CVS tags.
Greg Ward <greg-hg@gerg.ca>
parents: 41
diff changeset
371 # them; save them up for the end.
58
c370e587f483 Handle commits commands that reference a tag better.
Greg Ward <gward@intelerad.com>
parents: 57
diff changeset
372 if cmd.from_ is not None:
c370e587f483 Handle commits commands that reference a tag better.
Greg Ward <gward@intelerad.com>
parents: 57
diff changeset
373 tag = cmd.ref[len(self.tagprefix):]
c370e587f483 Handle commits commands that reference a tag better.
Greg Ward <gward@intelerad.com>
parents: 57
diff changeset
374 self.tags.append((tag, cmd.from_))
15
e19d2ce18eeb Fix reset_handler
Paul Aurich <paul@darkrain42.org>
parents: 11
diff changeset
375
1
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
376 def tag_handler(self, cmd):
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
377 pass
0
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
378
42
71f1e5ed6213 Convert "lightweight" tags, since that's how cvs2git handle CVS tags.
Greg Ward <greg-hg@gerg.ca>
parents: 41
diff changeset
379
1
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
380 class HgImportCommitHandler(processor.CommitHandler):
0
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
381
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
382 def __init__(self, parent, command, ui):
11
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
383 self.parent = parent # HgImportProcessor running the show
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
384 self.command = command # CommitCommand that we're processing
0
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
385 self.ui = ui
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
386
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
387 # Files changes by this commit as a list of (filename, id)
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
388 # tuples where id is (commitid, blobid). The blobid is
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
389 # needed to fetch the file's contents later, and the commitid
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
390 # is needed to fetch the mode.
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
391 # (XXX what about inline file contents?)
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
392 # (XXX how to describe deleted files?)
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
393 self.modified = []
0
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
394
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
395 # mode of files listed in self.modified: '', 'x', or 'l'
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
396 self.mode = {}
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
397
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
398 # dictionary of src: dest (renamed files are in here and self.modified)
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
399 self.copies = {}
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
400
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
401 # number of inline files seen in this commit
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
402 self.inlinecount = 0
1
9461f5c3a67c Actually imports something - incredible!
Paul Crowley <paul@lshift.net>
parents: 0
diff changeset
403
0
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
404 def modify_handler(self, filecmd):
11
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
405 if filecmd.dataref:
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
406 blobid = filecmd.dataref # blobid is the mark of the blob
11
9e9c215fcbd8 Handle blobs in the fast-import stream.
Greg Ward <greg-hg@gerg.ca>
parents: 10
diff changeset
407 else:
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
408 blobid = b"%s-inline:%d" % (self.command.id, self.inlinecount)
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
409 assert filecmd.data is not None
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
410 self.parent.writeblob(blobid, filecmd.data)
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
411 self.inlinecount += 1
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
412
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
413 fileid = (self.command.id, blobid)
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
414
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
415 self.modified.append((filecmd.path, fileid))
62
76bd0ea8add3 Update to cope with API differences.
Jelmer Vernooij <jelmer@samba.org>
parents: 55
diff changeset
416 if stat.S_ISLNK(filecmd.mode): # link
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
417 mode = b'l'
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
418 elif filecmd.mode & 0o111: # executable
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
419 mode = b'x'
62
76bd0ea8add3 Update to cope with API differences.
Jelmer Vernooij <jelmer@samba.org>
parents: 55
diff changeset
420 elif stat.S_ISREG(filecmd.mode): # regular file
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
421 mode = b''
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
422 else:
74
a4f13dc5e3f7 Support Mercurial 5.6 and Python-3.6
Roy Marples <roy@marples.name>
parents: 73
diff changeset
423 raise RuntimeError(b"mode %s unsupported" % filecmd.mode)
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
424
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
425 self.mode[filecmd.path] = mode
0
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
426
3
24c600e5cb71 fixes to file deletes, second parents, mark handling
Paul Crowley <paul@lshift.net>
parents: 1
diff changeset
427 def delete_handler(self, filecmd):
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
428 self.modified.append((filecmd.path, None))
0
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
429
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
430 def copy_handler(self, filecmd):
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
431 self.copies[filecmd.src_path] = filecmd.dest_path
0
d107c6d36780 Add the start of the hg fastimport command
Paul Crowley <paul@lshift.net>
parents:
diff changeset
432
47
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
433 def rename_handler(self, filecmd):
7ff36dc9f0b1 Massive rework to use infrastructure provided by convert extension.
Greg Ward <greg-hg@gerg.ca>
parents: 46
diff changeset
434 # copy oldname to newname and delete oldname
71
5dc3ab8142d5 Add patch to fix rename handling by correcting the used attribute names.
Ralph Meijer <ralphm@ik.nu>
parents: 68
diff changeset
435 self.copies[filecmd.new_path] = filecmd.old_path
5dc3ab8142d5 Add patch to fix rename handling by correcting the used attribute names.
Ralph Meijer <ralphm@ik.nu>
parents: 68
diff changeset
436 self.modified.append((filecmd.old_path, None))