From 24d3a5881e01fa4e028aa1289b6f3a7ac5c80179 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Fri, 13 Oct 2017 11:15:51 +0200 Subject: [PATCH] Don't crash when .git/refs/heads/master doesn't exist This happens after a git gc which moves this into packed-refs. So when this happens, look in packed-refs. If packed-refs also cannot be found, just return a made up value instead of crashing. --- pgweb/util/contexts.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/pgweb/util/contexts.py b/pgweb/util/contexts.py index 680b683c..045cea1d 100644 --- a/pgweb/util/contexts.py +++ b/pgweb/util/contexts.py @@ -104,8 +104,21 @@ class NavContext(RequestContext): def _get_gitrev(): # Return the current git revision, that is used for # cache-busting URLs. - with open('.git/refs/heads/master') as f: - return f.readline()[:8] + try: + with open('.git/refs/heads/master') as f: + return f.readline()[:8] + except IOError: + # A "git gc" will remove the ref and replace it with a packed-refs. + try: + with open('.git/packed-refs') as f: + for l in f.readlines(): + if l.endswith("refs/heads/master\n"): + return l[:8] + # Not found in packed-refs. Meh, just make one up. + return 'ffffffff' + except IOError: + # If packed-refs also can't be read, just give up + return 'eeeeeeee' # Template context processor to add information about the root link and # the current git revision. git revision is returned as a lazy object so