From: Michael Haggerty <mhagger@alum.mit.edu>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, "Carlos Martín Nieto" <cmn@elego.de>,
"Michael Schubert" <mschub@elegosoft.com>,
"Johan Herland" <johan@herland.net>, "Jeff King" <peff@peff.net>,
"Marc Branchaud" <marcnarc@xiplink.com>,
"Nicolas Pitre" <nico@fluxnic.net>,
"John Szakmeister" <john@szakmeister.net>,
"Michael Haggerty" <mhagger@alum.mit.edu>
Subject: [PATCH v2 06/23] builtin/fetch.c: reorder function definitions
Date: Wed, 30 Oct 2013 06:32:55 +0100 [thread overview]
Message-ID: <1383111192-23780-7-git-send-email-mhagger@alum.mit.edu> (raw)
In-Reply-To: <1383111192-23780-1-git-send-email-mhagger@alum.mit.edu>
Reorder function definitions to avoid the need for a forward
declaration of function find_non_local_tags().
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
---
builtin/fetch.c | 198 +++++++++++++++++++++++++++-----------------------------
1 file changed, 97 insertions(+), 101 deletions(-)
diff --git a/builtin/fetch.c b/builtin/fetch.c
index 2248abf..61e8117 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -160,9 +160,105 @@ static void add_merge_config(struct ref **head,
}
}
+static int add_existing(const char *refname, const unsigned char *sha1,
+ int flag, void *cbdata)
+{
+ struct string_list *list = (struct string_list *)cbdata;
+ struct string_list_item *item = string_list_insert(list, refname);
+ item->util = xmalloc(20);
+ hashcpy(item->util, sha1);
+ return 0;
+}
+
+static int will_fetch(struct ref **head, const unsigned char *sha1)
+{
+ struct ref *rm = *head;
+ while (rm) {
+ if (!hashcmp(rm->old_sha1, sha1))
+ return 1;
+ rm = rm->next;
+ }
+ return 0;
+}
+
static void find_non_local_tags(struct transport *transport,
struct ref **head,
- struct ref ***tail);
+ struct ref ***tail)
+{
+ struct string_list existing_refs = STRING_LIST_INIT_DUP;
+ struct string_list remote_refs = STRING_LIST_INIT_NODUP;
+ const struct ref *ref;
+ struct string_list_item *item = NULL;
+
+ for_each_ref(add_existing, &existing_refs);
+ for (ref = transport_get_remote_refs(transport); ref; ref = ref->next) {
+ if (prefixcmp(ref->name, "refs/tags/"))
+ continue;
+
+ /*
+ * The peeled ref always follows the matching base
+ * ref, so if we see a peeled ref that we don't want
+ * to fetch then we can mark the ref entry in the list
+ * as one to ignore by setting util to NULL.
+ */
+ if (!suffixcmp(ref->name, "^{}")) {
+ if (item && !has_sha1_file(ref->old_sha1) &&
+ !will_fetch(head, ref->old_sha1) &&
+ !has_sha1_file(item->util) &&
+ !will_fetch(head, item->util))
+ item->util = NULL;
+ item = NULL;
+ continue;
+ }
+
+ /*
+ * If item is non-NULL here, then we previously saw a
+ * ref not followed by a peeled reference, so we need
+ * to check if it is a lightweight tag that we want to
+ * fetch.
+ */
+ if (item && !has_sha1_file(item->util) &&
+ !will_fetch(head, item->util))
+ item->util = NULL;
+
+ item = NULL;
+
+ /* skip duplicates and refs that we already have */
+ if (string_list_has_string(&remote_refs, ref->name) ||
+ string_list_has_string(&existing_refs, ref->name))
+ continue;
+
+ item = string_list_insert(&remote_refs, ref->name);
+ item->util = (void *)ref->old_sha1;
+ }
+ string_list_clear(&existing_refs, 1);
+
+ /*
+ * We may have a final lightweight tag that needs to be
+ * checked to see if it needs fetching.
+ */
+ if (item && !has_sha1_file(item->util) &&
+ !will_fetch(head, item->util))
+ item->util = NULL;
+
+ /*
+ * For all the tags in the remote_refs string list,
+ * add them to the list of refs to be fetched
+ */
+ for_each_string_list_item(item, &remote_refs) {
+ /* Unless we have already decided to ignore this item... */
+ if (item->util)
+ {
+ struct ref *rm = alloc_ref(item->string);
+ rm->peer_ref = alloc_ref(item->string);
+ hashcpy(rm->old_sha1, item->util);
+ **tail = rm;
+ *tail = &rm->next;
+ }
+ }
+
+ string_list_clear(&remote_refs, 0);
+}
static struct ref *get_ref_map(struct transport *transport,
struct refspec *refspecs, int refspec_count,
@@ -612,106 +708,6 @@ static int prune_refs(struct refspec *refs, int ref_count, struct ref *ref_map)
return result;
}
-static int add_existing(const char *refname, const unsigned char *sha1,
- int flag, void *cbdata)
-{
- struct string_list *list = (struct string_list *)cbdata;
- struct string_list_item *item = string_list_insert(list, refname);
- item->util = xmalloc(20);
- hashcpy(item->util, sha1);
- return 0;
-}
-
-static int will_fetch(struct ref **head, const unsigned char *sha1)
-{
- struct ref *rm = *head;
- while (rm) {
- if (!hashcmp(rm->old_sha1, sha1))
- return 1;
- rm = rm->next;
- }
- return 0;
-}
-
-static void find_non_local_tags(struct transport *transport,
- struct ref **head,
- struct ref ***tail)
-{
- struct string_list existing_refs = STRING_LIST_INIT_DUP;
- struct string_list remote_refs = STRING_LIST_INIT_NODUP;
- const struct ref *ref;
- struct string_list_item *item = NULL;
-
- for_each_ref(add_existing, &existing_refs);
- for (ref = transport_get_remote_refs(transport); ref; ref = ref->next) {
- if (prefixcmp(ref->name, "refs/tags/"))
- continue;
-
- /*
- * The peeled ref always follows the matching base
- * ref, so if we see a peeled ref that we don't want
- * to fetch then we can mark the ref entry in the list
- * as one to ignore by setting util to NULL.
- */
- if (!suffixcmp(ref->name, "^{}")) {
- if (item && !has_sha1_file(ref->old_sha1) &&
- !will_fetch(head, ref->old_sha1) &&
- !has_sha1_file(item->util) &&
- !will_fetch(head, item->util))
- item->util = NULL;
- item = NULL;
- continue;
- }
-
- /*
- * If item is non-NULL here, then we previously saw a
- * ref not followed by a peeled reference, so we need
- * to check if it is a lightweight tag that we want to
- * fetch.
- */
- if (item && !has_sha1_file(item->util) &&
- !will_fetch(head, item->util))
- item->util = NULL;
-
- item = NULL;
-
- /* skip duplicates and refs that we already have */
- if (string_list_has_string(&remote_refs, ref->name) ||
- string_list_has_string(&existing_refs, ref->name))
- continue;
-
- item = string_list_insert(&remote_refs, ref->name);
- item->util = (void *)ref->old_sha1;
- }
- string_list_clear(&existing_refs, 1);
-
- /*
- * We may have a final lightweight tag that needs to be
- * checked to see if it needs fetching.
- */
- if (item && !has_sha1_file(item->util) &&
- !will_fetch(head, item->util))
- item->util = NULL;
-
- /*
- * For all the tags in the remote_refs string list,
- * add them to the list of refs to be fetched
- */
- for_each_string_list_item(item, &remote_refs) {
- /* Unless we have already decided to ignore this item... */
- if (item->util)
- {
- struct ref *rm = alloc_ref(item->string);
- rm->peer_ref = alloc_ref(item->string);
- hashcpy(rm->old_sha1, item->util);
- **tail = rm;
- *tail = &rm->next;
- }
- }
-
- string_list_clear(&remote_refs, 0);
-}
-
static void check_not_current_branch(struct ref *ref_map)
{
struct branch *current_branch = branch_get(NULL);
--
1.8.4.1
next prev parent reply other threads:[~2013-10-30 5:41 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-30 5:32 [PATCH v2 00/23] Change semantics of "fetch --tags" Michael Haggerty
2013-10-30 5:32 ` [PATCH v2 01/23] t5510: use the correct tag name in test Michael Haggerty
2013-10-30 5:32 ` [PATCH v2 02/23] t5510: prepare test refs more straightforwardly Michael Haggerty
2013-10-30 10:57 ` Ramkumar Ramachandra
2013-10-30 17:41 ` Michael Haggerty
2013-10-30 5:32 ` [PATCH v2 03/23] t5510: check that "git fetch --prune --tags" does not prune branches Michael Haggerty
2013-10-30 5:32 ` [PATCH v2 04/23] api-remote.txt: correct section "struct refspec" Michael Haggerty
2013-10-30 5:32 ` [PATCH v2 05/23] get_ref_map(): rename local variables Michael Haggerty
2013-10-30 5:32 ` Michael Haggerty [this message]
2013-10-30 5:32 ` [PATCH v2 07/23] get_expanded_map(): add docstring Michael Haggerty
2013-10-30 5:32 ` [PATCH v2 08/23] get_expanded_map(): avoid memory leak Michael Haggerty
2013-10-30 5:32 ` [PATCH v2 09/23] fetch: only opportunistically update references based on command line Michael Haggerty
2013-10-30 5:32 ` [PATCH v2 10/23] fetch --tags: fetch tags *in addition to* other stuff Michael Haggerty
2013-10-30 5:33 ` [PATCH v2 11/23] fetch --prune: prune only based on explicit refspecs Michael Haggerty
2013-10-30 5:33 ` [PATCH v2 12/23] query_refspecs(): move some constants out of the loop Michael Haggerty
2013-10-30 11:05 ` Ramkumar Ramachandra
2013-10-30 17:31 ` Michael Haggerty
2013-10-30 5:33 ` [PATCH v2 13/23] builtin/remote.c: reorder function definitions Michael Haggerty
2013-10-30 5:33 ` [PATCH v2 14/23] builtin/remote.c:update(): use struct argv_array Michael Haggerty
2013-10-30 5:33 ` [PATCH v2 15/23] fetch, remote: properly convey --no-prune options to subprocesses Michael Haggerty
2013-10-30 5:33 ` [PATCH v2 16/23] fetch-options.txt: simplify ifdef/ifndef/endif usage Michael Haggerty
2013-10-30 5:33 ` [PATCH v2 17/23] git-fetch.txt: improve description of tag auto-following Michael Haggerty
2013-10-30 5:33 ` [PATCH v2 18/23] ref_remove_duplicates(): avoid redundant bisection Michael Haggerty
2013-10-30 5:33 ` [PATCH v2 19/23] t5536: new test of refspec conflicts when fetching Michael Haggerty
2013-10-30 5:33 ` [PATCH v2 20/23] ref_remove_duplicates(): simplify loop logic Michael Haggerty
2013-10-30 5:33 ` [PATCH v2 21/23] ref_remote_duplicates(): extract a function handle_duplicate() Michael Haggerty
2013-10-30 5:33 ` [PATCH v2 22/23] handle_duplicate(): mark error message for translation Michael Haggerty
2013-10-30 5:33 ` [PATCH v2 23/23] fetch: improve the error messages emitted for conflicting refspecs Michael Haggerty
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=1383111192-23780-7-git-send-email-mhagger@alum.mit.edu \
--to=mhagger@alum.mit.edu \
--cc=cmn@elego.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=johan@herland.net \
--cc=john@szakmeister.net \
--cc=marcnarc@xiplink.com \
--cc=mschub@elegosoft.com \
--cc=nico@fluxnic.net \
--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).