mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Backport #34579 by wxiaoguang See the comments Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		| @@ -66,7 +66,7 @@ func getUserHeatmapData(ctx context.Context, user *user_model.User, team *organi | |||||||
| 		Select(groupBy+" AS timestamp, count(user_id) as contributions"). | 		Select(groupBy+" AS timestamp, count(user_id) as contributions"). | ||||||
| 		Table("action"). | 		Table("action"). | ||||||
| 		Where(cond). | 		Where(cond). | ||||||
| 		And("created_unix > ?", timeutil.TimeStampNow()-31536000). | 		And("created_unix > ?", timeutil.TimeStampNow()-(366+7)*86400). // (366+7) days to include the first week for the heatmap | ||||||
| 		GroupBy(groupByName). | 		GroupBy(groupByName). | ||||||
| 		OrderBy("timestamp"). | 		OrderBy("timestamp"). | ||||||
| 		Find(&hdata) | 		Find(&hdata) | ||||||
|   | |||||||
| @@ -97,17 +97,17 @@ func GetLanguageStats(repo *git.Repository, commitID string) (map[string]int64, | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		isVendored := optional.None[bool]() | 		isVendored := optional.None[bool]() | ||||||
| 		isGenerated := optional.None[bool]() |  | ||||||
| 		isDocumentation := optional.None[bool]() | 		isDocumentation := optional.None[bool]() | ||||||
| 		isDetectable := optional.None[bool]() | 		isDetectable := optional.None[bool]() | ||||||
|  |  | ||||||
| 		attrs, err := checker.CheckPath(f.Name()) | 		attrs, err := checker.CheckPath(f.Name()) | ||||||
|  | 		attrLinguistGenerated := optional.None[bool]() | ||||||
| 		if err == nil { | 		if err == nil { | ||||||
| 			if isVendored = attrs.GetVendored(); isVendored.ValueOrDefault(false) { | 			if isVendored = attrs.GetVendored(); isVendored.ValueOrDefault(false) { | ||||||
| 				continue | 				continue | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			if isGenerated = attrs.GetGenerated(); isGenerated.ValueOrDefault(false) { | 			if attrLinguistGenerated = attrs.GetGenerated(); attrLinguistGenerated.ValueOrDefault(false) { | ||||||
| 				continue | 				continue | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| @@ -169,7 +169,15 @@ func GetLanguageStats(repo *git.Repository, commitID string) (map[string]int64, | |||||||
| 				return nil, err | 				return nil, err | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		if !isGenerated.Has() && enry.IsGenerated(f.Name(), content) { |  | ||||||
|  | 		// if "generated" attribute is set, use it, otherwise use enry.IsGenerated to guess | ||||||
|  | 		var isGenerated bool | ||||||
|  | 		if attrLinguistGenerated.Has() { | ||||||
|  | 			isGenerated = attrLinguistGenerated.Value() | ||||||
|  | 		} else { | ||||||
|  | 			isGenerated = enry.IsGenerated(f.Name(), content) | ||||||
|  | 		} | ||||||
|  | 		if isGenerated { | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -103,7 +103,10 @@ func logPrinter(logger log.Logger) func(trigger Event, record *requestRecord) { | |||||||
| 			status = v.WrittenStatus() | 			status = v.WrittenStatus() | ||||||
| 		} | 		} | ||||||
| 		logf := logInfo | 		logf := logInfo | ||||||
| 		if strings.HasPrefix(req.RequestURI, "/assets/") { | 		// lower the log level for some specific requests, in most cases these logs are not useful | ||||||
|  | 		if strings.HasPrefix(req.RequestURI, "/assets/") /* static assets */ || | ||||||
|  | 			req.RequestURI == "/user/events" /* Server-Sent Events (SSE) handler */ || | ||||||
|  | 			req.RequestURI == "/api/actions/runner.v1.RunnerService/FetchTask" /* Actions Runner polling */ { | ||||||
| 			logf = logTrace | 			logf = logTrace | ||||||
| 		} | 		} | ||||||
| 		message := completedMessage | 		message := completedMessage | ||||||
|   | |||||||
| @@ -721,7 +721,7 @@ func serveBlob(ctx *context.Context, pfd *packages_model.PackageFileDescriptor) | |||||||
| 	if u != nil { | 	if u != nil { | ||||||
| 		headers.Status = http.StatusTemporaryRedirect | 		headers.Status = http.StatusTemporaryRedirect | ||||||
| 		headers.Location = u.String() | 		headers.Location = u.String() | ||||||
|  | 		headers.ContentLength = 0 // do not set Content-Length for redirect responses | ||||||
| 		setResponseHeaders(ctx.Resp, headers) | 		setResponseHeaders(ctx.Resp, headers) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -42,10 +42,8 @@ type expansion struct { | |||||||
| var defaultTransformers = []transformer{ | var defaultTransformers = []transformer{ | ||||||
| 	{Name: "SNAKE", Transform: xstrings.ToSnakeCase}, | 	{Name: "SNAKE", Transform: xstrings.ToSnakeCase}, | ||||||
| 	{Name: "KEBAB", Transform: xstrings.ToKebabCase}, | 	{Name: "KEBAB", Transform: xstrings.ToKebabCase}, | ||||||
| 	{Name: "CAMEL", Transform: func(str string) string { | 	{Name: "CAMEL", Transform: xstrings.ToCamelCase}, | ||||||
| 		return xstrings.FirstRuneToLower(xstrings.ToCamelCase(str)) | 	{Name: "PASCAL", Transform: xstrings.ToPascalCase}, | ||||||
| 	}}, |  | ||||||
| 	{Name: "PASCAL", Transform: xstrings.ToCamelCase}, |  | ||||||
| 	{Name: "LOWER", Transform: strings.ToLower}, | 	{Name: "LOWER", Transform: strings.ToLower}, | ||||||
| 	{Name: "UPPER", Transform: strings.ToUpper}, | 	{Name: "UPPER", Transform: strings.ToUpper}, | ||||||
| 	{Name: "TITLE", Transform: util.ToTitleCase}, | 	{Name: "TITLE", Transform: util.ToTitleCase}, | ||||||
|   | |||||||
| @@ -7,6 +7,7 @@ import ( | |||||||
| 	"testing" | 	"testing" | ||||||
|  |  | ||||||
| 	"github.com/stretchr/testify/assert" | 	"github.com/stretchr/testify/assert" | ||||||
|  | 	"github.com/stretchr/testify/require" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| var giteaTemplate = []byte(` | var giteaTemplate = []byte(` | ||||||
| @@ -65,3 +66,26 @@ func TestFileNameSanitize(t *testing.T) { | |||||||
| 	assert.Equal(t, "_", fileNameSanitize("\u0000")) | 	assert.Equal(t, "_", fileNameSanitize("\u0000")) | ||||||
| 	assert.Equal(t, "目标", fileNameSanitize("目标")) | 	assert.Equal(t, "目标", fileNameSanitize("目标")) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestTransformers(t *testing.T) { | ||||||
|  | 	cases := []struct { | ||||||
|  | 		name     string | ||||||
|  | 		expected string | ||||||
|  | 	}{ | ||||||
|  | 		{"SNAKE", "abc_def_xyz"}, | ||||||
|  | 		{"KEBAB", "abc-def-xyz"}, | ||||||
|  | 		{"CAMEL", "abcDefXyz"}, | ||||||
|  | 		{"PASCAL", "AbcDefXyz"}, | ||||||
|  | 		{"LOWER", "abc_def-xyz"}, | ||||||
|  | 		{"UPPER", "ABC_DEF-XYZ"}, | ||||||
|  | 		{"TITLE", "Abc_def-Xyz"}, | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	input := "Abc_Def-XYZ" | ||||||
|  | 	assert.Len(t, defaultTransformers, len(cases)) | ||||||
|  | 	for i, c := range cases { | ||||||
|  | 		tf := defaultTransformers[i] | ||||||
|  | 		require.Equal(t, c.name, tf.Name) | ||||||
|  | 		assert.Equal(t, c.expected, tf.Transform(input), "case %s", c.name) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|   | |||||||
| @@ -47,7 +47,7 @@ | |||||||
| 								<h3>{{ctx.Locale.Tr "repo.create_new_repo_command"}}</h3> | 								<h3>{{ctx.Locale.Tr "repo.create_new_repo_command"}}</h3> | ||||||
| 								<div class="markup"> | 								<div class="markup"> | ||||||
| 									<pre><code>touch README.md | 									<pre><code>touch README.md | ||||||
| git init | git init{{if ne .Repository.ObjectFormatName "sha1"}} --object-format={{.Repository.ObjectFormatName}}{{end}}{{/* for sha256 repo, it needs to set "object-format" explicitly*/}} | ||||||
| {{if ne .Repository.DefaultBranch "master"}}git checkout -b {{.Repository.DefaultBranch}}{{end}} | {{if ne .Repository.DefaultBranch "master"}}git checkout -b {{.Repository.DefaultBranch}}{{end}} | ||||||
| git add README.md | git add README.md | ||||||
| git commit -m "first commit" | git commit -m "first commit" | ||||||
|   | |||||||
| @@ -439,7 +439,8 @@ export default defineComponent({ | |||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
| <template> | <template> | ||||||
|   <div class="ui container action-view-container"> |   <!-- make the view container full width to make users easier to read logs --> | ||||||
|  |   <div class="ui fluid container"> | ||||||
|     <div class="action-view-header"> |     <div class="action-view-header"> | ||||||
|       <div class="action-info-summary"> |       <div class="action-info-summary"> | ||||||
|         <div class="action-info-summary-title"> |         <div class="action-info-summary-title"> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user