git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v4 05/11] promisor-remote: use repository_format_partial_clone

From
Christian Couder <christian.couder@gmail.com>
Date
Apr 1, 2019, 16:40 UTC
Message-ID
<20190401164045.17328-6-chriscool@tuxfamily.org>
In-Reply-To
<20190401164045.17328-1-chriscool@tuxfamily.org>

A remote specified using the extensions.partialClone config option should be considered a promisor remote too.

This remote should be at the end of the promisor remote list, so that it is used only if objects have not been found in other remotes.

If we are using promisor remotes other than the origin, it is because these other promisor remotes are likely to be better for some reason (maybe they are closer or faster for some kind of objects) than the origin, so it's logical that we try to use them first.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
---
 promisor-remote.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
diff --git a/promisor-remote.c b/promisor-remote.c
index d1fcd1a8bf..6a689737f0 100644
--- a/promisor-remote.c
+++ b/promisor-remote.c
@@ -40,6 +40,18 @@ static struct promisor_remote *promisor_remote_lookup(const char *remote_name,
 	return NULL;
 }
 
+static void promisor_remote_move_to_tail(struct promisor_remote *r,
+					 struct promisor_remote *previous)
+{
+	if (previous)
+		previous->next = r->next;
+	else
+		promisors = r->next ? r->next : r;
+	r->next = NULL;
+	*promisors_tail = r;
+	promisors_tail = &r->next;
+}
+
 static int promisor_remote_config(const char *var, const char *value, void *data)
 {
 	const char *name;
@@ -76,6 +88,17 @@ static void promisor_remote_init(void)
 	initialized = 1;
 
 	git_config(promisor_remote_config, NULL);
+
+	if (repository_format_partial_clone) {
+		struct promisor_remote *o, *previous;
+
+		o = promisor_remote_lookup(repository_format_partial_clone,
+					   &previous);
+		if (o)
+			promisor_remote_move_to_tail(o, previous);
+		else
+			promisor_remote_new(repository_format_partial_clone);
+	}
 }
 
 static void promisor_remote_clear(void)
-- 
2.21.0.203.gd44fa53258
Previous: Christian CouderNext: Christian Couder
Message 8 of 18 in “Many promisor remotes”
  1. 00/11 Many promisor remotesChristian Couder, Apr 1, 2019
  2. 01/11 fetch-object: make functions return an error codeChristian Couder, Apr 1, 2019
  3. 02/11 Add initial support for many promisor remotesChristian Couder, Apr 1, 2019
  4. SZEDER GáborApr 3, 2019
  5. Christian CouderApr 4, 2019
  6. 03/11 promisor-remote: implement promisor_remote_get_direct()Christian Couder, Apr 1, 2019
  7. 04/11 promisor-remote: add promisor_remote_reinit()Christian Couder, Apr 1, 2019
  8. 05/11 promisor-remote: use repository_format_partial_cloneChristian Couder, Apr 1, 2019
  9. 06/11 Use promisor_remote_get_direct() and has_promisor_remote()Christian Couder, Apr 1, 2019
  10. 07/11 promisor-remote: parse remote.*.partialclonefilterChristian Couder, Apr 1, 2019
  11. 08/11 builtin/fetch: remove unique promisor remote limitationChristian Couder, Apr 1, 2019
  12. 09/11 t0410: test fetching from many promisor remotesChristian Couder, Apr 1, 2019
  13. SZEDER GáborApr 5, 2019
  14. 10/11 partial-clone: add multiple remotes in the docChristian Couder, Apr 1, 2019
  15. 11/11 remote: add promisor and partial clone config to the docChristian Couder, Apr 1, 2019
  16. Junio C HamanoApr 4, 2019
  17. Christian CouderApr 4, 2019
  18. Johannes SchindelinApr 5, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.