diff options
author | Michael Kriese <michael.kriese@visualon.de> | 2024-04-17 17:30:41 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-17 15:30:41 +0000 |
commit | bafb80f80d5505b03e5994d1ea6e2dab10052fe1 (patch) | |
tree | 73ffb2b0beb5537a9715c31953e0a48eef81622e /modules/packages | |
parent | 02e183bf3fa502b7cef76e8dcdbf01b85ce641f0 (diff) | |
download | gitea-bafb80f80d5505b03e5994d1ea6e2dab10052fe1.tar.gz gitea-bafb80f80d5505b03e5994d1ea6e2dab10052fe1.zip |
Support nuspec manifest download for nuget packages (#28921)
Support downloading nuget nuspec manifest[^1]. This is useful for
renovate because it uses this api to find the corresponding repository
- Store nuspec along with nupkg on upload
- allow downloading nuspec
- add doctor command to add missing nuspec files
[^1]:
https://learn.microsoft.com/en-us/nuget/api/package-base-address-resource#download-package-manifest-nuspec
---------
Co-authored-by: KN4CK3R <admin@oldschoolhack.me>
Diffstat (limited to 'modules/packages')
-rw-r--r-- | modules/packages/nuget/metadata.go | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/modules/packages/nuget/metadata.go b/modules/packages/nuget/metadata.go index 6769c514cc..1e98ddffde 100644 --- a/modules/packages/nuget/metadata.go +++ b/modules/packages/nuget/metadata.go @@ -48,10 +48,11 @@ const maxNuspecFileSize = 3 * 1024 * 1024 // Package represents a Nuget package type Package struct { - PackageType PackageType - ID string - Version string - Metadata *Metadata + PackageType PackageType + ID string + Version string + Metadata *Metadata + NuspecContent *bytes.Buffer } // Metadata represents the metadata of a Nuget package @@ -138,8 +139,9 @@ func ParsePackageMetaData(r io.ReaderAt, size int64) (*Package, error) { // ParseNuspecMetaData parses a Nuspec file to retrieve the metadata of a Nuget package func ParseNuspecMetaData(archive *zip.Reader, r io.Reader) (*Package, error) { + var nuspecBuf bytes.Buffer var p nuspecPackage - if err := xml.NewDecoder(r).Decode(&p); err != nil { + if err := xml.NewDecoder(io.TeeReader(r, &nuspecBuf)).Decode(&p); err != nil { return nil, err } @@ -212,10 +214,11 @@ func ParseNuspecMetaData(archive *zip.Reader, r io.Reader) (*Package, error) { } } return &Package{ - PackageType: packageType, - ID: p.Metadata.ID, - Version: toNormalizedVersion(v), - Metadata: m, + PackageType: packageType, + ID: p.Metadata.ID, + Version: toNormalizedVersion(v), + Metadata: m, + NuspecContent: &nuspecBuf, }, nil } |