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

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

From
Abhradeep Chakraborty via GitGitGadget <gitgitgadget@gmail.com>
Date
May 7, 2022, 14:20 UTC
Message-ID
<pull.1227.v3.git.1651933221216.gitgitgadget@gmail.com>
In-Reply-To
<pull.1227.v2.git.1651591253333.gitgitgadget@gmail.com>
From: Abhradeep Chakraborty <chakrabortyabhradeep79@gmail.com>

`git remote -v` (`--verbose`) lists down the names of remotes along with their urls. It would be beneficial for users to also specify the filter types for promisor remotes. Something like this -

	origin	remote-url (fetch) [blob:none]
	origin	remote-url (push)
Teach `git remote -v` to also specify the filters for promisor remotes.
Signed-off-by: Abhradeep Chakraborty <chakrabortyabhradeep79@gmail.com>
---
    builtin/remote.c: teach -v to list filters for promisor remotes
    
    Fixes #1211 [1]
    
    In the previous version, documentation is updated (describing the
    proposed change) and url_buf is renamed into remote_info_buf. In this
    varsion, some more test cases are added and broken indentations are
    fixed.
    
    [1] https://github.com/gitgitgadget/git/issues/1211
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1227%2FAbhra303%2Fpromisor_remote-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1227/Abhra303/promisor_remote-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/1227
Range-diff vs v2:
 1:  e7ced852fd5 ! 1:  9ac6ca9a08e builtin/remote.c: teach `-v` to list filters for promisor remotes
     @@ Documentation/git-remote.txt: 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.
     ++	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.
       
       
     @@ t/t5616-partial-clone.sh: 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' '
     ++test_expect_success 'filters for promisor remotes are listed by git remote -v' '
     ++	test_when_finished "rm -rf pc2" &&
      +	git clone --filter=blob:none "file://$(pwd)/srv.bare" pc2 &&
      +	git -C pc2 remote -v >out &&
     -+	grep "[blob:none]" out &&
     ++	grep "srv.bare (fetch) \[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
     ++	grep "srv.bare (fetch) \[object:type=commit\]" out
     ++'
     ++
     ++test_expect_success 'filters should not be listed for non promisor remotes (remote -v)' '
     ++	test_when_finished "rm -rf pc2" &&
     ++	git clone "file://$(pwd)/srv.bare" pc2 &&
     ++	git -C pc2 remote -v >out &&
     ++	! grep "(fetch) \[.*\]" out
     ++'
     ++
     ++test_expect_success 'filters are listed by git remote -v only' '
     ++	test_when_finished "rm -rf pc2" &&
     ++	git clone --filter=blob:none "file://$(pwd)/srv.bare" pc2 &&
     ++	git -C pc2 remote >out &&
     ++	! grep "\[blob:none\]" out &&
     ++
     ++	git -C pc2 remote show >out &&
     ++	! grep "\[blob:none\]" out
      +'
      +
       test_expect_success 'verify that .promisor file contains refs fetched' '
 Documentation/git-remote.txt |  3 +++
 builtin/remote.c             | 18 +++++++++++++-----
 t/t5616-partial-clone.sh     | 28 ++++++++++++++++++++++++++++
 3 files changed, 44 insertions(+), 5 deletions(-)
diff --git a/Documentation/git-remote.txt b/Documentation/git-remote.txt
index cde9614e362..a125bd839f7 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.
 
 
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);
 	} else
 		string_list_append(list, remote->name)->util = NULL;
 	if (remote->pushurl_nr) {
@@ -1204,9 +1212,9 @@ static int get_one_entry(struct remote *remote, void *priv)
 	}
 	for (i = 0; i < url_nr; i++)
 	{
-		strbuf_addf(&url_buf, "%s (push)", url[i]);
+		strbuf_addf(&remote_info_buf, "%s (push)", url[i]);
 		string_list_append(list, remote->name)->util =
-				strbuf_detach(&url_buf, NULL);
+				strbuf_detach(&remote_info_buf, NULL);
 	}
 
 	return 0;
diff --git a/t/t5616-partial-clone.sh b/t/t5616-partial-clone.sh
index 4a3778d04a8..26756d616cd 100755
--- a/t/t5616-partial-clone.sh
+++ b/t/t5616-partial-clone.sh
@@ -49,6 +49,34 @@ 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 are listed by git remote -v' '
+	test_when_finished "rm -rf pc2" &&
+	git clone --filter=blob:none "file://$(pwd)/srv.bare" pc2 &&
+	git -C pc2 remote -v >out &&
+	grep "srv.bare (fetch) \[blob:none\]" out &&
+
+	git -C pc2 config remote.origin.partialCloneFilter object:type=commit &&
+	git -C pc2 remote -v >out &&
+	grep "srv.bare (fetch) \[object:type=commit\]" out
+'
+
+test_expect_success 'filters should not be listed for non promisor remotes (remote -v)' '
+	test_when_finished "rm -rf pc2" &&
+	git clone "file://$(pwd)/srv.bare" pc2 &&
+	git -C pc2 remote -v >out &&
+	! grep "(fetch) \[.*\]" out
+'
+
+test_expect_success 'filters are listed by git remote -v only' '
+	test_when_finished "rm -rf pc2" &&
+	git clone --filter=blob:none "file://$(pwd)/srv.bare" pc2 &&
+	git -C pc2 remote >out &&
+	! grep "\[blob:none\]" out &&
+
+	git -C pc2 remote show >out &&
+	! grep "\[blob:none\]" out
+'
+
 test_expect_success 'verify that .promisor file contains refs fetched' '
 	ls pc1/.git/objects/pack/pack-*.promisor >promisorlist &&
 	test_line_count = 1 promisorlist &&

base-commit: 0f828332d5ac36fc63b7d8202652efa152809856
-- 
gitgitgadget
Previous: Abhradeep ChakrabortyNext: Philippe Blain
Message 11 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.