git » git-arr » commit c72278c

Allow calling the executable from any directory

author Alberto Bertogli
2013-03-10 00:32:15 UTC
committer Alberto Bertogli
2013-03-10 00:55:56 UTC
parent 18e8599bfa9dfcfef219ead9b655154fb729c1d7

Allow calling the executable from any directory

When the tool is invoked like /path/to/git-arr, it currently fails because
both the serving of static files and bottle templates assume they're on the
current working directory.

This patch fixes that by computing the directories based on the executable
location.

Note this is assuming the static directory and the templates live next to the
executable, which will not always be the case, and eventually it should be
configurable; but it's ok for the time being.

Signed-off-by: Alberto Bertogli <albertito@blitiri.com.ar>

git-arr +18 -5

diff --git a/git-arr b/git-arr
index 69d10cb..173a6b2 100755
--- a/git-arr
+++ b/git-arr
@@ -5,6 +5,7 @@ git-arr: A git web html generator.
 
 from __future__ import print_function
 
+import sys
 import os
 import math
 import optparse
@@ -20,6 +21,18 @@ import git
 import utils
 
 
+# Tell bottle where to find the views.
+# Note this assumes they live next to the executable, and that is not a good
+# assumption; but it's good enough for now.
+bottle.TEMPLATE_PATH.insert(
+        0, os.path.abspath(os.path.dirname(sys.argv[0])) + '/views/')
+
+# The path to our static files.
+# Note this assumes they live next to the executable, and that is not a good
+# assumption; but it's good enough for now.
+static_path = os.path.abspath(os.path.dirname(sys.argv[0])) + '/static/'
+
+
 # The list of repositories is a global variable for convenience. It will be
 # populated by load_config().
 repos = {}
@@ -240,7 +253,7 @@ def blob(repo, bname, fname, dirname = ''):
 
 @bottle.route('/static/<path:path>')
 def static(path):
-    return bottle.static_file(path, root = './static/')
+    return bottle.static_file(path, root = static_path)
 
 
 #
@@ -328,10 +341,10 @@ def generate(output, skip_index = False):
 
     # We can't call static() because it relies on HTTP headers.
     read_f = lambda f: open(f).read()
-    write_to('static/git-arr.css', read_f, ['static/git-arr.css'],
-            os.stat('static/git-arr.css').st_mtime)
-    write_to('static/syntax.css', read_f, ['static/syntax.css'],
-            os.stat('static/syntax.css').st_mtime)
+    write_to('static/git-arr.css', read_f, [static_path + '/git-arr.css'],
+            os.stat(static_path + '/git-arr.css').st_mtime)
+    write_to('static/syntax.css', read_f, [static_path + '/syntax.css'],
+            os.stat(static_path + '/syntax.css').st_mtime)
 
     for r in sorted(repos.values(), key = lambda r: r.name):
         write_to('r/%s/index.html' % r.name, summary(r))