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

Re: [PATCH 1/1] multi-pack-index: add --no-progress Add --no-progress option to git multi-pack-index. The progress feature was added in 144d703 ("multi-pack-index: report progress during 'verify'", 2018-09-13) but the ability to opt-out was overlooked.

From
WBWilliam Baker <williamtbakeremail@gmail.com>
Date
Sep 13, 2019, 18:45 UTC
Message-ID
<24c1a9aa-c83b-a984-8821-ecc51a4bc0e2@gmail.com>
In-Reply-To
<xmqqlfutfewv.fsf@gitster-ct.c.googlers.com>
Hi Junio,
Thanks for the review!
On 9/12/19 1:17 PM, Junio C Hamano wrote:
Show 9 quoted lines
>> +'git multi-pack-index' [--object-dir=<dir>] <subcommand> [--[no-]progress]
> 
> I am wondering what the reasoning behind having this new one *after*
> the subcommand while the existing one *before* is.  Isn't the
> --[no-]progress option supported by all subcommands of the
> multi-pack-index command, just like the --object-dir=<dir> option
> is?
> 
> always show "global --options, subcommand, and then subcommand --options" order).

Thanks for calling this out. I didn't have a specific reason for making this option appear after the subcommand. I tried looking at other commands as examples and I missed that there's a specific ordering based on the type of the option. I will clean this up in the next patch.

> I also see in the code that
> handles opts.batch_size that there is a workaround for this inverted
> code structure to make sure subcommands other than repack does not
> allow --batch-size option specified.
> we probably would want to correct the use
> of parse_options() API in the implementation of this command before
> adding any new option or subcommand.

To confirm I understand, is the recommendation that cmd_multi_pack_index be updated to only parse "batch-size" for the repack subcommand (i.e. use PARSE_OPT_STOP_AT_NON_OPTION to parse all of the common options, and then only parse "batch-size" when the repack subcommand is running)?

