]> thyrsus.com Git - src.git/commitdiff
Handle log and list more elegantly.
authorEric S. Raymond <esr@thyrsus.com>
Wed, 12 Nov 2014 18:57:49 +0000 (13:57 -0500)
committerEric S. Raymond <esr@thyrsus.com>
Wed, 12 Nov 2014 18:57:49 +0000 (13:57 -0500)
src

diff --git a/src b/src
index 289bd65992173a105ce3f976749358c9f3154869..5aad04a895c6324280db0ce4e1929b5076a7b4ab 100755 (executable)
--- a/src
+++ b/src
@@ -346,7 +346,9 @@ The omission of 'src remove' is a deliberate speed bump.
 
 class CommandContext:
     "Consume a revision specification or range from an argument list"
-    def __init__(self, cmd, args, require_empty=False):
+    def __init__(self, cmd, args,
+                 require_empty=False,
+                 default_to=None):
         if not os.path.exists(repodir):
             croak("repository subdirectory %s does not exist" % repodir)
         self.start = self.end = None
@@ -355,6 +357,7 @@ class CommandContext:
         if type(args) == type(()):
             args = list(args)
         self.args = list(args)
+        self.default_to = default_to
         revspec = None
         if self.args:
             if self.args[0] == "--":
@@ -425,8 +428,13 @@ class CommandContext:
     def resolve(self, metadata):
         "Resolve a revision spec that may contain tags into revnos."
         if self.is_empty():
-            self.seq = []
-            return self
+            if self.default_to == "branch":
+                self.seq = metadata.current_branch(reversed=False)
+            elif self.default_to == "branch_reversed":
+                self.seq = metadata.current_branch(reversed=True)
+            else:
+                self.seq = []
+            return self.seq
         if type(self.start) == type(""):
             if self.start in metadata.symbols:
                 self.start = metadata.symbols[self.start]
@@ -455,6 +463,7 @@ class CommandContext:
             sys.stderr.write("selection: %s, branchwise is %s\n" % (self.seq, "on" if self.branchwise else "off"))
             for item in metadata.revlist:
                 sys.stdout.write("%s\t%s\t%s\n" % (item.revno, item.date, item.revision))
+        return [metadata.by_revno(s) for s in self.seq]
 
 class CommentContext:
     def __init__(self, legend, args):
@@ -553,35 +562,29 @@ def amend_method(*args):
 
 def list_method(*args):
     "Generate a summary listing of commits, one line per commit."
-    ctx = CommandContext("list", args)
+    ctx = CommandContext("list", args, default_to="branch_reversed")
     width = screenwidth()
     for arg in ctx.args:
         sys.stdout.write("= %s %s\n" % (arg, ((width - len(arg) - 5) * "=")))
-        metadata = History(arg)
-        ctx.resolve(metadata)
-        for item in metadata.current_branch(reversed=True):
-            if ctx.is_empty() or item.revno in ctx:
-                # Must allow enough room for revno and date
-                summary = item.log.strip()[:width - 34]
-                if item.selected():
-                    mark = "*"
-                else:
-                    mark = "-"
-                sys.stdout.write("%-4d  %s %s %s\n" \
-                                 % (item.revno, mark, item.date, summary))
+        for item in ctx.resolve(History(arg)):
+            # Must allow enough room for revno and date
+            summary = item.log.strip()[:width - 34]
+            if item.selected():
+                mark = "*"
+            else:
+                mark = "-"
+            sys.stdout.write("%-4d  %s %s %s\n" \
+                             % (item.revno, mark, item.date, summary))
 
 def log_method(*args):
     "Report revision logs"
-    ctx = CommandContext("log", args)
+    ctx = CommandContext("log", args, default_to="branch_reversed")
     width = screenwidth()
     for arg in ctx.args:
         sys.stdout.write("= %s %s\n" % (arg, ((width - len(arg) - 5) * "=")))
-        metadata = History(arg)
-        ctx.resolve(metadata)
-        for item in metadata.current_branch(reversed=True):
-            if ctx.is_empty() or item.revno in ctx:
-                sys.stdout.write("%-4d | %s\n%s" % (item.revno, item.date, item.log))
-                sys.stdout.write(("-" * (width - 1)) + "\n")
+        for item in ctx.resolve(History(arg)):
+            sys.stdout.write("%-4d | %s\n%s" % (item.revno,item.date,item.log))
+            sys.stdout.write(("-" * (width - 1)) + "\n")
 
 def checkout_method(*args):
     "Refresh the working copy from the history file."