[PATCH 12/13] remote.c: refactor get_remote_ref_states()
From: Jay Soffian <hidden>
Date: 2016-06-15 22:46:16
Subsystem:
the rest · Maintainer:
Linus Torvalds
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 <redacted> --- builtin-remote.c | 23 +++++++++++++++-------- 1 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/builtin-remote.c b/builtin-remote.c
index 4975a0e..327667a 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);
@@ -685,14 +688,15 @@ 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); + states->queried = 1; + 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); } - states->queried = query; - return 0; }
@@ -796,7 +800,7 @@ int show_local_info_item(struct string_list_item *item, void *cb_data) 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"),
@@ -811,6 +815,9 @@ 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)); memset(&info, 0, sizeof(info)); info.states = &states;
@@ -818,7 +825,7 @@ static int show(int argc, const char **argv) 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 ?
@@ -902,7 +909,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) {
@@ -962,7 +969,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.223.gfed32