Git development
 help / color / mirror / Atom feed
From: Patrick Steinhardt <ps@pks.im>
To: Christian Couder <christian.couder@gmail.com>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>,
	Taylor Blau <me@ttaylorr.com>,
	Karthik Nayak <karthik.188@gmail.com>,
	Elijah Newren <newren@gmail.com>,
	Christian Couder <chriscool@tuxfamily.org>
Subject: Re: [PATCH 01/10] promisor-remote: try accepted remotes before others in get_direct()
Date: Thu, 2 Apr 2026 09:46:05 +0200	[thread overview]
Message-ID: <ac4evWK9k69LIV91@pks.im> (raw)
In-Reply-To: <20260402070613.85934-2-christian.couder@gmail.com>

On Thu, Apr 02, 2026 at 09:06:04AM +0200, Christian Couder wrote:
> diff --git a/Documentation/gitprotocol-v2.adoc b/Documentation/gitprotocol-v2.adoc
> index f985cb4c47..4fcb1a7bda 100644
> --- a/Documentation/gitprotocol-v2.adoc
> +++ b/Documentation/gitprotocol-v2.adoc
> @@ -848,6 +848,10 @@ advertised, it can reply with "promisor-remote=<pr-names>" where
>  where `pr-name` is the urlencoded name of a promisor remote the server
>  advertised and the client accepts.
>  
> +The promisor remotes that the client accepted will be tried before the
> +other configured promisor remotes when the client attempts to fetch
> +missing objects.
> +
>  Note that, everywhere in this document, the ';' and ',' characters
>  MUST be encoded if they appear in `pr-name` or `field-value`.

Makes sense, thanks for adding this blurb.

> diff --git a/t/t5710-promisor-remote-capability.sh b/t/t5710-promisor-remote-capability.sh
> index 357822c01a..bf0eed9f10 100755
> --- a/t/t5710-promisor-remote-capability.sh
> +++ b/t/t5710-promisor-remote-capability.sh
> @@ -166,6 +166,75 @@ test_expect_success "init + fetch with promisor.advertise set to 'true'" '
>  	check_missing_objects server 1 "$oid"
>  '
>  
> +test_expect_success "clone with two promisors but only one advertised" '
> +	git -C server config promisor.advertise true &&
> +	test_when_finished "rm -rf client unused_lop" &&
> +
> +	# Create a promisor that will be configured but not be used
> +	git init --bare unused_lop &&
> +
> +	# Clone from server to create a client
> +	GIT_TRACE="$(pwd)/trace" GIT_NO_LAZY_FETCH=0 git clone \
> +		-c remote.unused_lop.promisor=true \
> +		-c remote.unused_lop.fetch="+refs/heads/*:refs/remotes/unused_lop/*" \
> +		-c remote.unused_lop.url="file://$(pwd)/unused_lop" \
> +		-c remote.lop.promisor=true \
> +		-c remote.lop.fetch="+refs/heads/*:refs/remotes/lop/*" \
> +		-c remote.lop.url="file://$(pwd)/lop" \
> +		-c promisor.acceptfromserver=All \
> +		--no-local --filter="blob:limit=5k" server client &&
> +
> +	# Check that "unused_lop" appears before "lop" in the config
> +	printf "remote.%s.promisor true\n" "unused_lop" "lop" "origin" >expect &&
> +	git -C client config get --all --show-names --regexp "^remote\..*\.promisor$" >actual &&
> +	test_cmp expect actual &&
> +
> +	# Check that "lop" was tried
> +	test_grep " fetch lop " trace &&
> +	# Check that "unused_lop" was not contacted
> +	# This means "lop", the accepted promisor, was tried first
> +	test_grep ! " fetch unused_lop " trace &&
> +
> +	# Check that the largest object is still missing on the server
> +	check_missing_objects server 1 "$oid"
> +'
> +
> +test_expect_success "init + fetch two promisors but only one advertised" '
> +	git -C server config promisor.advertise true &&
> +	test_when_finished "rm -rf client unused_lop" &&
> +
> +	# Create a promisor that will be configured but not be used
> +	git init --bare unused_lop &&
> +
> +	mkdir client &&
> +	git -C client init &&

