loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request '[BUG] Reflect Cargo index state in settings' (#2698) from gusted/forgejo-cargo-index into forgejo

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2698
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>

+86 -9
+1
options/locale/locale_en-US.ini
··· 3572 3572 owner.settings.cargo.rebuild.description = Rebuilding can be useful if the index is not synchronized with the stored Cargo packages. 3573 3573 owner.settings.cargo.rebuild.error = Failed to rebuild Cargo index: %v 3574 3574 owner.settings.cargo.rebuild.success = The Cargo index was successfully rebuild. 3575 + owner.settings.cargo.rebuild.no_index = Cannot rebuild, no index is initialized. 3575 3576 owner.settings.cleanuprules.title = Manage cleanup rules 3576 3577 owner.settings.cleanuprules.add = Add cleanup rule 3577 3578 owner.settings.cleanuprules.edit = Edit cleanup rule
+14 -1
routers/web/shared/packages/packages.go
··· 4 4 package packages 5 5 6 6 import ( 7 + "errors" 7 8 "fmt" 8 9 "net/http" 9 10 "time" 10 11 11 12 "code.gitea.io/gitea/models/db" 12 13 packages_model "code.gitea.io/gitea/models/packages" 14 + repo_model "code.gitea.io/gitea/models/repo" 13 15 user_model "code.gitea.io/gitea/models/user" 14 16 "code.gitea.io/gitea/modules/base" 15 17 "code.gitea.io/gitea/modules/log" 16 18 "code.gitea.io/gitea/modules/optional" 19 + "code.gitea.io/gitea/modules/util" 17 20 "code.gitea.io/gitea/modules/web" 18 21 "code.gitea.io/gitea/services/context" 19 22 "code.gitea.io/gitea/services/forms" ··· 29 32 } 30 33 31 34 ctx.Data["CleanupRules"] = pcrs 35 + 36 + ctx.Data["CargoIndexExists"], err = repo_model.IsRepositoryModelExist(ctx, owner, cargo_service.IndexRepositoryName) 37 + if err != nil { 38 + ctx.ServerError("IsRepositoryModelExist", err) 39 + return 40 + } 32 41 } 33 42 34 43 func SetRuleAddContext(ctx *context.Context) { ··· 240 249 err := cargo_service.RebuildIndex(ctx, owner, owner) 241 250 if err != nil { 242 251 log.Error("RebuildIndex failed: %v", err) 243 - ctx.Flash.Error(ctx.Tr("packages.owner.settings.cargo.rebuild.error", err)) 252 + if errors.Is(err, util.ErrNotExist) { 253 + ctx.Flash.Error(ctx.Tr("packages.owner.settings.cargo.rebuild.no_index")) 254 + } else { 255 + ctx.Flash.Error(ctx.Tr("packages.owner.settings.cargo.rebuild.error", err)) 256 + } 244 257 } else { 245 258 ctx.Flash.Success(ctx.Tr("packages.owner.settings.cargo.rebuild.success")) 246 259 }
+2 -2
services/packages/cargo/index.go
··· 62 62 } 63 63 64 64 func RebuildIndex(ctx context.Context, doer, owner *user_model.User) error { 65 - repo, err := getOrCreateIndexRepository(ctx, doer, owner) 65 + repo, err := repo_model.GetRepositoryByOwnerAndName(ctx, owner.Name, IndexRepositoryName) 66 66 if err != nil { 67 - return err 67 + return fmt.Errorf("GetRepositoryByOwnerAndName: %w", err) 68 68 } 69 69 70 70 ps, err := packages_model.GetPackagesByType(ctx, owner.ID, packages_model.TypeCargo)
+9 -6
templates/package/shared/cargo.tmpl
··· 3 3 </h4> 4 4 <div class="ui attached segment"> 5 5 <div class="ui form"> 6 + {{if .CargoIndexExists}} 6 7 <div class="field"> 7 - <label>{{ctx.Locale.Tr "packages.owner.settings.cargo.initialize.description"}}</label> 8 + <label>{{ctx.Locale.Tr "packages.owner.settings.cargo.rebuild.description"}}</label> 8 9 </div> 9 - <form class="field" action="{{.Link}}/cargo/initialize" method="post"> 10 + <form class="field" action="{{.Link}}/cargo/rebuild" method="post"> 10 11 {{.CsrfTokenHtml}} 11 - <button class="ui primary button">{{ctx.Locale.Tr "packages.owner.settings.cargo.initialize"}}</button> 12 + <button class="ui primary button">{{ctx.Locale.Tr "packages.owner.settings.cargo.rebuild"}}</button> 12 13 </form> 14 + {{else}} 13 15 <div class="field"> 14 - <label>{{ctx.Locale.Tr "packages.owner.settings.cargo.rebuild.description"}}</label> 16 + <label>{{ctx.Locale.Tr "packages.owner.settings.cargo.initialize.description"}}</label> 15 17 </div> 16 - <form class="field" action="{{.Link}}/cargo/rebuild" method="post"> 18 + <form class="field" action="{{.Link}}/cargo/initialize" method="post"> 17 19 {{.CsrfTokenHtml}} 18 - <button class="ui primary button">{{ctx.Locale.Tr "packages.owner.settings.cargo.rebuild"}}</button> 20 + <button class="ui primary button">{{ctx.Locale.Tr "packages.owner.settings.cargo.initialize"}}</button> 19 21 </form> 22 + {{end}} 20 23 <div class="field"> 21 24 <label>{{ctx.Locale.Tr "packages.registry.documentation" "Cargo" "https://forgejo.org/docs/latest/user/packages/cargo/"}}</label> 22 25 </div>
+60
tests/integration/api_packages_cargo_test.go
··· 23 23 cargo_module "code.gitea.io/gitea/modules/packages/cargo" 24 24 "code.gitea.io/gitea/modules/setting" 25 25 cargo_router "code.gitea.io/gitea/routers/api/packages/cargo" 26 + gitea_context "code.gitea.io/gitea/services/context" 26 27 cargo_service "code.gitea.io/gitea/services/packages/cargo" 27 28 "code.gitea.io/gitea/tests" 28 29 ··· 385 386 assert.Equal(t, user.DisplayName(), owners.Users[0].Name) 386 387 }) 387 388 } 389 + 390 + func TestRebuildCargo(t *testing.T) { 391 + onGiteaRun(t, func(t *testing.T, u *neturl.URL) { 392 + user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) 393 + session := loginUser(t, user.Name) 394 + unittest.AssertExistsIf(t, false, &repo_model.Repository{OwnerID: user.ID, Name: cargo_service.IndexRepositoryName}) 395 + 396 + t.Run("No index", func(t *testing.T) { 397 + defer tests.PrintCurrentTest(t)() 398 + 399 + req := NewRequestWithValues(t, "POST", "/user/settings/packages/cargo/rebuild", map[string]string{ 400 + "_csrf": GetCSRF(t, session, "/user/settings/packages"), 401 + }) 402 + session.MakeRequest(t, req, http.StatusSeeOther) 403 + 404 + flashCookie := session.GetCookie(gitea_context.CookieNameFlash) 405 + assert.NotNil(t, flashCookie) 406 + assert.EqualValues(t, "error%3DCannot%2Brebuild%252C%2Bno%2Bindex%2Bis%2Binitialized.", flashCookie.Value) 407 + unittest.AssertExistsIf(t, false, &repo_model.Repository{OwnerID: user.ID, Name: cargo_service.IndexRepositoryName}) 408 + }) 409 + 410 + t.Run("Initialize Cargo", func(t *testing.T) { 411 + defer tests.PrintCurrentTest(t)() 412 + 413 + req := NewRequest(t, "GET", "/user/settings/packages") 414 + resp := session.MakeRequest(t, req, http.StatusOK) 415 + htmlDoc := NewHTMLParser(t, resp.Body) 416 + 417 + htmlDoc.AssertElement(t, `form[action="/user/settings/packages/cargo/rebuild"]`, false) 418 + htmlDoc.AssertElement(t, `form[action="/user/settings/packages/cargo/initialize"]`, true) 419 + 420 + req = NewRequestWithValues(t, "POST", "/user/settings/packages/cargo/initialize", map[string]string{ 421 + "_csrf": htmlDoc.GetCSRF(), 422 + }) 423 + session.MakeRequest(t, req, http.StatusSeeOther) 424 + unittest.AssertExistsIf(t, true, &repo_model.Repository{OwnerID: user.ID, Name: cargo_service.IndexRepositoryName}) 425 + 426 + req = NewRequest(t, "GET", "/user/settings/packages") 427 + resp = session.MakeRequest(t, req, http.StatusOK) 428 + htmlDoc = NewHTMLParser(t, resp.Body) 429 + 430 + htmlDoc.AssertElement(t, `form[action="/user/settings/packages/cargo/rebuild"]`, true) 431 + htmlDoc.AssertElement(t, `form[action="/user/settings/packages/cargo/initialize"]`, false) 432 + }) 433 + 434 + t.Run("With index", func(t *testing.T) { 435 + defer tests.PrintCurrentTest(t)() 436 + 437 + req := NewRequestWithValues(t, "POST", "/user/settings/packages/cargo/rebuild", map[string]string{ 438 + "_csrf": GetCSRF(t, session, "/user/settings/packages"), 439 + }) 440 + session.MakeRequest(t, req, http.StatusSeeOther) 441 + 442 + flashCookie := session.GetCookie(gitea_context.CookieNameFlash) 443 + assert.NotNil(t, flashCookie) 444 + assert.EqualValues(t, "success%3DThe%2BCargo%2Bindex%2Bwas%2Bsuccessfully%2Brebuild.", flashCookie.Value) 445 + }) 446 + }) 447 + }