]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'cb/setup'
authorJunio C Hamano <gitster@pobox.com>
Thu, 10 Feb 2011 00:41:16 +0000 (16:41 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 10 Feb 2011 00:41:16 +0000 (16:41 -0800)
* cb/setup:
  setup: translate symlinks in filename when using absolute paths

1  2 
setup.c

diff --combined setup.c
index dadc66659a4037b614b215b7f812c4df8969562b,8031f99e978a27d394b04c998623388d2ab762b6..021d0133ae1d6cf7f3a6a8284cb5b6e9a42dbe0d
+++ b/setup.c
@@@ -4,13 -4,16 +4,16 @@@
  static int inside_git_dir = -1;
  static int inside_work_tree = -1;
  
 -const char *prefix_path(const char *prefix, int len, const char *path)
 +char *prefix_path(const char *prefix, int len, const char *path)
  {
        const char *orig = path;
-       char *sanitized = xmalloc(len + strlen(path) + 1);
-       if (is_absolute_path(orig))
-               strcpy(sanitized, path);
-       else {
+       char *sanitized;
+       if (is_absolute_path(orig)) {
+               const char *temp = make_absolute_path(path);
+               sanitized = xmalloc(len + strlen(temp) + 1);
+               strcpy(sanitized, temp);
+       } else {
+               sanitized = xmalloc(len + strlen(path) + 1);
                if (len)
                        memcpy(sanitized, prefix, len);
                strcpy(sanitized + len, path);
@@@ -46,7 -49,7 +49,7 @@@ const char *prefix_filename(const char 
  {
        static char path[PATH_MAX];
  #ifndef WIN32
 -      if (!pfx || !*pfx || is_absolute_path(arg))
 +      if (!pfx_len || is_absolute_path(arg))
                return arg;
        memcpy(path, pfx, pfx_len);
        strcpy(path + pfx_len, arg);
@@@ -55,7 -58,7 +58,7 @@@
        /* don't add prefix to absolute paths, but still replace '\' by '/' */
        if (is_absolute_path(arg))
                pfx_len = 0;
 -      else
 +      else if (pfx_len)
                memcpy(path, pfx, pfx_len);
        strcpy(path + pfx_len, arg);
        for (p = path + pfx_len; *p; p++)
@@@ -411,15 -414,6 +414,15 @@@ static const char *setup_discovered_git
        if (check_repository_format_gently(gitdir, nongit_ok))
                return NULL;
  
 +      /* --work-tree is set without --git-dir; use discovered one */
 +      if (getenv(GIT_WORK_TREE_ENVIRONMENT) || git_work_tree_cfg) {
 +              if (offset != len && !is_absolute_path(gitdir))
 +                      gitdir = xstrdup(make_absolute_path(gitdir));
 +              if (chdir(cwd))
 +                      die_errno("Could not come back to cwd");
 +              return setup_explicit_git_dir(gitdir, cwd, len, nongit_ok);
 +      }
 +
        /* #16.2, #17.2, #20.2, #21.2, #24, #25, #28, #29 (see t1510) */
        if (is_bare_repository_cfg > 0) {
                set_git_dir(offset == len ? gitdir : make_absolute_path(gitdir));
@@@ -452,16 -446,6 +455,16 @@@ static const char *setup_bare_git_dir(c
        if (check_repository_format_gently(".", nongit_ok))
                return NULL;
  
 +      /* --work-tree is set without --git-dir; use discovered one */
 +      if (getenv(GIT_WORK_TREE_ENVIRONMENT) || git_work_tree_cfg) {
 +              const char *gitdir;
 +
 +              gitdir = offset == len ? "." : xmemdupz(cwd, offset);
 +              if (chdir(cwd))
 +                      die_errno("Could not come back to cwd");
 +              return setup_explicit_git_dir(gitdir, cwd, len, nongit_ok);
 +      }
 +
        inside_git_dir = 1;
        inside_work_tree = 0;
        if (offset != len) {
@@@ -599,10 -583,8 +602,10 @@@ const char *setup_git_directory_gently(
        const char *prefix;
  
        prefix = setup_git_directory_gently_1(nongit_ok);
 -      if (startup_info)
 +      if (startup_info) {
                startup_info->have_repository = !nongit_ok || !*nongit_ok;
 +              startup_info->prefix = prefix;
 +      }
        return prefix;
  }