From d68b204de558e87c902fe527217f936e83c0de24 Mon Sep 17 00:00:00 2001 From: merlleu Date: Mon, 25 Sep 2023 20:12:30 +0200 Subject: [PATCH 1/4] Do not force creation of repo on cargo publish --- services/packages/cargo/index.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/services/packages/cargo/index.go b/services/packages/cargo/index.go index 0561f168e10c6..df7998bde024b 100644 --- a/services/packages/cargo/index.go +++ b/services/packages/cargo/index.go @@ -107,9 +107,17 @@ 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) + // 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. + // This partially resolves #26844 (error 500 when trying to publish a crate if user is missing write access to the repo) + repo, err := repo_model.GetRepositoryByOwnerAndName(ctx, owner.Name, IndexRepositoryName) if err != nil { - return err + if errors.Is(err, util.ErrNotExist) { + return nil + } else { + return fmt.Errorf("GetRepositoryByOwnerAndName: %w", err) + } } p, err := packages_model.GetPackageByID(ctx, packageID) From a56c89f4bc76b04d56f38671454527e6e667841a Mon Sep 17 00:00:00 2001 From: merlleu Date: Mon, 25 Sep 2023 21:00:03 +0200 Subject: [PATCH 2/4] apply lint --- services/packages/cargo/index.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/services/packages/cargo/index.go b/services/packages/cargo/index.go index df7998bde024b..1860ee0f71213 100644 --- a/services/packages/cargo/index.go +++ b/services/packages/cargo/index.go @@ -115,9 +115,8 @@ func AddOrUpdatePackageIndex(ctx context.Context, doer, owner *user_model.User, if err != nil { if errors.Is(err, util.ErrNotExist) { return nil - } else { - return fmt.Errorf("GetRepositoryByOwnerAndName: %w", err) } + return fmt.Errorf("GetRepositoryByOwnerAndName: %w", err) } p, err := packages_model.GetPackageByID(ctx, packageID) From 93b647df47767f213d19abcbd7391d06139e3b35 Mon Sep 17 00:00:00 2001 From: merlleu Date: Sun, 8 Oct 2023 22:03:50 +0200 Subject: [PATCH 3/4] Update services/packages/cargo/index.go Co-authored-by: KN4CK3R --- services/packages/cargo/index.go | 1 - 1 file changed, 1 deletion(-) diff --git a/services/packages/cargo/index.go b/services/packages/cargo/index.go index 1860ee0f71213..08bd8d8eb0ce5 100644 --- a/services/packages/cargo/index.go +++ b/services/packages/cargo/index.go @@ -110,7 +110,6 @@ func AddOrUpdatePackageIndex(ctx context.Context, doer, owner *user_model.User, // 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. - // This partially resolves #26844 (error 500 when trying to publish a crate if user is missing write access to the repo) repo, err := repo_model.GetRepositoryByOwnerAndName(ctx, owner.Name, IndexRepositoryName) if err != nil { if errors.Is(err, util.ErrNotExist) { From f9462e620408863eb0b4c85f685aab6bf9a42393 Mon Sep 17 00:00:00 2001 From: merlleu Date: Sun, 8 Oct 2023 22:09:33 +0200 Subject: [PATCH 4/4] rename func --- routers/api/packages/cargo/cargo.go | 4 ++-- services/packages/cargo/index.go | 2 +- services/packages/cleanup/cleanup.go | 4 ++-- 3 files changed, 5 insertions(+), 5 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 08bd8d8eb0ce5..8164ffb01cb28 100644 --- a/services/packages/cargo/index.go +++ b/services/packages/cargo/index.go @@ -106,7 +106,7 @@ func RebuildIndex(ctx context.Context, doer, owner *user_model.User) error { ) } -func AddOrUpdatePackageIndex(ctx context.Context, doer, owner *user_model.User, packageID int64) error { +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. 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) } } }