/breezy/unstable

To get this branch, use:
bzr branch https://code.breezy-vcs.org/breezy/unstable

« back to all changes in this revision

Viewing changes to breezy/plugins/fastimport/marks_file.py

  • Committer: Jelmer Vernooij
  • Date: 2017-05-24 01:39:33 UTC
  • mfrom: (3815.3776.6)
  • Revision ID: jelmer@jelmer.uk-20170524013933-ir4y4tqtrsiz2ka2
New upstream snapshot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2009 Canonical Ltd
 
2
#
 
3
# This program is free software; you can redistribute it and/or modify
 
4
# it under the terms of the GNU General Public License as published by
 
5
# the Free Software Foundation; either version 2 of the License, or
 
6
# (at your option) any later version.
 
7
#
 
8
# This program is distributed in the hope that it will be useful,
 
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
# GNU General Public License for more details.
 
12
#
 
13
# You should have received a copy of the GNU General Public License
 
14
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
15
 
 
16
"""Routines for reading/writing a marks file."""
 
17
 
 
18
from __future__ import absolute_import
 
19
 
 
20
from ...trace import warning
 
21
 
 
22
 
 
23
def import_marks(filename):
 
24
    """Read the mapping of marks to revision-ids from a file.
 
25
 
 
26
    :param filename: the file to read from
 
27
    :return: None if an error is encountered or a dictionary with marks
 
28
        as keys and revision-ids as values
 
29
    """
 
30
    # Check that the file is readable and in the right format
 
31
    try:
 
32
        f = file(filename)
 
33
    except IOError:
 
34
        warning("Could not import marks file %s - not importing marks",
 
35
            filename)
 
36
        return None
 
37
 
 
38
    # Read the revision info
 
39
    revision_ids = {}
 
40
 
 
41
    line = f.readline()
 
42
    if line == 'format=1\n':
 
43
        # Cope with old-style marks files
 
44
        # Read the branch info
 
45
        branch_names = {}
 
46
        for string in f.readline().rstrip('\n').split('\0'):
 
47
            if not string:
 
48
                continue
 
49
            name, integer = string.rsplit('.', 1)
 
50
            branch_names[name] = int(integer)
 
51
        line = f.readline()
 
52
 
 
53
    while line:
 
54
        line = line.rstrip('\n')
 
55
        mark, revid = line.split(' ', 1)
 
56
        mark = mark.lstrip(':')
 
57
        revision_ids[mark] = revid
 
58
        line = f.readline()
 
59
    f.close()
 
60
    return revision_ids
 
61
 
 
62
 
 
63
def export_marks(filename, revision_ids):
 
64
    """Save marks to a file.
 
65
 
 
66
    :param filename: filename to save data to
 
67
    :param revision_ids: dictionary mapping marks -> bzr revision-ids
 
68
    """
 
69
    try:
 
70
        f = file(filename, 'w')
 
71
    except IOError:
 
72
        warning("Could not open export-marks file %s - not exporting marks",
 
73
            filename)
 
74
        return
 
75
 
 
76
    # Write the revision info
 
77
    for mark, revid in revision_ids.iteritems():
 
78
        f.write(':%s %s\n' % (str(mark).lstrip(':'), revid))
 
79
    f.close()