Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use frontend fetch for branch dropdown component #25719

Merged
merged 49 commits into from
Jul 21, 2023
Merged
Show file tree
Hide file tree
Changes from 44 commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
5217c93
save for branches
HesterG Jul 4, 2023
1404c7e
update tags
HesterG Jul 4, 2023
494b632
update
HesterG Jul 4, 2023
db1156a
debounce
HesterG Jul 4, 2023
0bd74db
change debounce
HesterG Jul 5, 2023
592a93a
remove comments
HesterG Jul 6, 2023
aa20d3b
position
HesterG Jul 6, 2023
6106120
css
HesterG Jul 6, 2023
d786e23
rename
HesterG Jul 6, 2023
b795e40
add back comment
HesterG Jul 6, 2023
476cdb6
remove unnecessary
HesterG Jul 6, 2023
51dac0e
save for adding Branches
HesterG Jul 6, 2023
bd2c3f9
fix typo
HesterG Jul 6, 2023
9061d45
fetch on mounted
HesterG Jul 6, 2023
eeda2d5
fix lint
HesterG Jul 6, 2023
5e0c11c
remove unnecessary
HesterG Jul 6, 2023
fcded06
Update web_src/js/components/RepoBranchTagSelector.vue
HesterG Jul 7, 2023
f9eb341
save: v-show and loading
HesterG Jul 7, 2023
8f28814
save changes
HesterG Jul 10, 2023
f39cb22
save changes for branches
HesterG Jul 10, 2023
e4d9a64
comments
HesterG Jul 10, 2023
43fcd87
comment
HesterG Jul 10, 2023
be90931
save changes for rename and handler
HesterG Jul 11, 2023
cfbac17
fix lint
HesterG Jul 11, 2023
b05a816
use native svg
HesterG Jul 11, 2023
67b9910
remove comment
HesterG Jul 11, 2023
e339424
fix lint
HesterG Jul 11, 2023
c7a33e6
fix lint
HesterG Jul 11, 2023
c1026e1
use v-show for v-for
HesterG Jul 12, 2023
611edce
modify fallback for default branch
HesterG Jul 12, 2023
87b2e34
fix typo
HesterG Jul 12, 2023
0783e82
fix check
HesterG Jul 12, 2023
c94931b
fix for new issue
HesterG Jul 12, 2023
5872d87
ctx.written,try catch finally, computing createTag, svg change, css s…
HesterG Jul 17, 2023
8cd6038
comment
HesterG Jul 17, 2023
6be08e6
Update web_src/js/components/RepoBranchTagSelector.vue
HesterG Jul 17, 2023
40899c7
remove important
HesterG Jul 17, 2023
967ce65
fix branch handling
wxiaoguang Jul 21, 2023
9c8119a
use separate .loading-indicator to avoid conflicting with fomantic dr…
wxiaoguang Jul 21, 2023
2bb6f44
fix conflicted "data" and "computed"
wxiaoguang Jul 21, 2023
65b0328
use toast and add FIXME
wxiaoguang Jul 21, 2023
daa4ef5
use SVG symbol instead of hard-coded content
wxiaoguang Jul 21, 2023
0f0b9ec
fix lint
wxiaoguang Jul 21, 2023
0ec8fd5
fix
HesterG Jul 21, 2023
1b2d200
sync
HesterG Jul 21, 2023
5c5ac0a
sync import and rename createTag
HesterG Jul 21, 2023
a6956d2
Merge branch 'main' into branch-dropdown-fetch
HesterG Jul 21, 2023
0021b89
Merge branch 'main' into branch-dropdown-fetch
GiteaBot Jul 21, 2023
c4f679d
Merge branch 'main' into branch-dropdown-fetch
GiteaBot Jul 21, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 9 additions & 21 deletions modules/context/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -660,13 +660,6 @@ func RepoAssignment(ctx *Context) context.CancelFunc {
return cancel
}

tags, err := repo_model.GetTagNamesByRepoID(ctx, ctx.Repo.Repository.ID)
if err != nil {
ctx.ServerError("GetTagNamesByRepoID", err)
return cancel
}
ctx.Data["Tags"] = tags

