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

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

From
Abhradeep Chakraborty via GitGitGadget <gitgitgadget@gmail.com>
Date
May 9, 2022, 11:32 UTC
Message-ID
<pull.1227.v4.git.1652095969026.gitgitgadget@gmail.com>
In-Reply-To
<pull.1227.v3.git.1651933221216.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.
Closes: https://github.com/gitgitgadget/git/issues/1211
Signed-off-by: Abhradeep Chakraborty <chakrabortyabhradeep79@gmail.com>
---
    builtin/remote.c: teach -v to list filters for promisor remotes
    
    Fixes #1211 [1]
    
    Changes since v3:
    
     * tests are moved to t5505-remote.sh
     * Documentation improved
     * Added Closes trailer in the commit message
    
    Changes since v2:
    
     * added more test cases
     * fixed broken indentations
    
    Changes since v1:
    
     * updated documentation
     * renamed url_buf into remote_info_buf
    
    [1] https://github.com/gitgitgadget/git/issues/1211
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1227%2FAbhra303%2Fpromisor_remote-v4
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1227/Abhra303/promisor_remote-v4
Pull-Request: https://github.com/gitgitgadget/git/pull/1227
Range-diff vs v3:
 1:  9ac6ca9a08e ! 1:  a067435285b builtin/remote.c: teach `-v` to list filters for promisor remotes
     @@ Commit message
          builtin/remote.c: teach `-v` to list filters for promisor remotes
      
          `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
     +    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]
     @@ Commit message
      
          Teach `git remote -v` to also specify the filters for promisor remotes.
      
     +    Closes: https://github.com/gitgitgadget/git/issues/1211
          Signed-off-by: Abhradeep Chakraborty <chakrabortyabhradeep79@gmail.com>
      
       ## Documentation/git-remote.txt ##
     @@ 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, also show which filter (`blob:none` etc.)
     ++	are configured.
       	NOTE: This must be placed between `remote` and subcommand.
       
       
     @@ builtin/remote.c: static int get_one_entry(struct remote *remote, void *priv)
       
       	return 0;
      
     - ## t/t5616-partial-clone.sh ##
     -@@ t/t5616-partial-clone.sh: test_expect_success 'do partial clone 1' '
     - 	test "$(git -C pc1 config --local remote.origin.partialclonefilter)" = "blob:none"
     + ## t/t5505-remote.sh ##
     +@@ t/t5505-remote.sh: test_expect_success 'add another remote' '
     + 	)
       '
       
     ++test_expect_success 'setup bare clone for server' '
     ++	git clone --bare "file://$(pwd)/one" srv.bare &&
     ++	git -C srv.bare config --local uploadpack.allowfilter 1 &&
     ++	git -C srv.bare config --local uploadpack.allowanysha1inwant 1
     ++'
     ++
      +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 &&
     ++	test_when_finished "rm -rf pc" &&
     ++	git clone --filter=blob:none "file://$(pwd)/srv.bare" pc &&
     ++	git -C pc 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 &&
     ++	git -C pc config remote.origin.partialCloneFilter object:type=commit &&
     ++	git -C pc 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 &&
     ++	test_when_finished "rm -rf pc" &&
     ++	git clone one pc &&
     ++	git -C pc 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 &&
     ++	test_when_finished "rm -rf pc" &&
     ++	git clone --filter=blob:none "file://$(pwd)/srv.bare" pc &&
     ++	git -C pc remote >out &&
      +	! grep "\[blob:none\]" out &&
      +
     -+	git -C pc2 remote show >out &&
     ++	git -C pc 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 &&
     + test_expect_success 'check remote-tracking' '
     + 	(
     + 		cd test &&
 Documentation/git-remote.txt |  2 ++
 builtin/remote.c             | 18 +++++++++++++-----
 t/t5505-remote.sh            | 34 ++++++++++++++++++++++++++++++++++
 3 files changed, 49 insertions(+), 5 deletions(-)
diff --git a/Documentation/git-remote.txt b/Documentation/git-remote.txt
index cde9614e362..1dec3148348 100644
--- a/Documentation/git-remote.txt
+++ b/Documentation/git-remote.txt
@@ -35,6 +35,8 @@ OPTIONS
 -v::
 --verbose::
 	Be a little more verbose and show remote url after name.
+	For promisor remotes, also show which filter (`blob:none` etc.)
+	are configured.
 	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/t5505-remote.sh b/t/t5505-remote.sh
index c90cf47acdb..fff14e13ed4 100755
--- a/t/t5505-remote.sh
+++ b/t/t5505-remote.sh
@@ -78,6 +78,40 @@ test_expect_success 'add another remote' '
 	)
 '
 
+test_expect_success 'setup bare clone for server' '
+	git clone --bare "file://$(pwd)/one" srv.bare &&
+	git -C srv.bare config --local uploadpack.allowfilter 1 &&
+	git -C srv.bare config --local uploadpack.allowanysha1inwant 1
+'
+
+test_expect_success 'filters for promisor remotes are listed by git remote -v' '
+	test_when_finished "rm -rf pc" &&
+	git clone --filter=blob:none "file://$(pwd)/srv.bare" pc &&
+	git -C pc remote -v >out &&
+	grep "srv.bare (fetch) \[blob:none\]" out &&
+
+	git -C pc config remote.origin.partialCloneFilter object:type=commit &&
+	git -C pc 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 pc" &&
+	git clone one pc &&
+	git -C pc remote -v >out &&
+	! grep "(fetch) \[.*\]" out
+'
+
+test_expect_success 'filters are listed by git remote -v only' '
+	test_when_finished "rm -rf pc" &&
+	git clone --filter=blob:none "file://$(pwd)/srv.bare" pc &&
+	git -C pc remote >out &&
+	! grep "\[blob:none\]" out &&
+
+	git -C pc remote show >out &&
+	! grep "\[blob:none\]" out
+'
+
 test_expect_success 'check remote-tracking' '
 	(
 		cd test &&

base-commit: 0f828332d5ac36fc63b7d8202652efa152809856
-- 
gitgitgadget
Previous: Abhradeep ChakrabortyNext: Taylor Blau
Message 17 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.