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

Re: [PATCH v2] builtin/remote.c: teach `-v` to list filters for promisor remotes

From
Junio C Hamano <gitster@pobox.com>
Date
May 4, 2022, 17:10 UTC
Message-ID
<xmqqr159mdfh.fsf@gitster.g>
In-Reply-To
<pull.1227.v2.git.1651591253333.gitgitgadget@gmail.com>

"Abhradeep Chakraborty via GitGitGadget" <gitgitgadget@gmail.com> writes:

Show 12 quoted lines
> diff --git a/Documentation/git-remote.txt b/Documentation/git-remote.txt
> index cde9614e362..71a0e85990d 100644
> --- a/Documentation/git-remote.txt
> +++ b/Documentation/git-remote.txt
> @@ -35,6 +35,9 @@ OPTIONS
>  -v::
>  --verbose::
>  	Be a little more verbose and show remote url after name.
> +  For promisor remotes it will show an extra information
> +  (wrapped in square brackets) describing which filter
> +  (`blob:none` etc.) that promisor remote use.
>  	NOTE: This must be placed between `remote` and subcommand.

Broken indentation. You can save embarrassment by double checking what you committed by sending e-mail to yourself (or checking output from "git show") before sending it to the list.

Show 27 quoted lines
> diff --git a/builtin/remote.c b/builtin/remote.c
> index 5f4cde9d784..d4b69fe7789 100644
> --- a/builtin/remote.c
> +++ b/builtin/remote.c
> @@ -1185,14 +1185,22 @@ static int show_push_info_item(struct string_list_item *item, void *cb_data)
>  static int get_one_entry(struct remote *remote, void *priv)
>  {
>  	struct string_list *list = priv;
> -	struct strbuf url_buf = STRBUF_INIT;
> +	struct strbuf remote_info_buf = STRBUF_INIT;
>  	const char **url;
>  	int i, url_nr;
>  
>  	if (remote->url_nr > 0) {
> -		strbuf_addf(&url_buf, "%s (fetch)", remote->url[0]);
> +		struct strbuf promisor_config = STRBUF_INIT;
> +		const char *partial_clone_filter = NULL;
> +
> +		strbuf_addf(&promisor_config, "remote.%s.partialclonefilter", remote->name);
> +		strbuf_addf(&remote_info_buf, "%s (fetch)", remote->url[0]);
> +		if (!git_config_get_string_tmp(promisor_config.buf, &partial_clone_filter))
> +			strbuf_addf(&remote_info_buf, " [%s]", partial_clone_filter);
> +
> +		strbuf_release(&promisor_config);
>  		string_list_append(list, remote->name)->util =
> -				strbuf_detach(&url_buf, NULL);
> +				strbuf_detach(&remote_info_buf, NULL);

It is unfortunate that the "we borrow without copying" variant of git_config_get_string() is called git_config_get_string_tmp(), which is an utterly misleading name that might confuse readers into mistaking it may make a temporary copy for the caller to release. Perhaps we would want to rename it to git_config_peek_string() or something, but that is totally outside the topic, of course.

In any case, what I wanted to say is that I just made sure that the value in the partial_clone_filter variable is not leaked.

Looking good.
Show 18 quoted lines
> diff --git a/t/t5616-partial-clone.sh b/t/t5616-partial-clone.sh
> index 4a3778d04a8..bf8f3644d3c 100755
> --- a/t/t5616-partial-clone.sh
> +++ b/t/t5616-partial-clone.sh
> @@ -49,6 +49,17 @@ test_expect_success 'do partial clone 1' '
>  	test "$(git -C pc1 config --local remote.origin.partialclonefilter)" = "blob:none"
>  '
>  
> +test_expect_success 'filters for promisor remotes is listed by git remote -v' '
> +	git clone --filter=blob:none "file://$(pwd)/srv.bare" pc2 &&
> +	git -C pc2 remote -v >out &&
> +	grep "[blob:none]" out &&
> +
> +	git -C pc2 config remote.origin.partialCloneFilter object:type=commit &&
> +	git -C pc2 remote -v >out &&
> +	grep "[object:type=commit]" out &&
> +	rm -rf pc2
> +'

I doubt that these "grep" do what you think it is doing. It would say "I am happy" on any line that has one of these characters listed inside the [].

Do not clean up with an extra "&& clean up" step at the end of &&-cascade. Instead use test_when_finished to make sure that after any failure in the cascade the clean-up step would still trigger.

	test_expect_success 'title' '
		test_when_finished "rm -fr pc2" &&
		git clone ... &&
		...
		grep "srv.bare (fetch) \[object:type=commit\]" out
	'
or something.

Having tests that show how this new feature works is of course necessary, but we must have negative tests that ensure that it does *not* trigger when it should not. E.g. the new [filter-spec] should not be given for a remote if the user didn't ask for "-v", or the remote is not a promisor.

Thanks.
Previous: Abhradeep Chakraborty via GitGitGadgetNext: Abhradeep Chakraborty
Message 9 of 26 in “builtin/remote.c: teach `-v` to list filters for promisor remotes”
  1. builtin/remote.c: teach `-v` to list filters for promisor remotesAbhradeep Chakraborty via GitGitGadget, Apr 30, 2022
  2. Junio C HamanoApr 30, 2022
  3. Abhradeep ChakrabortyMay 1, 2022
  4. Junio C HamanoMay 1, 2022
  5. Abhradeep ChakrabortyMay 1, 2022
  6. Philip OakleyMay 2, 2022
  7. Abhradeep ChakrabortyMay 2, 2022
  8. builtin/remote.c: teach `-v` to list filters for promisor remotesAbhradeep Chakraborty via GitGitGadget, May 3, 2022
  9. Junio C HamanoMay 4, 2022
  10. Abhradeep ChakrabortyMay 5, 2022
  11. builtin/remote.c: teach `-v` to list filters for promisor remotesAbhradeep Chakraborty via GitGitGadget, May 7, 2022
  12. Philippe BlainMay 8, 2022
  13. Junio C HamanoMay 9, 2022
  14. Philippe BlainMay 9, 2022
  15. Philippe BlainMay 8, 2022
  16. Abhradeep ChakrabortyMay 9, 2022
  17. builtin/remote.c: teach `-v` to list filters for promisor remotesAbhradeep Chakraborty via GitGitGadget, May 9, 2022
  18. Taylor BlauMay 9, 2022
  19. Philippe BlainMay 9, 2022
  20. Junio C HamanoMay 9, 2022
  21. Abhradeep ChakrabortyMay 13, 2022
  22. Junio C HamanoMay 13, 2022
  23. Abhradeep ChakrabortyMay 16, 2022
  24. Abhradeep ChakrabortyMay 9, 2022
  25. Taylor BlauMay 9, 2022
  26. Abhradeep ChakrabortyMay 9, 2022

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.