mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	add http protocol clone support
This commit is contained in:
		@@ -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 New Issue
	
	Block a user