Skip to content

Commit b48df10

Browse files
GiteaBotusbalbinwxiaoguang
authored
cargo registry - respect renamed dependencies (#32430) (#32478)
Backport #32430 by usbalbin Co-authored-by: Albin Hedman <[email protected]> Co-authored-by: wxiaoguang <[email protected]>
1 parent eb57336 commit b48df10

File tree

2 files changed

+52
-17
lines changed

2 files changed

+52
-17
lines changed

modules/packages/cargo/parser.go

+10-1
Original file line numberDiff line numberDiff line change
@@ -136,15 +136,24 @@ func parsePackage(r io.Reader) (*Package, error) {
136136

137137
dependencies := make([]*Dependency, 0, len(meta.Deps))
138138
for _, dep := range meta.Deps {
139+
// https://doc.rust-lang.org/cargo/reference/registry-web-api.html#publish
140+
// It is a string of the new package name if the dependency is renamed, otherwise empty
141+
name := dep.ExplicitNameInToml
142+
pkg := &dep.Name
143+
if name == "" {
144+
name = dep.Name
145+
pkg = nil
146+
}
139147
dependencies = append(dependencies, &Dependency{
140-
Name: dep.Name,
148+
Name: name,
141149
Req: dep.VersionReq,
142150
Features: dep.Features,
143151
Optional: dep.Optional,
144152
DefaultFeatures: dep.DefaultFeatures,
145153
Target: dep.Target,
146154
Kind: dep.Kind,
147155
Registry: dep.Registry,
156+
Package: pkg,
148157
})
149158
}
150159

modules/packages/cargo/parser_test.go

+42-16
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@ import (
1313
"github.com/stretchr/testify/assert"
1414
)
1515

16-
const (
17-
description = "Package Description"
18-
author = "KN4CK3R"
19-
homepage = "https://gitea.io/"
20-
license = "MIT"
21-
)
22-
2316
func TestParsePackage(t *testing.T) {
24-
createPackage := func(name, version string) io.Reader {
25-
metadata := `{
17+
const (
18+
description = "Package Description"
19+
author = "KN4CK3R"
20+
homepage = "https://gitea.io/"
21+
license = "MIT"
22+
payload = "gitea test dummy payload" // a fake payload for test only
23+
)
24+
makeDefaultPackageMeta := func(name, version string) string {
25+
return `{
2626
"name":"` + name + `",
2727
"vers":"` + version + `",
2828
"description":"` + description + `",
@@ -36,18 +36,19 @@ func TestParsePackage(t *testing.T) {
3636
"homepage":"` + homepage + `",
3737
"license":"` + license + `"
3838
}`
39-
39+
}
40+
createPackage := func(metadata string) io.Reader {
4041
var buf bytes.Buffer
4142
binary.Write(&buf, binary.LittleEndian, uint32(len(metadata)))
4243
buf.WriteString(metadata)
43-
binary.Write(&buf, binary.LittleEndian, uint32(4))
44-
buf.WriteString("test")
44+
binary.Write(&buf, binary.LittleEndian, uint32(len(payload)))
45+
buf.WriteString(payload)
4546
return &buf
4647
}
4748

4849
t.Run("InvalidName", func(t *testing.T) {
4950
for _, name := range []string{"", "0test", "-test", "_test", strings.Repeat("a", 65)} {
50-
data := createPackage(name, "1.0.0")
51+
data := createPackage(makeDefaultPackageMeta(name, "1.0.0"))
5152

5253
cp, err := ParsePackage(data)
5354
assert.Nil(t, cp)
@@ -57,7 +58,7 @@ func TestParsePackage(t *testing.T) {
5758

5859
t.Run("InvalidVersion", func(t *testing.T) {
5960
for _, version := range []string{"", "1.", "-1.0", "1.0.0/1"} {
60-
data := createPackage("test", version)
61+
data := createPackage(makeDefaultPackageMeta("test", version))
6162

6263
cp, err := ParsePackage(data)
6364
assert.Nil(t, cp)
@@ -66,7 +67,7 @@ func TestParsePackage(t *testing.T) {
6667
})
6768

6869
t.Run("Valid", func(t *testing.T) {
69-
data := createPackage("test", "1.0.0")
70+
data := createPackage(makeDefaultPackageMeta("test", "1.0.0"))
7071

7172
cp, err := ParsePackage(data)
7273
assert.NotNil(t, cp)
@@ -78,9 +79,34 @@ func TestParsePackage(t *testing.T) {
7879
assert.Equal(t, []string{author}, cp.Metadata.Authors)
7980
assert.Len(t, cp.Metadata.Dependencies, 1)
8081
assert.Equal(t, "dep", cp.Metadata.Dependencies[0].Name)
82+
assert.Nil(t, cp.Metadata.Dependencies[0].Package)
8183
assert.Equal(t, homepage, cp.Metadata.ProjectURL)
8284
assert.Equal(t, license, cp.Metadata.License)
8385
content, _ := io.ReadAll(cp.Content)
84-
assert.Equal(t, "test", string(content))
86+
assert.Equal(t, payload, string(content))
87+
})
88+
89+
t.Run("Renamed", func(t *testing.T) {
90+
data := createPackage(`{
91+
"name":"test-pkg",
92+
"vers":"1.0",
93+
"description":"test-desc",
94+
"authors": ["test-author"],
95+
"deps":[
96+
{
97+
"name":"dep-renamed",
98+
"explicit_name_in_toml":"dep-explicit",
99+
"version_req":"1.0"
100+
}
101+
],
102+
"homepage":"https://gitea.io/",
103+
"license":"MIT"
104+
}`)
105+
cp, err := ParsePackage(data)
106+
assert.NoError(t, err)
107+
assert.Equal(t, "test-pkg", cp.Name)
108+
assert.Equal(t, "https://gitea.io/", cp.Metadata.ProjectURL)
109+
assert.Equal(t, "dep-explicit", cp.Metadata.Dependencies[0].Name)
110+
assert.Equal(t, "dep-renamed", *cp.Metadata.Dependencies[0].Package)
85111
})
86112
}

0 commit comments

Comments
 (0)