Skip to content

Commit 8f0447d

Browse files
committed
fix
1 parent 906adff commit 8f0447d

File tree

8 files changed

+79
-37
lines changed

8 files changed

+79
-37
lines changed

modules/packages/npm/creator.go

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,28 @@ type PackageMetadata struct {
6262
Author User `json:"author"`
6363
ReadmeFilename string `json:"readmeFilename,omitempty"`
6464
Users map[string]bool `json:"users,omitempty"`
65-
License string `json:"license,omitempty"`
65+
License License `json:"license,omitempty"`
66+
}
67+
68+
type License string
69+
70+
func (l *License) UnmarshalJSON(data []byte) error {
71+
switch data[0] {
72+
case '"':
73+
var value string
74+
if err := json.Unmarshal(data, &value); err != nil {
75+
return err
76+
}
77+
*l = License(value)
78+
case '{':
79+
var values map[string]any
80+
if err := json.Unmarshal(data, &values); err != nil {
81+
return err
82+
}
83+
value := values["type"].(string)
84+
*l = License(value)
85+
}
86+
return nil
6687
}
6788

6889
// PackageMetadataVersion documentation: https://github.com/npm/registry/blob/master/docs/REGISTRY-API.md#version
@@ -74,7 +95,7 @@ type PackageMetadataVersion struct {
7495
Description string `json:"description"`
7596
Author User `json:"author"`
7697
Homepage string `json:"homepage,omitempty"`
77-
License string `json:"license,omitempty"`
98+
License License `json:"license,omitempty"`
7899
Repository Repository `json:"repository"`
79100
Keywords []string `json:"keywords,omitempty"`
80101
Dependencies map[string]string `json:"dependencies,omitempty"`

modules/packages/npm/creator_test.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"code.gitea.io/gitea/modules/json"
1414

1515
"github.com/stretchr/testify/assert"
16+
"github.com/stretchr/testify/require"
1617
)
1718

1819
func TestParsePackage(t *testing.T) {
@@ -291,11 +292,36 @@ func TestParsePackage(t *testing.T) {
291292
assert.Equal(t, packageDescription, p.Metadata.Readme)
292293
assert.Equal(t, packageAuthor, p.Metadata.Author)
293294
assert.Equal(t, packageBin, p.Metadata.Bin["bin"])
294-
assert.Equal(t, "MIT", p.Metadata.License)
295+
assert.Equal(t, "MIT", string(p.Metadata.License))
295296
assert.Equal(t, "https://gitea.io/", p.Metadata.ProjectURL)
296297
assert.Contains(t, p.Metadata.Dependencies, "package")
297298
assert.Equal(t, "1.2.0", p.Metadata.Dependencies["package"])
298299
assert.Equal(t, repository.Type, p.Metadata.Repository.Type)
299300
assert.Equal(t, repository.URL, p.Metadata.Repository.URL)
300301
})
302+
303+
t.Run("ValidLicenseMap", func(t *testing.T) {
304+
packageJSON := `{
305+
"versions": {
306+
"0.1.1": {
307+
"name": "dev-null",
308+
"version": "0.1.1",
309+
"license": {
310+
"type": "MIT"
311+
},
312+
"dist": {
313+
"integrity": "sha256-"
314+
}
315+
}
316+
},
317+
"_attachments": {
318+
"foo": {
319+
"data": "AAAA"
320+
}
321+
}
322+
}`
323+
p, err := ParsePackage(strings.NewReader(packageJSON))
324+
require.NoError(t, err)
325+
require.Equal(t, "MIT", string(p.Metadata.License))
326+
})
301327
}

