diff --git a/cmd/ugitd/main.go b/cmd/ugitd/main.go index 4e330289478424e28bee7d5224f560b06ba919a4..6dfa3d9dfefc302d856bf424042d2e9d6444b1e5 100644 --- a/cmd/ugitd/main.go +++ b/cmd/ugitd/main.go @@ -23,11 +23,9 @@ "go.jolheiser.com/ugit/internal/ssh" ) func main() { - if len(os.Args) > 1 { - if os.Args[1] == "pre-receive-hook" { - preReceive() - return - } + if len(os.Args) > 1 && os.Args[1] == "pre-receive-hook" { + preReceive() + return } args, err := parseArgs(os.Args[1:]) @@ -135,19 +133,7 @@ fp := filepath.Join(repoDir, "hooks") if err := os.MkdirAll(fp, os.ModePerm); err != nil { return err } - - if err := hookFS(fp, "pre-receive", bin); err != nil { - return err - } - if err := hookFS(fp, "post-receive", ""); err != nil { - return err - } - - return nil -} - -func hookFS(hookPath, hookName, bin string) error { - fp := filepath.Join(hookPath, hookName) + fp = filepath.Join(fp, "pre-receive") if err := os.MkdirAll(fp+".d", os.ModePerm); err != nil { return err @@ -158,9 +144,7 @@ if err != nil { return err } fmt.Fprintln(fi, "#!/usr/bin/env bash") - if bin != "" { - fmt.Fprintf(fi, "%s %s-hook\n", bin, hookName) - } + fmt.Fprintf(fi, "%s pre-receive-hook\n", bin) fmt.Fprintf(fi, `for hook in %s.d/*; do test -x "${hook}" && test -f "${hook}" || continue "${hook}" diff --git a/nix/module.nix b/nix/module.nix index 6fb1dde987677fc33205ed56188377c73dc5cabd..ca0c8ac1375bd7667ea5c2b086d266ffdf7111b6 100644 --- a/nix/module.nix +++ b/nix/module.nix @@ -50,15 +50,9 @@ default = "ugit-${name}"; description = "Group account under which ugit runs"; }; - preHooks = mkOption { + hooks = mkOption { type = types.listOf (types.submodule hookOption); description = "A list of pre-receive hooks to run"; - default = [ ]; - }; - - postHooks = mkOption { - type = types.listOf (types.submodule hookOption); - description = "A list of post-receive hooks to run"; default = [ ]; }; @@ -227,30 +221,19 @@ User = instanceCfg.user; Group = instanceCfg.group; ExecStart = let - preHookDir = "${instanceCfg.repoDir}/hooks/pre-receive.d"; - mkPreHookScript = + hookDir = "${instanceCfg.repoDir}/hooks/pre-receive.d"; + mkHookScript = hook: let - script = pkgs.writeShellScript "ugit-${name}-${hook.name}-pre" hook.content; + script = pkgs.writeShellScript "ugit-${name}-${hook.name}" hook.content; in '' - mkdir -p ${preHookDir} - ln -sf ${script} ${preHookDir}/${hook.name} - ''; - postHookDir = "${instanceCfg.repoDir}/hooks/post-receive.d"; - mkPostHookScript = - hook: - let - script = pkgs.writeShellScript "ugit-${name}-${hook.name}-post" hook.content; - in - '' - mkdir -p ${postHookDir} - ln -sf ${script} ${postHookDir}/${hook.name} + mkdir -p ${hookDir} + ln -sf ${script} ${hookDir}/${hook.name} ''; in pkgs.writeShellScript "ugit-${name}-hooks-setup" '' - ${builtins.concatStringsSep "\n" (map mkPreHookScript instanceCfg.preHooks)} - ${builtins.concatStringsSep "\n" (map mkPostHookScript instanceCfg.postHooks)} + ${builtins.concatStringsSep "\n" (map mkHookScript instanceCfg.hooks)} ''; }; };