summaryrefslogtreecommitdiff
path: root/exporter.py
diff options
context:
space:
mode:
Diffstat (limited to 'exporter.py')
-rw-r--r--exporter.py20
1 files changed, 19 insertions, 1 deletions
diff --git a/exporter.py b/exporter.py
index e4b5132..2094ff5 100644
--- a/exporter.py
+++ b/exporter.py
@@ -148,7 +148,8 @@ class BzrFastExporter(object):
def __init__(self, source, outf, git_branch=None, checkpoint=-1,
import_marks_file=None, export_marks_file=None, revision=None,
- verbose=False, plain_format=False, rewrite_tags=False):
+ verbose=False, plain_format=False, rewrite_tags=False,
+ baseline=False):
"""Export branch data in fast import format.
:param plain_format: if True, 'classic' fast-import format is
@@ -170,6 +171,7 @@ class BzrFastExporter(object):
self.excluded_revisions = set()
self.plain_format = plain_format
self.rewrite_tags = rewrite_tags
+ self.baseline = baseline
self._multi_author_api_available = hasattr(bzrlib.revision.Revision,
'get_apparent_authors')
self.properties_to_exclude = ['authors', 'author']
@@ -213,6 +215,10 @@ class BzrFastExporter(object):
self.note("Calculating the revisions to exclude ...")
self.excluded_revisions = set([rev_id for rev_id, _, _, _ in
self.branch.iter_merge_sorted_revisions(start_rev_id)])
+ if self.baseline:
+ # needed so the first relative commit knows its parent
+ self.excluded_revisions.remove(start_rev_id)
+ view_revisions.insert(0, start_rev_id)
return list(view_revisions)
def run(self):
@@ -225,6 +231,8 @@ class BzrFastExporter(object):
self._commit_total)
if not self.plain_format:
self.emit_features()
+ if self.baseline:
+ self.emit_baseline(interesting.pop(0), self.git_branch)
for revid in interesting:
self.emit_commit(revid, self.git_branch)
if self.branch.supports_tags():
@@ -302,6 +310,16 @@ class BzrFastExporter(object):
for feature in sorted(commands.FEATURE_NAMES):
self.print_cmd(commands.FeatureCommand(feature))
+ def emit_baseline(self, revid, git_branch):
+ # Emit a full source tree of the first commit's parent
+ git_ref = 'refs/heads/%s' % (git_branch,)
+ revobj = self.branch.repository.get_revision(revid)
+ mark = 1
+ self.revid_to_mark[revid] = mark
+ file_cmds = self._get_filecommands(bzrlib.revision.NULL_REVISION, revid)
+ self.print_cmd(self._get_commit_command(git_ref, mark, revobj,
+ file_cmds))
+
def emit_commit(self, revid, git_branch):
if revid in self.revid_to_mark or revid in self.excluded_revisions:
return