hooks.go (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
package main import ( "bufio" "fmt" "log" "os" "os/exec" "path/filepath" "github.com/h2non/filetype" ) func runHooks(file string) { hooks, err := os.ReadDir("hooks") if err != nil { log.Println(err) } for _, h := range hooks { hookFile := getHook(file) if h.Name() == hookFile { log.Println("running hook:", hookFile) cmd := exec.Command(filepath.Join("hooks", h.Name()), file) stdout, _ := cmd.StdoutPipe() cmd.Start() s := bufio.NewScanner(stdout) for s.Scan() { fmt.Println(s.Text()) } } } } // Checks the MIME type of file and returns // the corresponding hook file. func getHook(file string) string { // Not sure how many bytes the magic number takes, but 16 // is a good guess. I think. magic := make([]byte, 16) f, err := os.Open(file) if err != nil { log.Println(err) } defer f.Close() _, err = f.Read(magic) if err != nil { log.Println(err) } t, err := filetype.Match(magic) if err != nil { log.Println(err) } return t.Extension + ".sh" } |