Skip to content

create git-bugreport utility #560

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 23 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
69f54af
help: move list_config_help to builtin/help
nasamuffin Nov 20, 2019
9ea1c3a
help: add shell-path to --build-options
nasamuffin Dec 11, 2019
8a290b5
bugreport: add tool to generate debugging info
nasamuffin Oct 10, 2019
4eb4a7a
bugreport: gather git version and build info
nasamuffin Nov 8, 2019
4e18b46
bugreport: add uname info
nasamuffin Nov 14, 2019
c18d174
bugreport: add compiler info
nasamuffin Nov 14, 2019
6d807cf
bugreport: add git-remote-https version
nasamuffin Nov 14, 2019
f85e1b6
bugreport: include user interactive shell
nasamuffin Dec 11, 2019
9980728
bugreport: generate config safelist based on docs
nasamuffin Aug 16, 2019
e9cd8ff
bugreport: add config values from safelist
nasamuffin Oct 10, 2019
881b623
bugreport: collect list of populated hooks
nasamuffin Oct 14, 2019
715e48e
bugreport: count loose objects
nasamuffin Dec 11, 2019
c9e2f1f
bugreport: add packed object summary
nasamuffin Oct 22, 2019
89762a0
bugreport: list contents of $OBJDIR/info
nasamuffin Oct 22, 2019
aa81e19
bugreport: summarize contents of alternates file
nasamuffin Oct 25, 2019
fddc0d4
fixup: use open() instead of fopen_for_writing()
nasamuffin Feb 20, 2020
ed10318
fixup: access-after-free in first bugreport commit
nasamuffin Feb 20, 2020
eb9e472
fixup more stuff for open() instead of fopen_on_write()
nasamuffin Feb 20, 2020
415dc3e
fixup: parse_options with null instead of empty str
nasamuffin Feb 20, 2020
0124e13
fixup: reword uname header
nasamuffin Feb 20, 2020
1c72635
fixup: add strerror for uname issue
nasamuffin Feb 20, 2020
688d337
fixup compat compiler info
nasamuffin Feb 20, 2020
2cc27f2
fixup generate-bugreport-config-safelist.sh
nasamuffin Feb 20, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
/git-bisect--helper
/git-blame
/git-branch
/git-bugreport
/git-bundle
/git-cat-file
/git-check-attr
Expand Down Expand Up @@ -189,7 +190,9 @@
/gitweb/gitweb.cgi
/gitweb/static/gitweb.js
/gitweb/static/gitweb.min.*
/config-list.h
/command-list.h
/bugreport-config-safelist.h
*.tar.gz
*.dsc
*.deb
Expand Down
9 changes: 9 additions & 0 deletions Documentation/asciidoc.conf
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,14 @@
#
# Show Git link as: <command>(<section>); if section is defined, else just show
# the command.
#
# The annotate macro does nothing as far as rendering is
# concerned -- we just grep for it in the sources to populate
# things like the bugreport safelist.

[macros]
(?su)[\\]?(?P<name>linkgit):(?P<target>\S*?)\[(?P<attrlist>.*?)\]=
(?su)[\\]?(?P<name>annotate):(?P<target>\S*?)\[(?P<attrlist>.*?)\]=

