~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/revisionspec.py

Late bind to PatienceSequenceMatcher to allow plugin to override.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# Copyright (C) 2005 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
5
5
# the Free Software Foundation; either version 2 of the License, or
6
6
# (at your option) any later version.
7
 
#
 
7
 
8
8
# This program is distributed in the hope that it will be useful,
9
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
11
# GNU General Public License for more details.
12
 
#
 
12
 
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
149
149
            raise NoSuchRevision(branch, str(self.spec))
150
150
 
151
151
    def in_history(self, branch):
152
 
        if branch:
153
 
            revs = branch.revision_history()
154
 
        else:
155
 
            revs = None
 
152
        revs = branch.revision_history()
156
153
        return self._match_on_and_check(branch, revs)
157
154
 
158
155
        # FIXME: in_history is somewhat broken,
170
167
        return '<%s %s%s>' % (self.__class__.__name__,
171
168
                              self.prefix or '',
172
169
                              self.spec)
173
 
    
174
 
    def needs_branch(self):
175
 
        """Whether this revision spec needs a branch.
176
170
 
177
 
        Set this to False the branch argument of _match_on is not used.
178
 
        """
179
 
        return True
180
171
 
181
172
# private API
182
173
 
199
190
 
200
191
    def _match_on(self, branch, revs):
201
192
        """Lookup a revision by revision number"""
202
 
        if self.spec.find(':') == -1:
203
 
            try:
204
 
                return RevisionInfo(branch, int(self.spec))
205
 
            except ValueError:
206
 
                return RevisionInfo(branch, None)
207
 
        else:
208
 
            from branch import Branch
209
 
            revname = self.spec[self.spec.find(':')+1:]
210
 
            other_branch = Branch.open_containing(revname)[0]
211
 
            try:
212
 
                revno = int(self.spec[:self.spec.find(':')])
213
 
            except ValueError:
214
 
                return RevisionInfo(other_branch, None)
215
 
            revid = other_branch.get_rev_id(revno)
216
 
            return RevisionInfo(other_branch, revno)
217
 
        
218
 
    def needs_branch(self):
219
 
        return self.spec.find(':') == -1
 
193
        try:
 
194
            return RevisionInfo(branch, int(self.spec))
 
195
        except ValueError:
 
196
            return RevisionInfo(branch, None)
220
197
 
221
198
SPEC_TYPES.append(RevisionSpec_revno)
222
199
 
284
261
        return len(self.revs)
285
262
 
286
263
 
 
264
class RevisionSpec_revs:
 
265
    def __init__(self, revs, branch):
 
266
        self.revs = revs
 
267
        self.branch = branch
 
268
    def __getitem__(self, index):
 
269
        r = self.branch.repository.get_revision(self.revs[index])
 
270
        # TODO: Handle timezone.
 
271
        return datetime.datetime.fromtimestamp(r.timestamp)
 
272
    def __len__(self):
 
273
        return len(self.revs)
 
274
 
 
275
 
287
276
class RevisionSpec_date(RevisionSpec):
288
277
    prefix = 'date:'
289
278
    _date_re = re.compile(
301
290
          at a specified time).
302
291
 
303
292
          So the proper way of saying 'give me all entries for today' is:
304
 
              -r date:yesterday..date:today
 
293
              -r date:today..date:tomorrow
305
294
        """
306
295
        today = datetime.datetime.fromordinal(datetime.date.today().toordinal())
307
296
        if self.spec.lower() == 'yesterday':