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 ...@@ -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 // Don't leak pipes when we return early after an error
defer func() { defer func() {
if err == nil { if err == nil {
...@@ -85,22 +85,22 @@ func setupGitCommand(action string, a *api.Response, w *GitHttpResponseWriter, r ...@@ -85,22 +85,22 @@ func setupGitCommand(action string, a *api.Response, w *GitHttpResponseWriter, r
}() }()
// Prepare our Git subprocess // 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() stdout, err = cmd.StdoutPipe()
if err != nil { if err != nil {
helper.Fail500(w, r, fmt.Errorf("setupGitCommand: stdout: %v", err)) return nil, nil, nil, fmt.Errorf("stdout pipe: %v", err)
return nil, nil, nil, err
} }
stdin, err = cmd.StdinPipe() stdin, err = cmd.StdinPipe()
if err != nil { if err != nil {
helper.Fail500(w, r, fmt.Errorf("setupGitCommand: stdin: %v", err)) return nil, nil, nil, fmt.Errorf("stdin pipe: %v", err)
return nil, nil, nil, err
} }
if err = cmd.Start(); err != nil { if err = cmd.Start(); err != nil {
helper.Fail500(w, r, fmt.Errorf("setupGitCommand: start %v: %v", cmd.Args, err)) return nil, nil, nil, fmt.Errorf("start %v: %v", cmd.Args, err)
return nil, nil, nil, err
} }
return cmd, stdin, stdout, nil return cmd, stdin, stdout, nil
......
...@@ -45,19 +45,14 @@ func handleGetInfoRefs(rw http.ResponseWriter, r *http.Request, a *api.Response) ...@@ -45,19 +45,14 @@ func handleGetInfoRefs(rw http.ResponseWriter, r *http.Request, a *api.Response)
return return
} }
// Prepare our Git subprocess cmd, stdin, stdout, err := setupGitCommand(rpc, a, "--advertise-refs")
cmd := gitCommand(a.GL_ID, "git", subCommand(rpc), "--stateless-rpc", "--advertise-refs", a.RepoPath)
stdout, err := cmd.StdoutPipe()
if err != nil { if err != nil {
helper.Fail500(w, r, fmt.Errorf("handleGetInfoRefs: stdout: %v", err)) helper.Fail500(w, r, fmt.Errorf("handleGetInfoRefs: setupGitCommand: %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))
return return
} }
defer helper.CleanUpProcessGroup(cmd) // Ensure brute force subprocess clean-up defer helper.CleanUpProcessGroup(cmd) // Ensure brute force subprocess clean-up
stdin.Close() // Not needed for this request
defer stdout.Close()
// Start writing the response // Start writing the response
w.Header().Set("Content-Type", fmt.Sprintf("application/x-%s-advertisement", rpc)) w.Header().Set("Content-Type", fmt.Sprintf("application/x-%s-advertisement", rpc))
......
...@@ -12,9 +12,10 @@ import ( ...@@ -12,9 +12,10 @@ import (
func handleReceivePack(w *GitHttpResponseWriter, r *http.Request, a *api.Response) (writtenIn int64, err error) { func handleReceivePack(w *GitHttpResponseWriter, r *http.Request, a *api.Response) (writtenIn int64, err error) {
body := r.Body body := r.Body
action := getService(r) action := getService(r)
cmd, stdin, stdout, err := setupGitCommand(action, a, w, r) cmd, stdin, stdout, err := setupGitCommand(action, a)
if err != nil { if err != nil {
fail500(w)
return writtenIn, fmt.Errorf("setupGitCommand: %v", err) return writtenIn, fmt.Errorf("setupGitCommand: %v", err)
} }
......
...@@ -35,7 +35,7 @@ func handleUploadPack(w *GitHttpResponseWriter, r *http.Request, a *api.Response ...@@ -35,7 +35,7 @@ func handleUploadPack(w *GitHttpResponseWriter, r *http.Request, a *api.Response
r.Body.Close() r.Body.Close()
action := getService(r) action := getService(r)
cmd, stdin, stdout, err := setupGitCommand(action, a, w, r) cmd, stdin, stdout, err := setupGitCommand(action, a)
if err != nil { if err != nil {
fail500(w) 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