fetch: merge fetching and consuming refs
The functions `fetch_refs()` and `consume_refs()` must always be called together such that we first obtain all missing objects and then update our local refs to match the remote refs. In a subsequent patch, we'll further require that `fetch_refs()` must always be called before `consume_refs()` such that it can correctly assert that we have all objects after the fetch given that we're about to move the connectivity check. Make this requirement explicit by merging both functions into a single `fetch_and_consume_refs()` function. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Patrick Steinhardt committed
Sep 1, 2021 at 15:10 UTC
1c7d1ab6f4a79e44406f304ec01b0a143dae9abb
1 file changed
+9
-21
builtin/fetch.c
+9
-21
@@ -1291,8 +1291,9 @@ static int check_exist_and_connected(struct ref *ref_map)
1291
return check_connected(iterate_ref_map, &rm, &opt);
1292
}
1293
1294
-static int fetch_refs(struct transport *transport, struct ref *ref_map)
1294
+static int fetch_and_consume_refs(struct transport *transport, struct ref *ref_map)
1295
{
1296
+ int connectivity_checked;
1297
int ret;
1298
1299
/*
@@ -1308,30 +1309,18 @@ static int fetch_refs(struct transport *transport, struct ref *ref_map)
1309
goto out;
1310
}
1311
1311
- /*
1312
- * Keep the new pack's ".keep" file around to allow the caller
1313
- * time to update refs to reference the new objects.
1314
- */
1315
- return ret;
1316
-
1317
-out:
1318
- transport_unlock_pack(transport);
1319
- return ret;
1320
-}
1321
-
1322
-/* Update local refs based on the ref values fetched from a remote */
1323
-static int consume_refs(struct transport *transport, struct ref *ref_map)
1324
-{
1325
- int connectivity_checked = transport->smart_options
1312
+ connectivity_checked = transport->smart_options
1313
? transport->smart_options->connectivity_checked : 0;
1327
- int ret;
1314
+
1315
trace2_region_enter("fetch", "consume_refs", the_repository);
1316
ret = store_updated_refs(transport->url,
1317
transport->remote->name,
1318
connectivity_checked,
1319
ref_map);
1333
- transport_unlock_pack(transport);
1320
trace2_region_leave("fetch", "consume_refs", the_repository);
1321
+
1322
+out:
1323
+ transport_unlock_pack(transport);
1324
return ret;
1325
}
1326
@@ -1520,8 +1509,7 @@ static void backfill_tags(struct transport *transport, struct ref *ref_map)
1509
transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, NULL);
1510
transport_set_option(transport, TRANS_OPT_DEPTH, "0");
1511
transport_set_option(transport, TRANS_OPT_DEEPEN_RELATIVE, NULL);
1523
- if (!fetch_refs(transport, ref_map))
1524
- consume_refs(transport, ref_map);
1512
+ fetch_and_consume_refs(transport, ref_map);
1513
1514
if (gsecondary) {
1515
transport_disconnect(gsecondary);
@@ -1612,7 +1600,7 @@ static int do_fetch(struct transport *transport,
1600
transport->url);
1601
}
1602
}
1615
- if (fetch_refs(transport, ref_map) || consume_refs(transport, ref_map)) {
1603
+ if (fetch_and_consume_refs(transport, ref_map)) {
1604
free_refs(ref_map);
1605
retcode = 1;
1606
goto cleanup;