(Arne Babenhauserheide)
2011-11-23: Only write .statichgrepo print.css style.css and index.html when Only write .statichgrepo print.css style.css and index.html when their data changed.
diff --git a/.bugs/bugs b/.bugs/bugs
--- a/.bugs/bugs
+++ b/.bugs/bugs
@@ -4,7 +4,7 @@ Add a list of branches, heads and tags t
if b is used: a bugtracker: issue/<id>/<name> | owner:Arne Babenhauserheide <bab@draketo.de>, open:True, id:1d631d51ff06b3bdca50e21da3d6a00bcb801c85, time:1319147632.52
get mtimes from the repo instead of querying the FTP server. We know which files were changed. | owner:Arne Babenhauserheide <bab@draketo.de>, open:True, id:29210503551d0eafca67dda8d6fffbd40bf837dc, time:1319213074.57
FIX: revision 0 is omitted: change that :) | owner:Arne Babenhauserheide <bab@draketo.de>, open:False, id:29396f1753e45b5a37ffa0ce04d96c876d6b6722, time:1319209563.68
-only write .statichgrepo print.css style.css and index.html when their data changed \(or \-\-force\) → read them and compare the contents. | owner:Arne Babenhauserheide <bab@draketo.de>, open:True, id:4f02149269a60fca85aa040116b2789d98c906f2, time:1319212903.98
+only write .statichgrepo print.css style.css and index.html when their data changed \(or \-\-force\) → read them and compare the contents. | owner:Arne Babenhauserheide <bab@draketo.de>, open:False, id:4f02149269a60fca85aa040116b2789d98c906f2, time:1319212903.98
add proper caching of every ftp directory listing. | owner:Arne Babenhauserheide <bab@draketo.de>, open:False, id:750692931106d78ffc38c1ed63013c4dac4099dd, time:1319175393.07
fork-/clone-info for each entry in [paths] with its incoming data (if it has some): | owner:, open:True, id:8621575e4016752e8987c8b294dfa9166f77eff3, time:1319147671.39
More complex Readme parsing. | owner:Arne Babenhauserheide <bab@draketo.de>, open:True, id:94fbade896adbf6f696cfdb331021437dff3f30e, time:1319147671.39
diff --git a/site.py b/site.py
--- a/site.py
+++ b/site.py
@@ -66,6 +66,21 @@ templates = {
_indexregexp = re.compile("^\\.*index.html$")
+def samefilecontent(filepath1, filepath2):
+ """Check if the content of the two referenced files is equal."""
+ try:
+ with open(filepath1) as f1:
+ with open(filepath2) as f2:
+ return f1.read() == f2.read()
+ except OSError: return False
+
+def contentequals(filepath, content):
+ """Check if the files content is content."""
+ try:
+ with open(filepath) as f:
+ return f.read() == content
+ except OSError: return not content
+
def parsereadme(filepath):
"""Parse the readme file"""
with open(filepath) as r:
@@ -74,35 +89,38 @@ def parsereadme(filepath):
def writeoverview(ui, repo, target, name):
"""Create the overview page"""
- overview = open(join(target, "index.html"), "w")
- overview.write(templates["head"].replace("{reponame}", name).replace("{title}", name))
+ overview = ""
+ overview += templates["head"].replace("{reponame}", name).replace("{title}", name)
# add a short identifier from the first line of the readme, if it
# exists # TODO: Parse different types of readme files
readme = name
for f in os.listdir(repo.root):
if f.lower().startswith("readme"):
readme = parsereadme(f)
- overview.write( "\n".join(readme.splitlines()[:3]))
+ overview += "\n".join(readme.splitlines()[:3])
break
# now the links to the log and the files.
- overview.write("<p><a href='commits'>changelog</a> | <a href='src/" + repo["tip"].hex() + "/'>files</a></p>")
+ overview += "<p><a href='commits'>changelog</a> | <a href='src/" + repo["tip"].hex() + "/'>files</a></p>"
# now add the 5 most recent log entries
# divert all following ui output to a string, so we can just use standard functions
- overview.write("<h2>Changes (<a href='commits'>full changelog</a>)</h2>")
+ overview += "<h2>Changes (<a href='commits'>full changelog</a>)</h2>"
ui.pushbuffer()
t = cmdutil.changeset_templater(ui, repo, patch=False, diffopts=None, mapfile=None, buffered=False)
t.use_template("""<div style='float: right; padding-left: 0.5em'><em>({author|person})</em></div><strong> {date|shortdate}: <a href='commit/{node}.html'>{desc|strip|fill68|firstline}</a> <span style='font-size: xx-small'>{branches} {tags} {bookmarks}</span><p>{desc|escape}</p>""")
for c in range(1, min(len(repo.changelog), 5)):
ctx = repo.changectx(str(-c))
t.show(ctx)
- overview.write(ui.popbuffer())
+ overview += ui.popbuffer()
# add the full readme
- overview.write("<h2>"+_("Readme")+"</h2>")
- overview.write(readme)
+ overview += "<h2>"+_("Readme")+"</h2>"
+ overview += readme
# finish the overview
- overview.write(templates["foot"])
+ overview += templates["foot"]
+ if not contentequals(join(target, "index.html"), overview):
+ with open(join(target, "index.html"), "w") as f:
+ f.write(overview)
def writelog(ui, repo, target, name):
"""Write the full changelog, in steps of 100."""
@@ -258,21 +276,6 @@ def writesourcetree(ui, repo, target, na
f.write(createindex(target, ctx))
f.write(templates["foot"].replace("{reponame}", "<a href='../../'>"+name+"</a>"))
-def samefilecontent(filepath1, filepath2):
- """Check if the content of the two referenced files is equal."""
- try:
- with open(filepath1) as f1:
- with open(filepath2) as f2:
- return f1.read() == f2.read()
- except OSError: return False
-
-def contentequals(filepath, content):
- """Check if the files content is content."""
- try:
- with open(filepath) as f:
- return f.read() == content
- except OSError: return not content
-
def parsesite(ui, repo, target, **opts):
"""Create the static folder."""
idfile = join(target, _staticidentifier)