diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2014-06-28 15:00:32 +0800 |
---|---|---|
committer | Lunny Xiao <xiaolunwen@gmail.com> | 2014-06-28 15:00:32 +0800 |
commit | a357cda9575b482004329e81f0add6e4c32ab02a (patch) | |
tree | db7d7508a039cfd4dd6cedad236e720bcfe1396c /routers/repo/http.go | |
parent | 165e3e8f18bb7d38722d0c836ddbf8c95023cf67 (diff) | |
parent | 6e448b07145fbb090e0da6deb97f244c2bfd7ba7 (diff) |
Merge branch 'dev' of github.com:gogits/gogs into dev
Diffstat (limited to 'routers/repo/http.go')
-rw-r--r-- | routers/repo/http.go | 51 |
1 files changed, 20 insertions, 31 deletions
diff --git a/routers/repo/http.go b/routers/repo/http.go index c5856d60..7b89e9b0 100644 --- a/routers/repo/http.go +++ b/routers/repo/http.go @@ -7,9 +7,7 @@ package repo import ( "bytes" "fmt" - "io" "io/ioutil" - "log" "net/http" "os" "os/exec" @@ -22,6 +20,7 @@ import ( "github.com/go-martini/martini" "github.com/gogits/gogs/models" + "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/setting" ) @@ -107,9 +106,9 @@ func Http(ctx *middleware.Context, params martini.Params) { } if !isPublicPull { - var tp = models.AU_WRITABLE + var tp = models.WRITABLE if isPull { - tp = models.AU_READABLE + tp = models.READABLE } has, err := models.HasAccess(authUsername, username+"/"+reponame, tp) @@ -117,8 +116,8 @@ func Http(ctx *middleware.Context, params martini.Params) { ctx.Handle(401, "no basic auth and digit auth", nil) return } else if !has { - if tp == models.AU_READABLE { - has, err = models.HasAccess(authUsername, username+"/"+reponame, models.AU_WRITABLE) + if tp == models.READABLE { + has, err = models.HasAccess(authUsername, username+"/"+reponame, models.WRITABLE) if err != nil || !has { ctx.Handle(401, "no basic auth and digit auth", nil) return @@ -141,7 +140,10 @@ func Http(ctx *middleware.Context, params martini.Params) { newCommitId := fields[1] refName := fields[2] - models.Update(refName, oldCommitId, newCommitId, authUsername, username, reponame, authUser.Id) + if err = models.Update(refName, oldCommitId, newCommitId, authUsername, username, reponame, authUser.Id); err != nil { + log.GitLogger.Error(err.Error()) + return + } } } } @@ -190,7 +192,6 @@ var routes = []route{ // Request handling function func HttpBackend(config *Config) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - //log.Printf("%s %s %s %s", r.RemoteAddr, r.Method, r.URL.Path, r.Proto) for _, route := range routes { if m := route.cr.FindStringSubmatch(r.URL.Path); m != nil { if route.method != r.Method { @@ -202,7 +203,7 @@ func HttpBackend(config *Config) http.HandlerFunc { dir, err := getGitDir(config, m[1]) if err != nil { - log.Print(err) + log.GitLogger.Error(err.Error()) renderNotFound(w) return } @@ -212,13 +213,13 @@ func HttpBackend(config *Config) http.HandlerFunc { return } } + renderNotFound(w) return } } // Actual command handling functions - func serviceUploadPack(hr handler) { serviceRpc("upload-pack", hr) } @@ -236,36 +237,24 @@ func serviceRpc(rpc string, hr handler) { return } - input, _ := ioutil.ReadAll(r.Body) - w.Header().Set("Content-Type", fmt.Sprintf("application/x-git-%s-result", rpc)) w.WriteHeader(http.StatusOK) + input, _ := ioutil.ReadAll(r.Body) + br := bytes.NewReader(input) + args := []string{rpc, "--stateless-rpc", dir} cmd := exec.Command(hr.Config.GitBinPath, args...) cmd.Dir = dir - in, err := cmd.StdinPipe() - if err != nil { - log.Print(err) - return - } - - stdout, err := cmd.StdoutPipe() - if err != nil { - log.Print(err) - return - } + cmd.Stdout = w + cmd.Stdin = br - err = cmd.Start() + err := cmd.Run() if err != nil { - log.Print(err) + log.GitLogger.Error(err.Error()) return } - in.Write(input) - io.Copy(w, stdout) - cmd.Wait() - if hr.Config.OnSucceed != nil { hr.Config.OnSucceed(rpc, input) } @@ -345,7 +334,7 @@ func getGitDir(config *Config, fPath string) (string, error) { cwd, err := os.Getwd() if err != nil { - log.Print(err) + log.GitLogger.Error(err.Error()) return "", err } @@ -422,7 +411,7 @@ func gitCommand(gitBinPath, dir string, args ...string) []byte { out, err := command.Output() if err != nil { - log.Print(err) + log.GitLogger.Error(err.Error()) } return out |