Merge remote-tracking branch 'upstream/forgejo' into forgejo
Some checks failed
testing / backend-checks (push) Successful in 19m2s
testing / frontend-checks (push) Successful in 1m46s
testing / test-unit (push) Failing after 10m58s
testing / test-mysql (push) Failing after 15m28s
testing / test-pgsql (push) Failing after 18m51s
testing / test-sqlite (push) Failing after 15m27s
Integration tests for the release process / release-simulation (push) Has been cancelled
/ release (push) Has been cancelled

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

View file

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

View file

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

View file

@ -22,7 +22,7 @@ jobs:
runs-on: docker runs-on: docker
container: container:
image: ghcr.io/visualon/renovate:37.305.0 image: ghcr.io/visualon/renovate:37.316.2
steps: steps:
- name: Load renovate repo cache - 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 LINUX_ARCHS ?= linux/amd64,linux/386,linux/arm-5,linux/arm-6,linux/arm64
ifeq ($(HAS_GO), yes) 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/)) 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 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 GO_DIRS := build cmd models modules routers services tests
WEB_DIRS := web_src/js web_src/css 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 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 := $(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) 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 .PHONY: lint-go-vet
lint-go-vet: lint-go-vet:
@echo "Running go vet..." @echo "Running go vet..."
@$(GO) vet $(GO_PACKAGES) @$(GO) vet ./...
.PHONY: lint-editorconfig .PHONY: lint-editorconfig
lint-editorconfig: lint-editorconfig:
@ -768,7 +767,7 @@ generate-backend: $(TAGS_PREREQ) generate-go
.PHONY: generate-go .PHONY: generate-go
generate-go: $(TAGS_PREREQ) generate-go: $(TAGS_PREREQ)
@echo "Running go generate..." @echo "Running go generate..."
@CC= GOOS= GOARCH= $(GO) generate -tags '$(TAGS)' $(GO_PACKAGES) @CC= GOOS= GOARCH= $(GO) generate -tags '$(TAGS)' ./...
.PHONY: merge-locales .PHONY: merge-locales
merge-locales: merge-locales:

View file

