prune_remote(): initialize both delete_refs lists in a single loop

Also free them together at the end of the function. In a moment, the array version will become redundant. Managing them together makes later steps more obvious. 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>

Michael Haggerty committed Nov 25, 2014 at 09:02 UTC 28d3f214d12af4a3d7e625faf4bb0af6c735fa8b
1 file changed +9 -6
builtin/remote.c
+9 -6
@@ -1337,8 +1337,13 @@ static int prune_remote(const char *remote, int dry_run)
1337 : _("(no URL)"));
1338
1339 delete_refs = xmalloc(states.stale.nr * sizeof(*delete_refs));
1340 - for (i = 0; i < states.stale.nr; i++)
1341 - delete_refs[i] = states.stale.items[i].util;
1340 + for (i = 0; i < states.stale.nr; i++) {
1341 + const char *refname = states.stale.items[i].util;
1342 +
1343 + delete_refs[i] = refname;
1344 + string_list_insert(&delete_refs_list, refname);
1345 + }
1346 +
1347 if (!dry_run) {
1348 struct strbuf err = STRBUF_INIT;
1349 if (repack_without_refs(delete_refs, states.stale.nr,
@@ -1346,13 +1351,10 @@ static int prune_remote(const char *remote, int dry_run)
1351 result |= error("%s", err.buf);
1352 strbuf_release(&err);
1353 }
1349 - free(delete_refs);
1354
1355 for (i = 0; i < states.stale.nr; i++) {
1356 const char *refname = states.stale.items[i].util;
1357
1354 - string_list_insert(&delete_refs_list, refname);
1355 -
1358 if (!dry_run)
1359 result |= delete_ref(refname, NULL, 0);
1360
@@ -1365,8 +1367,9 @@ static int prune_remote(const char *remote, int dry_run)
1367 }
1368
1369 warn_dangling_symrefs(stdout, dangling_msg, &delete_refs_list);
1368 - string_list_clear(&delete_refs_list, 0);
1370
1371 + free(delete_refs);
1372 + string_list_clear(&delete_refs_list, 0);
1373 free_remote_ref_states(&states);
1374 return result;
1375 }