summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go95
1 files changed, 16 insertions, 79 deletions
diff --git a/main.go b/main.go
index 383b398..6408a4a 100644
--- a/main.go
+++ b/main.go
@@ -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
-}