diff options
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 95 |
1 files changed, 16 insertions, 79 deletions
@@ -1,12 +1,8 @@ package main -// see `man 5 githooks` for details - import ( "bytes" - "errors" - "fmt" - "io" + "flag" "log" "os" "os/exec" @@ -14,29 +10,27 @@ import ( "strings" ) +var ( + repo = "" + commit = "" +) + +func init() { + flag.StringVar(&repo, "repo", "", "") + flag.StringVar(&commit, "commit", "", "") +} + func main() { + flag.Parse() + log.SetFlags(0) defer log.Println("Exiting craft") log.Println("Starting craft") - hookType := getHookType() - log.Printf("Git hook type: %s\n", hookType) - - repo := getRepositoryPath() - log.Printf("Git repository: %s\n", repo) - - for { - eof, update := getUpdate() - if eof { - break - } - log.Printf("Git ref update: %s\n", update) - commit := update.updated - workbench := prepareWorkbench(repo, commit) - defer os.RemoveAll(workbench) - craft(workbench) - } + workbench := prepareWorkbench(repo, commit) + defer os.RemoveAll(workbench) + craft(workbench) } func runCommand(dir string, name string, args ...string) { @@ -111,60 +105,3 @@ func prepareWorkbench(repo string, commit string) string { return workbench } - -func getHookType() string { - args := len(os.Args) - if args != 1 { - log.Fatalf("Expected zero arguments but %d were given", args-1) - } - prefix := `hooks/` - path := os.Args[0] - hookType := strings.TrimPrefix(path, prefix) - if path == hookType { - log.Fatalf("Hook path '%s' has no '%s' prefix", path, prefix) - } - validateHookType(hookType) - return hookType -} - -func validateHookType(hookType string) { - validTypes := [...]string{ - `post-receive`, - } - for _, currentType := range validTypes { - if hookType == currentType { - return - } - } - log.Fatalf("Not supported Git hook type '%s'\n", hookType) -} - -func getRepositoryPath() string { - cwd, err := os.Getwd() - if err != nil { - log.Fatal(err) - } - return cwd -} - -type update struct { - old, updated, ref string -} - -func (u update) String() string { - ret := fmt.Sprintf("'%s' from '%s' to '%s'", u.ref, u.old, u.updated) - return ret -} - -func getUpdate() (bool, update) { - var u update - _, err := fmt.Scanf("%s %s %s\n", &u.old, &u.updated, &u.ref) - if err != nil { - if errors.Is(err, io.EOF) { - return true, u - } else { - log.Fatal(err) - } - } - return false, u -} |