def master(arg):
return os.path.join(repodir, arg + ",v")
-class RCSLog:
+class History:
"Encapsulate a revision list and some methods on it"
def __init__(self, name):
self.name = name
if end > len(self):
croak("{0} has no {1} revision".format(self.name, end))
return range(start, end+1)
+ def isbranch(self, symbol):
+ "Is this a branch symbol?"
+ return ".0." in symbol
def help_method(*args):
"Summarize src commands, or (with argument) show help for a single command."
elif not os.path.exists(master(arg)):
croak("%s is not registered." % arg)
else:
- metadata = RCSLog(arg)
+ metadata = History(arg)
if not comment:
editor = os.getenv("EDITOR") or "emacsclient"
commentfile = "/tmp/src%dtmp" % os.getpid()
width = screenwidth()
for arg in args:
sys.stdout.write("= %s %s\n" % (arg, ((width - len(arg) - 5) * "=")))
- master = RCSLog(arg)
+ master = History(arg)
revspec = master.resolve(revspec)
for item in master:
if not revspec or item.revno in revspec:
width = screenwidth()
for arg in args:
sys.stdout.write("= %s %s\n" % (arg, ((width - len(arg) - 5) * "=")))
- master = RCSLog(arg)
+ master = History(arg)
revspec = master.resolve(revspec)
for item in master:
if not revspec or item.revno in revspec:
if revspec and revspec[0] != revspec[1]:
croak("checkout needs an empty or singleton revision spec")
for arg in args:
- master = RCSLog(arg)
+ master = History(arg)
revspec = master.resolve(revspec)
if revspec is None:
revspec = [len(master)]
"Dump revision content to standard output."
(revspec, args) = preamble("cat", args)
for arg in args:
- master = RCSLog(arg)
+ master = History(arg)
revspec = master.resolve(revspec)
if revspec is None:
revspec = [master.tip().revno]
for arg in args:
diffspec = ""
if revspec is not None:
- master = RCSLog(arg)
+ master = History(arg)
revspec = master.resolve(revspec)
diffspec += "-r" + master.revno_to_rcs(revspec[0])
if len(revspec) > 1:
croak("can't accept a revision-spec when deleting tags.")
width = screenwidth()
for arg in args:
- master = RCSLog(arg)
+ master = History(arg)
sys.stdout.write("= %s %s\n" % (arg, ((width - len(arg) - 5) * "=")))
for (key, value) in master.symbols.items():
- sys.stdout.write("%4d %s\n" % (master.rcs_to_revno(value),key))
+ if not master.isbranch(arg):
+ sys.stdout.write("%4d\t%s\n" % (master.rcs_to_revno(value),key))
def delete_tags(args):
if not args:
if revspec is not None:
croak("can't accept a revision-spec when deleting tags.")
for arg in args:
- master = RCSLog(arg)
+ master = History(arg)
if tagname not in master.symbols:
croak("%s is not a tag in %s" % (tagname, arg))
else:
tagname = args.pop(0)
(revspec, args) = preamble("tag", args)
for arg in args:
- master = RCSLog(arg)
+ master = History(arg)
revspec = master.resolve(revspec)
if revspec is None:
revision = master.tip().revision
return
set_tags(args)
+def branch_method(*args):
+ "Inspect, create, and delete branch."
+ if not os.path.exists(repodir):
+ croak("repository subdirectory %s does not exist" % repodir)
+ args = list(args)
+ croak("branches are not yet implemented.")
+
def fast_export_method(*args):
"Dump revision content to standard output."
(revspec, args) = preamble("cat", args)
perms = "100755"
else:
perms = "100644"
- metadata = RCSLog(arg)
+ metadata = History(arg)
revspec = metadata.resolve(revspec)
if revspec is None:
revspec = 1
"cat": cat_method,
"diff": diff_method,
"tag": tag_method,
+ "branch": branch_method,
"fast-export": fast_export_method,
"moveto": moveto_method,
"copyto": copyto_method,