You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.8 KiB
80 lines
1.8 KiB
#include "cache.h" |
|
#include "builtin.h" |
|
#include "config.h" |
|
#include "hook.h" |
|
#include "parse-options.h" |
|
#include "strbuf.h" |
|
#include "strvec.h" |
|
|
|
#define BUILTIN_HOOK_RUN_USAGE \ |
|
N_("git hook run [--ignore-missing] <hook-name> [-- <hook-args>]") |
|
|
|
static const char * const builtin_hook_usage[] = { |
|
BUILTIN_HOOK_RUN_USAGE, |
|
NULL |
|
}; |
|
|
|
static const char * const builtin_hook_run_usage[] = { |
|
BUILTIN_HOOK_RUN_USAGE, |
|
NULL |
|
}; |
|
|
|
static int run(int argc, const char **argv, const char *prefix) |
|
{ |
|
int i; |
|
struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT; |
|
int ignore_missing = 0; |
|
const char *hook_name; |
|
struct option run_options[] = { |
|
OPT_BOOL(0, "ignore-missing", &ignore_missing, |
|
N_("silently ignore missing requested <hook-name>")), |
|
OPT_END(), |
|
}; |
|
int ret; |
|
|
|
argc = parse_options(argc, argv, prefix, run_options, |
|
builtin_hook_run_usage, |
|
PARSE_OPT_KEEP_DASHDASH); |
|
|
|
if (!argc) |
|
goto usage; |
|
|
|
/* |
|
* Having a -- for "run" when providing <hook-args> is |
|
* mandatory. |
|
*/ |
|
if (argc > 1 && strcmp(argv[1], "--") && |
|
strcmp(argv[1], "--end-of-options")) |
|
goto usage; |
|
|
|
/* Add our arguments, start after -- */ |
|
for (i = 2 ; i < argc; i++) |
|
strvec_push(&opt.args, argv[i]); |
|
|
|
/* Need to take into account core.hooksPath */ |
|
git_config(git_default_config, NULL); |
|
|
|
hook_name = argv[0]; |
|
if (!ignore_missing) |
|
opt.error_if_missing = 1; |
|
ret = run_hooks_opt(hook_name, &opt); |
|
if (ret < 0) /* error() return */ |
|
ret = 1; |
|
return ret; |
|
usage: |
|
usage_with_options(builtin_hook_run_usage, run_options); |
|
} |
|
|
|
int cmd_hook(int argc, const char **argv, const char *prefix) |
|
{ |
|
parse_opt_subcommand_fn *fn = NULL; |
|
struct option builtin_hook_options[] = { |
|
OPT_SUBCOMMAND("run", &fn, run), |
|
OPT_END(), |
|
}; |
|
|
|
argc = parse_options(argc, argv, NULL, builtin_hook_options, |
|
builtin_hook_usage, 0); |
|
|
|
return fn(argc, argv, prefix); |
|
}
|
|
|