@@ -17,10 +17,20 @@ import ( | |||
"github.com/gogits/gogs/modules/base" | |||
) | |||
func RepoAssignment(redirect bool) martini.Handler { | |||
func RepoAssignment(redirect bool, args ...bool) martini.Handler { | |||
return func(ctx *Context, params martini.Params) { | |||
// assign false first | |||
ctx.Data["IsRepositoryValid"] = false | |||
// valid brachname | |||
var validBranch bool | |||
// display bare quick start if it is a bare repo | |||
var displayBare bool | |||
if len(args) >= 1 { | |||
validBranch = args[0] | |||
} | |||
if len(args) >= 2 { | |||
displayBare = args[1] | |||
} | |||
var ( | |||
user *models.User | |||
@@ -71,6 +81,8 @@ func RepoAssignment(redirect bool) martini.Handler { | |||
} | |||
ctx.Repo.Repository = repo | |||
ctx.Data["IsBareRepo"] = ctx.Repo.Repository.IsBare | |||
gitRepo, err := git.OpenRepository(models.RepoPath(userName, repoName)) | |||
if err != nil { | |||
ctx.Handle(404, "RepoAssignment Invalid repo "+models.RepoPath(userName, repoName), err) | |||
@@ -86,50 +98,54 @@ func RepoAssignment(redirect bool) martini.Handler { | |||
ctx.Data["Owner"] = user | |||
ctx.Data["RepoLink"] = ctx.Repo.RepoLink | |||
ctx.Data["IsRepositoryOwner"] = ctx.Repo.IsOwner | |||
ctx.Data["BranchName"] = "" | |||
ctx.Repo.CloneLink.SSH = fmt.Sprintf("%s@%s:%s/%s.git", base.RunUser, base.Domain, user.LowerName, repo.LowerName) | |||
ctx.Repo.CloneLink.HTTPS = fmt.Sprintf("%s%s/%s.git", base.AppUrl, user.LowerName, repo.LowerName) | |||
ctx.Data["CloneLink"] = ctx.Repo.CloneLink | |||
if repo.IsBare { | |||
ctx.Data["IsBareRepo"] = true | |||
ctx.HTML(200, "repo/single_bare") | |||
return | |||
} | |||
detect: | |||
if len(branchName) > 0 { | |||
// TODO check tag | |||
if models.IsBranchExist(user.Name, repoName, branchName) { | |||
ctx.Repo.IsBranch = true | |||
ctx.Repo.BranchName = branchName | |||
ctx.Repo.Commit, err = gitRepo.GetCommitOfBranch(branchName) | |||
if err != nil { | |||
ctx.Handle(404, "RepoAssignment invalid branch", nil) | |||
// when repo is bare, not valid branch | |||
if !ctx.Repo.Repository.IsBare && validBranch { | |||
detect: | |||
if len(branchName) > 0 { | |||
// TODO check tag | |||
if models.IsBranchExist(user.Name, repoName, branchName) { | |||
ctx.Repo.IsBranch = true | |||
ctx.Repo.BranchName = branchName | |||
ctx.Repo.Commit, err = gitRepo.GetCommitOfBranch(branchName) | |||
if err != nil { | |||
ctx.Handle(404, "RepoAssignment invalid branch", nil) | |||
return | |||
} | |||
ctx.Repo.CommitId = ctx.Repo.Commit.Oid.String() | |||
} else if len(branchName) == 40 { | |||
ctx.Repo.IsCommit = true | |||
ctx.Repo.CommitId = branchName | |||
ctx.Repo.BranchName = branchName | |||
ctx.Repo.Commit, err = gitRepo.GetCommit(branchName) | |||
if err != nil { | |||
ctx.Handle(404, "RepoAssignment invalid commit", nil) | |||
return | |||
} | |||
} else { | |||
ctx.Handle(404, "RepoAssignment invalid repo", nil) | |||
return | |||
} | |||
ctx.Repo.CommitId = ctx.Repo.Commit.Oid.String() | |||
} else if len(branchName) == 40 { | |||
ctx.Repo.IsCommit = true | |||
ctx.Repo.CommitId = branchName | |||
ctx.Repo.BranchName = branchName | |||
ctx.Repo.Commit, err = gitRepo.GetCommit(branchName) | |||
if err != nil { | |||
ctx.Handle(404, "RepoAssignment invalid commit", nil) | |||
return | |||
} | |||
} else { | |||
ctx.Handle(404, "RepoAssignment invalid repo", nil) | |||
return | |||
branchName = "master" | |||
goto detect | |||
} | |||
} | |||
} else { | |||
branchName = "master" | |||
goto detect | |||
// repo is bare and display enable | |||
if displayBare && ctx.Repo.Repository.IsBare { | |||
ctx.HTML(200, "repo/single_bare") | |||
return | |||
} | |||
if ctx.IsSigned { | |||
@@ -78,6 +78,7 @@ func Single(ctx *middleware.Context, params martini.Params) { | |||
ctx.Handle(404, "repo.Single(GetBranches)", err) | |||
return | |||
} | |||
ctx.Data["Branches"] = brs | |||
isViewBranch := ctx.Repo.IsBranch | |||
@@ -1,6 +1,7 @@ | |||
{{template "base/head" .}} | |||
{{template "base/navbar" .}} | |||
{{template "repo/nav" .}} | |||
{{template "repo/toolbar" .}} | |||
<div id="body" class="container"> | |||
<div id="source"> | |||
<div class="panel panel-default guide-box clone-group-btn"> | |||
@@ -23,15 +24,15 @@ | |||
<hr/> | |||
<h3>Create a new repository on the command line</h3> | |||
<pre class="text-left"><code>touch README.md | |||
git init | |||
git add README.md | |||
git commit -m "first commit" | |||
git remote add origin <span class="clone-url"></span> | |||
git push -u origin master</code></pre> | |||
git init | |||
git add README.md | |||
git commit -m "first commit" | |||
git remote add origin <span class="clone-url"></span> | |||
git push -u origin master</code></pre> | |||
<hr/> | |||
<h3>Push an existing repository from the command line</h3> | |||
<pre class="text-left"><code>git remote add origin <span class="clone-url"></span> | |||
git push -u origin master</code></pre> | |||
git push -u origin master</code></pre> | |||
</div> | |||
</div> | |||
</div> | |||
@@ -3,7 +3,7 @@ | |||
<nav class="navbar navbar-toolbar navbar-default" role="navigation"> | |||
<div class="collapse navbar-collapse"> | |||
<ul class="nav navbar-nav"> | |||
<li class="{{if .IsRepoToolbarSource}}active{{end}}"><a href="{{.RepoLink}}{{if ne .BranchName `master`}}/src/{{.BranchName}}{{end}}">Source</a></li> | |||
<li class="{{if .IsRepoToolbarSource}}active{{end}}"><a href="{{.RepoLink}}{{if .BranchName}}{{if ne .BranchName `master`}}/src/{{.BranchName}}{{end}}{{end}}">Source</a></li> | |||
{{if not .IsBareRepo}} | |||
<li class="{{if .IsRepoToolbarCommits}}active{{end}}"><a href="{{.RepoLink}}/commits/{{.BranchName}}">Commits</a></li> | |||
<!-- <li class="{{if .IsRepoToolbarBranches}}active{{end}}"><a href="{{.RepoLink}}/branches">Branches</a></li> --> | |||
@@ -136,19 +136,20 @@ func runWeb(*cli.Context) { | |||
r.Get("/issues/:index", repo.ViewIssue) | |||
r.Get("/pulls", repo.Pulls) | |||
r.Get("/branches", repo.Branches) | |||
}, ignSignIn, middleware.RepoAssignment(true)) | |||
m.Group("/:username/:reponame", func(r martini.Router) { | |||
r.Get("/src/:branchname", repo.Single) | |||
r.Get("/src/:branchname/**", repo.Single) | |||
r.Get("/raw/:branchname/**", repo.SingleDownload) | |||
r.Get("/commits/:branchname", repo.Commits) | |||
}, ignSignIn, middleware.RepoAssignment(true)) | |||
m.Get("/:username/:reponame/commit/:branchname/**", ignSignIn, middleware.RepoAssignment(true), repo.Diff) | |||
m.Get("/:username/:reponame/commit/:branchname", ignSignIn, middleware.RepoAssignment(true), repo.Diff) | |||
r.Get("/commit/:branchname", repo.Diff) | |||
r.Get("/commit/:branchname/**", repo.Diff) | |||
}, ignSignIn, middleware.RepoAssignment(true, true)) | |||
m.Group("/:username", func(r martini.Router) { | |||
r.Get("/:reponame", middleware.RepoAssignment(true), repo.Single) | |||
r.Get("/:reponame", middleware.RepoAssignment(true), repo.Single) | |||
r.Any("/:reponame/**", repo.Http) | |||
r.Get("/:reponame", middleware.RepoAssignment(true, true, true), repo.Single) | |||
}, ignSignIn) | |||
// Not found handler. | |||