[attributes]
asterisk=&#42;
Expand All @@ -28,6 +33,8 @@ ifdef::backend-docbook[]
{0#<citerefentry>}
{0#<refentrytitle>{target}</refentrytitle><manvolnum>{0}</manvolnum>}
{0#</citerefentry>}
[annotate-inlinemacro]
{0#}
endif::backend-docbook[]

ifdef::backend-docbook[]
Expand Down Expand Up @@ -94,4 +101,6 @@ ifdef::backend-xhtml11[]
git-relative-html-prefix=
[linkgit-inlinemacro]
<a href="{git-relative-html-prefix}{target}.html">{target}{0?({0})}</a>
[annotate-inlinemacro]
<!-- -->
endif::backend-xhtml11[]
7 changes: 7 additions & 0 deletions Documentation/asciidoctor-extensions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,17 @@ def process document, output
output
end
end

class AnnotateProcessor < Asciidoctor::Extensions::InlineMacroProcessor
def process(parent, target, attrs)
""
end
end
end
end

Asciidoctor::Extensions.register do
inline_macro Git::Documentation::LinkGitProcessor, :linkgit
postprocessor Git::Documentation::DocumentPostProcessor
inline_macro Git::Documentation::AnnotateProcessor, :annotate
end
56 changes: 28 additions & 28 deletions Documentation/config/sendemail.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ sendemail.identity::
values in the 'sendemail' section. The default identity is
the value of `sendemail.identity`.

sendemail.smtpEncryption::
sendemail.smtpEncryption annotate:bugreport[include] ::
See linkgit:git-send-email[1] for description. Note that this
setting is not subject to the 'identity' mechanism.

Expand All @@ -15,49 +15,49 @@ sendemail.smtpsslcertpath::
Path to ca-certificates (either a directory or a single file).
Set it to an empty string to disable certificate verification.

sendemail.<identity>.*::
sendemail.<identity>.* annotate:bugreport[exclude] ::
Identity-specific versions of the 'sendemail.*' parameters
found below, taking precedence over those when this
identity is selected, through either the command-line or
`sendemail.identity`.

sendemail.aliasesFile::
sendemail.aliasFileType::
sendemail.annotate::
sendemail.bcc::
sendemail.cc::
sendemail.ccCmd::
sendemail.chainReplyTo::
sendemail.confirm::
sendemail.envelopeSender::
sendemail.from::
sendemail.multiEdit::
sendemail.signedoffbycc::
sendemail.smtpPass::
sendemail.suppresscc::
sendemail.suppressFrom::
sendemail.to::
sendemail.tocmd::
sendemail.smtpDomain::
sendemail.smtpServer::
sendemail.smtpServerPort::
sendemail.smtpServerOption::
sendemail.smtpUser::
sendemail.thread::
sendemail.transferEncoding::
sendemail.validate::
sendemail.xmailer::
sendemail.annotate annotate:bugreport[include] ::
sendemail.bcc annotate:bugreport[include] ::
sendemail.cc annotate:bugreport[include] ::
sendemail.ccCmd annotate:bugreport[include] ::
sendemail.chainReplyTo annotate:bugreport[include] ::
sendemail.confirm annotate:bugreport[include] ::
sendemail.envelopeSender annotate:bugreport[include] ::
sendemail.from annotate:bugreport[include] ::
sendemail.multiEdit annotate:bugreport[include] ::
sendemail.signedoffbycc annotate:bugreport[include] ::
sendemail.smtpPass annotate:bugreport[exclude] ::
sendemail.suppresscc annotate:bugreport[include] ::
sendemail.suppressFrom annotate:bugreport[include] ::
sendemail.to annotate:bugreport[include] ::
sendemail.tocmd annotate:bugreport[include] ::
sendemail.smtpDomain annotate:bugreport[include] ::
sendemail.smtpServer annotate:bugreport[include] ::
sendemail.smtpServerPort annotate:bugreport[include] ::
sendemail.smtpServerOption annotate:bugreport[include] ::
sendemail.smtpUser annotate:bugreport[exclude] ::
sendemail.thread annotate:bugreport[include] ::
sendemail.transferEncoding annotate:bugreport[include] ::
sendemail.validate annotate:bugreport[include] ::
sendemail.xmailer annotate:bugreport[include] ::
See linkgit:git-send-email[1] for description.

sendemail.signedoffcc (deprecated)::
Deprecated alias for `sendemail.signedoffbycc`.

sendemail.smtpBatchSize::
sendemail.smtpBatchSize annotate:bugreport[include] ::
Number of messages to be sent per connection, after that a relogin
will happen. If the value is 0 or undefined, send all messages in
one connection.
See also the `--batch-size` option of linkgit:git-send-email[1].

sendemail.smtpReloginDelay::
sendemail.smtpReloginDelay annotate:bugreport[include] ::
Seconds wait before reconnecting to smtp server.
See also the `--relogin-delay` option of linkgit:git-send-email[1].
60 changes: 60 additions & 0 deletions Documentation/git-bugreport.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
git-bugreport(1)
================

NAME
----
git-bugreport - Collect information for user to file a bug report

SYNOPSIS
--------
[verse]
'git bugreport' [(-o | --output-directory) <path>] [(-s | --suffix) <format>]

DESCRIPTION
-----------
Captures information about the user's machine, Git client, and repository state,
as well as a form requesting information about the behavior the user observed,
into a single text file which the user can then share, for example to the Git
mailing list, in order to report an observed bug.

The following information is requested from the user:

- Reproduction steps
- Expected behavior
- Actual behavior

The following information is captured automatically:

- 'git version --build-options'
- uname sysname, release, version, and machine strings
- Compiler-specific info string
- 'git remote-https --build-info'
- $SHELL
- Selected config values
- A list of enabled hooks
- The number of loose objects in the repository
- The number of packs and packed objects in the repository
- A list of the contents of .git/objects/info (or equivalent)
- The number of valid and invalid alternates

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>::
--output-directory <path>::
Place the resulting bug report file in `<path>` instead of the root of
the Git repository.

-s <format>::
--suffix <format>::
Specify an alternate suffix for the bugreport name, to create a file
named 'git-bugreport-<formatted suffix>'. This should take the form of a
link:strftime[3] format string; the current local time will be used.

GIT
---
Part of the linkgit:git[1] suite
27 changes: 24 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -681,6 +681,7 @@ EXTRA_PROGRAMS =
# ... and all the rest that could be moved out of bindir to gitexecdir
PROGRAMS += $(EXTRA_PROGRAMS)

PROGRAM_OBJS += bugreport.o
PROGRAM_OBJS += credential-store.o
PROGRAM_OBJS += daemon.o
PROGRAM_OBJS += fast-import.o
Expand Down Expand Up @@ -815,7 +816,9 @@ LIB_FILE = libgit.a
XDIFF_LIB = xdiff/lib.a
VCSSVN_LIB = vcs-svn/lib.a

GENERATED_H += config-list.h
GENERATED_H += command-list.h
GENERATED_H += bugreport-config-safelist.h

LIB_H := $(sort $(patsubst ./%,%,$(shell git ls-files '*.h' ':!t/' ':!Documentation/' 2>/dev/null || \
$(FIND) . \
Expand Down Expand Up @@ -2132,7 +2135,9 @@ git$X: git.o GIT-LDFLAGS $(BUILTIN_OBJS) $(GITLIBS)

help.sp help.s help.o: command-list.h

builtin/help.sp builtin/help.s builtin/help.o: command-list.h GIT-PREFIX
bugreport.sp bugreport.s bugreport.o: bugreport-config-safelist.h

builtin/help.sp builtin/help.s builtin/help.o: config-list.h GIT-PREFIX
builtin/help.sp builtin/help.s builtin/help.o: EXTRA_CPPFLAGS = \
'-DGIT_HTML_PATH="$(htmldir_relative_SQ)"' \
'-DGIT_MAN_PATH="$(mandir_relative_SQ)"' \
Expand All @@ -2152,13 +2157,25 @@ $(BUILT_INS): git$X
ln -s $< $@ 2>/dev/null || \
cp $< $@

config-list.h: generate-configlist.sh

config-list.h:
$(QUIET_GEN)$(SHELL_PATH) ./generate-configlist.sh \
>$@+ && mv $@+ $@

command-list.h: generate-cmdlist.sh command-list.txt

command-list.h: $(wildcard Documentation/git*.txt) Documentation/*config.txt Documentation/config/*.txt
$(QUIET_GEN)$(SHELL_PATH) ./generate-cmdlist.sh \
$(patsubst %,--exclude-program %,$(EXCLUDED_PROGRAMS)) \
command-list.txt >$@+ && mv $@+ $@

bugreport-config-safelist.h: generate-bugreport-config-safelist.sh

bugreport-config-safelist.h: Documentation/config/*.txt
$(QUIET_GEN)$(SHELL_PATH) ./generate-bugreport-config-safelist.sh \
>$@+ && mv $@+ $@

SCRIPT_DEFINES = $(SHELL_PATH_SQ):$(DIFF_SQ):$(GIT_VERSION):\
$(localedir_SQ):$(NO_CURL):$(USE_GETTEXT_SCHEME):$(SANE_TOOL_PATH_SQ):\
$(gitwebdir_SQ):$(PERL_PATH_SQ):$(SANE_TEXT_GREP):$(PAGER_ENV):\
Expand Down Expand Up @@ -2454,6 +2471,10 @@ endif
git-%$X: %.o GIT-LDFLAGS $(GITLIBS)
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)

git-bugreport$X: bugreport.o GIT-LDFLAGS $(GITLIBS)
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
$(LIBS)

git-imap-send$X: imap-send.o $(IMAP_SEND_BUILDDEPS) GIT-LDFLAGS $(GITLIBS)
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
$(IMAP_SEND_LDFLAGS) $(LIBS)
Expand Down Expand Up @@ -2785,7 +2806,7 @@ $(SP_OBJ): %.sp: %.c GIT-CFLAGS FORCE
.PHONY: sparse $(SP_OBJ)
sparse: $(SP_OBJ)

EXCEPT_HDRS := command-list.h unicode-width.h compat/% xdiff/%
EXCEPT_HDRS := command-list.h config-list.h unicode-width.h compat/% xdiff/%
ifndef GCRYPT_SHA256
EXCEPT_HDRS += sha256/gcrypt.h
endif
Expand All @@ -2807,7 +2828,7 @@ hdr-check: $(HCO)
style:
git clang-format --style file --diff --extensions c,h

check: command-list.h
check: config-list.h command-list.h
@if sparse; \
then \
echo >&2 "Use 'make sparse' instead"; \
Expand Down
Loading