mirror of
https://github.com/go-gitea/gitea
synced 2025-02-26 23:04:18 +00:00
Backport #33678 by dianaStr7 Co-authored-by: Diana <80010947+dianaStr7@users.noreply.github.com> Co-authored-by: diana.strebkova@t-systems.com <diana.strebkova@t-systems.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
parent
ae595aa913
commit
b5007c6154
@ -8,7 +8,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
packages_model "code.gitea.io/gitea/models/packages"
|
packages_model "code.gitea.io/gitea/models/packages"
|
||||||
maven_module "code.gitea.io/gitea/modules/packages/maven"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// MetadataResponse https://maven.apache.org/ref/3.2.5/maven-repository-metadata/repository-metadata.html
|
// MetadataResponse https://maven.apache.org/ref/3.2.5/maven-repository-metadata/repository-metadata.html
|
||||||
@ -22,7 +21,7 @@ type MetadataResponse struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// pds is expected to be sorted ascending by CreatedUnix
|
// pds is expected to be sorted ascending by CreatedUnix
|
||||||
func createMetadataResponse(pds []*packages_model.PackageDescriptor) *MetadataResponse {
|
func createMetadataResponse(pds []*packages_model.PackageDescriptor, groupID, artifactID string) *MetadataResponse {
|
||||||
var release *packages_model.PackageDescriptor
|
var release *packages_model.PackageDescriptor
|
||||||
|
|
||||||
versions := make([]string, 0, len(pds))
|
versions := make([]string, 0, len(pds))
|
||||||
@ -35,11 +34,9 @@ func createMetadataResponse(pds []*packages_model.PackageDescriptor) *MetadataRe
|
|||||||
|
|
||||||
latest := pds[len(pds)-1]
|
latest := pds[len(pds)-1]
|
||||||
|
|
||||||
metadata := latest.Metadata.(*maven_module.Metadata)
|
|
||||||
|
|
||||||
resp := &MetadataResponse{
|
resp := &MetadataResponse{
|
||||||
GroupID: metadata.GroupID,
|
GroupID: groupID,
|
||||||
ArtifactID: metadata.ArtifactID,
|
ArtifactID: artifactID,
|
||||||
Latest: latest.Version.Version,
|
Latest: latest.Version.Version,
|
||||||
Version: versions,
|
Version: versions,
|
||||||
}
|
}
|
||||||
|
@ -84,20 +84,19 @@ func handlePackageFile(ctx *context.Context, serveContent bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func serveMavenMetadata(ctx *context.Context, params parameters) {
|
func serveMavenMetadata(ctx *context.Context, params parameters) {
|
||||||
// /com/foo/project/maven-metadata.xml[.md5/.sha1/.sha256/.sha512]
|
// path pattern: /com/foo/project/maven-metadata.xml[.md5/.sha1/.sha256/.sha512]
|
||||||
|
// in case there are legacy package names ("GroupID-ArtifactID") we need to check both, new packages always use ":" as separator("GroupID:ArtifactID")
|
||||||
pvs, err := packages_model.GetVersionsByPackageName(ctx, ctx.Package.Owner.ID, packages_model.TypeMaven, params.toInternalPackageName())
|
pvsLegacy, err := packages_model.GetVersionsByPackageName(ctx, ctx.Package.Owner.ID, packages_model.TypeMaven, params.toInternalPackageNameLegacy())
|
||||||
if errors.Is(err, util.ErrNotExist) {
|
|
||||||
pvs, err = packages_model.GetVersionsByPackageName(ctx, ctx.Package.Owner.ID, packages_model.TypeMaven, params.toInternalPackageNameLegacy())
|
|
||||||
}
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
apiError(ctx, http.StatusInternalServerError, err)
|
apiError(ctx, http.StatusInternalServerError, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if len(pvs) == 0 {
|
pvs, err := packages_model.GetVersionsByPackageName(ctx, ctx.Package.Owner.ID, packages_model.TypeMaven, params.toInternalPackageName())
|
||||||
apiError(ctx, http.StatusNotFound, packages_model.ErrPackageNotExist)
|
if err != nil {
|
||||||
|
apiError(ctx, http.StatusInternalServerError, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
pvs = append(pvsLegacy, pvs...)
|
||||||
|
|
||||||
pds, err := packages_model.GetPackageDescriptors(ctx, pvs)
|
pds, err := packages_model.GetPackageDescriptors(ctx, pvs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -110,7 +109,7 @@ func serveMavenMetadata(ctx *context.Context, params parameters) {
|
|||||||
return pds[i].Version.CreatedUnix < pds[j].Version.CreatedUnix
|
return pds[i].Version.CreatedUnix < pds[j].Version.CreatedUnix
|
||||||
})
|
})
|
||||||
|
|
||||||
xmlMetadata, err := xml.Marshal(createMetadataResponse(pds))
|
xmlMetadata, err := xml.Marshal(createMetadataResponse(pds, params.GroupID, params.ArtifactID))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
apiError(ctx, http.StatusInternalServerError, err)
|
apiError(ctx, http.StatusInternalServerError, err)
|
||||||
return
|
return
|
||||||
|
@ -80,6 +80,7 @@ func TestPackageMaven(t *testing.T) {
|
|||||||
t.Run("UploadLegacy", func(t *testing.T) {
|
t.Run("UploadLegacy", func(t *testing.T) {
|
||||||
defer tests.PrintCurrentTest(t)()
|
defer tests.PrintCurrentTest(t)()
|
||||||
|
|
||||||
|
// try to upload a package with legacy package name (will be saved as "GroupID-ArtifactID")
|
||||||
legacyRootLink := "/api/packages/user2/maven/com/gitea/legacy-project"
|
legacyRootLink := "/api/packages/user2/maven/com/gitea/legacy-project"
|
||||||
req := NewRequestWithBody(t, "PUT", legacyRootLink+"/1.0.2/any-file-name?use_legacy_package_name=1", strings.NewReader("test-content")).AddBasicAuth(user.Name)
|
req := NewRequestWithBody(t, "PUT", legacyRootLink+"/1.0.2/any-file-name?use_legacy_package_name=1", strings.NewReader("test-content")).AddBasicAuth(user.Name)
|
||||||
MakeRequest(t, req, http.StatusCreated)
|
MakeRequest(t, req, http.StatusCreated)
|
||||||
@ -97,6 +98,13 @@ func TestPackageMaven(t *testing.T) {
|
|||||||
req = NewRequest(t, "GET", "/user2/-/packages/maven/com.gitea%3Alegacy-project/1.0.2")
|
req = NewRequest(t, "GET", "/user2/-/packages/maven/com.gitea%3Alegacy-project/1.0.2")
|
||||||
MakeRequest(t, req, http.StatusNotFound)
|
MakeRequest(t, req, http.StatusNotFound)
|
||||||
|
|
||||||
|
// legacy package names should also be able to be listed
|
||||||
|
req = NewRequest(t, "GET", legacyRootLink+"/maven-metadata.xml").AddBasicAuth(user.Name)
|
||||||
|
resp := MakeRequest(t, req, http.StatusOK)
|
||||||
|
respBody := resp.Body.String()
|
||||||
|
assert.Contains(t, respBody, "<version>1.0.2</version>")
|
||||||
|
|
||||||
|
// then upload a package with correct package name (will be saved as "GroupID:ArtifactID")
|
||||||
req = NewRequestWithBody(t, "PUT", legacyRootLink+"/1.0.3/any-file-name", strings.NewReader("test-content")).AddBasicAuth(user.Name)
|
req = NewRequestWithBody(t, "PUT", legacyRootLink+"/1.0.3/any-file-name", strings.NewReader("test-content")).AddBasicAuth(user.Name)
|
||||||
MakeRequest(t, req, http.StatusCreated)
|
MakeRequest(t, req, http.StatusCreated)
|
||||||
_, err = packages.GetPackageByName(db.DefaultContext, user.ID, packages.TypeMaven, "com.gitea-legacy-project")
|
_, err = packages.GetPackageByName(db.DefaultContext, user.ID, packages.TypeMaven, "com.gitea-legacy-project")
|
||||||
@ -114,6 +122,12 @@ func TestPackageMaven(t *testing.T) {
|
|||||||
req = NewRequest(t, "GET", "/user2/-/packages/maven/com.gitea%3Alegacy-project/1.0.2")
|
req = NewRequest(t, "GET", "/user2/-/packages/maven/com.gitea%3Alegacy-project/1.0.2")
|
||||||
MakeRequest(t, req, http.StatusOK)
|
MakeRequest(t, req, http.StatusOK)
|
||||||
|
|
||||||
|
// now 2 packages should be listed
|
||||||
|
req = NewRequest(t, "GET", legacyRootLink+"/maven-metadata.xml").AddBasicAuth(user.Name)
|
||||||
|
resp = MakeRequest(t, req, http.StatusOK)
|
||||||
|
respBody = resp.Body.String()
|
||||||
|
assert.Contains(t, respBody, "<version>1.0.2</version>")
|
||||||
|
assert.Contains(t, respBody, "<version>1.0.3</version>")
|
||||||
require.NoError(t, packages.DeletePackageByID(db.DefaultContext, p.ID))
|
require.NoError(t, packages.DeletePackageByID(db.DefaultContext, p.ID))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user