pull/34709/merge
Lunny Xiao 2025-06-16 20:33:42 +08:00 committed by GitHub
commit da7627865a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 212 additions and 22 deletions

View File

@ -21,6 +21,7 @@ import (
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/routers/api/packages/helper" "code.gitea.io/gitea/routers/api/packages/helper"
"code.gitea.io/gitea/routers/common"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
packages_service "code.gitea.io/gitea/services/packages" packages_service "code.gitea.io/gitea/services/packages"
) )
@ -357,7 +358,7 @@ func DeletePackageVersion(ctx *context.Context) {
packageName := ctx.PathParam("name") packageName := ctx.PathParam("name")
packageVersion := ctx.PathParam("version") packageVersion := ctx.PathParam("version")
err := packages_service.RemovePackageVersionByNameAndVersion( err := common.RemovePackageVersionByNameAndVersion(
ctx, ctx,
ctx.Doer, ctx.Doer,
&packages_service.PackageInfo{ &packages_service.PackageInfo{
@ -393,7 +394,7 @@ func DeletePackage(ctx *context.Context) {
} }
for _, pv := range pvs { for _, pv := range pvs {
if err := packages_service.RemovePackageVersion(ctx, ctx.Doer, pv); err != nil { if err := common.RemovePackageVersion(ctx, ctx.Doer, pv); err != nil {
apiError(ctx, http.StatusInternalServerError, err) apiError(ctx, http.StatusInternalServerError, err)
return return
} }

View File

@ -14,6 +14,7 @@ import (
"code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/log"
packages_module "code.gitea.io/gitea/modules/packages" packages_module "code.gitea.io/gitea/modules/packages"
"code.gitea.io/gitea/routers/api/packages/helper" "code.gitea.io/gitea/routers/api/packages/helper"
"code.gitea.io/gitea/routers/common"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
packages_service "code.gitea.io/gitea/services/packages" packages_service "code.gitea.io/gitea/services/packages"
) )
@ -144,7 +145,7 @@ func UploadPackage(ctx *context.Context) {
// DeletePackage deletes the specific generic package. // DeletePackage deletes the specific generic package.
func DeletePackage(ctx *context.Context) { func DeletePackage(ctx *context.Context) {
err := packages_service.RemovePackageVersionByNameAndVersion( err := common.RemovePackageVersionByNameAndVersion(
ctx, ctx,
ctx.Doer, ctx.Doer,
&packages_service.PackageInfo{ &packages_service.PackageInfo{
@ -197,7 +198,7 @@ func DeletePackageFile(ctx *context.Context) {
} }
if len(pfs) == 1 { if len(pfs) == 1 {
if err := packages_service.RemovePackageVersion(ctx, ctx.Doer, pv); err != nil { if err := common.RemovePackageVersion(ctx, ctx.Doer, pv); err != nil {
apiError(ctx, http.StatusInternalServerError, err) apiError(ctx, http.StatusInternalServerError, err)
return return
} }

View File

@ -23,6 +23,7 @@ import (
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/routers/api/packages/helper" "code.gitea.io/gitea/routers/api/packages/helper"
"code.gitea.io/gitea/routers/common"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
packages_service "code.gitea.io/gitea/services/packages" packages_service "code.gitea.io/gitea/services/packages"
@ -256,7 +257,7 @@ func DeletePackageVersion(ctx *context.Context) {
packageName := packageNameFromParams(ctx) packageName := packageNameFromParams(ctx)
packageVersion := ctx.PathParam("version") packageVersion := ctx.PathParam("version")
err := packages_service.RemovePackageVersionByNameAndVersion( err := common.RemovePackageVersionByNameAndVersion(
ctx, ctx,
ctx.Doer, ctx.Doer,
&packages_service.PackageInfo{ &packages_service.PackageInfo{
@ -294,7 +295,7 @@ func DeletePackage(ctx *context.Context) {
} }
for _, pv := range pvs { for _, pv := range pvs {
if err := packages_service.RemovePackageVersion(ctx, ctx.Doer, pv); err != nil { if err := common.RemovePackageVersion(ctx, ctx.Doer, pv); err != nil {
apiError(ctx, http.StatusInternalServerError, err) apiError(ctx, http.StatusInternalServerError, err)
return return
} }

View File

@ -24,6 +24,7 @@ import (
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/routers/api/packages/helper" "code.gitea.io/gitea/routers/api/packages/helper"
"code.gitea.io/gitea/routers/common"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
packages_service "code.gitea.io/gitea/services/packages" packages_service "code.gitea.io/gitea/services/packages"
) )
@ -688,7 +689,7 @@ func DeletePackage(ctx *context.Context) {
packageName := ctx.PathParam("id") packageName := ctx.PathParam("id")
packageVersion := ctx.PathParam("version") packageVersion := ctx.PathParam("version")
err := packages_service.RemovePackageVersionByNameAndVersion( err := common.RemovePackageVersionByNameAndVersion(
ctx, ctx,
ctx.Doer, ctx.Doer,
&packages_service.PackageInfo{ &packages_service.PackageInfo{

View File

@ -19,6 +19,7 @@ import (
rubygems_module "code.gitea.io/gitea/modules/packages/rubygems" rubygems_module "code.gitea.io/gitea/modules/packages/rubygems"
"code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/routers/api/packages/helper" "code.gitea.io/gitea/routers/api/packages/helper"
"code.gitea.io/gitea/routers/common"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
packages_service "code.gitea.io/gitea/services/packages" packages_service "code.gitea.io/gitea/services/packages"
) )
@ -277,7 +278,7 @@ func DeletePackage(ctx *context.Context) {
packageName := ctx.FormString("gem_name") packageName := ctx.FormString("gem_name")
packageVersion := ctx.FormString("version") packageVersion := ctx.FormString("version")
err := packages_service.RemovePackageVersionByNameAndVersion( err := common.RemovePackageVersionByNameAndVersion(
ctx, ctx,
ctx.Doer, ctx.Doer,
&packages_service.PackageInfo{ &packages_service.PackageInfo{

View File

@ -13,6 +13,7 @@ import (
api "code.gitea.io/gitea/modules/structs" api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/routers/api/v1/utils" "code.gitea.io/gitea/routers/api/v1/utils"
"code.gitea.io/gitea/routers/common"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
"code.gitea.io/gitea/services/convert" "code.gitea.io/gitea/services/convert"
packages_service "code.gitea.io/gitea/services/packages" packages_service "code.gitea.io/gitea/services/packages"
@ -148,7 +149,7 @@ func DeletePackage(ctx *context.APIContext) {
// "404": // "404":
// "$ref": "#/responses/notFound" // "$ref": "#/responses/notFound"
err := packages_service.RemovePackageVersion(ctx, ctx.Doer, ctx.Package.Descriptor.Version) err := common.RemovePackageVersion(ctx, ctx.Doer, ctx.Package.Descriptor.Version)
if err != nil { if err != nil {
ctx.APIErrorInternal(err) ctx.APIErrorInternal(err)
return return

45
routers/common/package.go Normal file
View File

@ -0,0 +1,45 @@
// Copyright 2025 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package common
import (
"context"
packages_model "code.gitea.io/gitea/models/packages"
user_model "code.gitea.io/gitea/models/user"
packages_service "code.gitea.io/gitea/services/packages"
alpine_service "code.gitea.io/gitea/services/packages/alpine"
cargo_service "code.gitea.io/gitea/services/packages/cargo"
debian_service "code.gitea.io/gitea/services/packages/debian"
rpm_service "code.gitea.io/gitea/services/packages/rpm"
)
// RemovePackageVersionByNameAndVersion deletes a package version and all associated files
func RemovePackageVersionByNameAndVersion(ctx context.Context, doer *user_model.User, pvi *packages_service.PackageInfo) error {
pv, err := packages_model.GetVersionByNameAndVersion(ctx, pvi.Owner.ID, pvi.PackageType, pvi.Name, pvi.Version)
if err != nil {
return err
}
return RemovePackageVersion(ctx, doer, pv)
}
func RemovePackageVersion(ctx context.Context, doer *user_model.User, pv *packages_model.PackageVersion) error {
pd, err := packages_model.GetPackageDescriptor(ctx, pv)
if err != nil {
return err
}
switch pd.Package.Type {
case packages_model.TypeAlpine:
return alpine_service.RemovePackageVersion(ctx, doer, pv)
case packages_model.TypeCargo:
return cargo_service.RemovePackageVersion(ctx, doer, pv)
case packages_model.TypeDebian:
return debian_service.RemovePackageVersion(ctx, doer, pv)
case packages_model.TypeRpm:
return rpm_service.RemovePackageVersion(ctx, doer, pv)
default:
return packages_service.RemovePackageVersion(ctx, doer, pv)
}
}

View File

@ -13,8 +13,8 @@ import (
"code.gitea.io/gitea/modules/optional" "code.gitea.io/gitea/modules/optional"
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/templates" "code.gitea.io/gitea/modules/templates"
"code.gitea.io/gitea/routers/common"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
packages_service "code.gitea.io/gitea/services/packages"
packages_cleanup_service "code.gitea.io/gitea/services/packages/cleanup" packages_cleanup_service "code.gitea.io/gitea/services/packages/cleanup"
) )
@ -91,7 +91,7 @@ func DeletePackageVersion(ctx *context.Context) {
return return
} }
if err := packages_service.RemovePackageVersion(ctx, ctx.Doer, pv); err != nil { if err := common.RemovePackageVersion(ctx, ctx.Doer, pv); err != nil {
ctx.ServerError("RemovePackageVersion", err) ctx.ServerError("RemovePackageVersion", err)
return return
} }

View File

@ -27,6 +27,7 @@ import (
"code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/web" "code.gitea.io/gitea/modules/web"
packages_helper "code.gitea.io/gitea/routers/api/packages/helper" packages_helper "code.gitea.io/gitea/routers/api/packages/helper"
"code.gitea.io/gitea/routers/common"
shared_user "code.gitea.io/gitea/routers/web/shared/user" shared_user "code.gitea.io/gitea/routers/web/shared/user"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
"code.gitea.io/gitea/services/forms" "code.gitea.io/gitea/services/forms"
@ -457,7 +458,7 @@ func PackageSettingsPost(ctx *context.Context) {
ctx.Redirect(ctx.Link) ctx.Redirect(ctx.Link)
return return
case "delete": case "delete":
err := packages_service.RemovePackageVersion(ctx, ctx.Doer, ctx.Package.Descriptor.Version) err := common.RemovePackageVersion(ctx, ctx.Doer, ctx.Package.Descriptor.Version)
if err != nil { if err != nil {
log.Error("Error deleting package: %v", err) log.Error("Error deleting package: %v", err)
ctx.Flash.Error(ctx.Tr("packages.settings.delete.error")) ctx.Flash.Error(ctx.Tr("packages.settings.delete.error"))

View File

@ -0,0 +1,37 @@
// Copyright 2025 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package alpine
import (
"context"
"fmt"
"code.gitea.io/gitea/models/db"
packages_model "code.gitea.io/gitea/models/packages"
user_model "code.gitea.io/gitea/models/user"
notify_service "code.gitea.io/gitea/services/notify"
packages_service "code.gitea.io/gitea/services/packages"
)
func RemovePackageVersion(ctx context.Context, doer *user_model.User, pv *packages_model.PackageVersion) error {
pd, err := packages_model.GetPackageDescriptor(ctx, pv)
if err != nil {
return err
}
if err := db.WithTx(ctx, func(ctx context.Context) error {
if err := packages_service.DeletePackageVersionAndReferences(ctx, pv); err != nil {
return err
}
if err := BuildAllRepositoryFiles(ctx, pd.Owner.ID); err != nil {
return fmt.Errorf("alpine.BuildAllRepositoryFiles failed: %w", err)
}
return nil
}); err != nil {
return err
}
notify_service.PackageDelete(ctx, doer, pd)
return nil
}

View File

@ -0,0 +1,37 @@
// Copyright 2025 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package cargo
import (
"context"
"fmt"
"code.gitea.io/gitea/models/db"
packages_model "code.gitea.io/gitea/models/packages"
user_model "code.gitea.io/gitea/models/user"
notify_service "code.gitea.io/gitea/services/notify"
packages_service "code.gitea.io/gitea/services/packages"
)
func RemovePackageVersion(ctx context.Context, doer *user_model.User, pv *packages_model.PackageVersion) error {
pd, err := packages_model.GetPackageDescriptor(ctx, pv)
if err != nil {
return err
}
if err := db.WithTx(ctx, func(ctx context.Context) error {
if err := packages_service.DeletePackageVersionAndReferences(ctx, pv); err != nil {
return err
}
if err := UpdatePackageIndexIfExists(ctx, doer, pd.Owner, pd.Package.ID); err != nil {
return fmt.Errorf("alpine.BuildAllRepositoryFiles failed: %w", err)
}
return nil
}); err != nil {
return err
}
notify_service.PackageDelete(ctx, doer, pd)
return nil
}

View File

@ -0,0 +1,37 @@
// Copyright 2025 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package debian
import (
"context"
"fmt"
"code.gitea.io/gitea/models/db"
packages_model "code.gitea.io/gitea/models/packages"
user_model "code.gitea.io/gitea/models/user"
notify_service "code.gitea.io/gitea/services/notify"
packages_service "code.gitea.io/gitea/services/packages"
)
func RemovePackageVersion(ctx context.Context, doer *user_model.User, pv *packages_model.PackageVersion) error {
pd, err := packages_model.GetPackageDescriptor(ctx, pv)
if err != nil {
return err
}
if err := db.WithTx(ctx, func(ctx context.Context) error {
if err := packages_service.DeletePackageVersionAndReferences(ctx, pv); err != nil {
return err
}
if err := BuildAllRepositoryFiles(ctx, pd.Owner.ID); err != nil {
return fmt.Errorf("alpine.BuildAllRepositoryFiles failed: %w", err)
}
return nil
}); err != nil {
return err
}
notify_service.PackageDelete(ctx, doer, pd)
return nil
}

View File

@ -456,16 +456,6 @@ func GetOrCreateInternalPackageVersion(ctx context.Context, ownerID int64, packa
}) })
} }
// RemovePackageVersionByNameAndVersion deletes a package version and all associated files
func RemovePackageVersionByNameAndVersion(ctx context.Context, doer *user_model.User, pvi *PackageInfo) error {
pv, err := packages_model.GetVersionByNameAndVersion(ctx, pvi.Owner.ID, pvi.PackageType, pvi.Name, pvi.Version)
if err != nil {
return err
}
return RemovePackageVersion(ctx, doer, pv)
}
// RemovePackageVersion deletes the package version and all associated files // RemovePackageVersion deletes the package version and all associated files
func RemovePackageVersion(ctx context.Context, doer *user_model.User, pv *packages_model.PackageVersion) error { func RemovePackageVersion(ctx context.Context, doer *user_model.User, pv *packages_model.PackageVersion) error {
dbCtx, committer, err := db.TxContext(ctx) dbCtx, committer, err := db.TxContext(ctx)

View File

@ -0,0 +1,37 @@
// Copyright 2025 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package rpm
import (
"context"
"fmt"
"code.gitea.io/gitea/models/db"
packages_model "code.gitea.io/gitea/models/packages"
user_model "code.gitea.io/gitea/models/user"
notify_service "code.gitea.io/gitea/services/notify"
packages_service "code.gitea.io/gitea/services/packages"
)
func RemovePackageVersion(ctx context.Context, doer *user_model.User, pv *packages_model.PackageVersion) error {
pd, err := packages_model.GetPackageDescriptor(ctx, pv)
if err != nil {
return err
}
if err := db.WithTx(ctx, func(ctx context.Context) error {
if err := packages_service.DeletePackageVersionAndReferences(ctx, pv); err != nil {
return err
}
if err := BuildAllRepositoryFiles(ctx, pd.Owner.ID); err != nil {
return fmt.Errorf("alpine.BuildAllRepositoryFiles failed: %w", err)
}
return nil
}); err != nil {
return err
}
notify_service.PackageDelete(ctx, doer, pd)
return nil
}