]> thyrsus.com Git - src.git/commitdiff
More pred() and succ() elimination. Regression test passes.
authorEric S. Raymond <esr@thyrsus.com>
Sat, 15 Nov 2014 12:48:22 +0000 (07:48 -0500)
committerEric S. Raymond <esr@thyrsus.com>
Sat, 15 Nov 2014 12:48:22 +0000 (07:48 -0500)
src

diff --git a/src b/src
index cbacf0bc96b29fb58c2d7d957e80294d7511507e..937b4aaf8dcfca695e70959785e156973da6402c 100755 (executable)
--- 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 = """\