summaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2015-03-12 01:15:01 -0400
committerUnknwon <u@gogs.io>2015-03-12 01:15:01 -0400
commit4aafeace230a35e80fb443739c2642d23fc93e51 (patch)
tree3dc6b008a4469232521ecf834b43acf17ae439dc /routers
parent34102f788945b1c73a845f7916d01d216baa56ad (diff)
downloadgitea-4aafeace230a35e80fb443739c2642d23fc93e51.tar.gz
gitea-4aafeace230a35e80fb443739c2642d23fc93e51.zip
fix HTTP/HTTPS push update func call panic #1037 and `http: multiple response.WriteHeader calls`
Diffstat (limited to 'routers')
-rw-r--r--routers/repo/http.go45
1 files changed, 24 insertions, 21 deletions
diff --git a/routers/repo/http.go b/routers/repo/http.go
index 3cfc065999..f5dc00b8df 100644
--- a/routers/repo/http.go
+++ b/routers/repo/http.go
@@ -105,7 +105,7 @@ func Http(ctx *middleware.Context) {
return
}
- authUser, err := models.UserSignIn(authUsername, authPasswd)
+ authUser, err = models.UserSignIn(authUsername, authPasswd)
if err != nil {
if err != models.ErrUserNotExist {
ctx.Handle(500, "UserSignIn error: %v", err)
@@ -160,7 +160,7 @@ func Http(ctx *middleware.Context) {
}
}
- var f = func(rpc string, input []byte) {
+ callback := func(rpc string, input []byte) {
if rpc == "receive-pack" {
var lastLine int64 = 0
@@ -189,6 +189,7 @@ func Http(ctx *middleware.Context) {
newCommitId := fields[1]
refName := fields[2]
+ // FIXME: handle error.
models.Update(refName, oldCommitId, newCommitId, authUsername, username, reponame, authUser.Id)
}
lastLine = lastLine + size
@@ -199,25 +200,23 @@ func Http(ctx *middleware.Context) {
}
}
- config := Config{setting.RepoRootPath, "git", true, true, f}
+ HTTPBackend(&Config{
+ RepoRootPath: setting.RepoRootPath,
+ GitBinPath: "git",
+ UploadPack: true,
+ ReceivePack: true,
+ OnSucceed: callback,
+ })(ctx.Resp, ctx.Req.Request)
- handler := HttpBackend(&config)
- handler(ctx.Resp, ctx.Req.Request)
runtime.GC()
}
-type route struct {
- cr *regexp.Regexp
- method string
- handler func(handler)
-}
-
type Config struct {
- ReposRoot string
- GitBinPath string
- UploadPack bool
- ReceivePack bool
- OnSucceed func(rpc string, input []byte)
+ RepoRootPath string
+ GitBinPath string
+ UploadPack bool
+ ReceivePack bool
+ OnSucceed func(rpc string, input []byte)
}
type handler struct {
@@ -228,6 +227,12 @@ type handler struct {
File string
}
+type route struct {
+ cr *regexp.Regexp
+ method string
+ handler func(handler)
+}
+
var routes = []route{
{regexp.MustCompile("(.*?)/git-upload-pack$"), "POST", serviceUploadPack},
{regexp.MustCompile("(.*?)/git-receive-pack$"), "POST", serviceReceivePack},
@@ -243,7 +248,7 @@ var routes = []route{
}
// Request handling function
-func HttpBackend(config *Config) http.HandlerFunc {
+func HTTPBackend(config *Config) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
for _, route := range routes {
r.URL.Path = strings.ToLower(r.URL.Path) // blue: In case some repo name has upper case name
@@ -285,8 +290,7 @@ func serviceReceivePack(hr handler) {
func serviceRpc(rpc string, hr handler) {
w, r, dir := hr.w, hr.r, hr.Dir
- access := hasAccess(r, hr.Config, dir, rpc, true)
- if access == false {
+ if !hasAccess(r, hr.Config, dir, rpc, true) {
renderNoAccess(w)
return
}
@@ -337,7 +341,6 @@ func serviceRpc(rpc string, hr handler) {
if hr.Config.OnSucceed != nil {
hr.Config.OnSucceed(rpc, input)
}
- w.WriteHeader(http.StatusOK)
}
func getInfoRefs(hr handler) {
@@ -408,7 +411,7 @@ func sendFile(contentType string, hr handler) {
}
func getGitDir(config *Config, fPath string) (string, error) {
- root := config.ReposRoot
+ root := config.RepoRootPath
if root == "" {
cwd, err := os.Getwd()