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

[PATCH 16/23] builtin-remote: refactor get_remote_ref_states()

From
Jay Soffian <jaysoffian@gmail.com>
Date
Feb 24, 2009, 09:51 UTC
Message-ID
<29438718de2df87754786279cd138b0d1fe0ca0e.1235467368.git.jaysoffian@gmail.com>
In-Reply-To
<cover.1235467368.git.jaysoffian@gmail.com>

get_remote_ref_states() has three callers, but each is interested in slightly different information. Give it a bit-field flag so that callers can specify which pieces of information they need.

Signed-off-by: Jay Soffian <jaysoffian@gmail.com>
---
 builtin-remote.c |   21 ++++++++++++++-------
 1 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/builtin-remote.c b/builtin-remote.c
index 5ef8163..a822bd5 100644
--- a/builtin-remote.c
+++ b/builtin-remote.c
@@ -19,6 +19,9 @@ static const char * const builtin_remote_usage[] = {
 	NULL
 };
 
+#define GET_REF_STATES (1<<0)
+#define GET_HEAD_NAMES (1<<1)
+
 static int verbose;
 
 static int show_all(void);
@@ -691,9 +694,10 @@ static int get_remote_ref_states(const char *name,
 			states->remote->url[0] : NULL);
 		remote_refs = transport_get_remote_refs(transport);
 		transport_disconnect(transport);
-
-		get_head_names(remote_refs, name, states);
-		get_ref_states(remote_refs, states);
+		if (query & GET_REF_STATES)
+			get_ref_states(remote_refs, states);
+		if (query & GET_HEAD_NAMES)
+			get_head_names(remote_refs, name, states);
 	} else {
 		for_each_ref(append_ref_to_tracked_list, states);
 		sort_string_list(&states->tracked);
@@ -704,7 +708,7 @@ static int get_remote_ref_states(const char *name,
 
 static int show(int argc, const char **argv)
 {
-	int no_query = 0, result = 0;
+	int no_query = 0, result = 0, query_flag = 0;
 	struct option options[] = {
 		OPT_GROUP("show specific options"),
 		OPT_BOOLEAN('n', NULL, &no_query, "do not query remotes"),
@@ -717,11 +721,14 @@ static int show(int argc, const char **argv)
 	if (argc < 1)
 		return show_all();
 
+	if (!no_query)
+		query_flag = (GET_REF_STATES | GET_HEAD_NAMES);
+
 	memset(&states, 0, sizeof(states));
 	for (; argc; argc--, argv++) {
 		int i;
 
-		get_remote_ref_states(*argv, &states, !no_query);
+		get_remote_ref_states(*argv, &states, query_flag);
 
 		printf("* remote %s\n  URL: %s\n", *argv,
 			states.remote->url_nr > 0 ?
@@ -805,7 +812,7 @@ static int set_head(int argc, const char **argv)
 	} else if (opt_a && !opt_d && argc == 1) {
 		struct ref_states states;
 		memset(&states, 0, sizeof(states));
-		get_remote_ref_states(argv[0], &states, 1);
+		get_remote_ref_states(argv[0], &states, GET_HEAD_NAMES);
 		if (!states.heads.nr)
 			result |= error("Cannot determine remote HEAD");
 		else if (states.heads.nr > 1) {
@@ -865,7 +872,7 @@ static int prune(int argc, const char **argv)
 	for (; argc; argc--, argv++) {
 		int i;
 
-		get_remote_ref_states(*argv, &states, 1);
+		get_remote_ref_states(*argv, &states, GET_REF_STATES);
 
 		if (states.stale.nr) {
 			printf("Pruning %s\n", *argv);
-- 
1.6.2.rc1.291.g83eb
Previous: Jay SoffianNext: Jay Soffian
Message 16 of 23 in “builtin-clone: move locate_head() to remote.c so it can be re-used”
  1. 01/23 builtin-clone: move locate_head() to remote.c so it can be re-usedJay Soffian, Feb 24, 2009
  2. 02/23 builtin-remote: move duplicated cleanup code its own functionJay Soffian, Feb 24, 2009
  3. 03/23 builtin-remote: teach show to display remote HEADJay Soffian, Feb 24, 2009
  4. 04/23 builtin-remote: add set-head subcommandJay Soffian, Feb 24, 2009
  5. 05/23 builtin-remote: better handling of multiple remote HEADsJay Soffian, Feb 24, 2009
  6. 06/23 remote.c: make match_refs() copy src ref before assigning to peer_refJay Soffian, Feb 24, 2009
  7. 07/23 remote.c: don't short-circuit match_refs() when error in match_explicit_refs()Jay Soffian, Feb 24, 2009
  8. 08/23 refactor duplicated get_local_heads() to remote.cJay Soffian, Feb 24, 2009
  9. 09/23 refactor duplicated ref_newer() to remote.cJay Soffian, Feb 24, 2009
  10. 10/23 string-list: new for_each_string_list() functionJay Soffian, Feb 24, 2009
  11. 11/23 builtin-remote: rename variable and eliminate redundant function callJay Soffian, Feb 24, 2009
  12. 12/23 builtin-remote: name remote_refs consistentlyJay Soffian, Feb 24, 2009
  13. 13/23 builtin-remote: remove unused code in get_ref_statesJay Soffian, Feb 24, 2009
  14. 14/23 builtin-remote: fix two inconsistencies in the output of "show <remote>"Jay Soffian, Feb 24, 2009
  15. 15/23 builtin-remote: make get_remote_ref_states() always populate states.trackedJay Soffian, Feb 24, 2009
  16. 16/23 builtin-remote: refactor get_remote_ref_states()Jay Soffian, Feb 24, 2009
  17. 17/23 builtin-remote: new show output styleJay Soffian, Feb 24, 2009
  18. 18/23 builtin-remote: new show output style for push refspecsJay Soffian, Feb 24, 2009
  19. 19/23 test scripts: refactor start_httpd helperJay Soffian, Feb 24, 2009
  20. 20/23 add basic http clone/fetch testsJay Soffian, Feb 24, 2009
  21. 21/23 refactor find_refs_by_name to accept const listJay Soffian, Feb 24, 2009
  22. 22/23 remote: refactor guess_remote_headJay Soffian, Feb 24, 2009
  23. 23/23 remote: use exact HEAD lookup if it is availableJay Soffian, Feb 24, 2009

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.