Re: [PATCH v2] scalar: show progress if stderr refer to a terminal
- From
ZheNing Hu <adlternative@gmail.com>
- Date
- Jan 11, 2023, 11:59 UTC
- Message-ID
- <CAOLTT8Q6sOkDLm7pnkJ6e7mi4MDu6PYKD6vSd0NZbO9qAWkFmw@mail.gmail.com>
- In-Reply-To
- <1f8493b0-3f96-c616-1e4e-98b6ed33e8c4@github.com>
Derrick Stolee <derrickstolee@github.com> 于2023年1月6日周五 03:19写道:
Show 6 quoted lines
> > 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. >
Ah, It's okay.
Show 15 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. >
Yes, but I think something like `--quiet` is difficult to implement. We cannot just add `--no-progress` or `--quiet` to the git checkout for suppressing the progress. Because git checkout will not use it to suppress the fetch progress, but only the checkout's progress.
Show 36 quoted lines
> > + int full_clone = 0, single_branch = 0, show_progress = isatty(2);
>
> > - 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.
>
> > +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.
>Oh, good suggestion. I should also use grep without `--count` too.
Show 18 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. >
OK, that makes sense.
Show 9 quoted lines
> > + 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
Thanks, -ZheNing Hu