@@ -32,6 +32,7 @@
#include "remote.h"
#include "object-store.h"
#include "exec-cmd.h"
+#include "hook.h"
#define FAILED_RUN "failed to run %s"
@@ -394,7 +395,7 @@ static int need_to_gc(void)
else
return 0;
- if (run_hook_le(NULL, "pre-auto-gc", NULL))
+ if (run_hooks_oneshot("pre-auto-gc", NULL))
return 0;
return 1;
}
@@ -141,3 +141,26 @@ int run_hooks(const char *hook_name, const char *hook_path,
return cb_data.rc;
}
+
+int run_hooks_oneshot(const char *hook_name, struct run_hooks_opt *options)
+{
+ const char *hook_path;
+ int ret;
+ struct run_hooks_opt hook_opt_scratch = RUN_HOOKS_OPT_INIT;
+
+ if (!options)
+ options = &hook_opt_scratch;
+
+ hook_path = find_hook(hook_name);
+ if (!hook_path) {
+ ret = 0;
+ goto cleanup;
+ }
+
+ ret = run_hooks(hook_name, hook_path, options);
+
+cleanup:
+ run_hooks_opt_clear(options);
+
+ return ret;
+}
@@ -49,7 +49,20 @@ void run_hooks_opt_clear(struct run_hooks_opt *o);
/**
* Takes an already resolved hook found via find_hook() and runs
* it. Does not call run_hooks_opt_clear() for you.
+ *
+ * See run_hooks_oneshot() for the simpler one-shot API.
*/
int run_hooks(const char *hookname, const char *hook_path,
struct run_hooks_opt *options);
+
+/**
+ * Calls find_hook() on your "hook_name" and runs the hooks (if any)
+ * with run_hooks().
+ *
+ * If "options" is provided calls run_hooks_opt_clear() on it for
+ * you. If "options" is NULL the default options from
+ * RUN_HOOKS_OPT_INIT will be used.
+ */
+int run_hooks_oneshot(const char *hook_name, struct run_hooks_opt *options);
+
#endif