Add a configuration optione 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@xxxxxxxxxx> --- Documentation/config.txt | 2 ++ Documentation/config/promisor.txt | 3 ++ promisor-remote.c | 3 ++ t/t0410-partial-clone.sh | 47 +++++++++++++++++++++++++++++++ 4 files changed, 55 insertions(+) create mode 100644 Documentation/config/promisor.txt diff --git a/Documentation/config.txt b/Documentation/config.txt index 70b448b132..6cae835db9 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -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 index 0000000000..98c5cb2ec2 --- /dev/null +++ b/Documentation/config/promisor.txt @@ -0,0 +1,3 @@ +promisor.quiet:: + If set to "true" assume `--quiet` when fetching additional + objects for a partial clone. diff --git a/promisor-remote.c b/promisor-remote.c index b414922c44..2ca7c2ae48 100644 --- a/promisor-remote.c +++ b/promisor-remote.c @@ -23,6 +23,7 @@ static int fetch_objects(struct repository *repo, struct child_process child = CHILD_PROCESS_INIT; int i; FILE *child_in; + int quiet; if (git_env_bool(NO_LAZY_FETCH_ENVIRONMENT, 0)) { static int warning_shown; @@ -41,6 +42,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"); diff --git a/t/t0410-partial-clone.sh b/t/t0410-partial-clone.sh index 88a66f0904..99257c3792 100755 --- a/t/t0410-partial-clone.sh +++ b/t/t0410-partial-clone.sh @@ -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,52 @@ test_expect_success 'lazy-fetch when accessing object not in the_repository' ' ! grep "[?]$FILE_HASH" out ' +test_expect_success TTY 'promisor.quiet=false works' ' + rm -rf server server2 repo && + rm -rf server server3 repo && + test_create_repo server && + test_commit -C server foo && + git -C server repack -a -d --write-bitmap-index && + + git clone "file://$(pwd)/server" repo && + git hash-object repo/foo.t >blobhash && + rm -rf repo/.git/objects/* && + + git -C server config uploadpack.allowanysha1inwant 1 && + git -C server config uploadpack.allowfilter 1 && + git -C repo config core.repositoryformatversion 1 && + git -C repo config extensions.partialclone "origin" && + git -C repo config promisor.quiet "false" && + + test_terminal git -C repo cat-file -p $(cat blobhash) 2>err && + + # Ensure that progress messages are written + grep "Receiving objects" err +' + +test_expect_success TTY 'promisor.quiet=true works' ' + rm -rf server server2 repo && + rm -rf server server3 repo && + test_create_repo server && + test_commit -C server foo && + git -C server repack -a -d --write-bitmap-index && + + git clone "file://$(pwd)/server" repo && + git hash-object repo/foo.t >blobhash && + rm -rf repo/.git/objects/* && + + git -C server config uploadpack.allowanysha1inwant 1 && + git -C server config uploadpack.allowfilter 1 && + git -C repo config core.repositoryformatversion 1 && + git -C repo config extensions.partialclone "origin" && + git -C repo config promisor.quiet "true" && + + test_terminal git -C repo cat-file -p $(cat blobhash) 2>err && + + # Ensure that no progress messages are written + ! grep "Receiving objects" err +' + . "$TEST_DIRECTORY"/lib-httpd.sh start_httpd -- 2.45.1