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

Re: [PATCH v2 08/10] builtin/bugreport.c: create '--diagnose' option

From
Derrick Stolee <derrickstolee@github.com>
Date
Aug 5, 2022, 19:35 UTC
Message-ID
<3dc402e1-1f27-8a24-544d-d90d403a7da0@github.com>
In-Reply-To
<d81e7c10997e9e8dc211d241019fbafa6b25fb04.1659577543.git.gitgitgadget@gmail.com>
On 8/3/2022 9:45 PM, Victoria Dye via GitGitGadget wrote:
> From: Victoria Dye <vdye@github.com>
> +--diagnose[=(basic|all)]::
> +	Create a zip archive of information about the repository including logs

logs? I think the reflogs are not included unless "all" is specified. Perhaps we can unify this description with the beginning of git-diagnose.txt:

  Collects detailed information about the user's machine, Git client, and
  repository state and packages that information into a zip archive.
resulting in
	Create a zip archive containing information about the user's machine,
	Git client, and repository state.
Show 10 quoted lines
> +	and certain statistics describing the data shape of the repository. The
> +	archive is written to the same output directory as the bug report and is
> +	named 'git-diagnostics-<formatted suffix>'.
> ++
> +By default, `--diagnose` (equivalent to `--diagnose=basic`) will collect only
> +statistics and summarized data about the repository and filesystem. Specifying
> +`--diagnose=all` will create an archive with the same contents generated by `git
> +diagnose --all`; this archive will be much larger, and will contain potentially
> +sensitive information about the repository. See linkgit:git-diagnose[1] for more
> +details on the contents of the diagnostic archive.

