Commit 7fc85ede authored by Jacob Vosmaer's avatar Jacob Vosmaer

Use setupGitCommand for /info/refs too

parent 18334f75
......@@ -70,7 +70,7 @@ func repoPreAuthorizeHandler(myAPI *api.API, handleFunc api.HandleFunc) http.Han
}, "")
}
func setupGitCommand(action string, a *api.Response, w *GitHttpResponseWriter, r *http.Request) (cmd *exec.Cmd, stdin io.WriteCloser, stdout io.ReadCloser, err error) {
func setupGitCommand(action string, a *api.Response, options ...string) (cmd *exec.Cmd, stdin io.WriteCloser, stdout io.ReadCloser, err error) {
// Don't leak pipes when we return early after an error
defer func() {
if err == nil {
......@@ -85,22 +85,22 @@ func setupGitCommand(action string, a *api.Response, w *GitHttpResponseWriter, r
}()
// Prepare our Git subprocess
cmd = gitCommand(a.GL_ID, "git", subCommand(action), "--stateless-rpc", a.RepoPath)
args := []string{subCommand(action), "--stateless-rpc"}
args = append(args, options...)
args = append(args, a.RepoPath)
cmd = gitCommand(a.GL_ID, "git", args...)
stdout, err = cmd.StdoutPipe()
if err != nil {
helper.Fail500(w, r, fmt.Errorf("setupGitCommand: stdout: %v", err))
return nil, nil, nil, err
return nil, nil, nil, fmt.Errorf("stdout pipe: %v", err)
}
stdin, err = cmd.StdinPipe()
if err != nil {
helper.Fail500(w, r, fmt.Errorf("setupGitCommand: stdin: %v", err))
return nil, nil, nil, err
return nil, nil, nil, fmt.Errorf("stdin pipe: %v", err)
}
if err = cmd.Start(); err != nil {
helper.Fail500(w, r, fmt.Errorf("setupGitCommand: start %v: %v", cmd.Args, err))
return nil, nil, nil, err
return nil, nil, nil, fmt.Errorf("start %v: %v", cmd.Args, err)
}
return cmd, stdin, stdout, nil
......
......@@ -45,19 +45,14 @@ func handleGetInfoRefs(rw http.ResponseWriter, r *http.Request, a *api.Response)
return
}
// Prepare our Git subprocess
cmd := gitCommand(a.GL_ID, "git", subCommand(rpc), "--stateless-rpc", "--advertise-refs", a.RepoPath)
stdout, err := cmd.StdoutPipe()
cmd, stdin, stdout, err := setupGitCommand(rpc, a, "--advertise-refs")
if err != nil {
helper.Fail500(w, r, fmt.Errorf("handleGetInfoRefs: stdout: %v", err))
return
}
defer stdout.Close()
if err := cmd.Start(); err != nil {
helper.Fail500(w, r, fmt.Errorf("handleGetInfoRefs: start %v: %v", cmd.Args, err))
helper.Fail500(w, r, fmt.Errorf("handleGetInfoRefs: setupGitCommand: %v", err))
return
}
defer helper.CleanUpProcessGroup(cmd) // Ensure brute force subprocess clean-up
stdin.Close() // Not needed for this request
defer stdout.Close()
// Start writing the response
w.Header().Set("Content-Type", fmt.Sprintf("application/x-%s-advertisement", rpc))
......
......@@ -12,9 +12,10 @@ import (
func handleReceivePack(w *GitHttpResponseWriter, r *http.Request, a *api.Response) (writtenIn int64, err error) {
body := r.Body
action := getService(r)
cmd, stdin, stdout, err := setupGitCommand(action, a, w, r)
cmd, stdin, stdout, err := setupGitCommand(action, a)
if err != nil {
fail500(w)
return writtenIn, fmt.Errorf("setupGitCommand: %v", err)
}
......
......@@ -35,7 +35,7 @@ func handleUploadPack(w *GitHttpResponseWriter, r *http.Request, a *api.Response
r.Body.Close()
action := getService(r)
cmd, stdin, stdout, err := setupGitCommand(action, a, w, r)
cmd, stdin, stdout, err := setupGitCommand(action, a)
if err != nil {
fail500(w)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment