add http protocol clone support
This commit is contained in:
parent
5cb2d3d2e2
commit
efdaf6ee15
4 changed files with 40 additions and 4 deletions
|
@ -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=?"
|
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=?"
|
|
||||||
}
|
|
||||||
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)
|
||||||
|
|
2
web.go
2
web.go
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue