@@ -14,6 +14,7 @@ import (
1414 "strings"
1515
1616 packages_model "code.gitea.io/gitea/models/packages"
17+ "code.gitea.io/gitea/modules/globallock"
1718 packages_module "code.gitea.io/gitea/modules/packages"
1819 arch_module "code.gitea.io/gitea/modules/packages/arch"
1920 "code.gitea.io/gitea/modules/util"
@@ -47,9 +48,18 @@ func GetRepositoryKey(ctx *context.Context) {
4748 })
4849}
4950
51+ func refreshLocker (ctx * context.Context , group string ) (globallock.ReleaseFunc , error ) {
52+ return globallock .Lock (ctx , fmt .Sprintf ("pkg_arch_pkg_%s" , group ))
53+ }
54+
5055func PushPackage (ctx * context.Context ) {
5156 group := ctx .PathParam ("group" )
52-
57+ releaser , err := refreshLocker (ctx , group )
58+ if err != nil {
59+ apiError (ctx , http .StatusInternalServerError , err )
60+ return
61+ }
62+ defer releaser ()
5363 upload , needToClose , err := ctx .UploadStream ()
5464 if err != nil {
5565 apiError (ctx , http .StatusInternalServerError , err )
@@ -211,6 +221,12 @@ func RemovePackage(ctx *context.Context) {
211221 ver = ctx .PathParam ("version" )
212222 pkgArch = ctx .PathParam ("arch" )
213223 )
224+ releaser , err := refreshLocker (ctx , group )
225+ if err != nil {
226+ apiError (ctx , http .StatusInternalServerError , err )
227+ return
228+ }
229+ defer releaser ()
214230 pv , err := packages_model .GetVersionByNameAndVersion (
215231 ctx , ctx .Package .Owner .ID , packages_model .TypeArch , pkg , ver ,
216232 )
0 commit comments