about summary refs log tree commit diff
path: root/third_party/git/fetch-negotiator.c
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/git/fetch-negotiator.c')
-rw-r--r--third_party/git/fetch-negotiator.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/third_party/git/fetch-negotiator.c b/third_party/git/fetch-negotiator.c
index d6d685cba012..0a1357dc9d55 100644
--- a/third_party/git/fetch-negotiator.c
+++ b/third_party/git/fetch-negotiator.c
@@ -2,19 +2,20 @@
 #include "fetch-negotiator.h"
 #include "negotiator/default.h"
 #include "negotiator/skipping.h"
+#include "repository.h"
 
-void fetch_negotiator_init(struct fetch_negotiator *negotiator,
-			   const char *algorithm)
+void fetch_negotiator_init(struct repository *r,
+			   struct fetch_negotiator *negotiator)
 {
-	if (algorithm) {
-		if (!strcmp(algorithm, "skipping")) {
-			skipping_negotiator_init(negotiator);
-			return;
-		} else if (!strcmp(algorithm, "default")) {
-			/* Fall through to default initialization */
-		} else {
-			die("unknown fetch negotiation algorithm '%s'", algorithm);
-		}
+	prepare_repo_settings(r);
+	switch(r->settings.fetch_negotiation_algorithm) {
+	case FETCH_NEGOTIATION_SKIPPING:
+		skipping_negotiator_init(negotiator);
+		return;
+
+	case FETCH_NEGOTIATION_DEFAULT:
+	default:
+		default_negotiator_init(negotiator);
+		return;
 	}
-	default_negotiator_init(negotiator);
 }