mbox series

[v8,00/15] add git-bugreport tool

Message ID 20200220015858.181086-1-emilyshaffer@google.com (mailing list archive)
Headers show
Series add git-bugreport tool | expand

Message

Emily Shaffer Feb. 20, 2020, 1:58 a.m. UTC
No longer relies on any topic branches, since mr/show-config-scope is
merged. Range-diff at the bottom of the cover letter.

Since v7:
 - Dropped some POSIX regex magic in
   generate-bugreport-config-safelist.sh.
 - Added some advice in doc for scenarios when git-bugreport may not run
   nicely
 - Quit using unusual "return -foo(bar)" and start using "return
   !!foo(bar)"
 - Add a test to ensure path creation works outside of a git dir
 - Add some GNUC and GNUC_MINOR reporting
 - Use git_cmd instead of hardcoding "git" as the first arg when
   invoking another process
 - Fix some pesky whitespace

Thanks.
 - Emily

Emily Shaffer (15):
  help: move list_config_help to builtin/help
  help: add shell-path to --build-options
  bugreport: add tool to generate debugging info
  bugreport: gather git version and build info
  bugreport: add uname info
  bugreport: add compiler info
  bugreport: add git-remote-https version
  bugreport: include user interactive shell
  bugreport: generate config safelist based on docs
  bugreport: add config values from safelist
  bugreport: collect list of populated hooks
  bugreport: count loose objects
  bugreport: add packed object summary
  bugreport: list contents of $OBJDIR/info
  bugreport: summarize contents of alternates file

 .gitignore                              |   3 +
 Documentation/asciidoc.conf             |   9 +
 Documentation/asciidoctor-extensions.rb |   7 +
 Documentation/config/sendemail.txt      |  56 ++--
 Documentation/git-bugreport.txt         |  60 ++++
 Makefile                                |  27 +-
 bugreport.c                             | 418 ++++++++++++++++++++++++
 builtin/help.c                          |  86 +++++
 command-list.txt                        |   1 +
 compat/compiler.h                       |  27 ++
 generate-bugreport-config-safelist.sh   |  18 +
 generate-cmdlist.sh                     |  19 --
 generate-configlist.sh                  |  21 ++
 help.c                                  | 132 ++------
 help.h                                  |   2 +-
 object-store.h                          |   6 +
 packfile.c                              |   3 +-
 remote-curl.c                           |   8 +
 t/t0091-bugreport.sh                    |  61 ++++
 19 files changed, 808 insertions(+), 156 deletions(-)
 create mode 100644 Documentation/git-bugreport.txt
 create mode 100644 bugreport.c
 create mode 100644 compat/compiler.h
 create mode 100755 generate-bugreport-config-safelist.sh
 create mode 100755 generate-configlist.sh
 create mode 100755 t/t0091-bugreport.sh


 1:  429c7e093b =  1:  69f54afc6b help: move list_config_help to builtin/help
 2:  0cfb24f878 =  2:  9ea1c3ab34 help: add shell-path to --build-options
 3:  02bb151176 !  3:  8a290b5445 bugreport: add tool to generate debugging info
    @@ Documentation/git-bugreport.txt (new)
     + - Expected behavior
     + - Actual behavior
     +
    ++This tool is invoked via the typical Git setup process, which means that in some
    ++cases, it might not be able to launch - for example, if a relevant config file
    ++is unreadable. In this kind of scenario, it may be helpful to manually gather
    ++the kind of information listed above when manually asking for help.
    ++
     +OPTIONS
     +-------
     +-o <path>::
    @@ bugreport.c (new)
     +
     +	UNLEAK(buffer);
     +	UNLEAK(report_path);
    -+	return -launch_editor(report_path.buf, NULL, NULL);
    ++	return !!launch_editor(report_path.buf, NULL, NULL);
     +}
     
      ## command-list.txt ##
    @@ t/t0091-bugreport.sh (new)
     +	test_when_finished rm non-repo/git-bugreport-*
     +'
     +
    ++test_expect_success 'can create leading directories outside of a git dir' '
    ++	nongit git bugreport -o foo/bar/baz &&
    ++	test_when_finished rm -fr foo/bar/baz
    ++'
    ++
    ++
     +test_done
 4:  463612e409 !  4:  4eb4a7aef3 bugreport: gather git version and build info
    @@ Documentation/git-bugreport.txt: The following information is requested from the
     +
     + - 'git version --build-options'
     +
    - OPTIONS
    - -------
    - -o <path>::
    + This tool is invoked via the typical Git setup process, which means that in some
    + cases, it might not be able to launch - for example, if a relevant config file
    + is unreadable. In this kind of scenario, it may be helpful to manually gather
     
      ## bugreport.c ##
     @@
 5:  85e11ea125 !  5:  4e18b4678e bugreport: add uname info
    @@ Documentation/git-bugreport.txt: The following information is requested from the
       - 'git version --build-options'
     + - uname sysname, release, version, and machine strings
      
    - OPTIONS
    - -------
    + This tool is invoked via the typical Git setup process, which means that in some
    + cases, it might not be able to launch - for example, if a relevant config file
     
      ## bugreport.c ##
     @@
 6:  d9eafbaa48 !  6:  c18d17443d bugreport: add compiler info
    @@ Documentation/git-bugreport.txt: The following information is captured automatic
       - uname sysname, release, version, and machine strings
     + - Compiler-specific info string
      
    - OPTIONS
    - -------
    + This tool is invoked via the typical Git setup process, which means that in some
    + cases, it might not be able to launch - for example, if a relevant config file
     
      ## bugreport.c ##
     @@
    @@ compat/compiler.h (new)
     +
     +static inline void get_compiler_info(struct strbuf *info)
     +{
    -+	strbuf_addf(info, "glibc: %s", gnu_get_libc_version());
    ++	strbuf_addf(info, "glibc: %s\n", gnu_get_libc_version());
    ++#ifdef __GNUC__
    ++	strbuf_addf(info, "gnuc: %d.%d\n", __GNUC__, __GNUC_MINOR__);
    ++#endif
     +}
     +
     +#else
 7:  f5b6dd4174 !  7:  6d807cf857 bugreport: add git-remote-https version
    @@ Documentation/git-bugreport.txt: The following information is captured automatic
       - Compiler-specific info string
     + - 'git remote-https --build-info'
      
    - OPTIONS
    - -------
    + This tool is invoked via the typical Git setup process, which means that in some
    + cases, it might not be able to launch - for example, if a relevant config file
     
      ## bugreport.c ##
     @@
    @@ bugreport.c
     +{
     +	struct child_process cp = CHILD_PROCESS_INIT;
     +
    -+	argv_array_push(&cp.args, "git");
    ++	cp.git_cmd = 1;
     +	argv_array_push(&cp.args, "remote-https");
     +	argv_array_push(&cp.args, "--build-info");
     +	if (capture_command(&cp, version_info, 0))
 8:  3119c9c1e3 !  8:  f85e1b69d0 bugreport: include user interactive shell
    @@ Documentation/git-bugreport.txt: The following information is captured automatic
       - 'git remote-https --build-info'
     + - $SHELL
      
    - OPTIONS
    - -------
    + This tool is invoked via the typical Git setup process, which means that in some
    + cases, it might not be able to launch - for example, if a relevant config file
     
      ## bugreport.c ##
     @@ bugreport.c: static void get_git_remote_https_version_info(struct strbuf *version_info)
 9:  c35bab2735 !  9:  9980728360 bugreport: generate config safelist based on docs
    @@ generate-bugreport-config-safelist.sh (new)
     +# cat all regular files in Documentation/config
     +find Documentation/config -type f -exec cat {} \; |
     +# print the command name which matches the annotate-bugreport macro
    -+sed -n 's/^\([^[:blank:]]*\)[[:blank:]]\{1,\}annotate:bugreport\[include\].* ::$/  "\1",/p' \
    ++sed -n 's/^\([^ ]*\)  *annotate:bugreport\[include\].* ::$/  "\1",/p' \
     +	| sort
     +
     +cat <<EOF
10:  8a54ebdbbb ! 10:  e9cd8ffec9 bugreport: add config values from safelist
    @@ Documentation/git-bugreport.txt: The following information is captured automatic
       - $SHELL
     + - Selected config values
      
    - OPTIONS
    - -------
    + This tool is invoked via the typical Git setup process, which means that in some
    + cases, it might not be able to launch - for example, if a relevant config file
     
      ## Makefile ##
     @@ Makefile: git$X: git.o GIT-LDFLAGS $(BUILTIN_OBJS) $(GITLIBS)
11:  8bb5bcd8b8 ! 11:  881b62369d bugreport: collect list of populated hooks
    @@ Documentation/git-bugreport.txt: The following information is captured automatic
       - Selected config values
     + - A list of enabled hooks
      
    - OPTIONS
    - -------
    + This tool is invoked via the typical Git setup process, which means that in some
    + cases, it might not be able to launch - for example, if a relevant config file
     
      ## bugreport.c ##
     @@
12:  744dd6aeee ! 12:  715e48e9a7 bugreport: count loose objects
    @@ Documentation/git-bugreport.txt: The following information is captured automatic
       - A list of enabled hooks
     + - The number of loose objects in the repository
      
    - OPTIONS
    - -------
    + This tool is invoked via the typical Git setup process, which means that in some
    + cases, it might not be able to launch - for example, if a relevant config file
     
      ## bugreport.c ##
     @@
13:  2f23e272bf ! 13:  c9e2f1f1d8 bugreport: add packed object summary
    @@ Documentation/git-bugreport.txt: The following information is captured automatic
       - The number of loose objects in the repository
     + - The number of packs and packed objects in the repository
      
    - OPTIONS
    - -------
    + This tool is invoked via the typical Git setup process, which means that in some
    + cases, it might not be able to launch - for example, if a relevant config file
     
      ## bugreport.c ##
     @@ bugreport.c: static void get_loose_object_summary(struct strbuf *obj_info, int nongit) {
    @@ bugreport.c: int cmd_main(int argc, const char **argv)
     
      ## object-store.h ##
     @@
    - #include "list.h"
      #include "sha1-array.h"
      #include "strbuf.h"
    + #include "thread-utils.h"
     +#include "packfile.h"
      
      struct object_directory {
14:  7b5ae1aca1 ! 14:  89762a0de1 bugreport: list contents of $OBJDIR/info
    @@ Documentation/git-bugreport.txt: The following information is captured automatic
       - The number of packs and packed objects in the repository
     + - A list of the contents of .git/objects/info (or equivalent)
      
    - OPTIONS
    - -------
    + This tool is invoked via the typical Git setup process, which means that in some
    + cases, it might not be able to launch - for example, if a relevant config file
     
      ## bugreport.c ##
     @@ bugreport.c: static void get_packed_object_summary(struct strbuf *obj_info, int nongit)
    @@ bugreport.c: static void get_packed_object_summary(struct strbuf *obj_info, int
      }
      
     +static void list_contents_of_dir_recursively(struct strbuf *contents,
    -+				      	     struct strbuf *dirpath)
    ++					     struct strbuf *dirpath)
     +{
     +	struct dirent *d;
     +	DIR *dir;
15:  315b00ed54 ! 15:  aa81e197aa bugreport: summarize contents of alternates file
    @@ Documentation/git-bugreport.txt: The following information is captured automatic
       - A list of the contents of .git/objects/info (or equivalent)
     + - The number of valid and invalid alternates
      
    - OPTIONS
    - -------
    + This tool is invoked via the typical Git setup process, which means that in some
    + cases, it might not be able to launch - for example, if a relevant config file
     
      ## bugreport.c ##
     @@ bugreport.c: static void get_object_info_summary(struct strbuf *obj_info, int nongit)