bundle-uri: parse bundle.heuristic=creationToken
The bundle.heuristic value communicates that the bundle list is organized to make use of the bundle.<id>.creationToken values that may be provided in the bundle list. Those values will create a total order on the bundles, allowing the Git client to download them in a specific order and even remember previously-downloaded bundles by storing the maximum creation token value. Before implementing any logic that parses or uses the bundle.<id>.creationToken values, teach Git to parse the bundle.heuristic value from a bundle list. We can use 'test-tool bundle-uri' to print the heuristic value and verify that the parsing works correctly. As an extra precaution, create the internal 'heuristics' array to be a list of (enum, string) pairs so we can iterate through the array entries carefully, regardless of the enum values. Signed-off-by: Derrick Stolee <derrickstolee@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
7bc73e7b61
commit
c93c3d2fa4
34
bundle-uri.c
34
bundle-uri.c
@@ -9,6 +9,14 @@
|
||||
#include "config.h"
|
||||
#include "remote.h"
|
||||
|
||||
static struct {
|
||||
enum bundle_list_heuristic heuristic;
|
||||
const char *name;
|
||||
} heuristics[BUNDLE_HEURISTIC__COUNT] = {
|
||||
{ BUNDLE_HEURISTIC_NONE, ""},
|
||||
{ BUNDLE_HEURISTIC_CREATIONTOKEN, "creationToken" },
|
||||
};
|
||||
|
||||
static int compare_bundles(const void *hashmap_cmp_fn_data,
|
||||
const struct hashmap_entry *he1,
|
||||
const struct hashmap_entry *he2,
|
||||
@@ -100,6 +108,17 @@ void print_bundle_list(FILE *fp, struct bundle_list *list)
|
||||
fprintf(fp, "\tversion = %d\n", list->version);
|
||||
fprintf(fp, "\tmode = %s\n", mode);
|
||||
|
||||
if (list->heuristic) {
|
||||
int i;
|
||||
for (i = 0; i < BUNDLE_HEURISTIC__COUNT; i++) {
|
||||
if (heuristics[i].heuristic == list->heuristic) {
|
||||
printf("\theuristic = %s\n",
|
||||
heuristics[list->heuristic].name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for_all_bundles_in_list(list, summarize_bundle, fp);
|
||||
}
|
||||
|
||||
@@ -142,6 +161,21 @@ static int bundle_list_update(const char *key, const char *value,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(subkey, "heuristic")) {
|
||||
int i;
|
||||
for (i = 0; i < BUNDLE_HEURISTIC__COUNT; i++) {
|
||||
if (heuristics[i].heuristic &&
|
||||
heuristics[i].name &&
|
||||
!strcmp(value, heuristics[i].name)) {
|
||||
list->heuristic = heuristics[i].heuristic;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Ignore unknown heuristics. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Ignore other unknown global keys. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user