Perhaps here (and git-diagnose.txt) should be really explicit about sharing the "all" mode output only with trusted parties. Let the user decide what level of trust is necessary depending on their situation (we don't need to say "open source repos are fine to share" or something).

Show 5 quoted lines
> +enum diagnose_mode {
> +	DIAGNOSE_NONE,
> +	DIAGNOSE_BASIC,
> +	DIAGNOSE_ALL
> +};

This enum makes me think that it might be nice to use this in diagnose.h along with an array that pairs strings with the enum. We could unify the options by having 'git diagnose --mode=(basic|all)' which could be extended in the future with another mode that might be in between the two.

It may also be a waste of time to set up that infrastructure without it actually mattering in the future, but I thought I'd mention it as an alternative, in case that inspires you.

Show 17 quoted lines
>  static void get_system_info(struct strbuf *sys_info)
>  {
> @@ -91,6 +97,23 @@ static void get_header(struct strbuf *buf, const char *title)
>  	strbuf_addf(buf, "\n\n[%s]\n", title);
>  }
>  
> +static int option_parse_diagnose(const struct option *opt,
> +				 const char *arg, int unset)
> +{
> +	enum diagnose_mode *diagnose = opt->value;
> +
> +	BUG_ON_OPT_NEG(unset);
> +
> +	if (!arg || !strcmp(arg, "basic"))
> +		*diagnose = DIAGNOSE_BASIC;
> +	else if (!strcmp(arg, "all"))
> +		*diagnose = DIAGNOSE_ALL;
Should we allow "none" to reset the value to DIAGNOSE_NONE?
> +	else
> +		die(_("diagnose mode must be either 'basic' or 'all'"));

I wondered initially if this should be a usage() call instead. But we have plenty of examples of using die() to report an issue with a single option or a combination of options.

>  	const struct option bugreport_options[] = {
> +		OPT_CALLBACK_F(0, "diagnose", &diagnose, N_("(basic|all)"),
> +			       N_("create an additional zip archive of detailed diagnostics"),
> +			       PARSE_OPT_NONEG | PARSE_OPT_OPTARG, option_parse_diagnose),

The biggest reason for this to be an OPT_CALLBACK_F is because of the '--diagnose' option (without '='), so an OPT_STRING would not be appropriate here.

Show 5 quoted lines
> @@ -119,6 +147,7 @@ int cmd_bugreport(int argc, const char **argv, const char *prefix)
>  					    option_output ? option_output : "");
>  	strbuf_addstr(&report_path, prefixed_filename);
>  	strbuf_complete(&report_path, '/');
> +	output_path_len = report_path.len;

Perhaps this should be renamed to output_dir_len, since we know this is a directory that will contain all of the output files.

Show 9 quoted lines
> +	/* Prepare diagnostics, if requested */
> +	if (diagnose != DIAGNOSE_NONE) {
> +		struct strbuf zip_path = STRBUF_INIT;
> +		strbuf_add(&zip_path, report_path.buf, output_path_len);
> +		strbuf_addstr(&zip_path, "git-diagnostics-");
> +		strbuf_addftime(&zip_path, option_suffix, localtime_r(&now, &tm), 0, 0);
> +		strbuf_addstr(&zip_path, ".zip");
> +
> +		if (create_diagnostics_archive(&zip_path, diagnose == DIAGNOSE_ALL))

(Just pausing to say this could be create_diagnostics_archive(&zip_path, diagnose) if we use the enum inside diagnose.c.

Thanks, -Stolee

Previous: Victoria Dye via GitGitGadgetNext: Victoria Dye
Message 49 of 94 in “Generalize 'scalar diagnose' into 'git bugreport --diagnose'”
  1. 0/7 Generalize 'scalar diagnose' into 'git bugreport --diagnose'Victoria Dye via GitGitGadget, Aug 1, 2022
  2. 1/7 scalar: use "$GIT_UNZIP" in 'scalar diagnose' testVictoria Dye via GitGitGadget, Aug 1, 2022
  3. Junio C HamanoAug 1, 2022
  4. 2/7 builtin/bugreport.c: create '--diagnose' optionVictoria Dye via GitGitGadget, Aug 1, 2022
  5. Junio C HamanoAug 1, 2022
  6. Victoria DyeAug 2, 2022
  7. Ævar Arnfjörð BjarmasonAug 2, 2022
  8. 3/7 builtin/bugreport.c: avoid size_t overflowVictoria Dye via GitGitGadget, Aug 1, 2022
  9. Junio C HamanoAug 1, 2022
  10. Victoria DyeAug 2, 2022
  11. Junio C HamanoAug 2, 2022
  12. Ævar Arnfjörð BjarmasonAug 2, 2022
  13. Victoria DyeAug 2, 2022
  14. Ævar Arnfjörð BjarmasonAug 3, 2022
  15. 4/7 builtin/bugreport.c: add directory to archiver more gentlyVictoria Dye via GitGitGadget, Aug 1, 2022
  16. Junio C HamanoAug 1, 2022
  17. Victoria DyeAug 2, 2022
  18. 5/7 builtin/bugreport.c: add '--no-report' optionVictoria Dye via GitGitGadget, Aug 1, 2022
  19. Junio C HamanoAug 1, 2022
  20. Victoria DyeAug 2, 2022
  21. 6/7 scalar: use 'git bugreport --diagnose' in 'scalar diagnose'Victoria Dye via GitGitGadget, Aug 1, 2022
  22. 7/7 scalar: update technical doc roadmapVictoria Dye via GitGitGadget, Aug 1, 2022
  23. Junio C HamanoAug 1, 2022
  24. Ævar Arnfjörð BjarmasonAug 2, 2022
  25. Victoria DyeAug 2, 2022
  26. Ævar Arnfjörð BjarmasonAug 3, 2022
  27. 00/10 Generalize 'scalar diagnose' into 'git diagnose' and 'git bugreport --diagnose'Victoria Dye via GitGitGadget, Aug 4, 2022
  28. 01/10 scalar-diagnose: use "$GIT_UNZIP" in testVictoria Dye via GitGitGadget, Aug 4, 2022
  29. 02/10 scalar-diagnose: avoid 32-bit overflow of size_tVictoria Dye via GitGitGadget, Aug 4, 2022
  30. 03/10 scalar-diagnose: add directory to archiver more gentlyVictoria Dye via GitGitGadget, Aug 4, 2022
  31. Ævar Arnfjörð BjarmasonAug 4, 2022
  32. Junio C HamanoAug 4, 2022
  33. Ævar Arnfjörð BjarmasonAug 4, 2022
  34. Junio C HamanoAug 4, 2022
  35. 04/10 scalar-diagnose: move 'get_disk_info()' to 'compat/'Victoria Dye via GitGitGadget, Aug 4, 2022
  36. 06/10 builtin/diagnose.c: create 'git diagnose' builtinVictoria Dye via GitGitGadget, Aug 4, 2022
  37. Ævar Arnfjörð BjarmasonAug 4, 2022
  38. Derrick StoleeAug 5, 2022
  39. Ævar Arnfjörð BjarmasonAug 11, 2022
  40. Derrick StoleeAug 5, 2022
  41. 05/10 scalar-diagnose: move functionality to common locationVictoria Dye via GitGitGadget, Aug 4, 2022
  42. Ævar Arnfjörð BjarmasonAug 4, 2022
  43. 07/10 builtin/diagnose.c: gate certain data behind '--all'Victoria Dye via GitGitGadget, Aug 4, 2022
  44. Ævar Arnfjörð BjarmasonAug 4, 2022
  45. 09/10 scalar-diagnose: use 'git diagnose --all'Victoria Dye via GitGitGadget, Aug 4, 2022
  46. Ævar Arnfjörð BjarmasonAug 4, 2022
  47. Victoria DyeAug 9, 2022
  48. 08/10 builtin/bugreport.c: create '--diagnose' optionVictoria Dye via GitGitGadget, Aug 4, 2022
  49. Derrick StoleeAug 5, 2022
  50. Victoria DyeAug 9, 2022
  51. Derrick StoleeAug 10, 2022
  52. Victoria DyeAug 10, 2022
  53. Derrick StoleeAug 10, 2022
  54. 10/10 scalar: update technical doc roadmapVictoria Dye via GitGitGadget, Aug 4, 2022
  55. Junio C HamanoAug 4, 2022
  56. Victoria DyeAug 9, 2022
  57. Junio C HamanoAug 9, 2022
  58. 00/11 Generalize 'scalar diagnose' into 'git diagnose' and 'git bugreport --diagnose'Victoria Dye via GitGitGadget, Aug 10, 2022
  59. 01/11 scalar-diagnose: use "$GIT_UNZIP" in testVictoria Dye via GitGitGadget, Aug 10, 2022
  60. 02/11 scalar-diagnose: avoid 32-bit overflow of size_tVictoria Dye via GitGitGadget, Aug 10, 2022
  61. 03/11 scalar-diagnose: add directory to archiver more gentlyVictoria Dye via GitGitGadget, Aug 10, 2022
  62. 04/11 scalar-diagnose: move 'get_disk_info()' to 'compat/'Victoria Dye via GitGitGadget, Aug 10, 2022
  63. 05/11 scalar-diagnose: move functionality to common locationVictoria Dye via GitGitGadget, Aug 10, 2022
  64. 07/11 builtin/diagnose.c: create 'git diagnose' builtinVictoria Dye via GitGitGadget, Aug 10, 2022
  65. 06/11 diagnose.c: add option to configure archive contentsVictoria Dye via GitGitGadget, Aug 10, 2022
  66. Junio C HamanoAug 11, 2022
  67. Victoria DyeAug 12, 2022
  68. Ævar Arnfjörð BjarmasonAug 11, 2022
  69. Victoria DyeAug 11, 2022
  70. 09/11 builtin/bugreport.c: create '--diagnose' optionVictoria Dye via GitGitGadget, Aug 10, 2022
  71. Ævar Arnfjörð BjarmasonAug 11, 2022
  72. Victoria DyeAug 11, 2022
  73. Ævar Arnfjörð BjarmasonAug 11, 2022
  74. 08/11 builtin/diagnose.c: add '--mode' optionVictoria Dye via GitGitGadget, Aug 10, 2022
  75. 10/11 scalar-diagnose: use 'git diagnose --mode=all'Victoria Dye via GitGitGadget, Aug 10, 2022
  76. 11/11 scalar: update technical doc roadmapVictoria Dye via GitGitGadget, Aug 10, 2022
  77. 00/11 Generalize 'scalar diagnose' into 'git diagnose' and 'git bugreport --diagnose'Victoria Dye via GitGitGadget, Aug 12, 2022
  78. 01/11 scalar-diagnose: use "$GIT_UNZIP" in testVictoria Dye via GitGitGadget, Aug 12, 2022
  79. 02/11 scalar-diagnose: avoid 32-bit overflow of size_tVictoria Dye via GitGitGadget, Aug 12, 2022
  80. 03/11 scalar-diagnose: add directory to archiver more gentlyVictoria Dye via GitGitGadget, Aug 12, 2022
  81. 04/11 scalar-diagnose: move 'get_disk_info()' to 'compat/'Victoria Dye via GitGitGadget, Aug 12, 2022
  82. 05/11 scalar-diagnose: move functionality to common locationVictoria Dye via GitGitGadget, Aug 12, 2022
  83. Junio C HamanoAug 12, 2022
  84. Victoria DyeAug 12, 2022
  85. Junio C HamanoAug 12, 2022
  86. 06/11 diagnose.c: add option to configure archive contentsVictoria Dye via GitGitGadget, Aug 12, 2022
  87. Junio C HamanoAug 12, 2022
  88. 07/11 builtin/diagnose.c: create 'git diagnose' builtinVictoria Dye via GitGitGadget, Aug 12, 2022
  89. Ævar Arnfjörð BjarmasonAug 18, 2022
  90. Junio C HamanoAug 18, 2022
  91. 09/11 builtin/bugreport.c: create '--diagnose' optionVictoria Dye via GitGitGadget, Aug 12, 2022
  92. 10/11 scalar-diagnose: use 'git diagnose --mode=all'Victoria Dye via GitGitGadget, Aug 12, 2022
  93. 08/11 builtin/diagnose.c: add '--mode' optionVictoria Dye via GitGitGadget, Aug 12, 2022
  94. 11/11 scalar: update technical doc roadmapVictoria Dye via GitGitGadget, Aug 12, 2022

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.