From: Jay Soffian <jaysoffian@gmail.com>
To: git@vger.kernel.org
Cc: Jay Soffian <jaysoffian@gmail.com>, Jeff King <peff@peff.net>,
Marc Branchaud <marcnarc@xiplink.com>,
Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH 12/13] remote.c: refactor get_remote_ref_states()
Date: Mon, 23 Feb 2009 03:31:32 -0500 [thread overview]
Message-ID: <1235377892-96089-1-git-send-email-jaysoffian@gmail.com> (raw)
In-Reply-To: <76718490902222355v7510d2f9p51ade61d1f257146@mail.gmail.com>
---
So here's the inter-diff doing it the way you suggest. I'm surprised it
didn't add any LOC. If you really think this is better I'll re-do the
end of the series to do it this way.
builtin-remote.c | 81 ++++++++++++++++++++++++++---------------------------
1 files changed, 40 insertions(+), 41 deletions(-)
diff --git a/builtin-remote.c b/builtin-remote.c
index ac49219..5651b41 100644
--- a/builtin-remote.c
+++ b/builtin-remote.c
@@ -19,10 +19,6 @@ static const char * const builtin_remote_usage[] = {
NULL
};
-#define GET_REF_STATES (1<<0)
-#define GET_HEAD_NAMES (1<<1)
-#define GET_PUSH_REF_STATES (1<<2)
-
static int verbose;
static int show_all(void);
@@ -383,7 +379,7 @@ static int get_push_ref_states_noquery(struct ref_states *states)
}
static int get_head_names(const struct ref *remote_refs,
- const char *remote_name, struct ref_states *states)
+ struct ref_states *states)
{
struct ref *ref, *matches;
struct ref *fetch_map = NULL, **fetch_map_tail = &fetch_map;
@@ -785,37 +781,15 @@ static int append_ref_to_tracked_list(const char *refname,
return 0;
}
-static int get_remote_ref_states(const char *name,
- struct ref_states *states,
- int query)
+static const struct ref *get_remote_refs(struct ref_states *states)
{
struct transport *transport;
const struct ref *remote_refs;
-
- states->remote = remote_get(name);
- if (!states->remote)
- return error("No such remote: %s", name);
-
- read_branches();
-
- if (query) {
- transport = transport_get(NULL, states->remote->url_nr > 0 ?
- states->remote->url[0] : NULL);
- remote_refs = transport_get_remote_refs(transport);
- transport_disconnect(transport);
- 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);
- if (query & GET_PUSH_REF_STATES)
- get_push_ref_states(remote_refs, states);
- } else {
- for_each_ref(append_ref_to_tracked_list, states);
- sort_string_list(&states->tracked);
- get_push_ref_states_noquery(states);
- }
- return 0;
+ transport = transport_get(NULL, states->remote->url_nr > 0 ?
+ states->remote->url[0] : NULL);
+ remote_refs = transport_get_remote_refs(transport);
+ transport_disconnect(transport);
+ return remote_refs;
}
struct show_info {
@@ -970,7 +944,7 @@ int show_push_info_item(struct string_list_item *item, void *cb_data)
static int show(int argc, const char **argv)
{
- int no_query = 0, result = 0, query_flag = 0;
+ int no_query = 0, result = 0;
struct option options[] = {
OPT_GROUP("show specific options"),
OPT_BOOLEAN('n', NULL, &no_query, "do not query remotes"),
@@ -985,17 +959,31 @@ 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 | GET_PUSH_REF_STATES);
-
+ read_branches();
memset(&states, 0, sizeof(states));
memset(&info, 0, sizeof(info));
+ states.queried = !no_query;
info.states = &states;
info.list = &info_list;
+
for (; argc; argc--, argv++) {
int i;
- get_remote_ref_states(*argv, &states, query_flag);
+ if (!(states.remote = remote_get(*argv))) {
+ error("No such remote: %s", *argv);
+ continue;
+ }
+ if (no_query) {
+ for_each_ref(append_ref_to_tracked_list, &states);
+ sort_string_list(&states.tracked);
+ get_push_ref_states_noquery(&states);
+ } else {
+ const struct ref *remote_refs;
+ remote_refs = get_remote_refs(&states);
+ get_ref_states(remote_refs, &states);
+ get_head_names(remote_refs, &states);
+ get_push_ref_states(remote_refs, &states);
+ }
printf("* remote %s\n URL: %s\n", *argv,
states.remote->url_nr > 0 ?
@@ -1077,8 +1065,13 @@ static int set_head(int argc, const char **argv)
head_name = xstrdup(argv[1]);
} else if (opt_a && !opt_d && argc == 1) {
struct ref_states states;
+ const struct ref *remote_refs;
memset(&states, 0, sizeof(states));
- get_remote_ref_states(argv[0], &states, GET_HEAD_NAMES);
+ read_branches();
+ if (!(states.remote = remote_get(argv[0])))
+ return error("No such remote: %s", argv[0]);
+ remote_refs = get_remote_refs(&states);
+ get_head_names(remote_refs, &states);
if (!states.heads.nr)
result |= error("Cannot determine remote HEAD");
else if (states.heads.nr > 1) {
@@ -1134,11 +1127,17 @@ static int prune(int argc, const char **argv)
? " %s will become dangling!\n"
: " %s has become dangling!\n");
+ read_branches();
memset(&states, 0, sizeof(states));
for (; argc; argc--, argv++) {
int i;
-
- get_remote_ref_states(*argv, &states, GET_REF_STATES);
+ const struct ref *remote_refs;
+ if (!(states.remote = remote_get(*argv))) {
+ error("No such remote: %s", *argv);
+ continue;
+ }
+ remote_refs = get_remote_refs(&states);
+ get_ref_states(remote_refs, &states);
if (states.stale.nr) {
printf("Pruning %s\n", *argv);
--
1.6.2.rc1.223.gfed32
next prev parent reply other threads:[~2009-02-23 8:33 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-23 6:28 [PATCH 00/13] New output style for git remote show Jay Soffian
2009-02-23 6:28 ` [PATCH 01/13] remote: rename variable and eliminate redundant function call Jay Soffian
2009-02-23 6:28 ` [PATCH 02/13] remote: remove unused code in get_ref_states Jay Soffian
2009-02-23 6:28 ` [PATCH 03/13] remote: fix two inconsistencies in the output of "show <remote>" Jay Soffian
2009-02-23 6:28 ` [PATCH 04/13] remote: make get_remote_ref_states() always populate states.tracked Jay Soffian
2009-02-24 1:34 ` Junio C Hamano
2009-02-24 3:09 ` Jay Soffian
2009-02-24 3:13 ` Jay Soffian
2009-02-23 6:28 ` [PATCH 05/13] remote: name remote_refs consistently Jay Soffian
2009-02-23 6:28 ` [PATCH 06/13] string-list: new for_each_string_list() function Jay Soffian
2009-02-23 6:28 ` [PATCH 07/13] remote: new show output style Jay Soffian
2009-02-23 6:46 ` Jeff King
2009-02-23 23:11 ` Marc Branchaud
2009-02-23 6:28 ` [PATCH 08/13] refactor duplicated get_local_heads() to remote.c Jay Soffian
2009-02-23 6:28 ` [PATCH 09/13] refactor duplicated ref_newer() " Jay Soffian
2009-02-23 6:45 ` Jeff King
2009-02-23 7:29 ` [PATCH v2 " Jay Soffian
2009-02-23 8:53 ` Johannes Sixt
2009-02-23 13:41 ` Jay Soffian
2009-02-23 6:28 ` [PATCH 10/13] remote.c: make match_refs() copy src ref before assigning to peer_ref Jay Soffian
2009-02-24 1:34 ` Junio C Hamano
2009-02-24 3:06 ` Jay Soffian
2009-02-24 3:23 ` Junio C Hamano
2009-02-24 4:05 ` [PATCH] " Jay Soffian
2009-02-24 6:17 ` Junio C Hamano
2009-02-24 6:53 ` Jay Soffian
2009-02-24 7:12 ` Junio C Hamano
2009-02-23 6:28 ` [PATCH 11/13] remote.c: don't short-circuit match_refs() when error in match_explicit_refs() Jay Soffian
2009-02-24 1:34 ` Junio C Hamano
2009-02-24 3:07 ` Jay Soffian
2009-02-23 6:29 ` [PATCH 12/13] remote.c: refactor get_remote_ref_states() Jay Soffian
2009-02-23 6:50 ` Jeff King
2009-02-23 7:55 ` Jay Soffian
2009-02-23 8:31 ` Jay Soffian [this message]
2009-02-24 1:05 ` Jeff King
2009-02-23 6:29 ` [PATCH 13/13] remote: new show output style for push refspecs Jay Soffian
2009-02-23 6:59 ` [PATCH 00/13] New output style for git remote show Jeff King
2009-02-23 7:56 ` Jay Soffian
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1235377892-96089-1-git-send-email-jaysoffian@gmail.com \
--to=jaysoffian@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=marcnarc@xiplink.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).