]> source.dussan.org Git - gitea.git/commitdiff
Add selecting tags on the compare page (#15723)
authorJonathan Tran <jonnytran@gmail.com>
Fri, 7 May 2021 21:10:05 +0000 (17:10 -0400)
committerGitHub <noreply@github.com>
Fri, 7 May 2021 21:10:05 +0000 (23:10 +0200)
* Add selecting tags on the compare page

* Remove unused condition and change indentation

* Fix tag tab in dropdown to be black

* Add compare tag integration test

Co-authored-by: Jonathan Tran <jon@allspice.io>
integrations/compare_test.go [new file with mode: 0644]
options/locale/locale_en-US.ini
routers/repo/compare.go
templates/repo/diff/compare.tmpl
web_src/js/index.js

diff --git a/integrations/compare_test.go b/integrations/compare_test.go
new file mode 100644 (file)
index 0000000..08468cb
--- /dev/null
@@ -0,0 +1,24 @@
+// Copyright 2021 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package integrations
+
+import (
+       "net/http"
+       "testing"
+
+       "github.com/stretchr/testify/assert"
+)
+
+func TestCompareTag(t *testing.T) {
+       defer prepareTestEnv(t)()
+
+       session := loginUser(t, "user2")
+       req := NewRequest(t, "GET", "/user2/repo1/compare/v1.1...master")
+       resp := session.MakeRequest(t, req, http.StatusOK)
+       htmlDoc := NewHTMLParser(t, resp.Body)
+       selection := htmlDoc.doc.Find(".choose.branch .filter.dropdown")
+       // A dropdown for both base and head.
+       assert.Lenf(t, selection.Nodes, 2, "The template has changed")
+}
index 40e4e0c0ba84134c2db3120e349f228217b7781f..51fa3160221f009252719e0f88bacd322d5ac031 100644 (file)
@@ -1286,6 +1286,9 @@ issues.review.resolved_by = marked this conversation as resolved
 issues.assignee.error = Not all assignees was added due to an unexpected error.
 issues.reference_issue.body = Body
 
+compare.compare_base = base
+compare.compare_head = compare
+
 pulls.desc = Enable pull requests and code reviews.
 pulls.new = New Pull Request
 pulls.compare_changes = New Pull Request
index a658374d9b1271d57ccea567e2489f291b81b538..d02ea0b1606bbfcd80d3e21ffe924210334d5175 100644 (file)
@@ -391,7 +391,7 @@ func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, *
        if rootRepo != nil &&
                rootRepo.ID != headRepo.ID &&
                rootRepo.ID != baseRepo.ID {
-               perm, branches, err := getBranchesForRepo(ctx.User, rootRepo)
+               perm, branches, tags, err := getBranchesAndTagsForRepo(ctx.User, rootRepo)
                if err != nil {
                        ctx.ServerError("GetBranchesForRepo", err)
                        return nil, nil, nil, nil, "", ""
@@ -399,19 +399,20 @@ func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, *
                if perm {
                        ctx.Data["RootRepo"] = rootRepo
                        ctx.Data["RootRepoBranches"] = branches
+                       ctx.Data["RootRepoTags"] = tags
                }
        }
 
        // If we have a ownForkRepo and it's different from:
        // 1. The computed base
-       // 2. The computed hea
+       // 2. The computed head
        // 3. The rootRepo (if we have one)
        // then get the branches from it.
        if ownForkRepo != nil &&
                ownForkRepo.ID != headRepo.ID &&
                ownForkRepo.ID != baseRepo.ID &&
                (rootRepo == nil || ownForkRepo.ID != rootRepo.ID) {
-               perm, branches, err := getBranchesForRepo(ctx.User, ownForkRepo)
+               perm, branches, tags, err := getBranchesAndTagsForRepo(ctx.User, ownForkRepo)
                if err != nil {
                        ctx.ServerError("GetBranchesForRepo", err)
                        return nil, nil, nil, nil, "", ""
@@ -419,6 +420,7 @@ func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, *
                if perm {
                        ctx.Data["OwnForkRepo"] = ownForkRepo
                        ctx.Data["OwnForkRepoBranches"] = branches
+                       ctx.Data["OwnForkRepoTags"] = tags
                }
        }
 
@@ -572,25 +574,29 @@ func PrepareCompareDiff(
        return false
 }
 
-func getBranchesForRepo(user *models.User, repo *models.Repository) (bool, []string, error) {
+func getBranchesAndTagsForRepo(user *models.User, repo *models.Repository) (bool, []string, []string, error) {
        perm, err := models.GetUserRepoPermission(repo, user)
        if err != nil {
-               return false, nil, err
+               return false, nil, nil, err
        }
        if !perm.CanRead(models.UnitTypeCode) {
-               return false, nil, nil
+               return false, nil, nil, nil
        }
        gitRepo, err := git.OpenRepository(repo.RepoPath())
        if err != nil {
-               return false, nil, err
+               return false, nil, nil, err
        }
        defer gitRepo.Close()
 
        branches, _, err := gitRepo.GetBranches(0, 0)
        if err != nil {
-               return false, nil, err
+               return false, nil, nil, err
        }
-       return true, branches, nil
+       tags, err := gitRepo.GetTags()
+       if err != nil {
+               return false, nil, nil, err
+       }
+       return true, branches, tags, nil
 }
 
 // CompareDiff show different from one commit to another commit
@@ -608,14 +614,29 @@ func CompareDiff(ctx *context.Context) {
                return
        }
 
-       if ctx.Data["PageIsComparePull"] == true {
-               headBranches, _, err := headGitRepo.GetBranches(0, 0)
-               if err != nil {
-                       ctx.ServerError("GetBranches", err)
-                       return
-               }
-               ctx.Data["HeadBranches"] = headBranches
+       baseGitRepo := ctx.Repo.GitRepo
+       baseTags, err := baseGitRepo.GetTags()
+       if err != nil {
+               ctx.ServerError("GetTags", err)
+               return
+       }
+       ctx.Data["Tags"] = baseTags
 
+       headBranches, _, err := headGitRepo.GetBranches(0, 0)
+       if err != nil {
+               ctx.ServerError("GetBranches", err)
+               return
+       }
+       ctx.Data["HeadBranches"] = headBranches
+
+       headTags, err := headGitRepo.GetTags()
+       if err != nil {
+               ctx.ServerError("GetTags", err)
+               return
+       }
+       ctx.Data["HeadTags"] = headTags
+
+       if ctx.Data["PageIsComparePull"] == true {
                pr, err := models.GetUnmergedPullRequest(headRepo.ID, ctx.Repo.Repository.ID, headBranch, baseBranch)
                if err != nil {
                        if !models.IsErrPullRequestNotExist(err) {
index 124b4e5d1c74d7528c504ea7dd80bf90572bfcbf..7959ef7bb5173c3d69ad8f5855cfd99aa34d10a8 100644 (file)
        {{template "repo/header" .}}
        <div class="ui container {{if .IsSplitStyle}}fluid padded{{end}}">
 
-       {{if .PageIsComparePull}}
-               <h2 class="ui header">
-                       {{if and $.IsSigned (not .Repository.IsArchived)}}
-                               {{.i18n.Tr "repo.pulls.compare_changes"}}
-                               <div class="sub header">{{.i18n.Tr "repo.pulls.compare_changes_desc"}}</div>
-                       {{ else }}
-                               {{.i18n.Tr "action.compare_commits_general"}}
-                       {{ end }}
-               </h2>
-               {{ $BaseCompareName := $.BaseName -}}
-               {{- $HeadCompareName := $.HeadRepo.OwnerName -}}
-               {{- if and (eq $.BaseName $.HeadRepo.OwnerName) (ne $.Repository.Name $.HeadRepo.Name) -}}
+       <h2 class="ui header">
+               {{if and $.PageIsComparePull $.IsSigned (not .Repository.IsArchived)}}
+                       {{.i18n.Tr "repo.pulls.compare_changes"}}
+                       <div class="sub header">{{.i18n.Tr "repo.pulls.compare_changes_desc"}}</div>
+               {{ else }}
+                       {{.i18n.Tr "action.compare_commits_general"}}
+               {{ end }}
+       </h2>
+       {{ $BaseCompareName := $.BaseName -}}
+       {{- $HeadCompareName := $.HeadRepo.OwnerName -}}
+       {{- if and (eq $.BaseName $.HeadRepo.OwnerName) (ne $.Repository.Name $.HeadRepo.Name) -}}
+               {{- $HeadCompareName = printf "%s/%s" $.HeadRepo.OwnerName $.HeadRepo.Name -}}
+       {{- end -}}
+       {{- $OwnForkCompareName := "" -}}
+       {{- if .OwnForkRepo -}}
+               {{- $OwnForkCompareName = .OwnForkRepo.OwnerName -}}
+       {{- end -}}
+       {{- $RootRepoCompareName := "" -}}
+       {{- if .RootRepo -}}
+               {{- $RootRepoCompareName = .RootRepo.OwnerName -}}
+               {{- if eq $.HeadRepo.OwnerName .RootRepo.OwnerName -}}
                        {{- $HeadCompareName = printf "%s/%s" $.HeadRepo.OwnerName $.HeadRepo.Name -}}
                {{- end -}}
-               {{- $OwnForkCompareName := "" -}}
                {{- if .OwnForkRepo -}}
-                       {{- $OwnForkCompareName = .OwnForkRepo.OwnerName -}}
-               {{- end -}}
-               {{- $RootRepoCompareName := "" -}}
-               {{- if .RootRepo -}}
-                       {{- $RootRepoCompareName = .RootRepo.OwnerName -}}
-                       {{- if eq $.HeadRepo.OwnerName .RootRepo.OwnerName -}}
-                               {{- $HeadCompareName = printf "%s/%s" $.HeadRepo.OwnerName $.HeadRepo.Name -}}
-                       {{- end -}}
-                       {{- if .OwnForkRepo -}}
-                               {{- if eq $.OwnForkRepo.OwnerName .RootRepo.OwnerName -}}
-                                       {{- $OwnForkRepoCompareName = printf "%s/%s" $.OwnForkRepo.OwnerName $.OwnForkRepo.Name -}}
-                               {{- end -}}
+                       {{- if eq $.OwnForkRepo.OwnerName .RootRepo.OwnerName -}}
+                               {{- $OwnForkRepoCompareName = printf "%s/%s" $.OwnForkRepo.OwnerName $.OwnForkRepo.Name -}}
                        {{- end -}}
                {{- end -}}
-               <div class="ui segment choose branch">
-                       {{svg "octicon-git-compare"}}
-                       <div class="ui floating filter dropdown" data-no-results="{{.i18n.Tr "repo.pulls.no_results"}}">
-                               <div class="ui basic small button">
-                                       <span class="text">{{.i18n.Tr "repo.pulls.compare_base"}}: {{$BaseCompareName}}:{{$.BaseBranch}}</span>
-                                       {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+       {{- end -}}
+       <div class="ui segment choose branch">
+               {{svg "octicon-git-compare"}}
+               <div class="ui floating filter dropdown" data-no-results="{{.i18n.Tr "repo.pulls.no_results"}}">
+                       <div class="ui basic small button">
+                               <span class="text">{{if $.PageIsComparePull}}{{.i18n.Tr "repo.pulls.compare_base"}}{{else}}{{.i18n.Tr "repo.compare.compare_base"}}{{end}}: {{$BaseCompareName}}:{{$.BaseBranch}}</span>
+                               {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+                       </div>
+                       <div class="menu">
+                               <div class="ui icon search input">
+                                       <i class="icon df ac jc m-0">{{svg "octicon-filter" 16}}</i>
+                                       <input name="search" placeholder="{{.i18n.Tr "repo.filter_branch_and_tag"}}...">
                                </div>
-                               <div class="menu">
-                                       <div class="ui icon search input">
-                                               <i class="icon df ac jc m-0">{{svg "octicon-filter" 16}}</i>
-                                               <input name="search" placeholder="{{.i18n.Tr "repo.pulls.filter_branch"}}...">
+                               <div class="header">
+                                       <div class="ui grid">
+                                               <div class="two column row">
+                                                       <a class="reference column" href="#" data-target=".base-branch-list">
+                                                               <span class="text black">
+                                                                       {{svg "octicon-git-branch" 16 "mr-2"}}{{.i18n.Tr "repo.branches"}}
+                                                               </span>
+                                                       </a>
+                                                       <a class="reference column" href="#" data-target=".base-tag-list">
+                                                               <span class="text black">
+                                                                       {{svg "octicon-tag" 16 "mr-2"}}{{.i18n.Tr "repo.tags"}}
+                                                               </span>
+                                                       </a>
+                                               </div>
                                        </div>
-                                       <div class="scrolling menu">
-                                               {{range .Branches}}
-                                                       <div class="item {{if eq $.BaseBranch .}}selected{{end}}" data-url="{{$.RepoLink}}/compare/{{EscapePound .}}...{{if not $.PullRequestCtx.SameRepo}}{{$.HeadUser.Name}}/{{$.HeadRepo.Name}}:{{end}}{{EscapePound $.HeadBranch}}">{{$BaseCompareName}}:{{.}}</div>
+                               </div>
+                               <div class="scrolling menu reference-list-menu base-branch-list">
+                                       {{range .Branches}}
+                                               <div class="item {{if eq $.BaseBranch .}}selected{{end}}" data-url="{{$.RepoLink}}/compare/{{EscapePound .}}...{{if not $.PullRequestCtx.SameRepo}}{{$.HeadUser.Name}}/{{$.HeadRepo.Name}}:{{end}}{{EscapePound $.HeadBranch}}">{{$BaseCompareName}}:{{.}}</div>
+                                       {{end}}
+                                       {{if not .PullRequestCtx.SameRepo}}
+                                               {{range .HeadBranches}}
+                                                       <div class="item" data-url="{{$.HeadRepo.Link}}/compare/{{EscapePound .}}...{{$.HeadUser.Name}}/{{$.HeadRepo.Name}}:{{EscapePound $.HeadBranch}}">{{$HeadCompareName}}:{{.}}</div>
                                                {{end}}
-                                               {{if not .PullRequestCtx.SameRepo}}
-                                                       {{range .HeadBranches}}
-                                                               <div class="item" data-url="{{$.HeadRepo.Link}}/compare/{{EscapePound .}}...{{$.HeadUser.Name}}/{{$.HeadRepo.Name}}:{{EscapePound $.HeadBranch}}">{{$HeadCompareName}}:{{.}}</div>
-                                                       {{end}}
+                                       {{end}}
+                                       {{if .OwnForkRepo}}
+                                               {{range .OwnForkRepoBranches}}
+                                                       <div class="item" data-url="{{$.OwnForkRepo.Link}}/compare/{{EscapePound .}}...{{$.HeadUser.Name}}/{{$.HeadRepo.Name}}:{{EscapePound $.HeadBranch}}">{{$OwnForkCompareName}}:{{.}}</div>
                                                {{end}}
-                                               {{if .OwnForkRepo}}
-                                                       {{range .OwnForkRepoBranches}}
-                                                               <div class="item" data-url="{{$.OwnForkRepo.Link}}/compare/{{EscapePound .}}...{{$.HeadUser.Name}}/{{$.HeadRepo.Name}}:{{EscapePound $.HeadBranch}}">{{$OwnForkCompareName}}:{{.}}</div>
-                                                       {{end}}
+                                       {{end}}
+                                       {{if .RootRepo}}
+                                               {{range .RootRepoBranches}}
+                                                       <div class="item" data-url="{{$.RootRepo.Link}}/compare/{{EscapePound .}}...{{$.HeadUser.Name}}/{{$.HeadRepo.Name}}:{{EscapePound $.HeadBranch}}">{{$RootRepoCompareName}}:{{.}}</div>
                                                {{end}}
-                                               {{if .RootRepo}}
-                                                       {{range .RootRepoBranches}}
-                                                               <div class="item" data-url="{{$.RootRepo.Link}}/compare/{{EscapePound .}}...{{$.HeadUser.Name}}/{{$.HeadRepo.Name}}:{{EscapePound $.HeadBranch}}">{{$RootRepoCompareName}}:{{.}}</div>
-                                                       {{end}}
+                                       {{end}}
+                               </div>
+                               <div class="scrolling menu reference-list-menu base-tag-list" style="display: none">
+                                       {{range .Tags}}
+                                               <div class="item {{if eq $.BaseBranch .}}selected{{end}}" data-url="{{$.RepoLink}}/compare/{{EscapePound .}}...{{if not $.PullRequestCtx.SameRepo}}{{$.HeadUser.Name}}/{{$.HeadRepo.Name}}:{{end}}{{EscapePound $.HeadBranch}}">{{$BaseCompareName}}:{{.}}</div>
+                                       {{end}}
+                                       {{if not .PullRequestCtx.SameRepo}}
+                                               {{range .HeadTags}}
+                                                       <div class="item" data-url="{{$.HeadRepo.Link}}/compare/{{EscapePound .}}...{{$.HeadUser.Name}}/{{$.HeadRepo.Name}}:{{EscapePound $.HeadBranch}}">{{$HeadCompareName}}:{{.}}</div>
                                                {{end}}
-                                       </div>
+                                       {{end}}
+                                       {{if .OwnForkRepo}}
+                                               {{range .OwnForkRepoTags}}
+                                                       <div class="item" data-url="{{$.OwnForkRepo.Link}}/compare/{{EscapePound .}}...{{$.HeadUser.Name}}/{{$.HeadRepo.Name}}:{{EscapePound $.HeadBranch}}">{{$OwnForkCompareName}}:{{.}}</div>
+                                               {{end}}
+                                       {{end}}
+                                       {{if .RootRepo}}
+                                               {{range .RootRepoTags}}
+                                                       <div class="item" data-url="{{$.RootRepo.Link}}/compare/{{EscapePound .}}...{{$.HeadUser.Name}}/{{$.HeadRepo.Name}}:{{EscapePound $.HeadBranch}}">{{$RootRepoCompareName}}:{{.}}</div>
+                                               {{end}}
+                                       {{end}}
                                </div>
                        </div>
-                       ...
-                       <div class="ui floating filter dropdown">
-                               <div class="ui basic small button">
-                                       <span class="text">{{.i18n.Tr "repo.pulls.compare_compare"}}: {{$HeadCompareName}}:{{$.HeadBranch}}</span>
-                                       {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+               </div>
+               ...
+               <div class="ui floating filter dropdown">
+                       <div class="ui basic small button">
+                               <span class="text">{{if $.PageIsComparePull}}{{.i18n.Tr "repo.pulls.compare_compare"}}{{else}}{{.i18n.Tr "repo.compare.compare_head"}}{{end}}: {{$HeadCompareName}}:{{$.HeadBranch}}</span>
+                               {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+                       </div>
+                       <div class="menu">
+                               <div class="ui icon search input">
+                                       <i class="icon df ac jc m-0">{{svg "octicon-filter" 16}}</i>
+                                       <input name="search" placeholder="{{.i18n.Tr "repo.filter_branch_and_tag"}}...">
                                </div>
-                               <div class="menu">
-                                       <div class="ui icon search input">
-                                               <i class="icon df ac jc m-0">{{svg "octicon-filter" 16}}</i>
-                                               <input name="search" placeholder="{{.i18n.Tr "repo.pulls.filter_branch"}}...">
+                               <div class="header">
+                                       <div class="ui grid">
+                                               <div class="two column row">
+                                                       <a class="reference column" href="#" data-target=".head-branch-list">
+                                                               <span class="text black">
+                                                                       {{svg "octicon-git-branch" 16 "mr-2"}}{{.i18n.Tr "repo.branches"}}
+                                                               </span>
+                                                       </a>
+                                                       <a class="reference column" href="#" data-target=".head-tag-list">
+                                                               <span class="text black">
+                                                                       {{svg "octicon-tag" 16 "mr-2"}}{{.i18n.Tr "repo.tags"}}
+                                                               </span>
+                                                       </a>
+                                               </div>
                                        </div>
-                                       <div class="scrolling menu">
-                                               {{range .HeadBranches}}
-                                                       <div class="{{if eq $.HeadBranch .}}selected{{end}} item" data-url="{{$.RepoLink}}/compare/{{EscapePound $.BaseBranch}}...{{if not $.PullRequestCtx.SameRepo}}{{$.HeadUser.Name}}/{{$.HeadRepo.Name}}:{{end}}{{EscapePound .}}">{{$HeadCompareName}}:{{.}}</div>
+                               </div>
+                               <div class="scrolling menu reference-list-menu head-branch-list">
+                                       {{range .HeadBranches}}
+                                               <div class="{{if eq $.HeadBranch .}}selected{{end}} item" data-url="{{$.RepoLink}}/compare/{{EscapePound $.BaseBranch}}...{{if not $.PullRequestCtx.SameRepo}}{{$.HeadUser.Name}}/{{$.HeadRepo.Name}}:{{end}}{{EscapePound .}}">{{$HeadCompareName}}:{{.}}</div>
+                                       {{end}}
+                                       {{if not .PullRequestCtx.SameRepo}}
+                                               {{range .Branches}}
+                                                       <div class="item" data-url="{{$.RepoLink}}/compare/{{EscapePound $.BaseBranch}}...{{$.BaseName}}/{{$.Repository.Name}}:{{EscapePound .}}">{{$BaseCompareName}}:{{.}}</div>
                                                {{end}}
-                                               {{if not .PullRequestCtx.SameRepo}}
-                                                       {{range .Branches}}
-                                                               <div class="item" data-url="{{$.RepoLink}}/compare/{{EscapePound $.BaseBranch}}...{{$.BaseName}}/{{$.Repository.Name}}:{{EscapePound .}}">{{$BaseCompareName}}:{{.}}</div>
-                                                       {{end}}
+                                       {{end}}
+                                       {{if .OwnForkRepo}}
+                                               {{range .OwnForkRepoBranches}}
+                                                       <div class="item" data-url="{{$.RepoLink}}/compare/{{EscapePound $.BaseBranch}}...{{$.OwnForkRepo.OwnerName}}/{{$.OwnForkRepo.Name}}:{{EscapePound .}}">{{$OwnForkCompareName}}:{{.}}</div>
                                                {{end}}
-                                               {{if .OwnForkRepo}}
-                                                       {{range .OwnForkRepoBranches}}
-                                                               <div class="item" data-url="{{$.RepoLink}}/compare/{{EscapePound $.BaseBranch}}...{{$.OwnForkRepo.OwnerName}}/{{$.OwnForkRepo.Name}}:{{EscapePound .}}">{{$OwnForkCompareName}}:{{.}}</div>
-                                                       {{end}}
+                                       {{end}}
+                                       {{if .RootRepo}}
+                                               {{range .RootRepoBranches}}
+                                                       <div class="item" data-url="{{$.RepoLink}}/compare/{{EscapePound $.BaseBranch}}...{{$.RootRepo.OwnerName}}/{{$.RootRepo.Name}}:{{EscapePound .}}">{{$RootRepoCompareName}}:{{.}}</div>
                                                {{end}}
-                                               {{if .RootRepo}}
-                                                       {{range .RootRepoBranches}}
-                                                               <div class="item" data-url="{{$.RepoLink}}/compare/{{EscapePound $.BaseBranch}}...{{$.RootRepo.OwnerName}}/{{$.RootRepo.Name}}:{{EscapePound .}}">{{$RootRepoCompareName}}:{{.}}</div>
-                                                       {{end}}
+                                       {{end}}
+                               </div>
+                               <div class="scrolling menu reference-list-menu head-tag-list" style="display: none">
+                                       {{range .HeadTags}}
+                                               <div class="{{if eq $.HeadBranch .}}selected{{end}} item" data-url="{{$.RepoLink}}/compare/{{EscapePound $.BaseBranch}}...{{if not $.PullRequestCtx.SameRepo}}{{$.HeadUser.Name}}/{{$.HeadRepo.Name}}:{{end}}{{EscapePound .}}">{{$HeadCompareName}}:{{.}}</div>
+                                       {{end}}
+                                       {{if not .PullRequestCtx.SameRepo}}
+                                               {{range .Tags}}
+                                                       <div class="item" data-url="{{$.RepoLink}}/compare/{{EscapePound $.BaseBranch}}...{{$.BaseName}}/{{$.Repository.Name}}:{{EscapePound .}}">{{$BaseCompareName}}:{{.}}</div>
                                                {{end}}
-                                       </div>
+                                       {{end}}
+                                       {{if .OwnForkRepo}}
+                                               {{range .OwnForkRepoTags}}
+                                                       <div class="item" data-url="{{$.RepoLink}}/compare/{{EscapePound $.BaseBranch}}...{{$.OwnForkRepo.OwnerName}}/{{$.OwnForkRepo.Name}}:{{EscapePound .}}">{{$OwnForkCompareName}}:{{.}}</div>
+                                               {{end}}
+                                       {{end}}
+                                       {{if .RootRepo}}
+                                               {{range .RootRepoTags}}
+                                                       <div class="item" data-url="{{$.RepoLink}}/compare/{{EscapePound $.BaseBranch}}...{{$.RootRepo.OwnerName}}/{{$.RootRepo.Name}}:{{EscapePound .}}">{{$RootRepoCompareName}}:{{.}}</div>
+                                               {{end}}
+                                       {{end}}
                                </div>
                        </div>
                </div>
-       {{end}}
+       </div>
 
        {{if .IsNothingToCompare}}
                {{if and $.IsSigned $.AllowEmptyPr (not .Repository.IsArchived) }}
index 2d9f7f4cafc86fa0e6fb651222c19240d7334c7b..6ffff9cb1916c2a62c6273179088d1466ceec3e9 100644 (file)
@@ -1241,10 +1241,16 @@ async function initRepository() {
     $(this).select();
   });
 
+  // Compare or pull request
+  const $repoDiff = $('.repository.diff');
+  if ($repoDiff.length) {
+    initBranchOrTagDropdown('.choose.branch .dropdown');
+    initFilterSearchDropdown('.choose.branch .dropdown');
+  }
+
   // Pull request
   const $repoComparePull = $('.repository.compare.pull');
   if ($repoComparePull.length > 0) {
-    initFilterSearchDropdown('.choose.branch .dropdown');
     // show pull request form
     $repoComparePull.find('button.show-form').on('click', function (e) {
       e.preventDefault();
@@ -3447,6 +3453,17 @@ function initIssueTimetracking() {
   });
 }
 
+function initBranchOrTagDropdown(selector) {
+  $(selector).each(function() {
+    const $dropdown = $(this);
+    $dropdown.find('.reference.column').on('click', function () {
+      $dropdown.find('.scrolling.reference-list-menu').hide();
+      $($(this).data('target')).show();
+      return false;
+    });
+  });
+}
+
 function initFilterBranchTagDropdown(selector) {
   $(selector).each(function () {
     const $dropdown = $(this);