-
-
Notifications
You must be signed in to change notification settings - Fork 5.9k
Fix removing some packages will result dirty data #34709
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -14,6 +14,7 @@ import ( | |
"code.gitea.io/gitea/modules/log" | ||
packages_module "code.gitea.io/gitea/modules/packages" | ||
"code.gitea.io/gitea/routers/api/packages/helper" | ||
"code.gitea.io/gitea/routers/common" | ||
"code.gitea.io/gitea/services/context" | ||
packages_service "code.gitea.io/gitea/services/packages" | ||
) | ||
|
@@ -144,7 +145,7 @@ func UploadPackage(ctx *context.Context) { | |
|
||
// DeletePackage deletes the specific generic package. | ||
func DeletePackage(ctx *context.Context) { | ||
err := packages_service.RemovePackageVersionByNameAndVersion( | ||
err := common.RemovePackageVersionByNameAndVersion( | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If you need to resolve the dependency problem, it should be something like |
||
ctx, | ||
ctx.Doer, | ||
&packages_service.PackageInfo{ | ||
|
@@ -197,7 +198,7 @@ func DeletePackageFile(ctx *context.Context) { | |
} | ||
|
||
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) | ||
return | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It calls
RemovePackageVersion
mutiple times and "build" again and again. It doesn't seem right.It should introduce a final step to rebuild when the removal finishes.