modules/packages/npm/metadata.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ type Metadata struct {
1212
Name string `json:"name,omitempty"`
1313
Description string `json:"description,omitempty"`
1414
Author string `json:"author,omitempty"`
15-
License string `json:"license,omitempty"`
15+
License License `json:"license,omitempty"`
1616
ProjectURL string `json:"project_url,omitempty"`
1717
Keywords []string `json:"keywords,omitempty"`
1818
Dependencies map[string]string `json:"dependencies,omitempty"`

routers/web/repo/editor_cherry_pick.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,7 @@ func CherryPick(ctx *context.Context) {
3636
ctx.Data["commit_message"] = "revert " + cherryPickCommit.Message()
3737
} else {
3838
ctx.Data["CherryPickType"] = "cherry-pick"
39-
splits := strings.SplitN(cherryPickCommit.Message(), "\n", 2)
40-
ctx.Data["commit_summary"] = splits[0]
41-
ctx.Data["commit_message"] = splits[1]
39+
ctx.Data["commit_summary"], ctx.Data["commit_message"], _ = strings.Cut(cherryPickCommit.Message(), "\n")
4240
}
4341

4442
ctx.HTML(http.StatusOK, tplCherryPick)

services/mailer/sender/sender.go

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@
44
package sender
55

66
import (
7+
"errors"
78
"io"
8-
9-
"code.gitea.io/gitea/modules/log"
10-
"code.gitea.io/gitea/modules/setting"
119
)
1210

1311
type Sender interface {
@@ -16,23 +14,17 @@ type Sender interface {
1614

1715
var Send = send
1816

19-
func send(sender Sender, msgs ...*Message) error {
20-
if setting.MailService == nil {
21-
log.Error("Mailer: Send is being invoked but mail service hasn't been initialized")
22-
return nil
17+
func send(sender Sender, msg *Message) error {
18+
m := msg.ToMessage()
19+
froms := m.GetFrom()
20+
to, err := m.GetRecipients()
21+
if err != nil {
22+
return err
2323
}
24-
for _, msg := range msgs {
25-
m := msg.ToMessage()
26-
froms := m.GetFrom()
27-
to, err := m.GetRecipients()
28-
if err != nil {
29-
return err
30-
}
3124

32-
// TODO: implement sending from multiple addresses
33-
if err := sender.Send(froms[0].Address, to, m); err != nil {
34-
return err
35-
}
25+
// TODO: implement sending from multiple addresses
26+
if len(froms) == 0 {
27+
return errors.New("no FROM specified")
3628
}
37-
return nil
29+
return sender.Send(froms[0].Address, to, m)
3830
}

services/repository/generate.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ func substGiteaTemplateFile(ctx context.Context, tmpDir, tmpDirSubPath string, t
177177
}
178178

179179
generatedContent := generateExpansion(ctx, string(content), templateRepo, generateRepo)
180-
substSubPath := filepath.Clean(filePathSanitize(generateExpansion(ctx, tmpDirSubPath, templateRepo, generateRepo)))
180+
substSubPath := filePathSanitize(generateExpansion(ctx, tmpDirSubPath, templateRepo, generateRepo))
181181
newLocalPath := filepath.Join(tmpDir, substSubPath)
182182
regular, err := util.IsRegularFile(newLocalPath)
183183
if canWrite := regular || errors.Is(err, fs.ErrNotExist); !canWrite {
@@ -358,5 +358,5 @@ func filePathSanitize(s string) string {
358358
}
359359
fields[i] = field
360360
}
361-
return filepath.FromSlash(strings.Join(fields, "/"))
361+
return filepath.Clean(filepath.FromSlash(strings.Trim(strings.Join(fields, "/"), "/")))
362362
}

services/repository/generate_test.go

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,19 +54,24 @@ text/*.txt
5454
}
5555

5656
func TestFilePathSanitize(t *testing.T) {
57-
assert.Equal(t, "test_CON", filePathSanitize("test_CON"))
58-
assert.Equal(t, "test CON", filePathSanitize("test CON "))
59-
assert.Equal(t, "__/traverse/__", filePathSanitize(".. /traverse/ .."))
60-
assert.Equal(t, "./__/a/_git/b_", filePathSanitize("./../a/.git/ b: "))
57+
// path clean
58+
assert.Equal(t, "a", filePathSanitize("//a/"))
59+
assert.Equal(t, "_a", filePathSanitize(`\a`))
60+
assert.Equal(t, "__/a/__", filePathSanitize(".. /a/ .."))
61+
assert.Equal(t, "__/a/_git/b_", filePathSanitize("./../a/.git/ b: "))
62+
63+
// Windows reserved names
6164
assert.Equal(t, "_", filePathSanitize("CoN"))
6265
assert.Equal(t, "_", filePathSanitize("LpT1"))
6366
assert.Equal(t, "_", filePathSanitize("CoM1"))
67+
assert.Equal(t, "test_CON", filePathSanitize("test_CON"))
68+
assert.Equal(t, "test CON", filePathSanitize("test CON "))
69+
70+
// special chars
6471
assert.Equal(t, "_", filePathSanitize("\u0000"))
65-
assert.Equal(t, "目标", filePathSanitize("目标"))
66-
// unlike filepath.Clean, it only sanitizes, doesn't change the separator layout
67-
assert.Equal(t, "", filePathSanitize("")) //nolint:testifylint // for easy reading
72+
assert.Equal(t, ".", filePathSanitize("")) //nolint:testifylint // for easy reading
6873
assert.Equal(t, ".", filePathSanitize("."))
69-
assert.Equal(t, "/", filePathSanitize("/"))
74+
assert.Equal(t, ".", filePathSanitize("/"))
7075
}
7176

7277
func TestProcessGiteaTemplateFile(t *testing.T) {

templates/package/content/pypi.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<div class="ui form">
55
<div class="field">
66
<label>{{svg "octicon-terminal"}} {{ctx.Locale.Tr "packages.pypi.install"}}</label>
7-
<div class="markup"><pre class="code-block"><code>pip install --index-url <origin-url data-url="{{AppSubUrl}}/api/packages/{{.PackageDescriptor.Owner.Name}}/pypi/simple/"></origin-url> --extra-index-url https://pypi.org/ {{.PackageDescriptor.Package.Name}}</code></pre></div>
7+
<div class="markup"><pre class="code-block"><code>pip install --index-url <origin-url data-url="{{AppSubUrl}}/api/packages/{{.PackageDescriptor.Owner.Name}}/pypi/simple/"></origin-url> --extra-index-url https://pypi.org/simple {{.PackageDescriptor.Package.Name}}</code></pre></div>
88
</div>
99
<div class="field">
1010
<label>{{ctx.Locale.Tr "packages.registry.documentation" "PyPI" "https://docs.gitea.com/usage/packages/pypi/"}}</label>

0 commit comments

Comments
 (0)