loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request 'Cleanup `package/arch` route' (#6206) from dragon/forgejo:cleanup-pkg-arch-route into forgejo

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6206
Reviewed-by: Gusted <gusted@noreply.codeberg.org>

+42 -77
+4 -60
routers/api/packages/api.go
··· 153 153 }) 154 154 }, reqPackageAccess(perm.AccessModeRead)) 155 155 r.Group("/arch", func() { 156 - r.Group("/repository.key", func() { 157 - r.Head("", arch.GetRepositoryKey) 158 - r.Get("", arch.GetRepositoryKey) 159 - }) 160 - 161 - r.Methods("HEAD,GET,PUT,DELETE", "*", func(ctx *context.Context) { 162 - pathGroups := strings.Split(strings.Trim(ctx.Params("*"), "/"), "/") 163 - groupLen := len(pathGroups) 164 - isGetHead := ctx.Req.Method == "HEAD" || ctx.Req.Method == "GET" 165 - isPut := ctx.Req.Method == "PUT" 166 - isDelete := ctx.Req.Method == "DELETE" 167 - if isGetHead { 168 - if groupLen < 2 { 169 - ctx.Status(http.StatusNotFound) 170 - return 171 - } 172 - if groupLen == 2 { 173 - ctx.SetParams("group", "") 174 - ctx.SetParams("arch", pathGroups[0]) 175 - ctx.SetParams("file", pathGroups[1]) 176 - } else { 177 - ctx.SetParams("group", strings.Join(pathGroups[:groupLen-2], "/")) 178 - ctx.SetParams("arch", pathGroups[groupLen-2]) 179 - ctx.SetParams("file", pathGroups[groupLen-1]) 180 - } 181 - arch.GetPackageOrDB(ctx) 182 - return 183 - } else if isPut { 184 - ctx.SetParams("group", strings.Join(pathGroups, "/")) 185 - reqPackageAccess(perm.AccessModeWrite)(ctx) 186 - if ctx.Written() { 187 - return 188 - } 189 - arch.PushPackage(ctx) 190 - return 191 - } else if isDelete { 192 - if groupLen < 3 { 193 - ctx.Status(http.StatusBadRequest) 194 - return 195 - } 196 - if groupLen == 3 { 197 - ctx.SetParams("group", "") 198 - ctx.SetParams("package", pathGroups[0]) 199 - ctx.SetParams("version", pathGroups[1]) 200 - ctx.SetParams("arch", pathGroups[2]) 201 - } else { 202 - ctx.SetParams("group", strings.Join(pathGroups[:groupLen-3], "/")) 203 - ctx.SetParams("package", pathGroups[groupLen-3]) 204 - ctx.SetParams("version", pathGroups[groupLen-2]) 205 - ctx.SetParams("arch", pathGroups[groupLen-1]) 206 - } 207 - reqPackageAccess(perm.AccessModeWrite)(ctx) 208 - if ctx.Written() { 209 - return 210 - } 211 - arch.RemovePackage(ctx) 212 - return 213 - } 214 - ctx.Status(http.StatusNotFound) 215 - }) 156 + r.Methods("HEAD,GET", "/repository.key", arch.GetRepositoryKey) 157 + r.Methods("HEAD,GET", "*", arch.GetPackageOrDB) 158 + r.Methods("PUT", "*", reqPackageAccess(perm.AccessModeWrite), arch.PushPackage) 159 + r.Methods("DELETE", "*", reqPackageAccess(perm.AccessModeWrite), arch.RemovePackage) 216 160 }, reqPackageAccess(perm.AccessModeRead)) 217 161 r.Group("/cargo", func() { 218 162 r.Group("/api/v1/crates", func() {
+33 -12
routers/api/packages/arch/arch.go
··· 59 59 } 60 60 61 61 func PushPackage(ctx *context.Context) { 62 - group := ctx.Params("group") 62 + group := strings.Trim(ctx.Params("*"), "/") 63 63 releaser := refreshLocker(ctx, group) 64 64 defer releaser() 65 65 upload, needToClose, err := ctx.UploadStream() ··· 183 183 } 184 184 185 185 func GetPackageOrDB(ctx *context.Context) { 186 - var ( 187 - file = ctx.Params("file") 188 - group = ctx.Params("group") 189 - arch = ctx.Params("arch") 190 - ) 186 + pathGroups := strings.Split(strings.Trim(ctx.Params("*"), "/"), "/") 187 + groupLen := len(pathGroups) 188 + if groupLen < 2 { 189 + ctx.Status(http.StatusNotFound) 190 + return 191 + } 192 + var file, group, arch string 193 + if groupLen == 2 { 194 + arch = pathGroups[0] 195 + file = pathGroups[1] 196 + } else { 197 + group = strings.Join(pathGroups[:groupLen-2], "/") 198 + arch = pathGroups[groupLen-2] 199 + file = pathGroups[groupLen-1] 200 + } 191 201 if archPkgOrSig.MatchString(file) { 192 202 pkg, u, pf, err := arch_service.GetPackageFile(ctx, group, file, ctx.Package.Owner.ID) 193 203 if err != nil { ··· 220 230 } 221 231 222 232 func RemovePackage(ctx *context.Context) { 223 - var ( 224 - group = ctx.Params("group") 225 - pkg = ctx.Params("package") 226 - ver = ctx.Params("version") 227 - pkgArch = ctx.Params("arch") 228 - ) 233 + pathGroups := strings.Split(strings.Trim(ctx.Params("*"), "/"), "/") 234 + groupLen := len(pathGroups) 235 + if groupLen < 3 { 236 + ctx.Status(http.StatusBadRequest) 237 + return 238 + } 239 + var group, pkg, ver, pkgArch string 240 + if groupLen == 3 { 241 + pkg = pathGroups[0] 242 + ver = pathGroups[1] 243 + pkgArch = pathGroups[2] 244 + } else { 245 + group = strings.Join(pathGroups[:groupLen-3], "/") 246 + pkg = pathGroups[groupLen-3] 247 + ver = pathGroups[groupLen-2] 248 + pkgArch = pathGroups[groupLen-1] 249 + } 229 250 releaser := refreshLocker(ctx, group) 230 251 defer releaser() 231 252 pv, err := packages_model.GetVersionByNameAndVersion(
+2 -2
routers/web/user/package.go
··· 177 177 ctx.Data["Title"] = pd.Package.Name 178 178 ctx.Data["IsPackagesPage"] = true 179 179 ctx.Data["PackageDescriptor"] = pd 180 + ctx.Data["PackageRegistryHost"] = setting.Packages.RegistryHost 180 181 181 182 switch pd.Package.Type { 182 183 case packages_model.TypeContainer: 183 - ctx.Data["RegistryHost"] = setting.Packages.RegistryHost 184 + 184 185 case packages_model.TypeAlpine: 185 186 branches := make(container.Set[string]) 186 187 repositories := make(container.Set[string]) ··· 203 204 ctx.Data["Repositories"] = util.Sorted(repositories.Values()) 204 205 ctx.Data["Architectures"] = util.Sorted(architectures.Values()) 205 206 case packages_model.TypeArch: 206 - ctx.Data["RegistryHost"] = setting.Packages.RegistryHost 207 207 ctx.Data["SignMail"] = fmt.Sprintf("%s@noreply.%s", ctx.Package.Owner.Name, setting.Packages.RegistryHost) 208 208 groups := make(container.Set[string]) 209 209 for _, f := range pd.Files {
+1 -1
templates/package/content/arch.tmpl
··· 25 25 {{end -}}{{- if gt $GroupSize 1 -}} 26 26 # {{ctx.Locale.Tr "packages.arch.pacman.repo.multi.item" .}} 27 27 {{end -}} 28 - [{{$.PackageDescriptor.Owner.LowerName}}.{{$.RegistryHost}}] 28 + [{{$.PackageDescriptor.Owner.LowerName}}.{{$.PackageRegistryHost}}] 29 29 SigLevel = Required 30 30 Server = <origin-url data-url="{{AppSubUrl}}/api/packages/{{$.PackageDescriptor.Owner.Name}}/arch/{{.}}/$arch"></origin-url> 31 31 {{end -}}
+2 -2
templates/package/content/container.tmpl
··· 5 5 <div class="field"> 6 6 <label>{{svg "octicon-terminal"}} {{ctx.Locale.Tr "packages.container.pull"}}</label> 7 7 {{if eq .PackageDescriptor.Metadata.Type "helm"}} 8 - <div class="markup"><pre class="code-block"><code>helm pull oci://{{.RegistryHost}}/{{.PackageDescriptor.Owner.LowerName}}/{{.PackageDescriptor.Package.LowerName}} --version {{.PackageDescriptor.Version.LowerVersion}}</code></pre></div> 8 + <div class="markup"><pre class="code-block"><code>helm pull oci://{{.PackageRegistryHost}}/{{.PackageDescriptor.Owner.LowerName}}/{{.PackageDescriptor.Package.LowerName}} --version {{.PackageDescriptor.Version.LowerVersion}}</code></pre></div> 9 9 {{else}} 10 10 {{$separator := ":"}} 11 11 {{if not .PackageDescriptor.Metadata.IsTagged}} 12 12 {{$separator = "@"}} 13 13 {{end}} 14 - <div class="markup"><pre class="code-block"><code>docker pull {{.RegistryHost}}/{{.PackageDescriptor.Owner.LowerName}}/{{.PackageDescriptor.Package.LowerName}}{{$separator}}{{.PackageDescriptor.Version.LowerVersion}}</code></pre></div> 14 + <div class="markup"><pre class="code-block"><code>docker pull {{.PackageRegistryHost}}/{{.PackageDescriptor.Owner.LowerName}}/{{.PackageDescriptor.Package.LowerName}}{{$separator}}{{.PackageDescriptor.Version.LowerVersion}}</code></pre></div> 15 15 {{end}} 16 16 </div> 17 17 <div class="field">