From: Eric S. Raymond Date: Wed, 12 Nov 2014 18:57:49 +0000 (-0500) Subject: Handle log and list more elegantly. X-Git-Tag: 0.6~22 X-Git-Url: http://thyrsus.com/gitweb/?a=commitdiff_plain;h=33e2231e22a759ac2543a844bfcfbabdf89a54d8;p=src.git Handle log and list more elegantly. --- diff --git a/src b/src index 289bd65..5aad04a 100755 --- 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."