From 4ce07a00e564e6443e858c824d51a0c0ce5ffbd9 Mon Sep 17 00:00:00 2001 From: BurritoVoid <106282945+BurritoVoid@users.noreply.github.com> Date: Mon, 11 Jul 2022 23:51:14 -0400 Subject: [PATCH 01/15] Updated dead link to Madeleine.js source (#20322) --- docs/content/doc/advanced/customizing-gitea.en-us.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/doc/advanced/customizing-gitea.en-us.md b/docs/content/doc/advanced/customizing-gitea.en-us.md index 3381c66d844e..8f23fc33462c 100644 --- a/docs/content/doc/advanced/customizing-gitea.en-us.md +++ b/docs/content/doc/advanced/customizing-gitea.en-us.md @@ -202,7 +202,7 @@ You can display STL file directly in Gitea by adding: to the file `templates/custom/footer.tmpl` -You also need to download the content of the library [Madeleine.js](https://jinjunho.github.io/Madeleine.js/) and place it under `$GITEA_CUSTOM/public/` folder. +You also need to download the content of the library [Madeleine.js](https://github.com/beige90/Madeleine.js) and place it under `$GITEA_CUSTOM/public/` folder. You should end-up with a folder structure similar to: From e24c238ecc400dca713d41b3178c69475a66cb27 Mon Sep 17 00:00:00 2001 From: silverwind Date: Tue, 12 Jul 2022 11:04:15 +0200 Subject: [PATCH 02/15] Remove blue text on migrate page (#20273) * Remove blue text on migrate page * remove Safe Co-authored-by: Lunny Xiao --- options/locale/locale_en-US.ini | 2 +- templates/repo/migrate/options.tmpl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 36e2ae677bec..9b69d54593e8 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -932,7 +932,7 @@ form.name_pattern_not_allowed = The pattern '%s' is not allowed in a repository need_auth = Authorization migrate_options = Migration Options migrate_service = Migration Service -migrate_options_mirror_helper = This repository will be a mirror +migrate_options_mirror_helper = This repository will be a mirror migrate_options_lfs = Migrate LFS files migrate_options_lfs_endpoint.label = LFS Endpoint migrate_options_lfs_endpoint.description = Migration will attempt to use your Git remote to determine the LFS server. You can also specify a custom endpoint if the repository LFS data is stored somewhere else. diff --git a/templates/repo/migrate/options.tmpl b/templates/repo/migrate/options.tmpl index 62e92dc13525..5fdf6c7ab447 100644 --- a/templates/repo/migrate/options.tmpl +++ b/templates/repo/migrate/options.tmpl @@ -3,7 +3,7 @@
- +
{{end}} From 3aec32ad16402c4c93c3e199f270645069c7ad37 Mon Sep 17 00:00:00 2001 From: Gusted Date: Tue, 12 Jul 2022 12:51:06 +0000 Subject: [PATCH 03/15] Add write check for creating Commit status (#20332) - Add write code checks for creating new commit status - Regression #5314 Co-authored-by: zeripath --- routers/api/v1/api.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index c93606ae8830..44e0c290a088 100644 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -1017,7 +1017,7 @@ func Routes() *web.Route { }, mustAllowPulls, reqRepoReader(unit.TypeCode), context.ReferencesGitRepo()) m.Group("/statuses", func() { m.Combo("/{sha}").Get(repo.GetCommitStatuses). - Post(reqToken(), bind(api.CreateStatusOption{}), repo.NewCommitStatus) + Post(reqToken(), reqRepoWriter(unit.TypeCode), bind(api.CreateStatusOption{}), repo.NewCommitStatus) }, reqRepoReader(unit.TypeCode)) m.Group("/commits", func() { m.Get("", context.ReferencesGitRepo(), repo.GetAllCommits) From 966e7bdc9b875abb7192cd572beec40123a815da Mon Sep 17 00:00:00 2001 From: Chongyi Zheng Date: Tue, 12 Jul 2022 08:57:38 -0400 Subject: [PATCH 04/15] Correctly handle draft releases without a tag (#20314) Fixes #20313. `errors.Is(err, git.ErrNotExist{})` is not working --- services/migrations/gitea_uploader.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/services/migrations/gitea_uploader.go b/services/migrations/gitea_uploader.go index e71b2ca17af3..c7a6f9b02f2c 100644 --- a/services/migrations/gitea_uploader.go +++ b/services/migrations/gitea_uploader.go @@ -7,7 +7,6 @@ package migrations import ( "context" - "errors" "fmt" "io" "os" @@ -268,7 +267,7 @@ func (g *GiteaLocalUploader) CreateReleases(releases ...*base.Release) error { // calc NumCommits if possible if rel.TagName != "" { commit, err := g.gitRepo.GetTagCommit(rel.TagName) - if !errors.Is(err, git.ErrNotExist{}) { + if !git.IsErrNotExist(err) { if err != nil { return fmt.Errorf("GetTagCommit[%v]: %v", rel.TagName, err) } From d29d6d1991496cc688e9418db4960ca945fd9d6b Mon Sep 17 00:00:00 2001 From: luzpaz Date: Tue, 12 Jul 2022 17:32:37 -0400 Subject: [PATCH 05/15] Fix various typos (#20338) * Fix various typos Found via `codespell -q 3 -S ./options/locale,./options/license,./public/vendor -L actived,allways,attachements,ba,befores,commiter,pullrequest,pullrequests,readby,splitted,te,unknwon` Co-authored-by: zeripath --- Dockerfile.rootless | 2 +- Makefile | 2 +- README.md | 2 +- cmd/manager.go | 2 +- docs/content/doc/advanced/config-cheat-sheet.zh-cn.md | 2 +- docs/content/doc/packages/nuget.en-us.md | 2 +- integrations/dump_restore_test.go | 2 +- models/db/context.go | 2 +- models/issues/pull_list.go | 2 +- models/organization/team_repo.go | 2 +- modules/charset/charset.go | 6 +++--- modules/doctor/breaking.go | 4 ++-- modules/nosql/manager_leveldb.go | 2 +- modules/web/middleware/locale.go | 2 +- modules/web/routing/context.go | 2 +- options/gitignore/Bazel | 2 +- routers/api/packages/composer/api.go | 2 +- routers/api/packages/conan/conan.go | 4 ++-- routers/api/packages/rubygems/rubygems.go | 2 +- routers/web/repo/pull.go | 2 +- routers/web/repo/release.go | 8 ++++---- routers/web/web.go | 2 +- routers/web/webfinger.go | 2 +- services/auth/source/oauth2/providers.go | 2 +- templates/repo/issue/view_content/pull.tmpl | 2 +- web_src/js/features/repo-projects.js | 2 +- web_src/less/_dashboard.less | 2 +- 27 files changed, 34 insertions(+), 34 deletions(-) diff --git a/Dockerfile.rootless b/Dockerfile.rootless index e576570e5ecb..c597fb29c856 100644 --- a/Dockerfile.rootless +++ b/Dockerfile.rootless @@ -62,7 +62,7 @@ ENV GITEA_CUSTOM /var/lib/gitea/custom ENV GITEA_TEMP /tmp/gitea ENV TMPDIR /tmp/gitea -#TODO add to docs the ability to define the ini to load (usefull to test and revert a config) +#TODO add to docs the ability to define the ini to load (useful to test and revert a config) ENV GITEA_APP_INI /etc/gitea/app.ini ENV HOME "/var/lib/gitea/git" VOLUME ["/var/lib/gitea", "/etc/gitea"] diff --git a/Makefile b/Makefile index 866b8c892e34..41d39b4c3232 100644 --- a/Makefile +++ b/Makefile @@ -771,7 +771,7 @@ generate-manpage: @mkdir -p man/man1/ man/man5 @./gitea docs --man > man/man1/gitea.1 @gzip -9 man/man1/gitea.1 && echo man/man1/gitea.1.gz created - @#TODO A smal script witch format config-cheat-sheet.en-us.md nicely to suit as config man page + @#TODO A small script that formats config-cheat-sheet.en-us.md nicely for use as a config man page .PHONY: pr\#% pr\#%: clean-all diff --git a/README.md b/README.md index 172e16cf5632..6c5952894aca 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,7 @@ NOTES: Translations are done through Crowdin. If you want to translate to a new language ask one of the managers in the Crowdin project to add a new language there. -You can also just create an issue for adding a language or ask on discord on the #translation channel. If you need context or find some translation issues, you can leave a comment on the string or ask on Discord. For general translation questions there is a section in the docs. Currently a bit empty but we hope fo fill it as questions pop up. +You can also just create an issue for adding a language or ask on discord on the #translation channel. If you need context or find some translation issues, you can leave a comment on the string or ask on Discord. For general translation questions there is a section in the docs. Currently a bit empty but we hope to fill it as questions pop up. https://docs.gitea.io/en-us/translation-guidelines/ diff --git a/cmd/manager.go b/cmd/manager.go index 03fe23aa9e3f..8fbfd1093cbc 100644 --- a/cmd/manager.go +++ b/cmd/manager.go @@ -82,7 +82,7 @@ var ( }, cli.BoolFlag{ Name: "no-system", - Usage: "Do not show system proceses", + Usage: "Do not show system processes", }, cli.BoolFlag{ Name: "stacktraces", diff --git a/docs/content/doc/advanced/config-cheat-sheet.zh-cn.md b/docs/content/doc/advanced/config-cheat-sheet.zh-cn.md index ef1504bc94fc..33c693083d02 100644 --- a/docs/content/doc/advanced/config-cheat-sheet.zh-cn.md +++ b/docs/content/doc/advanced/config-cheat-sheet.zh-cn.md @@ -346,7 +346,7 @@ ALLOW_DATA_URI_IMAGES = true - `ALLOW_DATA_URI_IMAGES`: **false** 允许 data uri 图片 (``)。 多个净化规则可以被同时定义,只要section名称最后一位不重复即可。如: `[markup.sanitizer.TeX-2]`。 -为了针对一种渲染类型进行一个特殊的净化策略,必须使用形如 `[markup.sanitizer.asciidoc.rule-1]` 的方式来命名 seciton。 +为了针对一种渲染类型进行一个特殊的净化策略,必须使用形如 `[markup.sanitizer.asciidoc.rule-1]` 的方式来命名 section。 如果此规则没有匹配到任何渲染类型,它将会被应用到所有的渲染类型。 ## Time (`time`) diff --git a/docs/content/doc/packages/nuget.en-us.md b/docs/content/doc/packages/nuget.en-us.md index 0b92d85a3d4e..421faf9ee650 100644 --- a/docs/content/doc/packages/nuget.en-us.md +++ b/docs/content/doc/packages/nuget.en-us.md @@ -23,7 +23,7 @@ Publish [NuGet](https://www.nuget.org/) packages for your user or organization. ## Requirements To work with the NuGet package registry, you can use command-line interface tools as well as NuGet features in various IDEs like Visual Studio. -More informations about NuGet clients can be found in [the official documentation](https://docs.microsoft.com/en-us/nuget/install-nuget-client-tools). +More information about NuGet clients can be found in [the official documentation](https://docs.microsoft.com/en-us/nuget/install-nuget-client-tools). The following examples use the `dotnet nuget` tool. ## Configuring the package registry diff --git a/integrations/dump_restore_test.go b/integrations/dump_restore_test.go index 3723334ea155..ef869c4ddabc 100644 --- a/integrations/dump_restore_test.go +++ b/integrations/dump_restore_test.go @@ -201,7 +201,7 @@ func (c *compareDump) assertEquals(repoBefore, repoAfter *repo_model.Repository) "Assignees": {ignore: true}, // not implemented yet "Head": {nested: comparePullRequestBranch}, "Base": {nested: comparePullRequestBranch}, - "Labels": {ignore: true}, // because org labels are not handled propery + "Labels": {ignore: true}, // because org labels are not handled properly }).([]*base.PullRequest) assert.True(c.t, ok) assert.GreaterOrEqual(c.t, len(prs), 1) diff --git a/models/db/context.go b/models/db/context.go index 783033c0e03a..4fd35200cf71 100644 --- a/models/db/context.go +++ b/models/db/context.go @@ -100,7 +100,7 @@ func TxContext() (*Context, Committer, error) { } // WithTx represents executing database operations on a transaction -// you can optionally change the context to a parrent one +// you can optionally change the context to a parent one func WithTx(f func(ctx context.Context) error, stdCtx ...context.Context) error { parentCtx := DefaultContext if len(stdCtx) != 0 && stdCtx[0] != nil { diff --git a/models/issues/pull_list.go b/models/issues/pull_list.go index 9ca536909eb7..8eeffa2c0d16 100644 --- a/models/issues/pull_list.go +++ b/models/issues/pull_list.go @@ -62,7 +62,7 @@ func GetUnmergedPullRequestsByHeadInfo(repoID int64, branch string) ([]*PullRequ Find(&prs) } -// CanMaintainerWriteToBranch check whether user is a matainer and could write to the branch +// CanMaintainerWriteToBranch check whether user is a maintainer and could write to the branch func CanMaintainerWriteToBranch(p access_model.Permission, branch string, user *user_model.User) bool { if p.CanWrite(unit.TypeCode) { return true diff --git a/models/organization/team_repo.go b/models/organization/team_repo.go index 717d754c40b7..fb3f267f817a 100644 --- a/models/organization/team_repo.go +++ b/models/organization/team_repo.go @@ -55,7 +55,7 @@ func GetTeamRepositories(ctx context.Context, opts *SearchTeamRepoOptions) ([]*r Find(&repos) } -// AddTeamRepo addes a repo for an organization's team +// AddTeamRepo adds a repo for an organization's team func AddTeamRepo(ctx context.Context, orgID, teamID, repoID int64) error { _, err := db.GetEngine(ctx).Insert(&TeamRepo{ OrgID: orgID, diff --git a/modules/charset/charset.go b/modules/charset/charset.go index 89bbf1f8c93a..a1210d2f05dc 100644 --- a/modules/charset/charset.go +++ b/modules/charset/charset.go @@ -23,7 +23,7 @@ import ( // UTF8BOM is the utf-8 byte-order marker var UTF8BOM = []byte{'\xef', '\xbb', '\xbf'} -// ToUTF8WithFallbackReader detects the encoding of content and coverts to UTF-8 reader if possible +// ToUTF8WithFallbackReader detects the encoding of content and converts to UTF-8 reader if possible func ToUTF8WithFallbackReader(rd io.Reader) io.Reader { buf := make([]byte, 2048) n, err := util.ReadAtMost(rd, buf) @@ -76,7 +76,7 @@ func ToUTF8WithErr(content []byte) (string, error) { return string(result), err } -// ToUTF8WithFallback detects the encoding of content and coverts to UTF-8 if possible +// ToUTF8WithFallback detects the encoding of content and converts to UTF-8 if possible func ToUTF8WithFallback(content []byte) []byte { bs, _ := io.ReadAll(ToUTF8WithFallbackReader(bytes.NewReader(content))) return bs @@ -191,7 +191,7 @@ func DetectEncoding(content []byte) (string, error) { break } - // Otherwise check if this results is earlier in the DetectedCharsetOrder than our current top guesss + // Otherwise check if this results is earlier in the DetectedCharsetOrder than our current top guess resultPriority, resultHas := setting.Repository.DetectedCharsetScore[strings.ToLower(strings.TrimSpace(result.Charset))] if resultHas && (!has || resultPriority < priority) { topResult = result diff --git a/modules/doctor/breaking.go b/modules/doctor/breaking.go index 3e01d97d7c73..391c8e76c590 100644 --- a/modules/doctor/breaking.go +++ b/modules/doctor/breaking.go @@ -32,8 +32,8 @@ func iterateUserAccounts(ctx context.Context, each func(*user.User) error) error // Ref: https://github.com/go-gitea/gitea/pull/19085 & https://github.com/go-gitea/gitea/pull/17688 func checkUserEmail(ctx context.Context, logger log.Logger, _ bool) error { // We could use quirky SQL to get all users that start without a [a-zA-Z0-9], but that would mean - // DB provider-specific SQL and only works _now_. So instead we iterate trough all user accounts and - // use the user.ValidateEmail function to be future-proof. + // DB provider-specific SQL and only works _now_. So instead we iterate through all user accounts + // and use the user.ValidateEmail function to be future-proof. var invalidUserCount int64 if err := iterateUserAccounts(ctx, func(u *user.User) error { // Only check for users, skip diff --git a/modules/nosql/manager_leveldb.go b/modules/nosql/manager_leveldb.go index d356a79bf82c..7539952cf1c7 100644 --- a/modules/nosql/manager_leveldb.go +++ b/modules/nosql/manager_leveldb.go @@ -103,7 +103,7 @@ func (m *Manager) getLevelDB(connection string) (*leveldb.DB, error) { db, ok = m.LevelDBConnections[dataDir] if ok { db.count++ - log.Warn("Duplicate connnection to level db: %s with different connection strings. Initial connection: %s. This connection: %s", dataDir, db.name[0], connection) + log.Warn("Duplicate connection to level db: %s with different connection strings. Initial connection: %s. This connection: %s", dataDir, db.name[0], connection) db.name = append(db.name, connection) m.LevelDBConnections[connection] = db return db.db, nil diff --git a/modules/web/middleware/locale.go b/modules/web/middleware/locale.go index de8e49796541..f4018527c029 100644 --- a/modules/web/middleware/locale.go +++ b/modules/web/middleware/locale.go @@ -60,7 +60,7 @@ func SetLocaleCookie(resp http.ResponseWriter, lang string, expiry int) { } // DeleteLocaleCookie convenience function to delete the locale cookie consistently -// Setting the lang cookie will trigger the middleware to reset the language ot previous state. +// Setting the lang cookie will trigger the middleware to reset the language to previous state. func DeleteLocaleCookie(resp http.ResponseWriter) { SetCookie(resp, "lang", "", -1, diff --git a/modules/web/routing/context.go b/modules/web/routing/context.go index d3c7759e64c9..7e263db5a26e 100644 --- a/modules/web/routing/context.go +++ b/modules/web/routing/context.go @@ -25,7 +25,7 @@ func UpdateFuncInfo(ctx context.Context, funcInfo *FuncInfo) { record.lock.Unlock() } -// MarkLongPolling marks the reuqest is a long-polling request, and the logger may output different message for it +// MarkLongPolling marks the request is a long-polling request, and the logger may output different message for it func MarkLongPolling(resp http.ResponseWriter, req *http.Request) { record, ok := req.Context().Value(contextKey).(*requestRecord) if !ok { diff --git a/options/gitignore/Bazel b/options/gitignore/Bazel index bc3afc20ba69..4e1d5a2ba0a4 100644 --- a/options/gitignore/Bazel +++ b/options/gitignore/Bazel @@ -6,7 +6,7 @@ /bazel-* # Directories for the Bazel IntelliJ plugin containing the generated -# IntelliJ project files and plugin configuration. Seperate directories are +# IntelliJ project files and plugin configuration. Separate directories are # for the IntelliJ, Android Studio and CLion versions of the plugin. /.ijwb/ /.aswb/ diff --git a/routers/api/packages/composer/api.go b/routers/api/packages/composer/api.go index d8f67d130cd0..5e1cc293da0f 100644 --- a/routers/api/packages/composer/api.go +++ b/routers/api/packages/composer/api.go @@ -76,7 +76,7 @@ type PackageVersionMetadata struct { Dist Dist `json:"dist"` } -// Dist contains package download informations +// Dist contains package download information type Dist struct { Type string `json:"type"` URL string `json:"url"` diff --git a/routers/api/packages/conan/conan.go b/routers/api/packages/conan/conan.go index 0a27f18fd1ee..04b0bb6cdd9b 100644 --- a/routers/api/packages/conan/conan.go +++ b/routers/api/packages/conan/conan.go @@ -429,14 +429,14 @@ func uploadFile(ctx *context.Context, fileFilter stringSet, fileKey string) { ctx.Status(http.StatusCreated) } -// DownloadRecipeFile serves the conent of the requested recipe file +// DownloadRecipeFile serves the content of the requested recipe file func DownloadRecipeFile(ctx *context.Context) { rref := ctx.Data[recipeReferenceKey].(*conan_module.RecipeReference) downloadFile(ctx, recipeFileList, rref.AsKey()) } -// DownloadPackageFile serves the conent of the requested package file +// DownloadPackageFile serves the content of the requested package file func DownloadPackageFile(ctx *context.Context) { pref := ctx.Data[packageReferenceKey].(*conan_module.PackageReference) diff --git a/routers/api/packages/rubygems/rubygems.go b/routers/api/packages/rubygems/rubygems.go index 6fdd03e8ea70..b3815a914ea7 100644 --- a/routers/api/packages/rubygems/rubygems.go +++ b/routers/api/packages/rubygems/rubygems.go @@ -37,7 +37,7 @@ func EnumeratePackages(ctx *context.Context) { enumeratePackages(ctx, "specs.4.8", packages) } -// EnumeratePackagesLatest serves the list of the lastest version of every package +// EnumeratePackagesLatest serves the list of the latest version of every package func EnumeratePackagesLatest(ctx *context.Context) { pvs, _, err := packages_model.SearchLatestVersions(ctx, &packages_model.PackageSearchOptions{ OwnerID: ctx.Package.Owner.ID, diff --git a/routers/web/repo/pull.go b/routers/web/repo/pull.go index 6e8f575ad54a..2a961c3cbc55 100644 --- a/routers/web/repo/pull.go +++ b/routers/web/repo/pull.go @@ -1440,7 +1440,7 @@ func UpdatePullRequestTarget(ctx *context.Context) { err := err.(issues_model.ErrPullRequestAlreadyExists) RepoRelPath := ctx.Repo.Owner.Name + "/" + ctx.Repo.Repository.Name - errorMessage := ctx.Tr("repo.pulls.has_pull_request", html.EscapeString(ctx.Repo.RepoLink+"/pulls/"+strconv.FormatInt(err.IssueID, 10)), html.EscapeString(RepoRelPath), err.IssueID) // FIXME: Creates url insidde locale string + errorMessage := ctx.Tr("repo.pulls.has_pull_request", html.EscapeString(ctx.Repo.RepoLink+"/pulls/"+strconv.FormatInt(err.IssueID, 10)), html.EscapeString(RepoRelPath), err.IssueID) // FIXME: Creates url inside locale string ctx.Flash.Error(errorMessage) ctx.JSON(http.StatusConflict, map[string]interface{}{ diff --git a/routers/web/repo/release.go b/routers/web/repo/release.go index df953fd0b95f..ab87c3e2385a 100644 --- a/routers/web/repo/release.go +++ b/routers/web/repo/release.go @@ -98,8 +98,8 @@ func releasesOrTags(ctx *context.Context, isTagList bool) { listOptions.PageSize = setting.API.MaxResponseItems } - // TODO(20073) tags are used for compare feature witch needs all tags - // filtering is doen at the client side atm + // TODO(20073) tags are used for compare feature which needs all tags + // filtering is done on the client-side atm tagListStart, tagListEnd := 0, 0 if isTagList { tagListStart, tagListEnd = listOptions.GetStartEnd() @@ -514,12 +514,12 @@ func EditReleasePost(ctx *context.Context) { ctx.Redirect(ctx.Repo.RepoLink + "/releases") } -// DeleteRelease delete a release +// DeleteRelease deletes a release func DeleteRelease(ctx *context.Context) { deleteReleaseOrTag(ctx, false) } -// DeleteTag delete a tag +// DeleteTag deletes a tag func DeleteTag(ctx *context.Context) { deleteReleaseOrTag(ctx, true) } diff --git a/routers/web/web.go b/routers/web/web.go index 1b6dd03bc8a8..ae273d99e4ff 100644 --- a/routers/web/web.go +++ b/routers/web/web.go @@ -85,7 +85,7 @@ func CorsHandler() func(next http.Handler) http.Handler { // for users that have already signed in. func buildAuthGroup() *auth_service.Group { group := auth_service.NewGroup( - &auth_service.OAuth2{}, // FIXME: this should be removed and only applied in download and oauth realted routers + &auth_service.OAuth2{}, // FIXME: this should be removed and only applied in download and oauth related routers &auth_service.Basic{}, // FIXME: this should be removed and only applied in download and git/lfs routers &auth_service.Session{}, ) diff --git a/routers/web/webfinger.go b/routers/web/webfinger.go index c4808fbfd241..972182becee7 100644 --- a/routers/web/webfinger.go +++ b/routers/web/webfinger.go @@ -33,7 +33,7 @@ type webfingerLink struct { Properties map[string]interface{} `json:"properties,omitempty"` } -// WebfingerQuery returns informations about a resource +// WebfingerQuery returns information about a resource // https://datatracker.ietf.org/doc/html/rfc7565 func WebfingerQuery(ctx *context.Context) { appURL, _ := url.Parse(setting.AppURL) diff --git a/services/auth/source/oauth2/providers.go b/services/auth/source/oauth2/providers.go index 45851c879990..aa3ee3842ddb 100644 --- a/services/auth/source/oauth2/providers.go +++ b/services/auth/source/oauth2/providers.go @@ -35,7 +35,7 @@ type GothProvider interface { GothProviderCreator } -// ImagedProvider provide an overrided image setting for the provider +// ImagedProvider provide an overridden image setting for the provider type ImagedProvider struct { GothProvider image string diff --git a/templates/repo/issue/view_content/pull.tmpl b/templates/repo/issue/view_content/pull.tmpl index 7ed73e1176f5..179f857ba6de 100644 --- a/templates/repo/issue/view_content/pull.tmpl +++ b/templates/repo/issue/view_content/pull.tmpl @@ -254,7 +254,7 @@ {{$notAllOverridableChecksOk := or .IsBlockedByApprovals .IsBlockedByRejection .IsBlockedByOfficialReviewRequests .IsBlockedByOutdatedBranch .IsBlockedByChangedProtectedFiles (and .EnableStatusCheck (not .RequiredStatusCheckState.IsSuccess))}} - {{/* admin can merge without checks, writer can merge when checkes succeed */}} + {{/* admin can merge without checks, writer can merge when checks succeed */}} {{$canMergeNow := and (or $.IsRepoAdmin (not $notAllOverridableChecksOk)) (or (not .AllowMerge) (not .RequireSigned) .WillSign)}} {{/* admin and writer both can make an auto merge schedule */}} diff --git a/web_src/js/features/repo-projects.js b/web_src/js/features/repo-projects.js index a948eba80727..9777e6c8ecc3 100644 --- a/web_src/js/features/repo-projects.js +++ b/web_src/js/features/repo-projects.js @@ -192,7 +192,7 @@ function setLabelColor(label, color) { } /** - * Inspired by W3C recommandation https://www.w3.org/TR/WCAG20/#relativeluminancedef + * Inspired by W3C recommendation https://www.w3.org/TR/WCAG20/#relativeluminancedef */ function getRelativeColor(color) { color /= 255; diff --git a/web_src/less/_dashboard.less b/web_src/less/_dashboard.less index 54cb74b6ee10..3c83009c2574 100644 --- a/web_src/less/_dashboard.less +++ b/web_src/less/_dashboard.less @@ -68,7 +68,7 @@ .dashboard-repos, .dashboard-orgs { - margin: 0 1px; /* Accomodate for Semantic's 1px hacks on .attached elements */ + margin: 0 1px; /* Accommodate for Semantic's 1px hacks on .attached elements */ } .dashboard-navbar { From d94f517643480369665eb37db31c9ddd700e07b3 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Wed, 13 Jul 2022 00:27:35 +0200 Subject: [PATCH 06/15] Changelog for 1.16.9 (update) (#20341) (#20343) * Changelog for 1.16.9 (update) --- CHANGELOG.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 406433e95433..454853fe2918 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,15 @@ This changelog goes through all the changes that have been made in each release without substantial changes to our git log; to see the highlights of what has been added to each release, please refer to the [blog](https://blog.gitea.io). -## [1.16.9](https://github.com/go-gitea/gitea/releases/tag/v1.16.9) - 2022-06-21 +## [1.16.9](https://github.com/go-gitea/gitea/releases/tag/v1.16.9) - 2022-07-12 +* SECURITY + * Add write check for creating Commit status (#20332) (#20334) + * Check for permission when fetching user controlled issues (#20133) (#20196) * BUGFIXES + * Hide notify mail setting ui if not enabled (#20138) (#20337) + * Add write check for creating Commit status (#20332) (#20334) + * Only show Followers that current user can access (#20220) (#20253) * Release page show all tags in compare dropdown (#20070) (#20071) * Fix permission check for delete tag (#19985) (#20001) * Only log non ErrNotExist errors in git.GetNote (#19884) (#19905) From f67a1030b308a24cca13ff788f7b7119f0404580 Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Wed, 13 Jul 2022 09:07:16 +0800 Subject: [PATCH 07/15] Add tests for the host checking logic, clarify the behaviors (#20328) Before, the combination of AllowedDomains/BlockedDomains/AllowLocalNetworks is confusing. This PR adds tests for the logic, clarify the behaviors. --- custom/conf/app.example.ini | 1 + .../doc/advanced/config-cheat-sheet.en-us.md | 2 +- modules/hostmatcher/hostmatcher.go | 8 ++-- services/migrations/migrate.go | 11 +++-- services/migrations/migrate_test.go | 40 +++++++++++++++++++ 5 files changed, 54 insertions(+), 8 deletions(-) diff --git a/custom/conf/app.example.ini b/custom/conf/app.example.ini index fb43ea95a1d4..08708948940f 100644 --- a/custom/conf/app.example.ini +++ b/custom/conf/app.example.ini @@ -2232,6 +2232,7 @@ ROUTER = console ;BLOCKED_DOMAINS = ;; ;; Allow private addresses defined by RFC 1918, RFC 1122, RFC 4632 and RFC 4291 (false by default) +;; If a domain is allowed by ALLOWED_DOMAINS, this option will be ignored. ;ALLOW_LOCALNETWORKS = false ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/docs/content/doc/advanced/config-cheat-sheet.en-us.md b/docs/content/doc/advanced/config-cheat-sheet.en-us.md index 84e3c6ae33df..a0e6fb8f13b1 100644 --- a/docs/content/doc/advanced/config-cheat-sheet.en-us.md +++ b/docs/content/doc/advanced/config-cheat-sheet.en-us.md @@ -1083,7 +1083,7 @@ Task queue configuration has been moved to `queue.task`. However, the below conf - `RETRY_BACKOFF`: **3**: Backoff time per http/https request retry (seconds) - `ALLOWED_DOMAINS`: **\**: Domains allowlist for migrating repositories, default is blank. It means everything will be allowed. Multiple domains could be separated by commas. Wildcard is supported: `github.com, *.github.com`. - `BLOCKED_DOMAINS`: **\**: Domains blocklist for migrating repositories, default is blank. Multiple domains could be separated by commas. When `ALLOWED_DOMAINS` is not blank, this option has a higher priority to deny domains. Wildcard is supported. -- `ALLOW_LOCALNETWORKS`: **false**: Allow private addresses defined by RFC 1918, RFC 1122, RFC 4632 and RFC 4291 +- `ALLOW_LOCALNETWORKS`: **false**: Allow private addresses defined by RFC 1918, RFC 1122, RFC 4632 and RFC 4291. If a domain is allowed by `ALLOWED_DOMAINS`, this option will be ignored. - `SKIP_TLS_VERIFY`: **false**: Allow skip tls verify ## Federation (`federation`) diff --git a/modules/hostmatcher/hostmatcher.go b/modules/hostmatcher/hostmatcher.go index 00bbc6cb0a83..81c4202fcd98 100644 --- a/modules/hostmatcher/hostmatcher.go +++ b/modules/hostmatcher/hostmatcher.go @@ -125,14 +125,14 @@ func (hl *HostMatchList) checkIP(ip net.IP) bool { // MatchHostName checks if the host matches an allow/deny(block) list func (hl *HostMatchList) MatchHostName(host string) bool { + if hl == nil { + return false + } + hostname, _, err := net.SplitHostPort(host) if err != nil { hostname = host } - - if hl == nil { - return false - } if hl.checkPattern(hostname) { return true } diff --git a/services/migrations/migrate.go b/services/migrations/migrate.go index ce76733bd51a..f2542173a0ee 100644 --- a/services/migrations/migrate.go +++ b/services/migrations/migrate.go @@ -84,7 +84,10 @@ func IsMigrateURLAllowed(remoteURL string, doer *user_model.User) error { // some users only use proxy, there is no DNS resolver. it's safe to ignore the LookupIP error addrList, _ := net.LookupIP(hostName) + return checkByAllowBlockList(hostName, addrList) +} +func checkByAllowBlockList(hostName string, addrList []net.IP) error { var ipAllowed bool var ipBlocked bool for _, addr := range addrList { @@ -93,12 +96,12 @@ func IsMigrateURLAllowed(remoteURL string, doer *user_model.User) error { } var blockedError error if blockList.MatchHostName(hostName) || ipBlocked { - blockedError = &models.ErrInvalidCloneAddr{Host: u.Host, IsPermissionDenied: true} + blockedError = &models.ErrInvalidCloneAddr{Host: hostName, IsPermissionDenied: true} } - // if we have an allow-list, check the allow-list first + // if we have an allow-list, check the allow-list before return to get the more accurate error if !allowList.IsEmpty() { if !allowList.MatchHostName(hostName) && !ipAllowed { - return &models.ErrInvalidCloneAddr{Host: u.Host, IsPermissionDenied: true} + return &models.ErrInvalidCloneAddr{Host: hostName, IsPermissionDenied: true} } } // otherwise, we always follow the blocked list @@ -474,5 +477,7 @@ func Init() error { allowList.AppendBuiltin(hostmatcher.MatchBuiltinPrivate) allowList.AppendBuiltin(hostmatcher.MatchBuiltinLoopback) } + // TODO: at the moment, if ALLOW_LOCALNETWORKS=false, ALLOWED_DOMAINS=domain.com, and domain.com has IP 127.0.0.1, then it's still allowed. + // if we want to block such case, the private&loopback should be added to the blockList when ALLOW_LOCALNETWORKS=false return nil } diff --git a/services/migrations/migrate_test.go b/services/migrations/migrate_test.go index d09c184d91e0..53cfe6d3ebe8 100644 --- a/services/migrations/migrate_test.go +++ b/services/migrations/migrate_test.go @@ -5,6 +5,7 @@ package migrations import ( + "net" "path/filepath" "testing" @@ -74,3 +75,42 @@ func TestMigrateWhiteBlocklist(t *testing.T) { setting.ImportLocalPaths = old } + +func TestAllowBlockList(t *testing.T) { + init := func(allow, block string, local bool) { + setting.Migrations.AllowedDomains = allow + setting.Migrations.BlockedDomains = block + setting.Migrations.AllowLocalNetworks = local + assert.NoError(t, Init()) + } + + // default, allow all external, block none, no local networks + init("", "", false) + assert.NoError(t, checkByAllowBlockList("domain.com", []net.IP{net.ParseIP("1.2.3.4")})) + assert.Error(t, checkByAllowBlockList("domain.com", []net.IP{net.ParseIP("127.0.0.1")})) + + // allow all including local networks (it could lead to SSRF in production) + init("", "", true) + assert.NoError(t, checkByAllowBlockList("domain.com", []net.IP{net.ParseIP("1.2.3.4")})) + assert.NoError(t, checkByAllowBlockList("domain.com", []net.IP{net.ParseIP("127.0.0.1")})) + + // allow wildcard, block some subdomains. if the domain name is allowed, then the local network check is skipped + init("*.domain.com", "blocked.domain.com", false) + assert.NoError(t, checkByAllowBlockList("sub.domain.com", []net.IP{net.ParseIP("1.2.3.4")})) + assert.NoError(t, checkByAllowBlockList("sub.domain.com", []net.IP{net.ParseIP("127.0.0.1")})) + assert.Error(t, checkByAllowBlockList("blocked.domain.com", []net.IP{net.ParseIP("1.2.3.4")})) + assert.Error(t, checkByAllowBlockList("sub.other.com", []net.IP{net.ParseIP("1.2.3.4")})) + + // allow wildcard (it could lead to SSRF in production) + init("*", "", false) + assert.NoError(t, checkByAllowBlockList("domain.com", []net.IP{net.ParseIP("1.2.3.4")})) + assert.NoError(t, checkByAllowBlockList("domain.com", []net.IP{net.ParseIP("127.0.0.1")})) + + // local network can still be blocked + init("*", "127.0.0.*", false) + assert.NoError(t, checkByAllowBlockList("domain.com", []net.IP{net.ParseIP("1.2.3.4")})) + assert.Error(t, checkByAllowBlockList("domain.com", []net.IP{net.ParseIP("127.0.0.1")})) + + // reset + init("", "", false) +} From b7c6ec91bac5ab0a5382f99a72753574dbc41745 Mon Sep 17 00:00:00 2001 From: Gusted Date: Wed, 13 Jul 2022 05:33:31 +0000 Subject: [PATCH 08/15] Use default values when provided values are empty (#20318) * Use default values when provided values are empty - When provided values are empty like `:3000` would imply that host is empty, use the default value. - Resolves #20316 * Update database.go Co-authored-by: Lunny Xiao Co-authored-by: wxiaoguang --- modules/setting/database.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/modules/setting/database.go b/modules/setting/database.go index 87d56fbc930c..8fdd5f2bcb2f 100644 --- a/modules/setting/database.go +++ b/modules/setting/database.go @@ -156,6 +156,12 @@ func parsePostgreSQLHostPort(info string) (string, string) { } else if len(info) > 0 { host = info } + if host == "" { + host = "127.0.0.1" + } + if port == "" { + port = "5432" + } return host, port } @@ -173,6 +179,7 @@ func getPostgreSQLConnectionString(dbHost, dbUser, dbPasswd, dbName, dbParam, db // ParseMSSQLHostPort splits the host into host and port func ParseMSSQLHostPort(info string) (string, string) { + // the default port "0" might be related to MSSQL's dynamic port, maybe it should be double-confirmed in the future host, port := "127.0.0.1", "0" if strings.Contains(info, ":") { host = strings.Split(info, ":")[0] @@ -183,5 +190,11 @@ func ParseMSSQLHostPort(info string) (string, string) { } else if len(info) > 0 { host = info } + if host == "" { + host = "127.0.0.1" + } + if port == "" { + port = "0" + } return host, port } From 8420c1bf4c46a59973d30af5114216918d0f60cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ing=2E=20Jaroslav=20=C5=A0afka?= Date: Wed, 13 Jul 2022 10:22:51 +0200 Subject: [PATCH 09/15] Fix checks in PR for empty commits #19603 (#20290) * Fixes issue #19603 (Not able to merge commit in PR when branches content is same, but different commit id) * fill HeadCommitID in PullRequest * compare real commits ID as check for merging * based on @zeripath patch in #19738 --- integrations/pull_status_test.go | 30 +++++++++++++++++-- models/issues/pull.go | 6 ++++ options/locale/locale_en-US.ini | 3 +- services/pull/check.go | 2 +- services/pull/patch.go | 8 +++++ templates/repo/issue/view_content/pull.tmpl | 16 +++++++--- .../js/components/PullRequestMergeForm.vue | 2 +- 7 files changed, 58 insertions(+), 9 deletions(-) diff --git a/integrations/pull_status_test.go b/integrations/pull_status_test.go index a5247f56ec5f..33a27cd81275 100644 --- a/integrations/pull_status_test.go +++ b/integrations/pull_status_test.go @@ -105,7 +105,11 @@ func doAPICreateCommitStatus(ctx APITestContext, commitID string, status api.Com } } -func TestPullCreate_EmptyChangesWithCommits(t *testing.T) { +func TestPullCreate_EmptyChangesWithDifferentCommits(t *testing.T) { + // Merge must continue if commits SHA are different, even if content is same + // Reason: gitflow and merging master back into develop, where is high possiblity, there are no changes + // but just commit saying "Merge branch". And this meta commit can be also tagged, + // so we need to have this meta commit also in develop branch. onGiteaRun(t, func(t *testing.T, u *url.URL) { session := loginUser(t, "user1") testRepoFork(t, session, "user2", "repo1", "user1", "repo1") @@ -126,6 +130,28 @@ func TestPullCreate_EmptyChangesWithCommits(t *testing.T) { doc := NewHTMLParser(t, resp.Body) text := strings.TrimSpace(doc.doc.Find(".merge-section").Text()) - assert.Contains(t, text, "This branch is equal with the target branch.") + assert.Contains(t, text, "This pull request can be merged automatically.") + }) +} + +func TestPullCreate_EmptyChangesWithSameCommits(t *testing.T) { + onGiteaRun(t, func(t *testing.T, u *url.URL) { + session := loginUser(t, "user1") + testRepoFork(t, session, "user2", "repo1", "user1", "repo1") + testCreateBranch(t, session, "user1", "repo1", "branch/master", "status1", http.StatusSeeOther) + url := path.Join("user1", "repo1", "compare", "master...status1") + req := NewRequestWithValues(t, "POST", url, + map[string]string{ + "_csrf": GetCSRF(t, session, url), + "title": "pull request from status1", + }, + ) + session.MakeRequest(t, req, http.StatusSeeOther) + req = NewRequest(t, "GET", "/user1/repo1/pulls/1") + resp := session.MakeRequest(t, req, http.StatusOK) + doc := NewHTMLParser(t, resp.Body) + + text := strings.TrimSpace(doc.doc.Find(".merge-section").Text()) + assert.Contains(t, text, "This branch is already included in the target branch. There is nothing to merge.") }) } diff --git a/models/issues/pull.go b/models/issues/pull.go index 52b959688906..f96b03445e91 100644 --- a/models/issues/pull.go +++ b/models/issues/pull.go @@ -122,6 +122,7 @@ const ( PullRequestStatusManuallyMerged PullRequestStatusError PullRequestStatusEmpty + PullRequestStatusAncestor ) // PullRequestFlow the flow of pull request @@ -423,6 +424,11 @@ func (pr *PullRequest) IsEmpty() bool { return pr.Status == PullRequestStatusEmpty } +// IsAncestor returns true if the Head Commit of this PR is an ancestor of the Base Commit +func (pr *PullRequest) IsAncestor() bool { + return pr.Status == PullRequestStatusAncestor +} + // SetMerged sets a pull request to merged and closes the corresponding issue func (pr *PullRequest) SetMerged(ctx context.Context) (bool, error) { if pr.HasMerged { diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 9b69d54593e8..9e8a0303393b 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -1532,7 +1532,8 @@ pulls.remove_prefix = Remove %s prefix pulls.data_broken = This pull request is broken due to missing fork information. pulls.files_conflicted = This pull request has changes conflicting with the target branch. pulls.is_checking = "Merge conflict checking is in progress. Try again in few moments." -pulls.is_empty = "This branch is equal with the target branch." +pulls.is_ancestor = "This branch is already included in the target branch. There is nothing to merge." +pulls.is_empty = "The changes on this branch are already on the target branch. This will be an empty commit." pulls.required_status_check_failed = Some required checks were not successful. pulls.required_status_check_missing = Some required checks are missing. pulls.required_status_check_administrator = As an administrator, you may still merge this pull request. diff --git a/services/pull/check.go b/services/pull/check.go index 6621a281fa54..288f4dc0b73b 100644 --- a/services/pull/check.go +++ b/services/pull/check.go @@ -89,7 +89,7 @@ func CheckPullMergable(stdCtx context.Context, doer *user_model.User, perm *acce return ErrIsWorkInProgress } - if !pr.CanAutoMerge() { + if !pr.CanAutoMerge() && !pr.IsEmpty() { return ErrNotMergableState } diff --git a/services/pull/patch.go b/services/pull/patch.go index c7a69501c32f..bb09acc89f63 100644 --- a/services/pull/patch.go +++ b/services/pull/patch.go @@ -87,6 +87,14 @@ func TestPatch(pr *issues_model.PullRequest) error { } } pr.MergeBase = strings.TrimSpace(pr.MergeBase) + if pr.HeadCommitID, err = gitRepo.GetRefCommitID(git.BranchPrefix + "tracking"); err != nil { + return fmt.Errorf("GetBranchCommitID: can't find commit ID for head: %w", err) + } + + if pr.HeadCommitID == pr.MergeBase { + pr.Status = issues_model.PullRequestStatusAncestor + return nil + } // 2. Check for conflicts if conflicts, err := checkConflicts(ctx, pr, gitRepo, tmpBasePath); err != nil || conflicts || pr.Status == issues_model.PullRequestStatusEmpty { diff --git a/templates/repo/issue/view_content/pull.tmpl b/templates/repo/issue/view_content/pull.tmpl index 179f857ba6de..60fe667a5489 100644 --- a/templates/repo/issue/view_content/pull.tmpl +++ b/templates/repo/issue/view_content/pull.tmpl @@ -195,12 +195,12 @@ {{svg "octicon-sync"}} {{$.locale.Tr "repo.pulls.is_checking"}} - {{else if .Issue.PullRequest.IsEmpty}} + {{else if .Issue.PullRequest.IsAncestor}}
{{svg "octicon-alert" 16}} - {{$.locale.Tr "repo.pulls.is_empty"}} + {{$.locale.Tr "repo.pulls.is_ancestor"}}
- {{else if .Issue.PullRequest.CanAutoMerge}} + {{else if or .Issue.PullRequest.CanAutoMerge .Issue.PullRequest.IsEmpty}} {{if .IsBlockedByApprovals}}
{{svg "octicon-x"}} @@ -282,7 +282,6 @@
{{end}} {{end}} - {{if and (gt .Issue.PullRequest.CommitsBehind 0) (not .Issue.IsClosed) (not .Issue.PullRequest.IsChecking) (not .IsPullFilesConflicted) (not .IsPullRequestBroken) (not $canAutoMerge)}}
@@ -321,6 +320,14 @@
{{end}} + {{if .Issue.PullRequest.IsEmpty}} +
+ +
+ {{svg "octicon-alert" 16}} + {{$.locale.Tr "repo.pulls.is_empty"}} +
+ {{end}} {{if .AllowMerge}} {{/* user is allowed to merge */}} {{$prUnit := .Repository.MustGetUnit $.UnitTypePullRequests}} @@ -348,6 +355,7 @@ 'canMergeNow': {{$canMergeNow}}, 'allOverridableChecksOk': {{not $notAllOverridableChecksOk}}, + 'emptyCommit': {{.Issue.PullRequest.IsEmpty}}, 'pullHeadCommitID': {{.PullHeadCommitID}}, 'isPullBranchDeletable': {{.IsPullBranchDeletable}}, 'defaultDeleteBranchAfterMerge': {{$prUnit.PullRequestsConfig.DefaultDeleteBranchAfterMerge}}, diff --git a/web_src/js/components/PullRequestMergeForm.vue b/web_src/js/components/PullRequestMergeForm.vue index 75fbceb8007a..08b1f9cb86e9 100644 --- a/web_src/js/components/PullRequestMergeForm.vue +++ b/web_src/js/components/PullRequestMergeForm.vue @@ -48,7 +48,7 @@
-
+