hg site extension
 
(Arne Babenhauserheide)
2013-05-03: added tons of debug output trying to fix a bug which proved to be

added tons of debug output trying to fix a bug which proved to be caused by corruption of my local repo (likely disk-errors…).

diff --git a/staticsite.py b/staticsite.py
--- a/staticsite.py
+++ b/staticsite.py
@@ -202,6 +202,7 @@ def overviewlogstring(ui, repo, revs, te
 
 def writeoverview(ui, repo, target, name):
     """Create the overview page"""
+    ui.debug("[staticsite] writeoverview: header\n")
     overview = ""
     # get the title
     overview += templates["head"].replace("{reponame}", name).replace("{title}", name)
@@ -227,20 +228,26 @@ def writeoverview(ui, repo, target, name
         else:
             overview += " <span class=\"bugnumber openbugnumberzero\">0</span>"
         overview += "<span class=\"bugnumber resolvedbugnumber\"><a href=\"bugs#resolved\">" + str(len(resolvedbugs)) + "√</a></span>)</span>"
-        
+    
     # and the forks
+    ui.debug("[staticsite] writeoverview: header: forks\n")
     forks = getforkinfo(ui, target)
     if forks:
         overview += " | " + _("forks: ")
         for forkname, forkuri in forks.items():
+            ui.debug("[staticsite] writeoverview: fork: " + forkname + ": " + forkuri + "\n")
+            ui.debug("[staticsite] writeoverview: forks: getforkdir\n")
             overview += "<a href='" + getforkdir(target, forkname) + "'>" + forkname + "</a> "
+            ui.debug("[staticsite] writeoverview: forks: getincoming\n")
             incoming, fn, localother = getincoming(ui, repo, otheruri=forkuri, othername=forkname)
             overview += "<small>(" + str(len(incoming))
+            ui.debug("[staticsite] writeoverview: forks: getoutgoing\n")
             outgoing, fn, localother = getoutgoing(ui, repo, otheruri=forkuri, othername=forkname)
             overview += "<small>↓↑</small>" + str(len(outgoing)) + ")</small> "
             
     overview += "</p>"
     
+    ui.debug("[staticsite] writeoverview: shortlog\n")
     # now add the 5 most recent log entries
     # divert all following ui output to a string, so we can just use standard functions
     overview += "\n<div id='shortlog'><h2>Changes (<a href='commits'>full changelog</a>)</h2>\n"
@@ -254,6 +261,7 @@ def writeoverview(ui, repo, target, name
     overview += "</div>"
     
     # Add branch, bookmark and tag information, if they exist.
+    ui.debug("[staticsite] writeoverview: branches, tags and bookmarks\n")
     branches = []
     for branch, heads in repo.branchmap().items(): 
         if branch and branch != "default": # not default
@@ -302,11 +310,13 @@ def writeoverview(ui, repo, target, name
                 "XXXXX", "{date|shortdate}"))
         overview += "</div>"
     # add the full readme
+    ui.debug("[staticsite] writeoverview: readme\n")
     overview += "<div id='readme'><h2>"+_("Readme")+"</h2>\n"
     overview += readme
     overview += "</div>"
     
     # finish the overview
+    ui.debug("[staticsite] writeoverview: footer\n")
     overview += templates["foot"]
     indexfile = os.path.join(target, "index.html")
     if not contentequals(indexfile, overview): 
@@ -423,6 +433,7 @@ def getoutgoing(ui, repo, otheruri, othe
         pass
     # cannot do that for ftp or freenet insertion uris (freenet
     # separates insertion and retrieval by private/public key)
+    ui.debug("[staticsite] getoutgoing: checkkeys\n")
     isftpuri = otheruri.startswith("ftp://")
     isfreenetpriv = "AQECAAE/" in otheruri
     if isftpuri or isfreenetpriv:
@@ -430,30 +441,45 @@ def getoutgoing(ui, repo, otheruri, othe
         return chlist, cleanupfn, other
     
     if not other: 
+        ui.debug("[staticsite] getoutgoing: findpeer\n")
         other = hg.peer(repo, {}, otheruri)
         
     def outgoingchanges(repo, other):
         from mercurial import discovery
         fco = discovery.findcommonoutgoing
         og = fco(repo, other, force=True)
+        # print dir(og), og.missingheads, og.missing
+        ui.debug("[staticsite] getoutgoing: outgoingchanges: og.missing\n")
         try:
             return og.missing
         except AttributeError: # old client
             common, outheads = og
             o = repo.changelog.findmissing(common=common, heads=outheads)
             return o
-            
+        except Exception as e:
+            ui.warn("Cannot parse parts of your local history. Likely your local repository is broken. You might be able to fix it by getting a fresh clone and pulling from your current repo. The Error was: " + str(e) + "\n")
+    
     other.ui.pushbuffer() # ignore ui events
     
+    ui.debug("[staticsite] getoutgoing: outgoingchanges\n")
     try:
         chlist = outgoingchanges(repo, other)
     except (AttributeError, util.Abort):
         other.ui.popbuffer()
+        ui.debug("[staticsite] getoutgoing: local other\n")
         other = getlocalother(repo, ui, otheruri, othername)
         other.ui.pushbuffer()
-        chlist = outgoingchanges(repo, other)
+        ui.debug("[staticsite] getoutgoing: outgoingchanges, local\n")
+        try:
+            chlist = outgoingchanges(repo, other)
+        except Exception as e: # no changes
+            ui.debug("[staticsite] getoutgoing: outgoingchanges, errer: " + str(e) + "\n")
+            raise
+            chlist = []
         
+    ui.debug("[staticsite] getoutgoing: popbuffer\n")
     other.ui.popbuffer()
+    ui.debug("[staticsite] getoutgoing: done\n")
     return chlist, cleanupfn, other
 
 def getforkinfo(ui, target):
@@ -782,22 +808,28 @@ def parsesite(ui, repo, target, **opts):
         highlightingfile = os.path.join(target, pretty)
         if not os.path.isfile(highlightingfile) or not samefilecontent(highlightingsrc, highlightingfile):
             shutil.copyfile(highlightingsrc, highlightingfile)
-            
+    
+    ui.debug("[staticsite] writeoverview\n")
     # then the overview
     writeoverview(ui, repo, target, name)
     
+    ui.debug("[staticsite] writelog\n")
     # and the log
     writelog(ui, repo, target, name)
     
+    ui.debug("[staticsite] writecommits\n")
     # and all commit files
     writecommits(ui, repo, target, name, force=opts["force"])
     
+    ui.debug("[staticsite] writesourcetree\n")
     # and all file data
     writesourcetree(ui, repo, target, name, force=opts["force"])
     
+    ui.debug("[staticsite] writeforks\n")
     # and all forks
     writeforks(ui, repo, target, name)
     
+    ui.debug("[staticsite] writebugs\n")
     # and all bugs
     writebugs(ui, repo, target, name)