~bzr-pqm/bzr/2.3

« back to all changes in this revision

Viewing changes to bzrlib/bzrdir.py

  • Committer: Patch Queue Manager
  • Date: 2012-03-28 00:42:46 UTC
  • mfrom: (5665.1.2 2.3-feature-flags)
  • Revision ID: pqm@pqm.ubuntu.com-20120328004246-kx0vzifaqi142b8i
(jelmer) Add basic support for feature flags. (Jelmer Vernooij)

Show diffs side-by-side

added added

removed removed

Lines of Context:
93
93
    )
94
94
 
95
95
 
 
96
def extract_format_string(text):
 
97
    """Read a format string from a file.
 
98
 
 
99
    The first line is returned. The other lines can contain
 
100
    optional features. An exception is raised when a
 
101
    required feature is present.
 
102
    """
 
103
    lines = text.splitlines(True)
 
104
    try:
 
105
        firstline = lines.pop(0)
 
106
    except IndexError:
 
107
        raise errors.UnknownFormatError(format=text, kind='')
 
108
    for lineno, line in enumerate(lines):
 
109
        try:
 
110
            (necessity, feature) = line.split(" ", 1)
 
111
        except ValueError:
 
112
            raise errors.ParseFormatError(lineno=lineno+2,
 
113
                line=line, text=text)
 
114
        else:
 
115
            if necessity == "optional":
 
116
                mutter("Ignoring optional feature %s", feature)
 
117
            else:
 
118
                raise errors.MissingFeature(feature)
 
119
    return firstline
 
120
 
 
121
 
96
122
class BzrDir(controldir.ControlDir):
97
123
    """A .bzr control diretory.
98
124
 
1471
1497
            format_string = transport.get_bytes(".bzr/branch-format")
1472
1498
        except errors.NoSuchFile:
1473
1499
            raise errors.NotBranchError(path=transport.base)
 
1500
        format_string = extract_format_string(format_string)
1474
1501
        try:
1475
1502
            return klass._formats[format_string]
1476
1503
        except KeyError: