From 7794c42682e7e29942ee4f229b7538ed273c52fb Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Wed, 12 Nov 2014 09:34:17 -0500 Subject: [PATCH] Never set ctx.start directly. Use the select_tip() method instead. This is where we introduce the seq member, which we'll use to implement branchwise ranges. Regression test passes. --- src | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src b/src index 7d69436..edc0501 100755 --- 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, -- 2.43.0