Skip to content

Commit 064d51d

Browse files
mhaggergitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent b062660 commit 064d51d

File tree

1 file changed

+10
-24
lines changed

1 file changed

+10
-24
lines changed

refs.c

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -431,17 +431,19 @@ static int resolve_gitlink_packed_ref(struct ref_cache *refs,
431431
}
432432

433433
static int resolve_gitlink_ref_recursive(struct ref_cache *refs,
434-
char *name, int pathlen,
435434
const char *refname, unsigned char *sha1,
436435
int recursion)
437436
{
438-
int fd, len = strlen(refname);
437+
int fd, len;
439438
char buffer[128], *p;
439+
char *path;
440440

441-
if (recursion > MAXDEPTH || len > MAXREFLEN)
441+
if (recursion > MAXDEPTH || strlen(refname) > MAXREFLEN)
442442
return -1;
443-
memcpy(name + pathlen, refname, len+1);
444-
fd = open(name, O_RDONLY);
443+
path = *refs->name
444+
? git_path_submodule(refs->name, "%s", refname)
445+
: git_path("%s", refname);
446+
fd = open(path, O_RDONLY);
445447
if (fd < 0)
446448
return resolve_gitlink_packed_ref(refs, refname, sha1);
447449

@@ -464,15 +466,14 @@ static int resolve_gitlink_ref_recursive(struct ref_cache *refs,
464466
while (isspace(*p))
465467
p++;
466468

467-
return resolve_gitlink_ref_recursive(refs, name, pathlen, p, sha1, recursion+1);
469+
return resolve_gitlink_ref_recursive(refs, p, sha1, recursion+1);
468470
}
469471

470472
int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *sha1)
471473
{
472474
int len = strlen(path), retval;
473-
char *submodule, *gitdir;
475+
char *submodule;
474476
struct ref_cache *refs;
475-
const char *tmp;
476477

477478
while (len && path[len-1] == '/')
478479
len--;
@@ -482,22 +483,7 @@ int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *sh
482483
refs = get_ref_cache(submodule);
483484
free(submodule);
484485

485-
gitdir = xmalloc(len + MAXREFLEN + 8);
486-
memcpy(gitdir, path, len);
487-
memcpy(gitdir + len, "/.git", 6);
488-
len += 5;
489-
490-
tmp = read_gitfile(gitdir);
491-
if (tmp) {
492-
free(gitdir);
493-
len = strlen(tmp);
494-
gitdir = xmalloc(len + MAXREFLEN + 3);
495-
memcpy(gitdir, tmp, len);
496-
}
497-
gitdir[len] = '/';
498-
gitdir[++len] = '\0';
499-
retval = resolve_gitlink_ref_recursive(refs, gitdir, len, refname, sha1, 0);
500-
free(gitdir);
486+
retval = resolve_gitlink_ref_recursive(refs, refname, sha1, 0);
501487
return retval;
502488
}
503489

0 commit comments

Comments
 (0)