Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4cefc91

Browse files
authored
Merge branch 'main' into fix-duplicated-users
2 parents 2970e4a + be315c7 commit 4cefc91

File tree

11 files changed

+229
-42
lines changed

11 files changed

+229
-42
lines changed

modules/markup/html.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ var defaultProcessors = []processor{
164164
linkProcessor,
165165
mentionProcessor,
166166
issueIndexPatternProcessor,
167+
commitCrossReferencePatternProcessor,
167168
sha1CurrentPatternProcessor,
168169
emailAddressProcessor,
169170
emojiProcessor,
@@ -190,6 +191,7 @@ var commitMessageProcessors = []processor{
190191
linkProcessor,
191192
mentionProcessor,
192193
issueIndexPatternProcessor,
194+
commitCrossReferencePatternProcessor,
193195
sha1CurrentPatternProcessor,
194196
emailAddressProcessor,
195197
emojiProcessor,
@@ -221,6 +223,7 @@ var commitMessageSubjectProcessors = []processor{
221223
linkProcessor,
222224
mentionProcessor,
223225
issueIndexPatternProcessor,
226+
commitCrossReferencePatternProcessor,
224227
sha1CurrentPatternProcessor,
225228
emojiShortCodeProcessor,
226229
emojiProcessor,
@@ -257,6 +260,7 @@ func RenderIssueTitle(
257260
) (string, error) {
258261
return renderProcessString(ctx, []processor{
259262
issueIndexPatternProcessor,
263+
commitCrossReferencePatternProcessor,
260264
sha1CurrentPatternProcessor,
261265
emojiShortCodeProcessor,
262266
emojiProcessor,
@@ -907,6 +911,23 @@ func issueIndexPatternProcessor(ctx *RenderContext, node *html.Node) {
907911
}
908912
}
909913

914+
func commitCrossReferencePatternProcessor(ctx *RenderContext, node *html.Node) {
915+
next := node.NextSibling
916+
917+
for node != nil && node != next {
918+
found, ref := references.FindRenderizableCommitCrossReference(node.Data)
919+
if !found {
920+
return
921+
}
922+
923+
reftext := ref.Owner + "/" + ref.Name + "@" + base.ShortSha(ref.CommitSha)
924+
link := createLink(util.URLJoin(setting.AppSubURL, ref.Owner, ref.Name, "commit", ref.CommitSha), reftext, "commit")
925+
926+
replaceContent(node, ref.RefLocation.Start, ref.RefLocation.End, link)
927+
node = node.NextSibling.NextSibling
928+
}
929+
}
930+
910931
// fullSha1PatternProcessor renders SHA containing URLs
911932
func fullSha1PatternProcessor(ctx *RenderContext, node *html.Node) {
912933
if ctx.Metas == nil {

modules/references/references.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ var (
3737
// crossReferenceIssueNumericPattern matches string that references a numeric issue in a different repository
3838
// e.g. gogits/gogs#12345
3939
crossReferenceIssueNumericPattern = regexp.MustCompile(`(?:\s|^|\(|\[)([0-9a-zA-Z-_\.]+/[0-9a-zA-Z-_\.]+[#!][0-9]+)(?:\s|$|\)|\]|[:;,.?!]\s|[:;,.?!]$)`)
40+
// crossReferenceCommitPattern matches a string that references a commit in a different repository
41+
// e.g. go-gitea/gitea@d8a994ef, go-gitea/gitea@d8a994ef243349f321568f9e36d5c3f444b99cae (7-40 characters)
42+
crossReferenceCommitPattern = regexp.MustCompile(`(?:\s|^|\(|\[)([0-9a-zA-Z-_\.]+)/([0-9a-zA-Z-_\.]+)@([0-9a-f]{7,40})(?:\s|$|\)|\]|[:;,.?!]\s|[:;,.?!]$)`)
4043
// spaceTrimmedPattern let's us find the trailing space
4144
spaceTrimmedPattern = regexp.MustCompile(`(?:.*[0-9a-zA-Z-_])\s`)
4245
// timeLogPattern matches string for time tracking
@@ -92,6 +95,7 @@ type RenderizableReference struct {
9295
Issue string
9396
Owner string
9497
Name string
98+
CommitSha string
9599
IsPull bool
96100
RefLocation *RefSpan
97101
Action XRefAction
@@ -350,6 +354,21 @@ func FindRenderizableReferenceNumeric(content string, prOnly bool) (bool, *Rende
350354
}
351355
}
352356

357+
// FindRenderizableCommitCrossReference returns the first unvalidated commit cross reference found in a string.
358+
func FindRenderizableCommitCrossReference(content string) (bool, *RenderizableReference) {
359+
m := crossReferenceCommitPattern.FindStringSubmatchIndex(content)
360+
if len(m) < 8 {
361+
return false, nil
362+
}
363+
364+
return true, &RenderizableReference{
365+
Owner: content[m[2]:m[3]],
366+
Name: content[m[4]:m[5]],
367+
CommitSha: content[m[6]:m[7]],
368+
RefLocation: &RefSpan{Start: m[0], End: m[1]},
369+
}
370+
}
371+
353372
// FindRenderizableReferenceRegexp returns the first regexp unvalidated references found in a string.
354373
func FindRenderizableReferenceRegexp(content string, pattern *regexp.Regexp) (bool, *RenderizableReference) {
355374
match := pattern.FindStringSubmatchIndex(content)

modules/references/references_test.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,67 @@ func TestFindAllMentions(t *testing.T) {
303303
}, res)
304304
}
305305

306+
func TestFindRenderizableCommitCrossReference(t *testing.T) {
307+
cases := []struct {
308+
Input string
309+
Expected *RenderizableReference
310+
}{
311+
{
312+
Input: "",
313+
Expected: nil,
314+
},
315+
{
316+
Input: "test",
317+
Expected: nil,
318+
},
319+
{
320+
Input: "go-gitea/gitea@test",
321+
Expected: nil,
322+
},
323+
{
324+
Input: "go-gitea/gitea@ab1234",
325+
Expected: nil,
326+
},
327+
{
328+
Input: "go-gitea/gitea@abcd1234",
329+
Expected: &RenderizableReference{
330+
Owner: "go-gitea",
331+
Name: "gitea",
332+
CommitSha: "abcd1234",
333+
RefLocation: &RefSpan{Start: 0, End: 23},
334+
},
335+
},
336+
{
337+
Input: "go-gitea/gitea@abcd1234abcd1234abcd1234abcd1234abcd1234",
338+
Expected: &RenderizableReference{
339+
Owner: "go-gitea",
340+
Name: "gitea",
341+
CommitSha: "abcd1234abcd1234abcd1234abcd1234abcd1234",
342+
RefLocation: &RefSpan{Start: 0, End: 55},
343+
},
344+
},
345+
{
346+
Input: "go-gitea/gitea@abcd1234abcd1234abcd1234abcd1234abcd12340", // longer than 40 characters
347+
Expected: nil,
348+
},
349+
{
350+
Input: "test go-gitea/gitea@abcd1234 test",
351+
Expected: &RenderizableReference{
352+
Owner: "go-gitea",
353+
Name: "gitea",
354+
CommitSha: "abcd1234",
355+
RefLocation: &RefSpan{Start: 4, End: 29},
356+
},
357+
},
358+
}
359+
360+
for _, c := range cases {
361+
found, ref := FindRenderizableCommitCrossReference(c.Input)
362+
assert.Equal(t, ref != nil, found)
363+
assert.Equal(t, c.Expected, ref)
364+
}
365+
}
366+
306367
func TestRegExp_mentionPattern(t *testing.T) {
307368
trueTestCases := []struct {
308369
pat string

routers/api/packages/container/blob.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,18 @@ var uploadVersionMutex sync.Mutex
2626

2727
// saveAsPackageBlob creates a package blob from an upload
2828
// The uploaded blob gets stored in a special upload version to link them to the package/image
29-
func saveAsPackageBlob(hsr packages_module.HashedSizeReader, pi *packages_service.PackageInfo) (*packages_model.PackageBlob, error) {
29+
func saveAsPackageBlob(hsr packages_module.HashedSizeReader, pci *packages_service.PackageCreationInfo) (*packages_model.PackageBlob, error) {
30+
if err := packages_service.CheckSizeQuotaExceeded(db.DefaultContext, pci.Creator, pci.Owner, packages_model.TypeContainer, hsr.Size()); err != nil {
31+
return nil, err
32+
}
33+
3034
pb := packages_service.NewPackageBlob(hsr)
3135

3236
exists := false
3337

3438
contentStore := packages_module.NewContentStore()
3539

36-
uploadVersion, err := getOrCreateUploadVersion(pi)
40+
uploadVersion, err := getOrCreateUploadVersion(&pci.PackageInfo)
3741
if err != nil {
3842
return nil, err
3943
}

routers/api/packages/container/container.go

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,22 @@ func InitiateUploadBlob(ctx *context.Context) {
227227
return
228228
}
229229

230-
if _, err := saveAsPackageBlob(buf, &packages_service.PackageInfo{Owner: ctx.Package.Owner, Name: image}); err != nil {
231-
apiError(ctx, http.StatusInternalServerError, err)
230+
if _, err := saveAsPackageBlob(
231+
buf,
232+
&packages_service.PackageCreationInfo{
233+
PackageInfo: packages_service.PackageInfo{
234+
Owner: ctx.Package.Owner,
235+
Name: image,
236+
},
237+
Creator: ctx.Doer,
238+
},
239+
); err != nil {
240+
switch err {
241+
case packages_service.ErrQuotaTotalCount, packages_service.ErrQuotaTypeSize, packages_service.ErrQuotaTotalSize:
242+
apiError(ctx, http.StatusForbidden, err)
243+
default:
244+
apiError(ctx, http.StatusInternalServerError, err)
245+
}
232246
return
233247
}
234248

@@ -358,8 +372,22 @@ func EndUploadBlob(ctx *context.Context) {
358372
return
359373
}
360374

361-
if _, err := saveAsPackageBlob(uploader, &packages_service.PackageInfo{Owner: ctx.Package.Owner, Name: image}); err != nil {
362-
apiError(ctx, http.StatusInternalServerError, err)
375+
if _, err := saveAsPackageBlob(
376+
uploader,
377+
&packages_service.PackageCreationInfo{
378+
PackageInfo: packages_service.PackageInfo{
379+
Owner: ctx.Package.Owner,
380+
Name: image,
381+
},
382+
Creator: ctx.Doer,
383+
},
384+
); err != nil {
385+
switch err {
386+
case packages_service.ErrQuotaTotalCount, packages_service.ErrQuotaTypeSize, packages_service.ErrQuotaTotalSize:
387+
apiError(ctx, http.StatusForbidden, err)
388+
default:
389+
apiError(ctx, http.StatusInternalServerError, err)
390+
}
363391
return
364392
}
365393

@@ -526,7 +554,12 @@ func UploadManifest(ctx *context.Context) {
526554
} else if errors.Is(err, container_model.ErrContainerBlobNotExist) {
527555
apiErrorDefined(ctx, errBlobUnknown)
528556
} else {
529-
apiError(ctx, http.StatusInternalServerError, err)
557+
switch err {
558+
case packages_service.ErrQuotaTotalCount, packages_service.ErrQuotaTypeSize, packages_service.ErrQuotaTotalSize:
559+
apiError(ctx, http.StatusForbidden, err)
560+
default:
561+
apiError(ctx, http.StatusInternalServerError, err)
562+
}
530563
}
531564
return
532565
}

routers/api/packages/container/manifest.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,10 @@ func createPackageAndVersion(ctx context.Context, mci *manifestCreationInfo, met
327327
}
328328
}
329329

330+
if err := packages_service.CheckCountQuotaExceeded(ctx, mci.Creator, mci.Owner); err != nil {
331+
return nil, err
332+
}
333+
330334
if mci.IsTagged {
331335
if _, err := packages_model.InsertProperty(ctx, packages_model.PropertyTypeVersion, pv.ID, container_module.PropertyManifestTagged, ""); err != nil {
332336
log.Error("Error setting package version property: %v", err)

routers/private/hook_post_receive.go

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -173,13 +173,6 @@ func HookPostReceive(ctx *gitea_context.PrivateContext) {
173173
return
174174
}
175175

176-
if !repo.AllowsPulls() {
177-
// We can stop there's no need to go any further
178-
ctx.JSON(http.StatusOK, private.HookPostReceiveResult{
179-
RepoWasEmpty: wasEmpty,
180-
})
181-
return
182-
}
183176
baseRepo = repo
184177

185178
if repo.IsFork {
@@ -191,7 +184,17 @@ func HookPostReceive(ctx *gitea_context.PrivateContext) {
191184
})
192185
return
193186
}
194-
baseRepo = repo.BaseRepo
187+
if repo.BaseRepo.AllowsPulls() {
188+
baseRepo = repo.BaseRepo
189+
}
190+
}
191+
192+
if !baseRepo.AllowsPulls() {
193+
// We can stop there's no need to go any further
194+
ctx.JSON(http.StatusOK, private.HookPostReceiveResult{
195+
RepoWasEmpty: wasEmpty,
196+
})
197+
return
195198
}
196199
}
197200

@@ -217,14 +220,14 @@ func HookPostReceive(ctx *gitea_context.PrivateContext) {
217220
branch = fmt.Sprintf("%s:%s", repo.OwnerName, branch)
218221
}
219222
results = append(results, private.HookPostReceiveBranchResult{
220-
Message: setting.Git.PullRequestPushMessage && repo.AllowsPulls(),
223+
Message: setting.Git.PullRequestPushMessage && baseRepo.AllowsPulls(),
221224
Create: true,
222225
Branch: branch,
223226
URL: fmt.Sprintf("%s/compare/%s...%s", baseRepo.HTMLURL(), util.PathEscapeSegments(baseRepo.DefaultBranch), util.PathEscapeSegments(branch)),
224227
})
225228
} else {
226229
results = append(results, private.HookPostReceiveBranchResult{
227-
Message: setting.Git.PullRequestPushMessage && repo.AllowsPulls(),
230+
Message: setting.Git.PullRequestPushMessage && baseRepo.AllowsPulls(),
228231
Create: false,
229232
Branch: branch,
230233
URL: fmt.Sprintf("%s/pulls/%d", baseRepo.HTMLURL(), pr.Index),

routers/web/repo/issue.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -784,6 +784,14 @@ func setTemplateIfExists(ctx *context.Context, ctxDataKey string, possibleFiles
784784
ctx.Data[ctxDataKey] = template.Content
785785

786786
if template.Type() == api.IssueTemplateTypeYaml {
787+
// Replace field default values by values from query
788+
for _, field := range template.Fields {
789+
fieldValue := ctx.FormString("field:" + field.ID)
790+
if fieldValue != "" {
791+
field.Attributes["value"] = fieldValue
792+
}
793+
}
794+
787795
ctx.Data["Fields"] = template.Fields
788796
ctx.Data["TemplateFile"] = template.FileName
789797
}

services/packages/packages.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ func createPackageAndVersion(ctx context.Context, pvci *PackageCreationInfo, all
173173
}
174174

175175
if versionCreated {
176-
if err := checkCountQuotaExceeded(ctx, pvci.Creator, pvci.Owner); err != nil {
176+
if err := CheckCountQuotaExceeded(ctx, pvci.Creator, pvci.Owner); err != nil {
177177
return nil, false, err
178178
}
179179

@@ -240,7 +240,7 @@ func NewPackageBlob(hsr packages_module.HashedSizeReader) *packages_model.Packag
240240
func addFileToPackageVersion(ctx context.Context, pv *packages_model.PackageVersion, pvi *PackageInfo, pfci *PackageFileCreationInfo) (*packages_model.PackageFile, *packages_model.PackageBlob, bool, error) {
241241
log.Trace("Adding package file: %v, %s", pv.ID, pfci.Filename)
242242

243-
if err := checkSizeQuotaExceeded(ctx, pfci.Creator, pvi.Owner, pvi.PackageType, pfci.Data.Size()); err != nil {
243+
if err := CheckSizeQuotaExceeded(ctx, pfci.Creator, pvi.Owner, pvi.PackageType, pfci.Data.Size()); err != nil {
244244
return nil, nil, false, err
245245
}
246246

@@ -302,7 +302,9 @@ func addFileToPackageVersion(ctx context.Context, pv *packages_model.PackageVers
302302
return pf, pb, !exists, nil
303303
}
304304

305-
func checkCountQuotaExceeded(ctx context.Context, doer, owner *user_model.User) error {
305+
// CheckCountQuotaExceeded checks if the owner has more than the allowed packages
306+
// The check is skipped if the doer is an admin.
307+
func CheckCountQuotaExceeded(ctx context.Context, doer, owner *user_model.User) error {
306308
if doer.IsAdmin {
307309
return nil
308310
}
@@ -324,7 +326,9 @@ func checkCountQuotaExceeded(ctx context.Context, doer, owner *user_model.User)
324326
return nil
325327
}
326328

327-
func checkSizeQuotaExceeded(ctx context.Context, doer, owner *user_model.User, packageType packages_model.Type, uploadSize int64) error {
329+
// CheckSizeQuotaExceeded checks if the upload size is bigger than the allowed size
330+
// The check is skipped if the doer is an admin.
331+
func CheckSizeQuotaExceeded(ctx context.Context, doer, owner *user_model.User, packageType packages_model.Type, uploadSize int64) error {
328332
if doer.IsAdmin {
329333
return nil
330334
}

templates/org/home.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
{{if .Org.Visibility.IsPrivate}}<div class="ui large basic horizontal label">{{.locale.Tr "org.settings.visibility.private_shortname"}}</div>{{end}}
1414
</span>
1515
</div>
16-
{{if $.RenderedDescription}}<p class="render-content markup">{{$.RenderedDescription|Str2html}}</p>{{end}}
16+
{{if $.RenderedDescription}}<div class="render-content markup">{{$.RenderedDescription|Str2html}}</div>{{end}}
1717
<div class="text grey meta">
1818
{{if .Org.Location}}<div class="item">{{svg "octicon-location"}} <span>{{.Org.Location}}</span></div>{{end}}
1919
{{if .Org.Website}}<div class="item">{{svg "octicon-link"}} <a target="_blank" rel="noopener noreferrer me" href="{{.Org.Website}}">{{.Org.Website}}</a></div>{{end}}

0 commit comments

Comments
 (0)