Browse Source

Merge branch 'es/bugreport-with-hooks'

"git bugreport" learned to report enabled hooks in the repository.

* es/bugreport-with-hooks:
  bugreport: collect list of populated hooks
maint
Junio C Hamano 5 years ago
parent
commit
3583730758
  1. 1
      Documentation/git-bugreport.txt
  2. 52
      bugreport.c
  3. 15
      t/t0091-bugreport.sh

1
Documentation/git-bugreport.txt

@ -28,6 +28,7 @@ The following information is captured automatically: @@ -28,6 +28,7 @@ The following information is captured automatically:
- 'git version --build-options'
- uname sysname, release, version, and machine strings
- Compiler-specific info string
- A list of enabled hooks

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

52
bugreport.c

@ -3,6 +3,8 @@ @@ -3,6 +3,8 @@
#include "strbuf.h"
#include "help.h"
#include "compat/compiler.h"
#include "run-command.h"


static void get_system_info(struct strbuf *sys_info)
{
@ -31,6 +33,53 @@ static void get_system_info(struct strbuf *sys_info) @@ -31,6 +33,53 @@ static void get_system_info(struct strbuf *sys_info)
get_libc_info(sys_info);
}

static void get_populated_hooks(struct strbuf *hook_info, int nongit)
{
/*
* NEEDSWORK: Doesn't look like there is a list of all possible hooks;
* so below is a transcription of `git help hooks`. Later, this should
* be replaced with some programmatically generated list (generated from
* doc or else taken from some library which tells us about all the
* hooks)
*/
static const char *hook[] = {
"applypatch-msg",
"pre-applypatch",
"post-applypatch",
"pre-commit",
"pre-merge-commit",
"prepare-commit-msg",
"commit-msg",
"post-commit",
"pre-rebase",
"post-checkout",
"post-merge",
"pre-push",
"pre-receive",
"update",
"post-receive",
"post-update",
"push-to-checkout",
"pre-auto-gc",
"post-rewrite",
"sendemail-validate",
"fsmonitor-watchman",
"p4-pre-submit",
"post-index-change",
};
int i;

if (nongit) {
strbuf_addstr(hook_info,
_("not run from a git repository - no hooks to show\n"));
return;
}

for (i = 0; i < ARRAY_SIZE(hook); i++)
if (find_hook(hook[i]))
strbuf_addf(hook_info, "%s\n", hook[i]);
}

static const char * const bugreport_usage[] = {
N_("git bugreport [-o|--output-directory <file>] [-s|--suffix <format>]"),
NULL
@ -114,6 +163,9 @@ int cmd_main(int argc, const char **argv) @@ -114,6 +163,9 @@ int cmd_main(int argc, const char **argv)
get_header(&buffer, _("System Info"));
get_system_info(&buffer);

get_header(&buffer, _("Enabled Hooks"));
get_populated_hooks(&buffer, nongit_ok);

/* fopen doesn't offer us an O_EXCL alternative, except with glibc. */
report = open(report_path.buf, O_CREAT | O_EXCL | O_WRONLY, 0666);


15
t/t0091-bugreport.sh

@ -57,5 +57,20 @@ test_expect_success 'can create leading directories outside of a git dir' ' @@ -57,5 +57,20 @@ test_expect_success 'can create leading directories outside of a git dir' '
nongit git bugreport -o foo/bar/baz
'

test_expect_success 'indicates populated hooks' '
test_when_finished rm git-bugreport-hooks.txt &&
test_when_finished rm -fr .git/hooks &&
rm -fr .git/hooks &&
mkdir .git/hooks &&
for hook in applypatch-msg prepare-commit-msg.sample
do
write_script ".git/hooks/$hook" <<-EOF || return 1
echo "hook $hook exists"
EOF
done &&
git bugreport -s hooks &&
grep applypatch-msg git-bugreport-hooks.txt &&
! grep prepare-commit-msg git-bugreport-hooks.txt
'

test_done

Loading…
Cancel
Save