From: Eric S. Raymond Date: Sat, 15 Nov 2014 12:48:22 +0000 (-0500) Subject: More pred() and succ() elimination. Regression test passes. X-Git-Tag: 0.9~27 X-Git-Url: http://thyrsus.com/gitweb/?a=commitdiff_plain;h=f8de8c9be69fa135236142406159668c4728be95;p=src.git More pred() and succ() elimination. Regression test passes. --- diff --git a/src b/src index cbacf0b..937b4aa 100755 --- a/src +++ b/src @@ -169,6 +169,8 @@ class HistoryEntry: return calendar.timegm(time.strptime(self.date, "%Y-%m-%dT%H:%M:%SZ")) except (TypeError, ValueError): croak("garbled date %s" % self.date) + def __str__(self): + return "<%s = %s>" % (self.revno, self.native) def registered(fn): "Is this a workfile for a registered history?" @@ -194,10 +196,13 @@ class History: self.by_revno_d[item.revno] = item self.by_native_d[item.native] = item for item in self.revlist: - self.parent = self.by_native_d.get(backend.pred(item.native)) - self.child = self.by_native_d.get(backend.succ(item.native)) - if self.parent and self.parent.child != self: - self.parent.branches.add(self) + item.parent = self.by_native_d.get(backend.pred(item.native)) + item.child = self.by_native_d.get(backend.succ(item.native)) + if item.parent and item.parent.child != item: + item.parent.branches.add(item) + #for item in self.revlist: + # print item + #print self.by_revno_d.keys() def __len__(self): return len(self.revlist) def current(self): @@ -692,19 +697,18 @@ class CommandContext: if self.end > len(metadata): croak("{0} has no {1} revision".format(metadata.name, self.end)) if not self.branchwise: - self.seq = range(self.start, self.end+1) + self.seq = [metadata.by_revno(i) for i in range(self.start, self.end+1)] else: - self.seq = [self.end] - s = self.end + self.seq = [] + e = metadata.by_revno(self.end) while True: - rev = metadata.revno_to_native(s) - nxt = backend.pred(rev) - s = metadata.native_to_revno(nxt) - if s is None: - croak("%s is not an ancestor of %s" % (self.start, self.end)) - self.seq.append(s) - if s == self.start: + self.seq.append(e) + if e.revno == self.start: break + if e.parent is None: + croak("%s is not an ancestor of %s" % (self.start, self.end)) + else: + e = e.parent if debug >= DEBUG_SEQUENCE: sys.stderr.write("selection: %s, branchwise is %s\n" % (self.seq, "on" if self.branchwise else "off")) for item in metadata.revlist: @@ -712,7 +716,7 @@ class CommandContext: # Because in the branchwise case the sequence is generated in reverse if backwards != self.branchwise: self.seq.reverse() - return [metadata.by_revno(s) for s in self.seq] + return self.seq class CommentContext: COMMENT_CUTLINE = """\