~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/revision.py

  • Committer: Martin Pool
  • Date: 2005-07-12 01:44:23 UTC
  • Revision ID: mbp@sourcefrog.net-20050712014423-1d95eb47ce7ab510
- add simple test case for bzr status

- show_status takes to_file argument

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
    """
26
26
    revision_id = None
27
27
    revision_sha1 = None
28
 
    def __init__(self, revision_id, revision_sha1):
 
28
    def __init__(self, revision_id, revision_sha1=None):
29
29
        if revision_id == None \
30
30
           or isinstance(revision_id, basestring):
31
31
            self.revision_id = revision_id
49
49
    into the file it describes.
50
50
 
51
51
    After bzr 0.0.5 revisions are allowed to have multiple parents.
52
 
    To support old clients this is written out in a slightly redundant
53
 
    form: the first parent as the predecessor.  This will eventually
54
 
    be dropped.
55
52
 
56
53
    parents
57
54
        List of parent revisions, each is a RevisionReference.
68
65
        self.__dict__.update(args)
69
66
        self.parents = []
70
67
 
71
 
    def _get_precursor(self):
72
 
        from warnings import warn
73
 
        warn("Revision.precursor is deprecated", stacklevel=2)
74
 
        if self.parents:
75
 
            return self.parents[0].revision_id
76
 
        else:
77
 
            return None
78
 
 
79
 
 
80
 
    def _get_precursor_sha1(self):
81
 
        from warnings import warn
82
 
        warn("Revision.precursor_sha1 is deprecated", stacklevel=2)
83
 
        if self.parents:
84
 
            return self.parents[0].revision_sha1
85
 
        else:
86
 
            return None    
87
 
 
88
 
 
89
 
    def _fail(self):
90
 
        raise Exception("can't assign to precursor anymore")
91
 
 
92
 
 
93
 
    precursor = property(_get_precursor, _fail, _fail)
94
 
    precursor_sha1 = property(_get_precursor_sha1, _fail, _fail)
95
 
 
96
 
 
97
68
 
98
69
    def __repr__(self):
99
70
        return "<Revision id %s>" % self.revision_id
118
89
        msg.tail = '\n'
119
90
 
120
91
        if self.parents:
121
 
            # first parent stored as precursor for compatability with 0.0.5 and
122
 
            # earlier
123
 
            pr = self.parents[0]
124
 
            assert pr.revision_id
125
 
            root.set('precursor', pr.revision_id)
126
 
            if pr.revision_sha1:
127
 
                root.set('precursor_sha1', pr.revision_sha1)
128
 
                
129
 
        if self.parents:
130
92
            pelts = SubElement(root, 'parents')
131
93
            pelts.tail = pelts.text = '\n'
132
94
            for rr in self.parents:
168
130
 
169
131
    pelts = elt.find('parents')
170
132
 
171
 
    if precursor:
172
 
        # revisions written prior to 0.0.5 have a single precursor
173
 
        # give as an attribute
174
 
        rev_ref = RevisionReference(precursor, precursor_sha1)
175
 
        rev.parents.append(rev_ref)
176
 
    elif pelts:
 
133
    if pelts:
177
134
        for p in pelts:
178
135
            assert p.tag == 'revision_ref', \
179
136
                   "bad parent node tag %r" % p.tag
181
138
                                        p.get('revision_sha1'))
182
139
            rev.parents.append(rev_ref)
183
140
 
 
141
        if precursor:
 
142
            # must be consistent
 
143
            prec_parent = rev.parents[0].revision_id
 
144
            assert prec_parent == precursor
 
145
    elif precursor:
 
146
        # revisions written prior to 0.0.5 have a single precursor
 
147
        # give as an attribute
 
148
        rev_ref = RevisionReference(precursor, precursor_sha1)
 
149
        rev.parents.append(rev_ref)
 
150
 
184
151
    v = elt.get('timezone')
185
152
    rev.timezone = v and int(v)
186
153
 
187
154
    rev.message = elt.findtext('message') # text of <message>
188
155
    return rev
 
156
 
 
157
 
 
158
 
 
159
REVISION_ID_RE = None
 
160
 
 
161
def validate_revision_id(rid):
 
162
    """Check rid is syntactically valid for a revision id."""
 
163
    global REVISION_ID_RE
 
164
    if not REVISION_ID_RE:
 
165
        import re
 
166
        REVISION_ID_RE = re.compile('[\w.-]+@[\w.-]+--?\d+--?[0-9a-f]+\Z')
 
167
 
 
168
    if not REVISION_ID_RE.match(rid):
 
169
        raise ValueError("malformed revision-id %r" % rid)
 
170