Tiniest nit, not worth rerolling over: this could just be `git init client`.

Patrick

  reply	other threads:[~2026-04-02  7:46 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-02  7:06 [PATCH 00/10] Prepare for advertised remotes auto-configure via URL allowlist Christian Couder
2026-04-02  7:06 ` [PATCH 01/10] promisor-remote: try accepted remotes before others in get_direct() Christian Couder
2026-04-02  7:46   ` Patrick Steinhardt [this message]
2026-04-07 12:05     ` Christian Couder
2026-04-07 14:49       ` Junio C Hamano
2026-04-02  7:06 ` [PATCH 02/10] promisor-remote: pass config entry to all_fields_match() directly Christian Couder
2026-04-02  7:06 ` [PATCH 03/10] promisor-remote: clarify that a remote is ignored Christian Couder
2026-04-02  7:06 ` [PATCH 04/10] promisor-remote: reject empty name or URL in advertised remote Christian Couder
2026-04-02  7:46   ` Patrick Steinhardt
2026-04-02  7:06 ` [PATCH 05/10] promisor-remote: refactor should_accept_remote() control flow Christian Couder
2026-04-02  7:06 ` [PATCH 06/10] promisor-remote: refactor has_control_char() Christian Couder
2026-04-02  7:06 ` [PATCH 07/10] promisor-remote: refactor accept_from_server() Christian Couder
2026-04-02  7:06 ` [PATCH 08/10] promisor-remote: keep accepted promisor_info structs alive Christian Couder
2026-04-02  7:06 ` [PATCH 09/10] promisor-remote: remove the 'accepted' strvec Christian Couder
2026-04-02  7:06 ` [PATCH 10/10] t5710: use proper file:// URIs for absolute paths Christian Couder
2026-04-02  9:58   ` Junio C Hamano
2026-04-03  8:16     ` Christian Couder
2026-04-07 12:02       ` Christian Couder
2026-04-02  7:47 ` [PATCH 00/10] Prepare for advertised remotes auto-configure via URL allowlist Patrick Steinhardt
2026-04-02 18:37 ` Junio C Hamano
2026-04-07 11:57   ` Christian Couder
2026-04-07 11:52 ` [PATCH v2 " Christian Couder
2026-04-07 11:52   ` [PATCH v2 01/10] promisor-remote: try accepted remotes before others in get_direct() Christian Couder
2026-04-07 11:52   ` [PATCH v2 02/10] promisor-remote: pass config entry to all_fields_match() directly Christian Couder
2026-04-07 16:56     ` Junio C Hamano
2026-04-07 11:52   ` [PATCH v2 03/10] promisor-remote: clarify that a remote is ignored Christian Couder
2026-04-07 17:27     ` Junio C Hamano
2026-04-07 11:52   ` [PATCH v2 04/10] promisor-remote: reject empty name or URL in advertised remote Christian Couder
2026-04-07 17:36     ` Junio C Hamano
2026-04-07 11:52   ` [PATCH v2 05/10] promisor-remote: refactor should_accept_remote() control flow Christian Couder
2026-04-07 11:52   ` [PATCH v2 06/10] promisor-remote: refactor has_control_char() Christian Couder
2026-04-07 11:52   ` [PATCH v2 07/10] promisor-remote: refactor accept_from_server() Christian Couder
2026-04-07 11:52   ` [PATCH v2 08/10] promisor-remote: keep accepted promisor_info structs alive Christian Couder
2026-04-07 11:52   ` [PATCH v2 09/10] promisor-remote: remove the 'accepted' strvec Christian Couder
2026-04-07 11:52   ` [PATCH v2 10/10] t5710: use proper file:// URIs for absolute paths Christian Couder

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ac4evWK9k69LIV91@pks.im \
    --to=ps@pks.im \
    --cc=chriscool@tuxfamily.org \
    --cc=christian.couder@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=karthik.188@gmail.com \
    --cc=me@ttaylorr.com \
    --cc=newren@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox