negotiator/skipping: skip commits during fetch

Introduce a new negotiation algorithm used during fetch that skips
commits in an effort to find common ancestors faster. The skips grow
similarly to the Fibonacci sequence as the commit walk proceeds further
away from the tips. The skips may cause unnecessary commits to be
included in the packfile, but the negotiation step typically ends more
quickly.

Usage of this algorithm is guarded behind the configuration flag
fetch.negotiationAlgorithm.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jonathan Tan
2018-07-16 11:44:01 -07:00
committed by Junio C Hamano
parent ec06283844
commit 42cc7485a2
8 changed files with 461 additions and 4 deletions

View File

@ -1,8 +1,14 @@
#include "git-compat-util.h"
#include "fetch-negotiator.h"
#include "negotiator/default.h"
#include "negotiator/skipping.h"
void fetch_negotiator_init(struct fetch_negotiator *negotiator)
void fetch_negotiator_init(struct fetch_negotiator *negotiator,
const char *algorithm)
{
if (algorithm && !strcmp(algorithm, "skipping")) {
skipping_negotiator_init(negotiator);
return;
}
default_negotiator_init(negotiator);
}