Merge branch 'dc/gitweb'
[gitweb.git] / setup.c
diff --git a/setup.c b/setup.c
index df006d9c4a674b224f36318742ef01b339d797b3..2c7b5cb200414a0fa3f2727c68ea60e51b39c261 100644 (file)
--- a/setup.c
+++ b/setup.c
@@ -59,7 +59,7 @@ const char *prefix_path(const char *prefix, int len, const char *path)
 const char *prefix_filename(const char *pfx, int pfx_len, const char *arg)
 {
        static char path[PATH_MAX];
-       if (!pfx || !*pfx || arg[0] == '/')
+       if (!pfx || !*pfx || is_absolute_path(arg))
                return arg;
        memcpy(path, pfx, pfx_len);
        strcpy(path + pfx_len, arg);
@@ -206,13 +206,20 @@ static const char *set_work_tree(const char *dir)
        return NULL;
 }
 
-void setup_work_tree(void) {
-       const char *work_tree = get_git_work_tree();
-       const char *git_dir = get_git_dir();
+void setup_work_tree(void)
+{
+       const char *work_tree, *git_dir;
+       static int initialized = 0;
+
+       if (initialized)
+               return;
+       work_tree = get_git_work_tree();
+       git_dir = get_git_dir();
        if (!is_absolute_path(git_dir))
                set_git_dir(make_absolute_path(git_dir));
        if (!work_tree || chdir(work_tree))
                die("This operation must be run in a work tree");
+       initialized = 1;
 }
 
 /*