Skip to content

Commit c9a78c5

Browse files
authored
Merge branch 'release/v1.24' into backport-34142-v1.24
2 parents 4650e78 + 5d6c5ce commit c9a78c5

File tree

17 files changed

+145
-31
lines changed

17 files changed

+145
-31
lines changed

models/activities/user_heatmap.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func getUserHeatmapData(ctx context.Context, user *user_model.User, team *organi
6666
Select(groupBy+" AS timestamp, count(user_id) as contributions").
6767
Table("action").
6868
Where(cond).
69-
And("created_unix > ?", timeutil.TimeStampNow()-31536000).
69+
And("created_unix > ?", timeutil.TimeStampNow()-(366+7)*86400). // (366+7) days to include the first week for the heatmap
7070
GroupBy(groupByName).
7171
OrderBy("timestamp").
7272
Find(&hdata)

models/user/avatar.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package user
55

66
import (
77
"context"
8-
"crypto/md5"
98
"fmt"
109
"image/png"
1110
"io"
@@ -106,7 +105,7 @@ func (u *User) IsUploadAvatarChanged(data []byte) bool {
106105
if !u.UseCustomAvatar || len(u.Avatar) == 0 {
107106
return true
108107
}
109-
avatarID := fmt.Sprintf("%x", md5.Sum([]byte(fmt.Sprintf("%d-%x", u.ID, md5.Sum(data)))))
108+
avatarID := avatar.HashAvatar(u.ID, data)
110109
return u.Avatar != avatarID
111110
}
112111

modules/git/languagestats/language_stats_nogogit.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,17 +97,17 @@ func GetLanguageStats(repo *git.Repository, commitID string) (map[string]int64,
9797
}
9898

9999
isVendored := optional.None[bool]()
100-
isGenerated := optional.None[bool]()
101100
isDocumentation := optional.None[bool]()
102101
isDetectable := optional.None[bool]()
103102

104103
attrs, err := checker.CheckPath(f.Name())
104+
attrLinguistGenerated := optional.None[bool]()
105105
if err == nil {
106106
if isVendored = attrs.GetVendored(); isVendored.ValueOrDefault(false) {
107107
continue
108108
}
109109

110-
if isGenerated = attrs.GetGenerated(); isGenerated.ValueOrDefault(false) {
110+
if attrLinguistGenerated = attrs.GetGenerated(); attrLinguistGenerated.ValueOrDefault(false) {
111111
continue
112112
}
113113

@@ -169,7 +169,15 @@ func GetLanguageStats(repo *git.Repository, commitID string) (map[string]int64,
169169
return nil, err
170170
}
171171
}
172-
if !isGenerated.Has() && enry.IsGenerated(f.Name(), content) {
172+
173+
// if "generated" attribute is set, use it, otherwise use enry.IsGenerated to guess
174+
var isGenerated bool
175+
if attrLinguistGenerated.Has() {
176+
isGenerated = attrLinguistGenerated.Value()
177+
} else {
178+
isGenerated = enry.IsGenerated(f.Name(), content)
179+
}
180+
if isGenerated {
173181
continue
174182
}
175183

modules/web/routing/logger.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,10 @@ func logPrinter(logger log.Logger) func(trigger Event, record *requestRecord) {
103103
status = v.WrittenStatus()
104104
}
105105
logf := logInfo
106-
if strings.HasPrefix(req.RequestURI, "/assets/") {
106+
// lower the log level for some specific requests, in most cases these logs are not useful
107+
if strings.HasPrefix(req.RequestURI, "/assets/") /* static assets */ ||
108+
req.RequestURI == "/user/events" /* Server-Sent Events (SSE) handler */ ||
109+
req.RequestURI == "/api/actions/runner.v1.RunnerService/FetchTask" /* Actions Runner polling */ {
107110
logf = logTrace
108111
}
109112
message := completedMessage

routers/api/packages/container/container.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,7 @@ func serveBlob(ctx *context.Context, pfd *packages_model.PackageFileDescriptor)
721721
if u != nil {
722722
headers.Status = http.StatusTemporaryRedirect
723723
headers.Location = u.String()
724-
724+
headers.ContentLength = 0 // do not set Content-Length for redirect responses
725725
setResponseHeaders(ctx.Resp, headers)
726726
return
727727
}

services/auth/source/ldap/source_sync.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,9 @@ func (source *Source) Sync(ctx context.Context, updateExisting bool) error {
178178
}
179179
}
180180

181-
if usr.IsUploadAvatarChanged(su.Avatar) {
182-
if err == nil && source.AttributeAvatar != "" {
181+
if source.AttributeAvatar != "" {
182+
if len(su.Avatar) > 0 && usr.IsUploadAvatarChanged(su.Avatar) {
183+
log.Trace("SyncExternalUsers[%s]: Uploading new avatar for %s", source.AuthSource.Name, usr.Name)
183184
_ = user_service.UploadAvatar(ctx, usr, su.Avatar)
184185
}
185186
}

services/pull/merge.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"regexp"
1414
"strconv"
1515
"strings"
16+
"unicode"
1617

1718
"code.gitea.io/gitea/models/db"
1819
git_model "code.gitea.io/gitea/models/git"
@@ -161,6 +162,41 @@ func GetDefaultMergeMessage(ctx context.Context, baseGitRepo *git.Repository, pr
161162
return getMergeMessage(ctx, baseGitRepo, pr, mergeStyle, nil)
162163
}
163164

165+
func AddCommitMessageTailer(message, tailerKey, tailerValue string) string {
166+
tailerLine := tailerKey + ": " + tailerValue
167+
message = strings.ReplaceAll(message, "\r\n", "\n")
168+
message = strings.ReplaceAll(message, "\r", "\n")
169+
if strings.Contains(message, "\n"+tailerLine+"\n") || strings.HasSuffix(message, "\n"+tailerLine) {
170+
return message
171+
}
172+
173+
if !strings.HasSuffix(message, "\n") {
174+
message += "\n"
175+
}
176+
pos1 := strings.LastIndexByte(message[:len(message)-1], '\n')
177+
pos2 := -1
178+
if pos1 != -1 {
179+
pos2 = strings.IndexByte(message[pos1:], ':')
180+
if pos2 != -1 {
181+
pos2 += pos1
182+
}
183+
}
184+
var lastLineKey string
185+
if pos1 != -1 && pos2 != -1 {
186+
lastLineKey = message[pos1+1 : pos2]
187+
}
188+
189+
isLikelyTailerLine := lastLineKey != "" && unicode.IsUpper(rune(lastLineKey[0])) && strings.Contains(message, "-")
190+
for i := 0; isLikelyTailerLine && i < len(lastLineKey); i++ {
191+
r := rune(lastLineKey[i])
192+
isLikelyTailerLine = unicode.IsLetter(r) || unicode.IsDigit(r) || r == '-'
193+
}
194+
if !strings.HasSuffix(message, "\n\n") && !isLikelyTailerLine {
195+
message += "\n"
196+
}
197+
return message + tailerLine
198+
}
199+
164200
// ErrInvalidMergeStyle represents an error if merging with disabled merge strategy
165201
type ErrInvalidMergeStyle struct {
166202
ID int64

services/pull/merge_squash.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package pull
55

66
import (
77
"fmt"
8-
"strings"
98

109
repo_model "code.gitea.io/gitea/models/repo"
1110
user_model "code.gitea.io/gitea/models/user"
@@ -66,10 +65,8 @@ func doMergeStyleSquash(ctx *mergeContext, message string) error {
6665

6766
if setting.Repository.PullRequest.AddCoCommitterTrailers && ctx.committer.String() != sig.String() {
6867
// add trailer
69-
if !strings.Contains(message, "Co-authored-by: "+sig.String()) {
70-
message += "\nCo-authored-by: " + sig.String()
71-
}
72-
message += fmt.Sprintf("\nCo-committed-by: %s\n", sig.String())
68+
message = AddCommitMessageTailer(message, "Co-authored-by", sig.String())
69+
message = AddCommitMessageTailer(message, "Co-committed-by", sig.String()) // FIXME: this one should be removed, it is not really used or widely used
7370
}
7471
cmdCommit := git.NewCommand("commit").
7572
AddOptionFormat("--author='%s <%s>'", sig.Name, sig.Email).

services/pull/merge_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,28 @@ func Test_expandDefaultMergeMessage(t *testing.T) {
6565
})
6666
}
6767
}
68+
69+
func TestAddCommitMessageTailer(t *testing.T) {
70+
// add tailer for empty message
71+
assert.Equal(t, "\n\nTest-tailer: TestValue", AddCommitMessageTailer("", "Test-tailer", "TestValue"))
72+
73+
// add tailer for message without newlines
74+
assert.Equal(t, "title\n\nTest-tailer: TestValue", AddCommitMessageTailer("title", "Test-tailer", "TestValue"))
75+
assert.Equal(t, "title\n\nNot tailer: xxx\n\nTest-tailer: TestValue", AddCommitMessageTailer("title\n\nNot tailer: xxx", "Test-tailer", "TestValue"))
76+
assert.Equal(t, "title\n\nNotTailer: xxx\n\nTest-tailer: TestValue", AddCommitMessageTailer("title\n\nNotTailer: xxx", "Test-tailer", "TestValue"))
77+
assert.Equal(t, "title\n\nnot-tailer: xxx\n\nTest-tailer: TestValue", AddCommitMessageTailer("title\n\nnot-tailer: xxx", "Test-tailer", "TestValue"))
78+
79+
// add tailer for message with one EOL
80+
assert.Equal(t, "title\n\nTest-tailer: TestValue", AddCommitMessageTailer("title\n", "Test-tailer", "TestValue"))
81+
82+
// add tailer for message with two EOLs
83+
assert.Equal(t, "title\n\nTest-tailer: TestValue", AddCommitMessageTailer("title\n\n", "Test-tailer", "TestValue"))
84+
85+
// add tailer for message with existing tailer (won't duplicate)
86+
assert.Equal(t, "title\n\nTest-tailer: TestValue", AddCommitMessageTailer("title\n\nTest-tailer: TestValue", "Test-tailer", "TestValue"))
87+
assert.Equal(t, "title\n\nTest-tailer: TestValue\n", AddCommitMessageTailer("title\n\nTest-tailer: TestValue\n", "Test-tailer", "TestValue"))
88+
89+
// add tailer for message with existing tailer and different value (will append)
90+
assert.Equal(t, "title\n\nTest-tailer: v1\nTest-tailer: v2", AddCommitMessageTailer("title\n\nTest-tailer: v1", "Test-tailer", "v2"))
91+
assert.Equal(t, "title\n\nTest-tailer: v1\nTest-tailer: v2", AddCommitMessageTailer("title\n\nTest-tailer: v1\n", "Test-tailer", "v2"))
92+
}

services/repository/generate.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,8 @@ type expansion struct {
4242
var defaultTransformers = []transformer{
4343
{Name: "SNAKE", Transform: xstrings.ToSnakeCase},
4444
{Name: "KEBAB", Transform: xstrings.ToKebabCase},
45-
{Name: "CAMEL", Transform: func(str string) string {
46-
return xstrings.FirstRuneToLower(xstrings.ToCamelCase(str))
47-
}},
48-
{Name: "PASCAL", Transform: xstrings.ToCamelCase},
45+
{Name: "CAMEL", Transform: xstrings.ToCamelCase},
46+
{Name: "PASCAL", Transform: xstrings.ToPascalCase},
4947
{Name: "LOWER", Transform: strings.ToLower},
5048
{Name: "UPPER", Transform: strings.ToUpper},
5149
{Name: "TITLE", Transform: util.ToTitleCase},

0 commit comments

Comments
 (0)