From 61d94b247ab0c9289cd04253fed78283300e8c5e Mon Sep 17 00:00:00 2001 From: Nanguan Lin <70063547+lng2020@users.noreply.github.com> Date: Mon, 23 Oct 2023 20:34:17 +0800 Subject: [PATCH 1/6] Fix `link-action` redirect network error (#27734) image --------- Co-authored-by: 6543 <6543@obermui.de> --- routers/web/repo/milestone.go | 7 ++++--- routers/web/repo/projects.go | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/routers/web/repo/milestone.go b/routers/web/repo/milestone.go index 4db02fce9ea4f..0e6f63074749f 100644 --- a/routers/web/repo/milestone.go +++ b/routers/web/repo/milestone.go @@ -231,14 +231,15 @@ func EditMilestonePost(ctx *context.Context) { // ChangeMilestoneStatus response for change a milestone's status func ChangeMilestoneStatus(ctx *context.Context) { - toClose := false + var toClose bool switch ctx.Params(":action") { case "open": toClose = false case "close": toClose = true default: - ctx.Redirect(ctx.Repo.RepoLink + "/milestones") + ctx.JSONRedirect(ctx.Repo.RepoLink + "/milestones") + return } id := ctx.ParamsInt64(":id") @@ -250,7 +251,7 @@ func ChangeMilestoneStatus(ctx *context.Context) { } return } - ctx.Redirect(ctx.Repo.RepoLink + "/milestones?state=" + url.QueryEscape(ctx.Params(":action"))) + ctx.JSONRedirect(ctx.Repo.RepoLink + "/milestones?state=" + url.QueryEscape(ctx.Params(":action"))) } // DeleteMilestone delete a milestone diff --git a/routers/web/repo/projects.go b/routers/web/repo/projects.go index ada398fdc8e9c..6417024f8ba3c 100644 --- a/routers/web/repo/projects.go +++ b/routers/web/repo/projects.go @@ -161,14 +161,15 @@ func NewProjectPost(ctx *context.Context) { // ChangeProjectStatus updates the status of a project between "open" and "close" func ChangeProjectStatus(ctx *context.Context) { - toClose := false + var toClose bool switch ctx.Params(":action") { case "open": toClose = false case "close": toClose = true default: - ctx.Redirect(ctx.Repo.RepoLink + "/projects") + ctx.JSONRedirect(ctx.Repo.RepoLink + "/projects") + return } id := ctx.ParamsInt64(":id") @@ -180,7 +181,7 @@ func ChangeProjectStatus(ctx *context.Context) { } return } - ctx.Redirect(ctx.Repo.RepoLink + "/projects?state=" + url.QueryEscape(ctx.Params(":action"))) + ctx.JSONRedirect(ctx.Repo.RepoLink + "/projects?state=" + url.QueryEscape(ctx.Params(":action"))) } // DeleteProject delete a project From 51d1dc22ff94b561b1a3c00f8eb8ac04a4ee2674 Mon Sep 17 00:00:00 2001 From: Nanguan Lin <70063547+lng2020@users.noreply.github.com> Date: Mon, 23 Oct 2023 20:40:33 +0800 Subject: [PATCH 2/6] Fix duplicate project board when hitting `enter` key (#27746) When hitting the `enter` key to create a new project column, the request is sent twice because the `submit` event and `key up` event are both triggered. Probably a better solution is to rewrite these parts of the code to avoid using native jQuery but reuse the `form-fetch-action` class. But it's beyond my ability. --- web_src/js/features/repo-projects.js | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/web_src/js/features/repo-projects.js b/web_src/js/features/repo-projects.js index f12d4f234f8cd..5a2a7e72ef335 100644 --- a/web_src/js/features/repo-projects.js +++ b/web_src/js/features/repo-projects.js @@ -193,20 +193,6 @@ export function initRepoProject() { const url = $(this).data('url'); createNewColumn(url, columnTitle, projectColorInput); }); - - $('.new-project-column').on('input keyup', (e) => { - const columnTitle = $('#new_project_column'); - const projectColorInput = $('#new_project_column_color_picker'); - if (!columnTitle.val()) { - $('#new_project_column_submit').addClass('disabled'); - return; - } - $('#new_project_column_submit').removeClass('disabled'); - if (e.key === 'Enter') { - const url = $(this).data('url'); - createNewColumn(url, columnTitle, projectColorInput); - } - }); } function setLabelColor(label, color) { From 6352114a77cb67e8797f2c8552328f684092c42d Mon Sep 17 00:00:00 2001 From: Earl Warren <109468362+earl-warren@users.noreply.github.com> Date: Tue, 24 Oct 2023 01:02:00 +0200 Subject: [PATCH 3/6] Fix label render containing invalid HTML (#27752) - The label HTML contained a quote that wasn't being closed. Refs: https://codeberg.org/forgejo/forgejo/pulls/1651 (cherry picked from commit e2bc2c9a1fff482c49dbeb3a51e4e1c698bf506c) Co-authored-by: Gusted --- modules/templates/util_render.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/templates/util_render.go b/modules/templates/util_render.go index ed6eae326a968..84c3a1587afac 100644 --- a/modules/templates/util_render.go +++ b/modules/templates/util_render.go @@ -179,7 +179,7 @@ func RenderLabel(ctx context.Context, label *issues_model.Label) template.HTML { s := fmt.Sprintf(""+ "
%s
"+ - "
%s
"+ + "
%s
"+ "
", description, textColor, scopeColor, scopeText, From def907de7b3cda899846d55f99b0da2640a5274b Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Tue, 24 Oct 2023 10:00:06 +0800 Subject: [PATCH 4/6] Fix incorrect "tab" parameter for repo search sub-template (#27755) ![image](https://github.com/go-gitea/gitea/assets/2114189/c546824e-4824-4f4d-bd33-e558c6ddf0ef) ![image](https://github.com/go-gitea/gitea/assets/2114189/713eb72c-22fb-412b-a867-9cccbf7548ec) --- templates/explore/repo_search.tmpl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/explore/repo_search.tmpl b/templates/explore/repo_search.tmpl index 31b00d29e3920..136d3f8e8197e 100644 --- a/templates/explore/repo_search.tmpl +++ b/templates/explore/repo_search.tmpl @@ -6,8 +6,8 @@ {{template "shared/searchinput" dict "Value" .Keyword "AutoFocus" true}} {{if .PageIsExploreRepositories}} - {{else}} - + {{else if .TabName}} + {{end}} From ce83609ff636f4c09d91ac53bee75a350bb571d6 Mon Sep 17 00:00:00 2001 From: silverwind Date: Tue, 24 Oct 2023 04:54:59 +0200 Subject: [PATCH 5/6] Upgrade to golangci-lint@v1.55.0 (#27756) https://github.com/golangci/golangci-lint/releases/tag/v1.55.0 --- Makefile | 2 +- models/actions/task.go | 2 +- models/activities/action.go | 3 +- models/issues/review.go | 3 +- modules/activitypub/user_settings.go | 7 +- modules/git/submodule.go | 3 +- modules/lfs/transferadapter_test.go | 5 +- modules/markup/html_test.go | 130 +++++++++++------------ modules/markup/markdown/markdown_test.go | 36 +++---- modules/templates/htmlrenderer.go | 3 +- modules/util/path.go | 3 +- routers/api/v1/repo/pull.go | 3 +- routers/web/repo/cherry_pick.go | 5 +- routers/web/repo/issue_dependency.go | 5 +- routers/web/repo/patch.go | 5 +- services/mailer/mailer.go | 3 +- services/repository/files/temp_repo.go | 3 +- tests/integration/integration_test.go | 3 +- 18 files changed, 105 insertions(+), 119 deletions(-) diff --git a/Makefile b/Makefile index 8e03a71b8d464..c38e88a8e0ad9 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,7 @@ XGO_VERSION := go-1.21.x AIR_PACKAGE ?= github.com/cosmtrek/air@v1.44.0 EDITORCONFIG_CHECKER_PACKAGE ?= github.com/editorconfig-checker/editorconfig-checker/cmd/editorconfig-checker@2.7.0 GOFUMPT_PACKAGE ?= mvdan.cc/gofumpt@v0.5.0 -GOLANGCI_LINT_PACKAGE ?= github.com/golangci/golangci-lint/cmd/golangci-lint@v1.54.1 +GOLANGCI_LINT_PACKAGE ?= github.com/golangci/golangci-lint/cmd/golangci-lint@v1.55.0 GXZ_PACKAGE ?= github.com/ulikunitz/xz/cmd/gxz@v0.5.11 MISSPELL_PACKAGE ?= github.com/client9/misspell/cmd/misspell@v0.3.4 SWAGGER_PACKAGE ?= github.com/go-swagger/go-swagger/cmd/swagger@v0.30.5 diff --git a/models/actions/task.go b/models/actions/task.go index 69f52cf0846cf..db0031b3b8d3c 100644 --- a/models/actions/task.go +++ b/models/actions/task.go @@ -279,7 +279,7 @@ func CreateTaskForRunner(ctx context.Context, runner *ActionRunner) (*ActionTask return nil, false, fmt.Errorf("parse workflow of job %d: %w", job.ID, err) } else if len(gots) != 1 { return nil, false, fmt.Errorf("workflow of job %d: not single workflow", job.ID) - } else { + } else { //nolint:revive _, workflowJob = gots[0].Job() } diff --git a/models/activities/action.go b/models/activities/action.go index 1bfd62438bf2a..15bd9a52acc5c 100644 --- a/models/activities/action.go +++ b/models/activities/action.go @@ -713,9 +713,8 @@ func DeleteIssueActions(ctx context.Context, repoID, issueID, issueIndex int64) break } else if _, err = db.GetEngine(ctx).In("comment_id", commentIDs).Delete(&Action{}); err != nil { return err - } else { - lastCommentID = commentIDs[len(commentIDs)-1] } + lastCommentID = commentIDs[len(commentIDs)-1] } _, err := e.Where("repo_id = ?", repoID). diff --git a/models/issues/review.go b/models/issues/review.go index 8b64ba8048989..1cb5379b2f6ec 100644 --- a/models/issues/review.go +++ b/models/issues/review.go @@ -213,9 +213,8 @@ func GetReviewByID(ctx context.Context, id int64) (*Review, error) { return nil, err } else if !has { return nil, ErrReviewNotExist{ID: id} - } else { - return review, nil } + return review, nil } // CreateReviewOptions represent the options to create a review. Type, Issue and Reviewer are required. diff --git a/modules/activitypub/user_settings.go b/modules/activitypub/user_settings.go index d196a3806e7c4..7f939af352abe 100644 --- a/modules/activitypub/user_settings.go +++ b/modules/activitypub/user_settings.go @@ -29,11 +29,10 @@ func GetKeyPair(ctx context.Context, user *user_model.User) (pub, priv string, e return pub, priv, err } return pub, priv, err - } else { - priv = settings[user_model.UserActivityPubPrivPem].SettingValue - pub = settings[user_model.UserActivityPubPubPem].SettingValue - return pub, priv, err } + priv = settings[user_model.UserActivityPubPrivPem].SettingValue + pub = settings[user_model.UserActivityPubPubPem].SettingValue + return pub, priv, err } // GetPublicKey function returns a user's public key diff --git a/modules/git/submodule.go b/modules/git/submodule.go index 3afaa334dbca5..37813ea4c7ca5 100644 --- a/modules/git/submodule.go +++ b/modules/git/submodule.go @@ -101,9 +101,8 @@ func getRefURL(refURL, urlPrefix, repoFullName, sshDomain string) string { return ref.Scheme + "://" + ref.Host + ref.Path } else if urlPrefixHostname == refHostname || refHostname == sshDomain { return urlPrefix + path.Clean(path.Join("/", ref.Path)) - } else { - return "http://" + refHostname + ref.Path } + return "http://" + refHostname + ref.Path } } diff --git a/modules/lfs/transferadapter_test.go b/modules/lfs/transferadapter_test.go index f86d2c54beddb..6023cd07d32fd 100644 --- a/modules/lfs/transferadapter_test.go +++ b/modules/lfs/transferadapter_test.go @@ -62,10 +62,9 @@ func TestBasicTransferAdapter(t *testing.T) { json.NewEncoder(payload).Encode(er) return &http.Response{StatusCode: http.StatusNotFound, Body: io.NopCloser(payload)} - } else { - t.Errorf("Unknown test case: %s", url) - return nil } + t.Errorf("Unknown test case: %s", url) + return nil } hc := &http.Client{Transport: RoundTripFunc(roundTripHandler)} diff --git a/modules/markup/html_test.go b/modules/markup/html_test.go index 9156bc63312b6..21bfc8314a8eb 100644 --- a/modules/markup/html_test.go +++ b/modules/markup/html_test.go @@ -14,7 +14,7 @@ import ( "code.gitea.io/gitea/modules/emoji" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" - . "code.gitea.io/gitea/modules/markup" + "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/markup/markdown" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" @@ -37,12 +37,12 @@ func TestMain(m *testing.M) { } func TestRender_Commits(t *testing.T) { - setting.AppURL = TestAppURL + setting.AppURL = markup.TestAppURL test := func(input, expected string) { - buffer, err := RenderString(&RenderContext{ + buffer, err := markup.RenderString(&markup.RenderContext{ Ctx: git.DefaultContext, RelativePath: ".md", - URLPrefix: TestRepoURL, + URLPrefix: markup.TestRepoURL, Metas: localMetas, }, input) assert.NoError(t, err) @@ -50,7 +50,7 @@ func TestRender_Commits(t *testing.T) { } sha := "65f1bf27bc3bf70f64657658635e66094edbcb4d" - repo := TestRepoURL + repo := markup.TestRepoURL commit := util.URLJoin(repo, "commit", sha) tree := util.URLJoin(repo, "tree", sha, "src") @@ -87,10 +87,10 @@ func TestRender_Commits(t *testing.T) { } func TestRender_CrossReferences(t *testing.T) { - setting.AppURL = TestAppURL + setting.AppURL = markup.TestAppURL test := func(input, expected string) { - buffer, err := RenderString(&RenderContext{ + buffer, err := markup.RenderString(&markup.RenderContext{ Ctx: git.DefaultContext, RelativePath: "a.md", URLPrefix: setting.AppSubURL, @@ -102,43 +102,43 @@ func TestRender_CrossReferences(t *testing.T) { test( "gogits/gogs#12345", - `

gogits/gogs#12345

`) + `

gogits/gogs#12345

`) test( "go-gitea/gitea#12345", - `

go-gitea/gitea#12345

`) + `

go-gitea/gitea#12345

`) test( "/home/gitea/go-gitea/gitea#12345", `

/home/gitea/go-gitea/gitea#12345

`) test( - util.URLJoin(TestAppURL, "gogitea", "gitea", "issues", "12345"), - `

gogitea/gitea#12345

`) + util.URLJoin(markup.TestAppURL, "gogitea", "gitea", "issues", "12345"), + `

gogitea/gitea#12345

`) test( - util.URLJoin(TestAppURL, "go-gitea", "gitea", "issues", "12345"), - `

go-gitea/gitea#12345

`) + util.URLJoin(markup.TestAppURL, "go-gitea", "gitea", "issues", "12345"), + `

go-gitea/gitea#12345

`) test( - util.URLJoin(TestAppURL, "gogitea", "some-repo-name", "issues", "12345"), - `

gogitea/some-repo-name#12345

`) + util.URLJoin(markup.TestAppURL, "gogitea", "some-repo-name", "issues", "12345"), + `

gogitea/some-repo-name#12345

`) } func TestMisc_IsSameDomain(t *testing.T) { - setting.AppURL = TestAppURL + setting.AppURL = markup.TestAppURL sha := "b6dd6210eaebc915fd5be5579c58cce4da2e2579" - commit := util.URLJoin(TestRepoURL, "commit", sha) + commit := util.URLJoin(markup.TestRepoURL, "commit", sha) - assert.True(t, IsSameDomain(commit)) - assert.False(t, IsSameDomain("http://google.com/ncr")) - assert.False(t, IsSameDomain("favicon.ico")) + assert.True(t, markup.IsSameDomain(commit)) + assert.False(t, markup.IsSameDomain("http://google.com/ncr")) + assert.False(t, markup.IsSameDomain("favicon.ico")) } func TestRender_links(t *testing.T) { - setting.AppURL = TestAppURL + setting.AppURL = markup.TestAppURL test := func(input, expected string) { - buffer, err := RenderString(&RenderContext{ + buffer, err := markup.RenderString(&markup.RenderContext{ Ctx: git.DefaultContext, RelativePath: "a.md", - URLPrefix: TestRepoURL, + URLPrefix: markup.TestRepoURL, }, input) assert.NoError(t, err) assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(buffer)) @@ -147,8 +147,8 @@ func TestRender_links(t *testing.T) { defaultCustom := setting.Markdown.CustomURLSchemes setting.Markdown.CustomURLSchemes = []string{"ftp", "magnet"} - InitializeSanitizer() - CustomLinkURLSchemes(setting.Markdown.CustomURLSchemes) + markup.InitializeSanitizer() + markup.CustomLinkURLSchemes(setting.Markdown.CustomURLSchemes) test( "https://www.example.com", @@ -227,18 +227,18 @@ func TestRender_links(t *testing.T) { // Restore previous settings setting.Markdown.CustomURLSchemes = defaultCustom - InitializeSanitizer() - CustomLinkURLSchemes(setting.Markdown.CustomURLSchemes) + markup.InitializeSanitizer() + markup.CustomLinkURLSchemes(setting.Markdown.CustomURLSchemes) } func TestRender_email(t *testing.T) { - setting.AppURL = TestAppURL + setting.AppURL = markup.TestAppURL test := func(input, expected string) { - res, err := RenderString(&RenderContext{ + res, err := markup.RenderString(&markup.RenderContext{ Ctx: git.DefaultContext, RelativePath: "a.md", - URLPrefix: TestRepoURL, + URLPrefix: markup.TestRepoURL, }, input) assert.NoError(t, err) assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(res)) @@ -289,15 +289,15 @@ func TestRender_email(t *testing.T) { } func TestRender_emoji(t *testing.T) { - setting.AppURL = TestAppURL - setting.StaticURLPrefix = TestAppURL + setting.AppURL = markup.TestAppURL + setting.StaticURLPrefix = markup.TestAppURL test := func(input, expected string) { expected = strings.ReplaceAll(expected, "&", "&") - buffer, err := RenderString(&RenderContext{ + buffer, err := markup.RenderString(&markup.RenderContext{ Ctx: git.DefaultContext, RelativePath: "a.md", - URLPrefix: TestRepoURL, + URLPrefix: markup.TestRepoURL, }, input) assert.NoError(t, err) assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(buffer)) @@ -354,19 +354,19 @@ func TestRender_emoji(t *testing.T) { } func TestRender_ShortLinks(t *testing.T) { - setting.AppURL = TestAppURL - tree := util.URLJoin(TestRepoURL, "src", "master") + setting.AppURL = markup.TestAppURL + tree := util.URLJoin(markup.TestRepoURL, "src", "master") test := func(input, expected, expectedWiki string) { - buffer, err := markdown.RenderString(&RenderContext{ + buffer, err := markdown.RenderString(&markup.RenderContext{ Ctx: git.DefaultContext, URLPrefix: tree, }, input) assert.NoError(t, err) assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(buffer)) - buffer, err = markdown.RenderString(&RenderContext{ + buffer, err = markdown.RenderString(&markup.RenderContext{ Ctx: git.DefaultContext, - URLPrefix: TestRepoURL, + URLPrefix: markup.TestRepoURL, Metas: localMetas, IsWiki: true, }, input) @@ -374,7 +374,7 @@ func TestRender_ShortLinks(t *testing.T) { assert.Equal(t, strings.TrimSpace(expectedWiki), strings.TrimSpace(buffer)) } - rawtree := util.URLJoin(TestRepoURL, "raw", "master") + rawtree := util.URLJoin(markup.TestRepoURL, "raw", "master") url := util.URLJoin(tree, "Link") otherURL := util.URLJoin(tree, "Other-Link") encodedURL := util.URLJoin(tree, "Link%3F") @@ -382,13 +382,13 @@ func TestRender_ShortLinks(t *testing.T) { otherImgurl := util.URLJoin(rawtree, "Link+Other.jpg") encodedImgurl := util.URLJoin(rawtree, "Link+%23.jpg") notencodedImgurl := util.URLJoin(rawtree, "some", "path", "Link+#.jpg") - urlWiki := util.URLJoin(TestRepoURL, "wiki", "Link") - otherURLWiki := util.URLJoin(TestRepoURL, "wiki", "Other-Link") - encodedURLWiki := util.URLJoin(TestRepoURL, "wiki", "Link%3F") - imgurlWiki := util.URLJoin(TestRepoURL, "wiki", "raw", "Link.jpg") - otherImgurlWiki := util.URLJoin(TestRepoURL, "wiki", "raw", "Link+Other.jpg") - encodedImgurlWiki := util.URLJoin(TestRepoURL, "wiki", "raw", "Link+%23.jpg") - notencodedImgurlWiki := util.URLJoin(TestRepoURL, "wiki", "raw", "some", "path", "Link+#.jpg") + urlWiki := util.URLJoin(markup.TestRepoURL, "wiki", "Link") + otherURLWiki := util.URLJoin(markup.TestRepoURL, "wiki", "Other-Link") + encodedURLWiki := util.URLJoin(markup.TestRepoURL, "wiki", "Link%3F") + imgurlWiki := util.URLJoin(markup.TestRepoURL, "wiki", "raw", "Link.jpg") + otherImgurlWiki := util.URLJoin(markup.TestRepoURL, "wiki", "raw", "Link+Other.jpg") + encodedImgurlWiki := util.URLJoin(markup.TestRepoURL, "wiki", "raw", "Link+%23.jpg") + notencodedImgurlWiki := util.URLJoin(markup.TestRepoURL, "wiki", "raw", "some", "path", "Link+#.jpg") favicon := "http://google.com/favicon.ico" test( @@ -462,20 +462,20 @@ func TestRender_ShortLinks(t *testing.T) { } func TestRender_RelativeImages(t *testing.T) { - setting.AppURL = TestAppURL - tree := util.URLJoin(TestRepoURL, "src", "master") + setting.AppURL = markup.TestAppURL + tree := util.URLJoin(markup.TestRepoURL, "src", "master") test := func(input, expected, expectedWiki string) { - buffer, err := markdown.RenderString(&RenderContext{ + buffer, err := markdown.RenderString(&markup.RenderContext{ Ctx: git.DefaultContext, URLPrefix: tree, Metas: localMetas, }, input) assert.NoError(t, err) assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(buffer)) - buffer, err = markdown.RenderString(&RenderContext{ + buffer, err = markdown.RenderString(&markup.RenderContext{ Ctx: git.DefaultContext, - URLPrefix: TestRepoURL, + URLPrefix: markup.TestRepoURL, Metas: localMetas, IsWiki: true, }, input) @@ -483,8 +483,8 @@ func TestRender_RelativeImages(t *testing.T) { assert.Equal(t, strings.TrimSpace(expectedWiki), strings.TrimSpace(buffer)) } - rawwiki := util.URLJoin(TestRepoURL, "wiki", "raw") - mediatree := util.URLJoin(TestRepoURL, "media", "master") + rawwiki := util.URLJoin(markup.TestRepoURL, "wiki", "raw") + mediatree := util.URLJoin(markup.TestRepoURL, "media", "master") test( ``, @@ -498,7 +498,7 @@ func TestRender_RelativeImages(t *testing.T) { } func Test_ParseClusterFuzz(t *testing.T) { - setting.AppURL = TestAppURL + setting.AppURL = markup.TestAppURL localMetas := map[string]string{ "user": "go-gitea", @@ -508,7 +508,7 @@ func Test_ParseClusterFuzz(t *testing.T) { data := "
` var res strings.Builder - err := PostProcess(&RenderContext{ + err := markup.PostProcess(&markup.RenderContext{ Ctx: git.DefaultContext, URLPrefix: "https://example.com", Metas: localMetas, @@ -593,7 +593,7 @@ func BenchmarkEmojiPostprocess(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { var res strings.Builder - err := PostProcess(&RenderContext{ + err := markup.PostProcess(&markup.RenderContext{ Ctx: git.DefaultContext, URLPrefix: "https://example.com", Metas: localMetas, @@ -604,7 +604,7 @@ func BenchmarkEmojiPostprocess(b *testing.B) { func TestFuzz(t *testing.T) { s := "t/l/issues/8#/../../a" - renderContext := RenderContext{ + renderContext := markup.RenderContext{ Ctx: git.DefaultContext, URLPrefix: "https://example.com/go-gitea/gitea", Metas: map[string]string{ @@ -613,7 +613,7 @@ func TestFuzz(t *testing.T) { }, } - err := PostProcess(&renderContext, strings.NewReader(s), io.Discard) + err := markup.PostProcess(&renderContext, strings.NewReader(s), io.Discard) assert.NoError(t, err) } @@ -622,7 +622,7 @@ func TestIssue18471(t *testing.T) { data := `http://domain/org/repo/compare/783b039...da951ce` var res strings.Builder - err := PostProcess(&RenderContext{ + err := markup.PostProcess(&markup.RenderContext{ Ctx: git.DefaultContext, URLPrefix: "https://example.com", Metas: localMetas, diff --git a/modules/markup/markdown/markdown_test.go b/modules/markup/markdown/markdown_test.go index f2322b25544bf..8f855f1b130d0 100644 --- a/modules/markup/markdown/markdown_test.go +++ b/modules/markup/markdown/markdown_test.go @@ -13,7 +13,7 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/markup" - . "code.gitea.io/gitea/modules/markup/markdown" + "code.gitea.io/gitea/modules/markup/markdown" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" @@ -51,14 +51,14 @@ func TestRender_StandardLinks(t *testing.T) { setting.AppSubURL = AppSubURL test := func(input, expected, expectedWiki string) { - buffer, err := RenderString(&markup.RenderContext{ + buffer, err := markdown.RenderString(&markup.RenderContext{ Ctx: git.DefaultContext, URLPrefix: setting.AppSubURL, }, input) assert.NoError(t, err) assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(buffer)) - buffer, err = RenderString(&markup.RenderContext{ + buffer, err = markdown.RenderString(&markup.RenderContext{ Ctx: git.DefaultContext, URLPrefix: setting.AppSubURL, IsWiki: true, @@ -82,7 +82,7 @@ func TestRender_Images(t *testing.T) { setting.AppSubURL = AppSubURL test := func(input, expected string) { - buffer, err := RenderString(&markup.RenderContext{ + buffer, err := markdown.RenderString(&markup.RenderContext{ Ctx: git.DefaultContext, URLPrefix: setting.AppSubURL, }, input) @@ -289,7 +289,7 @@ func TestTotal_RenderWiki(t *testing.T) { answers := testAnswers(util.URLJoin(AppSubURL, "wiki/"), util.URLJoin(AppSubURL, "wiki", "raw/")) for i := 0; i < len(sameCases); i++ { - line, err := RenderString(&markup.RenderContext{ + line, err := markdown.RenderString(&markup.RenderContext{ Ctx: git.DefaultContext, URLPrefix: AppSubURL, Metas: localMetas, @@ -313,7 +313,7 @@ func TestTotal_RenderWiki(t *testing.T) { } for i := 0; i < len(testCases); i += 2 { - line, err := RenderString(&markup.RenderContext{ + line, err := markdown.RenderString(&markup.RenderContext{ Ctx: git.DefaultContext, URLPrefix: AppSubURL, IsWiki: true, @@ -330,7 +330,7 @@ func TestTotal_RenderString(t *testing.T) { answers := testAnswers(util.URLJoin(AppSubURL, "src", "master/"), util.URLJoin(AppSubURL, "raw", "master/")) for i := 0; i < len(sameCases); i++ { - line, err := RenderString(&markup.RenderContext{ + line, err := markdown.RenderString(&markup.RenderContext{ Ctx: git.DefaultContext, URLPrefix: util.URLJoin(AppSubURL, "src", "master/"), Metas: localMetas, @@ -342,7 +342,7 @@ func TestTotal_RenderString(t *testing.T) { testCases := []string{} for i := 0; i < len(testCases); i += 2 { - line, err := RenderString(&markup.RenderContext{ + line, err := markdown.RenderString(&markup.RenderContext{ Ctx: git.DefaultContext, URLPrefix: AppSubURL, }, testCases[i]) @@ -353,17 +353,17 @@ func TestTotal_RenderString(t *testing.T) { func TestRender_RenderParagraphs(t *testing.T) { test := func(t *testing.T, str string, cnt int) { - res, err := RenderRawString(&markup.RenderContext{Ctx: git.DefaultContext}, str) + res, err := markdown.RenderRawString(&markup.RenderContext{Ctx: git.DefaultContext}, str) assert.NoError(t, err) assert.Equal(t, cnt, strings.Count(res, "image1
image2

` - res, err := RenderRawString(&markup.RenderContext{Ctx: git.DefaultContext}, testcase) + res, err := markdown.RenderRawString(&markup.RenderContext{Ctx: git.DefaultContext}, testcase) assert.NoError(t, err) assert.Equal(t, expected, res) } @@ -412,7 +412,7 @@ func TestRenderEmojiInLinks_Issue12331(t *testing.T) { testcase := `[Link with emoji :moon: in text](https://gitea.io)` expected := `

Link with emoji 🌔 in text

` - res, err := RenderString(&markup.RenderContext{Ctx: git.DefaultContext}, testcase) + res, err := markdown.RenderString(&markup.RenderContext{Ctx: git.DefaultContext}, testcase) assert.NoError(t, err) assert.Equal(t, expected, res) } @@ -446,7 +446,7 @@ func TestColorPreview(t *testing.T) { } for _, test := range positiveTests { - res, err := RenderString(&markup.RenderContext{Ctx: git.DefaultContext}, test.testcase) + res, err := markdown.RenderString(&markup.RenderContext{Ctx: git.DefaultContext}, test.testcase) assert.NoError(t, err, "Unexpected error in testcase: %q", test.testcase) assert.Equal(t, test.expected, res, "Unexpected result in testcase %q", test.testcase) @@ -466,7 +466,7 @@ func TestColorPreview(t *testing.T) { } for _, test := range negativeTests { - res, err := RenderString(&markup.RenderContext{Ctx: git.DefaultContext}, test) + res, err := markdown.RenderString(&markup.RenderContext{Ctx: git.DefaultContext}, test) assert.NoError(t, err, "Unexpected error in testcase: %q", test) assert.NotContains(t, res, ` Date: Tue, 24 Oct 2023 05:26:38 +0200 Subject: [PATCH 6/6] Do not force creation of _cargo-index repo on publish (#27266) Hello there, Cargo Index over HTTP is now prefered over git for package updates: we should not force users who do not need the GIT repo to have the repo created/updated on each publish (it can still be created in the packages settings). The current behavior when publishing is to check if the repo exist and create it on the fly if not, then update it's content. Cargo HTTP Index does not rely on the repo itself so this will be useless for everyone not using the git protocol for cargo registry. This PR only disable the creation on the fly of the repo when publishing a crate. This is linked to #26844 (error 500 when trying to publish a crate if user is missing write access to the repo) because it's now optional. --------- Co-authored-by: KN4CK3R --- routers/api/packages/cargo/cargo.go | 4 ++-- services/packages/cargo/index.go | 12 +++++++++--- services/packages/cleanup/cleanup.go | 4 ++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/routers/api/packages/cargo/cargo.go b/routers/api/packages/cargo/cargo.go index 225b6b5ade0a5..8f1e965c9a399 100644 --- a/routers/api/packages/cargo/cargo.go +++ b/routers/api/packages/cargo/cargo.go @@ -250,7 +250,7 @@ func UploadPackage(ctx *context.Context) { return } - if err := cargo_service.AddOrUpdatePackageIndex(ctx, ctx.Doer, ctx.Package.Owner, pv.PackageID); err != nil { + if err := cargo_service.UpdatePackageIndexIfExists(ctx, ctx.Doer, ctx.Package.Owner, pv.PackageID); err != nil { if err := packages_service.DeletePackageVersionAndReferences(ctx, pv); err != nil { log.Error("Rollback creation of package version: %v", err) } @@ -301,7 +301,7 @@ func yankPackage(ctx *context.Context, yank bool) { return } - if err := cargo_service.AddOrUpdatePackageIndex(ctx, ctx.Doer, ctx.Package.Owner, pv.PackageID); err != nil { + if err := cargo_service.UpdatePackageIndexIfExists(ctx, ctx.Doer, ctx.Package.Owner, pv.PackageID); err != nil { apiError(ctx, http.StatusInternalServerError, err) return } diff --git a/services/packages/cargo/index.go b/services/packages/cargo/index.go index 0561f168e10c6..8164ffb01cb28 100644 --- a/services/packages/cargo/index.go +++ b/services/packages/cargo/index.go @@ -106,10 +106,16 @@ func RebuildIndex(ctx context.Context, doer, owner *user_model.User) error { ) } -func AddOrUpdatePackageIndex(ctx context.Context, doer, owner *user_model.User, packageID int64) error { - repo, err := getOrCreateIndexRepository(ctx, doer, owner) +func UpdatePackageIndexIfExists(ctx context.Context, doer, owner *user_model.User, packageID int64) error { + // We do not want to force the creation of the repo here + // cargo http index does not rely on the repo itself, + // so if the repo does not exist, we just do nothing. + repo, err := repo_model.GetRepositoryByOwnerAndName(ctx, owner.Name, IndexRepositoryName) if err != nil { - return err + if errors.Is(err, util.ErrNotExist) { + return nil + } + return fmt.Errorf("GetRepositoryByOwnerAndName: %w", err) } p, err := packages_model.GetPackageByID(ctx, packageID) diff --git a/services/packages/cleanup/cleanup.go b/services/packages/cleanup/cleanup.go index 77bcfb194232f..9bdd9d6aadeca 100644 --- a/services/packages/cleanup/cleanup.go +++ b/services/packages/cleanup/cleanup.go @@ -110,8 +110,8 @@ func ExecuteCleanupRules(outerCtx context.Context) error { if err != nil { return fmt.Errorf("GetUserByID failed: %w", err) } - if err := cargo_service.AddOrUpdatePackageIndex(ctx, owner, owner, p.ID); err != nil { - return fmt.Errorf("CleanupRule [%d]: cargo.AddOrUpdatePackageIndex failed: %w", pcr.ID, err) + if err := cargo_service.UpdatePackageIndexIfExists(ctx, owner, owner, p.ID); err != nil { + return fmt.Errorf("CleanupRule [%d]: cargo.UpdatePackageIndexIfExists failed: %w", pcr.ID, err) } } }