~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/revisionspec.py

  • Committer: John Arbash Meinel
  • Date: 2006-12-01 19:41:16 UTC
  • mfrom: (2158 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2159.
  • Revision ID: john@arbash-meinel.com-20061201194116-nvn5qhfxux5284jc
[merge] bzr.dev 2158

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
 
33
33
 
34
34
class RevisionInfo(object):
35
 
    """The results of applying a revision specification to a branch.
 
35
    """The results of applying a revision specification to a branch."""
 
36
 
 
37
    help_txt = """The results of applying a revision specification to a branch.
36
38
 
37
39
    An instance has two useful attributes: revno, and rev_id.
38
40
 
99
101
 
100
102
 
101
103
class RevisionSpec(object):
102
 
    """A parsed revision specification.
 
104
    """A parsed revision specification."""
 
105
 
 
106
    help_txt = """A parsed revision specification.
103
107
 
104
108
    A revision specification can be an integer, in which case it is
105
109
    assumed to be a revno (though this will translate negative values
240
244
# private API
241
245
 
242
246
class RevisionSpec_revno(RevisionSpec):
 
247
    """Selects a revision using a number."""
 
248
 
 
249
    help_txt = """Selects a revision using a number.
 
250
 
 
251
    Use an integer to specify a revision in the history of the branch.
 
252
    Optionally a branch can be specified. The 'revno:' prefix is optional.
 
253
    A negative number will count from the end of the branch (-1 is the
 
254
    last revision, -2 the previous one). If the negative number is larger
 
255
    than the branch's history, the first revision is returned.
 
256
    examples:
 
257
      revno:1                   -> return the first revision
 
258
      revno:3:/path/to/branch   -> return the 3rd revision of
 
259
                                   the branch '/path/to/branch'
 
260
      revno:-1                  -> The last revision in a branch.
 
261
      -2:http://other/branch    -> The second to last revision in the
 
262
                                   remote branch.
 
263
      -1000000                  -> Most likely the first revision, unless
 
264
                                   your history is very long.
 
265
    """
243
266
    prefix = 'revno:'
244
267
 
245
268
    def _match_on(self, branch, revs):
329
352
 
330
353
 
331
354
class RevisionSpec_revid(RevisionSpec):
 
355
    """Selects a revision using the revision id."""
 
356
 
 
357
    help_txt = """Selects a revision using the revision id.
 
358
 
 
359
    Supply a specific revision id, that can be used to specify any
 
360
    revision id in the ancestry of the branch. 
 
361
    Including merges, and pending merges.
 
362
    examples:
 
363
      revid:aaaa@bbbb-123456789 -> Select revision 'aaaa@bbbb-123456789'
 
364
    """    
332
365
    prefix = 'revid:'
333
366
 
334
367
    def _match_on(self, branch, revs):
342
375
 
343
376
 
344
377
class RevisionSpec_last(RevisionSpec):
 
378
    """Selects the nth revision from the end."""
 
379
 
 
380
    help_txt = """Selects the nth revision from the end.
 
381
 
 
382
    Supply a positive number to get the nth revision from the end.
 
383
    This is the same as supplying negative numbers to the 'revno:' spec.
 
384
    examples:
 
385
      last:1        -> return the last revision
 
386
      last:3        -> return the revision 2 before the end.
 
387
    """    
345
388
 
346
389
    prefix = 'last:'
347
390
 
370
413
 
371
414
 
372
415
class RevisionSpec_before(RevisionSpec):
 
416
    """Selects the parent of the revision specified."""
 
417
 
 
418
    help_txt = """Selects the parent of the revision specified.
 
419
 
 
420
    Supply any revision spec to return the parent of that revision.
 
421
    It is an error to request the parent of the null revision (before:0).
 
422
    This is mostly useful when inspecting revisions that are not in the
 
423
    revision history of a branch.
 
424
 
 
425
    examples:
 
426
      before:1913    -> Return the parent of revno 1913 (revno 1912)
 
427
      before:revid:aaaa@bbbb-1234567890  -> return the parent of revision
 
428
                                            aaaa@bbbb-1234567890
 
429
      bzr diff -r before:revid:aaaa..revid:aaaa
 
430
            -> Find the changes between revision 'aaaa' and its parent.
 
431
               (what changes did 'aaaa' introduce)
 
432
    """
373
433
 
374
434
    prefix = 'before:'
375
435
    
403
463
 
404
464
 
405
465
class RevisionSpec_tag(RevisionSpec):
 
466
    """To be implemented."""
 
467
 
 
468
    help_txt = """To be implemented."""
 
469
 
406
470
    prefix = 'tag:'
407
471
 
408
472
    def _match_on(self, branch, revs):
433
497
 
434
498
 
435
499
class RevisionSpec_date(RevisionSpec):
 
500
    """Selects a revision on the basis of a datestamp."""
 
501
 
 
502
    help_txt = """Selects a revision on the basis of a datestamp.
 
503
 
 
504
    Supply a datestamp to select the first revision that matches the date.
 
505
    Date can be 'yesterday', 'today', 'tomorrow' or a YYYY-MM-DD string.
 
506
    Matches the first entry after a given date (either at midnight or
 
507
    at a specified time).
 
508
 
 
509
    One way to display all the changes since yesterday would be:
 
510
        bzr log -r date:yesterday..-1
 
511
 
 
512
    examples:
 
513
      date:yesterday            -> select the first revision since yesterday
 
514
      date:2006-08-14,17:10:14  -> select the first revision after
 
515
                                   August 14th, 2006 at 5:10pm.
 
516
    """    
436
517
    prefix = 'date:'
437
518
    _date_re = re.compile(
438
519
            r'(?P<date>(?P<year>\d\d\d\d)-(?P<month>\d\d)-(?P<day>\d\d))?'
441
522
        )
442
523
 
443
524
    def _match_on(self, branch, revs):
444
 
        """
445
 
        Spec for date revisions:
 
525
        """Spec for date revisions:
446
526
          date:value
447
527
          value can be 'yesterday', 'today', 'tomorrow' or a YYYY-MM-DD string.
448
528
          matches the first entry after a given date (either at midnight or
449
529
          at a specified time).
450
 
 
451
 
          So the proper way of saying 'give me all entries for today' is:
452
 
              -r date:yesterday..date:today
453
530
        """
 
531
        #  XXX: This doesn't actually work
 
532
        #  So the proper way of saying 'give me all entries for today' is:
 
533
        #      -r date:yesterday..date:today
454
534
        today = datetime.datetime.fromordinal(datetime.date.today().toordinal())
455
535
        if self.spec.lower() == 'yesterday':
456
536
            dt = today - datetime.timedelta(days=1)
503
583
 
504
584
 
505
585
class RevisionSpec_ancestor(RevisionSpec):
 
586
    """Selects a common ancestor with a second branch."""
 
587
 
 
588
    help_txt = """Selects a common ancestor with a second branch.
 
589
 
 
590
    Supply the path to a branch to select the common ancestor.
 
591
 
 
592
    The common ancestor is the last revision that existed in both
 
593
    branches. Usually this is the branch point, but it could also be
 
594
    a revision that was merged.
 
595
 
 
596
    This is frequently used with 'diff' to return all of the changes
 
597
    that your branch introduces, while excluding the changes that you
 
598
    have not merged from the remote branch.
 
599
 
 
600
    examples:
 
601
      ancestor:/path/to/branch
 
602
      $ bzr diff -r ancestor:../../mainline/branch
 
603
    """
506
604
    prefix = 'ancestor:'
507
605
 
508
606
    def _match_on(self, branch, revs):
529
627
 
530
628
 
531
629
class RevisionSpec_branch(RevisionSpec):
532
 
    """A branch: revision specifier.
533
 
 
534
 
    This takes the path to a branch and returns its tip revision id.
 
630
    """Selects the last revision of a specified branch."""
 
631
 
 
632
    help_txt = """Selects the last revision of a specified branch.
 
633
 
 
634
    Supply the path to a branch to select its last revision.
 
635
 
 
636
    examples:
 
637
      branch:/path/to/branch
535
638
    """
536
639
    prefix = 'branch:'
537
640