(Arne Babenhauserheide)
2012-10-30: added the number of bugs to the overview page. No details yet. added the number of bugs to the overview page. No details yet.
diff --git a/staticsite.py b/staticsite.py
--- a/staticsite.py
+++ b/staticsite.py
@@ -65,7 +65,14 @@ templates = {
<h1>{forkname} <small>(fork of <a href="../../">{reponame}</a>, found at {forkuri})</small></h1>
""",
"foot": "</body></html>\n",
- "screenstyle": """ """,
+ "screenstyle": """
+openbugnumber {
+ color: #f00;
+}
+resolvedbugnumber {
+ color: #00f;
+}
+""",
"printstyle": """ """,
"manifesthead": """<h2>""" + _("Commit (click to see the diff)")+""": <a href='../../commit/{hex}.html'>{hex}</a></h2>
<p>{desc}</p><p>{user}</p>
@@ -95,6 +102,76 @@ def contentequals(filepath, content):
except IOError: return False # file does not exist. Empty != not existing.
# TODO: check: return True if content is None?
+def bisenabled():
+ """Check if the b extension is enabled to decide if we want to add
+ a bug listing."""
+ enabled = extensions.enabled()
+ if "b" in enabled:
+ return True
+
+def splitbugline(line):
+ """Split a b extension bug line into the ID and the description."""
+ try:
+ bugid = line.split("-")[0].strip()
+ except IndexError:
+ return "", line
+ description = "".join(line.split("-")[1:]).lstrip()
+ return bugid, description
+
+def getbugdetails(ui, bugid):
+ """Get the details for a bug."""
+ # first get the details
+ ui.pushbuffer()
+ req = dispatch.request(["b", "details", bugid], ui=ui)
+ dispatch.dispatch(req)
+ return ui.popbuffer()
+
+def getbugfullid(details, bugid):
+ """Get the real ID of a bug from its detailed info. If it’s not available, just give the short bugid"""
+ try:
+ idline = [i for i in details.splitlines() if i.startswith("ID: ")][0]
+ except IndexError: # no id line
+ return bugid
+ realid = idline[4:].strip()
+ return realid
+
+class BBug(object):
+ """A b-extension bug."""
+ def __init__(self, bugid, description, state, details=""):
+ self.bugid, self.description, self.state, self.details = bugid, description, state, details
+
+def getbuginfo(ui, bugline):
+ """Get information about a bug from its bugline."""
+ bugid, description = splitbugline(bugline)
+ details = getbugdetails(ui, bugid)
+ bugid = getbugfullid(details, bugid)
+ return bugid, description, details
+
+def getbugs(ui, repo):
+ """Get all bugs."""
+ if not bisenabled():
+ return [], []
+ # run the b command to get all open bugs
+ ui.pushbuffer()
+ req = dispatch.request(["b"], ui=ui, repo=repo)
+ dispatch.dispatch(req)
+ openbuglines = [line for line in ui.popbuffer().splitlines() if "-" in line]
+ # similarly get all resolved bugs
+ ui.pushbuffer()
+ req = dispatch.request(["b", "list", "-r"], ui=ui, repo=repo)
+ dispatch.dispatch(req)
+ resolvedbuglines = [line for line in ui.popbuffer().splitlines() if "-" in line]
+ # now turn them into a list of bugs
+ openbugs = []
+ for bugline in openbuglines:
+ bugid, description, details = getbuginfo(ui, bugline)
+ openbugs.append(BBug(bugid, description, "open", details))
+ resolvedbugs = []
+ for bugline in resolvedbuglines:
+ bugid, description, details = getbuginfo(ui, bugline)
+ resolvedbugs.append(BBug(bugid, description, "resolved", details))
+ return openbugs, resolvedbugs
+
def parsereadme(filepath, truncated=False):
"""Parse the readme file"""
with open(filepath) as r:
@@ -131,7 +208,17 @@ def writeoverview(ui, repo, target, name
overview += "</div>"
break
# now the links to the log and the files.
- overview += "\n<p id='nav'><a href='commits'>changelog</a> | <a href='src/" + repo["tip"].hex() + "/'>files</a>"
+ overview += "\n<p id='nav'><a href='commits'>" + _("changelog") + "</a> | <a href='src/" + repo["tip"].hex() + "/'>" + _("files") + "</a>"
+ # and the bugs
+ openbugs, resolvedbugs = getbugs(ui, repo)
+ if openbugs or resolvedbugs:
+ overview += " | " + _("bugs: ")
+ if openbugs:
+ overview += "<small><span class=\"openbugnumber\">" + str(len(openbugs)) + "!</span>"
+ else:
+ overview += "<span class=\"openbugnumberzero\">0</span>"
+ overview += "<span class=\"resolvedbugnumber\">" + str(len(resolvedbugs)) + "√</span></small>"
+
# and the forks
forks = getforkinfo(ui, target)
if forks:
@@ -480,7 +567,10 @@ def rawpath(target, ctx, filename):
def ctxdiffstat(ui, repo, ctx):
"""Get the diffstat of a change context."""
- command = "log -r " + ctx.hex() + " --stat --color=never"
+ if "color" in extensions.enabled():
+ command = "log -r " + ctx.hex() + " --stat --color=never"
+ else:
+ command = "log -r " + ctx.hex() + " --stat"
req = dispatch.request(command.split(), ui=ui, repo=repo)
ui.pushbuffer()
dispatch.dispatch(req)