]> thyrsus.com Git - src.git/commitdiff
Never set ctx.start directly. Use the select_tip() method instead.
authorEric S. Raymond <esr@thyrsus.com>
Wed, 12 Nov 2014 14:34:17 +0000 (09:34 -0500)
committerEric S. Raymond <esr@thyrsus.com>
Wed, 12 Nov 2014 14:34:17 +0000 (09:34 -0500)
This is where we introduce the seq member, which we'll use to
implement branchwise ranges.

Regression test passes.

src

diff --git a/src b/src
index 7d694360518015ebca8f79d2120fb33589216ca6..edc05011a4751ad0f83693ef302c0d36384877d9 100755 (executable)
--- a/src
+++ b/src
@@ -347,6 +347,7 @@ class CommandContext:
         if not os.path.exists(repodir):
             croak("repository subdirectory %s does not exist" % repodir)
         self.start = self.end = None
+        self.seq = None
         if type(args) == type(()):
             args = list(args)
         self.args = list(args)
@@ -405,16 +406,21 @@ class CommandContext:
         "Set the range to all revisions."
         self.start = 1
         self.end = len(metadata)
+        self.seq = range(self.start, self.end+1)
     def select_tip(self, metadata):
         "Set the range to the tip revision."
         self.start = len(metadata)
         self.end = None
+        self.seq = [self.start]
     def __contains__(self, i):
         "Does the spec contain the given revno?"
-        return i >= self.start and (self.end is None or i <= self.end)
+        if self.seq is None:
+            croak("revision spec hasn't been resolved")
+        return i in self.seq
     def resolve(self, metadata):
         "Resolve a revision spec that may contain tags into revnos."
         if self.is_empty():
+            self.seq = []
             return self
         if type(self.start) == type(""):
             if self.start in metadata.symbols:
@@ -428,6 +434,7 @@ class CommandContext:
                 croak("can't resolve symbol {0} in {1}".format(self.end, metadata.name))
         if self.end > len(metadata):
             croak("{0} has no {1} revision".format(metadata.name, self.end))
+        self.seq = range(self.start, self.end+1)
 
 class CommentContext:
     def __init__(self, legend, args):
@@ -565,7 +572,7 @@ def checkout_method(*args):
         metadata = History(arg)
         ctx.resolve(metadata)
         if ctx.is_empty():
-            ctx.start = metadata.tip().revno
+            ctx.select_tip(metadata)
             revision = ""
         elif ctx.start > len(metadata):
             croak("%s has only %d revisions" % (arg, len(metadata)))
@@ -747,7 +754,7 @@ def tag_method(*args):
         if name in metadata.symbols:
             croak("tag %s already set.")
         if ctx.is_empty():
-            ctx.start = metadata.tip().revno
+            ctx.select_tip(metadata)
         return metadata.revno_to_native(ctx.start)
     tag_helper(args, "tag",
                tag_set_validate,