~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/revisionspec.py

Update news and readme

- better explanation of dependencies

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 = []
58
57
        # TODO: otherwise, it should depend on how I was built -
59
58
        # if it's in_history(branch), then check revision_history(),
60
59
        # if it's in_store(branch), do the check below
61
 
        return self.branch.repository.has_revision(self.rev_id)
 
60
        return self.branch.revision_store.has_id(self.rev_id)
62
61
 
63
62
    def __len__(self):
64
63
        return 2
69
68
        raise IndexError(index)
70
69
 
71
70
    def get(self):
72
 
        return self.branch.repository.get_revision(self.rev_id)
 
71
        return self.branch.get_revision(self.rev_id)
73
72
 
74
73
    def __eq__(self, other):
75
74
        if type(other) not in (tuple, list, type(self)):
205
204
        try:
206
205
            return RevisionInfo(branch, revs.index(self.spec) + 1, self.spec)
207
206
        except ValueError:
208
 
            return RevisionInfo(branch, None, self.spec)
 
207
            return RevisionInfo(branch, None)
209
208
 
210
209
SPEC_TYPES.append(RevisionSpec_revid)
211
210
 
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.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
 
345
319
        for r, b in ((revision_a, branch), (revision_b, other_branch)):
346
320
            if r is None:
347
321
                raise NoCommits(b)
348
 
        revision_source = MultipleRevisionSources(branch.repository,
349
 
                                                  other_branch.repository)
 
322
        revision_source = MultipleRevisionSources(branch, other_branch)
350
323
        rev_id = common_ancestor(revision_a, revision_b, revision_source)
351
324
        try:
352
325
            revno = branch.revision_id_to_revno(rev_id)
365
338
 
366
339
    def _match_on(self, branch, revs):
367
340
        from branch import Branch
 
341
        from fetch import greedy_fetch
368
342
        other_branch = Branch.open_containing(self.spec)[0]
369
343
        revision_b = other_branch.last_revision()
370
344
        if revision_b is None:
371
345
            raise NoCommits(other_branch)
372
346
        # pull in the remote revisions so we can diff
373
 
        branch.fetch(other_branch, revision_b)
 
347
        greedy_fetch(branch, other_branch, revision=revision_b)
374
348
        try:
375
349
            revno = branch.revision_id_to_revno(revision_b)
376
350
        except NoSuchRevision: