]> source.dussan.org Git - gitea.git/commitdiff
add http protocol clone support
authorLunny Xiao <xiaolunwen@gmail.com>
Fri, 21 Mar 2014 16:48:26 +0000 (00:48 +0800)
committerLunny Xiao <xiaolunwen@gmail.com>
Fri, 21 Mar 2014 16:48:26 +0000 (00:48 +0800)
models/repo.go
models/user.go
routers/repo/single.go
web.go

index 4b6dedaf9081759095ddb8062c7b9f762d9238d2..cf1e1df5c412b8d575592bdef85e3e0b8b6356a8 100644 (file)
@@ -257,6 +257,17 @@ func initRepository(f string, user *User, repo *Repository, initReadme bool, rep
                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.
        fileName := map[string]string{}
        if initReadme {
index 76cf2d20ce83f6f7e8f07c7a7d0716b0858c3467..69608ec2773a8d5999513497d0e58692e471a745 100644 (file)
@@ -231,10 +231,8 @@ func UserPath(userName string) string {
 
 func GetUserByKeyId(keyId int64) (*User, error) {
        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)
        if err != nil {
                return nil, err
index c10d30a7d6b5816e0af6c822f29ece39456d295d..064150a23422e09b04491f42501fe24e400c0cb5 100644 (file)
@@ -5,11 +5,13 @@
 package repo
 
 import (
+       "path"
        "strings"
 
        "github.com/codegangsta/martini"
 
        "github.com/gogits/git"
+       "github.com/gogits/webdav"
 
        "github.com/gogits/gogs/models"
        "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)
 }
 
+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) {
        if !ctx.Repo.IsOwner {
                ctx.Error(404)
diff --git a/web.go b/web.go
index ceb193e6fd0783f2a37376ed2da7b73c353e24b6..f083b5508c7dbe00b8a5b492689c4ab962e0d87f 100644 (file)
--- a/web.go
+++ b/web.go
@@ -116,6 +116,8 @@ func runWeb(*cli.Context) {
 
        m.Get("/:username/:reponame", ignSignIn, middleware.RepoAssignment(true), repo.Single)
 
+       m.Any("/:username/:reponame/**", ignSignIn, repo.Http)
+
        if martini.Env == martini.Dev {
                m.Get("/template/**", dev.TemplatePreview)
        }