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>
Michael Haggerty committed
Dec 12, 2011 at 06:38 UTC
064d51dc40bc9df75279ca3346cd84c2611c6aba
1 file changed
+10
-24
refs.c
+10
-24
@@ -431,17 +431,19 @@ static int resolve_gitlink_packed_ref(struct ref_cache *refs,
431
}
432
433
static int resolve_gitlink_ref_recursive(struct ref_cache *refs,
434
- char *name, int pathlen,
434
const char *refname, unsigned char *sha1,
435
int recursion)
436
{
438
- int fd, len = strlen(refname);
437
+ int fd, len;
438
char buffer[128], *p;
439
+ char *path;
440
441
- if (recursion > MAXDEPTH || len > MAXREFLEN)
441
+ if (recursion > MAXDEPTH || strlen(refname) > MAXREFLEN)
442
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);
447
if (fd < 0)
448
return resolve_gitlink_packed_ref(refs, refname, sha1);
449
@@ -464,15 +466,14 @@ static int resolve_gitlink_ref_recursive(struct ref_cache *refs,
466
while (isspace(*p))
467
p++;
468
467
- return resolve_gitlink_ref_recursive(refs, name, pathlen, p, sha1, recursion+1);
469
+ return resolve_gitlink_ref_recursive(refs, p, sha1, recursion+1);
470
}
471
472
int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *sha1)
473
{
474
int len = strlen(path), retval;
473
- char *submodule, *gitdir;
475
+ char *submodule;
476
struct ref_cache *refs;
475
- const char *tmp;
477
478
while (len && path[len-1] == '/')
479
len--;
@@ -482,22 +483,7 @@ int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *sh
483
refs = get_ref_cache(submodule);
484
free(submodule);
485
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);
487
return retval;
488
}
489