/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/revision.py

  • Committer: Jelmer Vernooij
  • Date: 2020-04-05 19:11:34 UTC
  • mto: (7490.7.16 work)
  • mto: This revision was merged to the branch mainline in revision 7501.
  • Revision ID: jelmer@jelmer.uk-20200405191134-0aebh8ikiwygxma5
Populate the .gitignore file.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
 
1
# Copyright (C) 2005-2011 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
 
17
from __future__ import absolute_import
 
18
 
17
19
# TODO: Some kind of command-line display of revision properties:
18
20
# perhaps show them in log -v and allow them as options to the commit command.
19
21
 
20
22
 
21
 
from bzrlib.lazy_import import lazy_import
 
23
from .lazy_import import lazy_import
22
24
lazy_import(globals(), """
23
 
from bzrlib import deprecated_graph
24
 
from bzrlib import bugtracker
 
25
from breezy import bugtracker
25
26
""")
26
 
from bzrlib import (
 
27
from . import (
27
28
    errors,
28
 
    symbol_versioning,
29
 
    )
30
 
from bzrlib.osutils import contains_whitespace
 
29
    osutils,
 
30
    )
 
31
from .sixish import (
 
32
    text_type,
 
33
    )
31
34
 
32
 
NULL_REVISION="null:"
33
 
CURRENT_REVISION="current:"
 
35
NULL_REVISION = b"null:"
 
36
CURRENT_REVISION = b"current:"
34
37
 
35
38
 
36
39
class Revision(object):
71
74
        if not isinstance(other, Revision):
72
75
            return False
73
76
        return (
74
 
                self.inventory_sha1 == other.inventory_sha1
75
 
                and self.revision_id == other.revision_id
76
 
                and self.timestamp == other.timestamp
77
 
                and self.message == other.message
78
 
                and self.timezone == other.timezone
79
 
                and self.committer == other.committer
80
 
                and self.properties == other.properties
81
 
                and self.parent_ids == other.parent_ids)
 
77
            self.inventory_sha1 == other.inventory_sha1
 
78
            and self.revision_id == other.revision_id
 
79
            and self.timestamp == other.timestamp
 
80
            and self.message == other.message
 
81
            and self.timezone == other.timezone
 
82
            and self.committer == other.committer
 
83
            and self.properties == other.properties
 
84
            and self.parent_ids == other.parent_ids)
82
85
 
83
86
    def __ne__(self, other):
84
87
        return not self.__eq__(other)
85
88
 
86
89
    def _check_properties(self):
87
90
        """Verify that all revision properties are OK."""
88
 
        for name, value in self.properties.iteritems():
89
 
            if not isinstance(name, basestring) or contains_whitespace(name):
 
91
        for name, value in self.properties.items():
 
92
            # GZ 2017-06-10: What sort of string are properties exactly?
 
93
            not_text = not isinstance(name, (text_type, str))
 
94
            if not_text or osutils.contains_whitespace(name):
90
95
                raise ValueError("invalid property name %r" % name)
91
 
            if not isinstance(value, basestring):
 
96
            if not isinstance(value, (text_type, bytes)):
92
97
                raise ValueError("invalid property value %r for %r" %
93
98
                                 (value, name))
94
99
 
102
107
        reversed_result = []
103
108
        while current_revision is not None:
104
109
            reversed_result.append(current_revision.revision_id)
105
 
            if not len (current_revision.parent_ids):
 
110
            if not len(current_revision.parent_ids):
106
111
                reversed_result.append(None)
107
112
                current_revision = None
108
113
            else:
121
126
        else:
122
127
            return ''
123
128
 
124
 
    @symbol_versioning.deprecated_method(symbol_versioning.deprecated_in((1, 13, 0)))
125
 
    def get_apparent_author(self):
126
 
        """Return the apparent author of this revision.
127
 
 
128
 
        This method is deprecated in favour of get_apparent_authors.
129
 
 
130
 
        If the revision properties contain any author names,
131
 
        return the first. Otherwise return the committer name.
132
 
        """
133
 
        authors = self.get_apparent_authors()
134
 
        if authors:
135
 
            return authors[0]
136
 
        else:
137
 
            return None
138
 
 
139
129
    def get_apparent_authors(self):
140
130
        """Return the apparent authors of this revision.
141
131
 
157
147
        """Iterate over the bugs associated with this revision."""
158
148
        bug_property = self.properties.get('bugs', None)
159
149
        if bug_property is None:
160
 
            return
161
 
        for line in bug_property.splitlines():
162
 
            try:
163
 
                url, status = line.split(None, 2)
164
 
            except ValueError:
165
 
                raise errors.InvalidLineInBugsProperty(line)
166
 
            if status not in bugtracker.ALLOWED_BUG_STATUSES:
167
 
                raise errors.InvalidBugStatus(status)
168
 
            yield url, status
 
150
            return iter([])
 
151
        return bugtracker.decode_bug_urls(bug_property)
169
152
 
170
153
 
171
154
def iter_ancestors(revision_id, revision_source, only_present=False):
178
161
                yield ancestor, distance
179
162
            try:
180
163
                revision = revision_source.get_revision(ancestor)
181
 
            except errors.NoSuchRevision, e:
 
164
            except errors.NoSuchRevision as e:
182
165
                if e.revision == revision_id:
183
166
                    raise
184
167
                else:
199
182
    """
200
183
    found_ancestors = {}
201
184
    anc_iter = enumerate(iter_ancestors(revision_id, revision_source,
202
 
                         only_present=True))
 
185
                                        only_present=True))
203
186
    for anc_order, (anc_id, anc_distance) in anc_iter:
204
187
        if anc_id not in found_ancestors:
205
188
            found_ancestors[anc_id] = (anc_order, anc_distance)
220
203
 
221
204
    :return: True if the revision is reserved, False otherwise
222
205
    """
223
 
    return isinstance(revision_id, basestring) and revision_id.endswith(':')
 
206
    return isinstance(revision_id, bytes) and revision_id.endswith(b':')
224
207
 
225
208
 
226
209
def check_not_reserved_id(revision_id):
232
215
def ensure_null(revision_id):
233
216
    """Ensure only NULL_REVISION is used to represent the null revision"""
234
217
    if revision_id is None:
235
 
        symbol_versioning.warn('NULL_REVISION should be used for the null'
236
 
            ' revision instead of None, as of bzr 0.91.',
237
 
            DeprecationWarning, stacklevel=2)
238
 
        return NULL_REVISION
239
 
    else:
240
 
        return revision_id
 
218
        raise ValueError(
 
219
            'NULL_REVISION should be used for the null'
 
220
            ' revision instead of None.')
 
221
    return revision_id
241
222
 
242
223
 
243
224
def is_null(revision_id):
244
225
    if revision_id is None:
245
 
        symbol_versioning.warn('NULL_REVISION should be used for the null'
246
 
            ' revision instead of None, as of bzr 0.90.',
247
 
            DeprecationWarning, stacklevel=2)
248
 
    return revision_id in (None, NULL_REVISION)
 
226
        raise ValueError('NULL_REVISION should be used for the null'
 
227
                         ' revision instead of None.')
 
228
    return (revision_id == NULL_REVISION)