git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 14/14] resolve_gitlink_ref_recursive(): change to work with struct cached_refs

From
mhagger@alum.mit.edu <mhagger@alum.mit.edu>
Date
Oct 13, 2011, 07:58 UTC
Message-ID
<1318492715-5931-15-git-send-email-mhagger@alum.mit.edu>
In-Reply-To
<1318492715-5931-1-git-send-email-mhagger@alum.mit.edu>
From: Michael Haggerty <mhagger@alum.mit.edu>

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>
---
 refs.c |   34 ++++++++++------------------------
 1 files changed, 10 insertions(+), 24 deletions(-)
diff --git a/refs.c b/refs.c
index 8776195..748ef1b 100644
--- a/refs.c
+++ b/refs.c
@@ -430,17 +430,19 @@ static int resolve_gitlink_packed_ref(struct cached_refs *refs,
 }
 
 static int resolve_gitlink_ref_recursive(struct cached_refs *refs,
-					 char *name, int pathlen,
 					 const char *refname, unsigned char *sha1,
 					 int recursion)
 {
-	int fd, len = strlen(refname);
+	int fd, len;
 	char buffer[128], *p;
+	char *path;
 
-	if (recursion > MAXDEPTH || len > MAXREFLEN)
+	if (recursion > MAXDEPTH || strlen(refname) > MAXREFLEN)
 		return -1;
-	memcpy(name + pathlen, refname, len+1);
-	fd = open(name, O_RDONLY);
+	path = *refs->name
+		? git_path_submodule(refs->name, "%s", refname)
+		: git_path("%s", refname);
+	fd = open(path, O_RDONLY);
 	if (fd < 0)
 		return resolve_gitlink_packed_ref(refs, refname, sha1);
 
@@ -463,15 +465,14 @@ static int resolve_gitlink_ref_recursive(struct cached_refs *refs,
 	while (isspace(*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 len = strlen(path), retval;
-	char *submodule, *gitdir;
+	char *submodule;
 	struct cached_refs *refs;
-	const char *tmp;
 
 	while (len && path[len-1] == '/')
 		len--;
@@ -481,22 +482,7 @@ int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *sh
 	refs = get_cached_refs(submodule);
 	free(submodule);
 
-	gitdir = xmalloc(len + MAXREFLEN + 8);
-	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);
+	retval = resolve_gitlink_ref_recursive(refs, refname, sha1, 0);
 	return retval;
 }
 
-- 
1.7.7.rc2
Previous: mhagger@alum.mit.eduNext: Johannes Sixt
Message 24 of 28 in “Tidying up references code”
  1. 00/14 Tidying up references codemhagger@alum.mit.edu, Oct 13, 2011
  2. 01/14 cache.h: add comments for git_path() and git_path_submodule()mhagger@alum.mit.edu, Oct 13, 2011
  3. Junio C HamanoOct 13, 2011
  4. 02/14 struct ref_list: document name membermhagger@alum.mit.edu, Oct 13, 2011
  5. Junio C HamanoOct 13, 2011
  6. 03/14 refs.c: rename some local "refname" variablesmhagger@alum.mit.edu, Oct 13, 2011
  7. 04/14 refs: rename some parameters result -> sha1mhagger@alum.mit.edu, Oct 13, 2011
  8. Junio C HamanoOct 13, 2011
  9. 05/14 clear_ref_list(): rename from free_ref_list()mhagger@alum.mit.edu, Oct 13, 2011
  10. Junio C HamanoOct 13, 2011
  11. 06/14 resolve_gitlink_ref(): improve docstringmhagger@alum.mit.edu, Oct 13, 2011
  12. Junio C HamanoOct 13, 2011
  13. 07/14 is_refname_available(): remove the "quiet" argumentmhagger@alum.mit.edu, Oct 13, 2011
  14. Drew NorthupOct 13, 2011
  15. Junio C HamanoOct 13, 2011
  16. Michael HaggertyOct 14, 2011
  17. 08/14 parse_ref_line(): add docstringmhagger@alum.mit.edu, Oct 13, 2011
  18. 09/14 add_ref(): add docstringmhagger@alum.mit.edu, Oct 13, 2011
  19. 10/14 is_dup_ref(): extract function from sort_ref_list()mhagger@alum.mit.edu, Oct 13, 2011
  20. Junio C HamanoOct 13, 2011
  21. 11/14 refs: change signatures of get_packed_refs() and get_loose_refs()mhagger@alum.mit.edu, Oct 13, 2011
  22. 12/14 get_ref_dir(): change signaturemhagger@alum.mit.edu, Oct 13, 2011
  23. 13/14 Pass a (cached_refs *) to the resolve_gitlink_*() functionsmhagger@alum.mit.edu, Oct 13, 2011
  24. 14/14 resolve_gitlink_ref_recursive(): change to work with struct cached_refsmhagger@alum.mit.edu, Oct 13, 2011
  25. t1402-check-ref-format: skip tests of refs beginning with slash on WindowsJohannes Sixt, Oct 13, 2011
  26. Junio C HamanoOct 13, 2011
  27. Junio C HamanoOct 13, 2011
  28. Johannes SixtOct 14, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.