On 2019.10.24 19:51, Emily Shaffer wrote: > Teach Git how to prompt the user for a good bug report: reproduction > steps, expected behavior, and actual behavior. Later, Git can learn how > to collect some diagnostic information from the repository. > > If users can send us a well-written bug report which contains diagnostic > information we would otherwise need to ask the user for, we can reduce > the number of question-and-answer round trips between the reporter and > the Git contributor. > > Users may also wish to send a report like this to their local "Git > expert" if they have put their repository into a state they are confused > by. > > Signed-off-by: Emily Shaffer <emilyshaffer@xxxxxxxxxx> > --- > Makefile | 1 + > builtin.h | 1 + > builtin/bugreport.c | 50 +++++++++++++++++++++++++++++++++++++++++++++ > git.c | 1 + > 4 files changed, 53 insertions(+) > create mode 100644 builtin/bugreport.c > > diff --git a/Makefile b/Makefile > index 58b92af54b..132e2a52da 100644 > --- a/Makefile > +++ b/Makefile > @@ -1039,6 +1039,7 @@ BUILTIN_OBJS += builtin/archive.o > BUILTIN_OBJS += builtin/bisect--helper.o > BUILTIN_OBJS += builtin/blame.o > BUILTIN_OBJS += builtin/branch.o > +BUILTIN_OBJS += builtin/bugreport.o > BUILTIN_OBJS += builtin/bundle.o > BUILTIN_OBJS += builtin/cat-file.o > BUILTIN_OBJS += builtin/check-attr.o > diff --git a/builtin.h b/builtin.h > index 5cf5df69f7..c6373d3289 100644 > --- a/builtin.h > +++ b/builtin.h > @@ -135,6 +135,7 @@ int cmd_archive(int argc, const char **argv, const char *prefix); > int cmd_bisect__helper(int argc, const char **argv, const char *prefix); > int cmd_blame(int argc, const char **argv, const char *prefix); > int cmd_branch(int argc, const char **argv, const char *prefix); > +int cmd_bugreport(int argc, const char **argv, const char *prefix); > int cmd_bundle(int argc, const char **argv, const char *prefix); > int cmd_cat_file(int argc, const char **argv, const char *prefix); > int cmd_checkout(int argc, const char **argv, const char *prefix); > diff --git a/builtin/bugreport.c b/builtin/bugreport.c > new file mode 100644 > index 0000000000..2ef16440a0 > --- /dev/null > +++ b/builtin/bugreport.c > @@ -0,0 +1,50 @@ > +#include "builtin.h" > +#include "stdio.h" > +#include "strbuf.h" > +#include "time.h" > + > +int get_bug_template(struct strbuf *template) Compilation fails here for me with: builtin/bugreport.c:6:5: error: no previous prototype for ‘get_bug_template’ [-Werror=missing-prototypes] Can you make this function static? > +{ > + const char template_text[] = > +"Thank you for filling out a Git bug report!\n" > +"Please answer the following questions to help us understand your issue.\n" > +"\n" > +"What did you do before the bug happened? (Steps to reproduce your issue)\n" > +"\n" > +"What did you expect to happen? (Expected behavior)\n" > +"\n" > +"What happened instead? (Actual behavior)\n" > +"\n" > +"What's different between what you expected and what actually happened?\n" > +"\n" > +"Anything else you want to add:\n" > +"\n" > +"Please review the rest of the bug report below.\n" > +"You can delete any lines you don't wish to send.\n"; > + > + strbuf_reset(template); > + strbuf_add(template, template_text, strlen(template_text)); > + return 0; > +} > + > +int cmd_bugreport(int argc, const char **argv, const char *prefix) > +{ > + struct strbuf buffer = STRBUF_INIT; > + struct strbuf report_path = STRBUF_INIT; > + FILE *report; > + time_t now = time(NULL); > + > + strbuf_addstr(&report_path, "git-bugreport-"); > + strbuf_addftime(&report_path, "%F", gmtime(&now), 0, 0); > + strbuf_addstr(&report_path, ".txt"); > + > + report = fopen_for_writing(report_path.buf); > + > + get_bug_template(&buffer); > + strbuf_write(&buffer, report); > + > + fclose(report); > + > + launch_editor(report_path.buf, NULL, NULL); > + return 0; > +} > diff --git a/git.c b/git.c > index ce6ab0ece2..2d6a64f019 100644 > --- a/git.c > +++ b/git.c > @@ -473,6 +473,7 @@ static struct cmd_struct commands[] = { > { "bisect--helper", cmd_bisect__helper, RUN_SETUP }, > { "blame", cmd_blame, RUN_SETUP }, > { "branch", cmd_branch, RUN_SETUP | DELAY_PAGER_CONFIG }, > + { "bugreport", cmd_bugreport, RUN_SETUP }, > { "bundle", cmd_bundle, RUN_SETUP_GENTLY | NO_PARSEOPT }, > { "cat-file", cmd_cat_file, RUN_SETUP }, > { "check-attr", cmd_check_attr, RUN_SETUP }, > -- > 2.24.0.rc0.303.g954a862665-goog Can you also add /git-bugreport to .gitignore?