| @@ -257,6 +257,17 @@ func initRepository(f string, user *User, repo *Repository, initReadme bool, rep | |||||
| return err | return err | ||||
| } | } | ||||
| // hook/post-update | |||||
| pu2, err := os.OpenFile(filepath.Join(repoPath, "hooks", "post-receive"), os.O_CREATE|os.O_WRONLY, 0777) | |||||
| if err != nil { | |||||
| return err | |||||
| } | |||||
| defer pu2.Close() | |||||
| // TODO: Windows .bat | |||||
| if _, err = pu2.WriteString("#!/usr/bin/env bash\ngit update-server-info\n"); err != nil { | |||||
| return err | |||||
| } | |||||
| // Initialize repository according to user's choice. | // Initialize repository according to user's choice. | ||||
| fileName := map[string]string{} | fileName := map[string]string{} | ||||
| if initReadme { | if initReadme { | ||||
| @@ -231,10 +231,8 @@ func UserPath(userName string) string { | |||||
| func GetUserByKeyId(keyId int64) (*User, error) { | func GetUserByKeyId(keyId int64) (*User, error) { | ||||
| user := new(User) | user := new(User) | ||||
| rawSql := "SELECT a.* FROM user AS a, public_key AS b WHERE a.id = b.owner_id AND b.id=?" | |||||
| if base.Cfg.MustValue("database", "DB_TYPE") == "postgres" { | |||||
| rawSql = "SELECT a.* FROM \"user\" AS a, public_key AS b WHERE a.id = b.owner_id AND b.id=?" | |||||
| } | |||||
| rawSql := "SELECT a.* FROM `user` AS a, public_key AS b WHERE a.id = b.owner_id AND b.id=?" | |||||
| has, err := orm.Sql(rawSql, keyId).Get(user) | has, err := orm.Sql(rawSql, keyId).Get(user) | ||||
| if err != nil { | if err != nil { | ||||
| return nil, err | return nil, err | ||||
| @@ -5,11 +5,13 @@ | |||||
| package repo | package repo | ||||
| import ( | import ( | ||||
| "path" | |||||
| "strings" | "strings" | ||||
| "github.com/codegangsta/martini" | "github.com/codegangsta/martini" | ||||
| "github.com/gogits/git" | "github.com/gogits/git" | ||||
| "github.com/gogits/webdav" | |||||
| "github.com/gogits/gogs/models" | "github.com/gogits/gogs/models" | ||||
| "github.com/gogits/gogs/modules/base" | "github.com/gogits/gogs/modules/base" | ||||
| @@ -181,6 +183,29 @@ func Single(ctx *middleware.Context, params martini.Params) { | |||||
| ctx.HTML(200, "repo/single", ctx.Data) | ctx.HTML(200, "repo/single", ctx.Data) | ||||
| } | } | ||||
| func Http(ctx *middleware.Context, params martini.Params) { | |||||
| /*if !ctx.Repo.IsValid { | |||||
| return | |||||
| }*/ | |||||
| // TODO: access check | |||||
| username := params["username"] | |||||
| reponame := params["reponame"] | |||||
| if strings.HasSuffix(reponame, ".git") { | |||||
| reponame = reponame[:len(reponame)-4] | |||||
| } | |||||
| prefix := path.Join("/", username, params["reponame"]) | |||||
| server := &webdav.Server{ | |||||
| Fs: webdav.Dir(models.RepoPath(username, reponame)), | |||||
| TrimPrefix: prefix, | |||||
| Listings: true, | |||||
| } | |||||
| server.ServeHTTP(ctx.ResponseWriter, ctx.Req) | |||||
| } | |||||
| func Setting(ctx *middleware.Context, params martini.Params) { | func Setting(ctx *middleware.Context, params martini.Params) { | ||||
| if !ctx.Repo.IsOwner { | if !ctx.Repo.IsOwner { | ||||
| ctx.Error(404) | ctx.Error(404) | ||||
| @@ -116,6 +116,8 @@ func runWeb(*cli.Context) { | |||||
| m.Get("/:username/:reponame", ignSignIn, middleware.RepoAssignment(true), repo.Single) | m.Get("/:username/:reponame", ignSignIn, middleware.RepoAssignment(true), repo.Single) | ||||
| m.Any("/:username/:reponame/**", ignSignIn, repo.Http) | |||||
| if martini.Env == martini.Dev { | if martini.Env == martini.Dev { | ||||
| m.Get("/template/**", dev.TemplatePreview) | m.Get("/template/**", dev.TemplatePreview) | ||||
| } | } | ||||