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

[PATCH 1/2] refs.c: add resolve_ref_submodule()

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Feb 8, 2017, 11:31 UTC
Message-ID
<20170208113144.8201-2-pclouds@gmail.com>
In-Reply-To
<20170208113144.8201-1-pclouds@gmail.com>

This is basically the extended version of resolve_gitlink_ref() where we have access to more info from the underlying resolve_ref_recursively() call.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 refs.c | 20 ++++++++++++++------
 refs.h |  3 +++
 2 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/refs.c b/refs.c
index cd36b64ed9..02e35d83f3 100644
--- a/refs.c
+++ b/refs.c
@@ -1325,18 +1325,18 @@ const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
 				       resolve_flags, sha1, flags);
 }
 
-int resolve_gitlink_ref(const char *submodule, const char *refname,
-			unsigned char *sha1)
+const char *resolve_ref_submodule(const char *submodule, const char *refname,
+				  int resolve_flags, unsigned char *sha1,
+				  int *flags)
 {
 	size_t len = strlen(submodule);
 	struct ref_store *refs;
-	int flags;
 
 	while (len && submodule[len - 1] == '/')
 		len--;
 
 	if (!len)
-		return -1;
+		return NULL;
 
 	if (submodule[len]) {
 		/* We need to strip off one or more trailing slashes */
@@ -1349,9 +1349,17 @@ int resolve_gitlink_ref(const char *submodule, const char *refname,
 	}
 
 	if (!refs)
-		return -1;
+		return NULL;
+
+	return resolve_ref_recursively(refs, refname, resolve_flags, sha1, flags);
+}
+
+int resolve_gitlink_ref(const char *submodule, const char *refname,
+			unsigned char *sha1)
+{
+	int flags;
 
-	if (!resolve_ref_recursively(refs, refname, 0, sha1, &flags) ||
+	if (!resolve_ref_submodule(submodule, refname, 0, sha1, &flags) ||
 	    is_null_sha1(sha1))
 		return -1;
 	return 0;
diff --git a/refs.h b/refs.h
index 9fbff90e79..74542468d8 100644
--- a/refs.h
+++ b/refs.h
@@ -88,6 +88,9 @@ int peel_ref(const char *refname, unsigned char *sha1);
  */
 int resolve_gitlink_ref(const char *submodule, const char *refname,
 			unsigned char *sha1);
+const char *resolve_ref_submodule(const char *submodule, const char *refname,
+				  int resolve_flags, unsigned char *sha1,
+				  int *flags);
 
 /*
  * Return true iff abbrev_name is a possible abbreviation for
-- 
2.11.0.157.gd943d85
Previous: Nguyễn Thái Ngọc DuyNext: Michael Haggerty
Message 2 of 51 in “Kill manual ref parsing code in worktree.c”
  1. 0/2 Kill manual ref parsing code in worktree.cNguyễn Thái Ngọc Duy, Feb 8, 2017
  2. 1/2 refs.c: add resolve_ref_submodule()Nguyễn Thái Ngọc Duy, Feb 8, 2017
  3. Michael HaggertyFeb 9, 2017
  4. 2/2 worktree.c: use submodule interface to access refs from another worktreeNguyễn Thái Ngọc Duy, Feb 8, 2017
  5. Stefan BellerFeb 8, 2017
  6. Junio C HamanoFeb 8, 2017
  7. Junio C HamanoFeb 8, 2017
  8. Michael HaggertyFeb 9, 2017
  9. Junio C HamanoFeb 9, 2017
  10. Michael HaggertyFeb 9, 2017
  11. Duy NguyenFeb 9, 2017
  12. Michael HaggertyFeb 9, 2017
  13. Junio C HamanoFeb 8, 2017
  14. 0/5 Kill manual ref parsing code in worktree.cNguyễn Thái Ngọc Duy, Feb 16, 2017
  15. 1/5 refs: introduce get_worktree_ref_store()Nguyễn Thái Ngọc Duy, Feb 16, 2017
  16. 2/5 refs.c: add refs_resolve_ref_unsafe()Nguyễn Thái Ngọc Duy, Feb 16, 2017
  17. 3/5 worktree.c: kill parse_ref() in favor of refs_resolve_ref_unsafe()Nguyễn Thái Ngọc Duy, Feb 16, 2017
  18. 4/5 refs: add refs_create_symref()Nguyễn Thái Ngọc Duy, Feb 16, 2017
  19. 5/5 refs: kill set_worktree_head_symref()Nguyễn Thái Ngọc Duy, Feb 16, 2017
  20. 0/4 Kill manual ref parsing code in worktree.cNguyễn Thái Ngọc Duy, Mar 18, 2017
  21. 4/4 refs: kill set_worktree_head_symref()Nguyễn Thái Ngọc Duy, Mar 18, 2017
  22. 3/4 worktree.c: kill parse_ref() in favor of refs_resolve_ref_unsafe()Nguyễn Thái Ngọc Duy, Mar 18, 2017
  23. 2/4 refs: introduce get_worktree_ref_store()Nguyễn Thái Ngọc Duy, Mar 18, 2017
  24. Michael HaggertyMar 20, 2017
  25. Duy NguyenMar 20, 2017
  26. Michael HaggertyMar 20, 2017
  27. Duy NguyenMar 26, 2017
  28. 1/4 environment.c: fix potential segfault by get_git_common_dir()Nguyễn Thái Ngọc Duy, Mar 18, 2017
  29. Junio C HamanoMar 18, 2017
  30. Duy NguyenMar 19, 2017
  31. Junio C HamanoMar 18, 2017
  32. 0/5 Kill manual ref parsing code in worktree.cNguyễn Thái Ngọc Duy, Apr 4, 2017
  33. 1/5 environment.c: fix potential segfault by get_git_common_dir()Nguyễn Thái Ngọc Duy, Apr 4, 2017
  34. 2/5 refs.c: make submodule ref store hashmap genericNguyễn Thái Ngọc Duy, Apr 4, 2017
  35. 3/5 refs: introduce get_worktree_ref_store()Nguyễn Thái Ngọc Duy, Apr 4, 2017
  36. Michael HaggertyApr 22, 2017
  37. 4/5 worktree.c: kill parse_ref() in favor of refs_resolve_ref_unsafe()Nguyễn Thái Ngọc Duy, Apr 4, 2017
  38. 5/5 refs: kill set_worktree_head_symref()Nguyễn Thái Ngọc Duy, Apr 4, 2017
  39. Junio C HamanoApr 14, 2017
  40. Junio C HamanoApr 14, 2017
  41. Duy NguyenApr 14, 2017
  42. Junio C HamanoApr 17, 2017
  43. Michael HaggertyApr 22, 2017
  44. 0/6 Kill manual ref parsing code in worktree.cNguyễn Thái Ngọc Duy, Apr 24, 2017
  45. 1/6 environment.c: fix potential segfault by get_git_common_dir()Nguyễn Thái Ngọc Duy, Apr 24, 2017
  46. 2/6 refs.c: make submodule ref store hashmap genericNguyễn Thái Ngọc Duy, Apr 24, 2017
  47. 4/6 refs: introduce get_worktree_ref_store()Nguyễn Thái Ngọc Duy, Apr 24, 2017
  48. 5/6 worktree.c: kill parse_ref() in favor of refs_resolve_ref_unsafe()Nguyễn Thái Ngọc Duy, Apr 24, 2017
  49. 3/6 refs: add REFS_STORE_ALL_CAPSNguyễn Thái Ngọc Duy, Apr 24, 2017
  50. 6/6 refs: kill set_worktree_head_symref()Nguyễn Thái Ngọc Duy, Apr 24, 2017
  51. Junio C HamanoApr 25, 2017

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.