~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/revisionspec.py

Added more docs

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 
18
18
import datetime
19
19
import re
20
 
import bisect
21
20
from bzrlib.errors import BzrError, NoSuchRevision, NoCommits
22
21
 
23
22
_marker = []
249
248
SPEC_TYPES.append(RevisionSpec_tag)
250
249
 
251
250
 
252
 
class RevisionSpec_revs:
253
 
    def __init__(self, revs, branch):
254
 
        self.revs = revs
255
 
        self.branch = branch
256
 
    def __getitem__(self, index):
257
 
        r = self.branch.repository.get_revision(self.revs[index])
258
 
        # TODO: Handle timezone.
259
 
        return datetime.datetime.fromtimestamp(r.timestamp)
260
 
    def __len__(self):
261
 
        return len(self.revs)
262
 
 
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
 
 
276
251
class RevisionSpec_date(RevisionSpec):
277
252
    prefix = 'date:'
278
253
    _date_re = re.compile(
320
295
 
321
296
            dt = datetime.datetime(year=year, month=month, day=day,
322
297
                    hour=hour, minute=minute, second=second)
323
 
        branch.lock_read()
324
 
        try:
325
 
            rev = bisect.bisect(RevisionSpec_revs(revs, branch), dt)
326
 
        finally:
327
 
            branch.unlock()
328
 
        if rev == len(revs):
329
 
            return RevisionInfo(branch, None)
330
 
        else:
331
 
            return RevisionInfo(branch, rev + 1)
 
298
        first = dt
 
299
        for i in range(len(revs)):
 
300
            r = branch.repository.get_revision(revs[i])
 
301
            # TODO: Handle timezone.
 
302
            dt = datetime.datetime.fromtimestamp(r.timestamp)
 
303
            if first <= dt:
 
304
                return RevisionInfo(branch, i+1)
 
305
        return RevisionInfo(branch, None)
332
306
 
333
307
SPEC_TYPES.append(RevisionSpec_date)
334
308
 
365
339
 
366
340
    def _match_on(self, branch, revs):
367
341
        from branch import Branch
 
342
        from fetch import greedy_fetch
368
343
        other_branch = Branch.open_containing(self.spec)[0]
369
344
        revision_b = other_branch.last_revision()
370
345
        if revision_b is None:
371
346
            raise NoCommits(other_branch)
372
347
        # pull in the remote revisions so we can diff
373
 
        branch.fetch(other_branch, revision_b)
 
348
        greedy_fetch(branch, other_branch, revision=revision_b)
374
349
        try:
375
350
            revno = branch.revision_id_to_revno(revision_b)
376
351
        except NoSuchRevision: