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
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] == "--":
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]
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):
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."