diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2010-12-11 22:27:52 +0100 |
---|---|---|
committer | Jelmer Vernooij <jelmer@samba.org> | 2010-12-11 22:27:52 +0100 |
commit | f20da2d24698c44ea320feda69fdf988568e6769 (patch) | |
tree | 555c0ea3af6fe778de181792ed88eb28e4595e94 | |
parent | 1bd92b8ae760d6ed8f47c5b74bbdcd2eba6580ba (diff) | |
parent | b42f5e0a791a31cc336e2e797df8d7811e283d1f (diff) | |
download | bzr-fastimport-f20da2d24698c44ea320feda69fdf988568e6769.tar.gz |
Merge in Ian's new mark file format branch, add support for still reading old style marks files.
-rw-r--r-- | exporter.py | 8 | ||||
-rw-r--r-- | marks_file.py | 59 |
2 files changed, 26 insertions, 41 deletions
diff --git a/exporter.py b/exporter.py index 68f5cde..3f477d1 100644 --- a/exporter.py +++ b/exporter.py @@ -103,8 +103,9 @@ class BzrFastExporter(object): marks_info = marks_file.import_marks(self.import_marks_file) if marks_info is not None: self.revid_to_mark = dict((r, m) for m, r in - marks_info[0].items()) - self.branch_names = marks_info[1] + marks_info.items()) + # These are no longer included in the marks file + #self.branch_names = marks_info[1] def interesting_history(self): if self.revision: @@ -193,8 +194,7 @@ class BzrFastExporter(object): def _save_marks(self): if self.export_marks_file: revision_ids = dict((m, r) for r, m in self.revid_to_mark.items()) - marks_file.export_marks(self.export_marks_file, revision_ids, - self.branch_names) + marks_file.export_marks(self.export_marks_file, revision_ids) def is_empty_dir(self, tree, path): path_id = tree.path2id(path) diff --git a/marks_file.py b/marks_file.py index 96e3cab..c05f8c6 100644 --- a/marks_file.py +++ b/marks_file.py @@ -17,7 +17,6 @@ """Routines for reading/writing a marks file.""" -import re from bzrlib.trace import warning @@ -25,11 +24,8 @@ def import_marks(filename): """Read the mapping of marks to revision-ids from a file. :param filename: the file to read from - :return: None if an error is encountered or (revision_ids, branch_names) - where - * revision_ids is a dictionary with marks as keys and revision-ids - as values - * branch_names is a dictionary mapping branch names to some magic # + :return: None if an error is encountered or a dictionary with marks + as keys and revision-ids as values """ # Check that the file is readable and in the right format try: @@ -38,41 +34,38 @@ def import_marks(filename): warning("Could not import marks file %s - not importing marks", filename) return None - firstline = f.readline() - match = re.match(r'^format=(\d+)$', firstline) - if not match: - warning("%r doesn't look like a marks file - not importing marks", - filename) - return None - elif match.group(1) != '1': - warning('format version in marks file %s not supported - not importing' - 'marks', filename) - return None - # Read the branch info - branch_names = {} - for string in f.readline().rstrip('\n').split('\0'): - if not string: - continue - name, integer = string.rsplit('.', 1) - branch_names[name] = int(integer) - # Read the revision info revision_ids = {} - for line in f: + + line = f.readline() + if line == 'format=1\n': + # Cope with old-style marks files + # Read the branch info + branch_names = {} + for string in f.readline().rstrip('\n').split('\0'): + if not string: + continue + name, integer = string.rsplit('.', 1) + branch_names[name] = int(integer) + line = f.readline() + + while line: line = line.rstrip('\n') mark, revid = line.split(' ', 1) + if mark.startswith(':'): + mark = mark[1:] revision_ids[mark] = revid + line = f.readline() f.close() - return (revision_ids, branch_names) + return revision_ids -def export_marks(filename, revision_ids, branch_names=None): +def export_marks(filename, revision_ids): """Save marks to a file. :param filename: filename to save data to :param revision_ids: dictionary mapping marks -> bzr revision-ids - :param branch_names: dictionary mapping branch names to some magic # """ try: f = file(filename, 'w') @@ -80,16 +73,8 @@ def export_marks(filename, revision_ids, branch_names=None): warning("Could not open export-marks file %s - not exporting marks", filename) return - f.write('format=1\n') - - # Write the branch names line - if branch_names: - branch_names = [ '%s.%d' % x for x in branch_names.iteritems() ] - f.write('\0'.join(branch_names) + '\n') - else: - f.write('\0tmp.0\n') # Write the revision info for mark, revid in revision_ids.iteritems(): - f.write('%s %s\n' % (mark, revid)) + f.write(':%s %s\n' % (mark, revid)) f.close() |