Skip to content

Commit 77bd3ac

Browse files
GiteaBotmerlleuKN4CK3R
authored
Do not force creation of _cargo-index repo on publish (#27266) (#27765)
Backport #27266 by @merlleu 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: merlleu <r.langdorph@gmail.com> Co-authored-by: KN4CK3R <admin@oldschoolhack.me>
1 parent 95db95e commit 77bd3ac

File tree

3 files changed

+13
-7
lines changed

3 files changed

+13
-7
lines changed

routers/api/packages/cargo/cargo.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ func UploadPackage(ctx *context.Context) {
250250
return
251251
}
252252

253-
if err := cargo_service.AddOrUpdatePackageIndex(ctx, ctx.Doer, ctx.Package.Owner, pv.PackageID); err != nil {
253+
if err := cargo_service.UpdatePackageIndexIfExists(ctx, ctx.Doer, ctx.Package.Owner, pv.PackageID); err != nil {
254254
if err := packages_service.DeletePackageVersionAndReferences(ctx, pv); err != nil {
255255
log.Error("Rollback creation of package version: %v", err)
256256
}
@@ -301,7 +301,7 @@ func yankPackage(ctx *context.Context, yank bool) {
301301
return
302302
}
303303

304-
if err := cargo_service.AddOrUpdatePackageIndex(ctx, ctx.Doer, ctx.Package.Owner, pv.PackageID); err != nil {
304+
if err := cargo_service.UpdatePackageIndexIfExists(ctx, ctx.Doer, ctx.Package.Owner, pv.PackageID); err != nil {
305305
apiError(ctx, http.StatusInternalServerError, err)
306306
return
307307
}

services/packages/cargo/index.go

+9-3
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,16 @@ func RebuildIndex(ctx context.Context, doer, owner *user_model.User) error {
106106
)
107107
}
108108

109-
func AddOrUpdatePackageIndex(ctx context.Context, doer, owner *user_model.User, packageID int64) error {
110-
repo, err := getOrCreateIndexRepository(ctx, doer, owner)
109+
func UpdatePackageIndexIfExists(ctx context.Context, doer, owner *user_model.User, packageID int64) error {
110+
// We do not want to force the creation of the repo here
111+
// cargo http index does not rely on the repo itself,
112+
// so if the repo does not exist, we just do nothing.
113+
repo, err := repo_model.GetRepositoryByOwnerAndName(ctx, owner.Name, IndexRepositoryName)
111114
if err != nil {
112-
return err
115+
if errors.Is(err, util.ErrNotExist) {
116+
return nil
117+
}
118+
return fmt.Errorf("GetRepositoryByOwnerAndName: %w", err)
113119
}
114120

115121
p, err := packages_model.GetPackageByID(ctx, packageID)

services/packages/cleanup/cleanup.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@ func ExecuteCleanupRules(outerCtx context.Context) error {
110110
if err != nil {
111111
return fmt.Errorf("GetUserByID failed: %w", err)
112112
}
113-
if err := cargo_service.AddOrUpdatePackageIndex(ctx, owner, owner, p.ID); err != nil {
114-
return fmt.Errorf("CleanupRule [%d]: cargo.AddOrUpdatePackageIndex failed: %w", pcr.ID, err)
113+
if err := cargo_service.UpdatePackageIndexIfExists(ctx, owner, owner, p.ID); err != nil {
114+
return fmt.Errorf("CleanupRule [%d]: cargo.UpdatePackageIndexIfExists failed: %w", pcr.ID, err)
115115
}
116116
}
117117
}

0 commit comments

Comments
 (0)