From 77450279597142ab7fcf1e3c64e30cd122d0e529 Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Tue, 11 Nov 2014 10:46:29 -0500 Subject: [PATCH] Corrected versions of pred() and succ(). Regression test passses. --- src | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src b/src index a1ca616..eef9f2a 100755 --- 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" -- 2.43.0