]> git.ipfire.org Git - thirdparty/git.git/commitdiff
promisor-remote: add promisor.quiet configuration option
authorTom Hughes <tom@compton.nu>
Sat, 25 May 2024 10:09:27 +0000 (11:09 +0100)
committerJunio C Hamano <gitster@pobox.com>
Sun, 26 May 2024 16:17:08 +0000 (09:17 -0700)
Add a configuration option to allow output from the promisor
fetching objects to be suppressed.

This allows us to stop commands like 'git blame' being swamped
with progress messages and gc notifications from the promisor
when used in a partial clone.

Signed-off-by: Tom Hughes <tom@compton.nu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config.txt
Documentation/config/promisor.txt [new file with mode: 0644]
promisor-remote.c
t/t0410-partial-clone.sh

index 70b448b132628c71ee8807bfef59c1e4e60fc823..6cae835db97f21665c7e492cfc860a9972afff5c 100644 (file)
@@ -487,6 +487,8 @@ include::config/pager.txt[]
 
 include::config/pretty.txt[]
 
+include::config/promisor.txt[]
+
 include::config/protocol.txt[]
 
 include::config/pull.txt[]
diff --git a/Documentation/config/promisor.txt b/Documentation/config/promisor.txt
new file mode 100644 (file)
index 0000000..98c5cb2
--- /dev/null
@@ -0,0 +1,3 @@
+promisor.quiet::
+       If set to "true" assume `--quiet` when fetching additional
+       objects for a partial clone.
index ac3aa1e365760596990188548410a16900e005d7..384cbfea0231ca1344fddceb49dba7c7ab27ad85 100644 (file)
@@ -22,6 +22,7 @@ static int fetch_objects(struct repository *repo,
        struct child_process child = CHILD_PROCESS_INIT;
        int i;
        FILE *child_in;
+       int quiet;
 
        child.git_cmd = 1;
        child.in = -1;
@@ -31,6 +32,8 @@ static int fetch_objects(struct repository *repo,
                     "fetch", remote_name, "--no-tags",
                     "--no-write-fetch-head", "--recurse-submodules=no",
                     "--filter=blob:none", "--stdin", NULL);
+       if (!git_config_get_bool("promisor.quiet", &quiet) && quiet)
+               strvec_push(&child.args, "--quiet");
        if (start_command(&child))
                die(_("promisor-remote: unable to fork off fetch subprocess"));
        child_in = xfdopen(child.in, "w");
index 88a66f09040ce0aa2a3a653579d6c3685e750ba1..8d468eb170007666f6759eae0fab125b889c7709 100755 (executable)
@@ -3,6 +3,7 @@
 test_description='partial clone'
 
 . ./test-lib.sh
+. "$TEST_DIRECTORY"/lib-terminal.sh
 
 # missing promisor objects cause repacks which write bitmaps to fail
 GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP=0
@@ -689,6 +690,48 @@ test_expect_success 'lazy-fetch when accessing object not in the_repository' '
        ! grep "[?]$FILE_HASH" out
 '
 
+test_expect_success 'setup for promisor.quiet tests' '
+       rm -rf server &&
+       test_create_repo server &&
+       test_commit -C server foo &&
+       git -C server rm foo.t &&
+       git -C server commit -m remove &&
+       git -C server config uploadpack.allowanysha1inwant 1 &&
+       git -C server config uploadpack.allowfilter 1
+'
+
+test_expect_success TTY 'promisor.quiet=false shows progress messages' '
+       rm -rf repo &&
+       git clone --filter=blob:none "file://$(pwd)/server" repo &&
+       git -C repo config promisor.quiet "false" &&
+
+       test_terminal git -C repo cat-file -p foo:foo.t 2>err &&
+
+       # Ensure that progress messages are written
+       grep "Receiving objects" err
+'
+
+test_expect_success TTY 'promisor.quiet=true does not show progress messages' '
+       rm -rf repo &&
+       git clone --filter=blob:none "file://$(pwd)/server" repo &&
+       git -C repo config promisor.quiet "true" &&
+
+       test_terminal git -C repo cat-file -p foo:foo.t 2>err &&
+
+       # Ensure that no progress messages are written
+       ! grep "Receiving objects" err
+'
+
+test_expect_success TTY 'promisor.quiet=unconfigured shows progress messages' '
+       rm -rf repo &&
+       git clone --filter=blob:none "file://$(pwd)/server" repo &&
+
+       test_terminal git -C repo cat-file -p foo:foo.t 2>err &&
+
+       # Ensure that progress messages are written
+       grep "Receiving objects" err
+'
+
 . "$TEST_DIRECTORY"/lib-httpd.sh
 start_httpd