Show 18 quoted lines
>> @@ -47,14 +54,15 @@ int cmd_multi_pack_index(int argc, const char **argv,
>>  	trace2_cmd_mode(argv[0]);
>>  
>>  	if (!strcmp(argv[0], "repack"))
>> -		return midx_repack(the_repository, opts.object_dir, (size_t)opts.batch_size);
>> +		return midx_repack(the_repository, opts.object_dir, 
>> +			(size_t)opts.batch_size, flags);
>>  	if (opts.batch_size)
>>  		die(_("--batch-size option is only for 'repack' subcommand"));
>>  
>>  	if (!strcmp(argv[0], "write"))
>>  		return write_midx_file(opts.object_dir);
>>  	if (!strcmp(argv[0], "verify"))
>> -		return verify_midx_file(the_repository, opts.object_dir);
>> +		return verify_midx_file(the_repository, opts.object_dir, flags);
>>  	if (!strcmp(argv[0], "expire"))
>>  		return expire_midx_packs(the_repository, opts.object_dir);
> 
Show 9 quoted lines
> We can see that the new option only affects "verify", even though
> the SYNOPSIS and usage text pretends that everybody understands and
> reacts to it.  Shouldn't it be documented just like how --batch-size
> is documented that it is understood only by "repack"?
> 
> If the mid-term aspiration of this patch is to later enhance other
> subcommands to also understand the progress output or verbosity
> option (and if the excuse given as a response to the above analysis
> is "this is just a first step, more will come later")

Yep this was my thinking. Today "repack" and "verify" are the only subcommands that have any progress output but as the other subcommands learn how to provide progress the [--[no-]progress] option can be used to control it.

Show 14 quoted lines
> instead of adding a "unsigned flag" local variable to the function, it would
> probably make much more sense to
> 
>  (1) make struct opts_multi_pack_index as a part of the public API
>      between cmd_multi_pack_index() and midx.c and document it in
>      midx.h;
> 
>  (2) instead of passing opts.object_dir to existing command
>      implementations, pass &opts, the pointer to the whole
>      structure;
> 
>  (3) add a new field "unsigned progress" to the structure, and teach
>      the command line parser to flip it upon seeing "--[no-]progress".
> 
Thanks for this suggestion I'll use this approach in the next patch.

One small point to clarify, in the current struct I'm using an int for "progress" because OPT_BOOL expects an int*. Do you have any concerns with keeping "progress" as an int in the public struct, or would you rather cmd_multi_pack_index parse an int internally and use it to populate the public struct?

Thanks! William

Previous: Junio C HamanoNext: Junio C Hamano
Message 4 of 58 in “multi-pack-index: add --no-progress”
  1. 0/1 multi-pack-index: add --no-progressWilliam Baker via GitGitGadget, Sep 11, 2019
  2. 1/1 multi-pack-index: add --no-progress Add --no-progress option to git multi-pack-index. The progress feature was added in 144d703 ("multi-pack-index: report progress during 'verify'", 2018-09-13) but the ability to opt-out was overlooked.William Baker via GitGitGadget, Sep 11, 2019
  3. Junio C HamanoSep 12, 2019
  4. William BakerSep 13, 2019
  5. Junio C HamanoSep 13, 2019
  6. William BakerSep 16, 2019
  7. Derrick StoleeSep 11, 2019
  8. 0/6 multi-pack-index: add --no-progressWilliam Baker via GitGitGadget, Sep 20, 2019
  9. 1/6 midx: add MIDX_PROGRESS flag Add the MIDX_PROGRESS flag and update the write|verify|expire|repack functions in midx.h to accept a flags parameter. The MIDX_PROGRESS flag indicates whether the caller of the function would like progress information to be displayed. This patch only changes the method prototypes and does not change the functionality. The functionality change will be handled by a later patch.William Baker via GitGitGadget, Sep 20, 2019
  10. Junio C HamanoSep 20, 2019
  11. Junio C HamanoSep 20, 2019
  12. SZEDER GáborSep 21, 2019
  13. William BakerSep 23, 2019
  14. Junio C HamanoSep 28, 2019
  15. William BakerSep 30, 2019
  16. Junio C HamanoOct 2, 2019
  17. Junio C HamanoOct 2, 2019
  18. Junio C HamanoOct 2, 2019
  19. William BakerOct 2, 2019
  20. SZEDER GáborOct 7, 2019
  21. SZEDER GáborOct 7, 2019
  22. Junio C HamanoOct 8, 2019
  23. William BakerOct 8, 2019
  24. SZEDER GáborOct 9, 2019
  25. SZEDER GáborOct 9, 2019
  26. William BakerOct 15, 2019
  27. Junio C HamanoOct 16, 2019
  28. William BakerOct 16, 2019
  29. William BakerOct 18, 2019
  30. 5/6 midx: honor the MIDX_PROGRESS flag in midx_repack Update midx_repack to only display progress when the MIDX_PROGRESS flag is set.William Baker via GitGitGadget, Sep 20, 2019
  31. Junio C HamanoSep 20, 2019
  32. 4/6 midx: honor the MIDX_PROGRESS flag in verify_midx_file Update verify_midx_file to only display progress when the MIDX_PROGRESS flag is set.William Baker via GitGitGadget, Sep 20, 2019
  33. 2/6 midx: add progress to write_midx_file Add progress to write_midx_file. Progress is displayed when the MIDX_PROGRESS flag is set.William Baker via GitGitGadget, Sep 20, 2019
  34. Junio C HamanoSep 20, 2019
  35. William BakerSep 23, 2019
  36. Junio C HamanoSep 28, 2019
  37. William BakerSep 30, 2019
  38. 3/6 midx: add progress to expire_midx_packs Add progress to expire_midx_packs. Progress is displayed when the MIDX_PROGRESS flag is set.William Baker via GitGitGadget, Sep 20, 2019
  39. 6/6 multi-pack-index: add [--[no-]progress] option. Add the --[no-]progress option to git multi-pack-index. Pass the MIDX_PROGRESS flag to the subcommand functions when progress should be displayed by multi-pack-index. The progress feature was added to 'verify' in 144d703 ("multi-pack-index: report progress during 'verify'", 2018-09-13) but some subcommands were not updated to display progress, and the ability to opt-out was overlooked.William Baker via GitGitGadget, Sep 20, 2019
  40. Junio C HamanoSep 20, 2019
  41. William BakerSep 20, 2019
  42. Philip OakleySep 20, 2019
  43. William BakerSep 20, 2019
  44. 0/6 multi-pack-index: add --no-progressWilliam Baker via GitGitGadget, Oct 3, 2019
  45. 1/6 midx: add MIDX_PROGRESS flagWilliam Baker via GitGitGadget, Oct 3, 2019
  46. 3/6 midx: add progress to expire_midx_packsWilliam Baker via GitGitGadget, Oct 3, 2019
  47. 2/6 midx: add progress to write_midx_fileWilliam Baker via GitGitGadget, Oct 3, 2019
  48. 5/6 midx: honor the MIDX_PROGRESS flag in midx_repackWilliam Baker via GitGitGadget, Oct 3, 2019
  49. 4/6 midx: honor the MIDX_PROGRESS flag in verify_midx_fileWilliam Baker via GitGitGadget, Oct 3, 2019
  50. 6/6 multi-pack-index: add [--[no-]progress] option.William Baker via GitGitGadget, Oct 3, 2019
  51. Junio C HamanoOct 3, 2019
  52. 0/6 multi-pack-index: add --no-progressWilliam Baker via GitGitGadget, Oct 21, 2019
  53. 3/6 midx: add progress to expire_midx_packsWilliam Baker via GitGitGadget, Oct 21, 2019
  54. 1/6 midx: add MIDX_PROGRESS flagWilliam Baker via GitGitGadget, Oct 21, 2019
  55. 5/6 midx: honor the MIDX_PROGRESS flag in midx_repackWilliam Baker via GitGitGadget, Oct 21, 2019
  56. 4/6 midx: honor the MIDX_PROGRESS flag in verify_midx_fileWilliam Baker via GitGitGadget, Oct 21, 2019
  57. 6/6 multi-pack-index: add [--[no-]progress] option.William Baker via GitGitGadget, Oct 21, 2019
  58. 2/6 midx: add progress to write_midx_fileWilliam Baker via GitGitGadget, Oct 21, 2019

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.