]> thyrsus.com Git - src.git/commitdiff
succ() and pred() - basic tools for branch navigation.
authorEric S. Raymond <esr@thyrsus.com>
Tue, 11 Nov 2014 13:16:21 +0000 (08:16 -0500)
committerEric S. Raymond <esr@thyrsus.com>
Tue, 11 Nov 2014 13:16:21 +0000 (08:16 -0500)
Regression test passes.

src

diff --git a/src b/src
index 3fd971f2d299fc4d3c6a1f442e650fac56b9e09b..a1ca616ccf9258baf72ed0522b2749ccebbfeb1b 100755 (executable)
--- a/src
+++ b/src
@@ -936,6 +936,31 @@ class RCS:
         return os.path.getsize(self.master(arg)) > 105
     def workfile(self, arg):
         return arg[:-2]
+    def pred(self, revno, metadata):
+        "Our predecessor on the branch (0-origin)."
+        n = [int(d) for d in rev.split(".")]
+        if n[-1] > 1:
+            n[-1] += 1
+            rev = ".".join(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
+        for (i, item) in enumerate(metadata.revlist):
+            if item.revision == rev:
+                return i
+        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(".")]
+        n[-1] += 1
+        rev = ".".join(n)
+        for (i, item) in enumerate(metadata.revlist):
+            if item.revision == rev:
+                return i
+        return None
     def add(self, arg):
         "Register a file"
         # Key choices here: -b suppresses all keyword expansion, -U sets