update git api. fix link... and so on

This commit is contained in:
slene 2014-03-30 10:13:02 +08:00
parent 41ca0ed302
commit b27c34f39a
11 changed files with 63 additions and 91 deletions

View File

@ -70,9 +70,12 @@ func GetTargetFile(userName, repoName, branchName, commitId, rpath string) (*Rep
return nil, err return nil, err
} }
commit, err := repo.GetCommit(branchName, commitId) commit, err := repo.GetCommitOfBranch(branchName)
if err != nil { if err != nil {
return nil, err commit, err = repo.GetCommit(commitId)
if err != nil {
return nil, err
}
} }
parts := strings.Split(path.Clean(rpath), "/") parts := strings.Split(path.Clean(rpath), "/")
@ -110,13 +113,22 @@ func GetTargetFile(userName, repoName, branchName, commitId, rpath string) (*Rep
} }
// GetReposFiles returns a list of file object in given directory of repository. // GetReposFiles returns a list of file object in given directory of repository.
func GetReposFiles(userName, repoName, branchName, commitId, rpath string) ([]*RepoFile, error) { // func GetReposFilesOfBranch(userName, repoName, branchName, rpath string) ([]*RepoFile, error) {
// return getReposFiles(userName, repoName, commitId, rpath)
// }
// GetReposFiles returns a list of file object in given directory of repository.
func GetReposFiles(userName, repoName, commitId, rpath string) ([]*RepoFile, error) {
return getReposFiles(userName, repoName, commitId, rpath)
}
func getReposFiles(userName, repoName, commitId string, rpath string) ([]*RepoFile, error) {
repo, err := git.OpenRepository(RepoPath(userName, repoName)) repo, err := git.OpenRepository(RepoPath(userName, repoName))
if err != nil { if err != nil {
return nil, err return nil, err
} }
commit, err := repo.GetCommit(branchName, commitId) commit, err := repo.GetCommit(commitId)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -216,13 +228,13 @@ func GetReposFiles(userName, repoName, branchName, commitId, rpath string) ([]*R
return append(repodirs, repofiles...), nil return append(repodirs, repofiles...), nil
} }
func GetCommit(userName, repoName, branchname, commitid string) (*git.Commit, error) { func GetCommit(userName, repoName, commitId string) (*git.Commit, error) {
repo, err := git.OpenRepository(RepoPath(userName, repoName)) repo, err := git.OpenRepository(RepoPath(userName, repoName))
if err != nil { if err != nil {
return nil, err return nil, err
} }
return repo.GetCommit(branchname, commitid) return repo.GetCommit(commitId)
} }
// GetCommitsByBranch returns all commits of given branch of repository. // GetCommitsByBranch returns all commits of given branch of repository.
@ -397,7 +409,7 @@ func GetDiff(repoPath, commitid string) (*Diff, error) {
return nil, err return nil, err
} }
commit, err := repo.GetCommit("", commitid) commit, err := repo.GetCommit(commitid)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -364,7 +364,7 @@ func GetRepos(num, offset int) ([]UserRepo, error) {
} }
func RepoPath(userName, repoName string) string { func RepoPath(userName, repoName string) string {
return filepath.Join(UserPath(userName), repoName+".git") return filepath.Join(UserPath(userName), strings.ToLower(repoName)+".git")
} }
func UpdateRepository(repo *Repository) error { func UpdateRepository(repo *Repository) error {

View File

@ -11,21 +11,15 @@ import (
) )
func Branches(ctx *middleware.Context, params martini.Params) { func Branches(ctx *middleware.Context, params martini.Params) {
if !ctx.Repo.IsValid { brs, err := models.GetBranches(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name)
return
}
brs, err := models.GetBranches(params["username"], params["reponame"])
if err != nil { if err != nil {
ctx.Handle(200, "repo.Branches", err) ctx.Handle(404, "repo.Branches", err)
return return
} else if len(brs) == 0 { } else if len(brs) == 0 {
ctx.Handle(404, "repo.Branches", nil) ctx.Handle(404, "repo.Branches", nil)
return return
} }
ctx.Data["Username"] = params["username"]
ctx.Data["Reponame"] = params["reponame"]
ctx.Data["Branches"] = brs ctx.Data["Branches"] = brs
ctx.Data["IsRepoToolbarBranches"] = true ctx.Data["IsRepoToolbarBranches"] = true

View File

@ -50,16 +50,12 @@ func Commits(ctx *middleware.Context, params martini.Params) {
} }
func Diff(ctx *middleware.Context, params martini.Params) { func Diff(ctx *middleware.Context, params martini.Params) {
userName := params["username"] userName := ctx.Repo.Owner.Name
repoName := params["reponame"] repoName := ctx.Repo.Repository.Name
branchName := params["branchname"] branchName := ctx.Repo.BranchName
commitId := params["commitid"] commitId := ctx.Repo.CommitId
commit, err := models.GetCommit(userName, repoName, branchName, commitId) commit := ctx.Repo.Commit
if err != nil {
ctx.Handle(404, "repo.Diff", err)
return
}
diff, err := models.GetDiff(models.RepoPath(userName, repoName), commitId) diff, err := models.GetDiff(models.RepoPath(userName, repoName), commitId)
if err != nil { if err != nil {
@ -85,11 +81,9 @@ func Diff(ctx *middleware.Context, params martini.Params) {
return isImage return isImage
} }
shortSha := params["commitid"][:10]
ctx.Data["IsImageFile"] = isImageFile ctx.Data["IsImageFile"] = isImageFile
ctx.Data["Title"] = commit.Message() + " · " + shortSha ctx.Data["Title"] = commit.Message() + " · " + base.ShortSha(commitId)
ctx.Data["Commit"] = commit ctx.Data["Commit"] = commit
ctx.Data["ShortSha"] = shortSha
ctx.Data["Diff"] = diff ctx.Data["Diff"] = diff
ctx.Data["IsRepoToolbarCommits"] = true ctx.Data["IsRepoToolbarCommits"] = true
ctx.Data["SourcePath"] = "/" + path.Join(userName, repoName, "src", commitId) ctx.Data["SourcePath"] = "/" + path.Join(userName, repoName, "src", commitId)

View File

@ -53,20 +53,20 @@ func Create(ctx *middleware.Context, form auth.CreateRepoForm) {
} }
func Single(ctx *middleware.Context, params martini.Params) { func Single(ctx *middleware.Context, params martini.Params) {
if !ctx.Repo.IsValid { branchName := ctx.Repo.BranchName
return commitId := ctx.Repo.CommitId
} userName := ctx.Repo.Owner.Name
repoName := ctx.Repo.Repository.Name
branchName := params["branchname"] repoLink := ctx.Repo.RepoLink
userName := params["username"] branchLink := ctx.Repo.RepoLink + "/src/" + branchName
repoName := params["reponame"] rawLink := ctx.Repo.RepoLink + "/raw/" + branchName
// Get tree path // Get tree path
treename := params["_1"] treename := params["_1"]
if len(treename) > 0 && treename[len(treename)-1] == '/' { if len(treename) > 0 && treename[len(treename)-1] == '/' {
ctx.Redirect("/" + ctx.Repo.Owner.LowerName + "/" + ctx.Redirect(repoLink + "/src/" + branchName + "/" + treename[:len(treename)-1])
ctx.Repo.Repository.Name + "/src/" + branchName + "/" + treename[:len(treename)-1])
return return
} }
@ -84,23 +84,17 @@ func Single(ctx *middleware.Context, params martini.Params) {
} }
ctx.Data["Branches"] = brs ctx.Data["Branches"] = brs
var commitId string isViewBranch := ctx.Repo.IsBranch
isViewBranch := models.IsBranchExist(userName, repoName, branchName)
if !isViewBranch {
commitId = branchName
}
ctx.Data["IsViewBranch"] = isViewBranch ctx.Data["IsViewBranch"] = isViewBranch
repoFile, err := models.GetTargetFile(userName, repoName, repoFile, err := models.GetTargetFile(userName, repoName,
branchName, commitId, treename) branchName, commitId, treename)
if err != nil && err != models.ErrRepoFileNotExist { if err != nil && err != models.ErrRepoFileNotExist {
ctx.Handle(404, "repo.Single(GetTargetFile)", err) ctx.Handle(404, "repo.Single(GetTargetFile)", err)
return return
} }
branchLink := "/" + ctx.Repo.Owner.LowerName + "/" + ctx.Repo.Repository.Name + "/src/" + branchName
rawLink := "/" + ctx.Repo.Owner.LowerName + "/" + ctx.Repo.Repository.Name + "/raw/" + branchName
if len(treename) != 0 && repoFile == nil { if len(treename) != 0 && repoFile == nil {
ctx.Handle(404, "repo.Single", nil) ctx.Handle(404, "repo.Single", nil)
return return
@ -142,8 +136,7 @@ func Single(ctx *middleware.Context, params martini.Params) {
} else { } else {
// Directory and file list. // Directory and file list.
files, err := models.GetReposFiles(userName, repoName, files, err := models.GetReposFiles(userName, repoName, ctx.Repo.CommitId, treename)
branchName, commitId, treename)
if err != nil { if err != nil {
ctx.Handle(404, "repo.Single(GetReposFiles)", err) ctx.Handle(404, "repo.Single(GetReposFiles)", err)
return return
@ -200,18 +193,7 @@ func Single(ctx *middleware.Context, params martini.Params) {
} }
} }
// Get latest commit according username and repo name. ctx.Data["LastCommit"] = ctx.Repo.Commit
commit, err := models.GetCommit(userName, repoName,
branchName, commitId)
if err != nil {
log.Error("repo.Single(GetCommit): %v", err)
ctx.Handle(404, "repo.Single(GetCommit)", err)
return
}
ctx.Data["LastCommit"] = commit
ctx.Data["CommitId"] = commitId
ctx.Data["Paths"] = Paths ctx.Data["Paths"] = Paths
ctx.Data["Treenames"] = treenames ctx.Data["Treenames"] = treenames
ctx.Data["BranchLink"] = branchLink ctx.Data["BranchLink"] = branchLink
@ -219,11 +201,6 @@ func Single(ctx *middleware.Context, params martini.Params) {
} }
func SingleDownload(ctx *middleware.Context, params martini.Params) { func SingleDownload(ctx *middleware.Context, params martini.Params) {
if !ctx.Repo.IsValid {
ctx.Handle(404, "repo.SingleDownload", nil)
return
}
// Get tree path // Get tree path
treename := params["_1"] treename := params["_1"]
@ -263,10 +240,6 @@ func SingleDownload(ctx *middleware.Context, params martini.Params) {
} }
func Http(ctx *middleware.Context, params martini.Params) { func Http(ctx *middleware.Context, params martini.Params) {
/*if !ctx.Repo.IsValid {
return
}*/
// TODO: access check // TODO: access check
username := params["username"] username := params["username"]

View File

@ -4,7 +4,7 @@
{{template "repo/toolbar" .}} {{template "repo/toolbar" .}}
<div id="body" class="container"> <div id="body" class="container">
<div id="issue"> <div id="issue">
<form class="form" action="/{{.RepositoryLink}}/issues/new" method="post" id="issue-create-form"> <form class="form" action="{{.RepoLink}}/issues/new" method="post" id="issue-create-form">
{{.CsrfTokenHtml}} {{.CsrfTokenHtml}}
<div class="col-md-1"> <div class="col-md-1">
<img class="avatar" src="{{.SignedUser.AvatarLink}}" alt=""/> <img class="avatar" src="{{.SignedUser.AvatarLink}}" alt=""/>
@ -40,4 +40,4 @@
</form> </form>
</div> </div>
</div> </div>
{{template "base/footer" .}} {{template "base/footer" .}}

View File

@ -6,24 +6,24 @@
<div id="issue"> <div id="issue">
<div class="col-md-3 filter-list"> <div class="col-md-3 filter-list">
<ul class="list-unstyled"> <ul class="list-unstyled">
<li><a href="/{{.RepositoryLink}}/issues"{{if eq .ViewType "all"}} class="active"{{end}}>All Issues <strong class="pull-right">{{.IssueCount}}</strong></a></li> <li><a href="{{.RepoLink}}/issues"{{if eq .ViewType "all"}} class="active"{{end}}>All Issues <strong class="pull-right">{{.IssueCount}}</strong></a></li>
<!-- <li><a href="#">Assigned to you</a></li> --> <!-- <li><a href="#">Assigned to you</a></li> -->
<li><a href="/{{.RepositoryLink}}/issues?type=created_by"{{if eq .ViewType "created_by"}} class="active"{{end}}>Created by you <strong class="pull-right">{{.IssueCreatedCount}}</strong></a></li> <li><a href="{{.RepoLink}}/issues?type=created_by"{{if eq .ViewType "created_by"}} class="active"{{end}}>Created by you <strong class="pull-right">{{.IssueCreatedCount}}</strong></a></li>
<!-- <li><a href="#">Mentioned</a></li> --> <!-- <li><a href="#">Mentioned</a></li> -->
</ul> </ul>
</div> </div>
<div class="col-md-9"> <div class="col-md-9">
<div class="filter-option"> <div class="filter-option">
<div class="btn-group"> <div class="btn-group">
<a class="btn btn-default issue-open{{if not .IsShowClosed}} active{{end}}" href="/{{.RepositoryLink}}/issues?type={{.ViewType}}">{{.OpenCount}} Open</a> <a class="btn btn-default issue-open{{if not .IsShowClosed}} active{{end}}" href="{{.RepoLink}}/issues?type={{.ViewType}}">{{.OpenCount}} Open</a>
<a class="btn btn-default issue-close{{if .IsShowClosed}} active{{end}}" href="/{{.RepositoryLink}}/issues?state=closed&type={{.ViewType}}">{{.ClosedCount}} Closed</a> <a class="btn btn-default issue-close{{if .IsShowClosed}} active{{end}}" href="{{.RepoLink}}/issues?state=closed&type={{.ViewType}}">{{.ClosedCount}} Closed</a>
</div> </div>
</div> </div>
<div class="issues list-group"> <div class="issues list-group">
{{range .Issues}} {{range .Issues}}
<div class="list-group-item issue-item" id="issue-{{.Id}}"> <div class="list-group-item issue-item" id="issue-{{.Id}}">
<span class="number pull-right">#{{.Index}}</span> <span class="number pull-right">#{{.Index}}</span>
<h5 class="title"><a href="/{{$.RepositoryLink}}/issues/{{.Index}}">{{.Name}}</a></h5> <h5 class="title"><a href="{{$.RepoLink}}/issues/{{.Index}}">{{.Name}}</a></h5>
<p class="info"> <p class="info">
<span class="author"><img class="avatar" src="{{.Poster.AvatarLink}}" alt="" width="20"/> <span class="author"><img class="avatar" src="{{.Poster.AvatarLink}}" alt="" width="20"/>
<a href="/user/{{.Poster.Name}}">{{.Poster.Name}}</a></span> <a href="/user/{{.Poster.Name}}">{{.Poster.Name}}</a></span>
@ -37,4 +37,4 @@
</div> </div>
</div> </div>
</div> </div>
{{template "base/footer" .}} {{template "base/footer" .}}

View File

@ -64,7 +64,7 @@
<hr class="issue-line"/> <hr class="issue-line"/>
{{if .SignedUser}}<div class="issue-child issue-reply"> {{if .SignedUser}}<div class="issue-child issue-reply">
<a class="user pull-left" href="/user/{{.SignedUser.Name}}"><img class="avatar" src="{{.SignedUser.AvatarLink}}" alt=""/></a> <a class="user pull-left" href="/user/{{.SignedUser.Name}}"><img class="avatar" src="{{.SignedUser.AvatarLink}}" alt=""/></a>
<form class="panel panel-default issue-content" action="/{{.RepositoryLink}}/comment/new" method="post"> <form class="panel panel-default issue-content" action="{{.RepoLink}}/comment/new" method="post">
{{.CsrfTokenHtml}} {{.CsrfTokenHtml}}
<div class="panel-body"> <div class="panel-body">
<div class="form-group"> <div class="form-group">
@ -102,4 +102,4 @@
</div> </div>
</div> </div>
</div> </div>
{{template "base/footer" .}} {{template "base/footer" .}}

View File

@ -1,7 +1,6 @@
{{template "base/head" .}} {{template "base/head" .}}
{{template "base/navbar" .}} {{template "base/navbar" .}}
{{template "repo/nav" .}} {{template "repo/nav" .}}
{{template "repo/toolbar" .}}
<div id="body" class="container" data-page="repo"> <div id="body" class="container" data-page="repo">
<div id="source"> <div id="source">
<div class="panel panel-info diff-box diff-head-box"> <div class="panel panel-info diff-box diff-head-box">
@ -11,7 +10,7 @@
</div> </div>
<div class="panel-body"> <div class="panel-body">
<span class="pull-right"> <span class="pull-right">
commit <span class="label label-default sha">{{.ShortSha}}</span> commit <span class="label label-default sha">{{ShortSha .CommitId}}</span>
</span> </span>
<p class="author"> <p class="author">
<img class="avatar" src="{{AvatarLink .Commit.Author.Email}}" alt=""/> <img class="avatar" src="{{AvatarLink .Commit.Author.Email}}" alt=""/>

View File

@ -11,11 +11,11 @@
{{ $n := len .Treenames}} {{ $n := len .Treenames}}
{{if not .IsFile}}<button class="btn btn-default pull-right hidden"><i class="fa fa-plus-square"></i>Add File</button>{{end}} {{if not .IsFile}}<button class="btn btn-default pull-right hidden"><i class="fa fa-plus-square"></i>Add File</button>{{end}}
<div class="dropdown branch-switch"> <div class="dropdown branch-switch">
<a href="#" class="btn btn-success dropdown-toggle" data-toggle="dropdown"><i class="fa fa-chain"></i>{{if .CommitId}}{{SubStr .CommitId 0 10}}{{else}}{{.Branchname}}{{end}}&nbsp;&nbsp; <a href="#" class="btn btn-success dropdown-toggle" data-toggle="dropdown"><i class="fa fa-chain"></i>{{if .CommitId}}{{ShortSha .CommitId}}{{else}}{{.BranchName}}{{end}}&nbsp;&nbsp;
<b class="caret"></b></a> <b class="caret"></b></a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
{{range .Branches}} {{range .Branches}}
<li><a {{if eq . $.Branchname}}class="current" {{end}}href="/{{$.Username}}/{{$.Reponame}}/src/{{.}}">{{.}}</a></li> <li><a {{if eq . $.BranchName}}class="current" {{end}}href="/{{$.Username}}/{{$.Reponame}}/src/{{.}}">{{.}}</a></li>
{{end}} {{end}}
</ul> </ul>
</div> </div>

View File

@ -3,24 +3,24 @@
<nav class="navbar navbar-toolbar navbar-default" role="navigation"> <nav class="navbar navbar-toolbar navbar-default" role="navigation">
<div class="collapse navbar-collapse"> <div class="collapse navbar-collapse">
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<li class="{{if .IsRepoToolbarSource}}active{{end}}"><a href="/{{.RepositoryLink}}">Source</a></li> <li class="{{if .IsRepoToolbarSource}}active{{end}}"><a href="{{.RepoLink}}{{if ne .BranchName `master`}}/src/{{.BranchName}}{{end}}">Source</a></li>
{{if not .IsBareRepo}} {{if not .IsBareRepo}}
<li class="{{if .IsRepoToolbarCommits}}active{{end}}"><a href="/{{.RepositoryLink}}/commits/{{.Branchname}}">Commits</a></li> <li class="{{if .IsRepoToolbarCommits}}active{{end}}"><a href="{{.RepoLink}}/commits/{{.BranchName}}">Commits</a></li>
<!-- <li class="{{if .IsRepoToolbarBranches}}active{{end}}"><a href="/{{.RepositoryLink}}/branches">Branches</a></li> --> <!-- <li class="{{if .IsRepoToolbarBranches}}active{{end}}"><a href="{{.RepoLink}}/branches">Branches</a></li> -->
<!-- <li class="{{if .IsRepoToolbarPulls}}active{{end}}"><a href="/{{.RepositoryLink}}/pulls">Pull Requests</a></li> --> <!-- <li class="{{if .IsRepoToolbarPulls}}active{{end}}"><a href="{{.RepoLink}}/pulls">Pull Requests</a></li> -->
<li class="{{if .IsRepoToolbarIssues}}active{{end}}"><a href="/{{.RepositoryLink}}/issues">Issues <!--<span class="badge">42</span>--></a></li> <li class="{{if .IsRepoToolbarIssues}}active{{end}}"><a href="{{.RepoLink}}/issues">Issues <!--<span class="badge">42</span>--></a></li>
{{if .IsRepoToolbarIssues}} {{if .IsRepoToolbarIssues}}
<li class="tmp">{{if .IsRepoToolbarIssuesList}}<a href="/{{.RepositoryLink}}/issues/new"> <li class="tmp">{{if .IsRepoToolbarIssuesList}}<a href="{{.RepoLink}}/issues/new">
<button class="btn btn-primary btn-sm">New Issue</button> <button class="btn btn-primary btn-sm">New Issue</button>
</a>{{else}}<a href="/{{.RepositoryLink}}/issues"> </a>{{else}}<a href="{{.RepoLink}}/issues">
<button class="btn btn-primary btn-sm">Issues List</button> <button class="btn btn-primary btn-sm">Issues List</button>
</a>{{end}}</li> </a>{{end}}</li>
{{end}} {{end}}
<!-- <li class="dropdown"> <!-- <li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">More <b class="caret"></b></a> <a href="#" class="dropdown-toggle" data-toggle="dropdown">More <b class="caret"></b></a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="/{{.RepositoryLink}}/release">Release</a></li> <li><a href="{{.RepoLink}}/release">Release</a></li>
<li><a href="//{{.RepositoryLink}}/wiki">Wiki</a></li> <li><a href="{{.RepoLink}}/wiki">Wiki</a></li>
</ul> </ul>
</li> -->{{end}} </li> -->{{end}}
</ul> </ul>
@ -34,7 +34,7 @@
<li><a href="#">Network</a></li> <li><a href="#">Network</a></li>
</ul> </ul>
</li> -->{{end}}{{if .IsRepositoryOwner}} </li> -->{{end}}{{if .IsRepositoryOwner}}
<li class="{{if .IsRepoToolbarSetting}}active{{end}}"><a href="/{{.RepositoryLink}}/settings">Settings</a> <li class="{{if .IsRepoToolbarSetting}}active{{end}}"><a href="{{.RepoLink}}/settings">Settings</a>
</li>{{end}} </li>{{end}}
</ul> </ul>
</div> </div>