Merge remote-tracking branch 'upstream/forgejo' into feat/sso-preferred-username
Some checks failed
Integration tests for the release process / release-simulation (push) Has been cancelled

This commit is contained in:
Anthony Lawn 2024-04-23 22:00:46 -05:00
commit f87a6d8b5a
115 changed files with 2279 additions and 794 deletions

View file

@ -2,9 +2,10 @@ root = "."
tmp_dir = ".air"
[build]
pre_cmd = ["killall -9 gitea 2>/dev/null || true"] # kill off potential zombie processes from previous runs
cmd = "make --no-print-directory backend"
bin = "gitea"
delay = 1000
delay = 2000
include_ext = ["go", "tmpl"]
include_file = ["main.go"]
include_dir = ["cmd", "models", "modules", "options", "routers", "services"]

View file

@ -65,6 +65,7 @@ package "code.gitea.io/gitea/models/migrations/base"
func MainTest
package "code.gitea.io/gitea/models/organization"
func GetTeamNamesByID
func UpdateTeamUnits
func (SearchMembersOptions).ToConds
func UsersInTeamsCount
@ -130,6 +131,7 @@ package "code.gitea.io/gitea/models/user"
func GetUserAllSettings
func DeleteUserSetting
func GetUserEmailsByNames
func GetUserNamesByIDs
package "code.gitea.io/gitea/modules/activitypub"
func CurrentTime

View file

@ -22,7 +22,7 @@ jobs:
runs-on: docker
container:
image: ghcr.io/visualon/renovate:37.305.0
image: ghcr.io/visualon/renovate:37.316.2
steps:
- name: Load renovate repo cache

3
.gitmodules vendored
View file

@ -1,3 +0,0 @@
[submodule "manual-testing"]
path = manual-testing
url = https://codeberg.org/forgejo/forgejo-manual-testing

View file

@ -121,7 +121,6 @@ LDFLAGS := $(LDFLAGS) -X "main.ReleaseVersion=$(RELEASE_VERSION)" -X "main.MakeV
LINUX_ARCHS ?= linux/amd64,linux/386,linux/arm-5,linux/arm-6,linux/arm64
ifeq ($(HAS_GO), yes)
GO_PACKAGES ?= $(filter-out code.gitea.io/gitea/tests/integration/migration-test code.gitea.io/gitea/tests code.gitea.io/gitea/tests/integration code.gitea.io/gitea/tests/e2e,$(shell $(GO) list ./... | grep -v /vendor/))
GO_TEST_PACKAGES ?= $(filter-out $(shell $(GO) list code.gitea.io/gitea/models/migrations/...) $(shell $(GO) list code.gitea.io/gitea/models/forgejo_migrations/...) code.gitea.io/gitea/tests/integration/migration-test code.gitea.io/gitea/tests code.gitea.io/gitea/tests/integration code.gitea.io/gitea/tests/e2e,$(shell $(GO) list ./... | grep -v /vendor/))
endif
@ -155,9 +154,9 @@ TAR_EXCLUDES := .git data indexers queues log node_modules $(EXECUTABLE) $(FOMAN
GO_DIRS := build cmd models modules routers services tests
WEB_DIRS := web_src/js web_src/css
ESLINT_FILES := web_src/js tools *.config.js tests/e2e
ESLINT_FILES := web_src/js tools *.js tests/e2e
STYLELINT_FILES := web_src/css web_src/js/components/*.vue
SPELLCHECK_FILES := $(GO_DIRS) $(WEB_DIRS) docs/content templates options/locale/locale_en-US.ini .github
SPELLCHECK_FILES := $(GO_DIRS) $(WEB_DIRS) docs/content templates options/locale/locale_en-US.ini .github $(wildcard *.go *.js *.md *.yml *.yaml *.toml)
GO_SOURCES := $(wildcard *.go)
GO_SOURCES += $(shell find $(GO_DIRS) -type f -name "*.go" ! -path modules/options/bindata.go ! -path modules/public/bindata.go ! -path modules/templates/bindata.go)
@ -453,7 +452,7 @@ lint-go-windows:
.PHONY: lint-go-vet
lint-go-vet:
@echo "Running go vet..."
@$(GO) vet $(GO_PACKAGES)
@$(GO) vet ./...
.PHONY: lint-editorconfig
lint-editorconfig:
@ -768,7 +767,7 @@ generate-backend: $(TAGS_PREREQ) generate-go
.PHONY: generate-go
generate-go: $(TAGS_PREREQ)
@echo "Running go generate..."
@CC= GOOS= GOARCH= $(GO) generate -tags '$(TAGS)' $(GO_PACKAGES)
@CC= GOOS= GOARCH= $(GO) generate -tags '$(TAGS)' ./...
.PHONY: merge-locales
merge-locales:

View file

@ -1,8 +1,460 @@
# Release Notes
A Forgejo release is published shortly after a Gitea release is published and they have [matching release numbers](https://codeberg.org/forgejo/forgejo/src/branch/forgejo/CONTRIBUTING/RELEASE.md#release-numbering). Additional Forgejo releases may be published to address urgent security issues or bug fixes.
A minor or major Forgejo release is published every [three months](https://forgejo.org/docs/latest/user/versions/), with more patch releases in between depending on the severity of the bug and security fixes it contains.
The Forgejo admin should carefully read the required manual actions before upgrading. A point release (e.g. v1.21.1-0 or v1.21.2-0) does not require manual actions but others might (e.g. v1.20, v1.21).
A [patch or minor release](https://semver.org/spec/v2.0.0.html) (e.g. upgrading from v7.0.0 to v7.0.1 or v7.1.0) does not require manual intervention. But [major releases](https://semver.org/spec/v2.0.0.html#spec-item-8) where the first version number changes (e.g. upgrading from v1.21 to v7.0) contain breaking changes and the release notes explain how to deal with them.
## 7.0.0
The [complete list of commits](https://codeberg.org/forgejo/forgejo/commits/branch/v7.0/forgejo) included in the `Forgejo v7.0.0` release can be reviewed from the command line with:
```shell
$ git clone https://codeberg.org/forgejo/forgejo/
$ git -C forgejo log --oneline --no-merges origin/v1.21/forgejo..origin/v7.0/forgejo
```
* **Breaking changes requiring manual intervention:**
* [MySQL 8.0 or PostgreSQL 12](https://codeberg.org/forgejo/forgejo/commit/e94f9fcafdcf284561e7fb33f60156a69c4ad6a5) are the minimum supported versions. The database must be migrated before upgrading. The requirements regarding SQLite did not change.
* The `per_page` parameter is [no longer a synonym for `limit`](https://codeberg.org/forgejo/forgejo/commit/0aab2d38a7d91bc8caff332e452364468ce52d9a) in the [/repos/{owner}/{repo}/releases](https://code.forgejo.org/api/swagger/#/repository/repoListReleases) API endpoint.
* The date format of the `created` and `last_update` fields of the [`/repos/{owner}/{repo}/push_mirrors`](https://code.forgejo.org/api/swagger/#/repository/repoListPushMirrors) and [/repos/{owner}/{repo}/push_mirrors](https://code.forgejo.org/api/swagger/#/repository/repoAddPushMirror) API endpoint changed [to be timestamps instead of numbers](https://codeberg.org/forgejo/forgejo/commit/0ee7cbf725f45650136be45f8e0f74d395f73b5c).
* Labels used [by pprof endpoint](https://forgejo.org/docs/v7.0/admin/config-cheat-sheet/#server-server) have been changed:
* `graceful-lifecycle` to `gracefulLifecycle`
* `process-type` to `processType`
* `process-description` to `processDescription`
This allows for those endpoints to be scraped by services requiring prometheus style labels such as [grafana-agent](https://grafana.com/docs/agent/latest/).
* The repository description [imposes additional restrictions on what it contains](https://codeberg.org/forgejo/forgejo/commit/1075ff74b5050f671c5f9824ae39390230b3c85d) to prevent abuse. You may use [the v7.0 test instance](https://v7.next.forgejo.org/) to check how it will be modified.
* The [Gitea themes were renamed](https://codeberg.org/forgejo/forgejo/commit/023e937141dd891bce3370c869d4db2c60f971ed) and the `[ui].THEMES` setting must be changed as follows:
* `gitea` is replaced by `gitea-light`
* `arc-green` is replaced by `gitea-dark`
* `auto` is replaced by `gitea-auto`
* **Breaking changes in the user interface:**
Note that the modifications related to CSS, templates or assets (images, fonts, etc.) are not documented here.
Although they can be extracted and modified, Forgejo does not provide any guarantee that such changes
will be portable from one version to another (even a patch version). See also
[the developer documentation about interface customization](https://forgejo.org/docs/v1.21/developer/customization/).
* [Update checker setting might change](https://codeberg.org/forgejo/forgejo/pulls/2925). The documentation was listing it as enabled by default, however, for a while it was disabled unless it was explicitly specified in the config or on the installation page. Instances migrated from Gitea also had it disabled due to different default value. Since then Forgejo got a privacy-friendly DNS-based update checking mechanism which is now being enabled by default unless explicitly specified [in the config](https://forgejo.org/docs/v7.0/admin/config-cheat-sheet/#cron---check-for-new-forgejo-versions-cronupdate_checker).
* Language statistics for repositories that use `linguist` attributes in `.gitattributes` *may* show different statistics than previously, because Forgejo recognizes more [linguist attributes](https://forgejo.org/docs/v7.0/user/language-detection/) now.
* It is [no longer possible to replace the default web editor](https://codeberg.org/forgejo/forgejo/pulls/2916) used to write comments or issues and pull requests with the EasyMDE editor. It is however still available as an alternative to edit releases and wiki pages.
* [The list of all repositories and the `New Issue` button are no longer available in the user dashboard](https://codeberg.org/forgejo/forgejo/commit/beb71f5ef6e8074dc744ac995c15f7b5947a3f2e) for issues and pull requests.
* **Migration warning**
* If the logs show a line like the following, [run doctor convert](https://forgejo.org/docs/v7.0/admin/command-line/#doctor-convert) to fix it.
```
[W] Current database is using a case-insensitive collation "utf8mb4_general_ci"
```
* Large instances may experience slow migrations when the database is upgraded to support SHA-256 git repositories. For instance, here are the logs from a test migration of the https://codeberg.org production database:
```
[I] Migration[286]: Add support for SHA256 git repositories
[W] [Slow SQL Query] ALTER TABLE `commit_status` MODIFY COLUMN `context_hash` VARCHAR(64) [] - 3m41.647738396s
[W] [Slow SQL Query] ALTER TABLE `comment` MODIFY COLUMN `commit_sha` VARCHAR(64) [] - 1m5.500234133s
[W] [Slow SQL Query] ALTER TABLE `release` MODIFY COLUMN `sha1` VARCHAR(64) [] - 22.06241145s
```
* **Features and enhancements**
* Repository settings have been refactored, lifting out the repository unit-related settings to their own page. ([#2221](https://codeberg.org/forgejo/forgejo/pulls/2221))
- When additional units can be enabled, an "Add more..." link will be displayed for repository admins. This can be turned off. ([#2533](https://codeberg.org/forgejo/forgejo/pulls/2533))
* Repository administrators can [allow anyone to edit the wiki](https://forgejo.org/docs/v7.0/user/wiki/#activation-and-permissions) in the repository Settings. ([#2001](https://codeberg.org/forgejo/forgejo/pulls/2001))
* Instance administrators can enable [repository badges](https://forgejo.org/docs/v7.0/user/readme-badges/) in the [configuration file](https://forgejo.org/docs/v7.0/admin/config-cheat-sheet/#badges-badges). This feature depends on a shield generator service such as shields.io, and is disabled by default. ([#2070](https://codeberg.org/forgejo/forgejo/pulls/2070))
* Instance administrators can configure the additional clone methods displayed on the repository home view. ([gitea#29320](https://github.com/go-gitea/gitea/pull/29320))
* Instance administrators can [assign custom flags to repositories](https://codeberg.org/forgejo/forgejo/pulls/2079). This is disabled by default, and currently requires custom templates to do anything useful with the flags. ([#2079](https://codeberg.org/forgejo/forgejo/pulls/2079) & [#2097](https://codeberg.org/forgejo/forgejo/pulls/2097))
* Fallback for [basic repo search using git-grep](https://forgejo.org/docs/v7.0/user/code-search/) when code indexer is disabled ([gitea#29998](https://github.com/go-gitea/gitea/pull/29998))
* Repository administrators can disable forking instance-wide by setting the new `[repository].DISABLE_FORKS` setting. ([#2445](https://codeberg.org/forgejo/forgejo/pulls/2445))
* Render permalinks to files with a line range by an inline preview in all places where markup is allowed ([#2669](https://codeberg.org/forgejo/forgejo/pulls/2669))
* A user can now optionally set their preferred pronouns ([#1518](https://codeberg.org/forgejo/forgejo/pulls/1518)).
* [Always enable caches](https://codeberg.org/forgejo/forgejo/commit/e7cb8da2a8310ac167b6f613b283caa3316a7154).
* Forgejo now recognizes more [linguist attributes](https://forgejo.org/docs/v7.0/user/language-detection/), making it possible to include documentation in the repository language statistics, for example. ([#2088](https://codeberg.org/forgejo/forgejo/pulls/2088))
* When displaying the message to open a pull request from a recently pushed branch, the recently pushed branch now links to the appropriate branch. ([#2141](https://codeberg.org/forgejo/forgejo/pulls/2141))
* Users who signed up, but have not activated their accounts yet, are now able to [change their email before activation](https://codeberg.org/forgejo/forgejo/pulls/1891). ([#1891](https://codeberg.org/forgejo/forgejo/pulls/1891))
* The "You pushed on branch ...." banner is now displayed for repositories you have a fork of with recently pushed branches too ([#2195](https://codeberg.org/forgejo/forgejo/pulls/2195)), and it will no longer consider branches that share no history with the default branch. ([#2196](https://codeberg.org/forgejo/forgejo/pulls/2196))
* Forgejo will now highlight signed tags in a similar way it highlights signed commits. ([#2534](https://codeberg.org/forgejo/forgejo/pulls/2534))
* Forgejo gained support for the more recent GitHub-style alert blocks. ([#2348](https://codeberg.org/forgejo/forgejo/pulls/2348))
- The older style remains supported too.
* [[ACTIONS] Add vars context to cron jobs](https://codeberg.org/forgejo/forgejo/pulls/3059)
* [[ACTIONS] Allow viewing the latest Action Run on the web](https://codeberg.org/forgejo/forgejo/pulls/1900)
* [[AGIT] Automatically fill in the description](https://codeberg.org/forgejo/forgejo/pulls/2344)
* [[API] Add API to get PR by base/head](https://codeberg.org/forgejo/forgejo/pulls/2481)
* [[API] commentAssignment() to verify the id belongs](https://codeberg.org/forgejo/forgejo/pulls/2126)
* [[API] DELETE /repos/{owner}/{repo}/pulls/{index}/reviews/{id}/comments/{comment}](https://codeberg.org/forgejo/forgejo/pulls/2157)
* [[API] endpoint for adding comments to reviews](https://codeberg.org/forgejo/forgejo/pulls/2122)
* [[API] GET /repos/{owner}/{repo}/pulls/{index}/reviews/{id}/comments/{comment}](https://codeberg.org/forgejo/forgejo/pulls/2127)
* [[API] support for repository flags](https://codeberg.org/forgejo/forgejo/pulls/2097)
* [[I18N] Clarify description in deletion modal](https://codeberg.org/forgejo/forgejo/pulls/2488)
* [[I18N] Clarify the description of SSH Keys](https://codeberg.org/forgejo/forgejo/pulls/2393)
* [[I18N] Data size unit localization](https://codeberg.org/forgejo/forgejo/pulls/2528)
* [[I18N] Improve branch select list ui in go templates (gitea#29729)](https://codeberg.org/forgejo/forgejo/pulls/2744)
* [[I18N] Improve localization of repo summary](https://codeberg.org/forgejo/forgejo/pulls/2756)
* [[I18N] Improve registration / password reset emails](https://codeberg.org/forgejo/forgejo/pulls/2529)
* [[I18N] Use correct translations for pull request](https://codeberg.org/forgejo/forgejo/pulls/2260)
* [[I18N] Improve translatability of activity heatmap](https://codeberg.org/forgejo/forgejo/pulls/2612)
* [[I18N] Improve English locale for admin settings](https://codeberg.org/forgejo/forgejo/pulls/2583)
* [I18N] Add plural support: [1](https://codeberg.org/forgejo/forgejo/pulls/2614), [2](https://codeberg.org/forgejo/forgejo/pulls/2695), [3](https://codeberg.org/forgejo/forgejo/pulls/2954), [4](https://codeberg.org/forgejo/forgejo/pulls/3031)
* [I18N] General improvements to English locale: [1](https://codeberg.org/forgejo/forgejo/pulls/2307), [2](https://codeberg.org/forgejo/forgejo/pulls/2437), [3](https://codeberg.org/forgejo/forgejo/pulls/2492), [4](https://codeberg.org/forgejo/forgejo/pulls/2610), [5](https://codeberg.org/forgejo/forgejo/pulls/2703), [6](https://codeberg.org/forgejo/forgejo/pulls/2941).
* [[I18N] Allow custom repo size format](https://codeberg.org/forgejo/forgejo/pulls/2974)
* [[PACKAGES] nuget basic manifest download](https://codeberg.org/forgejo/forgejo/pulls/2222)
* [[UI] Add label filters in organization issues dashboard](https://codeberg.org/forgejo/forgejo/pulls/2944)
* [[UI] Allow users to hide all "Add more units..." hints](https://codeberg.org/forgejo/forgejo/pulls/2533)
* [[UI] Display tag name as title for a tag with no release [gitea]](https://codeberg.org/forgejo/forgejo/pulls/2547)
* [[UI] Enable ambiguous character detection in configured contexts](https://codeberg.org/forgejo/forgejo/pulls/2427)
* [[UI] Improve display of 404/500 error pages](https://codeberg.org/forgejo/forgejo/pulls/2466)
* [[UI] Improve look of user profiles](https://codeberg.org/forgejo/forgejo/pulls/2875)
* [[UI] Include a branch link in the recently pushed banner](https://codeberg.org/forgejo/forgejo/pulls/2141)
* [[UI] Offer to remove WIP: prefix in sidebar](https://codeberg.org/forgejo/forgejo/pulls/2660)
* [[UI] Port console colors](https://codeberg.org/forgejo/forgejo/pulls/2419)
* [[UI] pulls "Edit File" button in "Files Changed" tab](https://codeberg.org/forgejo/forgejo/pulls/1992)
* [[UI] Remove add organization on dashboard switcher](https://codeberg.org/forgejo/forgejo/pulls/2895)
* [[UI] Restrict file size of blame operation](https://codeberg.org/forgejo/forgejo/pulls/2395)
* [[UI] Show follow symlink button](https://codeberg.org/forgejo/forgejo/pulls/2530)
* [[UI] split code conversations in diff tab](https://codeberg.org/forgejo/forgejo/pulls/2306)
* [[UI] Update look of repo/org tabs on homepage](https://codeberg.org/forgejo/forgejo/pulls/2593)
* [[UI] Visual separation between types of attachments](https://codeberg.org/forgejo/forgejo/pulls/2899)
* [[UI] [AGIT] Add AGit label to AGit-created PRs](https://codeberg.org/forgejo/forgejo/pulls/2444)
* [[UI] [AGIT] Add link to docs and tooltip to label](https://codeberg.org/forgejo/forgejo/pulls/2499)
* [Implement commit mail selection for other Git operations](https://codeberg.org/forgejo/forgejo/pulls/2383)
* [Improved Linguist compatibility](https://codeberg.org/forgejo/forgejo/pulls/2088)
* [improve nuget nuspec api](https://codeberg.org/forgejo/forgejo/pulls/2996)
* [Log SQL queries when the database return error](https://codeberg.org/forgejo/forgejo/pulls/2140)
* [New doctor check: fix-push-mirrors-without-git-remote](https://codeberg.org/forgejo/forgejo/pulls/1853)
* [New route to view latest run of specific workflows](https://codeberg.org/forgejo/forgejo/pulls/2304)
* [Check for Commit in opengraph](https://codeberg.org/forgejo/forgejo/pulls/2094)
* [Check if commit is already present in target branch](https://codeberg.org/forgejo/forgejo/pulls/2450)
* [Configure if protected branch rule should apply to admins](https://codeberg.org/forgejo/forgejo/pulls/2867)
* [Count downloads for tag archives](https://codeberg.org/forgejo/forgejo/pulls/2976)
* [depguard sha256-simd](https://codeberg.org/forgejo/forgejo/pulls/2234)
* [Don't consider orphan branches as recently pushed](https://codeberg.org/forgejo/forgejo/pulls/2196)
* [extend webfinger to respond to profile page URIs](https://codeberg.org/forgejo/forgejo/pulls/2883)
* [Highlight signed tags like signed commits](https://codeberg.org/forgejo/forgejo/pulls/2534)
* [Allow changing the email address before activation](https://codeberg.org/forgejo/forgejo/pulls/1891)
* [Allow changing the repo Wiki branch to main](https://codeberg.org/forgejo/forgejo/pulls/2264)
* [Allow forking without a repo ID](https://codeberg.org/forgejo/forgejo/pulls/2310)
* [Allow instance-wide disabling of forking](https://codeberg.org/forgejo/forgejo/pulls/2445)
* [Allow non-explicit push options](https://codeberg.org/forgejo/forgejo/pulls/2984)
* [Allow to exclude files in dump](https://codeberg.org/forgejo/forgejo/pulls/2876)
* [add bucket lookup type](https://codeberg.org/forgejo/forgejo/pulls/2482)
* [Add download URL for executable files](https://codeberg.org/forgejo/forgejo/pulls/1839)
* [Add gitignore template for Janet projects](https://codeberg.org/forgejo/forgejo/pulls/2557)
* [add optional storage init to doctor commands](https://codeberg.org/forgejo/forgejo/pulls/3034)
* [Add rel="nofollow" to issue filter links](https://codeberg.org/forgejo/forgejo/pulls/2367)
* [Add support for shields.io-based badges](https://codeberg.org/forgejo/forgejo/pulls/2070)
* [Add Zig gitignore](https://codeberg.org/forgejo/forgejo/pulls/2352)
* [Recognize SSH signed tags too](https://codeberg.org/forgejo/forgejo/pulls/2520)
* [Repository flags](https://codeberg.org/forgejo/forgejo/pulls/2079)
* [support `.forgejo` dir for issue and PR templates](https://codeberg.org/forgejo/forgejo/pulls/2290)
* [Support Include/Exclude Filters for Grep](https://codeberg.org/forgejo/forgejo/pulls/3058)
* [Use 'Text' instead of 'Plaintext'](https://codeberg.org/forgejo/forgejo/pulls/2833)
* [Render code tags in commit messages](https://codeberg.org/forgejo/forgejo/commit/3ccb0c2512cb551943945aaa3f2bd0b1e2abd3b8).
* [Refactor markdown attention render](https://codeberg.org/forgejo/forgejo/commit/ec2201a3da5f18e55bfc0a54114ac935804f4ef8).
* [Add default board to new projects, remove uncategorized pseudo-board](https://codeberg.org/forgejo/forgejo/commit/8ffb9c6fb1571a1221978440f108911057df25db).
* [Add more stats tables](https://codeberg.org/forgejo/forgejo/commit/926367fe1d778fe7c9f5bc6b8e8c514b619ef038).
* [Improve branch select list ui in go templates](https://codeberg.org/forgejo/forgejo/commit/729849a2fd026adbb91e3ff3259290f61bd919f0).
* [Update allowed attachment types](https://codeberg.org/forgejo/forgejo/commit/04b79bb48b490644c46e58da46af4b62a40e5e03).
* [Completely style the webkit autofill](https://codeberg.org/forgejo/forgejo/commit/9916f3ed64a715fb9a31a0fcad6452276e275615).
* [Set user's 24h preference from their current OS locale](https://codeberg.org/forgejo/forgejo/commit/427ab550a6a35e7369bc1b33a188bb3030c32ec0).
* [Make wiki default branch name changeable](https://codeberg.org/forgejo/forgejo/commit/7ea8993a0e342e7a30cb2da03216697b4819935a).
* [Make admin pages wider because of left sidebar added and some tables become too narrow](https://codeberg.org/forgejo/forgejo/commit/145bebc829c03cbb078e518d7364d27bcf60d96c).
* [Make PR form use toast to show error message](https://codeberg.org/forgejo/forgejo/commit/221a28436a080447f429fa2089d264e56f4980e2).
* [Rename Action.GetDisplayName to GetActDisplayName](https://codeberg.org/forgejo/forgejo/commit/be9189eddc84e942710b16b1c8c54c10aad01b63).
* [Unify search boxes](https://codeberg.org/forgejo/forgejo/commit/847f03b6a65ee251bf764f54f6114737346a43b6).
* [Detect broken git hooks](https://codeberg.org/forgejo/forgejo/commit/963df8290784d82385f7e8ad9f5c9abfd2fa2860).
* [Filter for default-branch selection](https://codeberg.org/forgejo/forgejo/commit/1090734255d70deb9886de2c1a8bb971096223ee).
* [Include resource state events in Gitlab downloads](https://codeberg.org/forgejo/forgejo/commit/bc7a247b9ea68643e3c59d4b4376dea097ffcc68).
* [Properly migrate target branch change GitLab comment](https://codeberg.org/forgejo/forgejo/commit/f0acc71ba13713f07602294b4a33028125343d47).
* [Recolor dark theme to blue shade](https://codeberg.org/forgejo/forgejo/commit/ff581d5a2415f7a3321fa6ba656ae0e972674d6c).
* [Unify organizations header](https://codeberg.org/forgejo/forgejo/commit/4b494d341f3142c066bc5b2b3cfd50f924d64fd3).
* [Auto-update the system status in admin dashboard](https://codeberg.org/forgejo/forgejo/commit/4f050f358a15dd51903e01b330a5419b2ac06693).
* [Show more settings for empty repositories](https://codeberg.org/forgejo/forgejo/commit/b03af9efb275f935bb265c7f031225caaafefaff).
* [Downscale pasted PNG images based on metadata](https://codeberg.org/forgejo/forgejo/commit/b3f2447bc4b6a7220da748cc6eb24bd5568bee7c).
* [Show `View at this point in history` for every commit](https://codeberg.org/forgejo/forgejo/commit/27bc2b9d9597de89d2c6b68581c6729bb16a4572).
* [Drop "@" from email sender to avoid spam filters](https://codeberg.org/forgejo/forgejo/commit/9a1d5c549cb6d32219647ea1a771b8a82d5ac89f).
* [Allow non-admin users to delete review requests](https://codeberg.org/forgejo/forgejo/commit/77c56e29ded5665bdc09d0a568159aa7127b44b1).
* [Some performance optimization on dashboard and issues page](https://codeberg.org/forgejo/forgejo/commit/d996c5d5179c99855e69156a034eca055e9329a4).
* [Improve user search display name](https://codeberg.org/forgejo/forgejo/commit/c3e462921ee31536e59b37e654ed20e92a37ffe6).
* [Fix UI Spacing Errors in mirror settings](https://codeberg.org/forgejo/forgejo/commit/64faecefe10613840709a68c1b8b708115d69d6e).
* [Include username in email headers](https://codeberg.org/forgejo/forgejo/commit/360b3fd17c3315ad9ad9c4e6ac02eda73f48d8ae).
* [Also match weakly validated ETags](https://codeberg.org/forgejo/forgejo/commit/28fe3db1fb0f89bcb55829ced33c1282f85f6e97).
* [Propagate install_if and provider_priority to APKINDEX](https://codeberg.org/forgejo/forgejo/commit/2da233ad8be107de29190720f1c30199410fe0cd).
* [Fix display latest sync time for pull mirrors on the repo page](https://codeberg.org/forgejo/forgejo/commit/4674aea25b54baf08594c54f061dee9e44190f02).
* [Remove trust model selection from repository creation on web page because it can be changed in settings later](https://codeberg.org/forgejo/forgejo/commit/c08d263a1900aa5ee92f56af8ad1c7a2697d02e1).
* [Add ability to see open and closed issues at the same time](https://codeberg.org/forgejo/forgejo/commit/2c3da59e275b69ebf984bb70954f42a7bcb0b49d).
* [Move sign in labels to be above inputs](https://codeberg.org/forgejo/forgejo/commit/4af0944b2604dd2b2e413864492135faea097298).
* [Move the captcha script loader to the template which really needs it](https://codeberg.org/forgejo/forgejo/commit/a04f8c0f81f55a8b927ce0fad8127db39396f892).
* [Display latest sync time for pull mirrors on the repo page](https://codeberg.org/forgejo/forgejo/commit/2d343f8987025015f5b61e328cc9e45082e6d3f2).
* [Show in Web UI if file is vendored and generated](https://codeberg.org/forgejo/forgejo/commit/7ed18566e10b298309dcc99d97447cb1932ae09a).
* [Add orphaned topic consistency check](https://codeberg.org/forgejo/forgejo/commit/e02095c5b6e04f70ae6562f5aee169f7ee93cf7a).
* [Convert to url auth to header auth in tests](https://codeberg.org/forgejo/forgejo/commit/838db2f8911690fa2115c6827ed73687db71bef1).
* [Add option to set language in admin user view](https://codeberg.org/forgejo/forgejo/commit/318634ef74dc0a9c285991692e72d3df90b8583c).
* [Fix incorrect run order of action jobs](https://codeberg.org/forgejo/forgejo/commit/f4561c44b1cad700bf41537eb4db487fff34f6c9).
* [Add missing exclusive in advanced label options](https://codeberg.org/forgejo/forgejo/commit/77506c6f6cbfa5c15d8373743415f47b2adb404d).
* [Add combined index for issue_user.uid and issue_id](https://codeberg.org/forgejo/forgejo/commit/e08f1a9cbd582c73918e401eeba36261627f44a7).
* [Add edit option for README.md](https://codeberg.org/forgejo/forgejo/commit/08552f0076204b99258f9135c77a962c302521dc).
* [Fix link to `Code` tab on wiki commits](https://codeberg.org/forgejo/forgejo/commit/709a376c518d0cfde10bb911b32fd0ea82c67b52).
* [Remove autofocus in search box](https://codeberg.org/forgejo/forgejo/commit/eae555ff2395cc1ad178f3a977d83742ae73e1d9).
* [Allow to set explore page default sort](https://codeberg.org/forgejo/forgejo/commit/16ba16dbe951763cfc026b7351e26009d1a25fdc).
* [Improve PR diff view on mobile](https://codeberg.org/forgejo/forgejo/commit/49dddd87b19aebe83e1c54a455e62529a19f61b4).
* [Properly migrate automatic merge GitLab comments](https://codeberg.org/forgejo/forgejo/commit/542badbb76408c17ce6692e99fff680bee69face).
* [Display issue task list on project cards](https://codeberg.org/forgejo/forgejo/commit/4776fde9e1caa7cee5671715144a668e19a0323c).
* [Add Index to pull_auto_merge.doer_id](https://codeberg.org/forgejo/forgejo/commit/c8602a8dfa05f653e7de8ed2e677c8967b8688f5).
* [Fix display member unit in the menu bar if there are no hidden members in public org](https://codeberg.org/forgejo/forgejo/commit/0e021cd33ee3eb3d8f204bd075e2597b7ec8b391).
* [List all Debian package versions in `Packages`](https://codeberg.org/forgejo/forgejo/commit/b36e2ca4195298d2e4516e3022b953543f62f470).
* [Allow pull requests Manually Merged option to be used by non-admins](https://codeberg.org/forgejo/forgejo/commit/1756e30e102d079f8425aa2061ef80fd36c2e57d).
* [Only show diff file tree when more than one file changed](https://codeberg.org/forgejo/forgejo/commit/572f0963edc71239634ee782a3c69213479f34ba).
* [Show placeholder email in privacy popup](https://codeberg.org/forgejo/forgejo/commit/31f8880bc252a25075f8752e2722b316c6e46ec7).
* [Revamp repo header](https://codeberg.org/forgejo/forgejo/commit/7d62615513b8985360de497e9a051b51ca0faaf2).
* [Add link to members and repositories at teams page](https://codeberg.org/forgejo/forgejo/commit/4f4ddcf3c593b474846d40e47b4351d3deb39202).
* [Add link for repositories README file](https://codeberg.org/forgejo/forgejo/commit/7210f23fa0f11da093b307029d7ab91ed40807fb).
* [Add `must-change-password` cli parameter](https://codeberg.org/forgejo/forgejo/commit/9bea276055edc9527e3d6d66df3bbf0d20326f8b).
* [Unify password changing and invalidate auth tokens](https://codeberg.org/forgejo/forgejo/commit/688d4a1f719d2df4d2626453f4bc042c1874a375).
* [Add slow SQL query warning](https://codeberg.org/forgejo/forgejo/commit/664192767c41b9d0759bcc3915c7bd6ccecc52ae).
* [Pre-register OAuth application for tea](https://codeberg.org/forgejo/forgejo/commit/a825cc0f3423f0a5c8157c436a0c7b489ef536c1).
* [Differentiate between `push` and `pull` `mirror sync in progress`](https://codeberg.org/forgejo/forgejo/commit/e709bc199fe33456c4ecd1cd28029bd31b529832).
* [Cargo package - Fix missing domain in cargo sparse url](https://codeberg.org/forgejo/forgejo/commit/a112cf34d391cc04770021f9ffaa29e383cb9d51).
* [Link to file from its history](https://codeberg.org/forgejo/forgejo/commit/33de64cb21505259338e393ef0d15ccb0f757475).
* [Add a shortcut to user's profile page to admin user details](https://codeberg.org/forgejo/forgejo/commit/e96e440b8bde5516ffc7bba42691e26084a96588).
* [Doctor: delete action entries without existing user](https://codeberg.org/forgejo/forgejo/commit/15fa0383fb5dd9ad1702dbc34ba7100c0cdbcc8c).
* [Add anchor to review types](https://codeberg.org/forgejo/forgejo/commit/89c9a498fdd6184df8afda8b5b488462e65b9e71).
* [Show total TrackedTime on issue/pull/milestone lists](https://codeberg.org/forgejo/forgejo/commit/adbc995c347e158a56264f2488997d7d59a4dd8b).
* [Improve commit record's ui in comment list](https://codeberg.org/forgejo/forgejo/commit/ed1798f66d30e3755f01e24f8cb4aa5e8b6628a0).
* [Don't show new pr button when page is not compare pull](https://codeberg.org/forgejo/forgejo/commit/b693611b35c5ae17cfc820bc3e731608a5251464).
* [Add `Hide/Show all checks` button to commit status check](https://codeberg.org/forgejo/forgejo/commit/dcb648ee71853073d54e8a6e107b764212ede58e).
* [Improvements of releases list and tags list](https://codeberg.org/forgejo/forgejo/commit/3fcad582c9b9bfe66f4a346652f82b1aaf18430d).
* [Support pasting URLs over markdown text](https://codeberg.org/forgejo/forgejo/commit/45112876766cb81ed7edd2b72a3ab93e6deab8bb).
* [Customizable "Open with" applications for repository clone](https://codeberg.org/forgejo/forgejo/commit/44221a3cd747a01d55093b15a12bf053b534da35).
* [Allow options to disable user deletion from the interface on app.ini](https://codeberg.org/forgejo/forgejo/commit/767e9634d3d02acab27f05e1783391c9c7f6292e).
* [Extend issue template yaml engine](https://codeberg.org/forgejo/forgejo/commit/ff8f7a7a0d1d0f57113a6ad8b499f7c1094288f5).
* [Filter Repositories by type](https://codeberg.org/forgejo/forgejo/commit/83e04328dfff3b09e5d28dd972ebee0865f96b0e).
* [Implement code frequency graph](https://codeberg.org/forgejo/forgejo/commit/f097799953c5f510b7e3314f1e3e115761f207d0).
* [Implement recent commits graph](https://codeberg.org/forgejo/forgejo/commit/428008ac19185125b7cb1e3d379254d7b1932529).
* [Show commit status for releases](https://codeberg.org/forgejo/forgejo/commit/369fe5696697cef33a188d9b985ac4b9824a4bdf).
* [Actions Artifacts v4 backend](https://codeberg.org/forgejo/forgejo/commit/66632c4958041abdffe6adafc278d34ef515c44f).
* [Add merge style `fast-forward-only`](https://codeberg.org/forgejo/forgejo/commit/83123b493f3ae25d07d81c86b1a78afe1c17db53).
* [Retarget depending pulls when the parent branch is deleted](https://codeberg.org/forgejo/forgejo/commit/49eb16867728913d1eb2ced96e0b0b0a358f6ebe).
* [Add global setting how timestamps should be rendered](https://codeberg.org/forgejo/forgejo/commit/cdc33b29a012e61b42f192d79f9486fa8e21b2ed).
* [Add skip ci functionality](https://codeberg.org/forgejo/forgejo/commit/816e46ee7ce4b2649479554a940ecbe1cc505a3d)
* [Show latest commit for file](https://codeberg.org/forgejo/forgejo/commit/885cc32b14584ee2d01009768895b7a776441504).
* [Allow to sync tags from admin dashboard](https://codeberg.org/forgejo/forgejo/commit/4567a3a1ad0490d9077102e0e7b5de35790e5803).
* [Add Profile Readme for Organisations](https://codeberg.org/forgejo/forgejo/commit/603573366a203efae06f818a0b220be964cdac21).
* [Implement contributors graph](https://codeberg.org/forgejo/forgejo/commit/e9be8b25ae57189c4b29eaa393a397cf634d21d7).
* [Artifact deletion in actions ui](https://codeberg.org/forgejo/forgejo/commit/c551d3f3ab13379b0740fc45bc4dfc8f2fb84e16).
* [Add API routes to get runner registration token](https://codeberg.org/forgejo/forgejo/commit/baf0d402d9cb47849394202fcfc7c2e23b0faac3).
* [Add support for forking single branch](https://codeberg.org/forgejo/forgejo/commit/5e02e3b7ee8294e2ec94968ece9af56bf1aa1534).
* [Add support for sha256 repositories](https://codeberg.org/forgejo/forgejo/commit/d68a613ba8fd860863a3465b5b5945b191b87b25).
* [Add admin API route for managing user's badges](https://codeberg.org/forgejo/forgejo/commit/82b7de1360870db7a8b368a3f80ede887e32e128).
* **Bug fixes:**
* The repository home view will no longer redirect to external units. ([#2064](https://codeberg.org/forgejo/forgejo/pulls/2064))
* User and Organization `.profile` repositories now search for a `README.md` file case insensitively. ([#2090](https://codeberg.org/forgejo/forgejo/pulls/2090))
* When viewing a file, the RSS feed link is only displayed when there is an RSS feed provided for the context: when viewing a file on a branch. ([#2103](https://codeberg.org/forgejo/forgejo/pulls/2103))
* Repository topic searches are now correctly paged, which should make topic management on larger instances orders of magnitudes faster. ([#2060](https://codeberg.org/forgejo/forgejo/pulls/2060))
* Mentioning a user in a comment or similar place ignores apostrophes now. ([#2485](https://codeberg.org/forgejo/forgejo/pulls/2485))
* Setting the `[repository].DISABLE_STARS` setting to `true` disables the functionality completely, rather than just hiding it from the user interface.
* Forking a repository is now available at a predictable URL, and does not require knowing the repository id. ([#2310](https://codeberg.org/forgejo/forgejo/pulls/2310))
* Issue and pull request templates can now be placed in a `.forgejo` directory, like workflows. ([#2290](https://codeberg.org/forgejo/forgejo/pulls/2290))
* [[A11Y] Fix accessibility and translatability of repo explore counters](https://codeberg.org/forgejo/forgejo/pulls/2862)
* [[A11Y] Focus styling and fix Watch/Unwatch buttons](https://codeberg.org/forgejo/forgejo/pulls/2379)
* [[A11Y] Label Stars/Forks links in repo explore](https://codeberg.org/forgejo/forgejo/pulls/2634)
* [[A11Y] Taborder in repo explore](https://codeberg.org/forgejo/forgejo/pulls/2636)
* [[ACTIONS] add proper payload to scheduled events](https://codeberg.org/forgejo/forgejo/pulls/2015)
* [[ACTIONS] Do not update PRs based on events that happened before they existed](https://codeberg.org/forgejo/forgejo/pulls/2932)
* [[ACTIONS] GetScheduledMergeByPullID may involve a system user](https://codeberg.org/forgejo/forgejo/pulls/1908)
* [[ACTIONS] Link to Workflow in View](https://codeberg.org/forgejo/forgejo/pulls/1866)
* [[ACTIONS] the ref of a scheduled action is always the default branch](https://codeberg.org/forgejo/forgejo/pulls/1941)
* [[API] Adjust name of operation](https://codeberg.org/forgejo/forgejo/pulls/2189)
* [[API] `/api/v1/{owner}/{repo}/issue_templates`](https://codeberg.org/forgejo/forgejo/pulls/2292)
* [[API] Document correct status code for creating a tag](https://codeberg.org/forgejo/forgejo/pulls/2201)
* [[API] /api/forgejo/v1/version auth check](https://codeberg.org/forgejo/forgejo/pulls/2582)
* [[API] inconsistencies](https://codeberg.org/forgejo/forgejo/pulls/2182)
* [[API] /issues/search endpoint](https://codeberg.org/forgejo/forgejo/pulls/2020)
* [[API] Make HTTPS schema default for Swagger](https://codeberg.org/forgejo/forgejo/pulls/1896)
* [[I18N] Add missing translation for more_items](https://codeberg.org/forgejo/forgejo/pulls/2828)
* [[I18N] Eliminate wrapping quotes in English locale](https://codeberg.org/forgejo/forgejo/pulls/2467)
* [[I18N] English fixes and improvements](https://codeberg.org/forgejo/forgejo/pulls/2631)
* [[I18N] Fix milestone sorting translation keys](https://codeberg.org/forgejo/forgejo/pulls/2644)
* [[I18N] Use correct translation on closed milestones](https://codeberg.org/forgejo/forgejo/pulls/2957)
* [[I18N] Use new translation key](https://codeberg.org/forgejo/forgejo/pulls/2760)
* [[PACKAGES] Delete redundant snap packaging recipe](https://codeberg.org/forgejo/forgejo/pulls/2693)
* [[PACKAGES] Fix Alpine Registry packages with noarch not being found](https://codeberg.org/forgejo/forgejo/pulls/2285)
* [[PACKAGES] Generate install if condition for Alpine](https://codeberg.org/forgejo/forgejo/pulls/2176)
* [[PACKAGES] Packagist webhook: support all events](https://codeberg.org/forgejo/forgejo/pulls/2646)
* [[PACKAGES] Fix for PyPi Registry PEP 503 Compliance](https://codeberg.org/forgejo/forgejo/pulls/3197)
* [[UI] Adjust the signed tag verification line](https://codeberg.org/forgejo/forgejo/pulls/2966)
* [[UI] Better color for labels/counters](https://codeberg.org/forgejo/forgejo/pulls/2935)
* [[UI] Better number for UserCards pagination](https://codeberg.org/forgejo/forgejo/pulls/2584)
* [[UI] Center icon and callout text](https://codeberg.org/forgejo/forgejo/pulls/3010)
* [[UI] Consistent styling for Sort filter](https://codeberg.org/forgejo/forgejo/pulls/2920)
* [[UI] Disable the RSS feed in file view for non-branches](https://codeberg.org/forgejo/forgejo/pulls/2103)
* [[UI] Disable 'View at this point in history' for wikis](https://codeberg.org/forgejo/forgejo/pulls/2999)
* [[UI] Display error message if doer is unable to fork](https://codeberg.org/forgejo/forgejo/pulls/2649)
* [[UI] Don't use `<br />` in alert block](https://codeberg.org/forgejo/forgejo/pulls/2741)
* [[UI] Fix admin layout](https://codeberg.org/forgejo/forgejo/pulls/3087)
* [[UI] Fix crash in issue forms](https://codeberg.org/forgejo/forgejo/pulls/3012)
* [[UI] Fix Ctrl+Enter on submitting review comment](https://codeberg.org/forgejo/forgejo/pulls/2370)
* [[UI] Fix diff patch operation in web UI](https://codeberg.org/forgejo/forgejo/pulls/2449)
* [[UI] Fixes for project selector in sidebar](https://codeberg.org/forgejo/forgejo/pulls/2608)
* [[UI] Fix must-change-password help dialog](https://codeberg.org/forgejo/forgejo/pulls/2676)
* [[UI] Fix relative links on orgmode](https://codeberg.org/forgejo/forgejo/pulls/2385)
* [[UI] Fix selector inner radius](https://codeberg.org/forgejo/forgejo/pulls/2860)
* [[UI] Fix tone of callout boxes for Forgejo dark](https://codeberg.org/forgejo/forgejo/pulls/3085)
* [[UI] Fix tooltip for 1000+ stars/forks](https://codeberg.org/forgejo/forgejo/pulls/3147)
* [[UI] include hostname in admin panel URL in new user emails](https://codeberg.org/forgejo/forgejo/pulls/1940)
* [[UI] Increase contrast of code block](https://codeberg.org/forgejo/forgejo/pulls/2874)
* [[UI] Limit amount of javascript errors being shown](https://codeberg.org/forgejo/forgejo/pulls/2175)
* [[UI] Make settings tab not active when on repository "Add units" tab](https://codeberg.org/forgejo/forgejo/pulls/2524)
* [[UI] Make write and preview tabs interactive](https://codeberg.org/forgejo/forgejo/pulls/2681)
* [[UI] New issue button position consistency](https://codeberg.org/forgejo/forgejo/pulls/2845)
* [[UI] Fix orgmode link resolver for text descriptions](https://codeberg.org/forgejo/forgejo/pulls/2276)
* [[UI] Preview: set font-size on preview content](https://codeberg.org/forgejo/forgejo/pulls/2349)
* [[UI] Fix primary button background inconsistency](https://codeberg.org/forgejo/forgejo/pulls/3002)
* [[UI] Fix regression of issue edit not working](https://codeberg.org/forgejo/forgejo/pulls/3043)
* [[UI] Fix relative links rendering](https://codeberg.org/forgejo/forgejo/pulls/2166)
* [[UI] Remember topic only in repo search](https://codeberg.org/forgejo/forgejo/pulls/2575)
* [[UI] Remove min-height from wiki elements](https://codeberg.org/forgejo/forgejo/pulls/2080)
* [[UI] Render emojis in labels in issue info popup](https://codeberg.org/forgejo/forgejo/pulls/2888)
* [[UI] Render correct label link](https://codeberg.org/forgejo/forgejo/pulls/3187)
* [[UI] Render inline file permalinks](https://codeberg.org/forgejo/forgejo/pulls/2669)
* [[UI] Fix repo badges when the label or text contains dashes](https://codeberg.org/forgejo/forgejo/pulls/2711)
* [[UI] Fix repo unarchivation button](https://codeberg.org/forgejo/forgejo/pulls/2550)
* [[UI] Restrict when to make link absolute in markdown](https://codeberg.org/forgejo/forgejo/pulls/2403)
* [[UI] Revert darker tone on labels](https://codeberg.org/forgejo/forgejo/pulls/2881)
* [[UI] Simplify converting struct to map in admin stats](https://codeberg.org/forgejo/forgejo/pulls/2442)
* [[UI] Fix the Fork button in repo headers](https://codeberg.org/forgejo/forgejo/pulls/2495)
* [[UI] Use correct logout URL](https://codeberg.org/forgejo/forgejo/pulls/2475)
* [[UI] Use separate keys for tabs on login screen](https://codeberg.org/forgejo/forgejo/pulls/2630)
* [[UI] "view file" button in diff compare view](https://codeberg.org/forgejo/forgejo/pulls/3046)
* [add Cache-Control header for health-check](https://codeberg.org/forgejo/forgejo/pulls/3060)
* [add max idle time setting for db connections](https://codeberg.org/forgejo/forgejo/pulls/2418)
* [Allow `'s` in mentions](https://codeberg.org/forgejo/forgejo/pulls/2485)
* [Avoid `WHERE IN` for comment migration query](https://codeberg.org/forgejo/forgejo/pulls/1961)
* [Cleanup characters forbidden on Windows from test fixture filenames](https://codeberg.org/forgejo/forgejo/pulls/2178)
* [Correct changed files for CODEOWNERS](https://codeberg.org/forgejo/forgejo/pulls/2507)
* [Correct default licenses to work as desired](https://codeberg.org/forgejo/forgejo/pulls/1888)
* [Detect protected branch on branch rename](https://codeberg.org/forgejo/forgejo/pulls/2811)
* [Disabling Stars should disable the routes too](https://codeberg.org/forgejo/forgejo/pulls/2471)
* [doctor: Don't say All done when no checks were run](https://codeberg.org/forgejo/forgejo/pulls/1907)
* [Do not allow deletion of internal references](https://codeberg.org/forgejo/forgejo/pulls/2834)
* [Don't color dot literal color names](https://codeberg.org/forgejo/forgejo/pulls/2905)
* [Don't delete inactive emails explicitly](https://codeberg.org/forgejo/forgejo/pulls/2880)
* [Don't overwrite protected branch accidentally](https://codeberg.org/forgejo/forgejo/pulls/2473)
* [Don't redirect the repo to external units](https://codeberg.org/forgejo/forgejo/pulls/2064)
* [Don't remove builtin OAuth2 applications](https://codeberg.org/forgejo/forgejo/pulls/3067)
* [Ensure `HasIssueContentHistory` takes into account `comment_id`](https://codeberg.org/forgejo/forgejo/pulls/2518)
* [Find README.md for user profiles case insensitively](https://codeberg.org/forgejo/forgejo/pulls/2090)
* [Fix header name in swagger response](https://codeberg.org/forgejo/forgejo/pulls/2526)
* [Fix pull request reopen conditions](https://codeberg.org/forgejo/forgejo/pulls/2373)
* [Fix unblock action](https://codeberg.org/forgejo/forgejo/pulls/3086)
* [Fix VSCode settings](https://codeberg.org/forgejo/forgejo/pulls/1881)
* [Gracefully handle missing branches on a repos branches page](https://codeberg.org/forgejo/forgejo/pulls/2139)
* [Initialize Git for hook regeneration](https://codeberg.org/forgejo/forgejo/pulls/2416)
* [Internal Server Error when resolving comments](https://codeberg.org/forgejo/forgejo/pulls/2282)
* [Load `AllUnitsEnabled` when necessary](https://codeberg.org/forgejo/forgejo/pulls/2420)
* [Makefile: check git diff exitCode](https://codeberg.org/forgejo/forgejo/pulls/2651)
* [Make pprof labels conformant with prometheus spec](https://codeberg.org/forgejo/forgejo/pulls/2933)
* [Make reference URL absolute](https://codeberg.org/forgejo/forgejo/pulls/2100)
* [misleading comparisons when comparing branches](https://codeberg.org/forgejo/forgejo/pulls/2194)
* [Block issue creation when blocked by repo owner](https://codeberg.org/forgejo/forgejo/pulls/2052)
* [NPE in `ToPullReviewList`](https://codeberg.org/forgejo/forgejo/pulls/2057)
* [NPE in `UsernameSubRoute`](https://codeberg.org/forgejo/forgejo/pulls/1981)
* [Only pass selected repository IDs to pagination](https://codeberg.org/forgejo/forgejo/pulls/1848)
* [panic in `canSoftDeleteContentHistory`](https://codeberg.org/forgejo/forgejo/pulls/2134)
* [prevent removing session cookie when redirect_uri query contains ://](https://codeberg.org/forgejo/forgejo/pulls/2590)
* [pull_request_template branch link](https://codeberg.org/forgejo/forgejo/pulls/2232)
* [Rate limit pre-activation email change separately](https://codeberg.org/forgejo/forgejo/pulls/2043)
* [Refactor LFS GC functions](https://codeberg.org/forgejo/forgejo/pulls/3056)
* [Reflect Cargo index state in settings](https://codeberg.org/forgejo/forgejo/pulls/2698)
* [Remember topic only in repo search](https://codeberg.org/forgejo/forgejo/pulls/2489)
* [Require Latex code to have a end sequence](https://codeberg.org/forgejo/forgejo/pulls/1822)
* [Respond with JSON Resource Descriptor Content-Type per RFC7033](https://codeberg.org/forgejo/forgejo/pulls/2882)
* [Fix session generation for database](https://codeberg.org/forgejo/forgejo/pulls/2045)
* [Sort file list case insensitively](https://codeberg.org/forgejo/forgejo/pulls/2522)
* [Fix the topic search paging](https://codeberg.org/forgejo/forgejo/pulls/2060)
* [Typo fix & clarify RegistrationToken](https://codeberg.org/forgejo/forgejo/pulls/2191)
* [Update checker setting updates](https://codeberg.org/forgejo/forgejo/pulls/2925)
* [Use correct format for attr-check error log](https://codeberg.org/forgejo/forgejo/pulls/2866)
* [Use correct head commit for CODEOWNER](https://codeberg.org/forgejo/forgejo/pulls/2658)
* [Use correct template for commitmail error](https://codeberg.org/forgejo/forgejo/pulls/2973)
* [Workaround borked Git version](https://codeberg.org/forgejo/forgejo/pulls/2335)
* [Remove scheduled action tasks if the repo is archived](https://codeberg.org/forgejo/forgejo/commit/87870ade49eb76ff57a8593ba35df10e0d617aa5).
* [Relax generic package filename restrictions](https://codeberg.org/forgejo/forgejo/commit/ea4755be6dfc8fc1f3c794eeaa2e2322b97d192e).
* [Prevent re-review and dismiss review actions on closed and merged PRs](https://codeberg.org/forgejo/forgejo/commit/23676bfea7ccbbe166a554115ea1f5f02800e379).
* [Add a warning for disallowed email domains](https://codeberg.org/forgejo/forgejo/commit/2559c80bec27a41967b355d214253a83b9ee5dad).
* [Skip email domain check when admins edit user emails](https://codeberg.org/forgejo/forgejo/commit/e7afba21ce2b02eb4230ba03752bd8b937f3e6ef).
* [Skip email domain check when admin users adds user manually](https://codeberg.org/forgejo/forgejo/commit/b6057a34db38e563473db00543a1e39fd743ca34).
* [Add support for API blob upload of release attachments](https://codeberg.org/forgejo/forgejo/commit/47a913d40d3417858f2ee51a7dbed64ca84eff60).
* [Allow options to disable user gpg keys configuration from the interface on app.ini](https://codeberg.org/forgejo/forgejo/commit/ee6ff937c0782b9cdc7ae1bc62b7eda83982d40f).
* [Allow options to disable user ssh keys configuration from the interface on app.ini](https://codeberg.org/forgejo/forgejo/commit/bb09ad2b63570c80418b4b9a10f7dbbb349448ab).
* [Fix content size does not match error when uploading lfs file](https://codeberg.org/forgejo/forgejo/commit/fb137d1e49c0436f1db093e2dc0a2350d63e1e29).
* [Add API to get merged PR of a commit](https://codeberg.org/forgejo/forgejo/commit/1608ef0ce9ce2ea1c87aef715d111cf441637d01).
* [Add API to get PR by base/head](https://codeberg.org/forgejo/forgejo/commit/feb189554e758ed27d1e309e5ec309d663e8f338).
* [Add attachment support for code review comments](https://codeberg.org/forgejo/forgejo/commit/f95fb8cc44d790e0ae71d3f879124a6ee9b07f66).
* [Add support for action artifact serve direct](https://codeberg.org/forgejo/forgejo/commit/1f8ad34e4391673a2eda434ea5e48ea084cdc814).
* [Show whether a PR is WIP inside popups](https://codeberg.org/forgejo/forgejo/commit/50f55f11c4f785b72a39e59b0fc12ae70ab8d8b5).
* [Add artifacts v4 jwt to job message and accept it](https://codeberg.org/forgejo/forgejo/commit/a9bc590d5d10b97bd8aa050ffb720e141a600064).
* [Fix some RPM registry flaws](https://codeberg.org/forgejo/forgejo/commit/461d8b53c2e51a8a6a1715ba40ac61d7e9f93971).
* [Add branch protection setting for ignoring stale approvals](https://codeberg.org/forgejo/forgejo/commit/5d3fdd121279c758f247a76e020799aa5e548feb).
* [Added instance-level variables](https://codeberg.org/forgejo/forgejo/commit/d0f24ff4cad05c1145afeca791e7d02fe146d46a).
* [Fix the wrong HTTP response status code for duplicate packages](https://codeberg.org/forgejo/forgejo/commit/5b6258a0b94737ec3db1ce418d0c933512a71f78).
* [Don't run push mirrors for archived repos](https://codeberg.org/forgejo/forgejo/commit/f3ba3e922dde7d12999a90d6cee15805a56cc7ff).
* [Support for grouping RPMs using paths](https://codeberg.org/forgejo/forgejo/commit/ba4d0b8ffbd78473273800f586ae8bde55cda6c5).
* [Fixes #27605: inline math blocks can't be preceded/followed by alphanumerical characters](https://codeberg.org/forgejo/forgejo/commit/2adc3a45fbd60126c0eab66b9cdd177a63bd4704).
* [Fix GPG subkey verify](https://codeberg.org/forgejo/forgejo/commit/5a674dd02ed3ea2853afa02dc15dcdadba069a6e).
* [Include encoding in signature payload](https://codeberg.org/forgejo/forgejo/commit/6925c0eee43980133896f9e4ee7e48e5751e9417).
* [Fix milestoneID filter bug in issue list](https://codeberg.org/forgejo/forgejo/commit/0da787f23737d252e6c80aa1a1f665e09dba0ea9).
* [Fix Citation modal responsiveness and clipboard copy](https://codeberg.org/forgejo/forgejo/commit/ca39d743636c9732f4422e130bac974555fb43c2).
* [Fix incorrect locale Tr for gpg command](https://codeberg.org/forgejo/forgejo/commit/071d871dcf8dd8097dc0af6d4baf304a2fbbe4e2).
* [Improve a11y document and dropdown item](https://codeberg.org/forgejo/forgejo/commit/1d4bf7e211db0866774fa3f6f563e15ffadac1f6).
* [Determine fuzziness of bleve indexer by keyword length](https://codeberg.org/forgejo/forgejo/commit/ab5f0b7558229b3ab5c3946a51e58b4caae775b0).
* [Fix ellipsis button not working if the last commit loading is deferred](https://codeberg.org/forgejo/forgejo/commit/1e29bccddbeb29eec3ceb507612851021ab4d60d).
* [Fix incorrect diff expander for deletion of last lines in a file](https://codeberg.org/forgejo/forgejo/commit/85bf170ff0d54471fe88903009a3fec4ef3e6e8c).
* [Do not exceed display for the PR page buttons on smaller screens](https://codeberg.org/forgejo/forgejo/commit/e7297d423f566a383c8861c4aaee028606591038).
* [Move citation button to proper place](https://codeberg.org/forgejo/forgejo/commit/eb4061babacfee2b72f4a33412530eb9f0de3b25).
* [Expire artifacts before deleting them physically](https://codeberg.org/forgejo/forgejo/commit/7f64e4d2a3f20b7d7de6542de5e0856c643e821f).
* [Fix can not select team reviewers when reviewers is empty](https://codeberg.org/forgejo/forgejo/commit/df439b6a983865ba559e517e5e93f5f1a53a97a0).
* [Fix default avatar image size in PR diff page](https://codeberg.org/forgejo/forgejo/commit/3aed8ae03475a430c0dc8e33f42fa9269a4844bd).
* [Fix branch list bug which displayed default branch twice](https://codeberg.org/forgejo/forgejo/commit/0e6fd0d1c1e31d22707e6f06124d5bf76361eaab).
* [Set the `isPermaLink` attribute to `false` in the `guid` sub-element](https://codeberg.org/forgejo/forgejo/commit/5574968ecbc34908dfa17b28bfc79c3490eaa685).
* [Fix long package version names overflowing](https://codeberg.org/forgejo/forgejo/commit/3d474110c181df7854576d78e46209908f7e1b52).
* [Fix wrong link in user and organization profile when using relative url](https://codeberg.org/forgejo/forgejo/commit/42149ff1a816501643ec2407ed61a83bf5b65059).
* [Fix session key conflict with database keyword](https://codeberg.org/forgejo/forgejo/commit/4c29c75968f520123f125e8305b2c29198664251).
* [Fix commit status in repo list](https://codeberg.org/forgejo/forgejo/commit/0abb5633e34fd14c2d49de0b4c98f7ba7d98a37e).
* [Fix incorrect action duration time when rerun the job before executed once](https://codeberg.org/forgejo/forgejo/commit/07ba4d9f87cf21b7ce87158ae5651cae3bb35604).
* [Fix missing mail reply address](https://codeberg.org/forgejo/forgejo/commit/3081e7e1536356346f73fb4a0d00101863b2cf05).
* [Filter inactive auth sources](https://codeberg.org/forgejo/forgejo/commit/e378545f3083990eb36ff5d72477662d9787280d).
* [Refactor Find Sources and fix bug when view a user who belongs to an inactive auth source](https://codeberg.org/forgejo/forgejo/commit/1bf5527eac6b947010c8faf408f6747de2a2384f).
* [Fix issue not showing on default board and add test](https://codeberg.org/forgejo/forgejo/commit/1eae2aadae0583ab092d6ed857bb727829aa52b7).
* [Improve file history UI and fix URL escaping bug](https://codeberg.org/forgejo/forgejo/commit/d1527dac3d1e68caf5a6f54c08144e28256e5c47).
* [Fix ldap admin privileges update bug](https://codeberg.org/forgejo/forgejo/commit/7ad31567cdc8206e0080b851a9b880729266b084).
* **other**
* [[PERFORMANCE] git check-attr on bare repo if supported](https://codeberg.org/forgejo/forgejo/pulls/2763)
* [[REFACTOR] [AGIT] Refactor the AGit code](https://codeberg.org/forgejo/forgejo/pulls/2386)
* [[REFACTOR] generation of JWT secret](https://codeberg.org/forgejo/forgejo/pulls/2227)
* [[REFACTOR] PKT protocol](https://codeberg.org/forgejo/forgejo/pulls/2868)
* [Remove .exe suffix when cross-compiling on Windows](https://codeberg.org/forgejo/forgejo/commit/6acce16ee3a03df1cc06c46398f594009a0e31b9).
* [Refactor repo header/list](https://codeberg.org/forgejo/forgejo/commit/65e190ae8bd6c72d8701a58d67b256c87b92c189).
* [Update register application URL for GitLab](https://codeberg.org/forgejo/forgejo/commit/64fcf0cb64d455d5ca1420aa832aa057cf61e6dd).
* [Update golang links to use https](https://codeberg.org/forgejo/forgejo/commit/8ef53c871bcb5c007b3640a347c7868585c9e4de).
* [Teams: new View button](https://codeberg.org/forgejo/forgejo/commit/e3afe4a248ac3a961f332e2ba221bedafa3dfb7e).
* [Commit-Dropdown: Show Author of commit if available](https://codeberg.org/forgejo/forgejo/commit/300c8dedfd01ba0ea63486b644e93aa2be6785b2).
* [Refactor dropzone](https://codeberg.org/forgejo/forgejo/commit/c1ac3e5891a49bedc5e54ed5811cb2c0e058c43c).
* [When the title in the issue has a value, set the text cursor at the end of the text.](https://codeberg.org/forgejo/forgejo/commit/8c2559a72603e07fe682efddd698e1fc190b2728).
* [Load citation JS only when needed](https://codeberg.org/forgejo/forgejo/commit/f2fc2dcfc9305a42242421c718ee3673bd1c851c).
* [Refactor markdown attention render](https://codeberg.org/forgejo/forgejo/commit/ec2201a3da5f18e55bfc0a54114ac935804f4ef8).
* [Light theme color enhancements](https://codeberg.org/forgejo/forgejo/commit/23e2ace77d1612cda09bc0d08690314e7321cca3).
* [Dark theme color enhancements](https://codeberg.org/forgejo/forgejo/commit/704a59e59584041f95939e3d90260173906f946a).
* [Refactor markup/csv: don't read all to memory](https://codeberg.org/forgejo/forgejo/commit/d413a8fcacc81b6f7039371408034c9c2fc6c15f).
* [Move all login and account creation page labels to be above inputs](https://codeberg.org/forgejo/forgejo/commit/3acea02eb66ea09248ff29eb6b9cefce29fcea37).
* [Fix Gitpod logic of setting ROOT_URL](https://codeberg.org/forgejo/forgejo/commit/e52d87758272c417bb9b30e944f9b0bd33d28cb7).
* [Fix broken following organization](https://codeberg.org/forgejo/forgejo/commit/fd3b4afa2b3621ece2d7d1587fd4b017142d75a0).
* [Don't do a full page load when clicking `Watch` or `Star`](https://codeberg.org/forgejo/forgejo/commit/6992ef98fc227a60cf06e0a06b9ae2492b3d61be).
* [Fix non-alphabetic sorting of repo topics](https://codeberg.org/forgejo/forgejo/commit/a240d5dfa7e261f2fb703cf24b1ba4dc6aa47bfd).
* [Make cross-reference issue links work in markdown documents again](https://codeberg.org/forgejo/forgejo/commit/12c0487e01d3fd9fe289345c53e8a220be55e864).
* [Fix tooltip of variable edit button](https://codeberg.org/forgejo/forgejo/commit/361839fb1c8bdfb8291bbcf9bd650b21a605bbd7).
* [Disable query token param in integration tests](https://codeberg.org/forgejo/forgejo/commit/33439b733a4f69640350b9cda370963ebe9d1e0a).
* [Add merge arrow direction and update styling](https://codeberg.org/forgejo/forgejo/commit/e522e774cae2240279fc48c349fc513c9d3353ee).
* [Add links to owner home page in explore](https://codeberg.org/forgejo/forgejo/commit/dd5693387e0642e1aba05b01eeb18139ce90ef5e).
* [Render PyPi long description as document](https://codeberg.org/forgejo/forgejo/commit/876a0cb3d652f42545abdb33dc4fd71a7c3343bf).
* [Ignore temporary files for directory size](https://codeberg.org/forgejo/forgejo/commit/cb8298b7178f5dde302604bfe34c658b725f16f8).
* [Make pushUpdate error verbose](https://codeberg.org/forgejo/forgejo/commit/1bfcdeef4cca0f5509476358e5931c13d37ed1ca).
* [Add download URL for executable files](https://codeberg.org/forgejo/forgejo/commit/9341b37520e5626352bf2df52e8dbace2985c0d7).
* [Improve profile for Organizations](https://codeberg.org/forgejo/forgejo/commit/089ac06969030b0886d4e20bf8f7a757f785f158).
* [Fix Show/hide filetree button on small displays](https://codeberg.org/forgejo/forgejo/commit/e31c6cfe6e30341c502302d1c0a03138f8bf5c9f).
* [Fix merge base commit for fast-forwarded GitLab PRs](https://codeberg.org/forgejo/forgejo/commit/02dae3f84b80047bef391960eea1350d551e4d72).
* [Align ISSUE_TEMPLATE with the new label system](https://codeberg.org/forgejo/forgejo/commit/248b7ee850ecdb538b22ddcfbe80b6f91be32b70).
* [Improve the list header in milestone page](https://codeberg.org/forgejo/forgejo/commit/8abc1aae4ab5b03be0bcbdd390bb903b54ccd21a).
## 1.21.11-1

View file

@ -142,7 +142,7 @@ func generate() ([]byte, error) {
}
}
// gitea customizations
// Forgejo customizations
i, ok := aliasMap["tada"]
if ok {
data[i].Aliases = append(data[i].Aliases, "hooray")

View file

@ -36,6 +36,7 @@ var microcmdUserChangePassword = &cli.Command{
&cli.BoolFlag{
Name: "must-change-password",
Usage: "User must change password",
Value: true,
},
},
}
@ -57,23 +58,18 @@ func runChangePassword(c *cli.Context) error {
return err
}
var mustChangePassword optional.Option[bool]
if c.IsSet("must-change-password") {
mustChangePassword = optional.Some(c.Bool("must-change-password"))
}
opts := &user_service.UpdateAuthOptions{
Password: optional.Some(c.String("password")),
MustChangePassword: mustChangePassword,
MustChangePassword: optional.Some(c.Bool("must-change-password")),
}
if err := user_service.UpdateAuth(ctx, user, opts); err != nil {
switch {
case errors.Is(err, password.ErrMinLength):
return fmt.Errorf("Password is not long enough. Needs to be at least %d", setting.MinPasswordLength)
return fmt.Errorf("password is not long enough, needs to be at least %d characters", setting.MinPasswordLength)
case errors.Is(err, password.ErrComplexity):
return errors.New("Password does not meet complexity requirements")
return errors.New("password does not meet complexity requirements")
case errors.Is(err, password.ErrIsPwned):
return errors.New("The password you chose is on a list of stolen passwords previously exposed in public data breaches. Please try again with a different password.\nFor more details, see https://haveibeenpwned.com/Passwords")
return errors.New("the password is in a list of stolen passwords previously exposed in public data breaches, please try again with a different password, to see more details: https://haveibeenpwned.com/Passwords")
default:
return err
}

View file

@ -8,6 +8,7 @@ import (
"fmt"
auth_model "code.gitea.io/gitea/models/auth"
"code.gitea.io/gitea/models/db"
user_model "code.gitea.io/gitea/models/user"
pwd "code.gitea.io/gitea/modules/auth/password"
"code.gitea.io/gitea/modules/optional"
@ -49,6 +50,7 @@ var microcmdUserCreate = &cli.Command{
Name: "must-change-password",
Usage: "Set this option to false to prevent forcing the user to change their password after initial login",
Value: true,
DisableDefaultText: true,
},
&cli.IntFlag{
Name: "random-password-length",
@ -72,10 +74,10 @@ func runCreateUser(c *cli.Context) error {
}
if c.IsSet("name") && c.IsSet("username") {
return errors.New("Cannot set both --name and --username flags")
return errors.New("cannot set both --name and --username flags")
}
if !c.IsSet("name") && !c.IsSet("username") {
return errors.New("One of --name or --username flags must be set")
return errors.New("one of --name or --username flags must be set")
}
if c.IsSet("password") && c.IsSet("random-password") {
@ -111,12 +113,21 @@ func runCreateUser(c *cli.Context) error {
return errors.New("must set either password or random-password flag")
}
changePassword := c.Bool("must-change-password")
// If this is the first user being created.
// Take it as the admin and don't force a password update.
if n := user_model.CountUsers(ctx, nil); n == 0 {
changePassword = false
isAdmin := c.Bool("admin")
mustChangePassword := true // always default to true
if c.IsSet("must-change-password") {
// if the flag is set, use the value provided by the user
mustChangePassword = c.Bool("must-change-password")
} else {
// check whether there are users in the database
hasUserRecord, err := db.IsTableNotEmpty(&user_model.User{})
if err != nil {
return fmt.Errorf("IsTableNotEmpty: %w", err)
}
if !hasUserRecord && isAdmin {
// if this is the first admin being created, don't force to change password (keep the old behavior)
mustChangePassword = false
}
}
restricted := optional.None[bool]()
@ -132,8 +143,8 @@ func runCreateUser(c *cli.Context) error {
Name: username,
Email: c.String("email"),
Passwd: password,
IsAdmin: c.Bool("admin"),
MustChangePassword: changePassword,
IsAdmin: isAdmin,
MustChangePassword: mustChangePassword,
Visibility: visibility,
}

View file

@ -2394,22 +2394,6 @@ LEVEL = Info
;; Enable issue by repository metrics; default is false
;ENABLED_ISSUE_BY_REPOSITORY = false
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;[task]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Task queue type, could be `channel` or `redis`.
;QUEUE_TYPE = channel
;;
;; Task queue length, available only when `QUEUE_TYPE` is `channel`.
;QUEUE_LENGTH = 1000
;;
;; Task queue connection string, available only when `QUEUE_TYPE` is `redis`.
;; If there is a password of redis, use `redis://127.0.0.1:6379/0?pool_size=100&idle_timeout=180s` or `redis+cluster://127.0.0.1:6379/0?pool_size=100&idle_timeout=180s` for `redis-clsuter`.
;QUEUE_CONN_STR = "redis://127.0.0.1:6379/0?pool_size=100&idle_timeout=180s"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;[migrations]

@ -1 +0,0 @@
Subproject commit 877d11b403b2b573fe435b792245b403367a2bb2

View file

@ -83,6 +83,9 @@ func (actions ActionList) loadRepoOwner(ctx context.Context, userMap map[int64]*
_, alreadyLoaded := userMap[action.Repo.OwnerID]
return action.Repo.OwnerID, !alreadyLoaded
})
if len(missingUserIDs) == 0 {
return nil
}
if err := db.GetEngine(ctx).
In("id", missingUserIDs).
@ -129,6 +132,9 @@ func (actions ActionList) LoadComments(ctx context.Context) error {
commentIDs = append(commentIDs, action.CommentID)
}
}
if len(commentIDs) == 0 {
return nil
}
commentsMap := make(map[int64]*issues_model.Comment, len(commentIDs))
if err := db.GetEngine(ctx).In("id", commentIDs).Find(&commentsMap); err != nil {

View file

@ -150,7 +150,7 @@ func preprocessDatabaseCollation(x *xorm.Engine) {
// check column collation, and show warning/error to end users -- no need to fatal, do not block the startup
if !r.IsCollationCaseSensitive(r.DatabaseCollation) {
log.Warn("Current database is using a case-insensitive collation %q, although Gitea could work with it, there might be some rare cases which don't work as expected.", r.DatabaseCollation)
log.Warn("Current database is using a case-insensitive collation %q, although Forgejo could work with it, there might be some rare cases which don't work as expected.", r.DatabaseCollation)
}
if len(r.InconsistentCollationColumns) > 0 {

View file

@ -293,8 +293,8 @@ func MaxBatchInsertSize(bean any) int {
}
// IsTableNotEmpty returns true if table has at least one record
func IsTableNotEmpty(tableName string) (bool, error) {
return x.Table(tableName).Exist()
func IsTableNotEmpty(beanOrTableName any) (bool, error) {
return x.Table(beanOrTableName).Exist()
}
// DeleteAllRecords will delete all the records of this table

View file

@ -660,15 +660,15 @@ func Migrate(x *xorm.Engine) error {
v := currentVersion.Version
if minDBVersion > v {
log.Fatal(`Gitea no longer supports auto-migration from your previously installed version.
log.Fatal(`Forgejo no longer supports auto-migration from your previously installed version.
Please try upgrading to a lower version first (suggested v1.6.4), then upgrade to this version.`)
return nil
}
// Downgrading Gitea's database version not supported
// Downgrading Forgejo database version is not supported
if int(v-minDBVersion) > len(migrations) {
msg := fmt.Sprintf("Your database (migration version: %d) is for a newer Gitea, you can not use the newer database for this old Gitea release (%d).", v, minDBVersion+len(migrations))
msg += "\nGitea will exit to keep your database safe and unchanged. Please use the correct Gitea release, do not change the migration version manually (incorrect manual operation may lose data)."
msg := fmt.Sprintf("Your database (migration version: %d) is for a newer Forgejo, you can not use the newer database for this old Forgejo release (%d).", v, minDBVersion+len(migrations))
msg += "\nForgejo will exit to keep your database safe and unchanged. Please use the correct Forgejo release, do not change the migration version manually (incorrect manual operation may lose data)."
if !setting.IsProd {
msg += fmt.Sprintf("\nIf you are in development and really know what you're doing, you can force changing the migration version by executing: UPDATE version SET version=%d WHERE id=1;", minDBVersion+len(migrations))
}

View file

@ -287,9 +287,10 @@ func (opts *PackageSearchOptions) configureOrderBy(e db.Engine) {
// SearchVersions gets all versions of packages matching the search options
func SearchVersions(ctx context.Context, opts *PackageSearchOptions) ([]*PackageVersion, int64, error) {
sess := db.GetEngine(ctx).
Where(opts.ToConds()).
Select("package_version.*").
Table("package_version").
Join("INNER", "package", "package.id = package_version.package_id")
Join("INNER", "package", "package.id = package_version.package_id").
Where(opts.ToConds())
opts.configureOrderBy(sess)
@ -304,19 +305,18 @@ func SearchVersions(ctx context.Context, opts *PackageSearchOptions) ([]*Package
// SearchLatestVersions gets the latest version of every package matching the search options
func SearchLatestVersions(ctx context.Context, opts *PackageSearchOptions) ([]*PackageVersion, int64, error) {
cond := opts.ToConds().
And(builder.Expr("pv2.id IS NULL"))
joinCond := builder.Expr("package_version.package_id = pv2.package_id AND (package_version.created_unix < pv2.created_unix OR (package_version.created_unix = pv2.created_unix AND package_version.id < pv2.id))")
if opts.IsInternal.Has() {
joinCond = joinCond.And(builder.Eq{"pv2.is_internal": opts.IsInternal.Value()})
}
in := builder.
Select("MAX(package_version.id)").
From("package_version").
InnerJoin("package", "package.id = package_version.package_id").
Where(opts.ToConds()).
GroupBy("package_version.package_id")
sess := db.GetEngine(ctx).
Select("package_version.*").
Table("package_version").
Join("LEFT", "package_version pv2", joinCond).
Join("INNER", "package", "package.id = package_version.package_id").
Where(cond)
Where(builder.In("package_version.id", in))
opts.configureOrderBy(sess)

View file

@ -140,7 +140,7 @@ func SearchUsers(ctx context.Context, opts *SearchUserOptions) (users []*User, _
sessQuery := opts.toSearchQueryBase(ctx).OrderBy(opts.OrderBy.String())
defer sessQuery.Close()
if opts.Page != 0 {
if opts.PageSize > 0 {
sessQuery = db.SetSessionPagination(sessQuery, opts)
}

View file

@ -130,7 +130,7 @@ then resh (ר), and finally heh (ה) (which should appear leftmost).`,
},
{
// UTF-8/16/32 all use the same codepoint for BOM
// Gitea could read UTF-16/32 content and convert into UTF-8 internally then render it, so we only process UTF-8 internally
// Forgejo could read UTF-16/32 content and convert into UTF-8 internally then render it, so we only process UTF-8 internally
name: "UTF BOM",
text: "\xef\xbb\xbftest",
result: "\xef\xbb\xbftest",

View file

@ -462,7 +462,7 @@ func parseCommitFileStatus(fileStatus *CommitFileStatus, stdout io.Reader) {
_, _ = rd.Discard(1)
}
for {
modifier, err := rd.ReadSlice('\x00')
modifier, err := rd.ReadString('\x00')
if err != nil {
if err != io.EOF {
log.Error("Unexpected error whilst reading from git log --name-status. Error: %v", err)

View file

@ -158,7 +158,7 @@ func Init() {
if err := recover(); err != nil {
log.Error("PANIC whilst initializing repository indexer: %v\nStacktrace: %s", err, log.Stack(2))
log.Error("The indexer files are likely corrupted and may need to be deleted")
log.Error("You can completely remove the \"%s\" directory to make Gitea recreate the indexes", setting.Indexer.RepoPath)
log.Error("You can completely remove the \"%s\" directory to make Forgejo recreate the indexes", setting.Indexer.RepoPath)
}
}()
@ -176,7 +176,7 @@ func Init() {
if err := recover(); err != nil {
log.Error("PANIC whilst initializing repository indexer: %v\nStacktrace: %s", err, log.Stack(2))
log.Error("The indexer files are likely corrupted and may need to be deleted")
log.Error("You can completely remove the \"%s\" index to make Gitea recreate the indexes", setting.Indexer.RepoConnStr)
log.Error("You can completely remove the \"%s\" index to make Forgejo recreate the indexes", setting.Indexer.RepoConnStr)
}
}()

View file

@ -55,7 +55,7 @@ func (i *Indexer) Init(_ context.Context) (bool, error) {
}
if version != 0 {
log.Warn("Found older bleve index with version %d, Gitea will remove it and rebuild", version)
log.Warn("Found older bleve index with version %d, Forgejo will remove it and rebuild", version)
}
indexMapping, err := i.mappingGetter()

View file

@ -62,7 +62,7 @@ func (i *Indexer) checkOldIndexes(ctx context.Context) {
indexName := versionedIndexName(i.indexName, v)
exists, err := i.Client.IndexExists(indexName).Do(ctx)
if err == nil && exists {
log.Warn("Found older elasticsearch index named %q, Gitea will keep the old NOT DELETED. You can delete the old version after the upgrade succeed.", indexName)
log.Warn("Found older elasticsearch index named %q, Forgejo will keep the old NOT DELETED. You can delete the old version after the upgrade succeed.", indexName)
}
}
}

View file

@ -32,7 +32,7 @@ func (i *Indexer) checkOldIndexes() {
indexName := versionedIndexName(i.indexName, v)
_, err := i.Client.GetIndex(indexName)
if err == nil {
log.Warn("Found older meilisearch index named %q, Gitea will keep the old NOT DELETED. You can delete the old version after the upgrade succeed.", indexName)
log.Warn("Found older meilisearch index named %q, Forgejo will keep the old NOT DELETED. You can delete the old version after the upgrade succeed.", indexName)
}
}
}

View file

@ -85,7 +85,7 @@ func InitIssueIndexer(syncReindex bool) {
if err := recover(); err != nil {
log.Error("PANIC whilst initializing issue indexer: %v\nStacktrace: %s", err, log.Stack(2))
log.Error("The indexer files are likely corrupted and may need to be deleted")
log.Error("You can completely remove the %q directory to make Gitea recreate the indexes", setting.Indexer.IssuePath)
log.Error("You can completely remove the %q directory to make Forgejo recreate the indexes", setting.Indexer.IssuePath)
globalIndexer.Store(dummyIndexer)
log.Fatal("PID: %d Unable to initialize the Bleve Issue Indexer at path: %s Error: %v", os.Getpid(), setting.Indexer.IssuePath, err)
}

View file

@ -893,7 +893,7 @@ func issueIndexPatternProcessor(ctx *RenderContext, node *html.Node) {
} else {
// Path determines the type of link that will be rendered. It's unknown at this point whether
// the linked item is actually a PR or an issue. Luckily it's of no real consequence because
// Gitea will redirect on click as appropriate.
// Forgejo will redirect on click as appropriate.
path := "issues"
if ref.IsPull {
path = "pulls"

View file

@ -224,7 +224,7 @@ func getRedisOptions(uri *url.URL) *redis.UniversalOptions {
if db, err := strconv.Atoi(uri.Path[1:]); err == nil {
opts.DB = db
} else {
log.Error("Provided database identifier '%s' is not a valid integer. Gitea will ignore this option.", uri.Path)
log.Error("Provided database identifier '%s' is not a valid integer. Forgejo will ignore this option.", uri.Path)
}
}

View file

@ -6,9 +6,6 @@ package session
import (
"net/http"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/web/middleware"
"gitea.com/go-chi/session"
)
@ -21,10 +18,12 @@ type Store interface {
// RegenerateSession regenerates the underlying session and returns the new store
func RegenerateSession(resp http.ResponseWriter, req *http.Request) (Store, error) {
// Ensure that a cookie with a trailing slash does not take precedence over
// the cookie written by the middleware.
middleware.DeleteLegacySiteCookie(resp, setting.SessionConfig.CookieName)
for _, f := range BeforeRegenerateSession {
f(resp, req)
}
s, err := session.RegenerateSession(resp, req)
return s, err
}
// BeforeRegenerateSession is a list of functions that are called before a session is regenerated.
var BeforeRegenerateSession []func(http.ResponseWriter, *http.Request)

View file

@ -38,6 +38,24 @@ func loadIncomingEmailFrom(rootCfg ConfigProvider) {
return
}
// Handle aliases
sec := rootCfg.Section("email.incoming")
if sec.HasKey("USER") && !sec.HasKey("USERNAME") {
IncomingEmail.Username = sec.Key("USER").String()
}
if sec.HasKey("PASSWD") && !sec.HasKey("PASSWORD") {
IncomingEmail.Password = sec.Key("PASSWD").String()
}
// Infer Port if not set
if IncomingEmail.Port == 0 {
if IncomingEmail.UseTLS {
IncomingEmail.Port = 993
} else {
IncomingEmail.Port = 143
}
}
if err := checkReplyToAddress(IncomingEmail.ReplyToAddress); err != nil {
log.Fatal("Invalid incoming_mail.REPLY_TO_ADDRESS (%s): %v", IncomingEmail.ReplyToAddress, err)
}

View file

@ -0,0 +1,74 @@
// Copyright 2024 The Forgejo Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package setting
import (
"testing"
"github.com/stretchr/testify/assert"
)
func Test_loadIncomingEmailFrom(t *testing.T) {
makeBaseConfig := func() (ConfigProvider, ConfigSection) {
cfg, _ := NewConfigProviderFromData("")
sec := cfg.Section("email.incoming")
sec.NewKey("ENABLED", "true")
sec.NewKey("REPLY_TO_ADDRESS", "forge+%{token}@example.com")
return cfg, sec
}
resetIncomingEmailPort := func() func() {
return func() {
IncomingEmail.Port = 0
}
}
t.Run("aliases", func(t *testing.T) {
cfg, sec := makeBaseConfig()
sec.NewKey("USER", "jane.doe@example.com")
sec.NewKey("PASSWD", "y0u'll n3v3r gUess th1S!!1")
loadIncomingEmailFrom(cfg)
assert.EqualValues(t, "jane.doe@example.com", IncomingEmail.Username)
assert.EqualValues(t, "y0u'll n3v3r gUess th1S!!1", IncomingEmail.Password)
})
t.Run("Port settings", func(t *testing.T) {
t.Run("no port, no tls", func(t *testing.T) {
defer resetIncomingEmailPort()()
cfg, sec := makeBaseConfig()
// False is the default, but we test it explicitly.
sec.NewKey("USE_TLS", "false")
loadIncomingEmailFrom(cfg)
assert.EqualValues(t, 143, IncomingEmail.Port)
})
t.Run("no port, with tls", func(t *testing.T) {
defer resetIncomingEmailPort()()
cfg, sec := makeBaseConfig()
sec.NewKey("USE_TLS", "true")
loadIncomingEmailFrom(cfg)
assert.EqualValues(t, 993, IncomingEmail.Port)
})
t.Run("port overrides tls", func(t *testing.T) {
defer resetIncomingEmailPort()()
cfg, sec := makeBaseConfig()
sec.NewKey("PORT", "1993")
sec.NewKey("USE_TLS", "true")
loadIncomingEmailFrom(cfg)
assert.EqualValues(t, 1993, IncomingEmail.Port)
})
})
}

View file

@ -134,6 +134,14 @@ func loadMailerFrom(rootCfg ConfigProvider) {
sec.Key("PROTOCOL").SetValue("smtp+starttls")
}
// Handle aliases
if sec.HasKey("USERNAME") && !sec.HasKey("USER") {
sec.Key("USER").SetValue(sec.Key("USERNAME").String())
}
if sec.HasKey("PASSWORD") && !sec.HasKey("PASSWD") {
sec.Key("PASSWD").SetValue(sec.Key("PASSWORD").String())
}
// Set default values & validate
sec.Key("NAME").MustString(AppName)
sec.Key("PROTOCOL").In("", []string{"smtp", "smtps", "smtp+starttls", "smtp+unix", "sendmail", "dummy"})

View file

@ -38,4 +38,17 @@ func Test_loadMailerFrom(t *testing.T) {
assert.EqualValues(t, kase.SMTPPort, MailService.SMTPPort)
})
}
t.Run("property aliases", func(t *testing.T) {
cfg, _ := NewConfigProviderFromData("")
sec := cfg.Section("mailer")
sec.NewKey("ENABLED", "true")
sec.NewKey("USERNAME", "jane.doe@example.com")
sec.NewKey("PASSWORD", "y0u'll n3v3r gUess th1S!!1")
loadMailerFrom(cfg)
assert.EqualValues(t, "jane.doe@example.com", MailService.User)
assert.EqualValues(t, "y0u'll n3v3r gUess th1S!!1", MailService.Passwd)
})
}

View file

@ -67,8 +67,8 @@ func IsRunUserMatchCurrentUser(runUser string) (string, bool) {
// PrepareAppDataPath creates app data directory if necessary
func PrepareAppDataPath() error {
// FIXME: There are too many calls to MkdirAll in old code. It is incorrect.
// For example, if someDir=/mnt/vol1/gitea-home/data, if the mount point /mnt/vol1 is not mounted when Gitea runs,
// then gitea will make new empty directories in /mnt/vol1, all are stored in the root filesystem.
// For example, if someDir=/mnt/vol1/gitea-home/data, if the mount point /mnt/vol1 is not mounted when Forgejo runs,
// then Forgejo will make new empty directories in /mnt/vol1, all are stored in the root filesystem.
// The correct behavior should be: creating parent directories is end users' duty. We only create sub-directories in existing parent directories.
// For quickstart, the parent directories should be created automatically for first startup (eg: a flag or a check of INSTALL_LOCK).
// Now we can take the first step to do correctly (using Mkdir) in other packages, and prepare the AppDataPath here, then make a refactor in future.
@ -103,7 +103,7 @@ func InitCfgProvider(file string) {
func MustInstalled() {
if !InstallLock {
log.Fatal(`Unable to load config file for a installed Gitea instance, you should either use "--config" to set your config file (app.ini), or run "gitea web" command to install Gitea.`)
log.Fatal(`Unable to load config file for a installed Forgejo instance, you should either use "--config" to set your config file (app.ini), or run "forgejo web" command to install Forgejo.`)
}
}
@ -163,7 +163,7 @@ func loadRunModeFrom(rootCfg ConfigProvider) {
rootSec := rootCfg.Section("")
RunUser = rootSec.Key("RUN_USER").MustString(user.CurrentUsername())
// The following is a purposefully undocumented option. Please do not run Gitea as root. It will only cause future headaches.
// The following is a purposefully undocumented option. Please do not run Forgejo as root. It will only cause future headaches.
// Please don't use root as a bandaid to "fix" something that is broken, instead the broken thing should instead be fixed properly.
unsafeAllowRunAsRoot := ConfigSectionKeyBool(rootSec, "I_AM_BEING_UNSAFE_RUNNING_AS_ROOT")
unsafeAllowRunAsRoot = unsafeAllowRunAsRoot || util.OptionalBoolParse(os.Getenv("GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT")).Value()
@ -183,9 +183,9 @@ func loadRunModeFrom(rootCfg ConfigProvider) {
if os.Getuid() == 0 {
if !unsafeAllowRunAsRoot {
// Special thanks to VLC which inspired the wording of this messaging.
log.Fatal("Gitea is not supposed to be run as root. Sorry. If you need to use privileged TCP ports please instead use setcap and the `cap_net_bind_service` permission")
log.Fatal("Forgejo is not supposed to be run as root. Sorry. If you need to use privileged TCP ports please instead use setcap and the `cap_net_bind_service` permission")
}
log.Critical("You are running Gitea using the root user, and have purposely chosen to skip built-in protections around this. You have been warned against this.")
log.Critical("You are running Forgejo using the root user, and have purposely chosen to skip built-in protections around this. You have been warned against this.")
}
}

View file

@ -0,0 +1,10 @@
// Copyright 2024 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package structs
// Compare represents a comparison between two commits.
type Compare struct {
TotalCommits int `json:"total_commits"` // Total number of commits in the comparison.
Commits []*Commit `json:"commits"` // List of commits in the comparison.
}

View file

@ -19,6 +19,8 @@ type User struct {
// the user's authentication sign-in name.
// default: empty
LoginName string `json:"login_name"`
// The ID of the user's Authentication Source
SourceID int64 `json:"source_id"`
// the user's full name
FullName string `json:"full_name"`
// swagger:strfmt email

View file

@ -136,11 +136,11 @@ func wrapTmplErrMsg(msg string) {
return
}
if setting.IsProd {
// in prod mode, Gitea must have correct templates to run
log.Fatal("Gitea can't run with template errors: %s", msg)
// in prod mode, Forgejo must have correct templates to run
log.Fatal("Forgejo can't run with template errors: %s", msg)
} else {
// in dev mode, do not need to really exit, because the template errors could be fixed by developer soon and the templates get reloaded
log.Error("There are template errors but Gitea continues to run in dev mode: %s", msg)
log.Error("There are template errors but Forgejo continues to run in dev mode: %s", msg)
}
}

View file

@ -9,6 +9,7 @@ import (
"net/url"
"strings"
"code.gitea.io/gitea/modules/session"
"code.gitea.io/gitea/modules/setting"
)
@ -48,12 +49,12 @@ func SetSiteCookie(resp http.ResponseWriter, name, value string, maxAge int) {
// Previous versions would use a cookie path with a trailing /.
// These are more specific than cookies without a trailing /, so
// we need to delete these if they exist.
DeleteLegacySiteCookie(resp, name)
deleteLegacySiteCookie(resp, name)
}
// DeleteLegacySiteCookie deletes the cookie with the given name at the cookie
// deleteLegacySiteCookie deletes the cookie with the given name at the cookie
// path with a trailing /, which would unintentionally override the cookie.
func DeleteLegacySiteCookie(resp http.ResponseWriter, name string) {
func deleteLegacySiteCookie(resp http.ResponseWriter, name string) {
if setting.SessionConfig.CookiePath == "" || strings.HasSuffix(setting.SessionConfig.CookiePath, "/") {
// If the cookie path ends with /, no legacy cookies will take
// precedence, so do nothing. The exception is that cookies with no
@ -74,3 +75,11 @@ func DeleteLegacySiteCookie(resp http.ResponseWriter, name string) {
}
resp.Header().Add("Set-Cookie", cookie.String())
}
func init() {
session.BeforeRegenerateSession = append(session.BeforeRegenerateSession, func(resp http.ResponseWriter, _ *http.Request) {
// Ensure that a cookie with a trailing slash does not take precedence over
// the cookie written by the middleware.
deleteLegacySiteCookie(resp, setting.SessionConfig.CookieName)
})
}

View file

@ -0,0 +1,27 @@
Copyright (C) 2006,2007,2009 NTT (Nippon Telegraph and Telephone
Corporation). All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above
copyright notice, this list of conditions and the following
disclaimer as the first lines of this file unmodified.
2. Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
THIS SOFTWARE IS PROVIDED BY NTT "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL NTT BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.

View file

@ -0,0 +1,13 @@
Copyright (c) 2000 by Sun Microsystems, Inc.
All rights reserved.
Permission to use, copy, modify, and distribute this software and its
documentation is hereby granted, provided that the above copyright
notice appears in all copies.
SUN MAKES NO REPRESENTATION OR WARRANTIES ABOUT THE SUITABILITY OF
THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES

7
options/license/pkgconf Normal file
View file

@ -0,0 +1,7 @@
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
This software is provided 'as is' and without any warranty, express or
implied. In no event shall the authors be liable for any damages arising
from the use of this software.

View file

@ -135,6 +135,9 @@ email_notifications.disable = Изключване на известията п
delete_account = Изтриване на акаунта ви
confirm_delete_account = Потвърждаване на изтриването
email_notifications.onmention = Ел. поща само при споменаване
pronouns_unspecified = Непосочени
pronouns = Местоимения
gpg_token_code = echo "%s" | gpg -a --default-key %s --detach-sig
[packages]
container.labels.value = Стойност
@ -157,6 +160,7 @@ settings.delete.success = Пакетът бе изтрит.
settings.delete = Изтриване на пакета
container.details.platform = Платформа
settings.delete.error = Неуспешно изтриване на пакет.
installation = Инсталация
[tool]
hours = %d часа
@ -290,7 +294,7 @@ settings.discord_username = Потребителско име
issues.filter_sort.mostforks = Най-много разклонения
activity = Дейност
issues = Задачи
settings.update_settings = Обновяване на настройките
settings.update_settings = Запазване на настройките
visibility = Видимост
settings.site = Уебсайт
watchers = Наблюдаващи
@ -411,8 +415,8 @@ repo_gitignore_helper = Изберете .gitignore шаблони.
auto_init = Да се инициализира хранилище (Добавя .gitignore, License и README)
template.issue_labels = Етикети за задачите
migrate_items_labels = Етикети
issues.label_templates.title = Зареждане на предварително зададен набор от етикети
issues.label_templates.helper = Изберете набор от етикети
issues.label_templates.title = Зареждане на предв. зададен набор от етикети
issues.label_templates.helper = Изберете предв. зададен набор от етикети
projects.template.desc = Шаблон
projects.card_type.text_only = Само текст
projects.card_type.images_and_text = Изображения и текст
@ -505,7 +509,7 @@ wiki.filter_page = Филтриране на страница
wiki.back_to_wiki = Обратно към уики страницата
wiki.wiki_page_revisions = Ревизии на уики страницата
wiki.file_revision = Ревизия на страницата
activity.title.issues_created_by = %s създадена от %s
activity.title.issues_created_by = %s създадени от %s
wiki.delete_page_notice_1 = Изтриването на уики страницата "%s" не може да бъде отменено. Продължаване?
wiki.page_name_desc = Въведете име за тази уики страница. Някои специални имена са: "Home", "_Sidebar" и "_Footer".
wiki.page_already_exists = Вече съществува уики страница със същото име.
@ -644,16 +648,16 @@ issues.filter_assginee_no_select = Всички изпълнители
issues.filter_assginee_no_assignee = Без изпълнител
activity.opened_prs_count_1 = Предложена заявка за сливане
activity.opened_prs_count_n = Предложени заявки за сливане
activity.title.prs_merged_by = %s слята от %s
activity.title.prs_merged_by = %s слети от %s
activity.merged_prs_label = Слята
activity.opened_prs_label = Предложена
activity.title.issues_closed_from = %s затворена от %s
activity.title.issues_closed_from = %s затворени от %s
activity.closed_issue_label = Затворена
activity.new_issue_label = Отворена
activity.title.releases_1 = %d издание
activity.title.releases_n = %d издания
milestones.completeness = <strong>%d%%</strong> Завършен
activity.title.prs_opened_by = %s предложена от %s
activity.title.prs_opened_by = %s предложени от %s
issues.action_milestone_no_select = Без етап
issues.action_assignee_no_select = Без изпълнител
milestones.edit = Редактиране на етапа
@ -672,7 +676,7 @@ issues.action_assignee = Изпълнител
milestones.closed = Затворен %s
milestones.open = Отваряне
milestones.close = Затваряне
issues.label_templates.use = Използване на набор от етикети
issues.label_templates.use = Използване на предв. зададен набор от етикети
issues.add_milestone_at = `добави това към етапа <b>%s</b> %s`
issues.add_label = добави етикета %s %s
issues.add_labels = добави етикети %s %s
@ -741,7 +745,7 @@ issues.due_date_form_edit = Редактиране
issues.due_date_form_remove = Премахване
issues.due_date_modified = промени крайния срок от %[2]s на %[1]s %[3]s
pulls.compare_changes = Нова заявка за сливане
activity.title.releases_published_by = %s публикувано от %s
activity.title.releases_published_by = %s публикувани от %s
topic.manage_topics = Управление на темите
topic.done = Готово
find_file.go_to_file = Отиване към файл
@ -1114,6 +1118,16 @@ release.download_count_few = %s изтегляния
branch.restore_success = Клонът "%s" е възстановен.
tag.create_tag_from = Създаване на нов маркер от "%s"
branch.create_new_branch = Създаване на клон от клон:
pulls.status_checks_show_all = Показване на всички проверки
size_format = %[1]s: %[2]s; %[3]s: %[4]s
pulls.filter_changes_by_commit = Филтриране по подаване
issues.ref_closing_from = `<a href="%[3]s">спомена заявка за сливане %[4]s, която ще затвори тази задача</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from = `от %[1]s`
issues.ref_reopening_from = `<a href="%[3]s">спомена заявка за сливане %[4]s, която ще отвори наново тази задача</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.draft_title = Чернова
pulls.reopen_to_merge = Моля, отворете наново тази заявка за сливане, за да извършите сливане.
pulls.cant_reopen_deleted_branch = Тази заявка за сливане не може да бъде отворена наново, защото клонът бе изтрит.
pulls.status_checks_hide_all = Скриване на всички проверки
[modal]
confirm = Потвърждаване
@ -1271,6 +1285,7 @@ issue.action.review = <b>@%[1]s</b> коментира в тази заявка
issue.action.reopen = <b>@%[1]s</b> отвори наново #%[2]d.
issue.action.approve = <b>@%[1]s</b> одобри тази заявка за сливане.
issue.action.reject = <b>@%[1]s</b> поиска промени в тази заявка за сливане.
register_notify.title = %[1]s, добре дошли в %[2]s
[user]
joined_on = Присъединени на %s
@ -1295,6 +1310,8 @@ email_visibility.limited = Вашият адрес на ел. поща е вид
disabled_public_activity = Този потребител е изключил публичната видимост на дейността.
email_visibility.private = Вашият адрес на ел. поща е видим само за вас и администраторите
show_on_map = Показване на това място на картата
followers_one = %d последовател
following_one = %d следван
[home]
filter = Други филтри
@ -1390,6 +1407,7 @@ packages.type = Тип
orgs.teams = Екипи
orgs.members = Участници
config_settings = Настройки
users.details = Потребителски данни
[error]
not_found = Целта не може да бъде намерена.
@ -1425,6 +1443,12 @@ team_name_been_taken = Името на екипа вече е заето.
org_name_been_taken = Името на организацията вече е заето.
still_own_packages = Вашият акаунт притежава един или повече пакети, първо ги изтрийте.
still_own_repo = Вашият акаунт притежава едно или повече хранилища, първо ги изтрийте или прехвърлете.
FullName = Пълно име
Description = Описание
Pronouns = Местоимения
Biography = Биография
Website = Уебсайт
Location = Местоположение
[action]
close_issue = `затвори задача <a href="%[1]s">%[3]s#%[2]s</a>`
@ -1550,6 +1574,9 @@ less = По-малко
number_of_contributions_in_the_last_12_months = %s приноса през последните 12 месеца
contributions_zero = Няма приноси
more = Повече
contributions_one = принос
contributions_few = приноса
contributions_format = {contributions} на {day} {month}, {year}
[git.filemode]
directory = Директория
@ -1588,6 +1615,7 @@ commit_kind = Търсене на подавания...
project_kind = Търсене на проекти...
package_kind = Търсене на пакети...
search = Търсене...
branch_kind = Търсене на клонове...
[markup]
filepreview.lines = Редове от %[1]d до %[2]d в %[3]s

View file

@ -633,6 +633,14 @@ admin_cannot_delete_self=Nemůžete se smazat, dokud jste správce. Nejdříve p
unset_password = Tento uživatel nemá nastavené heslo.
unsupported_login_type = U tohoto typu účtu není funkce odstranění účtu podporována.
required_prefix = Vstup musí začínat textem „%s“
FullName = Celé jméno
Description = Popis
Pronouns = Zájmena
Website = Webová stránka
Location = Umístění
To = Název větve
Biography = Životopis
AccessToken = Přístupový token
[user]
change_avatar=Změnit váš avatar…
@ -2084,7 +2092,7 @@ settings.mirror_settings.push_mirror.edit_sync_time=Upravit interval synchroniza
settings.sync_mirror=Synchronizovat nyní
settings.site=Webová stránka
settings.update_settings=Aktualizovat nastavení
settings.update_settings=Uložit nastavení
settings.update_mirror_settings=Aktualizovat nastavení zrcadla
settings.branches.switch_default_branch=Přepnout výchozí větev
settings.branches.update_default_branch=Aktualizovat výchozí větev
@ -2342,7 +2350,7 @@ settings.protected_branch.delete_rule=Odstranit pravidlo
settings.protected_branch_can_push=Povolit nahrání?
settings.protected_branch_can_push_yes=Můžete nahrávat
settings.protected_branch_can_push_no=Nemůžete nahrávat
settings.branch_protection=Pravidla ochrany větve pro větev „<b>%s</b>“
settings.branch_protection=Pravidla ochrany pro větev „<b>%s</b>“
settings.protect_this_branch=Povolit ochranu větve
settings.protect_this_branch_desc=Zabraňuje smazání a omezuje gitu nahrávání a slučování do větve.
settings.protect_disable_push=Zakázat nahrávání
@ -2739,6 +2747,8 @@ settings.sourcehut_builds.graphql_url = URL GraphQL (např. https://builds.sr.ht
settings.sourcehut_builds.visibility = Viditelnost práce
settings.sourcehut_builds.secrets = Tajné klíče
settings.sourcehut_builds.secrets_helper = Udělit práci přístup k tajným klíčům sestavení (vyžaduje oprávnění SECRETS:RO)
settings.graphql_url = URL GraphQL
settings.sourcehut_builds.access_token_helper = Přístupový token, který má oprávnění JOBS:RW. Vygenerujte <a target="_blank" rel="noopener noreferrer" href="%s">token builds.sr.ht</a> nebo <a target="_blank" rel="noopener noreferrer" href="%s">token builds.sr.ht s přístupem k tajným klíčům</a> na meta.sr.ht.
[graphs]
component_loading_info = Tohle může chvíli trvat…
@ -3027,12 +3037,12 @@ users.list_status_filter.not_active=Neaktivní
users.list_status_filter.is_admin=Administrátor
users.list_status_filter.not_admin=Není administrátor
users.list_status_filter.is_restricted=Omezeno
users.list_status_filter.not_restricted=Není omezeno
users.list_status_filter.not_restricted=Není omezen
users.list_status_filter.is_prohibit_login=Zakázat přihlášení
users.list_status_filter.not_prohibit_login=Povolit přihlášení
users.list_status_filter.is_2fa_enabled=2FA povoleno
users.list_status_filter.not_2fa_enabled=2FA zakázáno
users.details=Detaily uživatele
users.details=Podrobnosti o uživateli
emails.email_manage_panel=Správa uživatelských e-mailů
emails.primary=Hlavní
@ -3816,7 +3826,7 @@ no_results = Nenalezeny žádné odpovídající výsledky.
fuzzy_tooltip = Zahrnout také výsledky, které úzce odpovídají hledanému výrazu
search = Hledat...
keyword_search_unavailable = Hledání pomocí klíčových slov momentálně není dostupné. Kontaktujte prosím administrátora webu.
code_search_by_git_grep = Aktuální výsledky vyhledávání kódu jsou poskytovány službou „git grep“. Lepší výsledky dostanete, když administrátor webu povolí indexování repozitářů.
code_search_by_git_grep = Aktuální výsledky vyhledávání kódu jsou poskytovány službou „git grep“. Lepší výsledky dostanete, když administrátor webu povolí indexování kódu.
[markup]
filepreview.lines = Řádky %[1]d až %[2]d v souboru %[3]s

View file

@ -211,7 +211,7 @@ platform_desc=Forgejo läuft überall, wo <a target="_blank" rel="noopener noref
lightweight=Leichtgewichtig
lightweight_desc=Forgejo hat minimale Systemanforderungen und kann selbst auf einem günstigen und stromsparenden Raspberry Pi betrieben werden!
license=Quelloffen
license_desc=Hole dir <a target="_blank" rel="noopener noreferrer" href="https://forgejo.org/download">Forgejo</a>! Tritt uns bei, indem du uns <a target="_blank" rel="noopener noreferrer" href="https://codeberg.org/forgejo/forgejo">hilfst</a>, dieses Projekt noch besser zu machen. Scheue dich nicht davor, bei uns mitzuwirken!
license_desc=Hole dir <a target="_blank" rel="noopener noreferrer" href="https://forgejo.org/download">Forgejo</a>! Tritt uns bei, indem du uns <a target="_blank" rel="noopener noreferrer" href="https://codeberg.org/forgejo/forgejo">hilfst</a>, dieses Projekt noch besser zu gestalten. Scheue dich nicht davor, bei uns mitzuwirken!
[install]
install=Installation
@ -453,7 +453,7 @@ password_pwned_err=Anfrage an HaveIBeenPwned konnte nicht abgeschlossen werden
change_unconfirmed_email_summary = Ändern der E-Mail-Adresse, an die die Aktivierungsnachricht gesendet wird.
change_unconfirmed_email_error = Ändern der E-Mail-Adresse fehlgeschlagen: %v
last_admin = Du kannst den letzten Administrator nicht entfernen. Es muss mindestens einen Administrator geben.
change_unconfirmed_email = Wenn Sie bei der Registrierung eine falsche E-Mail-Adresse angegeben haben, können Sie diese unten ändern, woraufhin eine Bestätigung an die neue Adresse geschickt wird.
change_unconfirmed_email = Wenn du bei der Anmeldung eine falsche E-Mail-Adresse angegeben hast, kannst du diese unten ändern und bekommst stattdessen eine Bestätigung an die neue Adresse geschickt.
remember_me.compromised = Der Anmeldetoken ist nicht mehr gültig, dies könnte auf ein kompromittiertes Konto hindeuten. Bitte prüfe dein Konto auf ungewöhnliche Aktivitäten.
tab_signin = Anmelden
tab_signup = Registrieren
@ -629,6 +629,14 @@ admin_cannot_delete_self = Du kannst dich nicht selbst löschen, wenn du ein Adm
unset_password = Für den Benutzer ist das Passwort nicht gesetzt.
unsupported_login_type = Dieser Login-Typ unterstützt keine Accountlöschung.
required_prefix = Eingabe muss mit „%s“ anfangen
Description = Beschreibung
FullName = Vollständiger Name
Pronouns = Pronomen
Biography = Biografie
Website = Webseite
Location = Ort
To = Branchname
AccessToken = Zugangstoken
[user]
@ -731,7 +739,7 @@ keep_activity_private_popup=Deine Aktivität wird nur für dich und die Instanza
lookup_avatar_by_mail=Profilbild anhand der E-Mail-Addresse suchen
federated_avatar_lookup=Suche nach föderierten Profilbildern
enable_custom_avatar=Benutzerdefiniertes Profilbild benutzen
enable_custom_avatar=Benutzerdefiniertes Profilbild verwenden
choose_new_avatar=Neues Profilbild auswählen
update_avatar=Profilbild aktualisieren
delete_current_avatar=Aktuelles Profilbild löschen
@ -975,7 +983,7 @@ visibility.limited_tooltip=Nur für authentifizierte Benutzer sichtbar
visibility.private=Privat
visibility.private_tooltip=Sichtbar nur für Mitglieder von Organisationen, denen du beigetreten bist
user_block_success = Dieser Benutzer wurde erfolgreich blockiert.
twofa_recovery_tip = Falls du dein Gerät verlierst, wirst du in der Lage sein, einen einmalig verwendbaren Wiederherstellungsschlüssel zu benutzen, um den auf dein Konto wiederherzustellen.
twofa_recovery_tip = Falls du dein Gerät verlierst, wirst du in der Lage sein, einen einmalig verwendbaren Wiederherstellungsschlüssel zu verwenden, um den auf dein Konto wiederherzustellen.
webauthn_alternative_tip = Du möchtest vielleicht eine zusätzliche Authentifizierungsmethode einrichten.
blocked_users_none = Keine Benutzer blockiert.
webauthn_key_loss_warning = Falls du deine Security-Keys verlierst, wirst du Zugang zu deinem Konto verlieren.
@ -1032,7 +1040,7 @@ issue_labels=Issue-Labels
issue_labels_helper=Wähle eine Issue-Label-Sammlung.
license=Lizenz
license_helper=Wähle eine Lizenz aus.
license_helper_desc=Eine Lizenz regelt, was andere mit deinem Code tun (oder nicht tun) können. Unsicher, welches für dein Projekt die Richtige ist? Siehe den <a target="_blank" rel="noopener noreferrer" href="%s">Lizenzwahlhelfer</a>.
license_helper_desc=Eine Lizenz regelt, was andere mit deinem Code tun (oder nicht tun) können. Unsicher, welches für dein Projekt die Richtige ist? Siehe <a target="_blank" rel="noopener noreferrer" href="%s">Choose a license.</a>.
readme=README
readme_helper=Wähle eine README-Vorlage aus.
readme_helper_desc=Hier kannst du eine komplette Beschreibung für dein Projekt schreiben.
@ -1234,7 +1242,7 @@ file_view_raw=Originalformat anzeigen
file_permalink=Permalink
file_too_large=Die Datei ist zu groß zum Anzeigen.
invisible_runes_header=`Diese Datei enthält unsichtbare Unicode-Zeichen`
invisible_runes_description=`Diese Datei enthält unsichtbare Unicode-Zeichen, die für Menschen nicht unterscheidbar sind, aber von einem Computer unterschiedlich verarbeitet werden können. Wenn du glaubst, dass das absichtlich so ist, kannst du diese Warnung ignorieren. Benutze den „Escapen“-Button, um versteckte Zeichen anzuzeigen.`
invisible_runes_description=`Diese Datei enthält unsichtbare Unicode-Zeichen, die für Menschen nicht unterscheidbar sind, jedoch von einem Computer unterschiedlich verarbeitet werden können. Wenn du glaubst, dass das absichtlich so ist, kannst du diese Warnung ignorieren. Benutze den „Escapen“-Button, um versteckte Zeichen anzuzeigen.`
ambiguous_runes_header=`Diese Datei enthält mehrdeutige Unicode-Zeichen`
ambiguous_runes_description=`Diese Datei enthält Unicode-Zeichen, die mit anderen Zeichen verwechselt werden können. Wenn du glaubst, dass das absichtlich so ist, kannst du diese Warnung ignorieren. Benutze den „Escapen“-Button, um versteckte Zeichen anzuzeigen.`
invisible_runes_line=`Diese Zeile enthält unsichtbare Unicode-Zeichen`
@ -1679,7 +1687,7 @@ issues.dependency.issue_no_dependencies=Keine Abhängigkeiten gesetzt.
issues.dependency.pr_no_dependencies=Keine Abhängigkeiten gesetzt.
issues.dependency.no_permission_1=Du bist nicht berechtigt, %d Abhängigkeit zu lesen
issues.dependency.no_permission_n=Du bist nicht berechtigt, %d Abhängigkeiten zu lesen
issues.dependency.no_permission.can_remove=Du hast keine Berechtigung, diese Abhängigkeit zu lesen, kannst diese Abhängigkeit aber entfernen
issues.dependency.no_permission.can_remove=Du hast keine Berechtigung, diese Abhängigkeit zu lesen, kannst diese Abhängigkeit jedoch entfernen
issues.dependency.add=Abhängigkeit hinzufügen …
issues.dependency.cancel=Abbrechen
issues.dependency.remove=Entfernen
@ -1798,7 +1806,7 @@ pulls.remove_prefix=Präfix „<strong>%s</strong>“ entfernen
pulls.data_broken=Dieser Pull-Requests ist kaputt, da Fork-Informationen gelöscht wurden.
pulls.files_conflicted=Dieser Pull-Request hat Änderungen, die im Widerspruch zum Ziel-Branch stehen.
pulls.is_checking=Die Merge-Konfliktprüfung läuft noch. Bitte aktualisiere die Seite in wenigen Augenblicken.
pulls.is_ancestor=Dieser Branch ist bereits im Zielbranch enthalten. Es gibt nichts zusammenzuführen.
pulls.is_ancestor=Dieser Branch ist bereits im Zielbranch enthalten. Es existiert nichts zusammenzuführen.
pulls.is_empty=Die Änderungen an diesem Branch sind bereits auf dem Zielbranch. Dies wird ein leerer Commit sein.
pulls.required_status_check_failed=Einige erforderliche Prüfungen waren nicht erfolgreich.
pulls.required_status_check_missing=Einige erforderliche Prüfungen fehlen.
@ -1810,7 +1818,7 @@ pulls.blocked_by_outdated_branch=Dieser Pull-Request ist blockiert, da er veralt
pulls.blocked_by_changed_protected_files_1=Dieser Pull-Request ist blockiert, weil er eine geschützte Datei ändert:
pulls.blocked_by_changed_protected_files_n=Dieser Pull-Request ist blockiert, weil er geschützte Dateien ändert:
pulls.can_auto_merge_desc=Dieser Pull-Request kann automatisch zusammengeführt werden.
pulls.cannot_auto_merge_desc=Dieser Pull-Request kann nicht automatisch zusammengeführt werden, da es Konflikte gibt.
pulls.cannot_auto_merge_desc=Dieser Pull-Request kann nicht automatisch zusammengeführt werden, da Konflikte existieren.
pulls.cannot_auto_merge_helper=Bitte manuell zusammenführen, um die Konflikte zu beheben.
pulls.num_conflicting_files_1=%d Datei mit Konflikten
pulls.num_conflicting_files_n=%d Dateien mit Konflikten
@ -1836,9 +1844,9 @@ pulls.merge_commit_id=Die Merge-Commit-ID
pulls.require_signed_wont_sign=Der Branch erfordert einen signierten Commit, aber dieser Merge wird nicht signiert
pulls.invalid_merge_option=Du kannst diese Merge-Option auf diesen Pull-Request nicht anwenden.
pulls.merge_conflict=Merge fehlgeschlagen: Beim Zusammenführen gab es einen Konflikt. Tipp: Probiere eine andere Strategie
pulls.merge_conflict=Merge fehlgeschlagen: Beim Zusammenführen existierte ein Konflikt. Tipp: Probiere eine andere Strategie
pulls.merge_conflict_summary=Fehlermeldung
pulls.rebase_conflict=Merge fehlgeschlagen: Es gab einen Konflikt beim Rebasen des Commits: %[1]s. Tipp: Versuche eine andere Strategie
pulls.rebase_conflict=Merge fehlgeschlagen: Es existierte ein Konflikt beim Rebasen des Commits: %[1]s. Tipp: Versuche eine andere Strategie
pulls.rebase_conflict_summary=Fehlermeldung
pulls.unrelated_histories=Merge fehlgeschlagen: Der Head des Merges und die Basis haben keinen gemeinsamen Verlauf. Tipp: Versuche eine andere Strategie
pulls.merge_out_of_date=Merge fehlgeschlagen: Während des Zusammenführens wurde die Basis aktualisiert. Tipp: Versuche es erneut.
@ -1846,7 +1854,7 @@ pulls.head_out_of_date=Mergen fehlgeschlagen: Der Head wurde aktualisiert, währ
pulls.has_merged=Fehler: Der Pull-Request wurde zusammengeführt, du kannst den Zielbranch nicht wieder zusammenführen oder ändern.
pulls.push_rejected=Pushen fehlgeschlagen: Der Push wurde abgelehnt. Überprüfe die Git-Hooks für dieses Repository.
pulls.push_rejected_summary=Vollständige Ablehnungsmeldung
pulls.push_rejected_no_message=Pushen fehlgeschlagen: Der Push wurde abgelehnt, aber es gab keine Fehlermeldung. Überprüfe die Git-Hooks für dieses Repository
pulls.push_rejected_no_message=Pushen fehlgeschlagen: Der Push wurde abgelehnt, doch es existierte keine Fehlermeldung. Überprüfe die Git-Hooks für dieses Repository
pulls.open_unmerged_pull_exists=`Du kannst diesen Pull-Request nicht erneut öffnen, da noch ein anderer (#%d) mit identischen Eigenschaften offen ist.`
pulls.status_checking=Einige Prüfungen sind noch ausstehend
pulls.status_checks_success=Alle Prüfungen waren erfolgreich
@ -2344,7 +2352,7 @@ settings.protect_this_branch_desc=Verhindert das Löschen und schränkt Git auf
settings.protect_disable_push=Push deaktivieren
settings.protect_disable_push_desc=Kein Push auf diesen Branch erlauben.
settings.protect_enable_push=Push aktivieren
settings.protect_enable_push_desc=Jeder, der Schreibzugriff hat, darf in diesen Branch pushen (aber kein Force-Push).
settings.protect_enable_push_desc=Jeder, der Schreibzugriff hat, darf in diesen Branch pushen (jedoch kein Force-Push).
settings.protect_enable_merge=Merge aktivieren
settings.protect_enable_merge_desc=Jeder mit Schreibzugriff darf die Pull-Requests in diesen Branch zusammenführen.
settings.protect_whitelist_committers=Whitelist-eingeschränkter Push
@ -2369,7 +2377,7 @@ settings.protect_no_valid_status_check_patterns=Keine gültigen Statuscheck-Must
settings.protect_required_approvals=Erforderliche Genehmigungen:
settings.protect_required_approvals_desc=Erlaube das Zusammenführen des Pull-Requests nur mit genügend positiven Reviews.
settings.protect_approvals_whitelist_enabled=Genehmigungen auf Benutzer oder Teams auf der Whitelist beschränken
settings.protect_approvals_whitelist_enabled_desc=Nur Reviews von Benutzern auf der Whitelist oder Teams zählen zu den erforderlichen Genehmigungen. Gibt es keine Whitelist, so zählen Reviews von jedem mit Schreibzugriff zu den erforderlichen Genehmigungen.
settings.protect_approvals_whitelist_enabled_desc=Nur Reviews von Benutzern auf der Whitelist oder Teams zählen zu den erforderlichen Genehmigungen. Existiert keine Whitelist, so zählen Reviews von jedem mit Schreibzugriff zu den erforderlichen Genehmigungen.
settings.protect_approvals_whitelist_users=Reviewer auf der Whitelist:
settings.protect_approvals_whitelist_teams=Für Reviews gewhitelistete Teams:
settings.dismiss_stale_approvals=Entferne alte Genehmigungen
@ -2390,9 +2398,9 @@ settings.remove_protected_branch_failed=Entfernen der Branchschutzregel „%s“
settings.protected_branch_deletion=Branch-Schutz löschen
settings.protected_branch_deletion_desc=Wenn du den Branch-Schutz deaktivierst, können alle Nutzer mit Schreibrechten auf den Branch pushen. Fortfahren?
settings.block_rejected_reviews=Zusammenführung bei abgelehnten Reviews blockieren
settings.block_rejected_reviews_desc=Merge ist nicht möglich, wenn Änderungen durch offizielle Reviewer angefragt werden, auch wenn es genügend Genehmigungen gibt.
settings.block_rejected_reviews_desc=Merge ist nicht möglich, wenn Änderungen durch offizielle Reviewer angefragt werden, auch wenn genügend Genehmigungen existieren.
settings.block_on_official_review_requests=Merge bei offiziellen Review-Anfragen blockieren
settings.block_on_official_review_requests_desc=Merge ist nicht möglich, wenn offizielle Review-Anfrangen vorliegen, selbst wenn es genügend Genehmigungen gibt.
settings.block_on_official_review_requests_desc=Merge ist nicht möglich, wenn offizielle Review-Anfrangen vorliegen, selbst wenn genügend Genehmigungen existieren.
settings.block_outdated_branch=Merge blockieren, wenn der Pull-Request veraltet ist
settings.block_outdated_branch_desc=Merge ist nicht möglich, wenn der Head-Branch hinter dem Basis-Branch ist.
settings.default_branch_desc=Wähle einen Standardbranch für Pull-Requests und Code-Commits:
@ -2428,8 +2436,8 @@ settings.archive.error=Beim Versuch, das Repository zu archivieren, ist ein Fehl
settings.archive.error_ismirror=Du kannst kein gespiegeltes Repo archivieren.
settings.archive.branchsettings_unavailable=Branch-Einstellungen sind nicht verfügbar wenn das Repo archiviert ist.
settings.archive.tagsettings_unavailable=Tag Einstellungen sind nicht verfügbar, wenn das Repo archiviert wurde.
settings.unarchive.button=Archivieren rückgängig machen
settings.unarchive.header=Archivieren dieses Repositorys rückgängig machen
settings.unarchive.button=Archivierung zurücksetzen
settings.unarchive.header=Archivierung dieses Repositorys zurücksetzen
settings.unarchive.text=Durch das Aufheben der Archivierung kann das Repo wieder Commits und Pushes sowie neue Issues und Pull-Requests empfangen.
settings.unarchive.success=Die Archivierung des Repos wurde erfolgreich wieder rückgängig gemacht.
settings.unarchive.error=Beim Versuch, die Archivierung des Repos aufzuheben, ist ein Fehler aufgetreten. Weitere Details finden sich im Log.
@ -2698,7 +2706,7 @@ open_with_editor = Öffnen mit %s
commits.search_branch = Dieser Branch
pulls.ready_for_review = Bereit zum Review?
settings.rename_branch_failed_protected = Branch %s kann nicht umbenannt werden, weil er ein geschützter Branch ist.
editor.commit_id_not_matching = Die Commit-ID passt nicht zur ID die du bearbeitet hast hast. Committe in einen neuen Branch, dann mach einen Merge.
editor.commit_id_not_matching = Die Commit-ID passt nicht zur ID die du bearbeitet hast hast. Committe in einen neuen Branch, dann führe einen Merge durch.
editor.push_out_of_date = Der Push scheint veraltet zu sein.
n_commit_few = %s Commits
n_branch_one = %s Branch
@ -2723,6 +2731,10 @@ settings.sourcehut_builds.visibility = Job-Sichtbarkeit
settings.sourcehut_builds.secrets = Geheimnisse
settings.sourcehut_builds.secrets_helper = Dem Job zugriff auf die Build-Geheimnisse geben (benötigt die SECRETS:RO-Berechtigung)
settings.web_hook_name_sourcehut_builds = SourceHut-Builds
settings.graphql_url = GraphQL-URL
settings.matrix.room_id_helper = Die Raum-ID kann über den Element-Webclient ermittelt werden: Raumeinstellungen > Erweitert > Interne Raum-ID. Beispielsweise %s.
settings.sourcehut_builds.access_token_helper = Zugangstoken der die JOBS:RW-Freigabe hat. Generiere auf meta.sr.ht einen <a target="_blank" rel="noopener noreferrer" href="%s">builds.sr.ht-Token</a> oder einen <a target="_blank" rel="noopener noreferrer" href="%s">builds.sr.ht-Token mit Zugriff auf die Secrets</a>.
settings.matrix.access_token_helper = Es wird empfohlen, einen dedizierten Matrix-Account hierfür anzulegen. Der Zugangstoken kann in einem Incognito-Tab über den Element-Webclient geholt werden: Benutzermenü (oben links) > Alle Einstellungen > Hilfe & Über > Erweitert > Zugangstoken (direkt unter der Homeserver-URL). Schließe das Incognito-Tab dann (Abmelden würde den Token ungültig werden lassen).
[graphs]
@ -3376,7 +3388,7 @@ notices.type_2=Aufgabe
notices.desc=Beschreibung
notices.op=Aktion
notices.delete_success=Diese Systemmeldung wurde gelöscht.
self_check.database_fix_mysql = Für MySQL-/MariaDB-Benutzer: Du kannst den Befehl „gitea doctor convert“ benutzen, um die Collation-Probleme zu lösen, oder du kannst das Problem mit „ALTER … COLLATE …“-SQLs manuell lösen.
self_check.database_fix_mysql = Für MySQL-/MariaDB-Benutzer: Du kannst den Befehl „gitea doctor convert“ verwenden, um die Collation-Probleme zu lösen, oder du kannst das Problem mit „ALTER … COLLATE …“-SQLs manuell lösen.
dashboard.sync_tag.started = Tags-Synchronisierung gestartet
self_check.database_collation_case_insensitive = Datenbank benutzt eine Collation %s, welcher der Groß-/Kleinschreibung egal ist. Obwohl Forgejo damit arbeiten könnte, könnte es ein paar seltene Fälle geben, bei denen es nicht wie erwartet funktioniert.
self_check = Selbstprüfung
@ -3384,7 +3396,7 @@ dashboard.sync_repo_tags = Tags aus Git-Daten zu Datenbank synchronisieren
emails.change_email_text = Bist du dir sicher, dass du diese E-Mail-Addresse aktualisieren möchtest?
packages.cleanup.success = Abgelaufene Daten erfolgreich gesäubert
self_check.no_problem_found = Noch kein Problem gefunden.
self_check.database_inconsistent_collation_columns = Datenbank benutzt Collation %s, aber diese Spalten benutzen Collations, die nicht zusammenpassen. Das könnte ein paar unerwartete Probleme verursachen.
self_check.database_inconsistent_collation_columns = Datenbank benutzt Collation %s, doch diese Spalten verwenden Collations, die nicht zusammenpassen. Das könnte ein paar unerwartete Probleme verursachen.
self_check.database_collation_mismatch = Erwarte von Datenbank, folgende Collation zu verwenden: %s
auths.tips.gmail_settings = Gmail-Einstellungen:
config_settings = Einstellungen
@ -3474,7 +3486,7 @@ error.no_committer_account=Es ist kein Account mit der E-Mail-Adresse des Commit
error.no_gpg_keys_found=Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
error.not_signed_commit=Kein signierter Commit
error.failed_retrieval_gpg_keys=Fehler beim Abrufen eines Keys des Commiter-Kontos
error.probable_bad_signature=WARNHINWEIS! Obwohl es einen Schlüssel mit dieser ID in der Datenbank gibt, verifiziert er nicht diesen Commit! Dieser Commit ist VERDÄCHTIG.
error.probable_bad_signature=WARNHINWEIS! Obwohl ein Schlüssel mit dieser ID in der Datenbank existiert, verifiziert er nicht diesen Commit! Dieser Commit ist VERDÄCHTIG.
error.probable_bad_default_signature=WARNHINWEIS! Obwohl der Standardschlüssel diese ID hat, verifiziert er nicht diesen Commit! Dieser Commit ist VERDÄCHTIG.
[units]
@ -3738,8 +3750,8 @@ variables.creation.success=Die Variable „%s“ wurde hinzugefügt.
variables.update.failed=Fehler beim Bearbeiten der Variable.
variables.update.success=Die Variable wurde bearbeitet.
runs.no_workflows.quick_start = Weißt du nicht, wie du mit Forgejo Actions anfangen sollst? Sieh dir die <a target="_blank" rel="noopener noreferrer" href="%s">Schnellstartanleitung</a> an.
runs.no_matching_online_runner_helper = Es gibt keinen passenden Online-Runner mit dem Label: %s
runs.no_workflows = Es gibt noch keine Workflows.
runs.no_matching_online_runner_helper = Es existiert kein passender Online-Runner mit dem Label: %s
runs.no_workflows = Es existieren noch keine Workflows.
runs.no_workflows.documentation = Für weitere Informationen über Forgejo Actions, siehe <a target="_blank" rel="noopener noreferrer" href="%s">die Dokumentation</a>.
runs.empty_commit_message = (leere Commit-Nachricht)
variables.id_not_exist = Variable mit ID %d existiert nicht.

View file

@ -99,6 +99,7 @@ disabled = Disabled
locked = Locked
copy = Copy
copy_generic = Copy to clipboard
copy_url = Copy URL
copy_hash = Copy hash
copy_content = Copy content
@ -2599,7 +2600,7 @@ diff.comment.add_single_comment = Add single comment
diff.comment.add_review_comment = Add comment
diff.comment.start_review = Start review
diff.comment.reply = Reply
diff.review = Review
diff.review = Finish review
diff.review.header = Submit review
diff.review.placeholder = Review comment
diff.review.comment = Comment

View file

@ -228,8 +228,8 @@ err_empty_db_path = Hindi maaring walang laman ang path ng SQLite database.
no_admin_and_disable_registration = Hindi mo maaring i-disable ang user self-registration nang hindi gumawa ng isang tagapangasiwa na account.
err_empty_admin_password = Hindi maaring walang laman ang password ng tagapangasiwa.
err_empty_admin_email = Hindi maaring walang laman ang email ng tagapangasiwa.
err_admin_name_is_reserved = Hindi angkop ang Administrator Username, naka-reserve ang username
err_admin_name_is_invalid = Hindi angkop ang Administrator Username
err_admin_name_is_reserved = Hindi angkop ang Username ng Tagapangasiwa, naka-reserve ang username
err_admin_name_is_invalid = Hindi angkop ang Username ng Tagapangasiwa
general_title = Mga General Setting
app_name = Pamagat ng instansya
app_name_helper = Maari mong ilagay ang pangalan ng iyong kompanya dito.
@ -246,7 +246,7 @@ lfs_path_helper = Ang mga file na naka-track sa Git LFS ay ilalagay sa directory
reinstall_confirm_message = Ang pag-install muli na may umiiral na Forgejo database ay maaring magdulot ng mga problema. Sa karamihan ng mga kaso, dapat mong gamitin ang iyong umiiral na "app.ini" para patakbuhin ang Forgejo. Kung alam mo ang ginagawa mo, kumpirmahin ang mga sumusunod:
reinstall_confirm_check_1 = Ang data na naka-encrypt sa pamamagitan ng SECRET_KEY sa app.ini ay maaring mawala: baka hindi maka-log in ang mga user gamit ng 2FA/OTP at ang mga mirror ay maaring hindi gumana mg maayos. Sa pamamagitan ng pag-check ng box na ito kinukumpirma mo na ang kasalukuyang app.ini file ay naglalaman ng tamang SECRET_KEY.
reinstall_confirm_check_2 = Ang mga repositoryo at mga setting ay maaring kailangang i-resynchronize. Sa pamamagitan ng pag-check ng box na ito kinukumprima mo na ire-resynchronize mo ang mga hook para sa mga repositoryo at authorized_keys ng mano-mano. Kinukumpirma mo na sisiguraduhin mo na tama ang mga setting ng repositoryo at mirror.
err_admin_name_pattern_not_allowed = Hindi angkop ang administrator username, ang username ay tumutugma sa reserved pattern
err_admin_name_pattern_not_allowed = Hindi angkop ang username ng tagapangasiwa, ang username ay tumutugma sa reserved pattern
ssh_port_helper = Numero ng port na gagamitin ng SSH server. Iwanang walang laman para i-disable ang SSH server.
server_service_title = Mga setting ng server at third-party na serbisyo
offline_mode = Paganahin ang local mode
@ -278,8 +278,8 @@ openid_signup_popup = I-enable ang OpenID-based na pansariling pagrehistro ng us
enable_captcha = I-enable ang CAPTCHA sa pagrehistro
enable_captcha_popup = Kailanganin ang CAPTCHA sa pansariling pagrehistro ng user.
require_sign_in_view_popup = Limitahan ang access ng pahina sa mga naka-sign in na user. Makikita lang ng mga bisita ang sign-in at pagrehistro na mga pahina.
admin_title = Mga setting ng administrator account
admin_name = Username ng administrator
admin_title = Mga setting ng account ng tagapangasiwa
admin_name = Username ng tagapangasiwa
admin_password = Password
confirm_password = Kumpirmahin ang password
admin_email = Email address
@ -294,7 +294,7 @@ run_user_not_match = Ang "user na tatakbo bilang" na username ay hindi ang kasul
internal_token_failed = Nabigong maka-generate ng internal token: %v
secret_key_failed = Nabigong maka-generate ng secret key: %v
save_config_failed = Nabigong i-save ang configuration: %v
invalid_admin_setting = Hindi angkop ang setting ng administrator account: %v
invalid_admin_setting = Hindi angkop ang setting ng account ng tagapangasiwa: %v
invalid_log_root_path = Hindi angkop ang log path: %v
default_keep_email_private = Itago ang mga email address bilang default
default_keep_email_private_popup = Itago ang mga email address ng mga bagong user account bilang default.
@ -315,9 +315,9 @@ require_sign_in_view = Kailanganin ang pag-sign in para tignan ang nilalaman ng
enable_update_checker_helper_forgejo = Pansamantalang susuriin ito para sa mga bagong bersyon ng Forgejo sa pamamagitan ng pagsuri sa isang tala ng TXT DNS sa release.forgejo.org.
sqlite3_not_available = Ang itong bersyon ng Forgejo ay hindi sinusuportahan ang SQLite3. Paki-download ang opisyal na bersyon ng binary sa %s (hindi ang "gobuild" na bersyon).
default_allow_create_organization = Payagan ang paggawa ng mga organisasyon bilang default
disable_registration_popup = I-disable ang pansariling pagrehistro ng user. Ang mga pangangasiwa lamang ang makakagawa ng mga bagong user account.
disable_registration_popup = I-disable ang pansariling pagrehistro ng user. Ang mga tagapangasiwa lamang ang makakagawa ng mga bagong user account.
disable_gravatar_popup = I-disable ang Gravatar at mga third-party na avatar source. Ang isang default na avatar ay gagamitin maliban kung maga-upload ng avatar ang user.
admin_setting_desc = Ang paggawa ng administrator account ay opsyonal. Ang pinakaunang nakarehistro na user ay awtomatikong magiging administrator.
admin_setting_desc = Ang paggawa ng administrator account ay opsyonal. Ang pinakaunang nakarehistro na user ay awtomatikong magiging tagapangasiwa.
[heatmap]
number_of_contributions_in_the_last_12_months = %s mga kontribusyon sa nakalipas na 12 buwan
@ -364,7 +364,7 @@ license_desc = Kunin ang <a target="_blank" rel="noopener noreferrer" href="http
create_new_account = Magrehistro ng Account
register_helper_msg = May account ka na? Mag-sign in ngayon!
social_register_helper_msg = May account ka na? I-link ngayon!
disable_register_prompt = Naka-disable ang pagrehistro. Mangyaring makipag-ugnayan sa site administrator.
disable_register_prompt = Naka-disable ang pagrehistro. Mangyaring makipag-ugnayan sa tagapangasiwa ng site.
disable_register_mail = Ang kumpirmasyon sa pamamagitan ng Email sa pagrehistro ay naka-disable.
remember_me = Tandaan ang device na ito
forgot_password_title = Nakalimutan ang Password
@ -377,7 +377,7 @@ reset_password_mail_sent_prompt = Ang isang bagong email pang-kumpirma ay ipinad
active_your_account = Aktibahin Ang Iyong Account
account_activated = Naaktiba na ang account
prohibit_login = Ipinagbawalan ang Pag-sign in
prohibit_login_desc = Pinagbawalan ang iyong account sa pag-sign in, mangyaring makipag-ugnayan sa site administrator.
prohibit_login_desc = Pinagbawalan ang iyong account sa pag-sign in, mangyaring makipag-ugnayan sa tagapangasiwa ng site.
resent_limit_prompt = Humiling ka na ng activation email kamakailan. Mangyaring maghintay ng 3 minuto at subukang muli.
change_unconfirmed_email_summary = Palitan ang email address kung saan ipapadala ang activation email.
change_unconfirmed_email = Kung nagbigay ka ng maling email address habang nagpaparehistro, pwede mong palitan sa ibaba, at ang isang kumpirmasyon ay ipapadala sa bagong address sa halip.
@ -413,14 +413,14 @@ invalid_code_forgot_password = Ang iyong confirmation code ay hindi wasto o nag-
confirmation_mail_sent_prompt = Ang isang bagong email pang-kumpirma ay ipinadala sa <b>%s</b>. Pakisuri ang iyong inbox sa loob ng %s para tapusin ang proseso ng pagrehistro. Kung mali ang email, maari kang mag-log in, at humingi ng isa pang email pang-kumpirma na ipapadala sa ibang address.
invalid_password = Ang iyong password ay hindi tugma sa password na ginamit para gawin ang account.
twofa_scratch_used = Ginamit mo na ang scratch code. Na-redirect ka sa two-factor settings page para tanggalin ang device enrollment o mag-generate ng bagong scratch code.
manual_activation_only = Makipag-ugnayan sa site administrator para kumpletuhin ang pagrehistro.
oauth.signin.error = Nagkaroon ng error sa pagproseso ng iyong hiling sa pahintulutan. Kung magpapatuloy ang error, mangyaring makipag-ugnayan sa site administrator.
manual_activation_only = Makipag-ugnayan sa tagapangangasiwa ng site para kumpletuhin ang pagrehistro.
oauth.signin.error = Nagkaroon ng error sa pagproseso ng iyong hiling sa pahintulutan. Kung magpapatuloy ang error, mangyaring makipag-ugnayan sa tagapangasiwa ng site.
remember_me.compromised = Ang login token ay hindi na wasto na maaaring magpahiwatig ng isang nakompromisong account. Pakisuri ang iyong account para sa mga hindi pangkaraniwang aktibidad.
has_unconfirmed_mail = Kamusta %s, mayroon kang isang hindi kinumpirmang email address (<b>%s</b>). Kung hindi ka pa nakatanggap ng email na pang-kumpirma o kailangang muling magpadala ng bago, mangyaring i-click ang button sa ibaba.
openid_register_title = Gumawa ng bagong account
openid_register_desc = Ang piniling OpenID URI ay hindi alam. Iugnay iyan sa bagong account dito.
openid_signin_desc = Ilagay ang iyong OpenID URI. Halimbawa: kita.openid.example.org o https://openid.example.org/kita.
disable_forgot_password_mail = Naka-disable ang account recovery dahil walang nakatakda na email. Mangyaring makipag-ugnayan sa site administrator.
disable_forgot_password_mail = Naka-disable ang account recovery dahil walang nakatakda na email. Mangyaring makipag-ugnayan sa tagapangasiwa ng site.
disable_forgot_password_mail_admin = Available lamang ang account recovery kung may nakatakda na email. I-set up ang email para i-enable ang account recovery.
email_domain_blacklisted = Hindi ka makakapagrehistro gamit ng iyong email address.
authorize_application = Pahintulutan ang Aplikasyon
@ -590,6 +590,8 @@ org_still_own_packages = Ang organisasyon na ito ay nagmamay-ari ng isa o higit
target_branch_not_exist = Hindi umiiral ang target branch.
admin_cannot_delete_self = Hindi mo maaring burahin ang sarili mo kapag isa kang tagapangasiwa. Paki-tanggal ang iyong pribilehiyong tagapangasiwa muna.
required_prefix = Ang input ay dapat magsimula sa "%s"
FullName = Buong pangalan
Description = Paglalarawan
[user]
joined_on = Sumali noong %s
@ -615,7 +617,7 @@ block = Harangan
unblock = I-unblock
user_bio = Byograpya
email_visibility.limited = Ang iyong email address ay makikita ng lahat ng mga naka-authenticate na user
email_visibility.private = Makikita mo lang at mga administrator ang iyong email address
email_visibility.private = Makikita mo lang at mga tagapangasiwa ang iyong email address
show_on_map = Ipakita ang lugar na ito sa mapa
settings = Mga setting ng user
form.name_pattern_not_allowed = Ang pattern na "%s" ay hindi pinapayagan sa username.
@ -874,7 +876,7 @@ twofa_scratch_token_regenerate = I-regenerate ang isang-beses na paggamit na rec
twofa_enroll = Mag-enroll sa authentikasyong two-factor
twofa_disable_note = Maari mong i-disable ang authentikasyong two-factor kapag kinakailangan.
twofa_disabled = Na-disable na ang authentikasyong two-factor.
scan_this_image = I-scah ang image na ito gamit ng iyong aplikasyong pang-authentikasyon:
scan_this_image = I-scan ang image na ito gamit ng iyong aplikasyong pang-authentikasyon:
or_enter_secret = O ilagay ang sikreto: %s
then_enter_passcode = At ilagay ang passcode na pinapakita sa aplikasyon:
passcode_invalid = Mali ang passcode. Subukan muli.
@ -1068,7 +1070,7 @@ archive.pull.nocomment = Naka-archive ang repo na ito. Hindi ka makakakomento sa
archive.title = Naka-archive ang repo na ito. Maari mong itignan ang mga file at i-clone ito, pero hindi makaka-push o magbukas ng mga isyu o mga pull request.
archive.title_date = Naka-archive ang repositoryo na ito noong %s. Maari mong itignan ang mga file at i-clone ito, pero hindi makaka-push o magbukas ng mga isyu o mga pull request.
pulls = Mga hiling sa paghatak
activity.merged_prs_count_n = Naisamang mga [pull request]
activity.merged_prs_count_n = Mga naisamang hiling sa paghatak
wiki.last_updated = Huling binago %s
file.title = %s sa %s
file_view_raw = Tingnan ng raw
@ -1084,15 +1086,15 @@ issues.action_open = Buksan
issues.closed_title = Sarado
issues.reopen_issue = Buksang muli
pulls.merged = Naisama na
pulls.merged_info_text = Maari nang burahin ang [branch] %s.
pulls.merged_info_text = Maari nang burahin ang branch %s.
milestones.update_ago = Binago %s
activity.closed_issue_label = Sarado
activity.merged_prs_label = Naisama na
activity.merged_prs_label = Naisama
editor.delete_this_file = Burahin ang file
editor.file_delete_success = Nabura na ang file na "%s".
tree = Puno
issues.filter_sort = Isaayos ayon sa
activity.title.issues_closed_from = Naisara ang %s mula sa %s
activity.title.issues_closed_from = Sinara ang %s mula sa %s
pulls.merged_success = Matagumpay na naisama at sinara ang [pull request]
activity.title.prs_merged_by = Sinama ang %s ni/ng %s
find_tag = Maghanap ng tag
@ -1212,7 +1214,7 @@ editor.upload_file = Mag-upload ng file
editor.cannot_edit_lfs_files = Hindi mababago ang mga LFS file sa web interface.
migrate.migrating_issues = Nililipat ang mga isyu
fork_from_self = Hindi ka makaka-fork ng repositoryo na minamay-ari mo.
broken_message = Ang Git data na pinagbabatayan sa repositoryo na ito ay hindi mabasa. Makipag-ugnayan sa pangangasiwa ng instansya na ito o burahin ang repositoryo na ito.
broken_message = Ang Git data na pinagbabatayan sa repositoryo na ito ay hindi mabasa. Makipag-ugnayan sa tagapangasiwa ng instansya na ito o burahin ang repositoryo na ito.
file_history = Kasaysayan
invisible_runes_header = `Nalalaman ng file na ito ng mga hindi nakikitang Unicode character`
file_too_large = Masyadong malaki ang file para ipakita.
@ -1270,12 +1272,12 @@ issues.cancel = Kanselahin
issues.save = IImbak
issues.label_title = Pangalan
issues.delete.title = Burahin ang isyung ito?
settings.pulls_desc = Paganahin ang mga [pull request] para sa [repository]
settings.pulls_desc = Paganahin ang mga hiling sa paghatak para sa repositoryo
editor.branch_does_not_exist = Walang natagpuang [branch] na "%s" sa [repository] na ito.
commits.nothing_to_compare = Magkapareho ang mga branch na ito.
commits.search_all = Lahat na mga branch
editor.file_deleting_no_longer_exists = Walang natagpuang binuburang file na "%s" sa [repository] na ito.
issues.role.owner_helper = May-ari ng [repository] ang tagagamit na ito.
editor.file_deleting_no_longer_exists = Walang natagpuang binuburang file na "%s" sa repositoryo na ito.
issues.role.owner_helper = May-ari ng repositoryo ang tagagamit na ito.
issues.remove_request_review = Tanggalin ang hiling sa pagsuri
issues.force_push_compare = Ikumpara
editor.propose_file_change = Magmunkahi ng mga pagbabago sa file
@ -1290,24 +1292,24 @@ issues.filter_project_all = Lahat ng mga proyekto
issues.filter_project_none = Walang proyekto
issues.ref_from = `mula %[1]s`
issues.due_date_form_remove = Tanggalin
issues.due_date_form_edit = Baguhin
issues.lock_with_reason = kinandado bilang <strong>%s</strong> at nilimitahan ang paguusap sa mga [collaborators] %s
issues.lock_no_reason = kinandado at nilimitahan ang paguusap sa mga [collaborators] %s
issues.due_date_form_edit = I-edit
issues.lock_with_reason = kinandado bilang <strong>%s</strong> at nilimitahan ang paguusap sa mga katulong %s
issues.lock_no_reason = kinandado at nilimitahan ang paguusap sa mga katulong %s
commit.revert = Ibalik
commit.revert-header = Ibalik: %s
projects.title =Pamagat
projects.create_success = Ginawa na ang proyektong "%s".
projects.modify = Baguhin ang proyekto
issues.delete_comment_confirm = Gusto mo bang burahin ang [comment] na ito?
issues.context.edit = Baguhin
projects.modify = I-edit ang proyekto
issues.delete_comment_confirm = Gusto mo bang burahin ang komento na ito?
issues.context.edit = I-edit
issues.lock.title = Kandaduhin ang paguusap sa isyung ito.
issues.unlock.title = [Unlock] ang paguusap sa isyung ito.
issues.unlock.title = I-unlock ang paguusap sa isyung ito.
pulls.nothing_to_compare_and_allow_empty_pr = Magkapareho ang mga branch na ito. Magiging walang laman ang PR na ito.
pulls.has_pull_request =
issues.delete = Burahin
issues.choose.open_external_link = Buksan
issues.deleted_project = `(binura)`
issues.self_assign_at = `itinalaga ang sarili %s`
issues.self_assign_at = `itinalaga sa sarili ang %s`
issues.filter_poster_no_select = Lahat ng may-akda
issues.filter_type = Uri
issues.filter_type.assigned_to_you = Itinalaga sa iyo
@ -1316,7 +1318,7 @@ issues.author_helper = May-akda ang tagagamit na ito.
issues.role.owner = May-ari
activity.title.prs_n = %d mga kahilingan sa paghatak
issues.label_color = Kulay
pulls.nothing_to_compare = Magkapareho ang mga branch na ito. Hindi na kailangang gumawa ng pull request.
pulls.nothing_to_compare = Magkapareho ang mga branch na ito. Hindi na kailangang gumawa ng hiling sa paghatak.
projects.column.assigned_to = Itinalaga sa/kay
issues.new_label_desc_placeholder = Paglalarawan
issues.next = Susunod
@ -1334,61 +1336,61 @@ issues.no_content = Walang nakalaang paglalarawan.
issues.close = Isara ang isyu
editor.revert = Ibalik ang %s sa:
commits.signed_by = Nilagdaan ni/ng
commits.signed_by_untrusted_user = Nilagdaan ng [untrusted] na tagagamit
projects.description = Paglalarawan ([optional])
commits.signed_by_untrusted_user = Nilagdaan ng hindi pinagkakatiwalaan na tagagamit
projects.description = Paglalarawan (opsyonal)
projects.create = Gumawa ng proyekto
projects.new = Bagong proyekto
projects.edit = Baguhin ang proyekto
editor.filename_help = Idagdag ang direktoryo sa pamamagitan ng pag-type ng pangalan at isunod ang slash ("/"). Tanggalin ang direktoryo sa pamamagitan ng pag-type ng backspace sa simula ng field ng pasukan.
editor.new_branch_name = Ipangalan ang bagong [branch] para sa [commit] na ito
editor.new_branch_name = Ipangalan ang bagong branch para sa commit na ito
issues.cancel_tracking = Pagpaliban
issues.new.open_projects = Mga nakabukas na proyekto
issues.review.remove_review_request_self = tinanggihan ang pagsuri %s
issues.review.remove_review_request_self = tinanggihan na suriin ang %s
issues.review.reviewers = Mga tagasuri
editor.signoff_desc = Idagdag ang [Signed-off-by trailer] ng taga-[commit] sa dulo ng [log message] ng [commit].
editor.commit_message_desc = Idagdag ang [optional] na pinahabang paglalarawan…
editor.signoff_desc = Idagdag ang Signed-off-by trailer ng taga-commit sa dulo ng log message ng commit.
editor.commit_message_desc = Magdagdag ng opsyonal na pinahabang paglalarawan…
issues.new.closed_projects = Mga saradong proyekto
projects = Mga proyekto
projects.deletion_success = Nabura na ang proyekto.
issues.add_time_short = Idagdag ang oras
editor.push_rejected_summary = Buong mensahe ng pagtanggi:
commitstatus.success = Tagumpay
commitstatus.failure = Kabiguan
commitstatus.failure = Nabigo
projects.type.none = Wala
issues.label_edit =
issues.deleted_milestone = `(binura)`
issues.add_time_hours = Oras
projects.column.color = Kulay
projects.card_type.images_and_text = Mga larawan at [text]
projects.card_type.text_only = [Text] lamang
projects.card_type.images_and_text = Mga larawan at teksto
projects.card_type.text_only = Teksto lamang
issues.create = Gumawa ng isyu
commits.gpg_key_id = ID ng susi ng GPG
editor.no_changes_to_show = Walang maipakitang pagbabago.
editor.no_changes_to_show = Walang maipapakitang pagbabago.
editor.name_your_file = Ipangalan ang iyong file…
pulls.new = Bagong [pull request]
issues.ref_reopened_from = `<a href="%[3]s">binuksang muli ang isyung ito %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
settings.event_issues_desc = Nakabukas, nakasara, nabuksang muli, o binago ang isyu.
pulls.new = Bagong hiling sa paghatak
issues.ref_reopened_from = `<a href="%[3]s">binuksang muli ang isyung %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
settings.event_issues_desc = Binuksan, sinara, muling binuksan, o binago ang isyu.
activity.new_issue_label = Nabuksan
activity.merged_prs_count_1 = Naisamang [pull request]
activity.opened_prs_count_1 = Inimungkahing [pull request]
activity.merged_prs_count_1 = Naisamang hiling sa paghatak
activity.opened_prs_count_1 = Inimungkahing hiling sa paghatak
activity.opened_prs_label = Inimungkahi
pulls.reopened_at = `nabuksang muli ang [pull request] na ito <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.opened_by_fake = binuksan %[1]s ni/ng %[2]s
pulls.reopen_failed.base_branch = Hindi mabuksang muli ang [pull request] na ito dahil hindi na umiiral ang [base] [branch].
pulls.reopened_at = `nabuksang muli ang hiling sa paghatak na <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.opened_by_fake = binuksan ang %[1]s ni/ng %[2]s
pulls.reopen_failed.base_branch = Hindi mabuksang muli ang hiling sa paghatak na ito dahil hindi na umiiral ang base branch.
issues.reopened_at = `binuksang muli ang isyung ito <a id="%[1]s" href="#%[1]s">%[2]s</a>`
pulls.reopen_failed.head_branch = Hindi mabuksang muli ang [pull request] na ito dahil nabura ang punong [branch].
settings.event_pull_request_desc = Nakabukas, nakasara, nabuksang muli, o binago ang [pull request].
activity.opened_prs_count_n = Inimungkahing mga [pull request]
settings.event_pull_request_desc = Binuksan, sinara, muling binuksan, o binago ang hiling sa paghatak.
activity.opened_prs_count_n = Mga inimungkahing hiling sa paghatak
editor.filename_is_invalid = Hindi wasto ang pangalan ng file: "%s".
activity.title.prs_opened_by = %s inimungkahi ni/ng %s
pulls.cant_reopen_deleted_branch = Hindi mabuksang muli ang [pull request] na ito dahil nabura ang [branch].
pulls.cant_reopen_deleted_branch = Hindi mabuksang muli ang hiling sa paghatak na ito dahil nabura ang branch.
issues.new = Bagong isyu
issues.commented_at = `iniwan ang komento <a href="#%s">%s</a>`
editor.patch = Ilapat ang Patch
editor.new_patch = Bagong Patch
editor.create_new_branch = Gumawa ng <strong>bagong [branch]</strong> para sa [commit] na ito at simulan ang [pull request].
editor.create_new_branch_np = Gumawa ng <strong>bagong [branch]</strong> para sa [commit] na ito.
editor.invalid_commit_mail = Hindi wastong [mail] para sa paggawa ng [commit].
editor.create_new_branch = Gumawa ng <strong>bagong branch</strong> para sa commit na ito at simulan ang hiling sa paghatak.
editor.create_new_branch_np = Gumawa ng <strong>bagong branch</strong> para sa commit na ito.
editor.invalid_commit_mail = Hindi wastong mail para sa paggawa ng commit.
issues.filter_sort.leastupdate = Unang nabago
editor.fork_before_edit = Kailangan mong i-fork ang repositoryo na ito upang gumawa o magmungkahi ng mga pagbabago sa file na ito.
editor.must_have_write_access = Kailangang may access ka sa pagbabago upang gumawa o magmungkahi ng mga pagbabago sa file na ito.
@ -1401,6 +1403,32 @@ issues.content_history.created = ginawa
editor.patching = Pina-patch:
editor.fail_to_apply_patch = Hindi malapat ang patch na "%s"
settings.danger_zone = Mapanganib na lugar
issues.closed_at = `isinara ang isyung <a id="%[1]s" href="#%[1]s">%[2]s</a>`
settings.collaboration.admin = Tagapangasiwa
settings.admin_settings = Mga setting ng tagapangasiwa
issues.start_tracking_history = `sinimulan ang trabaho %s`
milestones.close = Isara
wiki.save_page = IImbak ang pahina
wiki.page = Pahina
wiki.page_content = Nilalaman ng pahina
wiki.new_page = Bagong pahina
wiki.page_title = Pamagat ng pahina
issues.lock_confirm = Kandaduhin
issues.stop_tracking_history = `itinigil ang trabaho %s`
issues.label_delete = Burahin
milestones.closed = Isinara %s
issues.unlock_confirm = I-unlock
milestones.open = Buksan
issues.content_history.delete_from_history = Burahin mula sa kasaysayan
issues.content_history.delete_from_history_confirm = Burahin mula sa kasaysayan?
issues.content_history.options = Mga pagpipilian
wiki.edit_page_button = Baguhin
wiki.new_page_button = Bagong pahina
wiki.delete_page_button = Burahin ang pahina
milestones.title = Pamagat
milestones.desc = paglalarawan
pulls.blocked_by_user = Hindi ka makakagawa ng [pull request] sa [repository] na ito dahil hinarang ka ng may-ari ng [repository].
pulls.no_merge_access = Hindi ka pinapayagang isali ang [pull request] na ito.
[search]
commit_kind = Maghanap ng mga commit...
@ -1426,8 +1454,8 @@ code_search_by_git_grep = Ang kasalukuyang mga resulta ng paghahanap ng code ay
[admin]
auths.updated = Nabago
emails.updated = Napalitan na ang [email]
emails.not_updated = Nabigong baguhin ang hinihiling na [email address]: %v
emails.updated = Napalitan na ang email
emails.not_updated = Nabigong baguhin ang hinihiling na email address: %v
monitor.next = Susunod na oras
monitor.last_execution_result = Resulta
dashboard.last_gc_time = Oras noong huling GC
@ -1443,7 +1471,7 @@ users.edit_account = I-edit ang user account
users.update_profile_success = Na-update na ang user account.
users.still_own_packages = Ang user na ito ay nagmamay-ari ng isa o higit pang mga package, burahin muna ang mga package.
users.reset_2fa = I-reset ang 2FA
users.purge = I-purge ang User
users.purge = I-purge ang user
users.purge_help = Piliting burahin ang user at anumang mga repositoryo, organisasyon, at package na minamay-ari ng user na ito. Ang mga komento at isyu na na-post ng user ay buburahin din.
config_settings = Mga setting
dashboard.statistic = Buod
@ -1500,7 +1528,7 @@ users.restricted = Pinaghihigpitan
users.2fa = 2FA
users.repos = Mga Repo
users.send_register_notify = Ipadala ang notification ng pagrehistro ng user
users.is_admin = Ay pangangasiwa
users.is_admin = Ay tagapangasiwa
users.is_restricted = Ay pinaghihigpitan
users.allow_import_local = Maaring mag-import ng mga lokal na repositoryo
users.allow_create_organization = Makakagawa ng mga organisasyon
@ -1510,13 +1538,13 @@ users.cannot_delete_self = Hindi mo maaring burahin ang sarili mo
users.still_own_repo = Ang user na ito ay nagmamay-ari pa ng isa o higit pang mga repositoryo. Burahin o ilipat sila muna.
users.list_status_filter.is_active = Aktibo
users.list_status_filter.not_active = Hindi aktibo
users.list_status_filter.is_admin = Pangangasiwa
users.list_status_filter.not_admin = Hindi Pangangasiwa
users.list_status_filter.is_admin = Tagapangasiwa
users.list_status_filter.not_admin = Hindi tagapangasiwa
users.list_status_filter.is_restricted = Pinaghihigpitan
users.list_status_filter.is_prohibit_login = Pinagbawalan ang pag-login
users.list_status_filter.not_prohibit_login = Pinapayagan ang pag-login
users.list_status_filter.is_2fa_enabled = Naka-enable ang 2FA
users.details = Mga Detalye ng User
users.details = Mga detalye ng user
dashboard.memory_allocate_times = Mga allocation ng memory
users.edit = I-edit
users = Mga user account
@ -1530,9 +1558,9 @@ emails = Mga email ng user
config = Pagsasaayos
notices = Mga paunawa ng sistema
monitor = Pag-monitor
settings = Mga setting ng pangangasiwa
settings = Mga setting ng tagapangasiwa
users.activated = Naka-activate
users.admin = Pangangasiwa
users.admin = Tagapangasiwa
users.bot = Bot
users.remote = Remote
users.local = Lokal
@ -1556,7 +1584,7 @@ users.allow_git_hook = Makakagawa ng mga Git hook
dashboard.current_memory_usage = Kasalukuyang paggamit ng memory
dashboard.gc_times = Mga oras ng GC
users.list_status_filter.reset = I-reset
users.list_status_filter.not_restricted = Hindi Pinaghihigpitan
users.list_status_filter.not_restricted = Hindi pinaghihigpitan
config_summary = Buod
dashboard.new_version_hint = Available na ang Forgejo %s, tumatakbo ka ng %s. Suriin ang <a target="_blank" rel="noreferrer" href="https://forgejo.org/news">blog</a> para sa karagdagang detalye.
dashboard.operations = Mga operasyon ng pagpapanatili
@ -1593,6 +1621,75 @@ dashboard.last_gc_pause = Huling GC pause
users.still_has_org = Ang user na ito ay isang miyembro ng isang organisasyon. Tanggalin ang user sa anumang mga organisasyon muna.
users.deletion_success = Binura na ang user account.
dashboard.heap_memory_in_use = Ginagamit na heap memory
emails.filter_sort.name = Username
emails.primary = Pauna
emails.filter_sort.email = Email
orgs.name = Pangalan
emails.activated = Naka-activate
emails.duplicate_active = Ang email address na ito ay aktibo na para sa ibang user.
emails.change_email_header = I-update ang Ari-arian ng Email
emails.filter_sort.email_reverse = Email (pabaligtad)
emails.filter_sort.name_reverse = Username (pabaligtad)
orgs.org_manage_panel = Ipamahala ang mga organisasyon
orgs.teams = Mga koponan
orgs.members = Mga miyembro
emails.change_email_text = Sigurado kang gusto mong i-update ang email address na ito?
config.app_ver = Bersyon ng Forgejo
config.git_version = Bersyon ng Git
packages.creator = Gumawa
defaulthooks.add_webhook = Magdagdag ng Default Webhook
auths.auth_manage_panel = Ipamahala ang mga source ng authentikasyon
auths.auth_name = Pangalan ng authentikasyon
auths.security_protocol = Protocol ng seguridad
auths.domain = Domain
auths.host = Host
packages.total_size = Kabuuang Laki: %s
auths.attribute_avatar = Attribute ng avatar
auths.enabled = Naka-enable
auths.syncenabled = I-enable ang user synchronization
auths.auth_type = Uri ng authentikasyon
auths.port = Port
auths.bind_dn = Bind DN
auths.bind_password = Password ng bind
auths.attribute_ssh_public_key = Attribute ng Publikong SSH key
repos.name = Pangalan
repos.private = Pribado
repos.issues = Mga isyu
repos.size = Laki
packages.type = Uri
packages.repository = Repositoryo
packages.size = Laki
auths.new = Magdagdag ng source ng authentikasyon
auths.attribute_surname = Attribute ng surname
packages.version = Bersyon
systemhooks.add_webhook = Magdagdag ng Sistemang Webhook
systemhooks.desc = Awtomatikong gumagawa ang mga Webhook ng mga HTTP POST request sa isang server kapag nag-trigger ang ilang partikular na kaganapan sa Forgejo. Ang mga webhook na tinukoy dito ay kikilos sa lahat ng mga repositoryo sa system, kaya mangyaring isaalang-alang ang anumang mga implikasyon ng performance na maaaring mayroon ito. Magbasa pa sa <a target="_blank" rel="noopener" href="https://forgejo.org/docs/latest/user/webhooks/">guide ng mga webhook</a>.
packages.cleanup.success = Matagumpay na nalinis ang na-expire na data
defaulthooks.desc = Awtomatikong gumagawa ang mga Webhook ng mga HTTP POST request sa isang server kapag nag-trigger ang ilang partikular na kaganapan sa Forgejo. Ang mga webhook na tinukoy dito ay mga default at makokopya sa lahat ng mga bagong repositoryo. Magbasa pa sa <a target="_blank" rel="noopener" href="https://forgejo.org/docs/latest/user/webhooks/">guide ng mga webhook</a>.
packages.published = Na-publish
defaulthooks = Mga default webhook
systemhooks.update_webhook = I-update ang Sistemang Webhook
auths.name = Pangalan
auths.type = Uri
defaulthooks.update_webhook = I-update ang Default Webhook
systemhooks = Mga sistemang webhook
auths.user_base = Base ng paghahanap ng user
auths.user_dn = DN ng User
auths.attribute_username = Attribute ng username
auths.attribute_username_placeholder = Iwanang walang laman para gamitin ang username na inilagay sa Forgejo.
auths.attribute_name = Attribute ng unang pangalan
packages.unreferenced_size = Walang Sangguniang Laki: %s
packages.owner = May-ari
packages.name = Pangalan
packages.cleanup = Linisin ang na-expire na data
orgs.new_orga = Bagong organisasyon
repos.repo_manage_panel = Ipamahala ang mga repositoryo
repos.unadopted = Mga unadopted na repositoryo
repos.unadopted.no_more = Wala nang mga unadopted na repositoryo na nahanap
repos.owner = May-ari
repos.lfs_size = Laki ng LFS
packages.package_manage_panel = Ipamahala ang mga package
auths.attribute_mail = Attribute ng email
[org]
repo_updated = Binago
@ -1619,22 +1716,70 @@ code = Code
[packages]
alpine.repository.branches = Mga branch
owner.settings.cargo.initialize.success = Matagumpay na nagawa ang Cargo index.
details = Mga detalye
empty = Wala pang anumang mga package.
filter.container.tagged = Naka-tag
filter.container.untagged = Hindi naka-tag
filter.type = Uri
filter.type.all = Lahat
filter.no_result = Walang resulta ang iyong filter.
about = Tungkol sa package na ito
installation = Pag-install
details.repository_site = Website ng repositoryo
details.documentation_site = Website ng dokumentasyon
alpine.repository.repositories = Mga Repositoryo
alpine.repository.architectures = Mga architechture
chef.install = Para i-install ang package na ito, patakbuhin ang sumusunod na command:
composer.registry = I-setup ang registry na ito sa iyong <code>~/.composee/config.json</code> file:
composer.install = Para i-install ang package gamit ang Composer, patakbuhin ang sumusunod na command:
empty.repo = Nag-upload ka ba ng package, ngunit hindi pinapakita dito? Pumunta sa <a href="%[1]s">mga setting ng package</a> at i-link iyan sa repo na ito.
keywords = Mga keyword
versions = Mga bersyon
title = Mga package
desc = Ipamahala ang mga package ng repositoryo.
registry.documentation = Para sa higit pang impormasyon tungkol sa %s registry, tignan ang <a target="_blank" rel="noopener noreferrer" href="%s">dokumentasyon</a>.
published_by = Na-publish ang %[1]s ni/ng <a href="%[2]s">%[3]s</a>
requirements = Mga kinakailangan
dependencies = Mga dependency
details.author = Autor
details.project_site = Website ng proyekto
details.license = Lisensya
versions.view_all = Tignan lahat
dependency.id = ID
dependency.version = Bersyon
alpine.registry = I-setup ang registry na ito sa pamamagitan ng pagdagdag ng url sa iyong <code>/etc/apk/repositories</code> file:
alpine.registry.info = Pumili ng $branch at $repository mula sa listahan sa ibaba.
alpine.install = Para i-install ang package, patakbuhin ang sumusunod na command:
alpine.repository = Info ng Repositoryo
cargo.registry = I-setup ang registry na ito sa Cargo configuration file (halimbawa <code>~/.cargo/config.toml</code>):
chef.registry = I-setup ang registry na ito sa iyong <code>~/.chef/config.rb</code> file:
composer.dependencies = Mga dependency
composer.dependencies.development = Mga dependency ng pag-develop
conan.details.repository = Repositoryo
conan.registry = I-setup ang registry na ito mula sa command line:
assets = Mga asset
empty.documentation = Para sa higit pang impormasyon sa package registry, tignan ang <a target="_blank" rel="noopener noreferrer" href="%s">dokumentasyon</a>.
cargo.install = Para i-install ang package gamit ang Cargo, patakbuhin ang sumusunod na command:
published_by_in = Na-publish ang %[1]s ni <a href="%[2]s">%[3]s </a> sa <a href="%[4]s"><strong>%[5]s</strong></a>
alpine.registry.key = I-download ang registry public RSA key sa <code>/etc/apk/keys</code> folder para i-verify ang index signature:
[actions]
runners.last_online = Huling oras [online]
runs.no_workflows.quick_start = Hindi alam kung paano magsimula gamit ang Forgejo Actions? Tingnan ang <a target="_blank" rel="noopener noreferrer" href="%s">[quick start guide]</a>.
runs.no_workflows.documentation = Para sa higit pang impormasyon tungkol sa Forgejo Actions, tingnan ang <a target="_blank" rel="noopener noreferrer" href="%s">[documentation]</a>.
runners.last_online = Huling oras na online
runs.no_workflows.quick_start = Hindi alam kung paano magsimula gamit ang Forgejo Actions? Tingnan ang <a target="_blank" rel="noopener noreferrer" href="%s">gabay sa mabilis na pagsisimula</a>.
runs.no_workflows.documentation = Para sa higit pang impormasyon tungkol sa Forgejo Actions, tingnan ang <a target="_blank" rel="noopener noreferrer" href="%s">Dokumentasyon</a>.
[action]
commit_repo = itinulak sa <a href="%[2]s">%[3]s</a> sa <a href="%[1]s">%[4]s</a>
create_issue = `binuksan ang isyu <a href="%[1]s">%[3]s#%[2]s</a>`
comment_issue = `nagkomento sa isyu <a href="%[1]s">%[3]s#%[2]s</a>`
reopen_pull_request = `binuksang muli ang [pull request]<a href="%[1]s">%[3]s#%[2]s</a>`
comment_pull = `iniwan ang komento sa [pull request] <a href="%[1]s">%[3]s#%[2]s</a>`
reopen_pull_request = `binuksang muli ang hiling sa paghatak <a href="%[1]s">%[3]s#%[2]s</a>`
comment_pull = `nagiwan ng komento sa hiling sa paghatak <a href="%[1]s">%[3]s#%[2]s</a>`
reopen_issue = `binuksang muli ang isyu <a href="%[1]s">%[3]s#%[2]s</a>`
create_pull_request = `ginawa ang hiling sa paghatak <a href="%[1]s">%[3]s#%[2]s</a>`
create_branch = ginawa ang branch na <a href="%[2]s">%[3]s</a> sa <a href="%[1]s">%[4]s</a>
create_repo = ginawa ang repositoryo na <a href="%s">%s</a>
starred_repo = na-star ang <a href="%[1]s">%[2]s</a>
watched_repo = ay sinimulang panoorin ang <a href="%[1]s">%[2]s</a>
[tool]
1m = 1 minuto
@ -1643,3 +1788,60 @@ create_repo = ginawa ang repositoryo na <a href="%s">%s</a>
1s = 1 segundo
now = ngayon
future = sa madaling panahon
months = %d buwan
1w = 1 linggo
1mon = 1 buwan
1y = 1 taon
seconds = %d segundo
minutes = %d minuto
hours = %d oras
days = %d araw
weeks = %d linggo
years = %d taon
raw_seconds = segundo
raw_minutes = minuto
[munits.data]
mib = MiB
gib = GiB
b = B
kib = KiB
tib = TiB
pib = PiB
eib = EiB
[gpg]
error.not_signed_commit = Hindi isang naka-sign na commit
error.probable_bad_signature = BABALA! Bagaman na may key na may ID na ito sa database hindi nito pinapatunayan ang commit na ito! Ang commit na ito ay KAHINA-HINALA.
error.extract_sign = Nabigong i-extract ang signature
error.no_committer_account = Walang account na naka-link sa email address ng committer
error.no_gpg_keys_found = Walang kilalang key na nahanap para sa signature na ito sa database
default_key = Naka-sign gamit ang default key
error.generate_hash = Nabigong i-generate ang hash ng commit
error.failed_retrieval_gpg_keys = Nabigong kumuha ng anumang key na naka-attach sa account ng committer
error.probable_bad_default_signature = BABALA! Bagaman na ang default key ay may ID na ito hindi nito pinapatunayan ang commit na ito! Ang commit na ito ay KAHINA-HINALA.
[notification]
unread = Hindi nabasa
read = Nabasa
no_unread = Walang mga hindi nabasang notification.
notifications = Mga abiso
no_read = Walang mga nabasang notification.
pin = I-pin ang notification
mark_as_read = Markahan bilang nabasa
mark_as_unread = Markahan bilang hindi nabasa
subscriptions = Mga subscription
watching = Pinapanood
no_subscriptions = Walang mga subscription
mark_all_as_read = Markahan lahat bilang nabasa
[units]
error.no_unit_allowed_repo = Hindi ka pinapayagang ma-access ang anumang seksyon ng repositoryong ito.
unit = Yunit
error.unit_not_allowed = Hindi ka pinapayagang ma-access ang seksyon ng repositoryong ito.
[dropzone]
default_message = I-drop ang mga file o mag-click dito para mag-upload.
invalid_input_type = Hindi ka maaring mag-upload ng mga file sa uri na ito.
file_too_big = Ang laki ng file ({{filesize}}) MB) ay lumalagpas sa pinakamataas na size na ({{maxFilesize}} MB).
remove_file = Tanggalin ang file

View file

@ -667,6 +667,7 @@ follow_blocked_user = Vous ne pouvez pas suivre cet utilisateur parce vous avez
block = Bloquer
unblock = Débloquer
following_one = Suit %d personnes
followers_one = Suivi par %d
[settings]
profile=Profil
@ -990,6 +991,9 @@ additional_repo_units_hint_description = Afficher un bouton "Ajouter plus d'unit
additional_repo_units_hint = Encourager l'ajout de nouvelles unités pour le dépôt
update_hints = Mettre à jour les suggestions
update_hints_success = Les suggestions ont été mises à jour.
pronouns_custom = Sur mesure
pronouns = Qualités
pronouns_unspecified = Non spécifié
[repo]
new_repo_helper=Un dépôt contient tous les fichiers dun projet, ainsi que lhistorique de leurs modifications. Vous avez déjà ça ailleurs ? <a href="%s">Migrez-le ici.</a>
@ -1929,7 +1933,7 @@ milestones.filter_sort.least_issues=Le moins de tickets
signing.will_sign=Cette révision sera signée avec la clé « %s ».
signing.wont_sign.error=Impossible de vérifier la signature de la révision.
signing.wont_sign.nokey=Aucune clé nest disponible pour signer cette révision.
signing.wont_sign.nokey=Aucune clé nest disponible sur cette instance pour signer cette révision.
signing.wont_sign.never=Les révisions ne sont jamais signées.
signing.wont_sign.always=Les révisions sont toujours signées.
signing.wont_sign.pubkey=La révision ne sera pas signée car vous votre compte ne possède pas de clé publique.
@ -2311,7 +2315,7 @@ settings.update_webhook=Actualiser le déclencheur
settings.update_hook_success=Déclencheur Web actualisé.
settings.delete_webhook=Retirer le webhook
settings.recent_deliveries=Livraisons récentes
settings.hook_type=Type de Hook
settings.hook_type=Type de déclencheur
settings.slack_token=Jeton
settings.slack_domain=Domaine
settings.slack_channel=Canal
@ -2374,7 +2378,7 @@ settings.protect_merge_whitelist_committers=Activer la liste blanche pour la fus
settings.protect_merge_whitelist_committers_desc=N'autoriser que les utilisateurs et les équipes en liste blanche d'appliquer les demandes de fusion sur cette branche.
settings.protect_merge_whitelist_users=Utilisateurs en liste blanche de fusion :
settings.protect_merge_whitelist_teams=Équipes en liste blanche de fusion :
settings.protect_check_status_contexts=Activer le Contrôle Qualité
settings.protect_check_status_contexts=Activer le contrôle qualité
settings.protect_status_check_patterns=Motifs de vérification des statuts :
settings.protect_status_check_patterns_desc=Entrez des motifs pour spécifier quelles vérifications doivent réussir avant que des branches puissent être fusionnées. Un motif par ligne. Un motif ne peut être vide.
settings.protect_check_status_contexts_desc=Exiger le status « succès » avant de fusionner. Quand activée, une branche protégée ne peux accepter que des soumissions ou des fusions ayant le status « succès ». Lorsqu'il n'y a pas de contexte, la dernière révision fait foi.
@ -2430,10 +2434,10 @@ settings.tags.protection.allowed=Autorisé
settings.tags.protection.allowed.users=Utilisateurs autorisés
settings.tags.protection.allowed.teams=Équipes autorisées
settings.tags.protection.allowed.noone=Personne
settings.tags.protection.create=Protéger l'étiquette
settings.tags.protection.create=Ajouter une règle
settings.tags.protection.none=Il n'y a pas d'étiquettes protégées.
settings.tags.protection.pattern.description=Vous pouvez utiliser au choix un nom unique, un motif de glob ou une expression régulière qui correspondra à plusieurs étiquettes. Pour plus dinformations, consultez le <a target="_blank" rel="noopener" href="https://forgejo.org/docs/latest/user/protection/#protected-tags">guide sur les étiquettes protégées</a>.
settings.bot_token=Jeton de Bot
settings.bot_token=Jeton de bot
settings.chat_id=ID de conversation
settings.thread_id=ID du fil
settings.matrix.homeserver_url=URL du serveur d'accueil
@ -2490,11 +2494,11 @@ diff.browse_source=Parcourir la source
diff.parent=Parent
diff.commit=révision
diff.git-notes=Notes
diff.data_not_available=Contenu de la comparaison indisponible
diff.options_button=Option de Diff
diff.show_diff_stats=Voir les Statistiques
diff.download_patch=Télécharger le Fichier Patch
diff.download_diff=Télécharger le Fichier des Différences
diff.data_not_available=Contenu de la comparaison (diff) indisponible
diff.options_button=Option de comparaison (diff)
diff.show_diff_stats=Voir les statistiques
diff.download_patch=Télécharger le patch en tant que fichier
diff.download_diff=Télécharger le fichier diff
diff.show_split_view=Vue séparée
diff.show_unified_view=Vue unifiée
diff.whitespace_button=Espace
@ -2516,7 +2520,7 @@ diff.file_suppressed=Fichier diff supprimé car celui-ci est trop grand
diff.file_suppressed_line_too_long=Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
diff.too_many_files=Certains fichiers ne sont pas affichés car ce diff contient trop de modifications
diff.show_more=Voir plus
diff.load=Voir la Diff
diff.load=Voir la diff
diff.generated=générée
diff.vendored=externe
diff.comment.add_line_comment=Commenter cette ligne
@ -2594,7 +2598,7 @@ release.tags_for=Étiquettes pour %s
branch.name=Nom de la branche
branch.already_exists=Une branche nommée "%s" existe déjà.
branch.delete_head=Supprimer
branch.delete=`Supprimer la branche "%s"`
branch.delete=Supprimer la branche "%s"
branch.delete_html=Supprimer la branche
branch.delete_desc=La suppression dune branche est permanente. Bien quune branche supprimée puisse temporairement subsister, elle NE PEUT PAS être facilement restaurée. Continuer ?
branch.deletion_success=La branche "%s" a été supprimée.
@ -2611,9 +2615,9 @@ branch.restore_success=La branche "%s" a été restaurée.
branch.restore_failed=Impossible de restaurer la branche "%s".
branch.protected_deletion_failed=La branche "%s" est protégé. Elle ne peut pas être supprimée.
branch.default_deletion_failed=La branche "%s" est la branche par défaut. Elle ne peut pas être supprimée.
branch.restore=`Restaurer la branche "%s"`
branch.download=`Télécharger la branche "%s"`
branch.rename=`Renommer la branche "%s"`
branch.restore=Restaurer la branche "%s"
branch.download=Télécharger la branche "%s"
branch.rename=Renommer la branche "%s"
branch.search=Rechercher une branche
branch.included_desc=Cette branche fait partie de la branche par défaut
branch.included=Incluses
@ -2724,6 +2728,16 @@ settings.sourcehut_builds.secrets_helper = Permettre au job d'accéder aux secre
size_format = %[1]s : %[2]s ; %[3]s : %[4]s
settings.sourcehut_builds.visibility = Visibilité du job
settings.sourcehut_builds.secrets = Secrets
settings.sourcehut_builds.manifest_path = Construire le chemin du manifeste
settings.sourcehut_builds.graphql_url = URL GraphQL (e.g. https://builds.sr.ht/query)
release.download_count_one = %s téléchargement
release.download_count_few = %s téléchargements
release.system_generated = Cet attachement a été généré automatiquement.
settings.enforce_on_admins_desc = Les administrateurs du dépôt ne peuvent pas contourner cette règle.
settings.web_hook_name_sourcehut_builds = SourceHut Builds
settings.enforce_on_admins = Contraindre les administrateurs du dépôt par cette règle
settings.rename_branch_failed_protected = Impossible de renommer la branche %s car il s'agit d'une branche protégée.
settings.event_pull_request_enforcement = Amélioration
[graphs]
component_loading=Chargement de %s…
@ -2752,7 +2766,7 @@ team_name_helper=Le nom d'équipe doit être court et mémorable.
team_desc_helper=Décrire le but ou le rôle de léquipe.
team_access_desc=Accès au dépôt
team_permission_desc=Autorisation
team_unit_desc=Permettre laccès aux Sections du dépôt
team_unit_desc=Permettre laccès aux sections du dépôt
team_unit_disabled=(Désactivé)
form.name_reserved=Le nom d'organisation "%s" est réservé.
@ -2761,7 +2775,7 @@ form.create_org_not_allowed=Vous n'êtes pas autorisé à créer une organisatio
settings=Paramètres
settings.options=Organisation
settings.full_name=Nom Complet
settings.full_name=Nom complet
settings.email=Courriel de contact
settings.website=Site Web
settings.location=Localisation
@ -2771,7 +2785,7 @@ settings.visibility=Visibilité
settings.visibility.public=Public
settings.visibility.limited=Limité (Visible uniquement aux utilisateurs authentifiés)
settings.visibility.limited_shortname=Limité
settings.visibility.private=Privé (Visible uniquement aux membres de lorganisation)
settings.visibility.private=Privé (visible uniquement aux membres de lorganisation)
settings.visibility.private_shortname=Privé
settings.update_settings=Appliquer les paramètres
@ -2817,15 +2831,15 @@ teams.read_access=Lecture
teams.read_access_helper=Les membres peuvent voir et cloner les dépôts de l'équipe.
teams.write_access=Écriture
teams.write_access_helper=Les membres peuvent voir et pousser dans les dépôts de l'équipe.
teams.admin_access=Accès Administrateur
teams.admin_access=Accès administrateur
teams.admin_access_helper=Les membres peuvent tirer et pousser des modifications vers les dépôts de l'équipe, et y ajouter des collaborateurs.
teams.no_desc=Aucune description
teams.settings=Paramètres
teams.owners_permission_desc=Les propriétaires ont un accès complet à <strong>tous les dépôts</strong> et disposent <strong> d'un accès administrateur</strong> de l'organisation.
teams.members=Membres de L'Équipe
teams.members=Membres de L'équipe
teams.update_settings=Appliquer les paramètres
teams.delete_team=Supprimer l'équipe
teams.add_team_member=Ajouter un Membre
teams.add_team_member=Ajouter un membre
teams.invite_team_member=Inviter à %s
teams.invite_team_member.list=Invitations en attente
teams.delete_team_title=Supprimer l'équipe
@ -2835,7 +2849,7 @@ teams.read_permission_desc=Cette équipe permet l'accès en <strong>lecture</str
teams.write_permission_desc=Cette équipe permet l'accès en <strong>écriture</strong> : les membres peuvent participer à ses dépôts.
teams.admin_permission_desc=Cette équipe permet l'accès <strong>administrateur</strong> : les membres peuvent voir, participer et ajouter des collaborateurs à ses dépôts.
teams.create_repo_permission_desc=De plus, cette équipe accorde la permission <strong>Créer un dépôt</strong> : les membres peuvent créer de nouveaux dépôts dans l'organisation.
teams.repositories=Dépôts de l'Équipe
teams.repositories=Dépôts de l'équipe
teams.search_repo_placeholder=Rechercher dans le dépôt…
teams.remove_all_repos_title=Supprimer tous les dépôts de l'équipe
teams.remove_all_repos_desc=Ceci supprimera tous les dépôts de l'équipe.
@ -2868,9 +2882,9 @@ repositories=Dépôts
hooks=Déclencheurs web
integrations=Intégrations
authentication=Sources d'authentification
emails=Emails de l'utilisateur
emails=Courriels de l'utilisateur
config=Configuration
notices=Informations
notices=Informations système
monitor=Surveillance
first_page=Première
last_page=Dernière
@ -2966,7 +2980,7 @@ dashboard.rebuild_issue_indexer=Reconstruire lindexeur des tickets
users.user_manage_panel=Gestion du compte utilisateur
users.new_account=Créer un compte
users.name=Nom d'utilisateur
users.full_name=Nom Complet
users.full_name=Nom complet
users.activated=Activé
users.admin=Administrateur
users.restricted=Restreint
@ -2991,9 +3005,9 @@ users.max_repo_creation=Nombre maximal de dépôts
users.max_repo_creation_desc=(Mettre à -1 pour utiliser la limite globale par défaut.)
users.is_activated=Ce compte est activé
users.prohibit_login=Désactiver la connexion
users.is_admin=Est Administrateur
users.is_admin=Est administrateur
users.is_restricted=Est restreint
users.allow_git_hook=Autoriser la création de Git Hooks
users.allow_git_hook=Autoriser la création de déclencheurs Git
users.allow_git_hook_tooltip=Les Déclencheurs Git sont exécutés par le même utilisateur que Forgejo, qui a des privilèges systèmes élevés. Les utilisateurs ayant ce droit peuvent altérer touts les dépôts, compromettre la base de données applicative, et se promouvoir administrateurs de Forgejo.
users.allow_import_local=Autoriser l'importation de dépôts locaux
users.allow_create_organization=Autoriser la création d'organisations
@ -3041,7 +3055,7 @@ orgs.members=Membres
orgs.new_orga=Nouvelle organisation
repos.repo_manage_panel=Gestion des dépôts
repos.unadopted=Dépôts dépossédés
repos.unadopted=Dépôts non adoptés
repos.unadopted.no_more=Aucun dépôt dépossédé trouvé.
repos.owner=Propriétaire
repos.name=Nom
@ -3091,8 +3105,8 @@ auths.domain=Domaine
auths.host=Hôte
auths.port=Port
auths.bind_dn=Bind DN
auths.bind_password=Bind mot de passe
auths.user_base=Utilisateur Search Base
auths.bind_password=Mot de passe Bind
auths.user_base=Utilisateur search base
auths.user_dn=Utilisateur DN
auths.attribute_username=Attribut nom d'utilisateur
auths.attribute_username_placeholder=Laisser vide afin d'utiliser le nom d'utilisateur spécifié dans Forgejo.
@ -3388,7 +3402,7 @@ notices.desc=Description
notices.op=Opération
notices.delete_success=Les informations systèmes ont été supprimées.
self_check = Auto vérification
dashboard.sync_repo_tags = Synchorniser les étiquettes depuis git vers la base de donnée
dashboard.sync_repo_tags = Synchroniser les étiquettes depuis Git vers la base de donnée
dashboard.sync_tag.started = La synchronisation des étiquettes a commencé
self_check.no_problem_found = Aucun problème n'a encore été trouvé.
self_check.database_collation_mismatch = La base de donnée devrait utiliser la collation %s
@ -3401,6 +3415,8 @@ self_check.database_collation_mismatch=Exige que la base de données utilise la
self_check.database_collation_case_insensitive=La base de données utilise la collation %s, insensible à la casse. Bien que Gitea soit compatible, il peut y avoir quelques rares cas qui ne fonctionnent pas comme prévu.
self_check.database_inconsistent_collation_columns=La base de données utilise la collation %s, mais ces colonnes utilisent des collations différentes. Cela peut causer des problèmes imprévus.
self_check.database_fix_mysql=Pour les utilisateurs de MySQL ou MariaDB, vous pouvez utiliser la commande « gitea doctor convert » dans un terminal ou exécuter une requête du type « ALTER … COLLATE ... » pour résoudre les problèmes de collation.
config_settings = Paramètres
config_summary = Résumé
[action]
create_repo=a créé le dépôt <a href="%s">%s</a>

View file

@ -73,7 +73,7 @@ forks=Fork
activities=Attivitá
pull_requests=Pull request
issues=Problemi
issues=Segnalazioni
milestones=Milestones
ok=OK
@ -117,7 +117,7 @@ concept_user_organization=Organizzazione
name=Nome
value=Valore
enable_javascript = Questo sito richiede JavaScript.
tracked_time_summary = Resoconto del tempo tracciato in base ai filtri dell'elenco dei problemi
tracked_time_summary = Resoconto del tempo cronometrato in base ai filtri dell'elenco delle segnalazioni
retry = Riprova
rerun = Ri-esegui
rerun_all = Ri-esegui tutti gli incarichi
@ -199,7 +199,7 @@ missing_csrf=Richiesta errata: nessun token CSRF presente
invalid_csrf=Richiesta errata: token CSRF non valido
not_found=Il bersaglio non è stato trovato.
network_error=Errore di rete
report_message = Se credi che questo sia un bug di Forgejo, per favore verifica i problemi su <a href="https://codeberg.org/forgejo/forgejo/issues" target="_blank">Codeberg</a> o pubblica un nuovo problema se necessario.
report_message = Se credi che questo sia un errore di Forgejo, per favore controlla le segnalazioni su <a href="https://codeberg.org/forgejo/forgejo/issues" target="_blank">Codeberg</a> o aprine una nuova se necessario.
server_internal = Errore interno del server
[startpage]
@ -230,7 +230,7 @@ ssl_mode=SSL
path=Percorso
sqlite_helper=Percorso file del database SQLite3.<br>Inserisci un percorso assoluto se stai usando Forgejo come servizio.
reinstall_error=Stai cercando di installare in un database Forgejo esistente
reinstall_confirm_message=La reinstallazione con un database Forgejo esistente può causare problemi multipli. Nella maggior parte dei casi, dovresti usare il tuo "app.ini" esistente per eseguire Forgejo. Se sai cosa stai facendo, confermi quanto segue:
reinstall_confirm_message=La reinstallazione con una base dati Forgejo esistente può causare vari problemi. Nella maggior parte dei casi, dovresti usare il tuo "app.ini" per eseguire Forgejo. Se sai cosa stai facendo, conferma quanto segue:
reinstall_confirm_check_1=I dati crittografati da SECRET_KEY nell'app. ni potrebbe essere perso: gli utenti potrebbero non essere in grado di accedere con 2FA/OTP & mirror potrebbe non funzionare correttamente. Selezionando questa casella confermi che il file attuale app.ini contiene il corretto SECRET_KEY.
reinstall_confirm_check_2=I repository e le impostazioni potrebbero avere bisogno di essere ri-sincronizzati. Selezionando questa casella confermi che potrai risincronizzare manualmente gli hook per i repository e il file authorized_keys. Confermi che assicurerai che le impostazioni del repository e del mirror siano corrette.
reinstall_confirm_check_3=Confermi di essere assolutamente sicuro che questo Forgejo è in esecuzione con l'app corretta. ni posizione e che sei sicuro di dover reinstallare. Confermi di aver riconosciuto i rischi di cui sopra.
@ -547,7 +547,7 @@ TeamName=Nome Team
AuthName=Nome autorizzazione
AdminEmail=Email dell'Admin
NewBranchName=Nuovo nome del branch
NewBranchName=Nuovo nome del ramo
CommitSummary=Riepilogo dei commit
CommitMessage=Messaggio di commit
CommitChoice=Scelta di commit
@ -608,7 +608,7 @@ invalid_ssh_principal=Principal non valido: %s
auth_failed=Autenticazione non riuscita: %v
target_branch_not_exist=Il ramo (branch) di destinazione non esiste.
target_branch_not_exist=Il ramo di destinazione non esiste.
org_still_own_packages = Questa organizzazione è ancora proprietaria di uno o più pacchetti, devi prima eliminarli.
org_still_own_repo = Questa organizzazione è ancora proprietaria di una o più repository, devi prima eliminarle o trasferirle.
still_own_packages = Il tuo profilo è ancora proprietario di uno o più pacchetti, devi prima eliminarli.
@ -629,6 +629,14 @@ still_has_org = Il tuo profilo è ancora membro di una o più organizzazioni, de
unsupported_login_type = Il tipo di accesso non è supportato per l'eliminazione del profilo.
unset_password = L'utente non ha impostato la password.
required_prefix = L'input deve iniziare con "%s"
Description = Descrizione
Pronouns = Pronomi
Biography = Biografia
Website = Sito web
Location = Posizione
AccessToken = Token di accesso
FullName = Nome e cognome
To = Nome del ramo
[user]
@ -648,7 +656,7 @@ disabled_public_activity=L'utente ha disabilitato la vista pubblica dell'attivit
joined_on = Membro dal %s
block_user = Blocca utente
block_user.detail_1 = Questo utente non ti seguirà più.
block_user.detail_2 = Questo utente non potrà interagire con le tue repository, con i problemi che hai creato o con i tuoi commenti.
block_user.detail_2 = Quest'utente non potrà interagire con le tue repository, con le segnalazioni che hai aperto né con i tuoi commenti.
block_user.detail_3 = Questo utente non ti potrà aggiungere come un collaboratore, né potrai tu aggiungerlo come un collaboratore.
code = Codice
block = Blocca
@ -772,7 +780,7 @@ add_key=Aggiungi chiave
ssh_desc=Queste chiavi SSH pubbliche sono associate al tuo profilo. Le corrispondenti chiavi private consentono l'accesso completo ai tuoi progetti. Le chiavi SSH che sono state verificate possono essere usate per verificare commit Git firmati tramite SSH.
principal_desc=Questi certificati SSH principali sono associati al tuo account e permettono l'accesso completo alle tue repository.
gpg_desc=Queste chiavi GPG pubbliche sono associate con il tuo profilo e sono usate per verificare i tuoi commit. Proteggi le tue chiavi private perché permettono di firmare i commit con la tua identità.
ssh_helper=<strong> Hai bisogno di aiuto?</strong> Dai un'occhiata alla guida di GitHub per<a href="%s">crea le tue chiavi SSH </a> o risolvere <a href="%s"> problemi comuni </a> che potresti trovare utilizzando SSH.
ssh_helper=<strong> Hai bisogno di aiuto?</strong> Dài un'occhiata alla guida per<a href="%s">creare le tue chiavi SSH </a> o risolvere quei <a href="%s"> problemi comuni </a> in cui potresti imbatterti utilizzando SSH.
gpg_helper=<strong>Hai bisogno di aiuto?</strong> Dai un'occhiata alla guida di GitHub <a href="%s">riguardo il GPG</a>.
add_new_key=Aggiungi chiave SSH
add_new_gpg_key=Aggiungi chiave GPG
@ -968,7 +976,7 @@ user_unblock_success = L'utente è stato bloccato correttamente.
user_block_success = L'utente è stato bloccato correttamente.
at_least_one_permission = Devi selezionare almeno un permesso per creare un token
oauth2_confidential_client = Client confidenziale. Seleziona per applicazioni che tengono il segreto confidenziale, come le applicazioni web. Non selezionare per applicazioni native incluse quelle desktop e mobile.
hidden_comment_types.issue_ref_tooltip = Commenti in cui l'utente ha cambiato la branch/tag associata con l'issue
hidden_comment_types.issue_ref_tooltip = Commenti in cui l'utente ha cambiato il ramo/etichetta associati con la segnalazione
add_key_success = La chiave SSH "%s" è stata aggiunta.
add_gpg_key_success = La chiave GPG "%s" è stata aggiunta.
add_principal_success = Il certificato principale SSH "%s" è stato aggiunto.
@ -1025,7 +1033,7 @@ repo_lang=Lingua
repo_gitignore_helper=Seleziona i template di .gitignore.
repo_gitignore_helper_desc=Scegli di quali file non tenere traccia da un elenco di modelli per le lingue comuni. Gli artefatti tipici generati dagli strumenti di build di ogni lingua sono inclusi su .gitignore per impostazione predefinita.
issue_labels=Etichette segnalazioni
issue_labels_helper=Seleziona un set di etichette per problemi.
issue_labels_helper=Seleziona una raccolta di etichette per le segnalazioni.
license=Licenza
license_helper=Seleziona un file di licenza.
license_helper_desc=Una licenza governa ciò che gli altri possono e non possono fare con il tuo codice. Non sei sicuro di chi è giusto per il tuo progetto? Vedi <a target="_blank" rel="noopener noreferrer" href="%s">Scegli una licenza.</a>
@ -1040,7 +1048,7 @@ trust_model_helper_collaborator_committer=Collaboratore+Committer: Fidati delle
trust_model_helper_default=Predefinito: utilizzare il modello di trust predefinito per questa installazione
create_repo=Crea progetto
default_branch=Ramo predefinito
default_branch_helper=Il ramo predefinito è il ramo base per le richieste di pull e i commit di codice.
default_branch_helper=Il ramo predefinito è il ramo base per le richieste di modifica e i commit.
mirror_prune=Rimuovi
mirror_prune_desc=Rimuovi i riferimenti di puntamento-remoto obsoleti
mirror_interval=Intervallo di specchio (le unità di tempo valide sono "h", "m", "s"). 0 per disabilitare la sincronizzazione periodica. (Intervallo minimo: %s)
@ -1096,7 +1104,7 @@ template.issue_labels=Etichette segnalazioni
template.one_item=Deve selezionare almeno un elemento del modello
template.invalid=Devi selezionare un modello di repository
archive.issue.nocomment=Questo repository è archiviato. Non puoi commentare i problemi.
archive.issue.nocomment=Questo repository è archiviato. Non puoi commentare le segnalazioni.
archive.pull.nocomment=Questo repository è archiviato. Non puoi commentare le richieste di pull.
form.reach_limit_of_creation_1=Hai già raggiunto il tuo limite di %d repository.
@ -1173,15 +1181,15 @@ empty_message=Questo repository non contiene alcun contenuto.
broken_message=I dati Git sottostanti a questo repository non possono essere letti. Contattare l'amministratore di questa istanza o eliminare questo repository.
code=Codice
code.desc=Accedi al codice sorgente, file, commits e branches.
branch=Ramo (Branch)
code.desc=Accedi al codice sorgente, ai file, ai commit e ai rami.
branch=Ramo
tree=Albero (Tree)
clear_ref=`Cancella il riferimento corrente`
filter_branch_and_tag=Filtra per branch o tag
filter_branch_and_tag=Filtra per ramo o etichetta
find_tag=Trova etichetta
branches=Rami (Branch)
branches=Rami
tags=Tag
issues=Problemi
issues=Segnalazioni
pulls=Richieste di modifica
project_board=Progetti
packages=Pacchetti
@ -1236,7 +1244,7 @@ editor.cannot_edit_lfs_files=I file LFS non possono essere modificati nell'inter
editor.cannot_edit_non_text_files=I file binari non possono essere modificati tramite interfaccia web.
editor.edit_this_file=Modifica file
editor.this_file_locked=Il file è bloccato
editor.must_be_on_a_branch=È necessario essere in un branch per eseguire o proporre modifiche su questo file.
editor.must_be_on_a_branch=È necessario essere in un ramo per eseguire o proporre modifiche su questo file.
editor.fork_before_edit=È necessario effettuare il fork di questo repository per eseguire o proporre modifiche su questo file.
editor.delete_this_file=Elimina file
editor.must_have_write_access=È necessaria l'autorizzazione di scrittura per eseguire o proporre modifiche su questo file.
@ -1252,11 +1260,11 @@ editor.patching=Patching:
editor.new_patch=Nuova Patch
editor.commit_message_desc=Aggiungi una descrizione estesa facoltativa…
editor.signoff_desc=Aggiungi "firmato da" dal committer alla fine del messaggio di log di commit.
editor.commit_directly_to_this_branch=Impegnarsi direttamente con il <strong class="branch-name">%s</strong> branch.
editor.create_new_branch=Creare un <strong> nuovo branch</strong> per questo commit e inizia una pull request.
editor.commit_directly_to_this_branch=Fai un commit direttamente sul ramo <strong class="branch-name">%s</strong>.
editor.create_new_branch=Crea un <strong> nuovo ramo</strong> per questo commit e avvia una richiesta di modifica.
editor.create_new_branch_np=Crea un <strong>nuovo ramo</strong> per questo commit.
editor.propose_file_change=Proponi la modifica del file
editor.new_branch_name_desc=Nome del nuovo branch
editor.new_branch_name_desc=Nome del nuovo ramo
editor.cancel=Cancellare
editor.filename_cannot_be_empty=Il nome del file non può essere vuoto.
editor.file_changed_while_editing=I contenuti di questo file hanno subito dei cambiamenti da quando hai iniziato la modifica. <a target="_blank" rel="noopener noreferrer" href="%s">Clicca qui</a> per visualizzarli o <strong>Conferma nuovamente le modifiche</strong> per sovrascriverli.
@ -1268,9 +1276,9 @@ editor.push_rejected_no_message=La modifica è stata rifiutata dal server senza
editor.push_rejected=La modifica è stata rifiutata dal server. Controlla Git hooks.
editor.push_rejected_summary=Messaggio Di Rifiuto Completo:
editor.add_subdir=Aggiungi una directory…
editor.no_commit_to_branch=Impossibile effettuare il commit direttamente sul branch perché:
editor.user_no_push_to_branch=L'utente non può effettuare il push sul branch
editor.require_signed_commit=Il branch richiede un commit firmato
editor.no_commit_to_branch=Impossibile effettuare il commit direttamente sul ramo perché:
editor.user_no_push_to_branch=L'utente non può immettere nel ramo
editor.require_signed_commit=Il ramo richiede un commit firmato
editor.cherry_pick=Cherry-pick %s suto:
editor.revert=Ripristina %s su:
@ -1279,7 +1287,7 @@ commits.commits=Commit
commits.nothing_to_compare=Questi rami sono uguali.
commits.search=Ricerca commits…
commits.find=Cerca
commits.search_all=Tutti i branch
commits.search_all=Tutti i Rami
commits.author=Autore
commits.message=Messaggio
commits.date=Data
@ -1293,10 +1301,10 @@ commits.ssh_key_fingerprint=Impronta chiave SSH
commit.revert=Ripristina
commit.revert-header=Ripristina: %s
commit.revert-content=Selezionare il ramo su cui ripristinare:
commit.revert-content=Seleziona il ramo sul cui ripristinare:
commit.cherry-pick=Cherry-pick
commit.cherry-pick-header=Cherry-pick: %s
commit.cherry-pick-content=Seleziona il ramo su cui scegliere:
commit.cherry-pick-content=Seleziona il ramo su cui fare una selezione selettiva:
commitstatus.error=Errore
commitstatus.pending=In sospeso
@ -1305,7 +1313,7 @@ ext_issues=Accesso a segnalazioni esterne
ext_issues.desc=Collegamento al puntatore di una issue esterna.
projects=Progetti
projects.desc=Gestisci problemi e pull nelle schede di progetto.
projects.desc=Gestisci segnalazioni e richieste di modifica nelle schede di progetto.
projects.description=Descrizione (opzionale)
projects.description_placeholder=Descrizione
projects.create=Crea progetto
@ -1316,7 +1324,7 @@ projects.deletion=Elimina progetto
projects.deletion_desc=Eliminare un progetto lo rimuove fra tutte le issue relative. Continuare?
projects.deletion_success=Il progetto è stato cancellato.
projects.edit=Modifica progetto
projects.edit_subheader=I progetti organizzano i problemi e monitorano i progressi.
projects.edit_subheader=I progetti servono a coordinare le segnalazioni e a monitorare i progressi.
projects.modify=Aggiorna progetto
projects.type.none=Nessuno
projects.type.basic_kanban=Kanban semplice
@ -1360,7 +1368,7 @@ issues.choose.get_started=Inizia
issues.choose.open_external_link=Apri
issues.choose.blank=Default
issues.choose.blank_about=Crea un problema dal modello predefinito.
issues.no_ref=Nessun ramo/etichetta specificato
issues.no_ref=Nessun ramo/etichetta specificati
issues.create=Crea segnalazione
issues.new_label=Nuova etichetta
issues.new_label_placeholder=Nome etichetta
@ -1391,7 +1399,7 @@ issues.change_title_at=`Titolo modificato da <b><strike>%s</strike></b> a <b>%s<
issues.change_ref_at=`ha cambiato il riferimento da <b><strike>%s</strike></b> a <b>%s</b> %s`
issues.remove_ref_at=`riferimento rimosso <b>%s</b> %s`
issues.add_ref_at=`aggiunto riferimento <b>%s</b> %s`
issues.delete_branch_at=`branch <b>%s</b> eliminato %s`
issues.delete_branch_at=`ramo <b>%s</b> eliminato %s`
issues.filter_label=Etichetta
issues.filter_label_exclude=`Usa <code>alt</code> + <code>click/enter</code> per escludere le etichette`
issues.filter_label_no_select=Tutte le etichette
@ -1404,7 +1412,7 @@ issues.filter_assginee_no_assignee=Nessun assegnatario
issues.filter_poster=Autore
issues.filter_poster_no_select=Tutti gli autori
issues.filter_type=Tipo
issues.filter_type.all_issues=Tutti i problemi
issues.filter_type.all_issues=Tutte le segnalazioni
issues.filter_type.assigned_to_you=Assegnati a te
issues.filter_type.created_by_you=Creati da te
issues.filter_type.mentioning_you=Che ti riguardano
@ -1479,7 +1487,7 @@ issues.label_title=Nome etichetta
issues.label_description=Descrizione etichetta
issues.label_color=Colore etichetta
issues.label_count=%d etichette
issues.label_open_issues=%d problemi aperti
issues.label_open_issues=%d segnalazioni/richieste aperte
issues.label_edit=Modifica
issues.label_delete=Elimina
issues.label_modify=Modifica etichetta
@ -1564,10 +1572,10 @@ issues.dependency.remove=Rimuovi
issues.dependency.remove_info=Rimuovi questa dipendenza
issues.dependency.added_dependency=`ha aggiunto una nuova dipendenza %s`
issues.dependency.removed_dependency=`ha rimosso una dipendenza %s`
issues.dependency.pr_closing_blockedby=La chiusura di questa pull request è bloccata dai seguenti problemi
issues.dependency.issue_closing_blockedby=La chiusura di questo problema è bloccata dai seguenti problemi
issues.dependency.issue_close_blocks=Questo problema impedisce la chiusura dei seguenti problemi
issues.dependency.pr_close_blocks=Questa richiesta di pull impedisce la chiusura dei seguenti problemi
issues.dependency.pr_closing_blockedby=Questa richiesta di modifica non può essere chiusa per via delle seguenti segnalazioni
issues.dependency.issue_closing_blockedby=Questa segnalazione non può essere chiusa per via delle seguenti segnalazioni
issues.dependency.issue_close_blocks=Questa segnalazione impedisce la chiusura delle seguenti segnalazioni
issues.dependency.pr_close_blocks=Questa richiesta di modifica impedisce la chiusura delle seguenti segnalazioni
issues.dependency.issue_close_blocked=Devi chiudere tutte le anomalie che bloiccano questo problema prima di chiudelo.
issues.dependency.pr_close_blocked=Chiudere tutte le anomalie che bloccano la richiesta di pull prima di effettaure il merge.
issues.dependency.blocks_short=Blocchi
@ -1580,8 +1588,8 @@ issues.dependency.add_error_same_issue=Non si può fare dipendere un problema da
issues.dependency.add_error_dep_issue_not_exist=Il problema dipendente non esiste.
issues.dependency.add_error_dep_not_exist=La dipendenza non esiste.
issues.dependency.add_error_dep_exists=La dipendenza esiste già.
issues.dependency.add_error_cannot_create_circular=Non puoi creare una dipendenza con due problemi che si bloccano a vicenda.
issues.dependency.add_error_dep_not_same_repo=Entrambi i problemi devono essere nello stesso repository.
issues.dependency.add_error_cannot_create_circular=Non puoi creare una dipendenza con due segnalazioni che si bloccano a vicenda.
issues.dependency.add_error_dep_not_same_repo=Entrambe le segnalazioni devono essere nello stesso repository.
issues.review.self.approval=Non puoi approvare la tua pull request.
issues.review.self.rejection=Non puoi richiedere modifiche sulla tua pull request.
issues.review.approve=hanno approvato queste modifiche %s
@ -1624,9 +1632,9 @@ pulls.new=Nuova richiesta di modifica
pulls.view=Visualizza richiesta di modifica
pulls.compare_changes=Nuova richiesta di modifica
pulls.allow_edits_from_maintainers=Consenti modifiche dai manutentori
pulls.allow_edits_from_maintainers_desc=Gli utenti con accesso in scrittura al ramo base possono anche inviare a questo ramo
pulls.allow_edits_from_maintainers_desc=Gli utenti con accesso di scrittura al ramo base possono anche immettere in questo ramo
pulls.allow_edits_from_maintainers_err=Aggiornamento non riuscito
pulls.compare_changes_desc=Selezione il branch su cui eseguire il merge e il branch da cui eseguire il pull.
pulls.compare_changes_desc=Seleziona il ramo su cui fondere e il ramo da cui prelevare.
pulls.has_viewed_file=Visualizzato
pulls.has_changed_since_last_review=Modificato dalla tua ultima recensione
pulls.viewed_files_label=%[1]d / %[2]d file visti
@ -1634,20 +1642,20 @@ pulls.compare_base=unisci a
pulls.compare_compare=esegui un pull da
pulls.switch_comparison_type=Cambia tipo di confronto
pulls.switch_head_and_base=Testa e base di commutazione
pulls.filter_branch=Filtra branch
pulls.filter_branch=Filtra ramo
pulls.no_results=Nessun risultato trovato.
pulls.nothing_to_compare=Questi rami sono uguali. Non c'è alcuna necessità di creare una pull request.
pulls.nothing_to_compare_and_allow_empty_pr=Questi rami sono uguali. Questa PR sarà vuota.
pulls.has_pull_request=`Una pull request tra questi rami esiste già: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.nothing_to_compare=Questi rami sono uguali. Non c'è bisogno di creare una richiesta di modifica.
pulls.nothing_to_compare_and_allow_empty_pr=Questi rami sono uguali. Questa richiesta sarà vuota.
pulls.has_pull_request=`Una richiesta di modifica fra questi rami esiste già: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create=Crea richiesta di modifica
pulls.title_desc_few=vorrebbe unire %[1]d commit da <code>%[2]s</code> a <code id="branch_target">%[3]s</code>
pulls.title_desc_few=vuole unire %[1]d commit da <code>%[2]s</code> a <code id="branch_target">%[3]s</code>
pulls.merged_title_desc_few=ha unito %[1]d commit da <code>%[2]s</code> a <code>%[3]s</code> %[4]s
pulls.change_target_branch_at=`cambiato il branch di destinazione da <b>%s</b> a <b>%s</b> %s`
pulls.change_target_branch_at=`cambiato il ramo di destinazione da <b>%s</b> a <b>%s</b> %s`
pulls.tab_conversation=Conversazione
pulls.tab_commits=Commit
pulls.tab_files=File modificati
pulls.reopen_to_merge=Riapri questa pull request per effettuare l'unione.
pulls.cant_reopen_deleted_branch=Questa pull request non può essere riaperta perché il branch è stato eliminato.
pulls.cant_reopen_deleted_branch=Questa richiesta di modifia non può essere riaperta perché il ramo è stato eliminato.
pulls.merged=Unito
pulls.manually_merged=Unito manualmente
pulls.is_closed=La pull request è stata chiusa.
@ -1657,7 +1665,7 @@ pulls.still_in_progress=Ancora in corso?
pulls.add_prefix=Aggiungi prefisso <strong>%s</strong>
pulls.remove_prefix=Rimuovi il prefisso <strong>%s</strong>
pulls.data_broken=Questa pull request è rovinata a causa di informazioni mancanti del fork.
pulls.files_conflicted=Questa pull request ha modifiche in conflitto con il branch di destinazione.
pulls.files_conflicted=Questa richiesta di modifica va in conflitto con il ramo di destinazione.
pulls.is_checking=Verifica dei conflitti di fusione in corso. Riprova tra qualche istante.
pulls.is_ancestor=Questo ramo è già incluso nel ramo di destinazione. Non c'è nulla da fondere.
pulls.is_empty=Le modifiche di questo ramo sono già nel ramo di destinazione. Questo sarà un commit vuoto.
@ -1675,7 +1683,7 @@ pulls.reject_count_1=%d richiesta di cambiamento
pulls.reject_count_n=%d richieste di cambiamento
pulls.waiting_count_1=%d in attesa di revisione
pulls.waiting_count_n=%d in attesa di revisione
pulls.wrong_commit_id=l'id del commit deve essere un id del commit nel ramo di destinazione
pulls.wrong_commit_id=l'ID del commit deve essere un ID del commit nel ramo di destinazione
pulls.no_merge_desc=Questa pull request non può essere unita perché tutte le opzioni di merge del repository sono disattivate.
pulls.no_merge_helper=Attiva le opzioni di merge nelle impostazioni del repository o unisci la pull request manualmente.
@ -1688,7 +1696,7 @@ pulls.rebase_merge_commit_pull_request=Ricostruisci quindi crea commit unito
pulls.squash_merge_pull_request=Crea commit mescolato
pulls.merge_manually=Unito manualmente
pulls.merge_commit_id=L'ID del commit di merge
pulls.require_signed_wont_sign=Il branch richiede commit firmati ma questo merge non verrà firmato
pulls.require_signed_wont_sign=Il ramo richiede commit firmati ma questa fusione non verrà firmata
pulls.invalid_merge_option=Non puoi utilizzare questa opzione di merge per questa pull request.
pulls.merge_conflict=Unione non riuscita: C'è stato un conflitto durante l'operazione. Suggerimento: Prova una strategia diversa
@ -1709,11 +1717,11 @@ pulls.status_checks_failure=Alcuni controlli sono falliti
pulls.status_checks_error=Alcuni controlli hanno segnalato errori
pulls.status_checks_requested=Richiesto
pulls.status_checks_details=Dettagli
pulls.update_branch=Aggiorna il ramo tramite merge
pulls.update_branch=Aggiorna il ramo tramite fusione
pulls.update_branch_rebase=Aggiorna il ramo per cambio base
pulls.update_branch_success=Brench aggiornato con successo
pulls.update_not_allowed=Non sei abilitato ad aggiornare il branch
pulls.outdated_with_base_branch=Questo brench non è aggiornato con il branch di base
pulls.update_branch_success=Ramo aggiornato con successo
pulls.update_not_allowed=Non ti è permesso aggiornare il ramo
pulls.outdated_with_base_branch=Questo ramo non è aggiornato con il ramo di base
pulls.closed_at=`chiusa questa pull request <a id="%[1]s" href="#%[1]s">%[2]s</a>`
pulls.reopened_at=`riaperta questa pull request <a id="%[1]s" href="#%[1]s">%[2]s</a>`
@ -1755,8 +1763,8 @@ milestones.deletion_desc=Eliminare una pietra miliare la rimuove da tutte le rel
milestones.deletion_success=La pietra miliare è stata eliminata.
milestones.filter_sort.least_complete=Meno completato
milestones.filter_sort.most_complete=Più completato
milestones.filter_sort.most_issues=Più problemi
milestones.filter_sort.least_issues=Meno problemi
milestones.filter_sort.most_issues=Maggior parte delle segnalazioni
milestones.filter_sort.least_issues=Meno segnalazioni
ext_wiki=Accesso al Wiki esterno
@ -1837,7 +1845,7 @@ activity.git_stats_pushed_n=hanno pushato
activity.git_stats_commit_1=%d commit
activity.git_stats_commit_n=%d commit
activity.git_stats_push_to_branch=su %s e
activity.git_stats_push_to_all_branches=a tutti i brench.
activity.git_stats_push_to_all_branches=a tutti i rami.
activity.git_stats_on_default_branch=Su %s,
activity.git_stats_file_1=%d file
activity.git_stats_file_n=%d file
@ -1884,7 +1892,7 @@ settings.mirror_settings.push_mirror.add=Aggiungi specchio di immissione
settings.sync_mirror=Sincronizza ora
settings.site=Sito web
settings.update_settings=Aggiorna impostazioni
settings.update_settings=Salva impostazioni
settings.branches.update_default_branch=Aggiorna ramo predefinito
settings.advanced_settings=Opzioni avanzate
settings.wiki_desc=Abilita wiki del progetto
@ -1900,7 +1908,7 @@ settings.external_tracker_url=URL del tracciatore di segnalazioni esterno
settings.external_tracker_url_error=L'URL del tracciatore di issue esterno non è un URL valido.
settings.external_tracker_url_desc=I visitatori verranno reindirizzati all'URL del tracciatore di issue esterno cliccando sulla scheda delle issue.
settings.tracker_url_format=Formato URL del gestore segnalazioni esterno
settings.tracker_url_format_error=L'URL del tracker di problemi esterno non è un URL valido.
settings.tracker_url_format_error=L'URL del tracciatore esterno delle segnalazioni non è un URL valido.
settings.tracker_issue_style=Formato numerico del tracciatore di segnalazioni esterno
settings.tracker_issue_style.numeric=Numerico
settings.tracker_issue_style.alphanumeric=Alfanumerico
@ -1913,8 +1921,8 @@ settings.allow_only_contributors_to_track_time=Consenti soltanto ai contributori
settings.pulls_desc=Abilita le richieste di modifica del progetto
settings.pulls.ignore_whitespace=Ignora gli spazi bianchi per evitare conflitti
settings.pulls.enable_autodetect_manual_merge=Abilita il rilevamento automatico della fusione manuale (Nota: in alcuni casi speciali possono verificarsi errori)
settings.pulls.allow_rebase_update=Abilita l'aggiornamento del ramo pull request per rebase
settings.pulls.default_delete_branch_after_merge=Elimina il ramo pull request dopo la fusione per impostazione predefinita
settings.pulls.allow_rebase_update=Abilita l'aggiornamento del ramo della richiesta per rebase
settings.pulls.default_delete_branch_after_merge=Elimina il ramo della richiesta dopo la fusione per impostazione predefinita
settings.packages_desc=Abilita registro dei pacchetti del progetto
settings.projects_desc=Abilita progetti del progetto
settings.admin_settings=Impostazioni amministratore
@ -1925,7 +1933,7 @@ settings.admin_indexer_commit_sha=Ultimo SHA indicizzato
settings.admin_indexer_unindexed=Non indicizzato
settings.reindex_button=Aggiungi alla coda di re-indicizzazione
settings.reindex_requested=Re-indicizzazione richiesta
settings.admin_enable_close_issues_via_commit_in_any_branch=Chiudi un issue tramite un commit eseguito in un branch non predefinito
settings.admin_enable_close_issues_via_commit_in_any_branch=Chiudi una segnalazione tramite un commit eseguito su un ramo non predefinito
settings.danger_zone=Zona pericolosa
settings.new_owner_has_same_repo=Il nuovo proprietario ha già un repository con lo stesso nome. Per favore scegli un altro nome.
settings.convert=Converti in un progetto regolare
@ -2034,9 +2042,9 @@ settings.event_send_everything=Tutti gli eventi
settings.event_choose=Eventi personalizzati…
settings.event_header_repository=Eventi del progetto
settings.event_create=Crea
settings.event_create_desc=Branch o tag creato.
settings.event_create_desc=Ramo o etichetta creati.
settings.event_delete=Elimina
settings.event_delete_desc=Branch o tag eliminati.
settings.event_delete_desc=Ramo o etichetta eliminati.
settings.event_fork=Fork
settings.event_fork_desc=Repository forkato.
settings.event_wiki=Wiki
@ -2052,7 +2060,7 @@ settings.event_issues_desc=Issue aperto, chiuso, riaperto o modificato.
settings.event_issue_assign=Segnalazione assegnata
settings.event_issue_assign_desc=Issue assegnata o non assegnata.
settings.event_issue_label=Segnalazione etichettata
settings.event_issue_label_desc=Etichette dei Problemi aggiornate o cancellate.
settings.event_issue_label_desc=Etichette delle segnalazioni aggiornate o cancellate.
settings.event_issue_milestone=Segnalazione risolta
settings.event_issue_milestone_desc=Obiettivo raggiunto o abbandonato.
settings.event_issue_comment=Commento segnalazione
@ -2074,7 +2082,7 @@ settings.event_pull_request_sync=Richiesta di modifica sincronizzata
settings.event_pull_request_sync_desc=Pull request sincronizzata.
settings.event_package=Pacchetto
settings.event_package_desc=Pacchetto creato o eliminato in un repository.
settings.branch_filter=Filtro branch
settings.branch_filter=Filtro rami
settings.branch_filter_desc=Whitelist dei rami per gli eventi di spinta, creazione dei rami e cancellazione dei rami, specificati come modello globo. Se vuoto o <code>*</code>, gli eventi per tutti i rami sono segnalati. Vedi la documentazione <a href="https://pkg.go.dev/github.com/gobwas/glob#Compile">github.com/gobwas/glob</a> per la sintassi. Esempi: <code>master</code>, <code>{master,release*}</code>.
settings.active=Attivo
settings.active_helper=Le informazioni sugli eventi innescati saranno inviate a questo URL del webhook.
@ -2348,8 +2356,8 @@ error.csv.unexpected=Impossibile visualizzare questo file perché contiene un ca
error.csv.invalid_field_count=Impossibile visualizzare questo file perché ha un numero errato di campi alla riga %d.
pulls.cmd_instruction_merge_desc = Unisci le modifiche e aggiornale su Forgejo.
pulls.cmd_instruction_merge_title = Merge
pulls.cmd_instruction_checkout_desc = Dalla tua repository del progetto, accedi ad un nuovo ramo e prova le modifiche.
milestones.new_subheader = I traguardi possono aiutarti ad organizzare i problemi e a tracciare i loro progressi.
pulls.cmd_instruction_checkout_desc = Dalla tua repository del progetto, accedi a un nuovo ramo e prova le modifiche.
milestones.new_subheader = I traguardi possono aiutarti ad organizzare le segnalazioni e a tracciarne i progressi.
activity.navbar.contributors = Contributori
migrate.cancel_migrating_title = Annulla migrazione
more_operations = Ulteriori operazioni
@ -2390,7 +2398,7 @@ issues.label_exclusive = Esclusivo
pulls.made_using_agit = AGit
milestones.create_success = Il traguardo "%s" è stato creato.
search.fuzzy.tooltip = Includi risultati di ricerca che combaciano anche approssimativamente al termine di ricerca
default_branch_label = default
default_branch_label = predefinito
pulls.cmd_instruction_checkout_title = Checkout
pull.deleted_branch = (eliminato):%s
issues.filter_label_select_no_label = Senza etichette
@ -2410,7 +2418,7 @@ wiki.reserved_page = La nome della pagina della wiki "%s" è riservato.
wiki.delete_page_notice_1 = La rimozione della pagina della wiki "%s" non può essere annullata. Continuare?
settings.webhook.test_delivery_desc_disabled = Per testare questo richiamo HTTP con un evento finto, attivalo.
settings.protected_branch_duplicate_rule_name = Esiste già una regola per questo insieme di rami
rss.must_be_on_branch = Devi essere su ramo per avere un feed RSS.
rss.must_be_on_branch = Devi essere su un ramo per avere un feed RSS.
admin.manage_flags = Gestisci flag
admin.enabled_flags = Flag abilitate per il progetto:
admin.update_flags = Aggiorna flag
@ -2436,11 +2444,11 @@ ambiguous_runes_description = `Questo file contiene caratteri Unicode che potreb
vendored = Vendored
generated = Generato
commit.contained_in = Questo commit è contenuto in:
commit.contained_in_default_branch = Questo commit è parte del ramo predefinito
commit.contained_in_default_branch = Questo commit fa parte del ramo predefinito
commit.load_referencing_branches_and_tags = Carica rami ed etichette che fanno riferimento a questo commit
editor.fail_to_apply_patch = Impossibile applicare toppa "%s"
editor.new_branch_name = Dai un nome al nuovo ramo per questo commit
editor.branch_already_exists = Il ramo "%s" esiste già nel progetto.
editor.new_branch_name = Dài un nome al nuovo ramo per questo commit
editor.branch_already_exists = Il ramo "%s" esiste già nella repo.
editor.directory_is_a_file = Il nome cartella "%s" è già usato come nome file in questo progetto.
editor.file_is_a_symlink = `"%s" è un collegamento simbolico. I collegamenti simbolici non possono essere modificati nell'editor web`
editor.filename_is_a_directory = Il nome file "%s" è già usato come nome cartella in questo progetto.
@ -2449,7 +2457,7 @@ editor.file_deleting_no_longer_exists = Il file in eliminazione, "%s", non esist
editor.file_already_exists = Un file chiamato "%s" esiste già in questo progetto.
editor.fail_to_update_file = Impossibile aggiornare/creare il file "%s".
editor.upload_file_is_locked = Il file "%s" è bloccato da %s.
editor.cannot_commit_to_protected_branch = Non si p fare commit sul ramo protetto "%s".
editor.cannot_commit_to_protected_branch = Non si possono fare commit sul ramo protetto "%s".
commits.search.tooltip = Puoi prefissare parole chiave con "autore:", "committer:", "dopo:", o "prima:", esempio "ripristino autore:Alice prima:2019-01-13".
issues.filter_project_all = Tutti i progetti
issues.label_exclusive_desc = Dai all'etichetta il nome <code>ambito/oggetto</code> per renderla mutualmente esclusiva con altre etichette in <code>ambito/</code>.
@ -2473,7 +2481,7 @@ pulls.filter_changes_by_commit = Filtra per commit
pulls.nothing_to_compare_have_tag = I rami/etichette selezionati sono uguali.
pulls.merged_success = Richiesta di modifica fusa correttamente e chiusa
pulls.closed = Richiesta di modifica chiusa
pulls.merged_info_text = Il ramo %s può essere eliminato ora.
pulls.merged_info_text = Il ramo %s può ora essere eliminato.
pulls.blocked_by_user = Non puoi creare una richiesta di modifica in questo progetto perché sei bloccato dal proprietario.
pulls.status_checks_hide_all = Nascondi tutti i controlli
pulls.status_checks_show_all = Mostra tutti i controlli
@ -2482,7 +2490,7 @@ pulls.close = Chiudi la richiesta di modifica
pulls.reopen_failed.head_branch = La richiesta di modifica non può essere riaperta perché il ramo genitore non esiste più.
pulls.clear_merge_message = Cancella messaggio di fusione
pulls.reopen_failed.base_branch = La richiesta di modifica non può essere riaperta perché il ramo di base non esiste più.
pulls.agit_explanation = Creata usando flusso di lavoro AGit. AGit permette ai contributori di proporre modifiche usando "git push" senza creare una derivazione o un nuovo ramo.
pulls.agit_explanation = Creata usando il flusso di lavoro AGit. AGit permette a chi contribuisce di proporre modifiche usando "git push" senza creare una derivazione o un nuovo ramo.
pulls.recently_pushed_new_branches = Hai immesso sul ramo <a href="%[3]s"><strong>%[1]s</strong></a> %[2]s
milestones.filter_sort.earliest_due_data = Scadenza più vicina
signing.wont_sign.twofa = Devi avere la verifica a due fattori abilitata per firmare i commit.
@ -2497,7 +2505,7 @@ activity.navbar.recent_commits = Commit recenti
contributors.contribution_type.filter_label = Tipi di contributo:
search.type.tooltip = Cerca tipo
search.match.tooltip = Includi solo risultati che corrispondono esattamente ai termini di ricerca
settings.mirror_settings.docs.disabled_push_mirror.instructions = Imposta il tuo progetto in modo che prelevi commit, etichette e rami da un altro progetto.
settings.mirror_settings.docs.disabled_push_mirror.instructions = Imposta il tuo progetto in modo che prelevi commit, etichette e rami da un'altra repo.
settings.mirror_settings.docs.no_new_mirrors = Il tuo progetto sta specchiando i cambiamenti a/da un altro progetto. Tieni a mente che non puoi creare nuovi specchi al momento.
settings.mirror_settings.docs.can_still_use = Nonostante tu non possa modificare specchi esistenti o crearne di nuovi puoi comunque il tuo specchio esistente.
settings.mirror_settings.docs.pull_mirror_instructions = Per impostare uno specchio di prelievo consulta:
@ -2507,13 +2515,13 @@ settings.mirror_settings.docs.pulling_remote_title = Prelievo da un progetto rem
settings.transfer_abort_success = Il trasferimento del progetto a %s è stato correttamente cancellato.
settings.enter_repo_name = Inserisci il proprietario e il nome del progetto esattamente come mostrato:
settings.confirmation_string = Stringa di conferma
settings.wiki_rename_branch_main = Normalizza il nome del ramo della wiki
settings.wiki_rename_branch_main_desc = Rinomina il ramo usato internamente dalla wiki come "%s". Questo è permanente è non può essere annullato.
settings.wiki_rename_branch_main = Normalizza il nome del ramo della Wiki
settings.wiki_rename_branch_main_desc = Rinomina il ramo usato internamente dalla Wiki in "%s". L'operazione è permanente è non può essere annullata.
settings.wiki_rename_branch_main_notices_1 = Questa operazione <strong>NON PUÒ</strong> essere annullata.
settings.wiki_branch_rename_success = Il nome del ramo della wiki del progetto è stato normalizzato correttamente.
settings.wiki_branch_rename_failure = Impossibile normalizzare il nome del ramo della wiki del progetto.
settings.confirm_wiki_branch_rename = Rinomina ramo della wiki
settings.wiki_rename_branch_main_notices_2 = Questo rinominerà permanentemente il ramo interno della wiki del progetto di %s. Passaggi esistenti dovranno essere aggiornati.
settings.wiki_branch_rename_success = Il nome del ramo della wiki della repo è stato normalizzato correttamente.
settings.wiki_branch_rename_failure = Impossibile normalizzare il nome del ramo della wiki della repo.
settings.confirm_wiki_branch_rename = Rinomina il ramo della wiki
settings.wiki_rename_branch_main_notices_2 = Ciò rinominerà permanentemente il ramo interno della wiki della repo di %s. Passaggi esistenti dovranno essere aggiornati.
settings.add_collaborator_blocked_our = Non si può aggiungere il collaboratore perché il proprietario del progetto lo ha bloccato.
settings.webhook.replay.description_disabled = Per riprodurre questo richiamo HTTP, attivalo.
settings.event_wiki_desc = Pagina wiki creata, rinominata, modificata o rimossa.
@ -2535,9 +2543,9 @@ issues.role.contributor_helper = Questo utente ha precedentemente fatto commit a
pulls.blocked_by_official_review_requests = Questa richiesta di modifica è bloccata perché manca l'approvazione di uno o più revisori ufficiali.
pulls.blocked_by_changed_protected_files_1 = Questa richiesta di modifica è bloccata perché modifica un file protetto:
pulls.blocked_by_changed_protected_files_n = Questa richiesta di modifica è bloccata perché modifica file protetti:
pulls.has_merged = Respinto: la richiesta di modifica è stata fusa, non puoi fonderla di nuovo o cambiare il ramo di destinazione.
pulls.has_merged = Errore: la richiesta di modifica è stata fusa, non puoi fonderla di nuovo o cambiare il ramo di destinazione.
milestones.filter_sort.latest_due_date = Scadenza più lontana
settings.mirror_settings.docs = Imposta il tuo progetto in modo che sincronizzi automaticamente commit, etichette e rami con un altro progetto.
settings.mirror_settings.docs = Imposta la tua repo in modo che sincronizzi automaticamente commit, etichette e rami con un'altra repo.
settings.mirror_settings.docs.disabled_pull_mirror.instructions = Imposta il tuo progetto in modo che immetta commit, etichette e rami in un altro progetto automaticamente. Gli specchi di prelievo sono stati disabilitati dall'amministratore del sito.
settings.mirror_settings.docs.disabled_push_mirror.info = Gli specchi di immissione sono stati disabilitati dall'amministratore del sito.
settings.mirror_settings.docs.more_information_if_disabled = Puoi scoprire di più riguardo specchi di prelievo e di immissione qui:
@ -2586,7 +2594,7 @@ issues.role.member_helper = questo utente è un membro dell'organizzazione che p
issues.review.pending.tooltip = Questo commento non è attualmente visibile ad altri utenti. Per inviare il tuo commento in attesa selezione "%s" -> "%s/%s/%s" in cima alla pagina.
pulls.blocked_by_approvals = Questa richiesta di modifica non ha ancora sufficienti approvazioni. %d di %d approvazioni concesse.
pulls.blocked_by_rejection = Questa richiesta di modifica ha modifiche richieste da un revisore ufficiale.
pulls.blocked_by_outdated_branch = Questa richiesta di modifica è bloccata perché è obsoleta.
pulls.blocked_by_outdated_branch = Questa richiesta di modifica è bloccata poiché obsoleta.
pulls.fast_forward_only_merge_pull_request = Solo fast-forward
signing.will_sign = Questo commit verrà firmato con la chiave "%s".
signing.wont_sign.error = C'è stato un errore durante il controllo per la firma del commit.
@ -2605,14 +2613,14 @@ settings.pull_mirror_sync_in_progress = Prelevando cambiamenti dal progetto remo
settings.push_mirror_sync_in_progress = Immettendo cambiamenti al progetto remoto %s.
settings.update_mirror_settings = Aggiorna impostazioni dello specchio
settings.branches.switch_default_branch = Passa al ramo predefinito
settings.branches.add_new_rule = Aggiungi nuova regola
settings.branches.add_new_rule = Aggiungi una nuova regola
settings.actions_desc = Abilita azioni del progetto
settings.new_owner_blocked_doer = Il nuovo proprietario ti ha bloccato.
settings.update_settings_no_unit = Ili progetto dovrebbe consentire almeno qualche tipo di interazione.
settings.add_collaborator_owner = Non si può aggiungere un proprietario come collaboratore.
branch.delete_desc = Eliminare un ramo è permanente. Nonostante il ramo eliminato potrebbe continuare ad esistere per un breve periodo di tempo prima di essere realmente eliminato, l'eliminazione NON PUÒ essere annullata in molti casi. Continuare?
branch.delete_desc = L'eliminazione di un ramo è definitiva. Nonostante il ramo eliminato potrebbe continuare ad esistere per un breve periodo di tempo prima di essere realmente eliminato, l'eliminazione NON PUÒ essere annullata in molti casi. Continuare?
editor.invalid_commit_mail = Email invalida per creare un commit.
editor.branch_does_not_exist = Il ramo "%s" non esiste nel progetto.
editor.branch_does_not_exist = Il ramo "%s" non esiste nella repo.
issues.label_archive = Archivia etichetta
issues.label_archived_filter = Mostra etichette archiviate
issues.dependency.no_permission_n = Non hai il permesso di lettura per leggere %s dipendenze
@ -2661,7 +2669,7 @@ tag.ahead.target = a %s da questa etichetta
release.tag_helper_new = Nuova etichetta. Questa etichetta sarà creata dalla destinazione.
release.tag_helper_existing = Etichetta esistente.
release.deletion_desc = La rimozione di un rilascio lo rimuove solo da Forgejo. Non influenza l'etichetta Git, i contenuti del tuo progetto o la sua cronologia. Continuare?
branch.already_exists = Un ramo chiamato "%s" esiste già.
branch.already_exists = Esiste già un ramo chiamato "%s".
settings.merge_style_desc = Modalità di fusione
settings.remove_protected_branch_failed = Impossibile rimuovere la regola di protezione del ramo "%s".
settings.remove_protected_branch_success = La regola di protezione del ramo "%s" è stata rimossa.
@ -2715,12 +2723,16 @@ release.download_count_one = %s download
release.download_count_few = %s downloads
release.system_generated = Questo allegato è stato generato automaticamente.
pulls.ready_for_review = Pronto alla revisione?
editor.commit_id_not_matching = L'ID del commit non combacia con quello che stavi modificando. Conferma le tue modifiche su un nuovo ramo, poi uniscilo al ramo desiderato.
editor.commit_id_not_matching = L'ID del commit non combacia con quello del commit che stavi modificando. Conferma le tue modifiche su un nuovo ramo, poi fondilo col ramo desiderato.
n_branch_few = %s rami
n_tag_one = %s tag
commits.search_branch = Questo Ramo
settings.rename_branch_failed_protected = Non è possibile rinominare il ramo %s perché è un ramo protetto.
settings.event_pull_request_enforcement = Imposizione
settings.matrix.room_id_helper = L'ID della Stanza può essere ricavato dal web client Element > Stanza > Impostazioni > Avanzato > ID interno stanza. Esempio: %s.
settings.graphql_url = URL GraphQL
settings.sourcehut_builds.access_token_helper = Token di accesso con grant JOBS:RW. Genera un <a target="_blank" rel="noopener noreferrer" href="%s">token builds.sr.ht</a> o un <a target="_blank" rel="noopener noreferrer" href="%s">token builds.sr.ht con accesso ai segreti</a> su meta.sr.ht.
settings.matrix.access_token_helper = È consigliata l'impostazione di un account Matrix dedicato per questa funzione. Il token di accesso può essere prelevato dal web client Element (in una pagina privata/incognito) > Menu utente (in alto a sinistra) > Tutte le impostazioni > Aiuto e informazioni > Avanzato > Token di accesso (sotto all'URL del Homeserver). Chiudi la pagina privata/incognito (La disconnessione invaliderebbe il token).
[graphs]
contributors.what = contribuzioni
@ -2978,7 +2990,7 @@ users.delete_account=Elimina profilo utente
users.cannot_delete_self=Non puoi eliminare te stesso
users.still_own_repo=Questo utente possiede ancora una o più repository. Eliminare o trasferire questi repository prima di continuare.
users.still_has_org=Questo utente è membro di un'organizzazione. Rimuovi l'utente da tutte le organizzazioni prima di proseguire.
users.purge=Elimina Utente
users.purge=Elimina utente
users.purge_help=Eliminare forzatamente l'utente e tutti i progetti, le organizzazioni e i pacchetti di proprietà dell'utente. Anche tutti i commenti e le segnalazioni verranno eliminati.
users.deletion_success=L'account utente è stato eliminato.
users.reset_2fa=Resetta 2FA
@ -2987,13 +2999,13 @@ users.list_status_filter.reset=Ripristina
users.list_status_filter.is_active=Attivo
users.list_status_filter.not_active=Inattivo
users.list_status_filter.is_admin=Amministratore
users.list_status_filter.not_admin=Non Amministratore
users.list_status_filter.not_admin=Non amministratore
users.list_status_filter.is_restricted=Limitato
users.list_status_filter.not_restricted=Non Limitato
users.list_status_filter.is_prohibit_login=Divieto Di Login
users.list_status_filter.not_prohibit_login=Consenti Login
users.list_status_filter.is_2fa_enabled=2FA Abilitato
users.list_status_filter.not_2fa_enabled=2FA Disabilitato
users.list_status_filter.not_restricted=Non limitato
users.list_status_filter.is_prohibit_login=Accesso vietato
users.list_status_filter.not_prohibit_login=Accesso consentito
users.list_status_filter.is_2fa_enabled=2FA abilitato
users.list_status_filter.not_2fa_enabled=2FA disabilitato
emails.email_manage_panel=Gestisci email dell'utente
emails.primary=Primario
@ -3022,7 +3034,7 @@ repos.private=Privati
repos.watches=Segue
repos.stars=Voti
repos.forks=Fork
repos.issues=Problemi
repos.issues=Segnalazioni
repos.size=Dimensione
packages.package_manage_panel=Gestisci pacchetti
@ -3721,7 +3733,7 @@ runners.new_notice = Come avviare un esecutore
runners.new = Crea un nuovo esecutore
variables.update.success = La variabile è stata modificata.
variables.update.failed = Impossibile modificare la variabile.
variables.creation.failed = Impossibile aggiungere variabile.
variables.creation.failed = Errore nell'aggiunta della variabile.
variables.deletion.success = La variabile è stata rimossa.
variables.deletion.failed = Impossibile rimuovere la variabile.
variables.edit = Modifica variabile
@ -3775,7 +3787,7 @@ package_kind = Ricerca pacchetti...
code_search_unavailable = La ricerca del codice non è attualmente disponibile. Contatta l'amministratore del sito.
code_kind = Cerca codice...
team_kind = Cerca team...
code_search_by_git_grep = I risultati della ricerca del codice sono forniti da "git grep". Potrebbero esserci risultati migliori se l'amministratore del sito avesse abilitato l'Indicizzatore del Codice.
code_search_by_git_grep = I risultati della ricerca del codice sono forniti da "git grep". Potrebbero esserci risultati migliori se l'amministratore del sito avesse abilitato l'indicizzatore del codice.
project_kind = Ricerca progetti...
commit_kind = Ricerca commit...
branch_kind = Ricerca rami...

View file

@ -19,8 +19,8 @@ language=Idioma
notifications=Notificações
active_stopwatch=Cronômetro ativo
create_new=Criar…
user_profile_and_more=Perfil e Configurações...
signed_in_as=Acessado como
user_profile_and_more=Perfil e configurações…
signed_in_as=Sessão iniciada como
enable_javascript=Este site requer JavaScript.
toc=Índice
licenses=Licenças
@ -37,18 +37,18 @@ twofa_scratch=Código de backup da autenticação de dois fatores
passcode=Senha
webauthn_insert_key=Insira sua chave de segurança
webauthn_sign_in=Pressione o botão na sua chave de segurança. Se a sua chave de segurança não tiver um botão, insira-a novamente.
webauthn_press_button=Por favor, pressione o botão na sua chave de segurança…
webauthn_sign_in=Pressione o botão na sua chave de segurança. Caso a sua chave de segurança não possuir um botão, insira-a novamente.
webauthn_press_button=Pressione o botão na sua chave de segurança…
webauthn_use_twofa=Use um código de duas etapas do seu telefone
webauthn_error=Não foi possível ler sua chave de segurança.
webauthn_unsupported_browser=Seu navegador não oferece suporte ao WebAuthn.
webauthn_error_unknown=Ocorreu um erro desconhecido. Por favor, tente novamente.
webauthn_error_insecure=`WebAuthn suporta apenas conexões seguras. Para testar via HTTP, você pode usar a origem "localhost" ou "127.0.0.1"`
webauthn_error_unknown=Ocorreu um erro desconhecido. Tente novamente.
webauthn_error_insecure=WebAuthn suporta apenas conexões seguras. Para testar via HTTP, você pode usar a origem "localhost" ou "127.0.0.1"
webauthn_error_unable_to_process=O servidor não pôde processar sua solicitação.
webauthn_error_duplicated=A chave de segurança não é permitida para esta solicitação. Por favor, certifique-se que a chave já não está registrada.
webauthn_error_empty=Você deve definir um nome para esta chave.
webauthn_error_timeout=Tempo limite atingido antes de sua chave poder ser lida. Por favor, recarregue esta página e tente novamente.
webauthn_reload=Recarregar
webauthn_error_timeout=Não foi possível ler a sua chave de segurança antes do tempo limite. Atualize a página e tente novamente.
webauthn_reload=Atualizar
repository=Repositório
organization=Organização
@ -79,7 +79,7 @@ pull_requests=Pull requests
issues=Issues
milestones=Marcos
ok=Ok
ok=OK
cancel=Cancelar
retry=Tentar novamente
rerun=Reexecutar
@ -614,6 +614,7 @@ org_still_own_packages=Esta organização ainda possui pacotes, exclua-os primei
target_branch_not_exist=O branch de destino não existe.
username_error_no_dots = ` pode conter apenas caracteres alfanuméricos ("0-9, "a-z", "A-Z"), hífens ("-") e traços inferiores ("_"). Não é permitido conter caracteres não alfanuméricos no início ou fim. Caracteres não alfanuméricos consecutivos também não são permitidos.`
admin_cannot_delete_self = Você não pode excluir a si mesmo quando você é um administrador. Por favor, remova suas permissões de administrador primeiro.
AccessToken = Token de acesso
[user]
@ -1057,9 +1058,9 @@ author_search_tooltip=Mostra um máximo de 30 usuários
transfer.accept=Aceitar transferência
transfer.accept_desc=`Transferir para "%s"`
transfer.accept_desc=Transferir para "%s"
transfer.reject=Rejeitar transferência
transfer.reject_desc=`Cancelar a transferência para "%s"`
transfer.reject_desc=Cancelar a transferência para "%s"
transfer.no_permission_to_accept=Você não tem permissão para aceitar essa transferência.
transfer.no_permission_to_reject=Você não tem permissão para rejeitar essa transferência.
@ -2870,31 +2871,31 @@ users.list_status_filter.not_restricted=Não restrito
users.list_status_filter.is_prohibit_login=Proibir login
users.list_status_filter.not_prohibit_login=Permitir login
users.list_status_filter.is_2fa_enabled=2FA Ativado
users.list_status_filter.not_2fa_enabled=2FA Desativado
users.list_status_filter.not_2fa_enabled=Autenticação em duas etapas desativada
users.details=Detalhes do usuário
emails.email_manage_panel=Gerenciamento de E-mail de Usuário
emails.email_manage_panel=Gerenciar e-mails de usuários
emails.primary=Principal
emails.activated=Ativado
emails.activated=Em uso
emails.filter_sort.email=E-mail
emails.filter_sort.email_reverse=E-mail (reverso)
emails.filter_sort.name=Nome de Usuário
emails.filter_sort.name_reverse=Nome de Usuário (reverso)
emails.updated=E-mail atualizado
emails.filter_sort.email_reverse=E-mail (decrescente)
emails.filter_sort.name=Usuário
emails.filter_sort.name_reverse=Usuário (decrescente)
emails.updated=Endereço de e-mail atualizado
emails.not_updated=Falha ao atualizar o endereço de e-mail solicitado: %v
emails.duplicate_active=Este endereço de e-mail já está ativo para um usuário diferente.
emails.duplicate_active=Este endereço de e-mail já está em uso por outro usuário.
emails.change_email_header=Atualizar Propriedades do E-mail
orgs.org_manage_panel=Gerenciamento da organização
orgs.org_manage_panel=Gerenciar organizações
orgs.name=Nome
orgs.teams=Equipes
orgs.members=Membros
orgs.new_orga=Nova organização
repos.repo_manage_panel=Gerenciamento do repositório
repos.repo_manage_panel=Gerenciar repositórios
repos.unadopted=Repositórios Não Adotados
repos.unadopted.no_more=Não foram encontrados mais repositórios não adotados
repos.owner=Proprietário
repos.owner=Proprietário(a)
repos.name=Nome
repos.private=Privado
repos.watches=Observadores
@ -2904,9 +2905,9 @@ repos.issues=Issues
repos.size=Tamanho
repos.lfs_size=Tamanho do LFS
packages.package_manage_panel=Gerenciamento de Pacotes
packages.total_size=Tamanho Total: %s
packages.unreferenced_size=Tamanho Não Referenciado: %s
packages.package_manage_panel=Gerenciar pacotes
packages.total_size=Tamanho total: %s
packages.unreferenced_size=Tamanho não referenciado: %s
packages.cleanup=Limpar dados expirados
packages.owner=Proprietário
packages.creator=Criador
@ -2925,13 +2926,13 @@ systemhooks=Webhooks do Sistema
systemhooks.add_webhook=Adicionar Webhook do Sistema
systemhooks.update_webhook=Atualizar Webhook do Sistema
auths.auth_manage_panel=Gerenciamento de fonte de autenticação
auths.auth_manage_panel=Gerenciar fontes de autenticação
auths.new=Adicionar fonte de autenticação
auths.name=Nome
auths.type=Tipo
auths.enabled=Habilitado
auths.enabled=Habilitada
auths.syncenabled=Habilitar sincronização de usuário
auths.updated=Atualizado
auths.updated=Atualizada
auths.auth_type=Tipo de autenticação
auths.auth_name=Nome da autenticação
auths.security_protocol=Protocolo de segurança
@ -2941,7 +2942,7 @@ auths.port=Porta
auths.bind_dn=Vincular DN
auths.bind_password=Vincular senha
auths.user_base=Base de pesquisa do usuário
auths.user_dn=Usuário do DN
auths.user_dn=DN do usuário
auths.attribute_username=Atributo nome de usuário
auths.attribute_username_placeholder=Deixe em branco para usar o nome de usuário inserido no Forgejo.
auths.attribute_name=Atributo primeiro nome
@ -2951,11 +2952,11 @@ auths.attribute_ssh_public_key=Atributo de chave SSH pública
auths.attribute_avatar=Atributo do avatar
auths.attributes_in_bind=Buscar os atributos no contexto de Bind DN
auths.allow_deactivate_all=Permitir que um resultado de pesquisa vazio para desativar todos os usuários
auths.use_paged_search=Use a pesquisa paginada
auths.use_paged_search=Usar pesquisa paginada
auths.search_page_size=Tamanho da página
auths.filter=Filtro de usuário
auths.admin_filter=Filtro de administrador
auths.restricted_filter=Filtro de restrição
auths.restricted_filter=Filtro restrito
auths.restricted_filter_helper=Deixe em branco para não definir nenhum usuário como restrito. Use um asterisco ('*') para definir todos os usuários que não correspondem ao Filtro de administrador como restritos.
auths.verify_group_membership=Verificar associação ao grupo no LDAP (deixe o filtro vazio para ignorar)
auths.group_search_base=Grupo de Pesquisa DN Base
@ -2963,34 +2964,34 @@ auths.group_attribute_list_users=Atributo do Grupo que Contém a Lista de Usuár
auths.user_attribute_in_group=Atributo do Usuário Listado em Grupo
auths.map_group_to_team=Mapear grupos LDAP para Organizações (deixe o campo vazio para pular)
auths.map_group_to_team_removal=Remover usuários de equipes sincronizadas se o usuário não pertence ao grupo LDAP correspondente
auths.enable_ldap_groups=Habilitar grupos do LDAP
auths.enable_ldap_groups=Habilitar grupos LDAP
auths.ms_ad_sa=Atributos de pesquisa do MS AD
auths.smtp_auth=Tipo de autenticação SMTP
auths.smtphost=Host SMTP
auths.smtpport=Porta SMTP
auths.smtphost=Servidor
auths.smtpport=Porta
auths.allowed_domains=Domínios permitidos
auths.allowed_domains_helper=Deixe em branco para permitir todos os domínios. Separe vários domínios com uma vírgula (',').
auths.skip_tls_verify=Pular verificação de TLS
auths.allowed_domains_helper=Deixe em branco para permitir todos os domínios. Separe múltiplos domínios com uma vírgula (",").
auths.skip_tls_verify=Ignorar validação TLS
auths.force_smtps=Forçar SMTPS
auths.force_smtps_helper=SMTPS é sempre usado no porto 465. Defina isso para forçar o SMTPS em outros portos. (Caso contrário STARTTLS será usado em outros portos se for suportado pelo host.)
auths.helo_hostname=HELO Hostname
auths.helo_hostname=Nome de servidor HELO
auths.helo_hostname_helper=Hostname enviado com HELO. Deixe em branco para enviar o hostname atual.
auths.disable_helo=Desativar HELO
auths.pam_service_name=Nome de Serviço PAM
auths.pam_service_name=Nome do serviço PAM
auths.pam_email_domain=Domínio de e-mail do PAM (opcional)
auths.oauth2_provider=Provedor OAuth2
auths.oauth2_icon_url=URL do Ícone
auths.oauth2_icon_url=URL do ícone
auths.oauth2_clientID=ID do cliente (chave)
auths.oauth2_clientSecret=Client Secret
auths.openIdConnectAutoDiscoveryURL=URL do OpenID Connect Auto Discovery
auths.oauth2_use_custom_url=Usar URLs personalizadas em vez de URLs padrão
auths.oauth2_tokenURL=URL do Token
auths.oauth2_authURL=URL de Authorização
auths.oauth2_clientSecret=Segredo do cliente
auths.openIdConnectAutoDiscoveryURL=URL de descoberta automática de conexão do OpenID
auths.oauth2_use_custom_url=Usar URLs personalizados em vez de URLs padrão
auths.oauth2_tokenURL=URL do código
auths.oauth2_authURL=URL da autorização
auths.oauth2_profileURL=URL do perfil
auths.oauth2_emailURL=URL de e-mail
auths.skip_local_two_fa=Pular 2FA local
auths.oauth2_emailURL=URL do e-mail
auths.skip_local_two_fa=Ignorar autenticação em duas etapas local
auths.skip_local_two_fa_helper=Deixar desligado significa que os usuários locais com 2FA ligada ainda terão que fazer login com 2FA
auths.oauth2_tenant=Tenant
auths.oauth2_tenant=Locatário
auths.oauth2_scopes=Escopos Adicionais
auths.oauth2_required_claim_name=Nome do Claim Obrigatorio
auths.oauth2_required_claim_name_helper=Defina este nome para permitir o login desta fonte apenas para usuários que tenham um claim com este nome
@ -3484,7 +3485,7 @@ rpm.repository.multiple_groups = Este pacote está disponível em vários grupos
secrets=Segredos
description=Os segredos serão passados a certas ações e não poderão ser lidos de outra forma.
none=Não há segredos ainda.
creation=Adicionar Segredo
creation=Adicionar segredo
creation.name_placeholder=apenas caracteres alfanuméricos ou underline (_), não pode começar com GITEA_ ou GITHUB_
creation.value_placeholder=Insira qualquer conteúdo. Espaços em branco no início e no fim serão omitidos.
creation.success=O segredo "%s" foi adicionado.
@ -3513,7 +3514,7 @@ runners=Runners
runners.runner_manage_panel=Gerenciamento de Runners
runners.new=Criar novo Runner
runners.new_notice=Como iniciar um runner
runners.status=Status
runners.status=Estado
runners.id=ID
runners.name=Nome
runners.owner_type=Tipo
@ -3524,10 +3525,10 @@ runners.runner_title=Runner
runners.task_list=Tarefas recentes neste runner
runners.task_list.no_tasks=Ainda não há nenhuma tarefa.
runners.task_list.run=Executar
runners.task_list.status=Status
runners.task_list.status=Estado
runners.task_list.repository=Repositório
runners.task_list.commit=Commit
runners.task_list.done_at=Feito em
runners.task_list.done_at=Realizada em
runners.edit_runner=Editar Runner
runners.update_runner=Atualizar as Alterações
runners.update_runner_success=Runner atualizado com sucesso
@ -3541,7 +3542,7 @@ runners.none=Nenhum runner disponível
runners.status.unspecified=Desconhecido
runners.status.idle=Inativo
runners.status.active=Ativo
runners.status.offline=Offiline
runners.status.offline=Offline
runners.version=Versão
runners.reset_registration_token_success=Token de registro de runner redefinido com sucesso
@ -3581,7 +3582,7 @@ type-3.display_name=Projeto da organização
[git.filemode]
; Ordered by git filemode value, ascending. E.g. directory has "040000", normal file has "100644", …
symbolic_link=Link simbólico
symbolic_link=Ligação simbólica
changed_filemode = %[1]s → %[2]s
directory = Diretório
normal_file = Arquivo normal
@ -3612,3 +3613,4 @@ fuzzy_tooltip = Inclui resultados que se aproximam dos termos de busca
match = Correspondente
match_tooltip = Inclui apenas os resultados que correspondem exatamente aos termos de busca
repo_kind = Buscar repositórios...
type_tooltip = Tipo de busca

View file

@ -627,6 +627,12 @@ admin_cannot_delete_self=Não se pode auto-remover quando tem privilégios de ad
username_error_no_dots = ` só pode conter caracteres alfanuméricos ("0-9","a-z","A-Z"), hífen ('-'), sublinhado ('_') e ponto ('.') Não pode começar nem terminar com caracteres não alfanuméricos, e caracteres não alfanuméricos consecutivos também são proibidos.`
unset_password = O utilizador não definiu a senha.
unsupported_login_type = O tipo de início de sessão não é suportado para eliminar a conta.
Biography = Biografia
Website = Sítio web
Location = Localização
To = Nome do ramo
required_prefix = A entrada tem de começar com "%s"
AccessToken = Código de acesso
[user]
change_avatar=Mude o seu avatar…
@ -652,6 +658,16 @@ settings=Configurações do utilizador
form.name_reserved=O nome de utilizador "%s" está reservado.
form.name_pattern_not_allowed=O padrão "%s" não é permitido no nome de utilizador.
form.name_chars_not_allowed=O nome de utilizador "%s" contém caracteres inválidos.
block = Bloquear
unblock = Desbloquear
followers_one = %d seguidor
following_one = %d seguindo
block_user.detail = Note que se bloquear este utilizador, serão executadas outras operações, tais como:
block_user.detail_1 = Está a deixar de ser seguido por este utilizador.
block_user.detail_2 = Este utilizador não pode interagir com os seus repositórios, questões criadas e comentários.
block_user.detail_3 = Este/a utilizador/a não o/a pode adicionar como colaborador/a nem você pode o/a adicionar como colaborador/a.
follow_blocked_user = Não pode seguir este/a utilizador/a porque você o/a bloqueou ou este/a utilizador/a bloqueou-o/a a si.
block_user = Bloquear utilizador
[settings]
profile=Perfil
@ -964,6 +980,20 @@ visibility.limited=Limitada
visibility.limited_tooltip=Visível apenas para utilizadores autenticados
visibility.private=Privada
visibility.private_tooltip=Visível apenas para membros das organizações a que se associou
additional_repo_units_hint = Encorajar a habilitação de unidades do repositório adicionais
update_hints = Modificar sugestões
change_password = Modificar a senha
pronouns = Pronomes
pronouns_custom = Personalizado
pronouns_unspecified = Não especificado
hints = Sugestões
blocked_users = Utilizadores bloqueados
blocked_since = Bloqueado desde %s
user_block_success = O utilizador foi bloqueado com sucesso.
additional_repo_units_hint_description = Mostrar um botão "Adicionar mais unidades..." para repositórios que não têm todas as unidades disponíveis habilitadas.
update_hints_success = As sugestões foram modificadas.
blocked_users_none = Não há utilizadores bloqueados.
user_unblock_success = O utilizador foi desbloqueado com sucesso.
[repo]
new_repo_helper=Um repositório contém todos os ficheiros do trabalho, incluindo o histórico das revisões. Já tem um hospedado noutro sítio? <a href="%s">Migre o repositório</a>.
@ -2624,6 +2654,32 @@ find_file.no_matching=Não foi encontrado qualquer ficheiro correspondente
error.csv.too_large=Não é possível apresentar este ficheiro por ser demasiado grande.
error.csv.unexpected=Não é possível apresentar este ficheiro porque contém um caractere inesperado na linha %d e coluna %d.
error.csv.invalid_field_count=Não é possível apresentar este ficheiro porque tem um número errado de campos na linha %d.
issues.blocked_by_user = Não pode criar uma questão neste repositório porque foi bloqueado/a pelo/a proprietário/a do repositório.
issues.num_participants_one = %d participante
stars = Favoritos
editor.invalid_commit_mail = Email inválido para criar um cometimento.
editor.push_out_of_date = O envio parece estar fora de prazo.
admin.enabled_flags = Marcadores habilitados no repositório:
admin.update_flags = Modificar marcadores
admin.flags_replaced = Os marcadores do repositório foram substituídos
commits.browse_further = Explorar mais um pouco
commits.renamed_from = Renomeado de %s
size_format = %[1]s: %[2]s, %[3]s: %[4]s
issues.archived_label_description = (arquivado) %s
admin.failed_to_replace_flags = Falhou a reposição dos marcadores do repositório
open_with_editor = Abrir com %s
admin.manage_flags = Gerir marcadores
file_follow = Seguir ligação simbólica
rss.must_be_on_branch = Tem que estar num ramo que tenha uma fonte RSS.
n_commit_few = %s cometimentos
n_branch_one = %s ramo
n_branch_few = %s ramos
n_tag_one = %s etiqueta
n_tag_few = %s etiquetas
migrate.forgejo.description = Migrar dados de codeberg.org ou de outras instâncias Forgejo.
n_commit_one = %s cometimento
editor.commit_id_not_matching = O ID de cometimento não corresponde ao que estava a editar. Cometa para um ramo novo e depois integre.
commits.search_branch = Este ramo
[graphs]
component_loading=A carregar %s...

View file

@ -629,6 +629,14 @@ username_error_no_dots = ` может состоять только из лат
unsupported_login_type = Удаление аккаунта невозможно с этим типом авторизации.
unset_password = У пользователя не задан пароль.
required_prefix = Должно начинаться с «%s»
AccessToken = Токен доступа
FullName = Полное имя
Description = Описание
Pronouns = Местоимения
Biography = О себе
Website = Веб-сайт
Location = Местоположение
To = Название ветки
[user]
@ -914,7 +922,7 @@ revoke_oauth2_grant=Отозвать доступ
revoke_oauth2_grant_description=Отзыв доступа у этого стороннего приложения не позволит ему получать доступ к вашим данным. Вы уверены?
revoke_oauth2_grant_success=Доступ был успешно отозван.
twofa_desc=Двухфакторная аутентификация повышает уровень безопасности вашей учётной записи.
twofa_desc=Для дополнительной защиты учётной записи вы можете настроить аутентификацию по одноразовым «TOTP» кодам, генерируемым на смартфоне или другом устройстве.
twofa_recovery_tip=При утере устройства вы сможете восстановить доступ к учётной записи, использовав одноразовый ключ восстановления.
twofa_is_enrolled=Ваша учётная запись в настоящее время <strong>использует</strong> двухфакторную аутентификацию.
twofa_not_enrolled=Ваша учётная запись в настоящее время не использует двухфакторную аутентификацию.
@ -1306,8 +1314,8 @@ editor.commit_empty_file_text=Файл, который вы собираетес
editor.no_changes_to_show=Нет изменений.
editor.fail_to_update_file=Не удалось обновить/создать файл «%s».
editor.fail_to_update_file_summary=Ошибка:
editor.push_rejected_no_message=Изменение отклонено сервером без сообщения. Пожалуйста, проверьте хуки Git.
editor.push_rejected=Изменение отклонено сервером. Пожалуйста, проверьте хуки Git.
editor.push_rejected_no_message=Изменение отклонено сервером без сообщения. Пожалуйста, проверьте Git-хуки.
editor.push_rejected=Изменение отклонено сервером. Пожалуйста, проверьте Git-хуки.
editor.push_rejected_summary=Полное сообщение об отклонении:
editor.add_subdir=Добавить каталог…
editor.unable_to_upload_files=Не удалось загрузить файлы в «%s» из-за ошибки: %v
@ -1435,9 +1443,9 @@ issues.new_label=Новая метка
issues.new_label_placeholder=Имя метки
issues.new_label_desc_placeholder=Описание
issues.create_label=Добавить метку
issues.label_templates.title=Загрузить набор предопределённых меток
issues.label_templates.title=Загрузить набор меток
issues.label_templates.info=Меток пока нет. Создайте новую метку или используйте этот набор меток:
issues.label_templates.helper=Выберите метку
issues.label_templates.helper=Выберите набор меток
issues.label_templates.use=Использовать набор меток
issues.label_templates.fail_to_load_file=Не удалось загрузить файл шаблона меток «%s»: %v
issues.add_label=добавлена метка %s %s
@ -1526,7 +1534,7 @@ issues.commented_at=`оставлен комментарий в <a href="#%s"> %
issues.delete_comment_confirm=Вы уверены, что хотите удалить этот комментарий?
issues.context.copy_link=Копировать ссылку
issues.context.quote_reply=Цитировать ответ
issues.context.reference_issue=Ссылка в новой задаче
issues.context.reference_issue=Сослаться в новой задаче
issues.context.edit=Редактировать
issues.context.delete=Удалить
issues.no_content=Описание отсутствует.
@ -2722,6 +2730,11 @@ settings.event_pull_request_enforcement = Форсирование
pulls.cmd_instruction_checkout_desc = В репозитории вашего проекта перейдите на эта ветку и протестируйте изменения.
error.broken_git_hook = Гит-хуки этого репозитория сломаны. Ознакомьтесь с <a target="_blank" rel="noreferrer" href="%s">документацией</a> и почините их, затем отправьте какие-нибудь коммиты для обновления статуса.
pulls.cmd_instruction_checkout_title = Перейдите на ветку
settings.graphql_url = Ссылка GraphQL
settings.sourcehut_builds.access_token_helper = Токен builds.sr.ht с разрешением JOBS:RW. Создайте <a target="_blank" rel="noopener noreferrer" href="%s">обычный токен</a> или <a target="_blank" rel="noopener noreferrer" href="%s">токен с доступом к секретам</a> на meta.sr.ht.
settings.matrix.room_id_helper = ID комнаты можно получить в веб-клиенте Element: Настройки комнаты > Подробности > Внутренний ID комнаты. Пример: %s.
settings.matrix.access_token_helper = Рекомендуется создать отдельный аккаунт. Токен доступа можно получить в веб-клиенте Element (в приватной вкладке или режиме инкогнито): Пользовательское меню (сверху слева) > Все настройки > Помощь и о программе > Токен доступа (под ссылкой Homeserver). Закройте вкладку/окно, не выходя из Element. Выход аннулирует токен.
settings.mirror_settings.pushed_repository = Удалённый репозиторий
[graphs]
@ -2861,7 +2874,7 @@ integrations=Интеграции
authentication=Аутентификация
emails=Адреса эл. почты пользователей
config=Конфигурация
notices=Системные уведомления
notices=Системные оповещения
monitor=Мониторинг
first_page=Первая
last_page=Последняя
@ -2998,7 +3011,7 @@ users.list_status_filter.is_admin=Администраторы
users.list_status_filter.not_admin=Не администраторы
users.list_status_filter.is_restricted=Ограниченные
users.list_status_filter.not_restricted=Не ограниченные
users.list_status_filter.is_prohibit_login=Запрещён вход
users.list_status_filter.is_prohibit_login=Вход запрещён
users.list_status_filter.not_prohibit_login=Вход разрешён
users.list_status_filter.is_2fa_enabled=А включена
users.list_status_filter.not_2fa_enabled=А отключена
@ -3351,7 +3364,7 @@ monitor.queue.settings.changed=Настройки обновлены
monitor.queue.settings.remove_all_items=Удалить все
monitor.queue.settings.remove_all_items_done=Все элементы в очереди были удалены.
notices.system_notice_list=Уведомления системы
notices.system_notice_list=Системные оповещения
notices.view_detail_header=Подробности уведомления
notices.operations=Операции
notices.select_all=Выбрать всё
@ -3389,6 +3402,7 @@ config.open_with_editor_app_help = Приложения для "Открыть
config_settings = Настройки
auths.tips.gmail_settings = Настройки Gmail:
auths.tip.gitlab_new = Создайте новое приложение в https://gitlab.com/-/profile/applications
monitor.queue.review_add = Подробности / добавить рабочих
[action]
@ -3750,6 +3764,8 @@ runs.no_workflows.quick_start = Не знаете, как начать испо
runs.no_workflows.documentation = Чтобы узнать больше о Действиях Forgejo, читайте <a target="_blank" rel="noopener noreferrer" href="%s">документацию</a>.
runs.workflow = Рабочий поток
runs.status_no_select = Любой статус
runs.no_matching_online_runner_helper = Нет работающего раннера с меткой: %s
runs.no_job_without_needs = Рабочий процесс должен содержать хотя бы одну задачу без зависимостей.
[projects]
type-1.display_name=Индивидуальный проект

153
package-lock.json generated
View file

@ -34,17 +34,17 @@
"katex": "0.16.10",
"license-checker-webpack-plugin": "0.2.1",
"mermaid": "10.9.0",
"mini-css-extract-plugin": "2.8.1",
"mini-css-extract-plugin": "2.9.0",
"minimatch": "9.0.4",
"monaco-editor": "0.47.0",
"monaco-editor-webpack-plugin": "7.1.0",
"pdfobject": "2.3.0",
"postcss": "8.4.38",
"postcss-loader": "8.1.1",
"postcss-nesting": "12.1.1",
"postcss-nesting": "12.1.2",
"pretty-ms": "9.0.0",
"sortablejs": "1.15.2",
"swagger-ui-dist": "5.13.0",
"swagger-ui-dist": "5.17.0",
"tailwindcss": "3.4.3",
"temporal-polyfill": "0.2.4",
"throttle-debounce": "5.0.0",
@ -54,7 +54,7 @@
"tributejs": "5.1.3",
"uint8-to-base64": "0.2.0",
"vanilla-colorful": "0.7.2",
"vue": "3.4.23",
"vue": "3.4.24",
"vue-bar-graph": "2.0.0",
"vue-chartjs": "5.3.1",
"vue-loader": "17.4.2",
@ -95,7 +95,7 @@
"stylelint-value-no-unknown-custom-properties": "6.0.1",
"svgo": "3.2.0",
"updates": "16.0.1",
"vite-string-plugin": "1.1.5",
"vite-string-plugin": "1.2.0",
"vitest": "1.4.0"
},
"engines": {
@ -2668,105 +2668,102 @@
}
},
"node_modules/@vue/compiler-core": {
"version": "3.4.23",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.23.tgz",
"integrity": "sha512-HAFmuVEwNqNdmk+w4VCQ2pkLk1Vw4XYiiyxEp3z/xvl14aLTUBw2OfVH3vBcx+FtGsynQLkkhK410Nah1N2yyQ==",
"version": "3.4.24",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.24.tgz",
"integrity": "sha512-vbW/tgbwJYj62N/Ww99x0zhFTkZDTcGh3uwJEuadZ/nF9/xuFMC4693P9r+3sxGXISABpDKvffY5ApH9pmdd1A==",
"dependencies": {
"@babel/parser": "^7.24.1",
"@vue/shared": "3.4.23",
"@babel/parser": "^7.24.4",
"@vue/shared": "3.4.24",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.0"
}
},
"node_modules/@vue/compiler-dom": {
"version": "3.4.23",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.23.tgz",
"integrity": "sha512-t0b9WSTnCRrzsBGrDd1LNR5HGzYTr7LX3z6nNBG+KGvZLqrT0mY6NsMzOqlVMBKKXKVuusbbB5aOOFgTY+senw==",
"version": "3.4.24",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.24.tgz",
"integrity": "sha512-4XgABML/4cNndVsQndG6BbGN7+EoisDwi3oXNovqL/4jdNhwvP8/rfRMTb6FxkxIxUUtg6AI1/qZvwfSjxJiWA==",
"dependencies": {
"@vue/compiler-core": "3.4.23",
"@vue/shared": "3.4.23"
"@vue/compiler-core": "3.4.24",
"@vue/shared": "3.4.24"
}
},
"node_modules/@vue/compiler-sfc": {
"version": "3.4.23",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.23.tgz",
"integrity": "sha512-fSDTKTfzaRX1kNAUiaj8JB4AokikzStWgHooMhaxyjZerw624L+IAP/fvI4ZwMpwIh8f08PVzEnu4rg8/Npssw==",
"version": "3.4.24",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.24.tgz",
"integrity": "sha512-nRAlJUK02FTWfA2nuvNBAqsDZuERGFgxZ8sGH62XgFSvMxO2URblzulExsmj4gFZ8e+VAyDooU9oAoXfEDNxTA==",
"dependencies": {
"@babel/parser": "^7.24.1",
"@vue/compiler-core": "3.4.23",
"@vue/compiler-dom": "3.4.23",
"@vue/compiler-ssr": "3.4.23",
"@vue/shared": "3.4.23",
"@babel/parser": "^7.24.4",
"@vue/compiler-core": "3.4.24",
"@vue/compiler-dom": "3.4.24",
"@vue/compiler-ssr": "3.4.24",
"@vue/shared": "3.4.24",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.8",
"magic-string": "^0.30.10",
"postcss": "^8.4.38",
"source-map-js": "^1.2.0"
}
},
"node_modules/@vue/compiler-sfc/node_modules/magic-string": {
"version": "0.30.9",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.9.tgz",
"integrity": "sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==",
"version": "0.30.10",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
"integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.15"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@vue/compiler-ssr": {
"version": "3.4.23",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.23.tgz",
"integrity": "sha512-hb6Uj2cYs+tfqz71Wj6h3E5t6OKvb4MVcM2Nl5i/z1nv1gjEhw+zYaNOV+Xwn+SSN/VZM0DgANw5TuJfxfezPg==",
"version": "3.4.24",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.24.tgz",
"integrity": "sha512-ZsAtr4fhaUFnVcDqwW3bYCSDwq+9Gk69q2r/7dAHDrOMw41kylaMgOP4zRnn6GIEJkQznKgrMOGPMFnLB52RbQ==",
"dependencies": {
"@vue/compiler-dom": "3.4.23",
"@vue/shared": "3.4.23"
"@vue/compiler-dom": "3.4.24",
"@vue/shared": "3.4.24"
}
},
"node_modules/@vue/reactivity": {
"version": "3.4.23",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.23.tgz",
"integrity": "sha512-GlXR9PL+23fQ3IqnbSQ8OQKLodjqCyoCrmdLKZk3BP7jN6prWheAfU7a3mrltewTkoBm+N7qMEb372VHIkQRMQ==",
"version": "3.4.24",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.24.tgz",
"integrity": "sha512-nup3fSYg4i4LtNvu9slF/HF/0dkMQYfepUdORBcMSsankzRPzE7ypAFurpwyRBfU1i7Dn1kcwpYsE1wETSh91g==",
"dependencies": {
"@vue/shared": "3.4.23"
"@vue/shared": "3.4.24"
}
},
"node_modules/@vue/runtime-core": {
"version": "3.4.23",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.23.tgz",
"integrity": "sha512-FeQ9MZEXoFzFkFiw9MQQ/FWs3srvrP+SjDKSeRIiQHIhtkzoj0X4rWQlRNHbGuSwLra6pMyjAttwixNMjc/xLw==",
"version": "3.4.24",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.24.tgz",
"integrity": "sha512-c7iMfj6cJMeAG3s5yOn9Rc5D9e2/wIuaozmGf/ICGCY3KV5H7mbTVdvEkd4ZshTq7RUZqj2k7LMJWVx+EBiY1g==",
"dependencies": {
"@vue/reactivity": "3.4.23",
"@vue/shared": "3.4.23"
"@vue/reactivity": "3.4.24",
"@vue/shared": "3.4.24"
}
},
"node_modules/@vue/runtime-dom": {
"version": "3.4.23",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.23.tgz",
"integrity": "sha512-RXJFwwykZWBkMiTPSLEWU3kgVLNAfActBfWFlZd0y79FTUxexogd0PLG4HH2LfOktjRxV47Nulygh0JFXe5f9A==",
"version": "3.4.24",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.24.tgz",
"integrity": "sha512-uXKzuh/Emfad2Y7Qm0ABsLZZV6H3mAJ5ZVqmAOlrNQRf+T5mxpPGZBfec1hkP41t6h6FwF6RSGCs/gd8WbuySQ==",
"dependencies": {
"@vue/runtime-core": "3.4.23",
"@vue/shared": "3.4.23",
"@vue/runtime-core": "3.4.24",
"@vue/shared": "3.4.24",
"csstype": "^3.1.3"
}
},
"node_modules/@vue/server-renderer": {
"version": "3.4.23",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.23.tgz",
"integrity": "sha512-LDwGHtnIzvKFNS8dPJ1SSU5Gvm36p2ck8wCZc52fc3k/IfjKcwCyrWEf0Yag/2wTFUBXrqizfhK9c/mC367dXQ==",
"version": "3.4.24",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.24.tgz",
"integrity": "sha512-H+DLK4sQF6sRgzKyofmlEVBIV/9KrQU6HIV7nt6yIwSGGKvSwlV8pqJlebUKLpbXaNHugdSfAbP6YmXF69lxow==",
"dependencies": {
"@vue/compiler-ssr": "3.4.23",
"@vue/shared": "3.4.23"
"@vue/compiler-ssr": "3.4.24",
"@vue/shared": "3.4.24"
},
"peerDependencies": {
"vue": "3.4.23"
"vue": "3.4.24"
}
},
"node_modules/@vue/shared": {
"version": "3.4.23",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.23.tgz",
"integrity": "sha512-wBQ0gvf+SMwsCQOyusNw/GoXPV47WGd1xB5A1Pgzy0sQ3Bi5r5xm3n+92y3gCnB3MWqnRDdvfkRGxhKtbBRNgg=="
"version": "3.4.24",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.24.tgz",
"integrity": "sha512-BW4tajrJBM9AGAknnyEw5tO2xTmnqgup0VTnDAMcxYmqOX0RG0b9aSUGAbEKolD91tdwpA6oCwbltoJoNzpItw=="
},
"node_modules/@vue/test-utils": {
"version": "2.4.5",
@ -8813,9 +8810,9 @@
}
},
"node_modules/mini-css-extract-plugin": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz",
"integrity": "sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==",
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz",
"integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==",
"dependencies": {
"schema-utils": "^4.0.0",
"tapable": "^2.2.1"
@ -9768,9 +9765,9 @@
}
},
"node_modules/postcss-nesting": {
"version": "12.1.1",
"resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.1.tgz",
"integrity": "sha512-qc74KvIAQNa5ujZKG1UV286dhaDW6basbUy2i9AzNU/T8C9hpvGu9NZzm1SfePe2yP7sPYgpA8d4sPVopn2Hhw==",
"version": "12.1.2",
"resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.2.tgz",
"integrity": "sha512-FUmTHGDNundodutB4PUBxt/EPuhgtpk8FJGRsBhOuy+6FnkR2A8RZWIsyyy6XmhvX2DZQQWIkvu+HB4IbJm+Ew==",
"funding": [
{
"type": "github",
@ -11398,9 +11395,9 @@
}
},
"node_modules/swagger-ui-dist": {
"version": "5.13.0",
"resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.13.0.tgz",
"integrity": "sha512-uaWhh6j18IIs5tOX0arvIBnVINAzpTXaQXkr7qAk8zoupegJVg0UU/5+S/FgsgVCnzVsJ9d7QLjIxkswEeTg0Q=="
"version": "5.17.0",
"resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.17.0.tgz",
"integrity": "sha512-PtEozc87rN6i6rqLYNVTK+1ZAYmCMy6poU6I2MOJXD19BVv6D7U9zwS8geRbtfamCM5yUwWkSNQKWGK58vculg=="
},
"node_modules/sync-fetch": {
"version": "0.4.5",
@ -12182,9 +12179,9 @@
}
},
"node_modules/vite-string-plugin": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/vite-string-plugin/-/vite-string-plugin-1.1.5.tgz",
"integrity": "sha512-KRCIFX3PWVUuEjpi9O7EKLT9E27OqOA3RimIvVx6cziLAUxvnk2VvHQfMrP+mKkqyqqSmnnYyTig3OyDnK/zlA==",
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/vite-string-plugin/-/vite-string-plugin-1.2.0.tgz",
"integrity": "sha512-IijlLgTxUDUwOpLoBLZCZO2us4fZWPRpj8XWoD9OAYjjUEge8enV4gaDTOs7uEsC8EJ9+NmusdLwmgWajFO45Q==",
"dev": true
},
"node_modules/vite/node_modules/@types/estree": {
@ -12319,15 +12316,15 @@
}
},
"node_modules/vue": {
"version": "3.4.23",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.4.23.tgz",
"integrity": "sha512-X1y6yyGJ28LMUBJ0k/qIeKHstGd+BlWQEOT40x3auJFTmpIhpbKLgN7EFsqalnJXq1Km5ybDEsp6BhuWKciUDg==",
"version": "3.4.24",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.4.24.tgz",
"integrity": "sha512-NPdx7dLGyHmKHGRRU5bMRYVE+rechR+KDU5R2tSTNG36PuMwbfAJ+amEvOAw7BPfZp5sQulNELSLm5YUkau+Sg==",
"dependencies": {
"@vue/compiler-dom": "3.4.23",
"@vue/compiler-sfc": "3.4.23",
"@vue/runtime-dom": "3.4.23",
"@vue/server-renderer": "3.4.23",
"@vue/shared": "3.4.23"
"@vue/compiler-dom": "3.4.24",
"@vue/compiler-sfc": "3.4.24",
"@vue/runtime-dom": "3.4.24",
"@vue/server-renderer": "3.4.24",
"@vue/shared": "3.4.24"
},
"peerDependencies": {
"typescript": "*"

View file

@ -33,17 +33,17 @@
"katex": "0.16.10",
"license-checker-webpack-plugin": "0.2.1",
"mermaid": "10.9.0",
"mini-css-extract-plugin": "2.8.1",
"mini-css-extract-plugin": "2.9.0",
"minimatch": "9.0.4",
"monaco-editor": "0.47.0",
"monaco-editor-webpack-plugin": "7.1.0",
"pdfobject": "2.3.0",
"postcss": "8.4.38",
"postcss-loader": "8.1.1",
"postcss-nesting": "12.1.1",
"postcss-nesting": "12.1.2",
"pretty-ms": "9.0.0",
"sortablejs": "1.15.2",
"swagger-ui-dist": "5.13.0",
"swagger-ui-dist": "5.17.0",
"tailwindcss": "3.4.3",
"temporal-polyfill": "0.2.4",
"throttle-debounce": "5.0.0",
@ -53,7 +53,7 @@
"tributejs": "5.1.3",
"uint8-to-base64": "0.2.0",
"vanilla-colorful": "0.7.2",
"vue": "3.4.23",
"vue": "3.4.24",
"vue-bar-graph": "2.0.0",
"vue-chartjs": "5.3.1",
"vue-loader": "17.4.2",
@ -94,7 +94,7 @@
"stylelint-value-no-unknown-custom-properties": "6.0.1",
"svgo": "3.2.0",
"updates": "16.0.1",
"vite-string-plugin": "1.1.5",
"vite-string-plugin": "1.2.0",
"vitest": "1.4.0"
},
"browserslist": ["defaults"]

View file

@ -15,6 +15,7 @@
"helpers:pinGitHubActionDigests"
],
"semanticCommits": "disabled",
"automergeStrategy": "merge-commit",
"postUpdateOptions": ["gomodTidy", "gomodUpdateImportPaths", "npmDedupe"],
"prConcurrentLimit": 5,
"packageRules": [

View file

@ -30,7 +30,7 @@ import (
user_service "code.gitea.io/gitea/services/user"
)
func parseAuthSource(ctx *context.APIContext, u *user_model.User, sourceID int64, loginName string) {
func parseAuthSource(ctx *context.APIContext, u *user_model.User, sourceID int64) {
if sourceID == 0 {
return
}
@ -47,7 +47,6 @@ func parseAuthSource(ctx *context.APIContext, u *user_model.User, sourceID int64
u.LoginType = source.Type
u.LoginSource = source.ID
u.LoginName = loginName
}
// CreateUser create a user
@ -83,12 +82,13 @@ func CreateUser(ctx *context.APIContext) {
Passwd: form.Password,
MustChangePassword: true,
LoginType: auth.Plain,
LoginName: form.LoginName,
}
if form.MustChangePassword != nil {
u.MustChangePassword = *form.MustChangePassword
}
parseAuthSource(ctx, u, form.SourceID, form.LoginName)
parseAuthSource(ctx, u, form.SourceID)
if ctx.Written() {
return
}

View file

@ -983,6 +983,8 @@ func Routes() *web.Route {
m.Post("/migrate", reqToken(), bind(api.MigrateRepoOptions{}), repo.Migrate)
m.Group("/{username}/{reponame}", func() {
m.Get("/compare/*", reqRepoReader(unit.TypeCode), repo.CompareDiff)
m.Combo("").Get(reqAnyRepoReader(), repo.Get).
Delete(reqToken(), reqOwner(), repo.Delete).
Patch(reqToken(), reqAdmin(), bind(api.EditRepoOption{}), repo.Edit)

View file

@ -437,7 +437,7 @@ func GetBranchProtection(ctx *context.APIContext) {
return
}
ctx.JSON(http.StatusOK, convert.ToBranchProtection(ctx, bp))
ctx.JSON(http.StatusOK, convert.ToBranchProtection(ctx, bp, repo))
}
// ListBranchProtections list branch protections for a repo
@ -470,7 +470,7 @@ func ListBranchProtections(ctx *context.APIContext) {
}
apiBps := make([]*api.BranchProtection, len(bps))
for i := range bps {
apiBps[i] = convert.ToBranchProtection(ctx, bps[i])
apiBps[i] = convert.ToBranchProtection(ctx, bps[i], repo)
}
ctx.JSON(http.StatusOK, apiBps)
@ -682,7 +682,7 @@ func CreateBranchProtection(ctx *context.APIContext) {
return
}
ctx.JSON(http.StatusCreated, convert.ToBranchProtection(ctx, bp))
ctx.JSON(http.StatusCreated, convert.ToBranchProtection(ctx, bp, repo))
}
// EditBranchProtection edits a branch protection for a repo
@ -964,7 +964,7 @@ func EditBranchProtection(ctx *context.APIContext) {
return
}
ctx.JSON(http.StatusOK, convert.ToBranchProtection(ctx, bp))
ctx.JSON(http.StatusOK, convert.ToBranchProtection(ctx, bp, repo))
}
// DeleteBranchProtection deletes a branch protection for a repo

View file

@ -0,0 +1,99 @@
// Copyright 2024 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package repo
import (
"net/http"
"strings"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/gitrepo"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/services/context"
"code.gitea.io/gitea/services/convert"
)
// CompareDiff compare two branches or commits
func CompareDiff(ctx *context.APIContext) {
// swagger:operation GET /repos/{owner}/{repo}/compare/{basehead} Get commit comparison information
// ---
// summary: Get commit comparison information
// produces:
// - application/json
// parameters:
// - name: owner
// in: path
// description: owner of the repo
// type: string
// required: true
// - name: repo
// in: path
// description: name of the repo
// type: string
// required: true
// - name: basehead
// in: path
// description: compare two branches or commits
// type: string
// required: true
// responses:
// "200":
// "$ref": "#/responses/Compare"
// "404":
// "$ref": "#/responses/notFound"
if ctx.Repo.GitRepo == nil {
gitRepo, err := gitrepo.OpenRepository(ctx, ctx.Repo.Repository)
if err != nil {
ctx.Error(http.StatusInternalServerError, "OpenRepository", err)
return
}
ctx.Repo.GitRepo = gitRepo
defer gitRepo.Close()
}
infoPath := ctx.Params("*")
infos := []string{ctx.Repo.Repository.DefaultBranch, ctx.Repo.Repository.DefaultBranch}
if infoPath != "" {
infos = strings.SplitN(infoPath, "...", 2)
if len(infos) != 2 {
if infos = strings.SplitN(infoPath, "..", 2); len(infos) != 2 {
infos = []string{ctx.Repo.Repository.DefaultBranch, infoPath}
}
}
}
_, _, headGitRepo, ci, _, _ := parseCompareInfo(ctx, api.CreatePullRequestOption{
Base: infos[0],
Head: infos[1],
})
if ctx.Written() {
return
}
defer headGitRepo.Close()
verification := ctx.FormString("verification") == "" || ctx.FormBool("verification")
files := ctx.FormString("files") == "" || ctx.FormBool("files")
apiCommits := make([]*api.Commit, 0, len(ci.Commits))
userCache := make(map[string]*user_model.User)
for i := 0; i < len(ci.Commits); i++ {
apiCommit, err := convert.ToCommit(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, ci.Commits[i], userCache,
convert.ToCommitOptions{
Stat: true,
Verification: verification,
Files: files,
})
if err != nil {
ctx.ServerError("toCommit", err)
return
}
apiCommits = append(apiCommits, apiCommit)
}
ctx.JSON(http.StatusOK, &api.Compare{
TotalCommits: len(ci.Commits),
Commits: apiCommits,
})
}

View file

@ -421,3 +421,9 @@ type swaggerBlockedUserList struct {
// in:body
Body []api.BlockedUser `json:"body"`
}
// swagger:response Compare
type swaggerCompare struct {
// in:body
Body api.Compare `json:"body"`
}

21
routers/common/compare.go Normal file
View file

@ -0,0 +1,21 @@
// Copyright 2024 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package common
import (
repo_model "code.gitea.io/gitea/models/repo"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/git"
)
// CompareInfo represents the collected results from ParseCompareInfo
type CompareInfo struct {
HeadUser *user_model.User
HeadRepo *repo_model.Repository
HeadGitRepo *git.Repository
CompareInfo *git.CompareInfo
BaseBranch string
HeadBranch string
DirectComparison bool
}

View file

@ -132,7 +132,7 @@ func InitWebInstalled(ctx context.Context) {
if setting.EnableSQLite3 {
log.Info("SQLite3 support is enabled")
} else if setting.Database.Type.IsSQLite3() {
log.Fatal("SQLite3 support is disabled, but it is used for database setting. Please get or build a Gitea release with SQLite3 support.")
log.Fatal("SQLite3 support is disabled, but it is used for database setting. Please get or build a Forgejo release with SQLite3 support.")
}
mustInitCtx(ctx, common.InitDBEngine)

View file

@ -212,7 +212,7 @@ func checkDatabase(ctx *context.Context, form *forms.InstallForm) bool {
}
if hasPostInstallationUser && dbMigrationVersion > 0 {
log.Error("The database is likely to have been used by Gitea before, database migration version=%d", dbMigrationVersion)
log.Error("The database is likely to have been used by Forgejo before, database migration version=%d", dbMigrationVersion)
confirmed := form.ReinstallConfirmFirst && form.ReinstallConfirmSecond && form.ReinstallConfirmThird
if !confirmed {
ctx.Data["Err_DbInstalledBefore"] = true
@ -220,11 +220,11 @@ func checkDatabase(ctx *context.Context, form *forms.InstallForm) bool {
return false
}
log.Info("User confirmed re-installation of Gitea into a pre-existing database")
log.Info("User confirmed re-installation of Forgejo into a pre-existing database")
}
if hasPostInstallationUser || dbMigrationVersion > 0 {
log.Info("Gitea will be installed in a database with: hasPostInstallationUser=%v, dbMigrationVersion=%v", hasPostInstallationUser, dbMigrationVersion)
log.Info("Forgejo will be installed in a database with: hasPostInstallationUser=%v, dbMigrationVersion=%v", hasPostInstallationUser, dbMigrationVersion)
}
return true

View file

@ -69,7 +69,7 @@ func QueueSet(ctx *context.Context) {
}
func QueueRemoveAllItems(ctx *context.Context) {
// Gitea's queue doesn't have transaction support
// Queue in Forgejo doesn't have transaction support
// So in rare cases, the queue could be corrupted/out-of-sync
// Site admin could remove all items from the queue to make it work again
qid := ctx.ParamsInt64("qid")

View file

@ -104,7 +104,7 @@ func Projects(ctx *context.Context) {
}
for _, project := range projects {
project.RenderedContent = templates.SanitizeHTML(project.Description) // FIXME: is it right? why not render?
project.RenderedContent = templates.RenderMarkdownToHtml(ctx, project.Description)
}
err = shared_user.LoadHeaderCount(ctx)
@ -372,7 +372,7 @@ func ViewProject(ctx *context.Context) {
}
}
project.RenderedContent = templates.SanitizeHTML(project.Description) // FIXME: is it right? why not render?
project.RenderedContent = templates.RenderMarkdownToHtml(ctx, project.Description)
ctx.Data["LinkedPRs"] = linkedPrsMap
ctx.Data["PageIsViewProjects"] = true
ctx.Data["CanWriteProjects"] = canWriteProjects(ctx)

View file

@ -35,6 +35,7 @@ import (
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/typesniffer"
"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/routers/common"
"code.gitea.io/gitea/services/context"
"code.gitea.io/gitea/services/context/upload"
"code.gitea.io/gitea/services/gitdiff"
@ -185,21 +186,10 @@ func setCsvCompareContext(ctx *context.Context) {
}
}
// CompareInfo represents the collected results from ParseCompareInfo
type CompareInfo struct {
HeadUser *user_model.User
HeadRepo *repo_model.Repository
HeadGitRepo *git.Repository
CompareInfo *git.CompareInfo
BaseBranch string
HeadBranch string
DirectComparison bool
}
// ParseCompareInfo parse compare info between two commit for preparing comparing references
func ParseCompareInfo(ctx *context.Context) *CompareInfo {
func ParseCompareInfo(ctx *context.Context) *common.CompareInfo {
baseRepo := ctx.Repo.Repository
ci := &CompareInfo{}
ci := &common.CompareInfo{}
fileOnly := ctx.FormBool("file-only")
@ -576,7 +566,7 @@ func ParseCompareInfo(ctx *context.Context) *CompareInfo {
// PrepareCompareDiff renders compare diff page
func PrepareCompareDiff(
ctx *context.Context,
ci *CompareInfo,
ci *common.CompareInfo,
whitespaceBehavior git.TrustedCmdArgs,
) bool {
var (

View file

@ -556,7 +556,7 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry) {
// The Open Group Base Specification: https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html
// empty: 0 lines; "a": 1 incomplete-line; "a\n": 1 line; "a\nb": 1 line, 1 incomplete-line;
// Gitea uses the definition (like most modern editors):
// Forgejo uses the definition (like most modern editors):
// empty: 0 lines; "a": 1 line; "a\n": 2 lines; "a\nb": 2 lines;
// When rendering, the last empty line is not rendered in UI, while the line-number is still counted, to tell users that the file contains a trailing EOL.
// To make the UI more consistent, it could use an icon mark to indicate that there is no trailing EOL, and show line-number as the rendered lines.

View file

@ -258,7 +258,7 @@ func Routes() *web.Route {
routes.Get("/metrics", append(mid, Metrics)...)
}
routes.Get("/robots.txt", append(mid, misc.RobotsTxt)...)
routes.Methods("GET,HEAD", "/robots.txt", append(mid, misc.RobotsTxt)...)
routes.Get("/ssh_info", misc.SSHInfo)
routes.Get("/api/healthz", healthcheck.Check)

View file

@ -80,6 +80,11 @@ func newNotifyInput(repo *repo_model.Repository, doer *user_model.User, event we
}
}
func newNotifyInputForSchedules(repo *repo_model.Repository) *notifyInput {
// the doer here will be ignored as we force using action user when handling schedules
return newNotifyInput(repo, user_model.NewActionsUser(), webhook_module.HookEventSchedule)
}
func (input *notifyInput) WithDoer(doer *user_model.User) *notifyInput {
input.Doer = doer
return input
@ -562,7 +567,7 @@ func DetectAndHandleSchedules(ctx context.Context, repo *repo_model.Repository)
// We need a notifyInput to call handleSchedules
// if repo is a mirror, commit author maybe an external user,
// so we use action user as the Doer of the notifyInput
notifyInput := newNotifyInput(repo, user_model.NewActionsUser(), webhook_module.HookEventSchedule)
notifyInput := newNotifyInputForSchedules(repo)
return handleSchedules(ctx, scheduleWorkflows, commit, notifyInput, repo.DefaultBranch)
}

View file

@ -21,6 +21,7 @@ import (
repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/models/unit"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/container"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/log"
api "code.gitea.io/gitea/modules/structs"
@ -105,33 +106,46 @@ func ToBranch(ctx context.Context, repo *repo_model.Repository, branchName strin
return branch, nil
}
// getWhitelistEntities returns the names of the entities that are in the whitelist
func getWhitelistEntities[T *user_model.User | *organization.Team](entities []T, whitelistIDs []int64) []string {
whitelistUserIDsSet := container.SetOf(whitelistIDs...)
whitelistNames := make([]string, 0)
for _, entity := range entities {
switch v := any(entity).(type) {
case *user_model.User:
if whitelistUserIDsSet.Contains(v.ID) {
whitelistNames = append(whitelistNames, v.Name)
}
case *organization.Team:
if whitelistUserIDsSet.Contains(v.ID) {
whitelistNames = append(whitelistNames, v.Name)
}
}
}
return whitelistNames
}
// ToBranchProtection convert a ProtectedBranch to api.BranchProtection
func ToBranchProtection(ctx context.Context, bp *git_model.ProtectedBranch) *api.BranchProtection {
pushWhitelistUsernames, err := user_model.GetUserNamesByIDs(ctx, bp.WhitelistUserIDs)
func ToBranchProtection(ctx context.Context, bp *git_model.ProtectedBranch, repo *repo_model.Repository) *api.BranchProtection {
readers, err := access_model.GetRepoReaders(ctx, repo)
if err != nil {
log.Error("GetUserNamesByIDs (WhitelistUserIDs): %v", err)
log.Error("GetRepoReaders: %v", err)
}
mergeWhitelistUsernames, err := user_model.GetUserNamesByIDs(ctx, bp.MergeWhitelistUserIDs)
pushWhitelistUsernames := getWhitelistEntities(readers, bp.WhitelistUserIDs)
mergeWhitelistUsernames := getWhitelistEntities(readers, bp.MergeWhitelistUserIDs)
approvalsWhitelistUsernames := getWhitelistEntities(readers, bp.ApprovalsWhitelistUserIDs)
teamReaders, err := organization.OrgFromUser(repo.Owner).TeamsWithAccessToRepo(ctx, repo.ID, perm.AccessModeRead)
if err != nil {
log.Error("GetUserNamesByIDs (MergeWhitelistUserIDs): %v", err)
}
approvalsWhitelistUsernames, err := user_model.GetUserNamesByIDs(ctx, bp.ApprovalsWhitelistUserIDs)
if err != nil {
log.Error("GetUserNamesByIDs (ApprovalsWhitelistUserIDs): %v", err)
}
pushWhitelistTeams, err := organization.GetTeamNamesByID(ctx, bp.WhitelistTeamIDs)
if err != nil {
log.Error("GetTeamNamesByID (WhitelistTeamIDs): %v", err)
}
mergeWhitelistTeams, err := organization.GetTeamNamesByID(ctx, bp.MergeWhitelistTeamIDs)
if err != nil {
log.Error("GetTeamNamesByID (MergeWhitelistTeamIDs): %v", err)
}
approvalsWhitelistTeams, err := organization.GetTeamNamesByID(ctx, bp.ApprovalsWhitelistTeamIDs)
if err != nil {
log.Error("GetTeamNamesByID (ApprovalsWhitelistTeamIDs): %v", err)
log.Error("Repo.Owner.TeamsWithAccessToRepo: %v", err)
}
pushWhitelistTeams := getWhitelistEntities(teamReaders, bp.WhitelistTeamIDs)
mergeWhitelistTeams := getWhitelistEntities(teamReaders, bp.MergeWhitelistTeamIDs)
approvalsWhitelistTeams := getWhitelistEntities(teamReaders, bp.ApprovalsWhitelistTeamIDs)
branchName := ""
if !git_model.IsRuleNameSpecial(bp.RuleName) {
branchName = bp.RuleName

View file

@ -76,6 +76,7 @@ func toUser(ctx context.Context, user *user_model.User, signed, authed bool) *ap
if authed {
result.IsAdmin = user.IsAdmin
result.LoginName = user.LoginName
result.SourceID = user.LoginSource
result.LastLogin = user.LastLoginUnix.AsTime()
result.Language = user.Language
result.IsActive = user.IsActive

View file

@ -82,8 +82,8 @@ func (h *ReplyHandler) Handle(ctx context.Context, content *MailContent, doer *u
return nil
}
switch r := ref.(type) {
case *issues_model.Issue:
log.Trace("incoming mail related to %T", ref)
attachmentIDs := make([]string, 0, len(content.Attachments))
if setting.Attachment.Enabled {
for _, attachment := range content.Attachments {
@ -104,9 +104,12 @@ func (h *ReplyHandler) Handle(ctx context.Context, content *MailContent, doer *u
}
if content.Content == "" && len(attachmentIDs) == 0 {
log.Trace("incoming mail has no content and no attachement", ref)
return nil
}
switch r := ref.(type) {
case *issues_model.Issue:
_, err = issue_service.CreateIssueComment(ctx, doer, issue.Repo, issue, content.Content, attachmentIDs)
if err != nil {
return fmt.Errorf("CreateIssueComment failed: %w", err)
@ -114,11 +117,13 @@ func (h *ReplyHandler) Handle(ctx context.Context, content *MailContent, doer *u
case *issues_model.Comment:
comment := r
if content.Content == "" {
return nil
switch comment.Type {
case issues_model.CommentTypeComment, issues_model.CommentTypeReview:
_, err = issue_service.CreateIssueComment(ctx, doer, issue.Repo, issue, content.Content, attachmentIDs)
if err != nil {
return fmt.Errorf("CreateIssueComment failed: %w", err)
}
if comment.Type == issues_model.CommentTypeCode {
case issues_model.CommentTypeCode:
_, err := pull_service.CreateCodeComment(
ctx,
doer,
@ -130,12 +135,16 @@ func (h *ReplyHandler) Handle(ctx context.Context, content *MailContent, doer *u
false, // not pending review but a single review
comment.ReviewID,
"",
nil,
attachmentIDs,
)
if err != nil {
return fmt.Errorf("CreateCodeComment failed: %w", err)
}
default:
log.Trace("incoming mail related to comment of type %v is ignored", comment.Type)
}
default:
log.Trace("incoming mail related to %T is ignored", ref)
}
return nil
}

View file

@ -356,7 +356,7 @@ var slackChannel = regexp.MustCompile(`^#?[a-z0-9_-]{1,80}$`)
// IsValidSlackChannel validates a channel name conforms to what slack expects:
// https://api.slack.com/methods/conversations.rename#naming
// Conversation names can only contain lowercase letters, numbers, hyphens, and underscores, and must be 80 characters or less.
// Gitea accepts if it starts with a #.
// Forgejo accepts if it starts with a #.
func IsValidSlackChannel(name string) bool {
return slackChannel.MatchString(name)
}

View file

@ -0,0 +1,27 @@
{{template "base/head" .}}
<link rel="stylesheet" href="{{AssetUrlPrefix}}/css/devtest.css?v={{AssetVersion}}">
<div class="page-content devtest ui container">
<div>
<h1>Label</h1>
<div class="flex-text-block tw-my-2">
<span class="ui label">simple label</span>
<span class="ui red label">red label</span>
<span class="ui green label">green label</span>
</div>
<div class="flex-text-block tw-my-2">
<span class="ui basic label">basic label</span>
<span class="ui basic red label">basic red label</span>
<span class="ui basic green label">basic green label</span>
</div>
<div class="flex-text-block tw-my-2">
<span class="ui label">long content must be in a non-flex "gt-ellipsis" element, otherwise it won't get ellipsis. very looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong label</span>
</div>
<div class="flex-text-block tw-my-2">
<span class="ui label"><span class="gt-ellipsis">very looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong label</span></span>
</div>
<div class="tw-my-2">
<span class="ui label tw-max-w-full"><span class="gt-ellipsis">very looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong label</span></span>
</div>
</div>
</div>
{{template "base/footer" .}}

View file

@ -1,4 +1,4 @@
<div class="flex-list">
<div class="flex-list run-list">
{{if not .Runs}}
<div class="empty-placeholder">
{{svg "octicon-no-entry" 48}}
@ -28,16 +28,16 @@
</div>
<div class="flex-item-trailing">
{{if .RefLink}}
<a class="ui label tw-px-1 tw-mx-0" href="{{.RefLink}}">{{.PrettyRef}}</a>
<a class="ui label run-list-ref gt-ellipsis" href="{{.RefLink}}">{{.PrettyRef}}</a>
{{else}}
<span class="ui label tw-px-1 tw-mx-0">{{.PrettyRef}}</span>
<span class="ui label run-list-ref gt-ellipsis">{{.PrettyRef}}</span>
{{end}}
</div>
<div class="run-list-item-right">
<div class="run-list-meta">{{svg "octicon-calendar" 16}}{{TimeSinceUnix .Updated ctx.Locale}}</div>
<div class="run-list-meta">{{svg "octicon-stopwatch" 16}}{{.Duration}}</div>
</div>
</div>
</div>
{{end}}
</div>
{{template "base/paginate" .}}

View file

@ -28,7 +28,7 @@
</div>
</div>
</h4>
<div class="ui attached table unstackable segment">
<div class="ui bottom attached table unstackable segment">
<div class="file-view code-view unicode-escaped">
{{if .IsFileTooLarge}}
<table>

View file

@ -6,14 +6,23 @@
<div class="singular-commit" id="{{$tag}}">
<span class="badge badge-commit">{{svg "octicon-git-commit"}}</span>
{{if .User}}
<a class="avatar" href="{{.User.HomeLink}}">{{ctx.AvatarUtils.Avatar .User}}</a>
<a class="avatar" href="{{.User.HomeLink}}">{{ctx.AvatarUtils.Avatar .User 20}}</a>
{{else}}
{{ctx.AvatarUtils.AvatarByEmail .Author.Email .Author.Name}}
{{ctx.AvatarUtils.AvatarByEmail .Author.Email .Author.Name 20}}
{{end}}
{{$commitLink:= printf "%s/commit/%s" $.comment.Issue.PullRequest.BaseRepo.Link (PathEscape .ID.String)}}
<span class="shabox tw-flex tw-items-center tw-float-right">
<span class="tw-flex-1 gt-ellipsis tw-font-mono{{if gt .ParentCount 1}} grey text{{end}}" title="{{.Summary}}">{{RenderCommitMessageLinkSubject $.root.Context .Message $commitLink ($.comment.Issue.PullRequest.BaseRepo.ComposeMetas ctx)}}</span>
{{if IsMultilineCommitMessage .Message}}
<button class="ui button js-toggle-commit-body ellipsis-button" aria-expanded="false">...</button>
{{end}}
{{if IsMultilineCommitMessage .Message}}
<pre class="commit-body tw-hidden">{{RenderCommitBody $.root.Context .Message ($.comment.Issue.PullRequest.BaseRepo.ComposeMetas ctx)}}</pre>
{{end}}
<span class="shabox tw-flex tw-items-center">
{{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses}}
{{$class := "ui sha label"}}
{{if .Signature}}
@ -37,14 +46,6 @@
{{end}}
</a>
</span>
<span class="tw-font-mono commit-summary {{if gt .ParentCount 1}} grey text{{end}}" title="{{.Summary}}">{{RenderCommitMessageLinkSubject $.root.Context .Message $commitLink ($.comment.Issue.PullRequest.BaseRepo.ComposeMetas ctx)}}</span>
{{if IsMultilineCommitMessage .Message}}
<button class="ui button js-toggle-commit-body ellipsis-button" aria-expanded="false">...</button>
{{end}}
{{if IsMultilineCommitMessage .Message}}
<pre class="commit-body tw-hidden">{{RenderCommitBody $.root.Context .Message ($.comment.Issue.PullRequest.BaseRepo.ComposeMetas ctx)}}</pre>
{{end}}
</div>
{{end}}
</div>

View file

@ -130,7 +130,7 @@
</div>
<span class="file tw-flex tw-items-center tw-font-mono tw-flex-1"><a class="muted file-link" title="{{if $file.IsRenamed}}{{$file.OldName}}{{end}}{{$file.Name}}" href="#diff-{{$file.NameHash}}">{{if $file.IsRenamed}}{{$file.OldName}}{{end}}{{$file.Name}}</a>
{{if .IsLFSFile}} ({{ctx.Locale.Tr "repo.stored_lfs"}}){{end}}
<button class="btn interact-fg tw-p-2" data-clipboard-text="{{$file.Name}}">{{svg "octicon-copy" 14}}</button>
<button class="btn interact-fg tw-p-2" data-clipboard-text="{{$file.Name}}" data-tooltip-content="{{ctx.Locale.Tr "copy_generic"}}" aria-label="{{ctx.Locale.Tr "copy_generic"}}">{{svg "octicon-copy" 14}}</button>
{{if $file.IsGenerated}}
<span class="ui label">{{ctx.Locale.Tr "repo.diff.generated"}}</span>
{{end}}

View file

@ -15,7 +15,7 @@
{{range $i, $v := .TreeNames}}
<div class="breadcrumb-divider">/</div>
{{if eq $i $l}}
<input id="file-name" maxlength="500" value="{{$v}}" placeholder="{{ctx.Locale.Tr "repo.editor.name_your_file"}}" data-editorconfig="{{$.EditorconfigJson}}" required autofocus>
<input id="file-name" maxlength="255" value="{{$v}}" placeholder="{{ctx.Locale.Tr "repo.editor.name_your_file"}}" data-editorconfig="{{$.EditorconfigJson}}" required autofocus>
<span data-tooltip-content="{{ctx.Locale.Tr "repo.editor.filename_help"}}">{{svg "octicon-info"}}</span>
{{else}}
<span class="section"><a href="{{$.BranchLink}}/{{index $.TreePaths $i | PathEscapeSegments}}">{{$v}}</a></span>

View file

@ -13,7 +13,7 @@
{{range $i, $v := .TreeNames}}
<div class="breadcrumb-divider">/</div>
{{if eq $i $l}}
<input type="text" id="file-name" maxlength="500" value="{{$v}}" placeholder="{{ctx.Locale.Tr "repo.editor.add_subdir"}}" autofocus>
<input type="text" id="file-name" maxlength="255" value="{{$v}}" placeholder="{{ctx.Locale.Tr "repo.editor.add_subdir"}}" autofocus>
<span data-tooltip-content="{{ctx.Locale.Tr "repo.editor.filename_help"}}">{{svg "octicon-info"}}</span>
{{else}}
<span class="section"><a href="{{$.BranchLink}}/{{index $.TreePaths $i | PathEscapeSegments}}">{{$v}}</a></span>

View file

@ -3,16 +3,16 @@
{{template "repo/header" .}}
<div class="ui container">
{{template "base/alert" .}}
<div class="tw-flex">
<div class="tw-flex tw-items-center tw-justify-between">
<h1 class="tw-mb-2">{{.Milestone.Name}}</h1>
{{if not .Repository.IsArchived}}
<div class="text right tw-flex-1">
<div class="tw-flex top-right-buttons">
{{if or .CanWriteIssues .CanWritePulls}}
{{if .Milestone.IsClosed}}
<a class="ui primary basic button link-action" href data-url="{{$.RepoLink}}/milestones/{{.MilestoneID}}/open">{{ctx.Locale.Tr "repo.milestones.open"}}
<a class="ui primary button link-action" href data-url="{{$.RepoLink}}/milestones/{{.MilestoneID}}/open">{{ctx.Locale.Tr "repo.milestones.open"}}
</a>
{{else}}
<a class="ui red basic button link-action" href data-url="{{$.RepoLink}}/milestones/{{.MilestoneID}}/close">{{ctx.Locale.Tr "repo.milestones.close"}}
<a class="ui red button link-action" href data-url="{{$.RepoLink}}/milestones/{{.MilestoneID}}/close">{{ctx.Locale.Tr "repo.milestones.close"}}
</a>
{{end}}
<a class="ui button" href="{{.RepoLink}}/milestones/{{.MilestoneID}}/edit">{{ctx.Locale.Tr "repo.milestones.edit"}}</a>

View file

@ -4,11 +4,13 @@
<div class="ui container">
{{template "base/alert" .}}
<div class="list-header">
<div class="list-header list-header-issues">
{{template "repo/issue/navbar" .}}
{{template "repo/issue/search" .}}
{{if and (or .CanWriteIssues .CanWritePulls) (not .Repository.IsArchived)}}
<div class="top-right-buttons">
<a class="ui small primary button" href="{{$.Link}}/new">{{ctx.Locale.Tr "repo.milestones.new"}}</a>
</div>
{{end}}
</div>

View file

@ -2,29 +2,27 @@
<div class="header">
{{ctx.Locale.Tr "repo.issues.context.reference_issue"}}
</div>
<div class="content tw-text-left">
<form class="ui form form-fetch-action" action="{{printf "%s/issues/new" .Repository.Link}}" method="post">
<div class="content">
<form class="ui form form-fetch-action" action="{{.Repository.Link}}/issues/new" method="post">
{{.CsrfTokenHtml}}
<div class="ui segment content">
<div class="field">
<span class="text"><strong>{{ctx.Locale.Tr "repository"}}</strong></span>
<div class="ui search normal selection dropdown issue_reference_repository_search">
<div class="default text">{{.Repository.FullName}}</div>
<label><strong>{{ctx.Locale.Tr "repository"}}</strong></label>
<div class="ui search selection dropdown issue_reference_repository_search">
<div class="default text gt-ellipsis">{{.Repository.FullName}}</div>
<div class="menu"></div>
</div>
</div>
<div class="field">
<span class="text"><strong>{{ctx.Locale.Tr "repo.milestones.title"}}</strong></span>
<label><strong>{{ctx.Locale.Tr "repo.milestones.title"}}</strong></label>
<input name="title" value="" autofocus required maxlength="255" autocomplete="off">
</div>
<div class="field">
<span class="text"><strong>{{ctx.Locale.Tr "repo.issues.reference_issue.body"}}</strong></span>
<textarea name="content" class="form-control"></textarea>
<label><strong>{{ctx.Locale.Tr "repo.issues.reference_issue.body"}}</strong></label>
<textarea name="content"></textarea>
</div>
<div class="text right">
<button class="ui primary button">{{ctx.Locale.Tr "repo.issues.create"}}</button>
</div>
</div>
</form>
</div>
</div>

View file

@ -114,7 +114,7 @@
</div>
</div>
{{if and (or .HasIssuesOrPullsWritePermission .IsIssuePoster) (not .HasMerged) (not .Issue.IsClosed)}}
<div class="toggle-wip" data-title="{{.Issue.Title}}" data-wip-prefix="{{index .PullRequestWorkInProgressPrefixes 0}}" data-update-url="{{.Issue.Link}}/title">
<div class="toggle-wip" data-title="{{.Issue.Title}}" data-wip-prefixes="{{JsonUtils.EncodeToString .PullRequestWorkInProgressPrefixes}}" data-update-url="{{.Issue.Link}}/title">
<a class="muted">
{{if .IsPullWorkInProgress}}
{{ctx.Locale.Tr "repo.pulls.ready_for_review"}} {{ctx.Locale.Tr "repo.pulls.remove_prefix" (index .PullRequestWorkInProgressPrefixes 0)}}

View file

@ -25,12 +25,14 @@
<div class="column">
{{if gt .Activity.ActivePRCount 0}}
<div class="stats-table">
<a href="#merged-pull-requests" class="table-cell tiny background purple" style="width: {{.Activity.MergedPRPerc}}{{if ne .Activity.MergedPRPerc 0}}%{{end}}"></a>
<a href="#proposed-pull-requests" class="table-cell tiny background green"></a>
{{if gt .Activity.MergedPRPerc 0}}
<a href="#merged-pull-requests" class="table-cell tiny tw-bg-purple" style="width: {{.Activity.MergedPRPerc}}%"></a>
{{end}}
<a href="#proposed-pull-requests" class="table-cell tiny tw-bg-green"></a>
</div>
{{else}}
<div class="stats-table">
<a class="table-cell tiny background light grey"></a>
<a class="table-cell tiny tw-bg-grey"></a>
</div>
{{end}}
{{ctx.Locale.TrN .Activity.ActivePRCount "repo.activity.active_prs_count_1" "repo.activity.active_prs_count_n" .Activity.ActivePRCount}}
@ -40,8 +42,10 @@
<div class="column">
{{if gt .Activity.ActiveIssueCount 0}}
<div class="stats-table">
<a href="#closed-issues" class="table-cell tiny background red" style="width: {{.Activity.ClosedIssuePerc}}{{if ne .Activity.ClosedIssuePerc 0}}%{{end}}"></a>
<a href="#new-issues" class="table-cell tiny background green"></a>
{{if gt .Activity.ClosedIssuePerc 0}}
<a href="#closed-issues" class="table-cell tiny tw-bg-red" style="width: {{.Activity.ClosedIssuePerc}}%"></a>
{{end}}
<a href="#new-issues" class="table-cell tiny tw-bg-green"></a>
</div>
{{else}}
<div class="stats-table">
@ -108,7 +112,7 @@
{{end}}
{{if gt .Activity.PublishedReleaseCount 0}}
<h4 class="divider divider-text tw-normal-case" id="published-releases">
<h4 class="divider divider-text" id="published-releases">
{{svg "octicon-tag" 16 "tw-mr-2"}}
{{ctx.Locale.Tr "repo.activity.title.releases_published_by"
(ctx.Locale.TrN .Activity.PublishedReleaseCount "repo.activity.title.releases_1" "repo.activity.title.releases_n" .Activity.PublishedReleaseCount)
@ -130,7 +134,7 @@
{{end}}
{{if gt .Activity.MergedPRCount 0}}
<h4 class="divider divider-text tw-normal-case" id="merged-pull-requests">
<h4 class="divider divider-text" id="merged-pull-requests">
{{svg "octicon-git-pull-request" 16 "tw-mr-2"}}
{{ctx.Locale.Tr "repo.activity.title.prs_merged_by"
(ctx.Locale.TrN .Activity.MergedPRCount "repo.activity.title.prs_1" "repo.activity.title.prs_n" .Activity.MergedPRCount)
@ -149,7 +153,7 @@
{{end}}
{{if gt .Activity.OpenedPRCount 0}}
<h4 class="divider divider-text tw-normal-case" id="proposed-pull-requests">
<h4 class="divider divider-text" id="proposed-pull-requests">
{{svg "octicon-git-branch" 16 "tw-mr-2"}}
{{ctx.Locale.Tr "repo.activity.title.prs_opened_by"
(ctx.Locale.TrN .Activity.OpenedPRCount "repo.activity.title.prs_1" "repo.activity.title.prs_n" .Activity.OpenedPRCount)
@ -168,7 +172,7 @@
{{end}}
{{if gt .Activity.ClosedIssueCount 0}}
<h4 class="divider divider-text tw-normal-case" id="closed-issues">
<h4 class="divider divider-text" id="closed-issues">
{{svg "octicon-issue-closed" 16 "tw-mr-2"}}
{{ctx.Locale.Tr "repo.activity.title.issues_closed_from"
(ctx.Locale.TrN .Activity.ClosedIssueCount "repo.activity.title.issues_1" "repo.activity.title.issues_n" .Activity.ClosedIssueCount)
@ -187,7 +191,7 @@
{{end}}
{{if gt .Activity.OpenedIssueCount 0}}
<h4 class="divider divider-text tw-normal-case" id="new-issues">
<h4 class="divider divider-text" id="new-issues">
{{svg "octicon-issue-opened" 16 "tw-mr-2"}}
{{ctx.Locale.Tr "repo.activity.title.issues_created_by"
(ctx.Locale.TrN .Activity.OpenedIssueCount "repo.activity.title.issues_1" "repo.activity.title.issues_n" .Activity.OpenedIssueCount)
@ -206,7 +210,7 @@
{{end}}
{{if gt .Activity.UnresolvedIssueCount 0}}
<h4 class="divider divider-text tw-normal-case" id="unresolved-conversations" data-tooltip-content="{{ctx.Locale.Tr "repo.activity.unresolved_conv_desc"}}">
<h4 class="divider divider-text" id="unresolved-conversations" data-tooltip-content="{{ctx.Locale.Tr "repo.activity.unresolved_conv_desc"}}">
{{svg "octicon-comment-discussion" 16 "tw-mr-2"}}
{{ctx.Locale.TrN .Activity.UnresolvedIssueCount "repo.activity.title.unresolved_conv_1" "repo.activity.title.unresolved_conv_n" .Activity.UnresolvedIssueCount}}
</h4>

View file

@ -11,7 +11,7 @@
<a class="ui primary tiny button" href="{{.LFSFilesLink}}/find?oid={{.LFSFile.Oid}}&size={{.LFSFile.Size}}">{{ctx.Locale.Tr "repo.settings.lfs_findcommits"}}</a>
</div>
</h4>
<div class="ui attached table unstackable segment">
<div class="ui bottom attached table unstackable segment">
{{template "repo/unicode_escape_prompt" dict "EscapeStatus" .EscapeStatus "root" $}}
<div class="file-view{{if .IsMarkup}} markup {{.MarkupType}}{{else if .IsPlainText}} plain-text{{else if .IsTextFile}} code-view{{end}}">
{{if .IsMarkup}}

View file

@ -9,8 +9,8 @@
{{.CsrfTokenHtml}}
<input type="hidden" name="action" value="update">
<div class="required field {{if .Err_RepoName}}error{{end}}">
<label for="repo_name">{{ctx.Locale.Tr "repo.repo_name"}}</label>
<input id="repo_name" name="repo_name" value="{{.Repository.Name}}" data-repo-name="{{.Repository.Name}}" autofocus required>
<label>{{ctx.Locale.Tr "repo.repo_name"}}</label>
<input name="repo_name" value="{{.Repository.Name}}" data-repo-name="{{.Repository.Name}}" autofocus required>
</div>
<div class="inline field">
<label>{{ctx.Locale.Tr "repo.repo_size"}}</label>
@ -539,8 +539,8 @@
</label>
</div>
<div class="required field">
<label for="repo_name">{{ctx.Locale.Tr "repo.settings.confirmation_string"}}</label>
<input id="repo_name" name="repo_name" required maxlength="100">
<label>{{ctx.Locale.Tr "repo.settings.confirmation_string"}}</label>
<input name="repo_name" required maxlength="100">
</div>
<div class="text right actions">
@ -570,8 +570,8 @@
</label>
</div>
<div class="required field">
<label for="repo_name">{{ctx.Locale.Tr "repo.settings.confirmation_string"}}</label>
<input id="repo_name" name="repo_name" required>
<label>{{ctx.Locale.Tr "repo.settings.confirmation_string"}}</label>
<input name="repo_name" required>
</div>
<div class="text right actions">
@ -602,8 +602,8 @@
</label>
</div>
<div class="required field">
<label for="repo_name">{{ctx.Locale.Tr "repo.settings.confirmation_string"}}</label>
<input id="repo_name" name="repo_name" required>
<label>{{ctx.Locale.Tr "repo.settings.confirmation_string"}}</label>
<input name="repo_name" required>
</div>
<div class="required field">
<label for="new_owner_name">{{ctx.Locale.Tr "repo.settings.transfer_owner"}}</label>
@ -672,8 +672,8 @@
</label>
</div>
<div class="required field">
<label for="repo_name">{{ctx.Locale.Tr "repo.settings.confirmation_string"}}</label>
<input id="repo_name" name="repo_name" required>
<label>{{ctx.Locale.Tr "repo.settings.confirmation_string"}}</label>
<input name="repo_name" required>
</div>
<div class="text right actions">
@ -705,8 +705,8 @@
</label>
</div>
<div class="required field">
<label for="repo_name">{{ctx.Locale.Tr "repo.settings.confirmation_string"}}</label>
<input id="repo_name" name="repo_name" required>
<label>{{ctx.Locale.Tr "repo.settings.confirmation_string"}}</label>
<input name="repo_name" required>
</div>
<div class="text right actions">

View file

@ -11,7 +11,7 @@
{{end}}
{{if not .ReadmeInList}}
<div id="repo-file-commit-box" class="ui top attached header list-header tw-mb-4 tw-flex tw-justify-between">
<div id="repo-file-commit-box" class="ui segment list-header tw-mb-4 tw-flex tw-justify-between">
<div class="latest-commit">
{{template "repo/latest_commit" .}}
</div>
@ -93,7 +93,7 @@
{{end}}
</div>
</h4>
<div class="ui attached table unstackable segment">
<div class="ui bottom attached table unstackable segment">
{{if not (or .IsMarkup .IsRenderedHTML)}}
{{template "repo/unicode_escape_prompt" dict "EscapeStatus" .EscapeStatus "root" $}}
{{end}}

View file

@ -5210,6 +5210,51 @@
}
}
},
"/repos/{owner}/{repo}/compare/{basehead}": {
"get": {
"produces": [
"application/json"
],
"tags": [
"Get",
"commit",
"comparison"
],
"summary": "Get commit comparison information",
"operationId": "information",
"parameters": [
{
"type": "string",
"description": "owner of the repo",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
"description": "name of the repo",
"name": "repo",
"in": "path",
"required": true
},
{
"type": "string",
"description": "compare two branches or commits",
"name": "basehead",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"$ref": "#/responses/Compare"
},
"404": {
"$ref": "#/responses/notFound"
}
}
}
},
"/repos/{owner}/{repo}/contents": {
"get": {
"produces": [
@ -19017,6 +19062,25 @@
},
"x-go-package": "code.gitea.io/gitea/modules/structs"
},
"Compare": {
"type": "object",
"title": "Compare represents a comparison between two commits.",
"properties": {
"commits": {
"type": "array",
"items": {
"$ref": "#/definitions/Commit"
},
"x-go-name": "Commits"
},
"total_commits": {
"type": "integer",
"format": "int64",
"x-go-name": "TotalCommits"
}
},
"x-go-package": "code.gitea.io/gitea/modules/structs"
},
"ContentsResponse": {
"description": "ContentsResponse contains information about a repo's entry's (dir, file, symlink, submodule) metadata and content",
"type": "object",
@ -24608,6 +24672,12 @@
"type": "boolean",
"x-go-name": "Restricted"
},
"source_id": {
"description": "The ID of the user's Authentication Source",
"type": "integer",
"format": "int64",
"x-go-name": "SourceID"
},
"starred_repos_count": {
"type": "integer",
"format": "int64",
@ -25088,6 +25158,12 @@
}
}
},
"Compare": {
"description": "",
"schema": {
"$ref": "#/definitions/Compare"
}
},
"ContentsListResponse": {
"description": "ContentsListResponse",
"schema": {

View file

@ -1,15 +1,13 @@
{{template "base/head" .}}
<div role="main" aria-label="{{.Title}}" class="page-content dashboard feeds">
{{template "user/dashboard/navbar" .}}
<div class="ui container">
<div class="ui container flex-container">
{{template "base/alert" .}}
<div class="ui mobile reversed stackable grid">
<div class="ui container ten wide column">
<div class="flex-container-main">
{{template "user/heatmap" .}}
{{template "user/dashboard/feeds" .}}
</div>
{{template "user/dashboard/repolist" .}}
</div>
</div>
</div>
{{template "base/footer" .}}

View file

@ -52,4 +52,4 @@ data.organizationId = {{.ContextUser.ID}};
window.config.pageData.dashboardRepoList = data;
</script>
<div id="dashboard-repo-list" class="six wide column"></div>
<div id="dashboard-repo-list" class="flex-container-sidebar"></div>

View file

@ -1,6 +1,5 @@
// Copyright 2021 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
// SPDX-License-Identifier: MIT
package integration

View file

@ -1,6 +1,5 @@
// Copyright 2021 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
// SPDX-License-Identifier: MIT
package integration

View file

@ -1,6 +1,5 @@
// Copyright 2021 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
// SPDX-License-Identifier: MIT
package integration

View file

@ -0,0 +1,38 @@
// Copyright 2024 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package integration
import (
"net/http"
"testing"
auth_model "code.gitea.io/gitea/models/auth"
"code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/tests"
"github.com/stretchr/testify/assert"
)
func TestAPICompareBranches(t *testing.T) {
defer tests.PrepareTestEnv(t)()
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
// Login as User2.
session := loginUser(t, user.Name)
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository)
repoName := "repo20"
req := NewRequestf(t, "GET", "/api/v1/repos/user2/%s/compare/add-csv...remove-files-b", repoName).
AddTokenAuth(token)
resp := MakeRequest(t, req, http.StatusOK)
var apiResp *api.Compare
DecodeJSON(t, resp, &apiResp)
assert.Equal(t, 2, apiResp.TotalCommits)
assert.Len(t, apiResp.Commits, 2)
}

View file

@ -10,7 +10,9 @@ import (
auth_model "code.gitea.io/gitea/models/auth"
"code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/setting"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/test"
"code.gitea.io/gitea/tests"
"github.com/stretchr/testify/assert"
@ -57,6 +59,25 @@ func TestAPIUserSearchNotLoggedIn(t *testing.T) {
}
}
func TestAPIUserSearchPaged(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer test.MockVariableValue(&setting.API.DefaultPagingNum, 5)()
req := NewRequest(t, "GET", "/api/v1/users/search?limit=1")
resp := MakeRequest(t, req, http.StatusOK)
var limitedResults SearchResults
DecodeJSON(t, resp, &limitedResults)
assert.Len(t, limitedResults.Data, 1)
req = NewRequest(t, "GET", "/api/v1/users/search")
resp = MakeRequest(t, req, http.StatusOK)
var results SearchResults
DecodeJSON(t, resp, &results)
assert.Len(t, results.Data, 5)
}
func TestAPIUserSearchSystemUsers(t *testing.T) {
defer tests.PrepareTestEnv(t)()
for _, systemUser := range []*user_model.User{

View file

@ -76,14 +76,11 @@ func TestIncomingEmail(t *testing.T) {
t.Run("Handler", func(t *testing.T) {
t.Run("Reply", func(t *testing.T) {
t.Run("Comment", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
checkReply := func(t *testing.T, payload []byte, issue *issues_model.Issue, commentType issues_model.CommentType) {
t.Helper()
handler := &incoming.ReplyHandler{}
payload, err := incoming_payload.CreateReferencePayload(issue)
assert.NoError(t, err)
assert.Error(t, handler.Handle(db.DefaultContext, &incoming.MailContent{}, nil, payload))
assert.NoError(t, handler.Handle(db.DefaultContext, &incoming.MailContent{}, user, payload))
@ -101,7 +98,7 @@ func TestIncomingEmail(t *testing.T) {
comments, err := issues_model.FindComments(db.DefaultContext, &issues_model.FindCommentsOptions{
IssueID: issue.ID,
Type: issues_model.CommentTypeComment,
Type: commentType,
})
assert.NoError(t, err)
assert.NotEmpty(t, comments)
@ -113,6 +110,14 @@ func TestIncomingEmail(t *testing.T) {
attachment := comment.Attachments[0]
assert.Equal(t, content.Attachments[0].Name, attachment.Name)
assert.EqualValues(t, 4, attachment.Size)
}
t.Run("Issue", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
payload, err := incoming_payload.CreateReferencePayload(issue)
assert.NoError(t, err)
checkReply(t, payload, issue, issues_model.CommentTypeComment)
})
t.Run("CodeComment", func(t *testing.T) {
@ -121,33 +126,22 @@ func TestIncomingEmail(t *testing.T) {
comment := unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{ID: 6})
issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: comment.IssueID})
handler := &incoming.ReplyHandler{}
content := &incoming.MailContent{
Content: "code reply by mail",
Attachments: []*incoming.Attachment{
{
Name: "attachment.txt",
Content: []byte("test"),
},
},
}
payload, err := incoming_payload.CreateReferencePayload(comment)
assert.NoError(t, err)
checkReply(t, payload, issue, issues_model.CommentTypeCode)
})
t.Run("Comment", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
comment := unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{ID: 2})
issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: comment.IssueID})
payload, err := incoming_payload.CreateReferencePayload(comment)
assert.NoError(t, err)
assert.NoError(t, handler.Handle(db.DefaultContext, content, user, payload))
comments, err := issues_model.FindComments(db.DefaultContext, &issues_model.FindCommentsOptions{
IssueID: issue.ID,
Type: issues_model.CommentTypeCode,
})
assert.NoError(t, err)
assert.NotEmpty(t, comments)
comment = comments[len(comments)-1]
assert.Equal(t, user.ID, comment.PosterID)
assert.Equal(t, content.Content, comment.Content)
assert.NoError(t, comment.LoadAttachments(db.DefaultContext))
assert.Empty(t, comment.Attachments)
checkReply(t, payload, issue, issues_model.CommentTypeComment)
})
})

View file

@ -1,6 +1,5 @@
// Copyright 2022 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
// SPDX-License-Identifier: MIT
package integration

View file

@ -1,3 +1,6 @@
// Copyright 2024 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package integration
import (

View file

@ -44,9 +44,10 @@
}
.run-list-item-right {
flex: 0 0 min(20%, 130px);
width: 130px;
display: flex;
flex-direction: column;
flex-shrink: 0;
gap: 3px;
color: var(--color-text-light);
}
@ -57,3 +58,26 @@
gap: .25rem;
align-items: center;
}
.run-list .flex-item-trailing {
flex-wrap: nowrap;
width: 280px;
flex: 0 0 280px;
}
.run-list-ref {
display: inline-block !important;
}
@media (max-width: 767.98px) {
.run-list .flex-item-trailing {
flex-direction: column;
align-items: flex-end;
width: auto;
flex-basis: auto;
}
.run-list-item-right,
.run-list-ref {
max-width: 110px;
}
}

View file

@ -453,6 +453,7 @@ a.label,
.ui.selection.dropdown .menu > .item {
border-color: var(--color-secondary);
white-space: nowrap;
}
.ui.selection.visible.dropdown > .text:not(.default) {
@ -1562,6 +1563,7 @@ table th[data-sortt-desc] .svg {
align-items: center;
gap: .25rem;
vertical-align: middle;
min-width: 0;
}
.ui.ui.button {
@ -1582,4 +1584,5 @@ table th[data-sortt-desc] .svg {
display: flex;
align-items: center;
gap: .25rem;
min-width: 0;
}

View file

@ -7,7 +7,6 @@
.dashboard.feeds .context.user.menu .ui.header,
.dashboard.issues .context.user.menu .ui.header {
font-size: 1rem;
text-transform: none;
}
.dashboard.feeds .filter.menu,

View file

@ -18,7 +18,8 @@
width: auto;
}
.page-content.install form.ui.form input {
.page-content.install form.ui.form input:not([type="checkbox"],[type="radio"]),
.page-content.install form.ui.form .ui.selection.dropdown {
width: 60%;
}

Some files were not shown because too many files have changed in this diff Show more