prune_remote(): exit early if there are no stale references
authorMichael Haggerty <mhagger@alum.mit.edu>
Tue, 25 Nov 2014 08:02:29 +0000 (09:02 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 25 Nov 2014 18:07:45 +0000 (10:07 -0800)
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/remote.c
index 7f28f92a378a4e89d8c938beac23cbe053f1ce33..d2b684cd24c7115f3ee404a2001eddaa3468179c 100644 (file)
@@ -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;