Browse Source

Teach resolve_gitlink_ref() about the .git file

When .git in a submodule is a file, resolve_gitlink_ref() needs to pick up
the real GIT_DIR of the submodule from that file.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Lars Hjemli 17 years ago committed by Junio C Hamano
parent
commit
842abf06f3
  1. 17
      refs.c

17
refs.c

@ -352,6 +352,7 @@ int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *re @@ -352,6 +352,7 @@ int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *re
{
int len = strlen(path), retval;
char *gitdir;
const char *tmp;

while (len && path[len-1] == '/')
len--;
@ -359,9 +360,19 @@ int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *re @@ -359,9 +360,19 @@ int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *re
return -1;
gitdir = xmalloc(len + MAXREFLEN + 8);
memcpy(gitdir, path, len);
memcpy(gitdir + len, "/.git/", 7);

retval = resolve_gitlink_ref_recursive(gitdir, len+6, refname, result, 0);
memcpy(gitdir + len, "/.git", 6);
len += 5;

tmp = read_gitfile_gently(gitdir);
if (tmp) {
free(gitdir);
len = strlen(tmp);
gitdir = xmalloc(len + MAXREFLEN + 3);
memcpy(gitdir, tmp, len);
}
gitdir[len] = '/';
gitdir[++len] = '\0';
retval = resolve_gitlink_ref_recursive(gitdir, len, refname, result, 0);
free(gitdir);
return retval;
}

Loading…
Cancel
Save