branchOpts := git_model.FindBranchOptions{
RepoID: ctx.Repo.Repository.ID,
IsDeletedBranch: util.OptionalBoolFalse,
Expand All @@ -680,7 +673,7 @@ func RepoAssignment(ctx *Context) context.CancelFunc {
return cancel
}

// non empty repo should have at least 1 branch, so this repository's branches haven't been synced yet
// non-empty repo should have at least 1 branch, so this repository's branches haven't been synced yet
if branchesTotal == 0 { // fallback to do a sync immediately
branchesTotal, err = repo_module.SyncRepoBranches(ctx, ctx.Repo.Repository.ID, 0)
if err != nil {
Expand All @@ -689,24 +682,19 @@ func RepoAssignment(ctx *Context) context.CancelFunc {
}
}

// FIXME: use paganation and async loading
branchOpts.ExcludeBranchNames = []string{ctx.Repo.Repository.DefaultBranch}
brs, err := git_model.FindBranchNames(ctx, branchOpts)
if err != nil {
ctx.ServerError("GetBranches", err)
return cancel
}
// always put default branch on the top
ctx.Data["Branches"] = append(branchOpts.ExcludeBranchNames, brs...)
ctx.Data["BranchesCount"] = branchesTotal

// If not branch selected, try default one.
// If default branch doesn't exist, fall back to some other branch.
// If no branch is set in the request URL, try to guess a default one.
if len(ctx.Repo.BranchName) == 0 {
if len(ctx.Repo.Repository.DefaultBranch) > 0 && gitRepo.IsBranchExist(ctx.Repo.Repository.DefaultBranch) {
ctx.Repo.BranchName = ctx.Repo.Repository.DefaultBranch
} else if len(brs) > 0 {
ctx.Repo.BranchName = brs[0]
} else {
ctx.Repo.BranchName, _ = gitRepo.GetDefaultBranch()
if ctx.Repo.BranchName == "" {
// If it still can't get a default branch, fall back to default branch from setting.
// Something might be wrong. Either site admin should fix the repo sync or Gitea should fix a potential bug.
ctx.Repo.BranchName = setting.Repository.DefaultBranch
}
}
ctx.Repo.RefName = ctx.Repo.BranchName
}
Expand Down
6 changes: 6 additions & 0 deletions routers/web/repo/compare.go
Original file line number Diff line number Diff line change
Expand Up @@ -754,6 +754,12 @@ func CompareDiff(ctx *context.Context) {
}
ctx.Data["HeadBranches"] = headBranches

// For compare repo branches
PrepareBranchList(ctx)
if ctx.Written() {
return
}

headTags, err := repo_model.GetTagNamesByRepoID(ctx, ci.HeadRepo.ID)
if err != nil {
ctx.ServerError("GetTagNamesByRepoID", err)
Expand Down
32 changes: 22 additions & 10 deletions routers/web/repo/issue.go
Original file line number Diff line number Diff line change
Expand Up @@ -785,18 +785,10 @@ func RetrieveRepoMetas(ctx *context.Context, repo *repo_model.Repository, isPull
return nil
}

brs, err := git_model.FindBranchNames(ctx, git_model.FindBranchOptions{
RepoID: ctx.Repo.Repository.ID,
ListOptions: db.ListOptions{
ListAll: true,
},
IsDeletedBranch: util.OptionalBoolFalse,
})
if err != nil {
ctx.ServerError("GetBranches", err)
PrepareBranchList(ctx)
if ctx.Written() {
return nil
}
ctx.Data["Branches"] = brs

// Contains true if the user can create issue dependencies
ctx.Data["CanCreateIssueDependencies"] = ctx.Repo.CanCreateIssueDependencies(ctx.Doer, isPull)
Expand Down Expand Up @@ -921,6 +913,13 @@ func NewIssue(ctx *context.Context) {

RetrieveRepoMetas(ctx, ctx.Repo.Repository, false)

tags, err := repo_model.GetTagNamesByRepoID(ctx, ctx.Repo.Repository.ID)
if err != nil {
ctx.ServerError("GetTagNamesByRepoID", err)
return
}
ctx.Data["Tags"] = tags

_, templateErrs := issue_service.GetTemplatesFromDefaultBranch(ctx.Repo.Repository, ctx.Repo.GitRepo)
if errs := setTemplateIfExists(ctx, issueTemplateKey, IssueTemplateCandidates); len(errs) > 0 {
for k, v := range errs {
Expand Down Expand Up @@ -1918,6 +1917,19 @@ func ViewIssue(ctx *context.Context) {
ctx.Data["ShouldShowCommentType"] = func(commentType issues_model.CommentType) bool {
return hiddenCommentTypes == nil || hiddenCommentTypes.Bit(int(commentType)) == 0
}
// For sidebar
PrepareBranchList(ctx)

if ctx.Written() {
return
}

tags, err := repo_model.GetTagNamesByRepoID(ctx, ctx.Repo.Repository.ID)
if err != nil {
ctx.ServerError("GetTagNamesByRepoID", err)
return
}
ctx.Data["Tags"] = tags

ctx.HTML(http.StatusOK, tplIssueView)
}
Expand Down
10 changes: 10 additions & 0 deletions routers/web/repo/pull.go
Original file line number Diff line number Diff line change
Expand Up @@ -729,6 +729,11 @@ func ViewPullCommits(ctx *context.Context) {
ctx.Data["HasIssuesOrPullsWritePermission"] = ctx.Repo.CanWriteIssuesOrPulls(issue.IsPull)
ctx.Data["IsIssuePoster"] = ctx.IsSigned && issue.IsPoster(ctx.Doer.ID)

// For PR commits page
PrepareBranchList(ctx)
if ctx.Written() {
return
}
getBranchData(ctx, issue)
ctx.HTML(http.StatusOK, tplPullCommits)
}
Expand Down Expand Up @@ -893,6 +898,11 @@ func ViewPullFiles(ctx *context.Context) {
ctx.Data["HasIssuesOrPullsWritePermission"] = ctx.Repo.CanWriteIssuesOrPulls(issue.IsPull)

ctx.Data["IsAttachmentEnabled"] = setting.Attachment.Enabled
// For files changed page
PrepareBranchList(ctx)
if ctx.Written() {
return
}
upload.AddUploadContext(ctx, "comment")

ctx.HTML(http.StatusOK, tplPullFiles)
Expand Down
21 changes: 21 additions & 0 deletions routers/web/repo/release.go
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,20 @@ func NewRelease(ctx *context.Context) {
ctx.Data["Assignees"] = MakeSelfOnTop(ctx, assigneeUsers)

upload.AddUploadContext(ctx, "release")

// For New Release page
PrepareBranchList(ctx)
if ctx.Written() {
return
}

tags, err := repo_model.GetTagNamesByRepoID(ctx, ctx.Repo.Repository.ID)
if err != nil {
ctx.ServerError("GetTagNamesByRepoID", err)
return
}
ctx.Data["Tags"] = tags

ctx.HTML(http.StatusOK, tplReleaseNew)
}

Expand All @@ -361,6 +375,13 @@ func NewReleasePost(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.release.new_release")
ctx.Data["PageIsReleaseList"] = true

tags, err := repo_model.GetTagNamesByRepoID(ctx, ctx.Repo.Repository.ID)
if err != nil {
ctx.ServerError("GetTagNamesByRepoID", err)
return
}
ctx.Data["Tags"] = tags

if ctx.HasError() {
ctx.HTML(http.StatusOK, tplReleaseNew)
return
Expand Down
59 changes: 59 additions & 0 deletions routers/web/repo/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -622,3 +622,62 @@ func SearchRepo(ctx *context.Context) {
Data: results,
})
}

type branchTagSearchResponse struct {
Results []string `json:"results"`
}

// GetBranchesList get branches for current repo'
func GetBranchesList(ctx *context.Context) {
branchOpts := git_model.FindBranchOptions{
RepoID: ctx.Repo.Repository.ID,
IsDeletedBranch: util.OptionalBoolFalse,
ListOptions: db.ListOptions{
ListAll: true,
},
}
branchOpts.ExcludeBranchNames = []string{ctx.Repo.Repository.DefaultBranch}
branches, err := git_model.FindBranchNames(ctx, branchOpts)
if err != nil {
ctx.JSON(http.StatusInternalServerError, err)
return
}
resp := &branchTagSearchResponse{}
// always put default branch on the top
branches = append(branchOpts.ExcludeBranchNames, branches...)
resp.Results = branches
ctx.JSON(http.StatusOK, resp)
}

// GetTagList get tag list for current repo
func GetTagList(ctx *context.Context) {
tags, err := repo_model.GetTagNamesByRepoID(ctx, ctx.Repo.Repository.ID)
if err != nil {
ctx.JSON(http.StatusInternalServerError, err)
return
}
resp := &branchTagSearchResponse{}
resp.Results = tags
ctx.JSON(http.StatusOK, resp)
}

func PrepareBranchList(ctx *context.Context) {
branchOpts := git_model.FindBranchOptions{
RepoID: ctx.Repo.Repository.ID,
IsDeletedBranch: util.OptionalBoolFalse,
ListOptions: db.ListOptions{
ListAll: true,
},
}
brs, err := git_model.FindBranchNames(ctx, branchOpts)
if err != nil {
ctx.ServerError("GetBranches", err)
HesterG marked this conversation as resolved.
Show resolved Hide resolved
return
}
// always put default branch on the top if it exists
if util.SliceContains(brs, ctx.Repo.Repository.DefaultBranch) {
brs = util.SliceRemoveAll(brs, ctx.Repo.Repository.DefaultBranch)
brs = append([]string{ctx.Repo.Repository.DefaultBranch}, brs...)
}
ctx.Data["Branches"] = brs
}
11 changes: 11 additions & 0 deletions routers/web/repo/setting/protected_branch.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/web"
"code.gitea.io/gitea/routers/web/repo"
"code.gitea.io/gitea/services/forms"
pull_service "code.gitea.io/gitea/services/pull"
"code.gitea.io/gitea/services/repository"
Expand All @@ -44,6 +45,11 @@ func ProtectedBranchRules(ctx *context.Context) {
}
ctx.Data["ProtectedBranches"] = rules

repo.PrepareBranchList(ctx)
if ctx.Written() {
return
}

ctx.HTML(http.StatusOK, tplBranches)
}

Expand All @@ -52,6 +58,11 @@ func SetDefaultBranchPost(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.settings.branches.update_default_branch")
ctx.Data["PageIsSettingsBranches"] = true

repo.PrepareBranchList(ctx)
if ctx.Written() {
return
}

repo := ctx.Repo.Repository

switch ctx.FormString("action") {
Expand Down
2 changes: 2 additions & 0 deletions routers/web/web.go
Original file line number Diff line number Diff line change
Expand Up @@ -1094,6 +1094,7 @@ func registerRoutes(m *web.Route) {
}, context.RepoRef(), canEnableEditor, context.RepoMustNotBeArchived())

m.Group("/branches", func() {
m.Get("/list", repo.GetBranchesList)
m.Group("/_new", func() {
m.Post("/branch/*", context.RepoRefByType(context.RepoRefBranch), repo.CreateBranch)
m.Post("/tag/*", context.RepoRefByType(context.RepoRefTag), repo.CreateBranch)
Expand All @@ -1108,6 +1109,7 @@ func registerRoutes(m *web.Route) {
m.Group("/{username}/{reponame}", func() {
m.Group("/tags", func() {
m.Get("", repo.TagsList)
m.Get("/list", repo.GetTagList)
m.Get(".rss", feedEnabled, repo.TagsListFeedRSS)
m.Get(".atom", feedEnabled, repo.TagsListFeedAtom)
}, ctxDataSet("EnableFeed", setting.Other.EnableFeed),
Expand Down
2 changes: 0 additions & 2 deletions templates/repo/branch_dropdown.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,6 @@
'tagName': {{.root.TagName}},
'branchName': {{.root.BranchName}},
'noTag': {{.noTag}},
'branches': {{.root.Branches}},
'tags': {{.root.Tags}},
'defaultBranch': {{$defaultBranch}},
'enableFeed': {{.root.EnableFeed}},
'rssURLPrefix': '{{$.root.RepoLink}}/rss/branch/',
Expand Down
4 changes: 4 additions & 0 deletions web_src/css/repo.css
Original file line number Diff line number Diff line change
Expand Up @@ -3359,3 +3359,7 @@ tbody.commit-list {
font-size: 18px;
margin-left: 4px;
}

#cherry-pick-modal .scrolling.menu {
max-height: 200px;
}
Loading