Show Pull Request button or status of latest PR in branch list (#6990)

* Show Pull Request button or status of latest PR in branch list

Signed-off-by: Mario Lubenka <mario.lubenka@googlemail.com>

* Do not show pull request button on deleted branches

Signed-off-by: Mario Lubenka <mario.lubenka@googlemail.com>

* Do not show commit divergence on deleted branches

Signed-off-by: Mario Lubenka <mario.lubenka@googlemail.com>

* Use XORMs Get instead of limit

* Links pull request ID and use smaller labels for displaying the pull request status

Signed-off-by: Mario Lubenka <mario.lubenka@googlemail.com>

* Handle error when getting latest pull request

Signed-off-by: Mario Lubenka <mario.lubenka@googlemail.com>

* Indent template

Signed-off-by: Mario Lubenka <mario.lubenka@googlemail.com>

* Check error when loading issue

Signed-off-by: Mario Lubenka <mario.lubenka@googlemail.com>
pull/7317/head
Mario Lubenka 5 years ago committed by Lunny Xiao
parent c37ec66ee2
commit 7c0f2b9843
  1. 14
      models/pull.go
  2. 38
      routers/repo/branch.go
  3. 25
      templates/repo/branch/list.tmpl

@ -776,6 +776,20 @@ func GetUnmergedPullRequestsByHeadInfo(repoID int64, branch string) ([]*PullRequ
Find(&prs) Find(&prs)
} }
// GetLatestPullRequestByHeadInfo returns the latest pull request (regardless of its status)
// by given head information (repo and branch).
func GetLatestPullRequestByHeadInfo(repoID int64, branch string) (*PullRequest, error) {
pr := new(PullRequest)
has, err := x.
Where("head_repo_id = ? AND head_branch = ?", repoID, branch).
OrderBy("id DESC").
Get(pr)
if !has {
return nil, err
}
return pr, err
}
// GetUnmergedPullRequestsByBaseInfo returns all pull requests that are open and has not been merged // GetUnmergedPullRequestsByBaseInfo returns all pull requests that are open and has not been merged
// by given base information (repo and branch). // by given base information (repo and branch).
func GetUnmergedPullRequestsByBaseInfo(repoID int64, branch string) ([]*PullRequest, error) { func GetUnmergedPullRequestsByBaseInfo(repoID int64, branch string) ([]*PullRequest, error) {

@ -24,13 +24,14 @@ const (
// Branch contains the branch information // Branch contains the branch information
type Branch struct { type Branch struct {
Name string Name string
Commit *git.Commit Commit *git.Commit
IsProtected bool IsProtected bool
IsDeleted bool IsDeleted bool
DeletedBranch *models.DeletedBranch DeletedBranch *models.DeletedBranch
CommitsAhead int CommitsAhead int
CommitsBehind int CommitsBehind int
LatestPullRequest *models.PullRequest
} }
// Branches render repository branch page // Branches render repository branch page
@ -181,12 +182,25 @@ func loadBranches(ctx *context.Context) []*Branch {
return nil return nil
} }
pr, err := models.GetLatestPullRequestByHeadInfo(ctx.Repo.Repository.ID, branchName)
if err != nil {
ctx.ServerError("GetLatestPullRequestByHeadInfo", err)
return nil
}
if pr != nil {
if err := pr.LoadIssue(); err != nil {
ctx.ServerError("pr.LoadIssue", err)
return nil
}
}
branches[i] = &Branch{ branches[i] = &Branch{
Name: branchName, Name: branchName,
Commit: commit, Commit: commit,
IsProtected: isProtected, IsProtected: isProtected,
CommitsAhead: divergence.Ahead, CommitsAhead: divergence.Ahead,
CommitsBehind: divergence.Behind, CommitsBehind: divergence.Behind,
LatestPullRequest: pr,
} }
} }

@ -26,7 +26,8 @@
<table class="ui very basic striped fixed table single line"> <table class="ui very basic striped fixed table single line">
<thead> <thead>
<tr> <tr>
<th class="seven wide">{{.i18n.Tr "repo.branch.name"}}</th> <th class="six wide">{{.i18n.Tr "repo.branch.name"}}</th>
<th class="two wide"></th>
<th class="two wide"></th> <th class="two wide"></th>
{{if and $.IsWriter (not $.IsMirror)}} {{if and $.IsWriter (not $.IsMirror)}}
<th class="one wide right aligned">{{.i18n.Tr "repo.branch.delete_head"}}</th> <th class="one wide right aligned">{{.i18n.Tr "repo.branch.delete_head"}}</th>
@ -44,9 +45,10 @@
{{else}} {{else}}
<a href="{{$.RepoLink}}/src/branch/{{.Name | EscapePound}}">{{.Name}}</a> <a href="{{$.RepoLink}}/src/branch/{{.Name | EscapePound}}">{{.Name}}</a>
<p class="time">{{$.i18n.Tr "org.repo_updated"}} {{TimeSince .Commit.Committer.When $.i18n.Lang}}</p> <p class="time">{{$.i18n.Tr "org.repo_updated"}} {{TimeSince .Commit.Committer.When $.i18n.Lang}}</p>
</td>
{{end}} {{end}}
</td>
<td class="ui"> <td class="ui">
{{if not .IsDeleted}}
<div class="commit-divergence"> <div class="commit-divergence">
<div class="bar-group"> <div class="bar-group">
<div class="count count-behind">{{.CommitsBehind}}</div> <div class="count count-behind">{{.CommitsBehind}}</div>
@ -57,6 +59,25 @@
<div class="bar bar-ahead" style="width: {{percentage .CommitsAhead .CommitsBehind .CommitsAhead}}%"></div> <div class="bar bar-ahead" style="width: {{percentage .CommitsAhead .CommitsBehind .CommitsAhead}}%"></div>
</div> </div>
</div> </div>
{{end}}
</td>
<td class="right aligned">
{{if not .LatestPullRequest}}
{{if not .IsDeleted}}
<a href="{{$.RepoLink}}/compare/{{$.DefaultBranch | EscapePound}}...{{if ne $.Repository.Owner.Name $.Owner.Name}}{{$.Owner.Name}}:{{end}}{{.Name | EscapePound}}">
<button id="new-pull-request" class="ui compact basic button">{{$.i18n.Tr "repo.pulls.compare_changes"}}</button>
</a>
{{end}}
{{else}}
<a href="{{$.RepoLink}}/pulls/{{.LatestPullRequest.Issue.Index}}">#{{.LatestPullRequest.Issue.Index}}</a>
{{if .LatestPullRequest.HasMerged}}
<a href="{{$.RepoLink}}/pulls/{{.LatestPullRequest.Issue.Index}}" class="ui purple small label"><i class="octicon octicon-git-pull-request"></i> {{$.i18n.Tr "repo.pulls.merged"}}</a>
{{else if .LatestPullRequest.Issue.IsClosed}}
<a href="{{$.RepoLink}}/pulls/{{.LatestPullRequest.Issue.Index}}" class="ui red small label"><i class="octicon octicon-issue-closed"></i> {{$.i18n.Tr "repo.issues.closed_title"}}</a>
{{else}}
<a href="{{$.RepoLink}}/pulls/{{.LatestPullRequest.Issue.Index}}" class="ui green small label"><i class="octicon octicon-issue-opened"></i> {{$.i18n.Tr "repo.issues.open_title"}}</a>
{{end}}
{{end}}
</td> </td>
{{if and $.IsWriter (not $.IsMirror)}} {{if and $.IsWriter (not $.IsMirror)}}
<td class="right aligned"> <td class="right aligned">

Loading…
Cancel
Save