@ -1,8 +1,460 @@
# Release Notes # 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 ## 1.21.11-1
@ -1025,7 +1477,7 @@ This stable release contains security fixes.
* Security fixes * Security fixes
* [An additional verification](https://codeberg.org/forgejo/forgejo/commit/a259a928a) was implemented to prevent [open redirects](https://en.wikipedia.org/wiki/Open_redirect). * [An additional verification](https://codeberg.org/forgejo/forgejo/commit/a259a928a) was implemented to prevent [open redirects](https://en.wikipedia.org/wiki/Open_redirect).
* Bug fixes * Bug fixes

View file

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

View file

@ -36,6 +36,7 @@ var microcmdUserChangePassword = &cli.Command{
&cli.BoolFlag{ &cli.BoolFlag{
Name: "must-change-password", Name: "must-change-password",
Usage: "User must change password", Usage: "User must change password",
Value: true,
}, },
}, },
} }
@ -57,23 +58,18 @@ func runChangePassword(c *cli.Context) error {
return err 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{ opts := &user_service.UpdateAuthOptions{
Password: optional.Some(c.String("password")), 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 { if err := user_service.UpdateAuth(ctx, user, opts); err != nil {
switch { switch {
case errors.Is(err, password.ErrMinLength): 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): 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): 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: default:
return err return err
} }

View file

@ -8,6 +8,7 @@ import (
"fmt" "fmt"
auth_model "code.gitea.io/gitea/models/auth" auth_model "code.gitea.io/gitea/models/auth"
"code.gitea.io/gitea/models/db"
user_model "code.gitea.io/gitea/models/user" user_model "code.gitea.io/gitea/models/user"
pwd "code.gitea.io/gitea/modules/auth/password" pwd "code.gitea.io/gitea/modules/auth/password"
"code.gitea.io/gitea/modules/optional" "code.gitea.io/gitea/modules/optional"
@ -46,9 +47,10 @@ var microcmdUserCreate = &cli.Command{
Usage: "Generate a random password for the user", Usage: "Generate a random password for the user",
}, },
&cli.BoolFlag{ &cli.BoolFlag{
Name: "must-change-password", Name: "must-change-password",
Usage: "Set this option to false to prevent forcing the user to change their password after initial login", Usage: "Set this option to false to prevent forcing the user to change their password after initial login",
Value: true, Value: true,
DisableDefaultText: true,
}, },
&cli.IntFlag{ &cli.IntFlag{
Name: "random-password-length", Name: "random-password-length",
@ -72,10 +74,10 @@ func runCreateUser(c *cli.Context) error {
} }
if c.IsSet("name") && c.IsSet("username") { 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") { 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") { 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") return errors.New("must set either password or random-password flag")
} }
changePassword := c.Bool("must-change-password") isAdmin := c.Bool("admin")
mustChangePassword := true // always default to true
// If this is the first user being created. if c.IsSet("must-change-password") {
// Take it as the admin and don't force a password update. // if the flag is set, use the value provided by the user
if n := user_model.CountUsers(ctx, nil); n == 0 { mustChangePassword = c.Bool("must-change-password")
changePassword = false } 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]() restricted := optional.None[bool]()
@ -132,8 +143,8 @@ func runCreateUser(c *cli.Context) error {
Name: username, Name: username,
Email: c.String("email"), Email: c.String("email"),
Passwd: password, Passwd: password,
IsAdmin: c.Bool("admin"), IsAdmin: isAdmin,
MustChangePassword: changePassword, MustChangePassword: mustChangePassword,
Visibility: visibility, Visibility: visibility,
} }

View file

@ -2394,22 +2394,6 @@ LEVEL = Info
;; Enable issue by repository metrics; default is false ;; Enable issue by repository metrics; default is false
;ENABLED_ISSUE_BY_REPOSITORY = 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] ;[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] _, alreadyLoaded := userMap[action.Repo.OwnerID]
return action.Repo.OwnerID, !alreadyLoaded return action.Repo.OwnerID, !alreadyLoaded
}) })
if len(missingUserIDs) == 0 {
return nil
}
if err := db.GetEngine(ctx). if err := db.GetEngine(ctx).
In("id", missingUserIDs). In("id", missingUserIDs).
@ -129,6 +132,9 @@ func (actions ActionList) LoadComments(ctx context.Context) error {
commentIDs = append(commentIDs, action.CommentID) commentIDs = append(commentIDs, action.CommentID)
} }
} }
if len(commentIDs) == 0 {
return nil
}
commentsMap := make(map[int64]*issues_model.Comment, len(commentIDs)) commentsMap := make(map[int64]*issues_model.Comment, len(commentIDs))
if err := db.GetEngine(ctx).In("id", commentIDs).Find(&commentsMap); err != nil { 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 // check column collation, and show warning/error to end users -- no need to fatal, do not block the startup
if !r.IsCollationCaseSensitive(r.DatabaseCollation) { 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 { 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 // IsTableNotEmpty returns true if table has at least one record
func IsTableNotEmpty(tableName string) (bool, error) { func IsTableNotEmpty(beanOrTableName any) (bool, error) {
return x.Table(tableName).Exist() return x.Table(beanOrTableName).Exist()
} }
// DeleteAllRecords will delete all the records of this table // DeleteAllRecords will delete all the records of this table

View file

@ -660,15 +660,15 @@ func Migrate(x *xorm.Engine) error {
v := currentVersion.Version v := currentVersion.Version
if minDBVersion > v { 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.`) Please try upgrading to a lower version first (suggested v1.6.4), then upgrade to this version.`)
return nil return nil
} }
// Downgrading Gitea's database version not supported // Downgrading Forgejo database version is not supported
if int(v-minDBVersion) > len(migrations) { 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 := 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 += "\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 += "\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 { 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)) 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 // SearchVersions gets all versions of packages matching the search options
func SearchVersions(ctx context.Context, opts *PackageSearchOptions) ([]*PackageVersion, int64, error) { func SearchVersions(ctx context.Context, opts *PackageSearchOptions) ([]*PackageVersion, int64, error) {
sess := db.GetEngine(ctx). sess := db.GetEngine(ctx).
Where(opts.ToConds()). Select("package_version.*").
Table("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) 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 // SearchLatestVersions gets the latest version of every package matching the search options
func SearchLatestVersions(ctx context.Context, opts *PackageSearchOptions) ([]*PackageVersion, int64, error) { func SearchLatestVersions(ctx context.Context, opts *PackageSearchOptions) ([]*PackageVersion, int64, error) {
cond := opts.ToConds(). in := builder.
And(builder.Expr("pv2.id IS NULL")) Select("MAX(package_version.id)").
From("package_version").
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))") InnerJoin("package", "package.id = package_version.package_id").
if opts.IsInternal.Has() { Where(opts.ToConds()).
joinCond = joinCond.And(builder.Eq{"pv2.is_internal": opts.IsInternal.Value()}) GroupBy("package_version.package_id")
}
sess := db.GetEngine(ctx). sess := db.GetEngine(ctx).
Select("package_version.*").
Table("package_version"). Table("package_version").
Join("LEFT", "package_version pv2", joinCond).
Join("INNER", "package", "package.id = package_version.package_id"). Join("INNER", "package", "package.id = package_version.package_id").
Where(cond) Where(builder.In("package_version.id", in))
opts.configureOrderBy(sess) 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()) sessQuery := opts.toSearchQueryBase(ctx).OrderBy(opts.OrderBy.String())
defer sessQuery.Close() defer sessQuery.Close()
if opts.Page != 0 { if opts.PageSize > 0 {
sessQuery = db.SetSessionPagination(sessQuery, opts) 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 // 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", name: "UTF BOM",
text: "\xef\xbb\xbftest", text: "\xef\xbb\xbftest",
result: "\xef\xbb\xbftest", result: "\xef\xbb\xbftest",

View file

@ -462,7 +462,7 @@ func parseCommitFileStatus(fileStatus *CommitFileStatus, stdout io.Reader) {
_, _ = rd.Discard(1) _, _ = rd.Discard(1)
} }
for { for {
modifier, err := rd.ReadSlice('\x00') modifier, err := rd.ReadString('\x00')
if err != nil { if err != nil {
if err != io.EOF { if err != io.EOF {
log.Error("Unexpected error whilst reading from git log --name-status. Error: %v", err) 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 { if err := recover(); err != nil {
log.Error("PANIC whilst initializing repository indexer: %v\nStacktrace: %s", err, log.Stack(2)) 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("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 { if err := recover(); err != nil {
log.Error("PANIC whilst initializing repository indexer: %v\nStacktrace: %s", err, log.Stack(2)) 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("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 { 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() indexMapping, err := i.mappingGetter()

View file

@ -62,7 +62,7 @@ func (i *Indexer) checkOldIndexes(ctx context.Context) {
indexName := versionedIndexName(i.indexName, v) indexName := versionedIndexName(i.indexName, v)
exists, err := i.Client.IndexExists(indexName).Do(ctx) exists, err := i.Client.IndexExists(indexName).Do(ctx)
if err == nil && exists { 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) indexName := versionedIndexName(i.indexName, v)
_, err := i.Client.GetIndex(indexName) _, err := i.Client.GetIndex(indexName)
if err == nil { 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 { if err := recover(); err != nil {
log.Error("PANIC whilst initializing issue indexer: %v\nStacktrace: %s", err, log.Stack(2)) 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("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) 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) 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 { } else {
// Path determines the type of link that will be rendered. It's unknown at this point whether // 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 // 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" path := "issues"
if ref.IsPull { if ref.IsPull {
path = "pulls" 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 { if db, err := strconv.Atoi(uri.Path[1:]); err == nil {
opts.DB = db opts.DB = db
} else { } 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 ( import (
"net/http" "net/http"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/web/middleware"
"gitea.com/go-chi/session" "gitea.com/go-chi/session"
) )
@ -21,10 +18,12 @@ type Store interface {
// RegenerateSession regenerates the underlying session and returns the new store // RegenerateSession regenerates the underlying session and returns the new store
func RegenerateSession(resp http.ResponseWriter, req *http.Request) (Store, error) { func RegenerateSession(resp http.ResponseWriter, req *http.Request) (Store, error) {
// Ensure that a cookie with a trailing slash does not take precedence over for _, f := range BeforeRegenerateSession {
// the cookie written by the middleware. f(resp, req)
middleware.DeleteLegacySiteCookie(resp, setting.SessionConfig.CookieName) }
s, err := session.RegenerateSession(resp, req) s, err := session.RegenerateSession(resp, req)
return s, err 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 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 { if err := checkReplyToAddress(IncomingEmail.ReplyToAddress); err != nil {
log.Fatal("Invalid incoming_mail.REPLY_TO_ADDRESS (%s): %v", IncomingEmail.ReplyToAddress, err) 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") 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 // Set default values & validate
sec.Key("NAME").MustString(AppName) sec.Key("NAME").MustString(AppName)
sec.Key("PROTOCOL").In("", []string{"smtp", "smtps", "smtp+starttls", "smtp+unix", "sendmail", "dummy"}) 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) 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 // PrepareAppDataPath creates app data directory if necessary
func PrepareAppDataPath() error { func PrepareAppDataPath() error {
// FIXME: There are too many calls to MkdirAll in old code. It is incorrect. // 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, // For example, if someDir=/mnt/vol1/gitea-home/data, if the mount point /mnt/vol1 is not mounted when Forgejo runs,
// then gitea will make new empty directories in /mnt/vol1, all are stored in the root filesystem. // 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. // 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). // 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. // 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() { func MustInstalled() {
if !InstallLock { 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("") rootSec := rootCfg.Section("")
RunUser = rootSec.Key("RUN_USER").MustString(user.CurrentUsername()) 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. // 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 := ConfigSectionKeyBool(rootSec, "I_AM_BEING_UNSAFE_RUNNING_AS_ROOT")
unsafeAllowRunAsRoot = unsafeAllowRunAsRoot || util.OptionalBoolParse(os.Getenv("GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT")).Value() 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 os.Getuid() == 0 {
if !unsafeAllowRunAsRoot { if !unsafeAllowRunAsRoot {
// Special thanks to VLC which inspired the wording of this messaging. // 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. // the user's authentication sign-in name.
// default: empty // default: empty
LoginName string `json:"login_name"` LoginName string `json:"login_name"`
// The ID of the user's Authentication Source
SourceID int64 `json:"source_id"`
// the user's full name // the user's full name
FullName string `json:"full_name"` FullName string `json:"full_name"`
// swagger:strfmt email // swagger:strfmt email

View file

@ -136,11 +136,11 @@ func wrapTmplErrMsg(msg string) {
return return
} }
if setting.IsProd { if setting.IsProd {
// in prod mode, Gitea must have correct templates to run // in prod mode, Forgejo must have correct templates to run
log.Fatal("Gitea can't run with template errors: %s", msg) log.Fatal("Forgejo can't run with template errors: %s", msg)
} else { } 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 // 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" "net/url"
"strings" "strings"
"code.gitea.io/gitea/modules/session"
"code.gitea.io/gitea/modules/setting" "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 /. // Previous versions would use a cookie path with a trailing /.
// These are more specific than cookies without a trailing /, so // These are more specific than cookies without a trailing /, so
// we need to delete these if they exist. // 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. // 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 setting.SessionConfig.CookiePath == "" || strings.HasSuffix(setting.SessionConfig.CookiePath, "/") {
// If the cookie path ends with /, no legacy cookies will take // If the cookie path ends with /, no legacy cookies will take
// precedence, so do nothing. The exception is that cookies with no // 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()) 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 = Изтриване на акаунта ви delete_account = Изтриване на акаунта ви
confirm_delete_account = Потвърждаване на изтриването confirm_delete_account = Потвърждаване на изтриването
email_notifications.onmention = Ел. поща само при споменаване email_notifications.onmention = Ел. поща само при споменаване
pronouns_unspecified = Непосочени
pronouns = Местоимения
gpg_token_code = echo "%s" | gpg -a --default-key %s --detach-sig
[packages] [packages]
container.labels.value = Стойност container.labels.value = Стойност
@ -157,6 +160,7 @@ settings.delete.success = Пакетът бе изтрит.
settings.delete = Изтриване на пакета settings.delete = Изтриване на пакета
container.details.platform = Платформа container.details.platform = Платформа
settings.delete.error = Неуспешно изтриване на пакет. settings.delete.error = Неуспешно изтриване на пакет.
installation = Инсталация
[tool] [tool]
hours = %d часа hours = %d часа
@ -290,7 +294,7 @@ settings.discord_username = Потребителско име
issues.filter_sort.mostforks = Най-много разклонения issues.filter_sort.mostforks = Най-много разклонения
activity = Дейност activity = Дейност
issues = Задачи issues = Задачи
settings.update_settings = Обновяване на настройките settings.update_settings = Запазване на настройките
visibility = Видимост visibility = Видимост
settings.site = Уебсайт settings.site = Уебсайт
watchers = Наблюдаващи watchers = Наблюдаващи
@ -411,8 +415,8 @@ repo_gitignore_helper = Изберете .gitignore шаблони.
auto_init = Да се инициализира хранилище (Добавя .gitignore, License и README) auto_init = Да се инициализира хранилище (Добавя .gitignore, License и README)
template.issue_labels = Етикети за задачите template.issue_labels = Етикети за задачите
migrate_items_labels = Етикети migrate_items_labels = Етикети
issues.label_templates.title = Зареждане на предварително зададен набор от етикети issues.label_templates.title = Зареждане на предв. зададен набор от етикети
issues.label_templates.helper = Изберете набор от етикети issues.label_templates.helper = Изберете предв. зададен набор от етикети
projects.template.desc = Шаблон projects.template.desc = Шаблон
projects.card_type.text_only = Само текст projects.card_type.text_only = Само текст
projects.card_type.images_and_text = Изображения и текст projects.card_type.images_and_text = Изображения и текст
@ -505,7 +509,7 @@ wiki.filter_page = Филтриране на страница
wiki.back_to_wiki = Обратно към уики страницата wiki.back_to_wiki = Обратно към уики страницата
wiki.wiki_page_revisions = Ревизии на уики страницата wiki.wiki_page_revisions = Ревизии на уики страницата
wiki.file_revision = Ревизия на страницата wiki.file_revision = Ревизия на страницата
activity.title.issues_created_by = %s създадена от %s activity.title.issues_created_by = %s създадени от %s
wiki.delete_page_notice_1 = Изтриването на уики страницата "%s" не може да бъде отменено. Продължаване? wiki.delete_page_notice_1 = Изтриването на уики страницата "%s" не може да бъде отменено. Продължаване?
wiki.page_name_desc = Въведете име за тази уики страница. Някои специални имена са: "Home", "_Sidebar" и "_Footer". wiki.page_name_desc = Въведете име за тази уики страница. Някои специални имена са: "Home", "_Sidebar" и "_Footer".
wiki.page_already_exists = Вече съществува уики страница със същото име. wiki.page_already_exists = Вече съществува уики страница със същото име.
@ -644,16 +648,16 @@ issues.filter_assginee_no_select = Всички изпълнители
issues.filter_assginee_no_assignee = Без изпълнител issues.filter_assginee_no_assignee = Без изпълнител
activity.opened_prs_count_1 = Предложена заявка за сливане activity.opened_prs_count_1 = Предложена заявка за сливане
activity.opened_prs_count_n = Предложени заявки за сливане activity.opened_prs_count_n = Предложени заявки за сливане
activity.title.prs_merged_by = %s слята от %s activity.title.prs_merged_by = %s слети от %s
activity.merged_prs_label = Слята activity.merged_prs_label = Слята
activity.opened_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.closed_issue_label = Затворена
activity.new_issue_label = Отворена activity.new_issue_label = Отворена
activity.title.releases_1 = %d издание activity.title.releases_1 = %d издание
activity.title.releases_n = %d издания activity.title.releases_n = %d издания
milestones.completeness = <strong>%d%%</strong> Завършен 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_milestone_no_select = Без етап
issues.action_assignee_no_select = Без изпълнител issues.action_assignee_no_select = Без изпълнител
milestones.edit = Редактиране на етапа milestones.edit = Редактиране на етапа
@ -672,7 +676,7 @@ issues.action_assignee = Изпълнител
milestones.closed = Затворен %s milestones.closed = Затворен %s
milestones.open = Отваряне milestones.open = Отваряне
milestones.close = Затваряне milestones.close = Затваряне
issues.label_templates.use = Използване на набор от етикети issues.label_templates.use = Използване на предв. зададен набор от етикети
issues.add_milestone_at = `добави това към етапа <b>%s</b> %s` issues.add_milestone_at = `добави това към етапа <b>%s</b> %s`
issues.add_label = добави етикета %s %s issues.add_label = добави етикета %s %s
issues.add_labels = добави етикети %s %s issues.add_labels = добави етикети %s %s
@ -741,7 +745,7 @@ issues.due_date_form_edit = Редактиране
issues.due_date_form_remove = Премахване issues.due_date_form_remove = Премахване
issues.due_date_modified = промени крайния срок от %[2]s на %[1]s %[3]s issues.due_date_modified = промени крайния срок от %[2]s на %[1]s %[3]s
pulls.compare_changes = Нова заявка за сливане pulls.compare_changes = Нова заявка за сливане
activity.title.releases_published_by = %s публикувано от %s activity.title.releases_published_by = %s публикувани от %s
topic.manage_topics = Управление на темите topic.manage_topics = Управление на темите
topic.done = Готово topic.done = Готово
find_file.go_to_file = Отиване към файл find_file.go_to_file = Отиване към файл
@ -1114,6 +1118,16 @@ release.download_count_few = %s изтегляния
branch.restore_success = Клонът "%s" е възстановен. branch.restore_success = Клонът "%s" е възстановен.
tag.create_tag_from = Създаване на нов маркер от "%s" tag.create_tag_from = Създаване на нов маркер от "%s"
branch.create_new_branch = Създаване на клон от клон: 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] [modal]
confirm = Потвърждаване confirm = Потвърждаване
@ -1271,6 +1285,7 @@ issue.action.review = <b>@%[1]s</b> коментира в тази заявка
issue.action.reopen = <b>@%[1]s</b> отвори наново #%[2]d. issue.action.reopen = <b>@%[1]s</b> отвори наново #%[2]d.
issue.action.approve = <b>@%[1]s</b> одобри тази заявка за сливане. issue.action.approve = <b>@%[1]s</b> одобри тази заявка за сливане.
issue.action.reject = <b>@%[1]s</b> поиска промени в тази заявка за сливане. issue.action.reject = <b>@%[1]s</b> поиска промени в тази заявка за сливане.
register_notify.title = %[1]s, добре дошли в %[2]s
[user] [user]
joined_on = Присъединени на %s joined_on = Присъединени на %s
@ -1295,6 +1310,8 @@ email_visibility.limited = Вашият адрес на ел. поща е вид
disabled_public_activity = Този потребител е изключил публичната видимост на дейността. disabled_public_activity = Този потребител е изключил публичната видимост на дейността.
email_visibility.private = Вашият адрес на ел. поща е видим само за вас и администраторите email_visibility.private = Вашият адрес на ел. поща е видим само за вас и администраторите
show_on_map = Показване на това място на картата show_on_map = Показване на това място на картата
followers_one = %d последовател
following_one = %d следван
[home] [home]
filter = Други филтри filter = Други филтри
@ -1390,6 +1407,7 @@ packages.type = Тип
orgs.teams = Екипи orgs.teams = Екипи
orgs.members = Участници orgs.members = Участници
config_settings = Настройки config_settings = Настройки
users.details = Потребителски данни
[error] [error]
not_found = Целта не може да бъде намерена. not_found = Целта не може да бъде намерена.
@ -1425,6 +1443,12 @@ team_name_been_taken = Името на екипа вече е заето.
org_name_been_taken = Името на организацията вече е заето. org_name_been_taken = Името на организацията вече е заето.
still_own_packages = Вашият акаунт притежава един или повече пакети, първо ги изтрийте. still_own_packages = Вашият акаунт притежава един или повече пакети, първо ги изтрийте.
still_own_repo = Вашият акаунт притежава едно или повече хранилища, първо ги изтрийте или прехвърлете. still_own_repo = Вашият акаунт притежава едно или повече хранилища, първо ги изтрийте или прехвърлете.
FullName = Пълно име
Description = Описание
Pronouns = Местоимения
Biography = Биография
Website = Уебсайт
Location = Местоположение
[action] [action]
close_issue = `затвори задача <a href="%[1]s">%[3]s#%[2]s</a>` 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 месеца number_of_contributions_in_the_last_12_months = %s приноса през последните 12 месеца
contributions_zero = Няма приноси contributions_zero = Няма приноси
more = Повече more = Повече
contributions_one = принос
contributions_few = приноса
contributions_format = {contributions} на {day} {month}, {year}
[git.filemode] [git.filemode]
directory = Директория directory = Директория
@ -1588,6 +1615,7 @@ commit_kind = Търсене на подавания...
project_kind = Търсене на проекти... project_kind = Търсене на проекти...
package_kind = Търсене на пакети... package_kind = Търсене на пакети...
search = Търсене... search = Търсене...
branch_kind = Търсене на клонове...
[markup] [markup]
filepreview.lines = Редове от %[1]d до %[2]d в %[3]s 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. unset_password = Tento uživatel nemá nastavené heslo.
unsupported_login_type = U tohoto typu účtu není funkce odstranění účtu podporována. unsupported_login_type = U tohoto typu účtu není funkce odstranění účtu podporována.
required_prefix = Vstup musí začínat textem „%s“ 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] [user]
change_avatar=Změnit váš avatar… 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.sync_mirror=Synchronizovat nyní
settings.site=Webová stránka settings.site=Webová stránka
settings.update_settings=Aktualizovat nastavení settings.update_settings=Uložit nastavení
settings.update_mirror_settings=Aktualizovat nastavení zrcadla settings.update_mirror_settings=Aktualizovat nastavení zrcadla
settings.branches.switch_default_branch=Přepnout výchozí větev settings.branches.switch_default_branch=Přepnout výchozí větev
settings.branches.update_default_branch=Aktualizovat 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=Povolit nahrání?
settings.protected_branch_can_push_yes=Můžete nahrávat settings.protected_branch_can_push_yes=Můžete nahrávat
settings.protected_branch_can_push_no=Nemůž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=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_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í 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.visibility = Viditelnost práce
settings.sourcehut_builds.secrets = Tajné klíče 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.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] [graphs]
component_loading_info = Tohle může chvíli trvat… 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.is_admin=Administrátor
users.list_status_filter.not_admin=Není administrátor users.list_status_filter.not_admin=Není administrátor
users.list_status_filter.is_restricted=Omezeno 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.is_prohibit_login=Zakázat přihlášení
users.list_status_filter.not_prohibit_login=Povolit 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.is_2fa_enabled=2FA povoleno
users.list_status_filter.not_2fa_enabled=2FA zakázáno 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.email_manage_panel=Správa uživatelských e-mailů
emails.primary=Hlavní 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 fuzzy_tooltip = Zahrnout také výsledky, které úzce odpovídají hledanému výrazu
search = Hledat... search = Hledat...
keyword_search_unavailable = Hledání pomocí klíčových slov momentálně není dostupné. Kontaktujte prosím administrátora webu. 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] [markup]
filepreview.lines = Řádky %[1]d až %[2]d v souboru %[3]s filepreview.lines = Řádky %[1]d až %[2]d v souboru %[3]s

View file

@ -18,8 +18,8 @@ template=Vorlage
language=Sprache language=Sprache
notifications=Benachrichtigungen notifications=Benachrichtigungen
active_stopwatch=Aktive Zeiterfassung active_stopwatch=Aktive Zeiterfassung
create_new=Erstellen create_new=Erstellen
user_profile_and_more=Profil und Einstellungen user_profile_and_more=Profil und Einstellungen
signed_in_as=Angemeldet als signed_in_as=Angemeldet als
enable_javascript=Diese Website benötigt JavaScript. enable_javascript=Diese Website benötigt JavaScript.
toc=Inhaltsverzeichnis toc=Inhaltsverzeichnis
@ -211,7 +211,7 @@ platform_desc=Forgejo läuft überall, wo <a target="_blank" rel="noopener noref
lightweight=Leichtgewichtig lightweight=Leichtgewichtig
lightweight_desc=Forgejo hat minimale Systemanforderungen und kann selbst auf einem günstigen und stromsparenden Raspberry Pi betrieben werden! lightweight_desc=Forgejo hat minimale Systemanforderungen und kann selbst auf einem günstigen und stromsparenden Raspberry Pi betrieben werden!
license=Quelloffen 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]
install=Installation 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_summary = Ändern der E-Mail-Adresse, an die die Aktivierungsnachricht gesendet wird.
change_unconfirmed_email_error = Ändern der E-Mail-Adresse fehlgeschlagen: %v 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. 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. 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_signin = Anmelden
tab_signup = Registrieren 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. unset_password = Für den Benutzer ist das Passwort nicht gesetzt.
unsupported_login_type = Dieser Login-Typ unterstützt keine Accountlöschung. unsupported_login_type = Dieser Login-Typ unterstützt keine Accountlöschung.
required_prefix = Eingabe muss mit „%s“ anfangen 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] [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 lookup_avatar_by_mail=Profilbild anhand der E-Mail-Addresse suchen
federated_avatar_lookup=Suche nach föderierten Profilbildern 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 choose_new_avatar=Neues Profilbild auswählen
update_avatar=Profilbild aktualisieren update_avatar=Profilbild aktualisieren
delete_current_avatar=Aktuelles Profilbild löschen 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=Privat
visibility.private_tooltip=Sichtbar nur für Mitglieder von Organisationen, denen du beigetreten bist visibility.private_tooltip=Sichtbar nur für Mitglieder von Organisationen, denen du beigetreten bist
user_block_success = Dieser Benutzer wurde erfolgreich blockiert. 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. webauthn_alternative_tip = Du möchtest vielleicht eine zusätzliche Authentifizierungsmethode einrichten.
blocked_users_none = Keine Benutzer blockiert. blocked_users_none = Keine Benutzer blockiert.
webauthn_key_loss_warning = Falls du deine Security-Keys verlierst, wirst du Zugang zu deinem Konto verlieren. 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. issue_labels_helper=Wähle eine Issue-Label-Sammlung.
license=Lizenz license=Lizenz
license_helper=Wähle eine Lizenz aus. 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=README
readme_helper=Wähle eine README-Vorlage aus. readme_helper=Wähle eine README-Vorlage aus.
readme_helper_desc=Hier kannst du eine komplette Beschreibung für dein Projekt schreiben. 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_permalink=Permalink
file_too_large=Die Datei ist zu groß zum Anzeigen. file_too_large=Die Datei ist zu groß zum Anzeigen.
invisible_runes_header=`Diese Datei enthält unsichtbare Unicode-Zeichen` 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_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.` 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` 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.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_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_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.add=Abhängigkeit hinzufügen …
issues.dependency.cancel=Abbrechen issues.dependency.cancel=Abbrechen
issues.dependency.remove=Entfernen 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.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.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_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.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_failed=Einige erforderliche Prüfungen waren nicht erfolgreich.
pulls.required_status_check_missing=Einige erforderliche Prüfungen fehlen. 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_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.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.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.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_1=%d Datei mit Konflikten
pulls.num_conflicting_files_n=%d Dateien 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.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.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.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.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.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. 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.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=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_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.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_checking=Einige Prüfungen sind noch ausstehend
pulls.status_checks_success=Alle Prüfungen waren erfolgreich 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=Push deaktivieren
settings.protect_disable_push_desc=Kein Push auf diesen Branch erlauben. settings.protect_disable_push_desc=Kein Push auf diesen Branch erlauben.
settings.protect_enable_push=Push aktivieren 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=Merge aktivieren
settings.protect_enable_merge_desc=Jeder mit Schreibzugriff darf die Pull-Requests in diesen Branch zusammenführen. 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 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=Erforderliche Genehmigungen:
settings.protect_required_approvals_desc=Erlaube das Zusammenführen des Pull-Requests nur mit genügend positiven Reviews. 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=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_users=Reviewer auf der Whitelist:
settings.protect_approvals_whitelist_teams=Für Reviews gewhitelistete Teams: settings.protect_approvals_whitelist_teams=Für Reviews gewhitelistete Teams:
settings.dismiss_stale_approvals=Entferne alte Genehmigungen 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=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.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=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=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=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.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: 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.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.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.archive.tagsettings_unavailable=Tag Einstellungen sind nicht verfügbar, wenn das Repo archiviert wurde.
settings.unarchive.button=Archivieren rückgängig machen settings.unarchive.button=Archivierung zurücksetzen
settings.unarchive.header=Archivieren dieses Repositorys rückgängig machen 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.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.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. 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 commits.search_branch = Dieser Branch
pulls.ready_for_review = Bereit zum Review? 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. 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. editor.push_out_of_date = Der Push scheint veraltet zu sein.
n_commit_few = %s Commits n_commit_few = %s Commits
n_branch_one = %s Branch n_branch_one = %s Branch
@ -2723,6 +2731,10 @@ settings.sourcehut_builds.visibility = Job-Sichtbarkeit
settings.sourcehut_builds.secrets = Geheimnisse 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.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.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] [graphs]
@ -3376,7 +3388,7 @@ notices.type_2=Aufgabe
notices.desc=Beschreibung notices.desc=Beschreibung
notices.op=Aktion notices.op=Aktion
notices.delete_success=Diese Systemmeldung wurde gelöscht. 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 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.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 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? 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 packages.cleanup.success = Abgelaufene Daten erfolgreich gesäubert
self_check.no_problem_found = Noch kein Problem gefunden. 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 self_check.database_collation_mismatch = Erwarte von Datenbank, folgende Collation zu verwenden: %s
auths.tips.gmail_settings = Gmail-Einstellungen: auths.tips.gmail_settings = Gmail-Einstellungen:
config_settings = 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.no_gpg_keys_found=Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
error.not_signed_commit=Kein signierter Commit error.not_signed_commit=Kein signierter Commit
error.failed_retrieval_gpg_keys=Fehler beim Abrufen eines Keys des Commiter-Kontos 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. error.probable_bad_default_signature=WARNHINWEIS! Obwohl der Standardschlüssel diese ID hat, verifiziert er nicht diesen Commit! Dieser Commit ist VERDÄCHTIG.
[units] [units]
@ -3738,8 +3750,8 @@ variables.creation.success=Die Variable „%s“ wurde hinzugefügt.
variables.update.failed=Fehler beim Bearbeiten der Variable. variables.update.failed=Fehler beim Bearbeiten der Variable.
variables.update.success=Die Variable wurde bearbeitet. 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_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_matching_online_runner_helper = Es existiert kein passender Online-Runner mit dem Label: %s
runs.no_workflows = Es gibt noch keine Workflows. 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.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) runs.empty_commit_message = (leere Commit-Nachricht)
variables.id_not_exist = Variable mit ID %d existiert nicht. variables.id_not_exist = Variable mit ID %d existiert nicht.

View file

@ -99,6 +99,7 @@ disabled = Disabled
locked = Locked locked = Locked
copy = Copy copy = Copy
copy_generic = Copy to clipboard
copy_url = Copy URL copy_url = Copy URL
copy_hash = Copy hash copy_hash = Copy hash
copy_content = Copy content 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.add_review_comment = Add comment
diff.comment.start_review = Start review diff.comment.start_review = Start review
diff.comment.reply = Reply diff.comment.reply = Reply
diff.review = Review diff.review = Finish review
diff.review.header = Submit review diff.review.header = Submit review
diff.review.placeholder = Review comment diff.review.placeholder = Review comment
diff.review.comment = 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. 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_password = Hindi maaring walang laman ang password ng tagapangasiwa.
err_empty_admin_email = Hindi maaring walang laman ang email 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_reserved = Hindi angkop ang Username ng Tagapangasiwa, naka-reserve ang username
err_admin_name_is_invalid = Hindi angkop ang Administrator Username err_admin_name_is_invalid = Hindi angkop ang Username ng Tagapangasiwa
general_title = Mga General Setting general_title = Mga General Setting
app_name = Pamagat ng instansya app_name = Pamagat ng instansya
app_name_helper = Maari mong ilagay ang pangalan ng iyong kompanya dito. 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_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_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. 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. 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 server_service_title = Mga setting ng server at third-party na serbisyo
offline_mode = Paganahin ang local mode 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 = I-enable ang CAPTCHA sa pagrehistro
enable_captcha_popup = Kailanganin ang CAPTCHA sa pansariling pagrehistro ng user. 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. 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_title = Mga setting ng account ng tagapangasiwa
admin_name = Username ng administrator admin_name = Username ng tagapangasiwa
admin_password = Password admin_password = Password
confirm_password = Kumpirmahin ang password confirm_password = Kumpirmahin ang password
admin_email = Email address 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 internal_token_failed = Nabigong maka-generate ng internal token: %v
secret_key_failed = Nabigong maka-generate ng secret key: %v secret_key_failed = Nabigong maka-generate ng secret key: %v
save_config_failed = Nabigong i-save ang configuration: %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 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 = Itago ang mga email address bilang default
default_keep_email_private_popup = Itago ang mga email address ng mga bagong user account 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. 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). 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 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. 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] [heatmap]
number_of_contributions_in_the_last_12_months = %s mga kontribusyon sa nakalipas na 12 buwan 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 create_new_account = Magrehistro ng Account
register_helper_msg = May account ka na? Mag-sign in ngayon! register_helper_msg = May account ka na? Mag-sign in ngayon!
social_register_helper_msg = May account ka na? I-link 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. disable_register_mail = Ang kumpirmasyon sa pamamagitan ng Email sa pagrehistro ay naka-disable.
remember_me = Tandaan ang device na ito remember_me = Tandaan ang device na ito
forgot_password_title = Nakalimutan ang Password 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 active_your_account = Aktibahin Ang Iyong Account
account_activated = Naaktiba na ang account account_activated = Naaktiba na ang account
prohibit_login = Ipinagbawalan ang Pag-sign in 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. 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_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. 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. 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. 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. 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. 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 site administrator. 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. 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. 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_title = Gumawa ng bagong account
openid_register_desc = Ang piniling OpenID URI ay hindi alam. Iugnay iyan sa bagong account dito. 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. 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. 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. email_domain_blacklisted = Hindi ka makakapagrehistro gamit ng iyong email address.
authorize_application = Pahintulutan ang Aplikasyon 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. 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. 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" required_prefix = Ang input ay dapat magsimula sa "%s"
FullName = Buong pangalan
Description = Paglalarawan
[user] [user]
joined_on = Sumali noong %s joined_on = Sumali noong %s
@ -615,7 +617,7 @@ block = Harangan
unblock = I-unblock unblock = I-unblock
user_bio = Byograpya user_bio = Byograpya
email_visibility.limited = Ang iyong email address ay makikita ng lahat ng mga naka-authenticate na user 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 show_on_map = Ipakita ang lugar na ito sa mapa
settings = Mga setting ng user settings = Mga setting ng user
form.name_pattern_not_allowed = Ang pattern na "%s" ay hindi pinapayagan sa username. 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_enroll = Mag-enroll sa authentikasyong two-factor
twofa_disable_note = Maari mong i-disable ang authentikasyong two-factor kapag kinakailangan. twofa_disable_note = Maari mong i-disable ang authentikasyong two-factor kapag kinakailangan.
twofa_disabled = Na-disable na ang authentikasyong two-factor. 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 or_enter_secret = O ilagay ang sikreto: %s
then_enter_passcode = At ilagay ang passcode na pinapakita sa aplikasyon: then_enter_passcode = At ilagay ang passcode na pinapakita sa aplikasyon:
passcode_invalid = Mali ang passcode. Subukan muli. 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 = 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. 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 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 wiki.last_updated = Huling binago %s
file.title = %s sa %s file.title = %s sa %s
file_view_raw = Tingnan ng raw file_view_raw = Tingnan ng raw
@ -1084,15 +1086,15 @@ issues.action_open = Buksan
issues.closed_title = Sarado issues.closed_title = Sarado
issues.reopen_issue = Buksang muli issues.reopen_issue = Buksang muli
pulls.merged = Naisama na 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 milestones.update_ago = Binago %s
activity.closed_issue_label = Sarado activity.closed_issue_label = Sarado
activity.merged_prs_label = Naisama na activity.merged_prs_label = Naisama
editor.delete_this_file = Burahin ang file editor.delete_this_file = Burahin ang file
editor.file_delete_success = Nabura na ang file na "%s". editor.file_delete_success = Nabura na ang file na "%s".
tree = Puno tree = Puno
issues.filter_sort = Isaayos ayon sa 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] pulls.merged_success = Matagumpay na naisama at sinara ang [pull request]
activity.title.prs_merged_by = Sinama ang %s ni/ng %s activity.title.prs_merged_by = Sinama ang %s ni/ng %s
find_tag = Maghanap ng tag 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. editor.cannot_edit_lfs_files = Hindi mababago ang mga LFS file sa web interface.
migrate.migrating_issues = Nililipat ang mga isyu migrate.migrating_issues = Nililipat ang mga isyu
fork_from_self = Hindi ka makaka-fork ng repositoryo na minamay-ari mo. 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 file_history = Kasaysayan
invisible_runes_header = `Nalalaman ng file na ito ng mga hindi nakikitang Unicode character` invisible_runes_header = `Nalalaman ng file na ito ng mga hindi nakikitang Unicode character`
file_too_large = Masyadong malaki ang file para ipakita. file_too_large = Masyadong malaki ang file para ipakita.
@ -1270,12 +1272,12 @@ issues.cancel = Kanselahin
issues.save = IImbak issues.save = IImbak
issues.label_title = Pangalan issues.label_title = Pangalan
issues.delete.title = Burahin ang isyung ito? 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. 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.nothing_to_compare = Magkapareho ang mga branch na ito.
commits.search_all = Lahat na mga branch commits.search_all = Lahat na mga branch
editor.file_deleting_no_longer_exists = Walang natagpuang binuburang file na "%s" sa [repository] 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 [repository] ang tagagamit na ito. issues.role.owner_helper = May-ari ng repositoryo ang tagagamit na ito.
issues.remove_request_review = Tanggalin ang hiling sa pagsuri issues.remove_request_review = Tanggalin ang hiling sa pagsuri
issues.force_push_compare = Ikumpara issues.force_push_compare = Ikumpara
editor.propose_file_change = Magmunkahi ng mga pagbabago sa file 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.filter_project_none = Walang proyekto
issues.ref_from = `mula %[1]s` issues.ref_from = `mula %[1]s`
issues.due_date_form_remove = Tanggalin issues.due_date_form_remove = Tanggalin
issues.due_date_form_edit = Baguhin issues.due_date_form_edit = I-edit
issues.lock_with_reason = kinandado bilang <strong>%s</strong> at nilimitahan ang paguusap sa mga [collaborators] %s 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 [collaborators] %s issues.lock_no_reason = kinandado at nilimitahan ang paguusap sa mga katulong %s
commit.revert = Ibalik commit.revert = Ibalik
commit.revert-header = Ibalik: %s commit.revert-header = Ibalik: %s
projects.title =Pamagat projects.title =Pamagat
projects.create_success = Ginawa na ang proyektong "%s". projects.create_success = Ginawa na ang proyektong "%s".
projects.modify = Baguhin ang proyekto projects.modify = I-edit ang proyekto
issues.delete_comment_confirm = Gusto mo bang burahin ang [comment] na ito? issues.delete_comment_confirm = Gusto mo bang burahin ang komento na ito?
issues.context.edit = Baguhin issues.context.edit = I-edit
issues.lock.title = Kandaduhin ang paguusap sa isyung ito. 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.nothing_to_compare_and_allow_empty_pr = Magkapareho ang mga branch na ito. Magiging walang laman ang PR na ito.
pulls.has_pull_request = pulls.has_pull_request =
issues.delete = Burahin issues.delete = Burahin
issues.choose.open_external_link = Buksan issues.choose.open_external_link = Buksan
issues.deleted_project = `(binura)` 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_poster_no_select = Lahat ng may-akda
issues.filter_type = Uri issues.filter_type = Uri
issues.filter_type.assigned_to_you = Itinalaga sa iyo 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 issues.role.owner = May-ari
activity.title.prs_n = %d mga kahilingan sa paghatak activity.title.prs_n = %d mga kahilingan sa paghatak
issues.label_color = Kulay 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 projects.column.assigned_to = Itinalaga sa/kay
issues.new_label_desc_placeholder = Paglalarawan issues.new_label_desc_placeholder = Paglalarawan
issues.next = Susunod issues.next = Susunod
@ -1334,61 +1336,61 @@ issues.no_content = Walang nakalaang paglalarawan.
issues.close = Isara ang isyu issues.close = Isara ang isyu
editor.revert = Ibalik ang %s sa: editor.revert = Ibalik ang %s sa:
commits.signed_by = Nilagdaan ni/ng commits.signed_by = Nilagdaan ni/ng
commits.signed_by_untrusted_user = Nilagdaan ng [untrusted] na tagagamit commits.signed_by_untrusted_user = Nilagdaan ng hindi pinagkakatiwalaan na tagagamit
projects.description = Paglalarawan ([optional]) projects.description = Paglalarawan (opsyonal)
projects.create = Gumawa ng proyekto projects.create = Gumawa ng proyekto
projects.new = Bagong proyekto projects.new = Bagong proyekto
projects.edit = Baguhin ang 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.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.cancel_tracking = Pagpaliban
issues.new.open_projects = Mga nakabukas na proyekto 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 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.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.commit_message_desc = Magdagdag ng opsyonal na pinahabang paglalarawan…
issues.new.closed_projects = Mga saradong proyekto issues.new.closed_projects = Mga saradong proyekto
projects = Mga proyekto projects = Mga proyekto
projects.deletion_success = Nabura na ang proyekto. projects.deletion_success = Nabura na ang proyekto.
issues.add_time_short = Idagdag ang oras issues.add_time_short = Idagdag ang oras
editor.push_rejected_summary = Buong mensahe ng pagtanggi: editor.push_rejected_summary = Buong mensahe ng pagtanggi:
commitstatus.success = Tagumpay commitstatus.success = Tagumpay
commitstatus.failure = Kabiguan commitstatus.failure = Nabigo
projects.type.none = Wala projects.type.none = Wala
issues.label_edit = issues.label_edit =
issues.deleted_milestone = `(binura)` issues.deleted_milestone = `(binura)`
issues.add_time_hours = Oras issues.add_time_hours = Oras
projects.column.color = Kulay projects.column.color = Kulay
projects.card_type.images_and_text = Mga larawan at [text] projects.card_type.images_and_text = Mga larawan at teksto
projects.card_type.text_only = [Text] lamang projects.card_type.text_only = Teksto lamang
issues.create = Gumawa ng isyu issues.create = Gumawa ng isyu
commits.gpg_key_id = ID ng susi ng GPG 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… editor.name_your_file = Ipangalan ang iyong file…
pulls.new = Bagong [pull request] pulls.new = Bagong hiling sa paghatak
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>` 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 = Nakabukas, nakasara, nabuksang muli, o binago ang isyu. settings.event_issues_desc = Binuksan, sinara, muling binuksan, o binago ang isyu.
activity.new_issue_label = Nabuksan activity.new_issue_label = Nabuksan
activity.merged_prs_count_1 = Naisamang [pull request] activity.merged_prs_count_1 = Naisamang hiling sa paghatak
activity.opened_prs_count_1 = Inimungkahing [pull request] activity.opened_prs_count_1 = Inimungkahing hiling sa paghatak
activity.opened_prs_label = Inimungkahi 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>` 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 %[1]s ni/ng %[2]s issues.opened_by_fake = binuksan ang %[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.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>` 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]. 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]. settings.event_pull_request_desc = Binuksan, sinara, muling binuksan, o binago ang hiling sa paghatak.
activity.opened_prs_count_n = Inimungkahing mga [pull request] activity.opened_prs_count_n = Mga inimungkahing hiling sa paghatak
editor.filename_is_invalid = Hindi wasto ang pangalan ng file: "%s". editor.filename_is_invalid = Hindi wasto ang pangalan ng file: "%s".
activity.title.prs_opened_by = %s inimungkahi ni/ng %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.new = Bagong isyu
issues.commented_at = `iniwan ang komento <a href="#%s">%s</a>` issues.commented_at = `iniwan ang komento <a href="#%s">%s</a>`
editor.patch = Ilapat ang Patch editor.patch = Ilapat ang Patch
editor.new_patch = Bagong 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 = 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.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.invalid_commit_mail = Hindi wastong mail para sa paggawa ng commit.
issues.filter_sort.leastupdate = Unang nabago 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.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. 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.patching = Pina-patch:
editor.fail_to_apply_patch = Hindi malapat ang patch na "%s" editor.fail_to_apply_patch = Hindi malapat ang patch na "%s"
settings.danger_zone = Mapanganib na lugar 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] [search]
commit_kind = Maghanap ng mga commit... 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] [admin]
auths.updated = Nabago auths.updated = Nabago
emails.updated = Napalitan na ang [email] emails.updated = Napalitan na ang email
emails.not_updated = Nabigong baguhin ang hinihiling na [email address]: %v emails.not_updated = Nabigong baguhin ang hinihiling na email address: %v
monitor.next = Susunod na oras monitor.next = Susunod na oras
monitor.last_execution_result = Resulta monitor.last_execution_result = Resulta
dashboard.last_gc_time = Oras noong huling GC 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.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.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.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. 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 config_settings = Mga setting
dashboard.statistic = Buod dashboard.statistic = Buod
@ -1500,7 +1528,7 @@ users.restricted = Pinaghihigpitan
users.2fa = 2FA users.2fa = 2FA
users.repos = Mga Repo users.repos = Mga Repo
users.send_register_notify = Ipadala ang notification ng pagrehistro ng user 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.is_restricted = Ay pinaghihigpitan
users.allow_import_local = Maaring mag-import ng mga lokal na repositoryo users.allow_import_local = Maaring mag-import ng mga lokal na repositoryo
users.allow_create_organization = Makakagawa ng mga organisasyon 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.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.is_active = Aktibo
users.list_status_filter.not_active = Hindi aktibo users.list_status_filter.not_active = Hindi aktibo
users.list_status_filter.is_admin = Pangangasiwa users.list_status_filter.is_admin = Tagapangasiwa
users.list_status_filter.not_admin = Hindi Pangangasiwa users.list_status_filter.not_admin = Hindi tagapangasiwa
users.list_status_filter.is_restricted = Pinaghihigpitan users.list_status_filter.is_restricted = Pinaghihigpitan
users.list_status_filter.is_prohibit_login = Pinagbawalan ang pag-login 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.not_prohibit_login = Pinapayagan ang pag-login
users.list_status_filter.is_2fa_enabled = Naka-enable ang 2FA 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 dashboard.memory_allocate_times = Mga allocation ng memory
users.edit = I-edit users.edit = I-edit
users = Mga user account users = Mga user account
@ -1530,9 +1558,9 @@ emails = Mga email ng user
config = Pagsasaayos config = Pagsasaayos
notices = Mga paunawa ng sistema notices = Mga paunawa ng sistema
monitor = Pag-monitor monitor = Pag-monitor
settings = Mga setting ng pangangasiwa settings = Mga setting ng tagapangasiwa
users.activated = Naka-activate users.activated = Naka-activate
users.admin = Pangangasiwa users.admin = Tagapangasiwa
users.bot = Bot users.bot = Bot
users.remote = Remote users.remote = Remote
users.local = Lokal 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.current_memory_usage = Kasalukuyang paggamit ng memory
dashboard.gc_times = Mga oras ng GC dashboard.gc_times = Mga oras ng GC
users.list_status_filter.reset = I-reset 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 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.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 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.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. users.deletion_success = Binura na ang user account.
dashboard.heap_memory_in_use = Ginagamit na heap memory 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] [org]
repo_updated = Binago repo_updated = Binago
@ -1619,22 +1716,70 @@ code = Code
[packages] [packages]
alpine.repository.branches = Mga branch alpine.repository.branches = Mga branch
owner.settings.cargo.initialize.success = Matagumpay na nagawa ang Cargo index. 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] [actions]
runners.last_online = Huling oras [online] 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">[quick start guide]</a>. 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">[documentation]</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] [action]
commit_repo = itinulak sa <a href="%[2]s">%[3]s</a> sa <a href="%[1]s">%[4]s</a> 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>` 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>` 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>` reopen_pull_request = `binuksang muli ang hiling sa paghatak <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>` 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>` 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_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_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> 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] [tool]
1m = 1 minuto 1m = 1 minuto
@ -1642,4 +1787,61 @@ create_repo = ginawa ang repositoryo na <a href="%s">%s</a>
1d = 1 araw 1d = 1 araw
1s = 1 segundo 1s = 1 segundo
now = ngayon now = ngayon
future = sa madaling panahon 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 block = Bloquer
unblock = Débloquer unblock = Débloquer
following_one = Suit %d personnes following_one = Suit %d personnes
followers_one = Suivi par %d
[settings] [settings]
profile=Profil 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 additional_repo_units_hint = Encourager l'ajout de nouvelles unités pour le dépôt
update_hints = Mettre à jour les suggestions update_hints = Mettre à jour les suggestions
update_hints_success = Les suggestions ont été mises à jour. update_hints_success = Les suggestions ont été mises à jour.
pronouns_custom = Sur mesure
pronouns = Qualités
pronouns_unspecified = Non spécifié
[repo] [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> 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.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.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.never=Les révisions ne sont jamais signées.
signing.wont_sign.always=Les révisions sont toujours 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. 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.update_hook_success=Déclencheur Web actualisé.
settings.delete_webhook=Retirer le webhook settings.delete_webhook=Retirer le webhook
settings.recent_deliveries=Livraisons récentes 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_token=Jeton
settings.slack_domain=Domaine settings.slack_domain=Domaine
settings.slack_channel=Canal 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_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_users=Utilisateurs en liste blanche de fusion :
settings.protect_merge_whitelist_teams=Équipes 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=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_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. 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.users=Utilisateurs autorisés
settings.tags.protection.allowed.teams=Équipes autorisées settings.tags.protection.allowed.teams=Équipes autorisées
settings.tags.protection.allowed.noone=Personne 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.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.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.chat_id=ID de conversation
settings.thread_id=ID du fil settings.thread_id=ID du fil
settings.matrix.homeserver_url=URL du serveur d'accueil settings.matrix.homeserver_url=URL du serveur d'accueil
@ -2490,11 +2494,11 @@ diff.browse_source=Parcourir la source
diff.parent=Parent diff.parent=Parent
diff.commit=révision diff.commit=révision
diff.git-notes=Notes diff.git-notes=Notes
diff.data_not_available=Contenu de la comparaison indisponible diff.data_not_available=Contenu de la comparaison (diff) indisponible
diff.options_button=Option de Diff diff.options_button=Option de comparaison (diff)
diff.show_diff_stats=Voir les Statistiques diff.show_diff_stats=Voir les statistiques
diff.download_patch=Télécharger le Fichier Patch diff.download_patch=Télécharger le patch en tant que fichier
diff.download_diff=Télécharger le Fichier des Différences diff.download_diff=Télécharger le fichier diff
diff.show_split_view=Vue séparée diff.show_split_view=Vue séparée
diff.show_unified_view=Vue unifiée diff.show_unified_view=Vue unifiée
diff.whitespace_button=Espace 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.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.too_many_files=Certains fichiers ne sont pas affichés car ce diff contient trop de modifications
diff.show_more=Voir plus diff.show_more=Voir plus
diff.load=Voir la Diff diff.load=Voir la diff
diff.generated=générée diff.generated=générée
diff.vendored=externe diff.vendored=externe
diff.comment.add_line_comment=Commenter cette ligne 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.name=Nom de la branche
branch.already_exists=Une branche nommée "%s" existe déjà. branch.already_exists=Une branche nommée "%s" existe déjà.
branch.delete_head=Supprimer branch.delete_head=Supprimer
branch.delete=`Supprimer la branche "%s"` branch.delete=Supprimer la branche "%s"
branch.delete_html=Supprimer la branche 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.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. 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.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.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.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.restore=Restaurer la branche "%s"
branch.download=`Télécharger la branche "%s"` branch.download=Télécharger la branche "%s"
branch.rename=`Renommer la branche "%s"` branch.rename=Renommer la branche "%s"
branch.search=Rechercher une branche branch.search=Rechercher une branche
branch.included_desc=Cette branche fait partie de la branche par défaut branch.included_desc=Cette branche fait partie de la branche par défaut
branch.included=Incluses 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 size_format = %[1]s : %[2]s ; %[3]s : %[4]s
settings.sourcehut_builds.visibility = Visibilité du job settings.sourcehut_builds.visibility = Visibilité du job
settings.sourcehut_builds.secrets = Secrets 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] [graphs]
component_loading=Chargement de %s… 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_desc_helper=Décrire le but ou le rôle de léquipe.
team_access_desc=Accès au dépôt team_access_desc=Accès au dépôt
team_permission_desc=Autorisation 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é) team_unit_disabled=(Désactivé)
form.name_reserved=Le nom d'organisation "%s" est réservé. 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=Paramètres
settings.options=Organisation settings.options=Organisation
settings.full_name=Nom Complet settings.full_name=Nom complet
settings.email=Courriel de contact settings.email=Courriel de contact
settings.website=Site Web settings.website=Site Web
settings.location=Localisation settings.location=Localisation
@ -2771,7 +2785,7 @@ settings.visibility=Visibilité
settings.visibility.public=Public settings.visibility.public=Public
settings.visibility.limited=Limité (Visible uniquement aux utilisateurs authentifiés) settings.visibility.limited=Limité (Visible uniquement aux utilisateurs authentifiés)
settings.visibility.limited_shortname=Limité 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.visibility.private_shortname=Privé
settings.update_settings=Appliquer les paramètres 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.read_access_helper=Les membres peuvent voir et cloner les dépôts de l'équipe.
teams.write_access=Écriture teams.write_access=Écriture
teams.write_access_helper=Les membres peuvent voir et pousser dans les dépôts de l'équipe. 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.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.no_desc=Aucune description
teams.settings=Paramètres 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.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.update_settings=Appliquer les paramètres
teams.delete_team=Supprimer l'équipe 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=Inviter à %s
teams.invite_team_member.list=Invitations en attente teams.invite_team_member.list=Invitations en attente
teams.delete_team_title=Supprimer l'équipe 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.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.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.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.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_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. 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 hooks=Déclencheurs web
integrations=Intégrations integrations=Intégrations
authentication=Sources d'authentification authentication=Sources d'authentification
emails=Emails de l'utilisateur emails=Courriels de l'utilisateur
config=Configuration config=Configuration
notices=Informations notices=Informations système
monitor=Surveillance monitor=Surveillance
first_page=Première first_page=Première
last_page=Derniè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.user_manage_panel=Gestion du compte utilisateur
users.new_account=Créer un compte users.new_account=Créer un compte
users.name=Nom d'utilisateur users.name=Nom d'utilisateur
users.full_name=Nom Complet users.full_name=Nom complet
users.activated=Activé users.activated=Activé
users.admin=Administrateur users.admin=Administrateur
users.restricted=Restreint 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.max_repo_creation_desc=(Mettre à -1 pour utiliser la limite globale par défaut.)
users.is_activated=Ce compte est activé users.is_activated=Ce compte est activé
users.prohibit_login=Désactiver la connexion users.prohibit_login=Désactiver la connexion
users.is_admin=Est Administrateur users.is_admin=Est administrateur
users.is_restricted=Est restreint 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_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_import_local=Autoriser l'importation de dépôts locaux
users.allow_create_organization=Autoriser la création d'organisations users.allow_create_organization=Autoriser la création d'organisations
@ -3041,7 +3055,7 @@ orgs.members=Membres
orgs.new_orga=Nouvelle organisation orgs.new_orga=Nouvelle organisation
repos.repo_manage_panel=Gestion des dépôts 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.unadopted.no_more=Aucun dépôt dépossédé trouvé.
repos.owner=Propriétaire repos.owner=Propriétaire
repos.name=Nom repos.name=Nom
@ -3091,8 +3105,8 @@ auths.domain=Domaine
auths.host=Hôte auths.host=Hôte
auths.port=Port auths.port=Port
auths.bind_dn=Bind DN auths.bind_dn=Bind DN
auths.bind_password=Bind mot de passe auths.bind_password=Mot de passe Bind
auths.user_base=Utilisateur Search Base auths.user_base=Utilisateur search base
auths.user_dn=Utilisateur DN auths.user_dn=Utilisateur DN
auths.attribute_username=Attribut nom d'utilisateur auths.attribute_username=Attribut nom d'utilisateur
auths.attribute_username_placeholder=Laisser vide afin d'utiliser le nom d'utilisateur spécifié dans Forgejo. 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.op=Opération
notices.delete_success=Les informations systèmes ont été supprimées. notices.delete_success=Les informations systèmes ont été supprimées.
self_check = Auto vérification 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é 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.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 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_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_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. 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] [action]
create_repo=a créé le dépôt <a href="%s">%s</a> create_repo=a créé le dépôt <a href="%s">%s</a>

View file

@ -73,7 +73,7 @@ forks=Fork
activities=Attivitá activities=Attivitá
pull_requests=Pull request pull_requests=Pull request
issues=Problemi issues=Segnalazioni
milestones=Milestones milestones=Milestones
ok=OK ok=OK
@ -117,7 +117,7 @@ concept_user_organization=Organizzazione
name=Nome name=Nome
value=Valore value=Valore
enable_javascript = Questo sito richiede JavaScript. 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 retry = Riprova
rerun = Ri-esegui rerun = Ri-esegui
rerun_all = Ri-esegui tutti gli incarichi 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 invalid_csrf=Richiesta errata: token CSRF non valido
not_found=Il bersaglio non è stato trovato. not_found=Il bersaglio non è stato trovato.
network_error=Errore di rete 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 server_internal = Errore interno del server
[startpage] [startpage]
@ -230,7 +230,7 @@ ssl_mode=SSL
path=Percorso path=Percorso
sqlite_helper=Percorso file del database SQLite3.<br>Inserisci un percorso assoluto se stai usando Forgejo come servizio. 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_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_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_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. 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 AuthName=Nome autorizzazione
AdminEmail=Email dell'Admin AdminEmail=Email dell'Admin
NewBranchName=Nuovo nome del branch NewBranchName=Nuovo nome del ramo
CommitSummary=Riepilogo dei commit CommitSummary=Riepilogo dei commit
CommitMessage=Messaggio di commit CommitMessage=Messaggio di commit
CommitChoice=Scelta di commit CommitChoice=Scelta di commit
@ -608,7 +608,7 @@ invalid_ssh_principal=Principal non valido: %s
auth_failed=Autenticazione non riuscita: %v 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_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. 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. 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. unsupported_login_type = Il tipo di accesso non è supportato per l'eliminazione del profilo.
unset_password = L'utente non ha impostato la password. unset_password = L'utente non ha impostato la password.
required_prefix = L'input deve iniziare con "%s" 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] [user]
@ -648,7 +656,7 @@ disabled_public_activity=L'utente ha disabilitato la vista pubblica dell'attivit
joined_on = Membro dal %s joined_on = Membro dal %s
block_user = Blocca utente block_user = Blocca utente
block_user.detail_1 = Questo utente non ti seguirà più. 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. block_user.detail_3 = Questo utente non ti potrà aggiungere come un collaboratore, né potrai tu aggiungerlo come un collaboratore.
code = Codice code = Codice
block = Blocca 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. 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. 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à. 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>. 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_key=Aggiungi chiave SSH
add_new_gpg_key=Aggiungi chiave GPG 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. user_block_success = L'utente è stato bloccato correttamente.
at_least_one_permission = Devi selezionare almeno un permesso per creare un token 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. 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_key_success = La chiave SSH "%s" è stata aggiunta.
add_gpg_key_success = La chiave GPG "%s" è stata aggiunta. add_gpg_key_success = La chiave GPG "%s" è stata aggiunta.
add_principal_success = Il certificato principale SSH "%s" è stato aggiunto. 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=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. 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=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=Licenza
license_helper=Seleziona un file di 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> 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 trust_model_helper_default=Predefinito: utilizzare il modello di trust predefinito per questa installazione
create_repo=Crea progetto create_repo=Crea progetto
default_branch=Ramo predefinito 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=Rimuovi
mirror_prune_desc=Rimuovi i riferimenti di puntamento-remoto obsoleti 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) 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.one_item=Deve selezionare almeno un elemento del modello
template.invalid=Devi selezionare un modello di repository 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. 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. 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. 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=Codice
code.desc=Accedi al codice sorgente, file, commits e branches. code.desc=Accedi al codice sorgente, ai file, ai commit e ai rami.
branch=Ramo (Branch) branch=Ramo
tree=Albero (Tree) tree=Albero (Tree)
clear_ref=`Cancella il riferimento corrente` 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 find_tag=Trova etichetta
branches=Rami (Branch) branches=Rami
tags=Tag tags=Tag
issues=Problemi issues=Segnalazioni
pulls=Richieste di modifica pulls=Richieste di modifica
project_board=Progetti project_board=Progetti
packages=Pacchetti 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.cannot_edit_non_text_files=I file binari non possono essere modificati tramite interfaccia web.
editor.edit_this_file=Modifica file editor.edit_this_file=Modifica file
editor.this_file_locked=Il file è bloccato 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.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.delete_this_file=Elimina file
editor.must_have_write_access=È necessaria l'autorizzazione di scrittura per eseguire o proporre modifiche su questo 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.new_patch=Nuova Patch
editor.commit_message_desc=Aggiungi una descrizione estesa facoltativa… 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.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.commit_directly_to_this_branch=Fai un commit direttamente sul ramo <strong class="branch-name">%s</strong>.
editor.create_new_branch=Creare un <strong> nuovo branch</strong> per questo commit e inizia una pull request. 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.create_new_branch_np=Crea un <strong>nuovo ramo</strong> per questo commit.
editor.propose_file_change=Proponi la modifica del file 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.cancel=Cancellare
editor.filename_cannot_be_empty=Il nome del file non può essere vuoto. 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. 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=La modifica è stata rifiutata dal server. Controlla Git hooks.
editor.push_rejected_summary=Messaggio Di Rifiuto Completo: editor.push_rejected_summary=Messaggio Di Rifiuto Completo:
editor.add_subdir=Aggiungi una directory… editor.add_subdir=Aggiungi una directory…
editor.no_commit_to_branch=Impossibile effettuare il commit direttamente sul branch perché: editor.no_commit_to_branch=Impossibile effettuare il commit direttamente sul ramo perché:
editor.user_no_push_to_branch=L'utente non può effettuare il push sul branch editor.user_no_push_to_branch=L'utente non può immettere nel ramo
editor.require_signed_commit=Il branch richiede un commit firmato editor.require_signed_commit=Il ramo richiede un commit firmato
editor.cherry_pick=Cherry-pick %s suto: editor.cherry_pick=Cherry-pick %s suto:
editor.revert=Ripristina %s su: editor.revert=Ripristina %s su:
@ -1279,7 +1287,7 @@ commits.commits=Commit
commits.nothing_to_compare=Questi rami sono uguali. commits.nothing_to_compare=Questi rami sono uguali.
commits.search=Ricerca commits… commits.search=Ricerca commits…
commits.find=Cerca commits.find=Cerca
commits.search_all=Tutti i branch commits.search_all=Tutti i Rami
commits.author=Autore commits.author=Autore
commits.message=Messaggio commits.message=Messaggio
commits.date=Data commits.date=Data
@ -1293,10 +1301,10 @@ commits.ssh_key_fingerprint=Impronta chiave SSH
commit.revert=Ripristina commit.revert=Ripristina
commit.revert-header=Ripristina: %s 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=Cherry-pick
commit.cherry-pick-header=Cherry-pick: %s 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.error=Errore
commitstatus.pending=In sospeso commitstatus.pending=In sospeso
@ -1305,7 +1313,7 @@ ext_issues=Accesso a segnalazioni esterne
ext_issues.desc=Collegamento al puntatore di una issue esterna. ext_issues.desc=Collegamento al puntatore di una issue esterna.
projects=Progetti 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=Descrizione (opzionale)
projects.description_placeholder=Descrizione projects.description_placeholder=Descrizione
projects.create=Crea progetto 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_desc=Eliminare un progetto lo rimuove fra tutte le issue relative. Continuare?
projects.deletion_success=Il progetto è stato cancellato. projects.deletion_success=Il progetto è stato cancellato.
projects.edit=Modifica progetto 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.modify=Aggiorna progetto
projects.type.none=Nessuno projects.type.none=Nessuno
projects.type.basic_kanban=Kanban semplice projects.type.basic_kanban=Kanban semplice
@ -1360,7 +1368,7 @@ issues.choose.get_started=Inizia
issues.choose.open_external_link=Apri issues.choose.open_external_link=Apri
issues.choose.blank=Default issues.choose.blank=Default
issues.choose.blank_about=Crea un problema dal modello predefinito. 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.create=Crea segnalazione
issues.new_label=Nuova etichetta issues.new_label=Nuova etichetta
issues.new_label_placeholder=Nome 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.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.remove_ref_at=`riferimento rimosso <b>%s</b> %s`
issues.add_ref_at=`aggiunto riferimento <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=Etichetta
issues.filter_label_exclude=`Usa <code>alt</code> + <code>click/enter</code> per escludere le etichette` issues.filter_label_exclude=`Usa <code>alt</code> + <code>click/enter</code> per escludere le etichette`
issues.filter_label_no_select=Tutte 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=Autore
issues.filter_poster_no_select=Tutti gli autori issues.filter_poster_no_select=Tutti gli autori
issues.filter_type=Tipo 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.assigned_to_you=Assegnati a te
issues.filter_type.created_by_you=Creati da te issues.filter_type.created_by_you=Creati da te
issues.filter_type.mentioning_you=Che ti riguardano issues.filter_type.mentioning_you=Che ti riguardano
@ -1479,7 +1487,7 @@ issues.label_title=Nome etichetta
issues.label_description=Descrizione etichetta issues.label_description=Descrizione etichetta
issues.label_color=Colore etichetta issues.label_color=Colore etichetta
issues.label_count=%d etichette 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_edit=Modifica
issues.label_delete=Elimina issues.label_delete=Elimina
issues.label_modify=Modifica etichetta issues.label_modify=Modifica etichetta
@ -1564,10 +1572,10 @@ issues.dependency.remove=Rimuovi
issues.dependency.remove_info=Rimuovi questa dipendenza issues.dependency.remove_info=Rimuovi questa dipendenza
issues.dependency.added_dependency=`ha aggiunto una nuova dipendenza %s` issues.dependency.added_dependency=`ha aggiunto una nuova dipendenza %s`
issues.dependency.removed_dependency=`ha rimosso una 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.pr_closing_blockedby=Questa richiesta di modifica non può essere chiusa per via delle seguenti segnalazioni
issues.dependency.issue_closing_blockedby=La chiusura di questo problema è bloccata dai seguenti problemi issues.dependency.issue_closing_blockedby=Questa segnalazione non può essere chiusa per via delle seguenti segnalazioni
issues.dependency.issue_close_blocks=Questo problema impedisce la chiusura dei seguenti problemi issues.dependency.issue_close_blocks=Questa segnalazione impedisce la chiusura delle seguenti segnalazioni
issues.dependency.pr_close_blocks=Questa richiesta di pull impedisce la chiusura dei seguenti problemi 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.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.pr_close_blocked=Chiudere tutte le anomalie che bloccano la richiesta di pull prima di effettaure il merge.
issues.dependency.blocks_short=Blocchi 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_issue_not_exist=Il problema dipendente non esiste.
issues.dependency.add_error_dep_not_exist=La dipendenza 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_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_cannot_create_circular=Non puoi creare una dipendenza con due segnalazioni 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_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.approval=Non puoi approvare la tua pull request.
issues.review.self.rejection=Non puoi richiedere modifiche sulla tua pull request. issues.review.self.rejection=Non puoi richiedere modifiche sulla tua pull request.
issues.review.approve=hanno approvato queste modifiche %s 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.view=Visualizza richiesta di modifica
pulls.compare_changes=Nuova richiesta di modifica pulls.compare_changes=Nuova richiesta di modifica
pulls.allow_edits_from_maintainers=Consenti modifiche dai manutentori 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.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_viewed_file=Visualizzato
pulls.has_changed_since_last_review=Modificato dalla tua ultima recensione pulls.has_changed_since_last_review=Modificato dalla tua ultima recensione
pulls.viewed_files_label=%[1]d / %[2]d file visti 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.compare_compare=esegui un pull da
pulls.switch_comparison_type=Cambia tipo di confronto pulls.switch_comparison_type=Cambia tipo di confronto
pulls.switch_head_and_base=Testa e base di commutazione 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.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=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 PR sarà vuota. pulls.nothing_to_compare_and_allow_empty_pr=Questi rami sono uguali. Questa richiesta sarà vuota.
pulls.has_pull_request=`Una pull request tra questi rami esiste già: <a href="%[1]s">%[2]s#%[3]d</a>` 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.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.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_conversation=Conversazione
pulls.tab_commits=Commit pulls.tab_commits=Commit
pulls.tab_files=File modificati pulls.tab_files=File modificati
pulls.reopen_to_merge=Riapri questa pull request per effettuare l'unione. 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.merged=Unito
pulls.manually_merged=Unito manualmente pulls.manually_merged=Unito manualmente
pulls.is_closed=La pull request è stata chiusa. 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.add_prefix=Aggiungi prefisso <strong>%s</strong>
pulls.remove_prefix=Rimuovi il 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.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_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_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. 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.reject_count_n=%d richieste di cambiamento
pulls.waiting_count_1=%d in attesa di revisione pulls.waiting_count_1=%d in attesa di revisione
pulls.waiting_count_n=%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_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. 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.squash_merge_pull_request=Crea commit mescolato
pulls.merge_manually=Unito manualmente pulls.merge_manually=Unito manualmente
pulls.merge_commit_id=L'ID del commit di merge 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.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 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_error=Alcuni controlli hanno segnalato errori
pulls.status_checks_requested=Richiesto pulls.status_checks_requested=Richiesto
pulls.status_checks_details=Dettagli 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_rebase=Aggiorna il ramo per cambio base
pulls.update_branch_success=Brench aggiornato con successo pulls.update_branch_success=Ramo aggiornato con successo
pulls.update_not_allowed=Non sei abilitato ad aggiornare il branch pulls.update_not_allowed=Non ti è permesso aggiornare il ramo
pulls.outdated_with_base_branch=Questo brench non è aggiornato con il branch di base 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.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>` 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.deletion_success=La pietra miliare è stata eliminata.
milestones.filter_sort.least_complete=Meno completato milestones.filter_sort.least_complete=Meno completato
milestones.filter_sort.most_complete=Più completato milestones.filter_sort.most_complete=Più completato
milestones.filter_sort.most_issues=Più problemi milestones.filter_sort.most_issues=Maggior parte delle segnalazioni
milestones.filter_sort.least_issues=Meno problemi milestones.filter_sort.least_issues=Meno segnalazioni
ext_wiki=Accesso al Wiki esterno 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_1=%d commit
activity.git_stats_commit_n=%d commit activity.git_stats_commit_n=%d commit
activity.git_stats_push_to_branch=su %s e 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_on_default_branch=Su %s,
activity.git_stats_file_1=%d file activity.git_stats_file_1=%d file
activity.git_stats_file_n=%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.sync_mirror=Sincronizza ora
settings.site=Sito web settings.site=Sito web
settings.update_settings=Aggiorna impostazioni settings.update_settings=Salva impostazioni
settings.branches.update_default_branch=Aggiorna ramo predefinito settings.branches.update_default_branch=Aggiorna ramo predefinito
settings.advanced_settings=Opzioni avanzate settings.advanced_settings=Opzioni avanzate
settings.wiki_desc=Abilita wiki del progetto 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_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.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=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=Formato numerico del tracciatore di segnalazioni esterno
settings.tracker_issue_style.numeric=Numerico settings.tracker_issue_style.numeric=Numerico
settings.tracker_issue_style.alphanumeric=Alfanumerico 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_desc=Abilita le richieste di modifica del progetto
settings.pulls.ignore_whitespace=Ignora gli spazi bianchi per evitare conflitti 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.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.allow_rebase_update=Abilita l'aggiornamento del ramo della richiesta per rebase
settings.pulls.default_delete_branch_after_merge=Elimina il ramo pull request dopo la fusione per impostazione predefinita 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.packages_desc=Abilita registro dei pacchetti del progetto
settings.projects_desc=Abilita progetti del progetto settings.projects_desc=Abilita progetti del progetto
settings.admin_settings=Impostazioni amministratore settings.admin_settings=Impostazioni amministratore
@ -1925,7 +1933,7 @@ settings.admin_indexer_commit_sha=Ultimo SHA indicizzato
settings.admin_indexer_unindexed=Non indicizzato settings.admin_indexer_unindexed=Non indicizzato
settings.reindex_button=Aggiungi alla coda di re-indicizzazione settings.reindex_button=Aggiungi alla coda di re-indicizzazione
settings.reindex_requested=Re-indicizzazione richiesta 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.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.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 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_choose=Eventi personalizzati…
settings.event_header_repository=Eventi del progetto settings.event_header_repository=Eventi del progetto
settings.event_create=Crea 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=Elimina
settings.event_delete_desc=Branch o tag eliminati. settings.event_delete_desc=Ramo o etichetta eliminati.
settings.event_fork=Fork settings.event_fork=Fork
settings.event_fork_desc=Repository forkato. settings.event_fork_desc=Repository forkato.
settings.event_wiki=Wiki 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=Segnalazione assegnata
settings.event_issue_assign_desc=Issue assegnata o non assegnata. settings.event_issue_assign_desc=Issue assegnata o non assegnata.
settings.event_issue_label=Segnalazione etichettata 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=Segnalazione risolta
settings.event_issue_milestone_desc=Obiettivo raggiunto o abbandonato. settings.event_issue_milestone_desc=Obiettivo raggiunto o abbandonato.
settings.event_issue_comment=Commento segnalazione 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_pull_request_sync_desc=Pull request sincronizzata.
settings.event_package=Pacchetto settings.event_package=Pacchetto
settings.event_package_desc=Pacchetto creato o eliminato in un repository. 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.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=Attivo
settings.active_helper=Le informazioni sugli eventi innescati saranno inviate a questo URL del webhook. 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. 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_desc = Unisci le modifiche e aggiornale su Forgejo.
pulls.cmd_instruction_merge_title = Merge 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. 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 i problemi e a tracciare i loro progressi. milestones.new_subheader = I traguardi possono aiutarti ad organizzare le segnalazioni e a tracciarne i progressi.
activity.navbar.contributors = Contributori activity.navbar.contributors = Contributori
migrate.cancel_migrating_title = Annulla migrazione migrate.cancel_migrating_title = Annulla migrazione
more_operations = Ulteriori operazioni more_operations = Ulteriori operazioni
@ -2390,7 +2398,7 @@ issues.label_exclusive = Esclusivo
pulls.made_using_agit = AGit pulls.made_using_agit = AGit
milestones.create_success = Il traguardo "%s" è stato creato. milestones.create_success = Il traguardo "%s" è stato creato.
search.fuzzy.tooltip = Includi risultati di ricerca che combaciano anche approssimativamente al termine di ricerca 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 pulls.cmd_instruction_checkout_title = Checkout
pull.deleted_branch = (eliminato):%s pull.deleted_branch = (eliminato):%s
issues.filter_label_select_no_label = Senza etichette 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? 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.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 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.manage_flags = Gestisci flag
admin.enabled_flags = Flag abilitate per il progetto: admin.enabled_flags = Flag abilitate per il progetto:
admin.update_flags = Aggiorna flag admin.update_flags = Aggiorna flag
@ -2436,11 +2444,11 @@ ambiguous_runes_description = `Questo file contiene caratteri Unicode che potreb
vendored = Vendored vendored = Vendored
generated = Generato generated = Generato
commit.contained_in = Questo commit è contenuto in: 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 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.fail_to_apply_patch = Impossibile applicare toppa "%s"
editor.new_branch_name = Dai un nome al nuovo ramo per questo commit editor.new_branch_name = Dài un nome al nuovo ramo per questo commit
editor.branch_already_exists = Il ramo "%s" esiste già nel progetto. 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.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.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. 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.file_already_exists = Un file chiamato "%s" esiste già in questo progetto.
editor.fail_to_update_file = Impossibile aggiornare/creare il file "%s". editor.fail_to_update_file = Impossibile aggiornare/creare il file "%s".
editor.upload_file_is_locked = Il file "%s" è bloccato da %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". 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.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>. 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.nothing_to_compare_have_tag = I rami/etichette selezionati sono uguali.
pulls.merged_success = Richiesta di modifica fusa correttamente e chiusa pulls.merged_success = Richiesta di modifica fusa correttamente e chiusa
pulls.closed = Richiesta di modifica 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.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_hide_all = Nascondi tutti i controlli
pulls.status_checks_show_all = Mostra 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.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.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.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 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 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. 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: contributors.contribution_type.filter_label = Tipi di contributo:
search.type.tooltip = Cerca tipo search.type.tooltip = Cerca tipo
search.match.tooltip = Includi solo risultati che corrispondono esattamente ai termini di ricerca 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.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.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: 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.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.enter_repo_name = Inserisci il proprietario e il nome del progetto esattamente come mostrato:
settings.confirmation_string = Stringa di conferma settings.confirmation_string = Stringa di conferma
settings.wiki_rename_branch_main = Normalizza il nome del ramo della wiki 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_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_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_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 del progetto. settings.wiki_branch_rename_failure = Impossibile normalizzare il nome del ramo della wiki della repo.
settings.confirm_wiki_branch_rename = Rinomina ramo della wiki settings.confirm_wiki_branch_rename = Rinomina il 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_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.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.webhook.replay.description_disabled = Per riprodurre questo richiamo HTTP, attivalo.
settings.event_wiki_desc = Pagina wiki creata, rinominata, modificata o rimossa. 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_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_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.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 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_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.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: 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. 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_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_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 pulls.fast_forward_only_merge_pull_request = Solo fast-forward
signing.will_sign = Questo commit verrà firmato con la chiave "%s". 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. 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.push_mirror_sync_in_progress = Immettendo cambiamenti al progetto remoto %s.
settings.update_mirror_settings = Aggiorna impostazioni dello specchio settings.update_mirror_settings = Aggiorna impostazioni dello specchio
settings.branches.switch_default_branch = Passa al ramo predefinito 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.actions_desc = Abilita azioni del progetto
settings.new_owner_blocked_doer = Il nuovo proprietario ti ha bloccato. 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.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. 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.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_archive = Archivia etichetta
issues.label_archived_filter = Mostra etichette archiviate issues.label_archived_filter = Mostra etichette archiviate
issues.dependency.no_permission_n = Non hai il permesso di lettura per leggere %s dipendenze 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_new = Nuova etichetta. Questa etichetta sarà creata dalla destinazione.
release.tag_helper_existing = Etichetta esistente. 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? 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.merge_style_desc = Modalità di fusione
settings.remove_protected_branch_failed = Impossibile rimuovere la regola di protezione del ramo "%s". 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. 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.download_count_few = %s downloads
release.system_generated = Questo allegato è stato generato automaticamente. release.system_generated = Questo allegato è stato generato automaticamente.
pulls.ready_for_review = Pronto alla revisione? 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_branch_few = %s rami
n_tag_one = %s tag n_tag_one = %s tag
commits.search_branch = Questo Ramo commits.search_branch = Questo Ramo
settings.rename_branch_failed_protected = Non è possibile rinominare il ramo %s perché è un ramo protetto. settings.rename_branch_failed_protected = Non è possibile rinominare il ramo %s perché è un ramo protetto.
settings.event_pull_request_enforcement = Imposizione 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] [graphs]
contributors.what = contribuzioni contributors.what = contribuzioni
@ -2978,7 +2990,7 @@ users.delete_account=Elimina profilo utente
users.cannot_delete_self=Non puoi eliminare te stesso 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_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.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.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.deletion_success=L'account utente è stato eliminato.
users.reset_2fa=Resetta 2FA 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.is_active=Attivo
users.list_status_filter.not_active=Inattivo users.list_status_filter.not_active=Inattivo
users.list_status_filter.is_admin=Amministratore 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.is_restricted=Limitato
users.list_status_filter.not_restricted=Non Limitato users.list_status_filter.not_restricted=Non limitato
users.list_status_filter.is_prohibit_login=Divieto Di Login users.list_status_filter.is_prohibit_login=Accesso vietato
users.list_status_filter.not_prohibit_login=Consenti Login users.list_status_filter.not_prohibit_login=Accesso consentito
users.list_status_filter.is_2fa_enabled=2FA Abilitato users.list_status_filter.is_2fa_enabled=2FA abilitato
users.list_status_filter.not_2fa_enabled=2FA Disabilitato users.list_status_filter.not_2fa_enabled=2FA disabilitato
emails.email_manage_panel=Gestisci email dell'utente emails.email_manage_panel=Gestisci email dell'utente
emails.primary=Primario emails.primary=Primario
@ -3022,7 +3034,7 @@ repos.private=Privati
repos.watches=Segue repos.watches=Segue
repos.stars=Voti repos.stars=Voti
repos.forks=Fork repos.forks=Fork
repos.issues=Problemi repos.issues=Segnalazioni
repos.size=Dimensione repos.size=Dimensione
packages.package_manage_panel=Gestisci pacchetti packages.package_manage_panel=Gestisci pacchetti
@ -3721,7 +3733,7 @@ runners.new_notice = Come avviare un esecutore
runners.new = Crea un nuovo esecutore runners.new = Crea un nuovo esecutore
variables.update.success = La variabile è stata modificata. variables.update.success = La variabile è stata modificata.
variables.update.failed = Impossibile modificare la variabile. 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.success = La variabile è stata rimossa.
variables.deletion.failed = Impossibile rimuovere la variabile. variables.deletion.failed = Impossibile rimuovere la variabile.
variables.edit = Modifica 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_search_unavailable = La ricerca del codice non è attualmente disponibile. Contatta l'amministratore del sito.
code_kind = Cerca codice... code_kind = Cerca codice...
team_kind = Cerca team... 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... project_kind = Ricerca progetti...
commit_kind = Ricerca commit... commit_kind = Ricerca commit...
branch_kind = Ricerca rami... branch_kind = Ricerca rami...

View file

@ -19,8 +19,8 @@ language=Idioma
notifications=Notificações notifications=Notificações
active_stopwatch=Cronômetro ativo active_stopwatch=Cronômetro ativo
create_new=Criar… create_new=Criar…
user_profile_and_more=Perfil e Configurações... user_profile_and_more=Perfil e configurações…
signed_in_as=Acessado como signed_in_as=Sessão iniciada como
enable_javascript=Este site requer JavaScript. enable_javascript=Este site requer JavaScript.
toc=Índice toc=Índice
licenses=Licenças licenses=Licenças
@ -37,18 +37,18 @@ twofa_scratch=Código de backup da autenticação de dois fatores
passcode=Senha passcode=Senha
webauthn_insert_key=Insira sua chave de segurança 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_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=Por favor, pressione o botão na sua chave de segurança… 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_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_error=Não foi possível ler sua chave de segurança.
webauthn_unsupported_browser=Seu navegador não oferece suporte ao WebAuthn. webauthn_unsupported_browser=Seu navegador não oferece suporte ao WebAuthn.
webauthn_error_unknown=Ocorreu um erro desconhecido. Por favor, tente novamente. 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_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_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_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_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_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=Recarregar webauthn_reload=Atualizar
repository=Repositório repository=Repositório
organization=Organização organization=Organização
@ -79,7 +79,7 @@ pull_requests=Pull requests
issues=Issues issues=Issues
milestones=Marcos milestones=Marcos
ok=Ok ok=OK
cancel=Cancelar cancel=Cancelar
retry=Tentar novamente retry=Tentar novamente
rerun=Reexecutar 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. 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.` 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. 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] [user]
@ -1057,9 +1058,9 @@ author_search_tooltip=Mostra um máximo de 30 usuários
transfer.accept=Aceitar transferência transfer.accept=Aceitar transferência
transfer.accept_desc=`Transferir para "%s"` transfer.accept_desc=Transferir para "%s"
transfer.reject=Rejeitar transferência 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_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. 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.is_prohibit_login=Proibir login
users.list_status_filter.not_prohibit_login=Permitir login users.list_status_filter.not_prohibit_login=Permitir login
users.list_status_filter.is_2fa_enabled=2FA Ativado 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 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.primary=Principal
emails.activated=Ativado emails.activated=Em uso
emails.filter_sort.email=E-mail emails.filter_sort.email=E-mail
emails.filter_sort.email_reverse=E-mail (reverso) emails.filter_sort.email_reverse=E-mail (decrescente)
emails.filter_sort.name=Nome de Usuário emails.filter_sort.name=Usuário
emails.filter_sort.name_reverse=Nome de Usuário (reverso) emails.filter_sort.name_reverse=Usuário (decrescente)
emails.updated=E-mail atualizado emails.updated=Endereço de e-mail atualizado
emails.not_updated=Falha ao atualizar o endereço de e-mail solicitado: %v 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 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.name=Nome
orgs.teams=Equipes orgs.teams=Equipes
orgs.members=Membros orgs.members=Membros
orgs.new_orga=Nova organização 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=Repositórios Não Adotados
repos.unadopted.no_more=Não foram encontrados mais 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.name=Nome
repos.private=Privado repos.private=Privado
repos.watches=Observadores repos.watches=Observadores
@ -2904,9 +2905,9 @@ repos.issues=Issues
repos.size=Tamanho repos.size=Tamanho
repos.lfs_size=Tamanho do LFS repos.lfs_size=Tamanho do LFS
packages.package_manage_panel=Gerenciamento de Pacotes packages.package_manage_panel=Gerenciar pacotes
packages.total_size=Tamanho Total: %s packages.total_size=Tamanho total: %s
packages.unreferenced_size=Tamanho Não Referenciado: %s packages.unreferenced_size=Tamanho não referenciado: %s
packages.cleanup=Limpar dados expirados packages.cleanup=Limpar dados expirados
packages.owner=Proprietário packages.owner=Proprietário
packages.creator=Criador packages.creator=Criador
@ -2925,13 +2926,13 @@ systemhooks=Webhooks do Sistema
systemhooks.add_webhook=Adicionar Webhook do Sistema systemhooks.add_webhook=Adicionar Webhook do Sistema
systemhooks.update_webhook=Atualizar 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.new=Adicionar fonte de autenticação
auths.name=Nome auths.name=Nome
auths.type=Tipo auths.type=Tipo
auths.enabled=Habilitado auths.enabled=Habilitada
auths.syncenabled=Habilitar sincronização de usuário auths.syncenabled=Habilitar sincronização de usuário
auths.updated=Atualizado auths.updated=Atualizada
auths.auth_type=Tipo de autenticação auths.auth_type=Tipo de autenticação
auths.auth_name=Nome da autenticação auths.auth_name=Nome da autenticação
auths.security_protocol=Protocolo de segurança auths.security_protocol=Protocolo de segurança
@ -2941,7 +2942,7 @@ auths.port=Porta
auths.bind_dn=Vincular DN auths.bind_dn=Vincular DN
auths.bind_password=Vincular senha auths.bind_password=Vincular senha
auths.user_base=Base de pesquisa do usuário 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=Atributo nome de usuário
auths.attribute_username_placeholder=Deixe em branco para usar o nome de usuário inserido no Forgejo. auths.attribute_username_placeholder=Deixe em branco para usar o nome de usuário inserido no Forgejo.
auths.attribute_name=Atributo primeiro nome 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.attribute_avatar=Atributo do avatar
auths.attributes_in_bind=Buscar os atributos no contexto de Bind DN 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.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.search_page_size=Tamanho da página
auths.filter=Filtro de usuário auths.filter=Filtro de usuário
auths.admin_filter=Filtro de administrador 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.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.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 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.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=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.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.ms_ad_sa=Atributos de pesquisa do MS AD
auths.smtp_auth=Tipo de autenticação SMTP auths.smtp_auth=Tipo de autenticação SMTP
auths.smtphost=Host SMTP auths.smtphost=Servidor
auths.smtpport=Porta SMTP auths.smtpport=Porta
auths.allowed_domains=Domínios permitidos 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.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=Pular verificação de TLS auths.skip_tls_verify=Ignorar validação TLS
auths.force_smtps=Forçar SMTPS 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.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.helo_hostname_helper=Hostname enviado com HELO. Deixe em branco para enviar o hostname atual.
auths.disable_helo=Desativar HELO 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.pam_email_domain=Domínio de e-mail do PAM (opcional)
auths.oauth2_provider=Provedor OAuth2 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_clientID=ID do cliente (chave)
auths.oauth2_clientSecret=Client Secret auths.oauth2_clientSecret=Segredo do cliente
auths.openIdConnectAutoDiscoveryURL=URL do OpenID Connect Auto Discovery auths.openIdConnectAutoDiscoveryURL=URL de descoberta automática de conexão do OpenID
auths.oauth2_use_custom_url=Usar URLs personalizadas em vez de URLs padrão auths.oauth2_use_custom_url=Usar URLs personalizados em vez de URLs padrão
auths.oauth2_tokenURL=URL do Token auths.oauth2_tokenURL=URL do código
auths.oauth2_authURL=URL de Authorização auths.oauth2_authURL=URL da autorização
auths.oauth2_profileURL=URL do perfil auths.oauth2_profileURL=URL do perfil
auths.oauth2_emailURL=URL de e-mail auths.oauth2_emailURL=URL do e-mail
auths.skip_local_two_fa=Pular 2FA local 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.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_scopes=Escopos Adicionais
auths.oauth2_required_claim_name=Nome do Claim Obrigatorio 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 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 secrets=Segredos
description=Os segredos serão passados a certas ações e não poderão ser lidos de outra forma. 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. 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.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.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. creation.success=O segredo "%s" foi adicionado.
@ -3513,7 +3514,7 @@ runners=Runners
runners.runner_manage_panel=Gerenciamento de Runners runners.runner_manage_panel=Gerenciamento de Runners
runners.new=Criar novo Runner runners.new=Criar novo Runner
runners.new_notice=Como iniciar um runner runners.new_notice=Como iniciar um runner
runners.status=Status runners.status=Estado
runners.id=ID runners.id=ID
runners.name=Nome runners.name=Nome
runners.owner_type=Tipo runners.owner_type=Tipo
@ -3524,10 +3525,10 @@ runners.runner_title=Runner
runners.task_list=Tarefas recentes neste runner runners.task_list=Tarefas recentes neste runner
runners.task_list.no_tasks=Ainda não há nenhuma tarefa. runners.task_list.no_tasks=Ainda não há nenhuma tarefa.
runners.task_list.run=Executar runners.task_list.run=Executar
runners.task_list.status=Status runners.task_list.status=Estado
runners.task_list.repository=Repositório runners.task_list.repository=Repositório
runners.task_list.commit=Commit 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.edit_runner=Editar Runner
runners.update_runner=Atualizar as Alterações runners.update_runner=Atualizar as Alterações
runners.update_runner_success=Runner atualizado com sucesso runners.update_runner_success=Runner atualizado com sucesso
@ -3541,7 +3542,7 @@ runners.none=Nenhum runner disponível
runners.status.unspecified=Desconhecido runners.status.unspecified=Desconhecido
runners.status.idle=Inativo runners.status.idle=Inativo
runners.status.active=Ativo runners.status.active=Ativo
runners.status.offline=Offiline runners.status.offline=Offline
runners.version=Versão runners.version=Versão
runners.reset_registration_token_success=Token de registro de runner redefinido com sucesso 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] [git.filemode]
; Ordered by git filemode value, ascending. E.g. directory has "040000", normal file has "100644", … ; 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 changed_filemode = %[1]s → %[2]s
directory = Diretório directory = Diretório
normal_file = Arquivo normal normal_file = Arquivo normal
@ -3611,4 +3612,5 @@ fuzzy = Aproximada
fuzzy_tooltip = Inclui resultados que se aproximam dos termos de busca fuzzy_tooltip = Inclui resultados que se aproximam dos termos de busca
match = Correspondente match = Correspondente
match_tooltip = Inclui apenas os resultados que correspondem exatamente aos termos de busca match_tooltip = Inclui apenas os resultados que correspondem exatamente aos termos de busca
repo_kind = Buscar repositórios... 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.` 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. 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. 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] [user]
change_avatar=Mude o seu avatar… 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_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_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. 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] [settings]
profile=Perfil profile=Perfil
@ -964,6 +980,20 @@ visibility.limited=Limitada
visibility.limited_tooltip=Visível apenas para utilizadores autenticados visibility.limited_tooltip=Visível apenas para utilizadores autenticados
visibility.private=Privada visibility.private=Privada
visibility.private_tooltip=Visível apenas para membros das organizações a que se associou 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] [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>. 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.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.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. 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] [graphs]
component_loading=A carregar %s... component_loading=A carregar %s...

View file

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

153
package-lock.json generated
View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -437,7 +437,7 @@ func GetBranchProtection(ctx *context.APIContext) {
return 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 // ListBranchProtections list branch protections for a repo
@ -470,7 +470,7 @@ func ListBranchProtections(ctx *context.APIContext) {
} }
apiBps := make([]*api.BranchProtection, len(bps)) apiBps := make([]*api.BranchProtection, len(bps))
for i := range 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) ctx.JSON(http.StatusOK, apiBps)
@ -682,7 +682,7 @@ func CreateBranchProtection(ctx *context.APIContext) {
return 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 // EditBranchProtection edits a branch protection for a repo
@ -964,7 +964,7 @@ func EditBranchProtection(ctx *context.APIContext) {
return 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 // 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 // in:body
Body []api.BlockedUser `json:"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 { if setting.EnableSQLite3 {
log.Info("SQLite3 support is enabled") log.Info("SQLite3 support is enabled")
} else if setting.Database.Type.IsSQLite3() { } 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) mustInitCtx(ctx, common.InitDBEngine)

View file

@ -212,7 +212,7 @@ func checkDatabase(ctx *context.Context, form *forms.InstallForm) bool {
} }
if hasPostInstallationUser && dbMigrationVersion > 0 { 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 confirmed := form.ReinstallConfirmFirst && form.ReinstallConfirmSecond && form.ReinstallConfirmThird
if !confirmed { if !confirmed {
ctx.Data["Err_DbInstalledBefore"] = true ctx.Data["Err_DbInstalledBefore"] = true
@ -220,11 +220,11 @@ func checkDatabase(ctx *context.Context, form *forms.InstallForm) bool {
return false 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 { 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 return true

View file

@ -69,7 +69,7 @@ func QueueSet(ctx *context.Context) {
} }
func QueueRemoveAllItems(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 // 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 // Site admin could remove all items from the queue to make it work again
qid := ctx.ParamsInt64("qid") qid := ctx.ParamsInt64("qid")

View file

@ -104,7 +104,7 @@ func Projects(ctx *context.Context) {
} }
for _, project := range projects { 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) 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["LinkedPRs"] = linkedPrsMap
ctx.Data["PageIsViewProjects"] = true ctx.Data["PageIsViewProjects"] = true
ctx.Data["CanWriteProjects"] = canWriteProjects(ctx) ctx.Data["CanWriteProjects"] = canWriteProjects(ctx)

View file

@ -35,6 +35,7 @@ import (
api "code.gitea.io/gitea/modules/structs" api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/typesniffer" "code.gitea.io/gitea/modules/typesniffer"
"code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/routers/common"
"code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context"
"code.gitea.io/gitea/services/context/upload" "code.gitea.io/gitea/services/context/upload"
"code.gitea.io/gitea/services/gitdiff" "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 // 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 baseRepo := ctx.Repo.Repository
ci := &CompareInfo{} ci := &common.CompareInfo{}
fileOnly := ctx.FormBool("file-only") fileOnly := ctx.FormBool("file-only")
@ -576,7 +566,7 @@ func ParseCompareInfo(ctx *context.Context) *CompareInfo {
// PrepareCompareDiff renders compare diff page // PrepareCompareDiff renders compare diff page
func PrepareCompareDiff( func PrepareCompareDiff(
ctx *context.Context, ctx *context.Context,
ci *CompareInfo, ci *common.CompareInfo,
whitespaceBehavior git.TrustedCmdArgs, whitespaceBehavior git.TrustedCmdArgs,
) bool { ) bool {
var ( 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 // 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; // 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; // 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. // 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. // 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("/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("/ssh_info", misc.SSHInfo)
routes.Get("/api/healthz", healthcheck.Check) 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 { func (input *notifyInput) WithDoer(doer *user_model.User) *notifyInput {
input.Doer = doer input.Doer = doer
return input return input
@ -562,7 +567,7 @@ func DetectAndHandleSchedules(ctx context.Context, repo *repo_model.Repository)
// We need a notifyInput to call handleSchedules // We need a notifyInput to call handleSchedules
// if repo is a mirror, commit author maybe an external user, // if repo is a mirror, commit author maybe an external user,
// so we use action user as the Doer of the notifyInput // 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) return handleSchedules(ctx, scheduleWorkflows, commit, notifyInput, repo.DefaultBranch)
} }

View file

@ -21,6 +21,7 @@ import (
repo_model "code.gitea.io/gitea/models/repo" repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/models/unit" "code.gitea.io/gitea/models/unit"
user_model "code.gitea.io/gitea/models/user" 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/git"
"code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/log"
api "code.gitea.io/gitea/modules/structs" 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 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 // ToBranchProtection convert a ProtectedBranch to api.BranchProtection
func ToBranchProtection(ctx context.Context, bp *git_model.ProtectedBranch) *api.BranchProtection { func ToBranchProtection(ctx context.Context, bp *git_model.ProtectedBranch, repo *repo_model.Repository) *api.BranchProtection {
pushWhitelistUsernames, err := user_model.GetUserNamesByIDs(ctx, bp.WhitelistUserIDs) readers, err := access_model.GetRepoReaders(ctx, repo)
if err != nil { 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 { if err != nil {
log.Error("GetUserNamesByIDs (MergeWhitelistUserIDs): %v", err) log.Error("Repo.Owner.TeamsWithAccessToRepo: %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)
} }
pushWhitelistTeams := getWhitelistEntities(teamReaders, bp.WhitelistTeamIDs)
mergeWhitelistTeams := getWhitelistEntities(teamReaders, bp.MergeWhitelistTeamIDs)
approvalsWhitelistTeams := getWhitelistEntities(teamReaders, bp.ApprovalsWhitelistTeamIDs)
branchName := "" branchName := ""
if !git_model.IsRuleNameSpecial(bp.RuleName) { if !git_model.IsRuleNameSpecial(bp.RuleName) {
branchName = 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 { if authed {
result.IsAdmin = user.IsAdmin result.IsAdmin = user.IsAdmin
result.LoginName = user.LoginName result.LoginName = user.LoginName
result.SourceID = user.LoginSource
result.LastLogin = user.LastLoginUnix.AsTime() result.LastLogin = user.LastLoginUnix.AsTime()
result.Language = user.Language result.Language = user.Language
result.IsActive = user.IsActive result.IsActive = user.IsActive

View file

@ -82,31 +82,34 @@ func (h *ReplyHandler) Handle(ctx context.Context, content *MailContent, doer *u
return nil return nil
} }
log.Trace("incoming mail related to %T", ref)
attachmentIDs := make([]string, 0, len(content.Attachments))
if setting.Attachment.Enabled {
for _, attachment := range content.Attachments {
a, err := attachment_service.UploadAttachment(ctx, bytes.NewReader(attachment.Content), setting.Attachment.AllowedTypes, int64(len(attachment.Content)), &repo_model.Attachment{
Name: attachment.Name,
UploaderID: doer.ID,
RepoID: issue.Repo.ID,
})
if err != nil {
if upload.IsErrFileTypeForbidden(err) {
log.Info("Skipping disallowed attachment type: %s", attachment.Name)
continue
}
return err
}
attachmentIDs = append(attachmentIDs, a.UUID)
}
}
if content.Content == "" && len(attachmentIDs) == 0 {
log.Trace("incoming mail has no content and no attachement", ref)
return nil
}
switch r := ref.(type) { switch r := ref.(type) {
case *issues_model.Issue: case *issues_model.Issue:
attachmentIDs := make([]string, 0, len(content.Attachments))
if setting.Attachment.Enabled {
for _, attachment := range content.Attachments {
a, err := attachment_service.UploadAttachment(ctx, bytes.NewReader(attachment.Content), setting.Attachment.AllowedTypes, int64(len(attachment.Content)), &repo_model.Attachment{
Name: attachment.Name,
UploaderID: doer.ID,
RepoID: issue.Repo.ID,
})
if err != nil {
if upload.IsErrFileTypeForbidden(err) {
log.Info("Skipping disallowed attachment type: %s", attachment.Name)
continue
}
return err
}
attachmentIDs = append(attachmentIDs, a.UUID)
}
}
if content.Content == "" && len(attachmentIDs) == 0 {
return nil
}
_, err = issue_service.CreateIssueComment(ctx, doer, issue.Repo, issue, content.Content, attachmentIDs) _, err = issue_service.CreateIssueComment(ctx, doer, issue.Repo, issue, content.Content, attachmentIDs)
if err != nil { if err != nil {
return fmt.Errorf("CreateIssueComment failed: %w", err) 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: case *issues_model.Comment:
comment := r comment := r
if content.Content == "" { switch comment.Type {
return nil case issues_model.CommentTypeComment, issues_model.CommentTypeReview:
} _, err = issue_service.CreateIssueComment(ctx, doer, issue.Repo, issue, content.Content, attachmentIDs)
if err != nil {
if comment.Type == issues_model.CommentTypeCode { return fmt.Errorf("CreateIssueComment failed: %w", err)
}
case issues_model.CommentTypeCode:
_, err := pull_service.CreateCodeComment( _, err := pull_service.CreateCodeComment(
ctx, ctx,
doer, doer,
@ -130,12 +135,16 @@ func (h *ReplyHandler) Handle(ctx context.Context, content *MailContent, doer *u
false, // not pending review but a single review false, // not pending review but a single review
comment.ReviewID, comment.ReviewID,
"", "",
nil, attachmentIDs,
) )
if err != nil { if err != nil {
return fmt.Errorf("CreateCodeComment failed: %w", err) 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 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: // IsValidSlackChannel validates a channel name conforms to what slack expects:
// https://api.slack.com/methods/conversations.rename#naming // 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. // 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 { func IsValidSlackChannel(name string) bool {
return slackChannel.MatchString(name) 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}} {{if not .Runs}}
<div class="empty-placeholder"> <div class="empty-placeholder">
{{svg "octicon-no-entry" 48}} {{svg "octicon-no-entry" 48}}
@ -28,14 +28,14 @@
</div> </div>
<div class="flex-item-trailing"> <div class="flex-item-trailing">
{{if .RefLink}} {{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}} {{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}} {{end}}
</div> <div class="run-list-item-right">
<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-calendar" 16}}{{TimeSinceUnix .Updated ctx.Locale}}</div> <div class="run-list-meta">{{svg "octicon-stopwatch" 16}}{{.Duration}}</div>
<div class="run-list-meta">{{svg "octicon-stopwatch" 16}}{{.Duration}}</div> </div>
</div> </div>
</div> </div>
{{end}} {{end}}

View file

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

View file

@ -6,14 +6,23 @@
<div class="singular-commit" id="{{$tag}}"> <div class="singular-commit" id="{{$tag}}">
<span class="badge badge-commit">{{svg "octicon-git-commit"}}</span> <span class="badge badge-commit">{{svg "octicon-git-commit"}}</span>
{{if .User}} {{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}} {{else}}
{{ctx.AvatarUtils.AvatarByEmail .Author.Email .Author.Name}} {{ctx.AvatarUtils.AvatarByEmail .Author.Email .Author.Name 20}}
{{end}} {{end}}
{{$commitLink:= printf "%s/commit/%s" $.comment.Issue.PullRequest.BaseRepo.Link (PathEscape .ID.String)}} {{$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}} {{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses}}
{{$class := "ui sha label"}} {{$class := "ui sha label"}}
{{if .Signature}} {{if .Signature}}
@ -37,14 +46,6 @@
{{end}} {{end}}
</a> </a>
</span> </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> </div>
{{end}} {{end}}
</div> </div>

View file

@ -130,7 +130,7 @@
</div> </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> <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}} {{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}} {{if $file.IsGenerated}}
<span class="ui label">{{ctx.Locale.Tr "repo.diff.generated"}}</span> <span class="ui label">{{ctx.Locale.Tr "repo.diff.generated"}}</span>
{{end}} {{end}}

View file

@ -15,7 +15,7 @@
{{range $i, $v := .TreeNames}} {{range $i, $v := .TreeNames}}
<div class="breadcrumb-divider">/</div> <div class="breadcrumb-divider">/</div>
{{if eq $i $l}} {{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> <span data-tooltip-content="{{ctx.Locale.Tr "repo.editor.filename_help"}}">{{svg "octicon-info"}}</span>
{{else}} {{else}}
<span class="section"><a href="{{$.BranchLink}}/{{index $.TreePaths $i | PathEscapeSegments}}">{{$v}}</a></span> <span class="section"><a href="{{$.BranchLink}}/{{index $.TreePaths $i | PathEscapeSegments}}">{{$v}}</a></span>

View file

@ -13,7 +13,7 @@
{{range $i, $v := .TreeNames}} {{range $i, $v := .TreeNames}}
<div class="breadcrumb-divider">/</div> <div class="breadcrumb-divider">/</div>
{{if eq $i $l}} {{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> <span data-tooltip-content="{{ctx.Locale.Tr "repo.editor.filename_help"}}">{{svg "octicon-info"}}</span>
{{else}} {{else}}
<span class="section"><a href="{{$.BranchLink}}/{{index $.TreePaths $i | PathEscapeSegments}}">{{$v}}</a></span> <span class="section"><a href="{{$.BranchLink}}/{{index $.TreePaths $i | PathEscapeSegments}}">{{$v}}</a></span>

View file

@ -3,16 +3,16 @@
{{template "repo/header" .}} {{template "repo/header" .}}
<div class="ui container"> <div class="ui container">
{{template "base/alert" .}} {{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> <h1 class="tw-mb-2">{{.Milestone.Name}}</h1>
{{if not .Repository.IsArchived}} {{if not .Repository.IsArchived}}
<div class="text right tw-flex-1"> <div class="tw-flex top-right-buttons">
{{if or .CanWriteIssues .CanWritePulls}} {{if or .CanWriteIssues .CanWritePulls}}
{{if .Milestone.IsClosed}} {{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> </a>
{{else}} {{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> </a>
{{end}} {{end}}
<a class="ui button" href="{{.RepoLink}}/milestones/{{.MilestoneID}}/edit">{{ctx.Locale.Tr "repo.milestones.edit"}}</a> <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"> <div class="ui container">
{{template "base/alert" .}} {{template "base/alert" .}}
<div class="list-header"> <div class="list-header list-header-issues">
{{template "repo/issue/navbar" .}} {{template "repo/issue/navbar" .}}
{{template "repo/issue/search" .}} {{template "repo/issue/search" .}}
{{if and (or .CanWriteIssues .CanWritePulls) (not .Repository.IsArchived)}} {{if and (or .CanWriteIssues .CanWritePulls) (not .Repository.IsArchived)}}
<a class="ui small primary button" href="{{$.Link}}/new">{{ctx.Locale.Tr "repo.milestones.new"}}</a> <div class="top-right-buttons">
<a class="ui small primary button" href="{{$.Link}}/new">{{ctx.Locale.Tr "repo.milestones.new"}}</a>
</div>
{{end}} {{end}}
</div> </div>

View file

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

View file

@ -114,7 +114,7 @@
</div> </div>
</div> </div>
{{if and (or .HasIssuesOrPullsWritePermission .IsIssuePoster) (not .HasMerged) (not .Issue.IsClosed)}} {{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"> <a class="muted">
{{if .IsPullWorkInProgress}} {{if .IsPullWorkInProgress}}
{{ctx.Locale.Tr "repo.pulls.ready_for_review"}} {{ctx.Locale.Tr "repo.pulls.remove_prefix" (index .PullRequestWorkInProgressPrefixes 0)}} {{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"> <div class="column">
{{if gt .Activity.ActivePRCount 0}} {{if gt .Activity.ActivePRCount 0}}
<div class="stats-table"> <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> {{if gt .Activity.MergedPRPerc 0}}
<a href="#proposed-pull-requests" class="table-cell tiny background green"></a> <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> </div>
{{else}} {{else}}
<div class="stats-table"> <div class="stats-table">
<a class="table-cell tiny background light grey"></a> <a class="table-cell tiny tw-bg-grey"></a>
</div> </div>
{{end}} {{end}}
{{ctx.Locale.TrN .Activity.ActivePRCount "repo.activity.active_prs_count_1" "repo.activity.active_prs_count_n" .Activity.ActivePRCount}} {{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"> <div class="column">
{{if gt .Activity.ActiveIssueCount 0}} {{if gt .Activity.ActiveIssueCount 0}}
<div class="stats-table"> <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> {{if gt .Activity.ClosedIssuePerc 0}}
<a href="#new-issues" class="table-cell tiny background green"></a> <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> </div>
{{else}} {{else}}
<div class="stats-table"> <div class="stats-table">
@ -108,7 +112,7 @@
{{end}} {{end}}
{{if gt .Activity.PublishedReleaseCount 0}} {{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"}} {{svg "octicon-tag" 16 "tw-mr-2"}}
{{ctx.Locale.Tr "repo.activity.title.releases_published_by" {{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) (ctx.Locale.TrN .Activity.PublishedReleaseCount "repo.activity.title.releases_1" "repo.activity.title.releases_n" .Activity.PublishedReleaseCount)
@ -130,7 +134,7 @@
{{end}} {{end}}
{{if gt .Activity.MergedPRCount 0}} {{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"}} {{svg "octicon-git-pull-request" 16 "tw-mr-2"}}
{{ctx.Locale.Tr "repo.activity.title.prs_merged_by" {{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) (ctx.Locale.TrN .Activity.MergedPRCount "repo.activity.title.prs_1" "repo.activity.title.prs_n" .Activity.MergedPRCount)
@ -149,7 +153,7 @@
{{end}} {{end}}
{{if gt .Activity.OpenedPRCount 0}} {{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"}} {{svg "octicon-git-branch" 16 "tw-mr-2"}}
{{ctx.Locale.Tr "repo.activity.title.prs_opened_by" {{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) (ctx.Locale.TrN .Activity.OpenedPRCount "repo.activity.title.prs_1" "repo.activity.title.prs_n" .Activity.OpenedPRCount)
@ -168,7 +172,7 @@
{{end}} {{end}}
{{if gt .Activity.ClosedIssueCount 0}} {{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"}} {{svg "octicon-issue-closed" 16 "tw-mr-2"}}
{{ctx.Locale.Tr "repo.activity.title.issues_closed_from" {{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) (ctx.Locale.TrN .Activity.ClosedIssueCount "repo.activity.title.issues_1" "repo.activity.title.issues_n" .Activity.ClosedIssueCount)
@ -187,7 +191,7 @@
{{end}} {{end}}
{{if gt .Activity.OpenedIssueCount 0}} {{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"}} {{svg "octicon-issue-opened" 16 "tw-mr-2"}}
{{ctx.Locale.Tr "repo.activity.title.issues_created_by" {{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) (ctx.Locale.TrN .Activity.OpenedIssueCount "repo.activity.title.issues_1" "repo.activity.title.issues_n" .Activity.OpenedIssueCount)
@ -206,7 +210,7 @@
{{end}} {{end}}
{{if gt .Activity.UnresolvedIssueCount 0}} {{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"}} {{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}} {{ctx.Locale.TrN .Activity.UnresolvedIssueCount "repo.activity.title.unresolved_conv_1" "repo.activity.title.unresolved_conv_n" .Activity.UnresolvedIssueCount}}
</h4> </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> <a class="ui primary tiny button" href="{{.LFSFilesLink}}/find?oid={{.LFSFile.Oid}}&size={{.LFSFile.Size}}">{{ctx.Locale.Tr "repo.settings.lfs_findcommits"}}</a>
</div> </div>
</h4> </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" $}} {{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}}"> <div class="file-view{{if .IsMarkup}} markup {{.MarkupType}}{{else if .IsPlainText}} plain-text{{else if .IsTextFile}} code-view{{end}}">
{{if .IsMarkup}} {{if .IsMarkup}}

View file

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

View file

@ -11,7 +11,7 @@
{{end}} {{end}}
{{if not .ReadmeInList}} {{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"> <div class="latest-commit">
{{template "repo/latest_commit" .}} {{template "repo/latest_commit" .}}
</div> </div>
@ -93,7 +93,7 @@
{{end}} {{end}}
</div> </div>
</h4> </h4>
<div class="ui attached table unstackable segment"> <div class="ui bottom attached table unstackable segment">
{{if not (or .IsMarkup .IsRenderedHTML)}} {{if not (or .IsMarkup .IsRenderedHTML)}}
{{template "repo/unicode_escape_prompt" dict "EscapeStatus" .EscapeStatus "root" $}} {{template "repo/unicode_escape_prompt" dict "EscapeStatus" .EscapeStatus "root" $}}
{{end}} {{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": { "/repos/{owner}/{repo}/contents": {
"get": { "get": {
"produces": [ "produces": [
@ -19017,6 +19062,25 @@
}, },
"x-go-package": "code.gitea.io/gitea/modules/structs" "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": { "ContentsResponse": {
"description": "ContentsResponse contains information about a repo's entry's (dir, file, symlink, submodule) metadata and content", "description": "ContentsResponse contains information about a repo's entry's (dir, file, symlink, submodule) metadata and content",
"type": "object", "type": "object",
@ -24608,6 +24672,12 @@
"type": "boolean", "type": "boolean",
"x-go-name": "Restricted" "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": { "starred_repos_count": {
"type": "integer", "type": "integer",
"format": "int64", "format": "int64",
@ -25088,6 +25158,12 @@
} }
} }
}, },
"Compare": {
"description": "",
"schema": {
"$ref": "#/definitions/Compare"
}
},
"ContentsListResponse": { "ContentsListResponse": {
"description": "ContentsListResponse", "description": "ContentsListResponse",
"schema": { "schema": {

View file

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

View file

@ -52,4 +52,4 @@ data.organizationId = {{.ContextUser.ID}};
window.config.pageData.dashboardRepoList = data; window.config.pageData.dashboardRepoList = data;
</script> </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. // Copyright 2021 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style // SPDX-License-Identifier: MIT
// license that can be found in the LICENSE file.
package integration package integration

View file

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

View file

@ -1,6 +1,5 @@
// Copyright 2021 The Gitea Authors. All rights reserved. // Copyright 2021 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style // SPDX-License-Identifier: MIT
// license that can be found in the LICENSE file.
package integration 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" auth_model "code.gitea.io/gitea/models/auth"
"code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user" user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/setting"
api "code.gitea.io/gitea/modules/structs" api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/test"
"code.gitea.io/gitea/tests" "code.gitea.io/gitea/tests"
"github.com/stretchr/testify/assert" "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) { func TestAPIUserSearchSystemUsers(t *testing.T) {
defer tests.PrepareTestEnv(t)() defer tests.PrepareTestEnv(t)()
for _, systemUser := range []*user_model.User{ 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("Handler", func(t *testing.T) {
t.Run("Reply", func(t *testing.T) { t.Run("Reply", func(t *testing.T) {
t.Run("Comment", func(t *testing.T) { checkReply := func(t *testing.T, payload []byte, issue *issues_model.Issue, commentType issues_model.CommentType) {
defer tests.PrintCurrentTest(t)() t.Helper()
handler := &incoming.ReplyHandler{} 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.Error(t, handler.Handle(db.DefaultContext, &incoming.MailContent{}, nil, payload))
assert.NoError(t, handler.Handle(db.DefaultContext, &incoming.MailContent{}, user, 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{ comments, err := issues_model.FindComments(db.DefaultContext, &issues_model.FindCommentsOptions{
IssueID: issue.ID, IssueID: issue.ID,
Type: issues_model.CommentTypeComment, Type: commentType,
}) })
assert.NoError(t, err) assert.NoError(t, err)
assert.NotEmpty(t, comments) assert.NotEmpty(t, comments)
@ -113,6 +110,14 @@ func TestIncomingEmail(t *testing.T) {
attachment := comment.Attachments[0] attachment := comment.Attachments[0]
assert.Equal(t, content.Attachments[0].Name, attachment.Name) assert.Equal(t, content.Attachments[0].Name, attachment.Name)
assert.EqualValues(t, 4, attachment.Size) 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) { 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}) comment := unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{ID: 6})
issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: comment.IssueID}) issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: comment.IssueID})
handler := &incoming.ReplyHandler{} payload, err := incoming_payload.CreateReferencePayload(comment)
content := &incoming.MailContent{ assert.NoError(t, err)
Content: "code reply by mail",
Attachments: []*incoming.Attachment{ checkReply(t, payload, issue, issues_model.CommentTypeCode)
{ })
Name: "attachment.txt",
Content: []byte("test"), 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) payload, err := incoming_payload.CreateReferencePayload(comment)
assert.NoError(t, err) assert.NoError(t, err)
assert.NoError(t, handler.Handle(db.DefaultContext, content, user, payload)) checkReply(t, payload, issue, issues_model.CommentTypeComment)
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)
}) })
}) })

View file

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

View file

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

View file

@ -44,9 +44,10 @@
} }
.run-list-item-right { .run-list-item-right {
flex: 0 0 min(20%, 130px); width: 130px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
flex-shrink: 0;
gap: 3px; gap: 3px;
color: var(--color-text-light); color: var(--color-text-light);
} }
@ -57,3 +58,26 @@
gap: .25rem; gap: .25rem;
align-items: center; 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 { .ui.selection.dropdown .menu > .item {
border-color: var(--color-secondary); border-color: var(--color-secondary);
white-space: nowrap;
} }
.ui.selection.visible.dropdown > .text:not(.default) { .ui.selection.visible.dropdown > .text:not(.default) {
@ -1562,6 +1563,7 @@ table th[data-sortt-desc] .svg {
align-items: center; align-items: center;
gap: .25rem; gap: .25rem;
vertical-align: middle; vertical-align: middle;
min-width: 0;
} }
.ui.ui.button { .ui.ui.button {
@ -1582,4 +1584,5 @@ table th[data-sortt-desc] .svg {
display: flex; display: flex;
align-items: center; align-items: center;
gap: .25rem; gap: .25rem;
min-width: 0;
} }

View file

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

View file

@ -18,7 +18,8 @@
width: auto; 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%; width: 60%;
} }

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