| 100 | } |
| 101 | |
| 102 | func shimGit() (string, error) { |
| 103 | actualGit, err := exec.LookPath("git") |
| 104 | if err != nil { |
| 105 | return "", err |
| 106 | } |
| 107 | // Trusting that we didn't get a malicious path back from LookPath(). |
| 108 | templated := strings.Replace(PRE_COMMIT_GIT_SHIM, "ACTUAL_GIT", actualGit, 1) |
| 109 | |
| 110 | span := tracing.NewSpan("shim-git") |
| 111 | defer span.End() |
| 112 | |
| 113 | dir, err := os.MkdirTemp("", "quickhook-git-*") |
| 114 | if err != nil { |
| 115 | return "", err |
| 116 | } |
| 117 | |
| 118 | git := path.Join(dir, "git") |
| 119 | err = os.WriteFile(git, []byte(templated), 0755) |
| 120 | if err != nil { |
| 121 | return "", err |
| 122 | } |
| 123 | return dir, nil |
| 124 | } |