]> thyrsus.com Git - src.git/commitdiff
Corrected versions of pred() and succ(). Regression test passses.
authorEric S. Raymond <esr@thyrsus.com>
Tue, 11 Nov 2014 15:46:29 +0000 (10:46 -0500)
committerEric S. Raymond <esr@thyrsus.com>
Tue, 11 Nov 2014 15:46:29 +0000 (10:46 -0500)
src

diff --git a/src b/src
index a1ca616ccf9258baf72ed0522b2749ccebbfeb1b..eef9f2a19b0a2337aabda0bc1d09fba651abbb20 100755 (executable)
--- a/src
+++ b/src
@@ -936,30 +936,34 @@ class RCS:
         return os.path.getsize(self.master(arg)) > 105
     def workfile(self, arg):
         return arg[:-2]
+    def splitrev(self, rev):
+        "RCS revision to numeric tuple."
+        return [int(d) for d in rev.split(".")]
+    def joinrev(self, rev):
+        "Numeric tuple to RC revision."
+        return ".".join([str(d) for d in rev])
     def pred(self, revno, metadata):
-        "Our predecessor on the branch (0-origin)."
-        n = [int(d) for d in rev.split(".")]
+        "Our predecessor on the branch (1-origin)."
+        rev = metadata.by_revno(revno).revision
+        n = self.splitrev(rev)
         if n[-1] > 1:
-            n[-1] += 1
-            rev = ".".join(n)
+            n[-1] -= 1
+            rev = self.joinrev(n)
         else:
-            rev = ".".join(n[:-2])
-        # Prevent O(n**2) blowup when enumerating these
-        if revno >= 2 and metadata[revno - 2].revision == rev:
-            return revno - 1
+            rev = self.joinrev(n[:-2])
         for (i, item) in enumerate(metadata.revlist):
             if item.revision == rev:
-                return i
+                return metadata[i].revno
         return None
     def succ(self, revno, metadata):
-        "Our successor on the current branch (0-origin)."
-        rev = metatada[revno - 1].revision
-        n = [int(d) for d in rev.split(".")]
+        "Our successor on the current branch (1-origin)."
+        rev = metadata.by_revno(revno).revision
+        n = self.splitrev(rev)
         n[-1] += 1
-        rev = ".".join(n)
+        rev = self.joinrev(n)
         for (i, item) in enumerate(metadata.revlist):
             if item.revision == rev:
-                return i
+                return metadata[i].revno
         return None
     def add(self, arg):
         "Register a file"