Skip to content

Commit 61b5997

Browse files
committed
Fix removing some packages will result dirty data
1 parent d21ce9f commit 61b5997

File tree

14 files changed

+212
-22
lines changed

14 files changed

+212
-22
lines changed

routers/api/packages/chef/chef.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"code.gitea.io/gitea/modules/setting"
2222
"code.gitea.io/gitea/modules/util"
2323
"code.gitea.io/gitea/routers/api/packages/helper"
24+
"code.gitea.io/gitea/routers/common"
2425
"code.gitea.io/gitea/services/context"
2526
packages_service "code.gitea.io/gitea/services/packages"
2627
)
@@ -357,7 +358,7 @@ func DeletePackageVersion(ctx *context.Context) {
357358
packageName := ctx.PathParam("name")
358359
packageVersion := ctx.PathParam("version")
359360

360-
err := packages_service.RemovePackageVersionByNameAndVersion(
361+
err := common.RemovePackageVersionByNameAndVersion(
361362
ctx,
362363
ctx.Doer,
363364
&packages_service.PackageInfo{
@@ -393,7 +394,7 @@ func DeletePackage(ctx *context.Context) {
393394
}
394395

395396
for _, pv := range pvs {
396-
if err := packages_service.RemovePackageVersion(ctx, ctx.Doer, pv); err != nil {
397+
if err := common.RemovePackageVersion(ctx, ctx.Doer, pv); err != nil {
397398
apiError(ctx, http.StatusInternalServerError, err)
398399
return
399400
}

routers/api/packages/generic/generic.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"code.gitea.io/gitea/modules/log"
1515
packages_module "code.gitea.io/gitea/modules/packages"
1616
"code.gitea.io/gitea/routers/api/packages/helper"
17+
"code.gitea.io/gitea/routers/common"
1718
"code.gitea.io/gitea/services/context"
1819
packages_service "code.gitea.io/gitea/services/packages"
1920
)
@@ -144,7 +145,7 @@ func UploadPackage(ctx *context.Context) {
144145

145146
// DeletePackage deletes the specific generic package.
146147
func DeletePackage(ctx *context.Context) {
147-
err := packages_service.RemovePackageVersionByNameAndVersion(
148+
err := common.RemovePackageVersionByNameAndVersion(
148149
ctx,
149150
ctx.Doer,
150151
&packages_service.PackageInfo{
@@ -197,7 +198,7 @@ func DeletePackageFile(ctx *context.Context) {
197198
}
198199

199200
if len(pfs) == 1 {
200-
if err := packages_service.RemovePackageVersion(ctx, ctx.Doer, pv); err != nil {
201+
if err := common.RemovePackageVersion(ctx, ctx.Doer, pv); err != nil {
201202
apiError(ctx, http.StatusInternalServerError, err)
202203
return
203204
}

routers/api/packages/npm/npm.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"code.gitea.io/gitea/modules/setting"
2424
"code.gitea.io/gitea/modules/util"
2525
"code.gitea.io/gitea/routers/api/packages/helper"
26+
"code.gitea.io/gitea/routers/common"
2627
"code.gitea.io/gitea/services/context"
2728
packages_service "code.gitea.io/gitea/services/packages"
2829

@@ -256,7 +257,7 @@ func DeletePackageVersion(ctx *context.Context) {
256257
packageName := packageNameFromParams(ctx)
257258
packageVersion := ctx.PathParam("version")
258259

259-
err := packages_service.RemovePackageVersionByNameAndVersion(
260+
err := common.RemovePackageVersionByNameAndVersion(
260261
ctx,
261262
ctx.Doer,
262263
&packages_service.PackageInfo{
@@ -294,7 +295,7 @@ func DeletePackage(ctx *context.Context) {
294295
}
295296

296297
for _, pv := range pvs {
297-
if err := packages_service.RemovePackageVersion(ctx, ctx.Doer, pv); err != nil {
298+
if err := common.RemovePackageVersion(ctx, ctx.Doer, pv); err != nil {
298299
apiError(ctx, http.StatusInternalServerError, err)
299300
return
300301
}

routers/api/packages/nuget/nuget.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"code.gitea.io/gitea/modules/setting"
2525
"code.gitea.io/gitea/modules/util"
2626
"code.gitea.io/gitea/routers/api/packages/helper"
27+
"code.gitea.io/gitea/routers/common"
2728
"code.gitea.io/gitea/services/context"
2829
packages_service "code.gitea.io/gitea/services/packages"
2930
)
@@ -688,7 +689,7 @@ func DeletePackage(ctx *context.Context) {
688689
packageName := ctx.PathParam("id")
689690
packageVersion := ctx.PathParam("version")
690691

691-
err := packages_service.RemovePackageVersionByNameAndVersion(
692+
err := common.RemovePackageVersionByNameAndVersion(
692693
ctx,
693694
ctx.Doer,
694695
&packages_service.PackageInfo{

routers/api/packages/rubygems/rubygems.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
rubygems_module "code.gitea.io/gitea/modules/packages/rubygems"
2020
"code.gitea.io/gitea/modules/util"
2121
"code.gitea.io/gitea/routers/api/packages/helper"
22+
"code.gitea.io/gitea/routers/common"
2223
"code.gitea.io/gitea/services/context"
2324
packages_service "code.gitea.io/gitea/services/packages"
2425
)
@@ -277,7 +278,7 @@ func DeletePackage(ctx *context.Context) {
277278
packageName := ctx.FormString("gem_name")
278279
packageVersion := ctx.FormString("version")
279280

280-
err := packages_service.RemovePackageVersionByNameAndVersion(
281+
err := common.RemovePackageVersionByNameAndVersion(
281282
ctx,
282283
ctx.Doer,
283284
&packages_service.PackageInfo{

routers/api/v1/packages/package.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
api "code.gitea.io/gitea/modules/structs"
1414
"code.gitea.io/gitea/modules/util"
1515
"code.gitea.io/gitea/routers/api/v1/utils"
16+
"code.gitea.io/gitea/routers/common"
1617
"code.gitea.io/gitea/services/context"
1718
"code.gitea.io/gitea/services/convert"
1819
packages_service "code.gitea.io/gitea/services/packages"
@@ -148,7 +149,7 @@ func DeletePackage(ctx *context.APIContext) {
148149
// "404":
149150
// "$ref": "#/responses/notFound"
150151

151-
err := packages_service.RemovePackageVersion(ctx, ctx.Doer, ctx.Package.Descriptor.Version)
152+
err := common.RemovePackageVersion(ctx, ctx.Doer, ctx.Package.Descriptor.Version)
152153
if err != nil {
153154
ctx.APIErrorInternal(err)
154155
return

routers/common/package.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// Copyright 2025 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package common
5+
6+
import (
7+
"context"
8+
9+
packages_model "code.gitea.io/gitea/models/packages"
10+
user_model "code.gitea.io/gitea/models/user"
11+
packages_service "code.gitea.io/gitea/services/packages"
12+
alpine_service "code.gitea.io/gitea/services/packages/alpine"
13+
cargo_service "code.gitea.io/gitea/services/packages/cargo"
14+
debian_service "code.gitea.io/gitea/services/packages/debian"
15+
rpm_service "code.gitea.io/gitea/services/packages/rpm"
16+
)
17+
18+
// RemovePackageVersionByNameAndVersion deletes a package version and all associated files
19+
func RemovePackageVersionByNameAndVersion(ctx context.Context, doer *user_model.User, pvi *packages_service.PackageInfo) error {
20+
pv, err := packages_model.GetVersionByNameAndVersion(ctx, pvi.Owner.ID, pvi.PackageType, pvi.Name, pvi.Version)
21+
if err != nil {
22+
return err
23+
}
24+
25+
return RemovePackageVersion(ctx, doer, pv)
26+
}
27+
28+
func RemovePackageVersion(ctx context.Context, doer *user_model.User, pv *packages_model.PackageVersion) error {
29+
pd, err := packages_model.GetPackageDescriptor(ctx, pv)
30+
if err != nil {
31+
return err
32+
}
33+
switch pd.Package.Type {
34+
case packages_model.TypeAlpine:
35+
return alpine_service.RemovePackageVersion(ctx, doer, pv)
36+
case packages_model.TypeCargo:
37+
return cargo_service.RemovePackageVersion(ctx, doer, pv)
38+
case packages_model.TypeDebian:
39+
return debian_service.RemovePackageVersion(ctx, doer, pv)
40+
case packages_model.TypeRpm:
41+
return rpm_service.RemovePackageVersion(ctx, doer, pv)
42+
default:
43+
return packages_service.RemovePackageVersion(ctx, doer, pv)
44+
}
45+
}

routers/web/admin/packages.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import (
1313
"code.gitea.io/gitea/modules/optional"
1414
"code.gitea.io/gitea/modules/setting"
1515
"code.gitea.io/gitea/modules/templates"
16+
"code.gitea.io/gitea/routers/common"
1617
"code.gitea.io/gitea/services/context"
17-
packages_service "code.gitea.io/gitea/services/packages"
1818
packages_cleanup_service "code.gitea.io/gitea/services/packages/cleanup"
1919
)
2020

@@ -91,7 +91,7 @@ func DeletePackageVersion(ctx *context.Context) {
9191
return
9292
}
9393

94-
if err := packages_service.RemovePackageVersion(ctx, ctx.Doer, pv); err != nil {
94+
if err := common.RemovePackageVersion(ctx, ctx.Doer, pv); err != nil {
9595
ctx.ServerError("RemovePackageVersion", err)
9696
return
9797
}

routers/web/user/package.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"code.gitea.io/gitea/modules/util"
2828
"code.gitea.io/gitea/modules/web"
2929
packages_helper "code.gitea.io/gitea/routers/api/packages/helper"
30+
"code.gitea.io/gitea/routers/common"
3031
shared_user "code.gitea.io/gitea/routers/web/shared/user"
3132
"code.gitea.io/gitea/services/context"
3233
"code.gitea.io/gitea/services/forms"
@@ -457,7 +458,7 @@ func PackageSettingsPost(ctx *context.Context) {
457458
ctx.Redirect(ctx.Link)
458459
return
459460
case "delete":
460-
err := packages_service.RemovePackageVersion(ctx, ctx.Doer, ctx.Package.Descriptor.Version)
461+
err := common.RemovePackageVersion(ctx, ctx.Doer, ctx.Package.Descriptor.Version)
461462
if err != nil {
462463
log.Error("Error deleting package: %v", err)
463464
ctx.Flash.Error(ctx.Tr("packages.settings.delete.error"))

services/packages/alpine/update.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Copyright 2025 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package alpine
5+
6+
import (
7+
"context"
8+
"fmt"
9+
10+
"code.gitea.io/gitea/models/db"
11+
packages_model "code.gitea.io/gitea/models/packages"
12+
user_model "code.gitea.io/gitea/models/user"
13+
notify_service "code.gitea.io/gitea/services/notify"
14+
packages_service "code.gitea.io/gitea/services/packages"
15+
)
16+
17+
func RemovePackageVersion(ctx context.Context, doer *user_model.User, pv *packages_model.PackageVersion) error {
18+
pd, err := packages_model.GetPackageDescriptor(ctx, pv)
19+
if err != nil {
20+
return err
21+
}
22+
23+
if err := db.WithTx(ctx, func(ctx context.Context) error {
24+
if err := packages_service.DeletePackageVersionAndReferences(ctx, pv); err != nil {
25+
return err
26+
}
27+
if err := BuildAllRepositoryFiles(ctx, pd.Owner.ID); err != nil {
28+
return fmt.Errorf("alpine.BuildAllRepositoryFiles failed: %w", err)
29+
}
30+
return nil
31+
}); err != nil {
32+
return err
33+
}
34+
35+
notify_service.PackageDelete(ctx, doer, pd)
36+
return nil
37+
}

0 commit comments

Comments
 (0)