resolve_gitlink_ref_recursive(): change to work with struct ref_cache
resolve_gitlink_ref() and resolve_gitlink_ref_recursive(), together, basically duplicated the code in git_path_submodule(). So use that function instead. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
b0626608ea
commit
064d51dc40
34
refs.c
34
refs.c
@ -431,17 +431,19 @@ static int resolve_gitlink_packed_ref(struct ref_cache *refs,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int resolve_gitlink_ref_recursive(struct ref_cache *refs,
|
static int resolve_gitlink_ref_recursive(struct ref_cache *refs,
|
||||||
char *name, int pathlen,
|
|
||||||
const char *refname, unsigned char *sha1,
|
const char *refname, unsigned char *sha1,
|
||||||
int recursion)
|
int recursion)
|
||||||
{
|
{
|
||||||
int fd, len = strlen(refname);
|
int fd, len;
|
||||||
char buffer[128], *p;
|
char buffer[128], *p;
|
||||||
|
char *path;
|
||||||
|
|
||||||
if (recursion > MAXDEPTH || len > MAXREFLEN)
|
if (recursion > MAXDEPTH || strlen(refname) > MAXREFLEN)
|
||||||
return -1;
|
return -1;
|
||||||
memcpy(name + pathlen, refname, len+1);
|
path = *refs->name
|
||||||
fd = open(name, O_RDONLY);
|
? git_path_submodule(refs->name, "%s", refname)
|
||||||
|
: git_path("%s", refname);
|
||||||
|
fd = open(path, O_RDONLY);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
return resolve_gitlink_packed_ref(refs, refname, sha1);
|
return resolve_gitlink_packed_ref(refs, refname, sha1);
|
||||||
|
|
||||||
@ -464,15 +466,14 @@ static int resolve_gitlink_ref_recursive(struct ref_cache *refs,
|
|||||||
while (isspace(*p))
|
while (isspace(*p))
|
||||||
p++;
|
p++;
|
||||||
|
|
||||||
return resolve_gitlink_ref_recursive(refs, name, pathlen, p, sha1, recursion+1);
|
return resolve_gitlink_ref_recursive(refs, p, sha1, recursion+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *sha1)
|
int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *sha1)
|
||||||
{
|
{
|
||||||
int len = strlen(path), retval;
|
int len = strlen(path), retval;
|
||||||
char *submodule, *gitdir;
|
char *submodule;
|
||||||
struct ref_cache *refs;
|
struct ref_cache *refs;
|
||||||
const char *tmp;
|
|
||||||
|
|
||||||
while (len && path[len-1] == '/')
|
while (len && path[len-1] == '/')
|
||||||
len--;
|
len--;
|
||||||
@ -482,22 +483,7 @@ int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *sh
|
|||||||
refs = get_ref_cache(submodule);
|
refs = get_ref_cache(submodule);
|
||||||
free(submodule);
|
free(submodule);
|
||||||
|
|
||||||
gitdir = xmalloc(len + MAXREFLEN + 8);
|
retval = resolve_gitlink_ref_recursive(refs, refname, sha1, 0);
|
||||||
memcpy(gitdir, path, len);
|
|
||||||
memcpy(gitdir + len, "/.git", 6);
|
|
||||||
len += 5;
|
|
||||||
|
|
||||||
tmp = read_gitfile(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(refs, gitdir, len, refname, sha1, 0);
|
|
||||||
free(gitdir);
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user