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

Re: [PATCH v2] scalar: show progress if stderr refer to a terminal

From
Derrick Stolee <derrickstolee@github.com>
Date
Jan 5, 2023, 19:19 UTC
Message-ID
<1f8493b0-3f96-c616-1e4e-98b6ed33e8c4@github.com>
In-Reply-To
<pull.1441.v2.git.1671974986363.gitgitgadget@gmail.com>
On 12/25/22 8:29 AM, ZheNing Hu via GitGitGadget wrote:
> From: ZheNing Hu <adlternative@gmail.com>
Sorry for the long wait in getting back to reviewing.
Show 8 quoted lines
> Sometimes when users use scalar to download a monorepo
> with a long commit history, they want to check the
> progress bar to know how long they still need to wait
> during the fetch process, but scalar suppresses this
> output by default.
> 
> So let's check whether scalar stderr refer to a terminal,
> if so, show progress, otherwise disable it.

Thanks for updating to this strategy. I think it's an easier change to swallow. We can consider options like --progress, --verbose, or --quiet later while this change does the good work of showing terminal users helpful progress.

> +	int full_clone = 0, single_branch = 0, show_progress = isatty(2);
Show 15 quoted lines
> -	if ((res = run_git("fetch", "--quiet", "origin", NULL))) {
> +	if ((res = run_git("fetch", "--quiet",
> +				show_progress ? "--progress" : "--no-progress",
> +				"origin", NULL))) {
>  		warning(_("partial clone failed; attempting full clone"));
>  
>  		if (set_config("remote.origin.promisor") ||
> @@ -508,7 +510,9 @@ static int cmd_clone(int argc, const char **argv)
>  			goto cleanup;
>  		}
>  
> -		if ((res = run_git("fetch", "--quiet", "origin", NULL)))
> +		if ((res = run_git("fetch", "--quiet",
> +					show_progress ? "--progress" : "--no-progress",
> +					"origin", NULL)))
Implementation looks correct.
Show 8 quoted lines
> +test_expect_success TTY 'progress with tty' '
> +	enlistment=progress1 &&
> +
> +	test_config -C to-clone uploadpack.allowfilter true &&
> +	test_config -C to-clone uploadpack.allowanysha1inwant true &&
> +
> +	test_terminal env GIT_PROGRESS_DELAY=0 \
> +		scalar clone "file://$(pwd)/to-clone" "$enlistment" 2>stderr &&
Thank you for creating this test!
> +	grep --count "Enumerating objects" stderr >actual &&
> +	echo 2 >expected &&
> +	test_cmp expected actual &&
I think you could use "test_line_count = 2 actual" here.
Show 12 quoted lines
> +	cleanup_clone $enlistment
> +'
> +
> +test_expect_success 'progress without tty' '
> +	enlistment=progress2 &&
> +
> +	test_config -C to-clone uploadpack.allowfilter true &&
> +	test_config -C to-clone uploadpack.allowanysha1inwant true &&
> +
> +	scalar clone "file://$(pwd)/to-clone" "$enlistment" 2>stderr &&
> +	! grep "Enumerating objects" stderr &&
> +	! grep "Updating files" stderr &&

Here, it would be good to still have the GIT_PROGRESS_DELAY=0 environment variable on the 'scalar clone' command to be sure we are not getting these lines because progress is turned off and not because it's running too quickly.

> +	cleanup_clone $enlistment
> +'
>  test_done

A nit: there should be an empty line between the end quote of the last test and "test_done".

Thanks, -Stolee

Previous: ZheNing Hu via GitGitGadgetNext: Junio C Hamano
Message 7 of 12 in “scalar: use verbose mode in clone”
  1. scalar: use verbose mode in cloneZheNing Hu via GitGitGadget, Dec 7, 2022
  2. Taylor BlauDec 7, 2022
  3. ZheNing HuDec 8, 2022
  4. Derrick StoleeDec 8, 2022
  5. ZheNing HuDec 13, 2022
  6. scalar: show progress if stderr refer to a terminalZheNing Hu via GitGitGadget, Dec 25, 2022
  7. Derrick StoleeJan 5, 2023
  8. Junio C HamanoJan 6, 2023
  9. ZheNing HuJan 11, 2023
  10. scalar: show progress if stderr refer to a terminalZheNing Hu via GitGitGadget, Jan 11, 2023
  11. Derrick StoleeJan 11, 2023
  12. Junio C HamanoJan 13, 2023

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.