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

[PATCH v2 1/7] prune_remote(): exit early if there are no stale references

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
Nov 25, 2014, 08:02 UTC
Message-ID
<1416902555-10748-2-git-send-email-mhagger@alum.mit.edu>
In-Reply-To
<1416902555-10748-1-git-send-email-mhagger@alum.mit.edu>

Aside from making the logic clearer, this avoids a call to warn_dangling_symrefs(), which always does a for_each_rawref() iteration.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
---
 builtin/remote.c | 39 +++++++++++++++++++++------------------
 1 file changed, 21 insertions(+), 18 deletions(-)
diff --git a/builtin/remote.c b/builtin/remote.c
index 7f28f92..d2b684c 100644
--- a/builtin/remote.c
+++ b/builtin/remote.c
@@ -1325,25 +1325,28 @@ static int prune_remote(const char *remote, int dry_run)
 	memset(&states, 0, sizeof(states));
 	get_remote_ref_states(remote, &states, GET_REF_STATES);
 
-	if (states.stale.nr) {
-		printf_ln(_("Pruning %s"), remote);
-		printf_ln(_("URL: %s"),
-		       states.remote->url_nr
-		       ? states.remote->url[0]
-		       : _("(no URL)"));
-
-		delete_refs = xmalloc(states.stale.nr * sizeof(*delete_refs));
-		for (i = 0; i < states.stale.nr; i++)
-			delete_refs[i] = states.stale.items[i].util;
-		if (!dry_run) {
-			struct strbuf err = STRBUF_INIT;
-			if (repack_without_refs(delete_refs, states.stale.nr,
-						&err))
-				result |= error("%s", err.buf);
-			strbuf_release(&err);
-		}
-		free(delete_refs);
+	if (!states.stale.nr) {
+		free_remote_ref_states(&states);
+		return 0;
+	}
+
+	printf_ln(_("Pruning %s"), remote);
+	printf_ln(_("URL: %s"),
+		  states.remote->url_nr
+		  ? states.remote->url[0]
+		  : _("(no URL)"));
+
+	delete_refs = xmalloc(states.stale.nr * sizeof(*delete_refs));
+	for (i = 0; i < states.stale.nr; i++)
+		delete_refs[i] = states.stale.items[i].util;
+	if (!dry_run) {
+		struct strbuf err = STRBUF_INIT;
+		if (repack_without_refs(delete_refs, states.stale.nr,
+					&err))
+			result |= error("%s", err.buf);
+		strbuf_release(&err);
 	}
+	free(delete_refs);
 
 	for (i = 0; i < states.stale.nr; i++) {
 		const char *refname = states.stale.items[i].util;
-- 
2.1.3
Previous: Michael HaggertyNext: Junio C Hamano
Message 2 of 12 in “repack_without_refs(): convert to string_list”
  1. 0/7 repack_without_refs(): convert to string_listMichael Haggerty, Nov 25, 2014
  2. 1/7 prune_remote(): exit early if there are no stale referencesMichael Haggerty, Nov 25, 2014
  3. Junio C HamanoNov 25, 2014
  4. 2/7 prune_remote(): initialize both delete_refs lists in a single loopMichael Haggerty, Nov 25, 2014
  5. 3/7 prune_remote(): sort delete_refs_list references en masseMichael Haggerty, Nov 25, 2014
  6. 4/7 repack_without_refs(): make the refnames argument a string_listMichael Haggerty, Nov 25, 2014
  7. 5/7 prune_remote(): rename local variableMichael Haggerty, Nov 25, 2014
  8. 6/7 prune_remote(): iterate using for_each_string_list_item()Michael Haggerty, Nov 25, 2014
  9. 7/7 Rename sort_string_list() to string_list_sort()Michael Haggerty, Nov 25, 2014
  10. Junio C HamanoNov 25, 2014
  11. Stefan BellerNov 26, 2014
  12. Junio C HamanoNov 26, 2014

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.