package core import ( "log" "os" "os/exec" ) // HookRunner runs hooks before and after backups type HookRunner struct { Directory string BeforeHook string AfterHook string } // NewHookRunner creates a new hook runner func NewHookRunner(directory, beforeHook, afterHook string) *HookRunner { return &HookRunner{ Directory: directory, BeforeHook: beforeHook, AfterHook: afterHook, } } // RunBeforeHook executes the before hook if defined func (h *HookRunner) RunBeforeHook() error { if h.BeforeHook == "" { return nil } log.Printf("Running before hook: %s", h.BeforeHook) return h.runCommand(h.BeforeHook) } // RunAfterHook executes the after hook if defined func (h *HookRunner) RunAfterHook() error { if h.AfterHook == "" { return nil } log.Printf("Running after hook: %s", h.AfterHook) return h.runCommand(h.AfterHook) } // runCommand executes a shell command in the specified directory func (h *HookRunner) runCommand(command string) error { cmd := exec.Command("sh", "-c", command) if h.Directory != "" { cmd.Dir = h.Directory } cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr log.Printf("Executing command in %s: %s", h.Directory, command) return cmd.Run() }