]> thyrsus.com Git - src.git/commitdiff
Simplest case of diff works.
authorEric S. Raymond <esr@thyrsus.com>
Fri, 7 Nov 2014 00:51:40 +0000 (19:51 -0500)
committerEric S. Raymond <esr@thyrsus.com>
Fri, 7 Nov 2014 00:51:40 +0000 (19:51 -0500)
src

diff --git a/src b/src
index 84eefa6586dcf32ca24821ad45bc2835f9d4c3fb..04bd99a16ffb784f2c2218af56193216d8ee2214 100755 (executable)
--- a/src
+++ b/src
@@ -258,18 +258,19 @@ def checkout_method(*args):
     for arg in args:
         revlist = log_capture(arg)
         if revspec is None:
+            revspec = [len(revlist)]
             revision = ""
         elif len(revspec) != 1:
             croak("checkout cannot take a range")
         elif revspec[0] > len(revlist):
-            croak("%s has only %d revisions" % len(revlist))
+            croak("%s has only %d revisions" % (arg, len(revlist)))
         else:
             revision = revlist[len(revlist) - revspec[0]].revision
-        do_or_die("mv .src/{0},v . && rm -f {0} && co -u{1} {0} ; mv {0},v .src".format(arg, revision))
+        do_or_die("mv .src/{0},v . && rm -f {0} && rcs -q -u {0},v && co -q -l{1} {0} ; mv {0},v .src".format(arg, revision))
         announce("%s <- %d" % (arg, revspec[0])) 
 
 def cat_method(*args):
-    "Dump revision content to srandard output."
+    "Dump revision content to standard output."
     (revspec, args) = preamble("cat", args)
     for arg in args:
         revlist = log_capture(arg)
@@ -281,6 +282,20 @@ def cat_method(*args):
                 do_or_die("co -q -p -r{1} {0}".format(arg, item.revision), loud=True)
         do_or_die("mv {0},v .src".format(arg))
 
+def diff_method(*args):
+    "Dump diffs between revisions to standard output."
+    (revspec, args) = preamble("diff", args)
+    diffopts = "-u"
+    while args and args[0].startswith("-"):
+        diffopts += " " + args.pop(0)
+    for arg in args:
+        revlist = log_capture(arg)
+        do_or_die("mv .src/{0},v .".format(arg))
+        if revspec is None:
+            # The || : suppresses the error return from diff(1)
+            do_or_die("rcsdiff -q {0} {1} || :".format(diffopts, arg), loud=True)
+        do_or_die("mv {0},v .src".format(arg))
+
 dispatch = {
     "help":     help_method,
     "init":     init_method,
@@ -290,6 +305,7 @@ dispatch = {
     "log":      log_method,
     "checkout": checkout_method,
     "cat":      cat_method,
+    "diff":     diff_method,
 }
 
 if __name__ == "__main__":