]> source.dussan.org Git - gitea.git/commitdiff
Show dropdown with all statuses for commit (#13977)
authorCirno the Strongest <1447794+CirnoT@users.noreply.github.com>
Sun, 20 Dec 2020 03:13:12 +0000 (04:13 +0100)
committerGitHub <noreply@github.com>
Sun, 20 Dec 2020 03:13:12 +0000 (11:13 +0800)
* Show dropdown with all statuses for commit

* Use popups

* Remove unnecessary change

* Style popup

* Use divided list

* As per @silverwind

* Refactor GetLastCommitStatus

* Missing dropdown on repo home and commit page

* Fix tests

* Make status icon be a part of a link on PR list

* Fix missing translation call

* Indent fix

Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
18 files changed:
integrations/repo_commits_test.go
models/commit_status.go
routers/repo/blame.go
routers/repo/commit.go
routers/repo/issue.go
routers/repo/view.go
routers/user/home.go
services/pull/pull.go
templates/repo/commit_page.tmpl
templates/repo/commit_status.tmpl
templates/repo/commit_statuses.tmpl [new file with mode: 0644]
templates/repo/commits_list.tmpl
templates/repo/commits_list_small.tmpl
templates/repo/view_list.tmpl
templates/shared/issuelist.tmpl
web_src/js/index.js
web_src/less/_base.less
web_src/less/_repository.less

index f341f8026af5a06244b18a7ef11ab169f1ad6700..f26960271a3beb4f15a961a0905e8042da5941cd 100644 (file)
@@ -65,7 +65,7 @@ func doTestRepoCommitWithStatus(t *testing.T, state string, classes ...string) {
 
        doc = NewHTMLParser(t, resp.Body)
        // Check if commit status is displayed in message column
-       sel := doc.doc.Find("#commits-table tbody tr td.message i.commit-status")
+       sel := doc.doc.Find("#commits-table tbody tr td.message a.commit-statuses-trigger i.commit-status")
        assert.Equal(t, sel.Length(), 1)
        for _, class := range classes {
                assert.True(t, sel.HasClass(class))
index 9dffece3785f28940931344e8b80e537afaed99c..5d637afc2b58029462ca8b517c3377bb8817c53f 100644 (file)
@@ -252,7 +252,8 @@ func NewCommitStatus(opts NewCommitStatusOptions) error {
 
 // SignCommitWithStatuses represents a commit with validation of signature and status state.
 type SignCommitWithStatuses struct {
-       Status *CommitStatus
+       Status   *CommitStatus
+       Statuses []*CommitStatus
        *SignCommit
 }
 
@@ -272,6 +273,7 @@ func ParseCommitsWithStatus(oldCommits *list.List, repo *Repository) *list.List
                if err != nil {
                        log.Error("GetLatestCommitStatus: %v", err)
                } else {
+                       commit.Statuses = statuses
                        commit.Status = CalcCommitStatus(statuses)
                }
 
index 514adc3bc1ff361202a05d6d9b699c98e19ec00e..9be1ea05af9b4eb4776a155f82e799a6a90126b8 100644 (file)
@@ -102,6 +102,7 @@ func RefBlame(ctx *context.Context) {
        blob := entry.Blob()
 
        ctx.Data["LatestCommitStatus"] = models.CalcCommitStatus(statuses)
+       ctx.Data["LatestCommitStatuses"] = statuses
 
        ctx.Data["Paths"] = paths
        ctx.Data["TreeLink"] = treeLink
index 43a95c2adb95dcdc509c7d4d174fe2e757a08b4e..c411d247e2e59e2b3b65ceac38fd7ddd69fdd8a0 100644 (file)
@@ -302,6 +302,7 @@ func Diff(ctx *context.Context) {
        }
 
        ctx.Data["CommitStatus"] = models.CalcCommitStatus(statuses)
+       ctx.Data["CommitStatuses"] = statuses
 
        diff, err := gitdiff.GetDiffCommit(repoPath,
                commitID, setting.Git.MaxGitDiffLines,
index e350f74de9d3bc1aeedf5e1aa9794bce818ad8f9..eec0b7fd9628ccf25d6f0a8c39be78018dd73dbe 100644 (file)
@@ -259,7 +259,8 @@ func issues(ctx *context.Context, milestoneID, projectID int64, isPullOption uti
                                return
                        }
 
-                       commitStatus[issues[i].PullRequest.ID], _ = pull_service.GetLastCommitStatus(issues[i].PullRequest)
+                       var statuses, _ = pull_service.GetLastCommitStatus(issues[i].PullRequest)
+                       commitStatus[issues[i].PullRequest.ID] = models.CalcCommitStatus(statuses)
                }
        }
 
index 66ad8e3ad7fac7e709250fa5ebe804eba3f92812..8f010490c3fb8c1089221d73cc9fddd3977e65b9 100644 (file)
@@ -359,6 +359,7 @@ func renderDirectory(ctx *context.Context, treeLink string) {
        }
 
        ctx.Data["LatestCommitStatus"] = models.CalcCommitStatus(statuses)
+       ctx.Data["LatestCommitStatuses"] = statuses
 
        // Check permission to add or upload new file.
        if ctx.Repo.CanWrite(models.UnitTypeCode) && ctx.Repo.IsViewBranch {
index 779971ca97d4075c49290258085ead5c8276e950..46532f82b9c65a8003df40514c3ac934ae7716e7 100644 (file)
@@ -563,7 +563,8 @@ func Issues(ctx *context.Context) {
                issue.Repo = showReposMap[issue.RepoID]
 
                if isPullList {
-                       commitStatus[issue.PullRequest.ID], _ = pull_service.GetLastCommitStatus(issue.PullRequest)
+                       var statuses, _ = pull_service.GetLastCommitStatus(issue.PullRequest)
+                       commitStatus[issue.PullRequest.ID] = models.CalcCommitStatus(statuses)
                }
        }
 
index 23a4bf9776bdabd1712a1ec2397b77d404fdc405..499bafff1e4f2ce31918fdf87c48fc1ebd15020b 100644 (file)
@@ -640,8 +640,8 @@ func GetCommitMessages(pr *models.PullRequest) string {
        return stringBuilder.String()
 }
 
-// GetLastCommitStatus returns the last commit status for this pull request.
-func GetLastCommitStatus(pr *models.PullRequest) (status *models.CommitStatus, err error) {
+// GetLastCommitStatus returns list of commit statuses for latest commit on this pull request.
+func GetLastCommitStatus(pr *models.PullRequest) (status []*models.CommitStatus, err error) {
        if err = pr.LoadBaseRepo(); err != nil {
                return nil, err
        }
@@ -666,7 +666,7 @@ func GetLastCommitStatus(pr *models.PullRequest) (status *models.CommitStatus, e
        if err != nil {
                return nil, err
        }
-       return models.CalcCommitStatus(statusList), nil
+       return statusList, nil
 }
 
 // IsHeadEqualWithBranch returns if the commits of branchName are available in pull request head
index 0448c938bd51acde30a30c95c9a6f7b66ba0b8bb..6260d2e9652babebf186901526b64060f3504849 100644 (file)
@@ -23,7 +23,7 @@
                                {{.i18n.Tr "repo.diff.browse_source"}}
                        </a>
                        {{end}}
-                       <h3><span class="message-wrapper"><span class="commit-summary" title="{{.Commit.Summary}}">{{RenderCommitMessage .Commit.Message $.RepoLink $.Repository.ComposeMetas}}</span></span>{{template "repo/commit_status" .CommitStatus}}</h3>
+                       <h3><span class="message-wrapper"><span class="commit-summary" title="{{.Commit.Summary}}">{{RenderCommitMessage .Commit.Message $.RepoLink $.Repository.ComposeMetas}}</span></span>{{template "repo/commit_statuses" dict "Status" .CommitStatus "Statuses" .CommitStatuses  "root" $}}</h3>
                        {{if IsMultilineCommitMessage .Commit.Message}}
                                <pre class="commit-body">{{RenderCommitBody .Commit.Message $.RepoLink $.Repository.ComposeMetas}}</pre>
                        {{end}}
index 638f81ed8ffc71002323ebd5205a53be4db2132e..75ab6b4e1c39b14f41bd52c25164c57a1e584fb8 100644 (file)
@@ -1,15 +1,15 @@
 {{if eq .State "pending"}}
-       <a class="commit-status-link" href="{{.TargetURL}}" target="_blank" rel="noopener noreferrer"><i class="commit-status circle icon yellow"></i></a>
+       <i class="commit-status circle icon yellow"></i>
 {{end}}
 {{if eq .State "success"}}
-       <a class="commit-status-link" href="{{.TargetURL}}" target="_blank" rel="noopener noreferrer"><i class="commit-status check icon green"></i></a>
+       <i class="commit-status check icon green"></i>
 {{end}}
 {{if eq .State "error"}}
-       <a class="commit-status-link" href="{{.TargetURL}}" target="_blank" rel="noopener noreferrer"><i class="commit-status warning icon red"></i></a>
+       <i class="commit-status warning icon red"></i>
 {{end}}
 {{if eq .State "failure"}}
-       <a class="commit-status-link" href="{{.TargetURL}}" target="_blank" rel="noopener noreferrer"><i class="commit-status remove icon red"></i></a>
+       <i class="commit-status remove icon red"></i>
 {{end}}
 {{if eq .State "warning"}}
-       <a class="commit-status-link" href="{{.TargetURL}}" target="_blank" rel="noopener noreferrer"><i class="commit-status warning sign icon yellow"></i></a>
+       <i class="commit-status warning sign icon yellow"></i>
 {{end}}
diff --git a/templates/repo/commit_statuses.tmpl b/templates/repo/commit_statuses.tmpl
new file mode 100644 (file)
index 0000000..d2e9f0b
--- /dev/null
@@ -0,0 +1,14 @@
+<a class="ui link commit-statuses-trigger">{{template "repo/commit_status" .Status}}</a>
+<div class="ui popup very wide fixed basic commit-statuses">
+       <div class="ui relaxed list divided">
+               {{range .Statuses}}
+                       <div class="ui item singular-status">
+                               <span>{{template "repo/commit_status" .}}</span>
+                               <span class="ui">{{.Context}} <span class="text grey">{{.Description}}</span></span>
+                               {{if .TargetURL}}
+                                       <div class="ui right"><a href="{{.TargetURL}}" target="_blank" rel="noopener noreferrer">{{$.root.i18n.Tr "repo.pulls.status_checks_details"}}</a></div>
+                               {{end}}
+                       </div>
+               {{end}}
+       </div>
+</div>
index e7489bf51d244319b42a859b06c3120d77ce1110..66138e21389db1ab03f22efedf7047bd15c79f1f 100644 (file)
@@ -70,7 +70,7 @@
                                                        <button class="basic compact mini ui icon button commit-button"><i class="ellipsis horizontal icon"></i></button>
                                                        {{end}}
                                                        {{if eq (CommitType .) "SignCommitWithStatuses"}}
-                                                               {{template "repo/commit_status" .Status}}
+                                                               {{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses "root" $}}
                                                        {{end}}
                                                        {{if IsMultilineCommitMessage .Message}}
                                                        <pre class="commit-body" style="display: none;">{{RenderCommitBody .Message $.RepoLink $.Repository.ComposeMetas}}</pre>
index aaf4174bbda0f4d0d1bf2fd4ca623165e120c1d2..acab040a450403d1ed55b38ff06d8899c715391b 100644 (file)
@@ -16,8 +16,8 @@
 
                <span class="ui float right shabox">
                        {{if eq (CommitType .) "SignCommitWithStatuses"}}
-                       {{template "repo/commit_status" .Status}}
-               {{end}}
+                               {{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses "root" $.root}}
+                       {{end}}
                        {{$class := "ui sha label"}}
                        {{if .Signature}}
                                {{$class = (printf "%s%s" $class " isSigned")}}
index a99efab0206da3feeb6dc8135a6ce7e6ff1fb109..fc66fb6b2d5b79bbd21c4bf5244b4622c5946559 100644 (file)
@@ -21,7 +21,7 @@
                                                {{template "repo/shabox_badge" dict "root" $ "verification" .LatestCommitVerification}}
                                        {{end}}
                                </a>
-                               {{template "repo/commit_status" .LatestCommitStatus}}
+                               {{template "repo/commit_statuses" dict "Status" .LatestCommitStatus "Statuses" .LatestCommitStatuses "root" $}}
                                {{ $commitLink:= printf "%s/commit/%s" .RepoLink .LatestCommit.ID }}
                                <span class="grey commit-summary" title="{{.LatestCommit.Summary}}"><span class="message-wrapper">{{RenderCommitMessageLinkSubject .LatestCommit.Message $.RepoLink $commitLink $.Repository.ComposeMetas}}</span>
                                {{if IsMultilineCommitMessage .LatestCommit.Message}}
index 62f55f6c40b5b6009e3674f8e8093680304e4f92..adb319a6447a09549ae0fd43e8460c9e66985afa 100644 (file)
                        </div>
                        <div class="issue-item-main f1 fc df">
                                <div class="issue-item-top-row df ac fw">
-                                       <a class="title mr-3" href="{{if .HTMLURL}}{{.HTMLURL}}{{else}}{{$.Link}}/{{.Index}}{{end}}">{{RenderEmoji .Title}}</a>
-                                       {{if .IsPull }}
-                                               {{if (index $.CommitStatus .PullRequest.ID)}}
-                                                       {{template "repo/commit_status" (index $.CommitStatus .PullRequest.ID)}}
+                                       <a class="title mr-3" href="{{if .HTMLURL}}{{.HTMLURL}}{{else}}{{$.Link}}/{{.Index}}{{end}}">
+                                               {{RenderEmoji .Title}}
+                                               {{if .IsPull }}
+                                                       {{if (index $.CommitStatus .PullRequest.ID)}}
+                                                               {{template "repo/commit_status" (index $.CommitStatus .PullRequest.ID)}}
+                                                       {{end}}
                                                {{end}}
-                                       {{end}}
+                                       </a>
                                        <span class="labels-list">
                                                {{range .Labels}}
                                                        <a class="ui label" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&state={{$.State}}&labels={{.ID}}{{if ne $.listType "milestone"}}&milestone={{$.MilestoneID}}{{end}}&assignee={{$.AssigneeID}}" style="color: {{.ForegroundColor}}; background-color: {{.Color}}" title="{{.Description | RenderEmojiPlain}}">{{.Name | RenderEmoji}}</a>
index e55e2febe058360a66b5f9d808b00867e1dddbb5..dd7032eb842de02e22e99339a90546b57fefebe8 100644 (file)
@@ -759,6 +759,15 @@ async function initRepository() {
     });
   }
 
+  // Commit statuses
+  $('.commit-statuses-trigger').each(function () {
+    $(this)
+      .popup({
+        on: 'click',
+        position: ($('.repository.file.list').length > 0 ? 'right center' : 'left center'),
+      });
+  });
+
   // File list and commits
   if ($('.repository.file.list').length > 0 || ('.repository.commits').length > 0) {
     initFilterBranchTagDropdown('.choose.reference .dropdown');
index e49b1c5bbb966d2c2260548c675f54b2a2e3e4e8..7dbbda04de62803c1edeba34c6e90d069e27a21e 100644 (file)
@@ -530,6 +530,10 @@ a.ui.card:hover,
   border-radius: var(--border-radius);
 }
 
+.ui.divided.list > .item {
+  border-color: var(--color-secondary);
+}
+
 .dont-break-out {
   overflow-wrap: break-word;
   word-wrap: break-word;
@@ -1164,7 +1168,7 @@ footer {
   }
 }
 
-.center {
+.center:not(.popup) {
   text-align: center;
 }
 
index 0180a6ec1bbe9f8b707a4c7b53872927fd782d71..f859737e070b8a203985b8e16791042bdca1ad4d 100644 (file)
@@ -1,4 +1,8 @@
 .repository {
+  .commit-statuses .list > .item {
+    line-height: 2;
+  }
+
   .repo-header {
     .ui.compact.menu {
       margin-left: 1rem;