mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 21:16:26 +01:00 
			
		
		
		
	Backport #32943 by wxiaoguang Fix #30568 At the moment, here only `GroupID` (no `Version`) is parsed & used Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		
							parent
							
								
									0e0ebf68d7
								
							
						
					
					
						commit
						af5e5e8f00
					
				@ -7,6 +7,7 @@ import (
 | 
			
		||||
	"encoding/xml"
 | 
			
		||||
	"io"
 | 
			
		||||
 | 
			
		||||
	"code.gitea.io/gitea/modules/util"
 | 
			
		||||
	"code.gitea.io/gitea/modules/validation"
 | 
			
		||||
 | 
			
		||||
	"golang.org/x/net/html/charset"
 | 
			
		||||
@ -32,17 +33,26 @@ type Dependency struct {
 | 
			
		||||
 | 
			
		||||
type pomStruct struct {
 | 
			
		||||
	XMLName xml.Name `xml:"project"`
 | 
			
		||||
 | 
			
		||||
	Parent struct {
 | 
			
		||||
		GroupID    string `xml:"groupId"`
 | 
			
		||||
		ArtifactID string `xml:"artifactId"`
 | 
			
		||||
		Version    string `xml:"version"`
 | 
			
		||||
	} `xml:"parent"`
 | 
			
		||||
 | 
			
		||||
	GroupID     string `xml:"groupId"`
 | 
			
		||||
	ArtifactID  string `xml:"artifactId"`
 | 
			
		||||
	Version     string `xml:"version"`
 | 
			
		||||
	Name        string `xml:"name"`
 | 
			
		||||
	Description string `xml:"description"`
 | 
			
		||||
	URL         string `xml:"url"`
 | 
			
		||||
 | 
			
		||||
	Licenses []struct {
 | 
			
		||||
		Name         string `xml:"name"`
 | 
			
		||||
		URL          string `xml:"url"`
 | 
			
		||||
		Distribution string `xml:"distribution"`
 | 
			
		||||
	} `xml:"licenses>license"`
 | 
			
		||||
 | 
			
		||||
	Dependencies []struct {
 | 
			
		||||
		GroupID    string `xml:"groupId"`
 | 
			
		||||
		ArtifactID string `xml:"artifactId"`
 | 
			
		||||
@ -81,8 +91,16 @@ func ParsePackageMetaData(r io.Reader) (*Metadata, error) {
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pomGroupID := pom.GroupID
 | 
			
		||||
	if pomGroupID == "" {
 | 
			
		||||
		// the current module could inherit parent: https://maven.apache.org/pom.html#Inheritance
 | 
			
		||||
		pomGroupID = pom.Parent.GroupID
 | 
			
		||||
	}
 | 
			
		||||
	if pomGroupID == "" {
 | 
			
		||||
		return nil, util.ErrInvalidArgument
 | 
			
		||||
	}
 | 
			
		||||
	return &Metadata{
 | 
			
		||||
		GroupID:      pom.GroupID,
 | 
			
		||||
		GroupID:      pomGroupID,
 | 
			
		||||
		ArtifactID:   pom.ArtifactID,
 | 
			
		||||
		Name:         pom.Name,
 | 
			
		||||
		Description:  pom.Description,
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,10 @@ import (
 | 
			
		||||
	"strings"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"code.gitea.io/gitea/modules/util"
 | 
			
		||||
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
	"github.com/stretchr/testify/require"
 | 
			
		||||
	"golang.org/x/text/encoding/charmap"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@ -86,4 +89,35 @@ func TestParsePackageMetaData(t *testing.T) {
 | 
			
		||||
		assert.NoError(t, err)
 | 
			
		||||
		assert.NotNil(t, m)
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	t.Run("ParentInherit", func(t *testing.T) {
 | 
			
		||||
		pom := `<?xml version="1.0"?>
 | 
			
		||||
<project>
 | 
			
		||||
  <modelVersion>4.0.0</modelVersion>
 | 
			
		||||
  <parent>
 | 
			
		||||
    <groupId>com.mycompany.app</groupId>
 | 
			
		||||
    <artifactId>my-app</artifactId>
 | 
			
		||||
    <version>1.0-SNAPSHOT</version>
 | 
			
		||||
  </parent>
 | 
			
		||||
  <artifactId>submodule1</artifactId>
 | 
			
		||||
</project>
 | 
			
		||||
`
 | 
			
		||||
		m, err := ParsePackageMetaData(strings.NewReader(pom))
 | 
			
		||||
		require.NoError(t, err)
 | 
			
		||||
		require.NotNil(t, m)
 | 
			
		||||
 | 
			
		||||
		assert.Equal(t, "com.mycompany.app", m.GroupID)
 | 
			
		||||
		assert.Equal(t, "submodule1", m.ArtifactID)
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	t.Run("ParentInherit", func(t *testing.T) {
 | 
			
		||||
		pom := `<?xml version="1.0"?>
 | 
			
		||||
<project>
 | 
			
		||||
  <modelVersion>4.0.0</modelVersion>
 | 
			
		||||
  <artifactId></artifactId>
 | 
			
		||||
</project>
 | 
			
		||||
`
 | 
			
		||||
		_, err := ParsePackageMetaData(strings.NewReader(pom))
 | 
			
		||||
		require.ErrorIs(t, err, util.ErrInvalidArgument)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -465,6 +465,8 @@ func CommonRoutes() *web.Router {
 | 
			
		||||
			r.Post("/api/charts", reqPackageAccess(perm.AccessModeWrite), helm.UploadPackage)
 | 
			
		||||
		}, reqPackageAccess(perm.AccessModeRead))
 | 
			
		||||
		r.Group("/maven", func() {
 | 
			
		||||
			// FIXME: this path design is not right.
 | 
			
		||||
			// It should be `/.../{groupId}/{artifactId}/{version}`, but not `/.../{groupId}-{artifactId}/{version}`
 | 
			
		||||
			r.Put("/*", reqPackageAccess(perm.AccessModeWrite), maven.UploadPackageFile)
 | 
			
		||||
			r.Get("/*", maven.DownloadPackageFile)
 | 
			
		||||
			r.Head("/*", maven.ProvidePackageFileHeader)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user