Compare commits

...

91 Commits

Author SHA1 Message Date
Aravinth Manivannan 66f735c281
fix: rm CODEOWNERS file 2024-03-25 18:46:43 +05:30
Earl Warren 60a01255e7 Merge pull request 'Disable renovate digist pinning' (#2787) from viceice/forgejo:chore/renovate into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2787
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-25 13:15:23 +00:00
Michael Kriese 477832f4a2
Disable renovate digist pinning 2024-03-25 14:12:49 +01:00
Earl Warren 9e77bf310c Merge pull request 'Update renovate config' (#2784) from viceice/forgejo:chore/renovate into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2784
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-25 13:03:46 +00:00
Michael Kriese 8f1c26aa54
Update renovate config 2024-03-25 13:58:51 +01:00
Earl Warren 674a711127 Merge pull request 'Update renovate config' (#2783) from viceice/forgejo:chore/renovate into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2783
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-25 12:34:51 +00:00
Michael Kriese 0023f78a17
Disable duplicate builds 2024-03-25 13:24:53 +01:00
Michael Kriese a32772e695
Update renovate config 2024-03-25 13:16:16 +01:00
Earl Warren eb3ea82ee6 Merge pull request 'Update renovate configs' (#2780) from viceice/forgejo:chore/renovate into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2780
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-25 12:05:14 +00:00
Michael Kriese 102531cba1
Update renovate configs 2024-03-25 13:03:20 +01:00
Earl Warren 7288fb5dff Merge pull request 'Add renovate' (#2775) from viceice/forgejo:chore/renovate into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2775
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-25 11:22:03 +00:00
Earl Warren 9397bfd276 Merge pull request 'Offer to remove WIP: prefix in sidebar' (#2660) from 0ko/forgejo:convert-to-normal into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2660
Reviewed-by: oliverpool <oliverpool@noreply.codeberg.org>
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-25 10:30:11 +00:00
Earl Warren 1e16f3d7d1 Merge pull request 'go: upgrade to go v1.22' (#2770) from earl-warren/forgejo:wip-go-1.22 into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2770
Reviewed-by: oliverpool <oliverpool@noreply.codeberg.org>
2024-03-25 10:27:04 +00:00
Michael Kriese 8ce7de5677
Add renovate 2024-03-25 10:34:01 +01:00
Earl Warren 84f28f36b0
go: upgrade to go v1.22 2024-03-25 06:52:23 +01:00
Gusted 9f088464ea Merge pull request 'Fix typo in translation' (#2768) from forgejo-tr-typo into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2768
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-24 22:02:44 +00:00
Gusted efc79dd41e Fix typo in translation
Regression of 4c1af0d9a6
2024-03-24 21:30:08 +00:00
Gusted 142459bbe0
[BUG] Use new translation key
- Caused by 847f03b6a6
- Resolve CI failures on `forgejo` branch.
2024-03-24 09:16:30 +01:00
Earl Warren 5a18b74632 Merge pull request '[TESTS] fail when log.Error is called' (#2657) from oliverpool/forgejo:fail_test_on_log_error into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2657
2024-03-24 07:28:31 +00:00
Earl Warren 7e8e27b8ef Merge pull request '[CI] backport: do no nothing if there are no backport labels' (#2757) from earl-warren/forgejo:wip-ci-backport into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2757
Reviewed-by: oliverpool <oliverpool@noreply.codeberg.org>
2024-03-24 07:25:59 +00:00
Earl Warren f326f14da7
[CI] backport: do no nothing if there are no backport labels 2024-03-24 07:52:00 +01:00
oliverpool 2d209f1130 drop log.Error in ReadRepoNotifications 2024-03-24 07:12:31 +01:00
oliverpool c0fb62cb5a fix action fixtures 2024-03-24 07:12:31 +01:00
oliverpool 25daa267bb migration v1_11/v111.go: Unknown columns in 'field list' 2024-03-24 07:12:31 +01:00
oliverpool 639ac7a131 workergroup: gracefully exit on close(popItemErr) 2024-03-24 07:12:31 +01:00
oliverpool fb6bcf1029 packages/maven: log.Warn on bad request 2024-03-24 07:12:31 +01:00
oliverpool dda88488ca packages: skip error logging on duplicate 2024-03-24 07:12:31 +01:00
oliverpool 7b576d0a5d activitypub: warn instead of error 2024-03-24 07:12:31 +01:00
oliverpool e7abda6a0d actions artifacts: warn instead of error on invalid request 2024-03-24 07:12:31 +01:00
oliverpool a0d1cfdf7d fix missing admin.config.allow_dots_in_usernames translation 2024-03-24 07:12:30 +01:00
oliverpool b990e07af0 old migrations: warning instead of error 2024-03-24 07:11:19 +01:00
oliverpool 3b7b899afa fix commit_status 2024-03-24 07:11:19 +01:00
oliverpool 2536c2db89 fix webhook fixtures 2024-03-24 07:11:19 +01:00
oliverpool 8750a5a42b fix TestBranchActions error log 2024-03-24 07:11:18 +01:00
oliverpool 036b98884c fix action_run fixtures 2024-03-24 07:11:18 +01:00
oliverpool ca209a04b1 log.Error on missing translation 2024-03-24 07:11:18 +01:00
oliverpool e43c6cd9df fail test when log.Error is called
except for some specific messages (to make the test pass for now)
2024-03-24 07:11:18 +01:00
Earl Warren 0bfd4ca532 Merge pull request 'Allow users to hide all "Add more units..." hints' (#2533) from algernon/forgejo:less-is-more into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2533
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-24 05:42:37 +00:00
Earl Warren 2b656a2bea Merge pull request '[META] Adjust default issues and pull requests labels' (#2723) from oliverpool/forgejo:main into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2723
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-24 05:36:05 +00:00
Earl Warren b7c535dba8 Merge pull request '[TESTS] webhook forms creation and edition' (#2755) from oliverpool/forgejo:webhook_1_tests into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2755
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-24 05:35:07 +00:00
Earl Warren 33ede09135 Merge pull request '[PORT] Unify search boxes (gitea#29530)' (#2688) from snematoda/port-29530 into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2688
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-24 05:33:13 +00:00
oliverpool 33a3ee1955 [TESTS] webhook forms creation and edition 2024-03-23 23:02:06 +01:00
Earl Warren af0bb6e68a Merge pull request '[port] gitea#29833: Refactor markdown attention render' (#2747) from algernon/forgejo:gitea/port/29833/refactor into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2747
2024-03-23 19:44:45 +00:00
Gergely Nagy eb97e721d1
Align callout icons with the callout text
Adjust some CSS so that callout/attention icons line up better with the
text of the attention header.

Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
2024-03-23 18:42:38 +01:00
Earl Warren a28e289d06 Merge pull request 'Remove some more dead code from the markup sanitizer' (#2750) from algernon/forgejo:gitea/port/29833/more-dead-code-removal into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2750
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-23 17:15:06 +00:00
Earl Warren 99c4b0930d Merge pull request 'Improve branch select list ui in go templates (gitea#29729)' (#2744) from algernon/forgejo:gitea/port/29729 into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2744
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-23 17:13:05 +00:00
Gergely Nagy 3c57a62050
Restore the "repo.pulls.no_results" translation key
The previous (cherry picked) commit changed a translation key, from
`repo.pulls.no_results` to `common.no_results_found`. This would break
existing translations, and will have to be handled differently, if at
all.

This changes the affected code to continue using the old key.

Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
2024-03-23 17:29:06 +01:00
HEREYUA 729849a2fd
Improve branch select list ui in go templates (#29729)
Relate:[#27417](https://github.com/go-gitea/gitea/issues/27471)
Reference:  [#26631](https://github.com/go-gitea/gitea/pull/26631)

Before

![image](https://github.com/go-gitea/gitea/assets/37935145/88ca8da5-25dd-4f60-bea8-a80107f19cc5)

After

![image](https://github.com/go-gitea/gitea/assets/37935145/3cb180dc-1331-43e9-8633-be5e288401e8)

---------

Co-authored-by: silverwind <me@silverwind.io>

(cherry picked from commit 2eb7c564df950fb96a1970559719003e979ff30a)
2024-03-23 17:29:06 +01:00
Gergely Nagy d571a2c202
Remove some more dead code from the markup sanitizer
This removes some more dead code from the markup sanitizer:

- Allowing unlabelled labels is no longer neccessary as of
  41e8b834af.
- Allowing `style` attributes on `span` and `p` are no longer necessary,
  `bluemonday` allows them by default now.

Selectively cherry picked from commit 66902d89e567ab1ae6dfb828636999c61ff0149e.

Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
2024-03-23 17:16:22 +01:00
Earl Warren f42f044bc4
Revert "NEWFILE"
This reverts commit a6c620dfeb.
2024-03-23 17:13:09 +01:00
Earl Warren d66474c801 Merge pull request 'TEST PLEASE IGNORE' (#2748) from earl-warren/forgejo:wip-test-backport into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2748
2024-03-23 16:09:40 +00:00
Earl Warren a6c620dfeb
NEWFILE 2024-03-23 16:53:20 +01:00
Earl Warren ee269b2bb8 Merge pull request '[CI] backport PRs with the label backport/v*' (#2739) from earl-warren/forgejo:wip-ci-backport into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2739
2024-03-23 15:52:29 +00:00
Earl Warren b5775f6d6e Merge pull request 'modules/markup/markdown/ast: Drop IsColorPreview' (#2746) from algernon/forgejo:gitea/cherry-pick/29833/dead-code-removal into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2746
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-23 15:25:08 +00:00
Earl Warren 155d79473d Merge pull request 'Add newly added languages' (#2724) from 0ko/forgejo:i18n-2024-03 into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2724
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-23 15:00:17 +00:00
Gergely Nagy 50fb2ac47f
[DEADCODE] update
Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
2024-03-23 15:52:24 +01:00
Earl Warren 5f73b2bd5b Merge pull request '[port] gitea#29753: Improve a11y document and dropdown item' (#2745) from algernon/forgejo:gitea/port/29753 into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2745
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-23 14:50:50 +00:00
Gergely Nagy 87cd08539e
Update the TestRenderAlertBlocks integration test
The alert/callout blocks rendering has been changed in the previous few
commits, this adapts the test case that verifies them to the updated
output.

Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
2024-03-23 15:38:43 +01:00
Gergely Nagy 58d4af8fdb
Refactor the GitHub Legacy callout renderer too
Following up on the previous commit, change the GitHub Legacy callout
renderer to render the same as the refactored modern renderer.

Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
2024-03-23 15:38:43 +01:00
wxiaoguang ec2201a3da
Refactor markdown attention render (#29833)
* Remove some deadcode
* Use 2-word name for CSS class names
* Remove "gt-*" rules for sanitizer

The UI doesn't change much.

(cherry picked from commit 66902d89e567ab1ae6dfb828636999c61ff0149e)
2024-03-23 15:38:43 +01:00
wxiaoguang 1d4bf7e211
Improve a11y document and dropdown item (#29753)
Co-authored-by: silverwind <me@silverwind.io>

(cherry picked from commit e01b0014de5b732181ac42c03a77c21219f88c6a)
2024-03-23 14:57:59 +01:00
Earl Warren 012ed7019a Merge pull request '[port] Move all login and account creation page labels to be above inputs (gitea#29432)' (#2742) from algernon/forgejo:gitea/port/29432/move-some-labels-above-inputs into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2742
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-23 13:56:18 +00:00
Gergely Nagy 8af8682f7d
modules/markup/markdown/ast: Drop IsColorPreview
The function isn't used anywhere, it's dead code. Remove it.

Partially cherry picked from commit 46c3f3b9e81e25c3ed08ba6c5bfeb8802b3ba1fd.

Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
2024-03-23 14:47:15 +01:00
Earl Warren a631e5c249 Merge pull request 'Don't use `<br />` in alert block (#29650)' (#2741) from algernon/forgejo:gitea/port/29650-dont-use-br-in-alert-block into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2741
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2024-03-23 13:46:40 +00:00
Earl Warren 1a1e1604d5 Merge pull request 'Replace "configurable clone methods" with Gitea's more flexible implementation' (#2740) from algernon/forgejo:gitea/port/repo-open-with into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2740
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-23 13:44:42 +00:00
Gergely Nagy f99cf911e8
Revert "Remove inputs in dropdowns from taborder"
This reverts commit 7dc453bb39.
2024-03-23 14:35:59 +01:00
Rafael Heard 3acea02eb6
Move all login and account creation page labels to be above inputs (#29432)
There are a few inconsistencies within Gitea and this PR addresses one
of them. This PR updates the sign-in page layout, including the register
and openID tabs, to match the layout of the settings pages
(/user/settings) for more consistency.

This PR updates the following routes:
`/user/login`
`/user/sign_up`
`/user/login/openid`
`/user/forgot_password`
`/user/link_account`
`/user/recover_account`

**Before**
<img width="968" alt="Screenshot 2024-02-05 at 8 27 24 AM"
src="https://github.com/go-gitea/gitea/assets/6152817/fb0cb517-57c0-4eed-be1d-56f36bd1960d">

**After**
<img width="968" alt="Screenshot 2024-02-05 at 8 26 39 AM"
src="https://github.com/go-gitea/gitea/assets/6152817/428d691d-0a42-4a67-a646-05527f2a7b41">

This PR addresses a revert of the original PR due to this
[comment](https://github.com/go-gitea/gitea/pull/28753#issuecomment-1956596817).

---------

Co-authored-by: rafh <rafaelheard@gmail.com>
2024-03-23 12:36:12 +01:00
Gergely Nagy 1386d3faf7
[DEADCODE] update
Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
2024-03-23 12:26:14 +01:00
Yarden Shoham 20446ac6b3
Don't use `<br />` in alert block (#29650)
- Follows https://github.com/go-gitea/gitea/pull/29121

When I implemented alert blocks I was always testing the markdown in
issue comments. I used `<br />` for line breaks and it looked good. I
have since learned that the markdown on README files doesn't allow these
tags. So a comment with

```md
> [!NOTE]
> If you're interested in using our APIs, we have experimental support with [documentation](https://try.gitea.io/api/swagger).
```

looked like this in a comment

![image](https://github.com/go-gitea/gitea/assets/20454870/96b1de01-2c87-4d4f-83dd-98192b83e9d0)
but looked like this in a README

![image](https://github.com/go-gitea/gitea/assets/20454870/474b636d-dd7a-4b7f-ba27-643803c71aa3)

So I changed how we render the alert block by having the alert itself
have a dedicated paragraph, so line breaks happen naturally between
paragraphs.

![image](https://github.com/go-gitea/gitea/assets/20454870/474b636d-dd7a-4b7f-ba27-643803c71aa3)

![image](https://github.com/go-gitea/gitea/assets/20454870/167a8d37-9a44-4479-9340-5dc80347b595)

![image](https://github.com/go-gitea/gitea/assets/20454870/2f99fec0-98ff-4ba8-97fe-b4567041ae79)

![image](https://github.com/go-gitea/gitea/assets/20454870/ffdeae11-fb06-4d00-b497-eae135f0d7ad)

---------

Signed-off-by: Yarden Shoham <git@yardenshoham.com>
Co-authored-by: silverwind <me@silverwind.io>
2024-03-23 12:18:40 +01:00
Gergely Nagy 6c330a85ec
Add tests for the "Open with" repository clone menu
Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
2024-03-23 11:58:54 +01:00
wxiaoguang eb4061baba
Move citiation button to proper place (#29374)
The citiation button shouldn't be controlled by
DisableDownloadSourceArchives (line 134)

So move it out of that "if" block.

Co-authored-by: Giteabot <teabot@gitea.io>
2024-03-23 11:58:54 +01:00
wxiaoguang 44221a3cd7
Customizable "Open with" applications for repository clone (#29320)
Users could customize the "clone" menu with their own application URLs on the admin panel.

Replace #22378
Close #21121
Close #22149
2024-03-23 11:58:54 +01:00
Gergely Nagy 3123725ff3
Revert "[GITEA] Configurable clone methods"
This reverts commit 1d8bca07f3.
2024-03-23 11:58:54 +01:00
Earl Warren 549720bbef
[CI] backport PRs with the label backport/v* 2024-03-23 11:43:55 +01:00
Earl Warren b7ee0b6ad2 Merge pull request '[RELEASE] v1.21.8-0 release notes' (#2722) from earl-warren/forgejo:wip-release-notes-1.21 into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2722
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2024-03-22 13:26:06 +00:00
0ko 404101931a [I18N] Language selector: bg, fil, eo, sl
Resolves https://codeberg.org/forgejo/forgejo/issues/2422
2024-03-22 15:59:56 +05:00
Earl Warren f68100ceea Merge pull request '[CI] workerqueue attempt to fix flacky test' (#2721) from oliverpool/forgejo:queue_flaky_fix into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2721
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-22 09:14:00 +00:00
oliverpool fec49269c6 pull_request_template: test/needed label 2024-03-22 10:11:47 +01:00
oliverpool 8ac4538a00 issue_template: bug/new-report label 2024-03-22 10:11:35 +01:00
Earl Warren 1d530ba022
[RELEASE] v1.21.8-0 release notes 2024-03-22 09:02:57 +01:00
oliverpool 5c248adcf1 [CI] workerqueue attempt to fix flacky test 2024-03-22 08:52:16 +01:00
Earl Warren 0aa77d0b9e Merge pull request 'Add plural support for PR subtitles' (#2614) from 0ko/forgejo:prplu into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2614
Reviewed-by: Otto <otto@codeberg.org>
Reviewed-by: oliverpool <oliverpool@noreply.codeberg.org>
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-03-22 06:14:10 +00:00
0ko 60a9df1908
Add test for pull summary 2024-03-22 07:11:52 +01:00
0ko debeedfe42
Add plural support for PR subtitles 2024-03-22 07:11:24 +01:00
Codeberg Translate 489805c322 [I18N] Translations update from Weblate (#2710)
Translations update from [Weblate](https://translate.codeberg.org) for [Forgejo/forgejo](https://translate.codeberg.org/projects/forgejo/forgejo/).

Current translation status:

![Weblate translation status](https://translate.codeberg.org/widget/forgejo/forgejo/horizontal-auto.svg)

Co-authored-by: Fjuro <Fjuro@users.noreply.translate.codeberg.org>
Co-authored-by: Dirk <Dirk@users.noreply.translate.codeberg.org>
Co-authored-by: Wuzzy <Wuzzy@users.noreply.translate.codeberg.org>
Co-authored-by: be4zad <be4zad@users.noreply.translate.codeberg.org>
Co-authored-by: 0ko <0ko@users.noreply.translate.codeberg.org>
Co-authored-by: Mumulhl <mumulhl@duck.com>
Co-authored-by: ormai <ormai@users.noreply.translate.codeberg.org>
Co-authored-by: yeziruo <yeziruo@users.noreply.translate.codeberg.org>
Co-authored-by: earl-warren <earl-warren@users.noreply.translate.codeberg.org>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2710
Co-authored-by: Codeberg Translate <translate@noreply.codeberg.org>
Co-committed-by: Codeberg Translate <translate@noreply.codeberg.org>
2024-03-22 06:02:26 +00:00
0ko 8e1b6a4090 Add test for add/remove WIP link display 2024-03-21 19:33:02 +05:00
Gergely Nagy 36147f580c
Allow users to hide all "Add more units..." hints
Repositories displaying an "Add more..." tab on the header is a neat way
to let people discover they can enable more units. However, displaying
it all the time for repository owners, even when they deliberately do
not want to enable more units gets noisy very fast.

As such, this patch introduces a new setting which lets people disable
this hint under the appearance settings.

Fixes #2378.

Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
2024-03-21 08:15:51 +01:00
Shiny Nematoda 4a061ca26c simplify template 2024-03-20 12:31:36 +00:00
Shiny Nematoda ed15c92668 fixes for port 2024-03-20 12:31:36 +00:00
Denys Konovalov 847f03b6a6 Unify search boxes (#29530)
Unify all but a few search boxes to use uniform style, uniform
translations and shared templates where possible.
Remove a few duplicated search templates, e. g. code search.

<details><summary>Example after screenshots:</summary>

![grafik](https://github.com/go-gitea/gitea/assets/47871822/e20e7d6b-c6be-4a47-b132-672766f41421)

![grafik](https://github.com/go-gitea/gitea/assets/47871822/d5b11b9c-c12f-4a29-8fb0-24e5aa511d18)

![grafik](https://github.com/go-gitea/gitea/assets/47871822/d86bb444-36c7-426d-9cf1-c634963dffb1)

![grafik](https://github.com/go-gitea/gitea/assets/47871822/a76c0319-0518-484a-a840-563d02b61198)

</details>

Also includes #29700

Co-authored-by: 6543 <6543@obermui.de>

---------

Co-authored-by: 6543 <m.huber@kithara.com>
Co-authored-by: 6543 <6543@obermui.de>
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Giteabot <teabot@gitea.io>
Conflicts:
	routers/web/repo/search.go
	templates/repo/home.tmpl
	templates/repo/search.tmpl
	templates/shared/repo_search.tmpl
2024-03-20 12:31:05 +00:00
0ko 008706a438 Offer to remove WIP: prefix in sidebar
Fixes https://codeberg.org/forgejo/forgejo/issues/2654
2024-03-14 20:59:57 +05:00
190 changed files with 3874 additions and 1744 deletions

View File

@ -222,7 +222,6 @@ package "code.gitea.io/gitea/modules/markup/markdown"
func IsSummary
func IsTaskCheckBoxListItem
func IsIcon
func IsColorPreview
func RenderRawString
package "code.gitea.io/gitea/modules/markup/markdown/math"
@ -272,13 +271,19 @@ package "code.gitea.io/gitea/modules/sync"
package "code.gitea.io/gitea/modules/testlogger"
func (*testLoggerWriterCloser).pushT
func (*testLoggerWriterCloser).Write
func (*testLoggerWriterCloser).Log
func (*testLoggerWriterCloser).recordError
func (*testLoggerWriterCloser).printMsg
func (*testLoggerWriterCloser).popT
func (*testLoggerWriterCloser).Close
func (*testLoggerWriterCloser).Reset
func PrintCurrentTest
func Printf
func NewTestLoggerWriter
func (*TestLogEventWriter).Base
func (*TestLogEventWriter).GetLevel
func (*TestLogEventWriter).GetWriterName
func (*TestLogEventWriter).GetWriterType
func (*TestLogEventWriter).Run
package "code.gitea.io/gitea/modules/timeutil"
func GetExecutableModTime
@ -292,9 +297,6 @@ package "code.gitea.io/gitea/modules/translation"
func (MockLocale).TrN
func (MockLocale).PrettyNumber
package "code.gitea.io/gitea/modules/util"
func UnsafeStringToBytes
package "code.gitea.io/gitea/modules/util/filebuffer"
func CreateFromReader

View File

@ -0,0 +1,85 @@
# Copyright 2024 The Forgejo Authors
# SPDX-License-Identifier: MIT
#
# To modify this workflow:
#
# - change pull_request_target: to pull_request:
# so that it runs from a pull request instead of the default branch
#
# - push it to the wip-ci-backport branch on the forgejo repository
# otherwise it will not have access to the secrets required to push
# the PR
#
# - open a pull request targetting wip-ci-backport that includes a change
# that can be backported without conflict in v1.21 and set the
# `backport/v1.21` label.
#
# - once it works, open a pull request for the sake of keeping track
# of the change even if the PR won't run it because it will use
# whatever is in the default branch instead
#
# - after it is merged, double check it works by setting a
# `backport/v1.21` label on a merged pull request that can be backported
# without conflict.
#
on:
pull_request_target:
types:
- closed
- labeled
jobs:
backporting:
if: >
!startsWith(vars.ROLE, 'forgejo-') && (
github.event.pull_request.merged
&& (
(
github.event.action == 'closed' &&
contains(toJSON(github.event.pull_request.labels), 'backport/v')
)
||
(
github.event.action == 'labeled' &&
contains(github.event.label.name, 'backport/v')
)
)
)
runs-on: docker
container:
image: 'docker.io/node:20-bookworm'
steps:
- name: Fetch labels
id: fetch-labels
shell: bash
run: |
set -x
echo "Labels retrieved below"
export DEBIAN_FRONTEND=noninteractive
apt-get update -qq
apt-get -q install -qq -y jq
filtered_labels=$(echo "$LABELS" | jq -c 'map(select(.name | startswith("backport/v")))')
echo "FILTERED_LABELS=${filtered_labels}" >> $GITHUB_ENV
env:
LABELS: ${{ toJSON(github.event.pull_request.labels) }}
- name: Extract targets
id: extract-targets
shell: bash
run: |
set -x
targets="$(echo $FILTERED_LABELS | jq -c '[.[] | .name | sub("backport/"; "")]')"
echo "targets=$(echo $targets)" >> $GITHUB_OUTPUT
- name: Printing info
shell: bash
run: |
echo "targets: ${{ steps.extract-targets.outputs.targets }}"
echo "target-branch: ${{ fromJSON(steps.extract-targets.outputs.targets)[0] }}"
echo "pull-request: ${{ github.event.pull_request.url }}"
- uses: https://code.forgejo.org/actions/git-backporting@v4.5.2
with:
target-branch: ${{ fromJSON(steps.extract-targets.outputs.targets)[0] }}/forgejo
no-squash: true
auth: ${{ secrets.BACKPORT_TOKEN }}
pull-request: ${{ github.event.pull_request.url }}

View File

@ -9,6 +9,8 @@ on:
- docker/**
- .forgejo/workflows/build-release.yml
- .forgejo/workflows/build-release-integration.yml
branches-ignore:
- renovate/**
pull_request:
paths:
- Makefile

View File

@ -43,7 +43,7 @@ jobs:
- uses: https://code.forgejo.org/actions/setup-go@v4
with:
go-version: "1.21"
go-version: "1.22"
check-latest: true
- name: version from ref

View File

@ -17,7 +17,7 @@ jobs:
- uses: https://code.forgejo.org/actions/checkout@v4
- uses: https://code.forgejo.org/actions/setup-go@v4
with:
go-version: "~1.21"
go-version: "1.22"
check-latest: true
- run: |
apt-get -qq update

View File

@ -64,7 +64,7 @@ jobs:
if: vars.ROLE == 'forgejo-experimental' && secrets.OVH_APP_KEY != ''
uses: https://code.forgejo.org/actions/setup-go@v4
with:
go-version: "1.21"
go-version: "1.22"
check-latest: true
- name: update the _release.experimental DNS record
if: vars.ROLE == 'forgejo-experimental' && secrets.OVH_APP_KEY != ''

View File

@ -0,0 +1,53 @@
name: renovate
on:
push:
branches:
- 'renovate/**' # self-test updates
schedule:
- cron: '*/30 * * * *'
env:
RENOVATE_DRY_RUN: ${{ (github.event_name != 'schedule' && github.ref_name != github.event.repository.default_branch) && 'full' || '' }}
RENOVATE_REPOSITORIES: ${{ github.repository }}
jobs:
renovate:
if: ${{ secrets.RENOVATE_TOKEN != '' }}
runs-on: docker
container:
image: 'ghcr.io/visualon/renovate:37.269.3@sha256:4fb1684ec9e10592b6c4726906d353f88097fbb584748150043949a5aa5ca085'
steps:
- uses: https://code.forgejo.org/actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
with:
path: |
.tmp/cache/renovate/repository
key: repo-cache-${{ github.run_id }}
restore-keys: |
repo-cache-
- run: renovate
env:
GITHUB_COM_TOKEN: ${{ secrets.RENOVATE_GITHUB_COM_TOKEN }}
LOG_LEVEL: debug
RENOVATE_BASE_DIR: ${{ github.workspace }}/.tmp
RENOVATE_ENDPOINT: ${{ github.server_url }}
RENOVATE_PLATFORM: gitea
RENOVATE_REPOSITORY_CACHE: 'enabled'
RENOVATE_TOKEN: ${{ secrets.RENOVATE_TOKEN }}
RENOVATE_GIT_AUTHOR: 'Renovate Bot <forgejo-renovate-action@forgejo.org>'
GIT_AUTHOR_NAME: 'Renovate Bot'
GIT_AUTHOR_EMAIL: 'forgejo-renovate-action@forgejo.org'
GIT_COMMITTER_NAME: 'Renovate Bot'
GIT_COMMITTER_EMAIL: 'forgejo-renovate-action@forgejo.org'
- name: Save renovate repo cache
if: always() && env.RENOVATE_DRY_RUN == 'true'
uses: https://code.forgejo.org/actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
with:
path: |
.tmp/cache/renovate/repository
key: repo-cache-${{ github.run_id }}

View File

@ -17,7 +17,7 @@ jobs:
- uses: https://code.forgejo.org/actions/checkout@v3
- uses: https://code.forgejo.org/actions/setup-go@v4
with:
go-version: "1.21"
go-version: "1.22"
check-latest: true
- run: make deps-backend deps-tools
- run: make --always-make -j$(nproc) lint-backend checks-backend # ensure the "go-licenses" make target runs
@ -52,7 +52,7 @@ jobs:
- uses: https://code.forgejo.org/actions/checkout@v3
- uses: https://code.forgejo.org/actions/setup-go@v4
with:
go-version: "1.21"
go-version: "1.22"
- run: |
git config --add safe.directory '*'
adduser --quiet --comment forgejo --disabled-password forgejo
@ -97,7 +97,7 @@ jobs:
- uses: https://code.forgejo.org/actions/checkout@v3
- uses: https://code.forgejo.org/actions/setup-go@v4
with:
go-version: "1.21"
go-version: "1.22"
- name: install dependencies & git >= 2.42
run: |
export DEBIAN_FRONTEND=noninteractive
@ -144,7 +144,7 @@ jobs:
- uses: https://code.forgejo.org/actions/checkout@v3
- uses: https://code.forgejo.org/actions/setup-go@v4
with:
go-version: "1.21"
go-version: "1.22"
- name: install dependencies & git >= 2.42
run: |
export DEBIAN_FRONTEND=noninteractive
@ -181,7 +181,7 @@ jobs:
- uses: https://code.forgejo.org/actions/checkout@v3
- uses: https://code.forgejo.org/actions/setup-go@v4
with:
go-version: "1.21"
go-version: "1.22"
- name: install dependencies & git >= 2.42
run: |
export DEBIAN_FRONTEND=noninteractive

View File

@ -1,7 +1,7 @@
name: 🦋 Bug Report (web interface / frontend)
description: Something doesn't look quite as it should? Report it here!
title: "[BUG] "
labels: ["bug", "forgejo/ui"]
labels: ["bug/new-report", "forgejo/ui"]
body:
- type: markdown
attributes:

View File

@ -1,7 +1,7 @@
name: 🐛 Bug Report (server / backend)
description: Found something you weren't expecting? Report it here!
title: "[BUG] "
labels: bug
labels: bug/new-report
body:
- type: markdown
attributes:

View File

@ -1,3 +1,12 @@
---
name: "Pull Request Template"
about: "Template for all Pull Requests"
labels:
- test/needed
---
<!--
Before submitting a PR, please read the contributing guidelines:
https://codeberg.org/forgejo/forgejo/src/branch/forgejo/CONTRIBUTING.md

View File

@ -1,32 +0,0 @@
# This file describes the expected reviewers for a PR based on the changed
# files. Unlike what the name of the file suggests they don't own the code, but
# merely have a good understanding of that area of the codebase and therefore
# are usually suited as a reviewer.
# Please mind the alphabetic order of reviewers.
# Files related to the CI of the Forgejo project.
.forgejo/.* @dachary @earl-warren
# Files related to frontend development.
# Javascript and CSS code.
web_src/.* @caesar @crystal @gusted
# HTML templates used by the backend.
templates/.* @caesar @crystal @gusted
# Files related to Go development.
# The modules usually don't require much knowledge about Forgejo and could
# be reviewed by Go developers.
modules/.* @dachary @earl-warren @gusted
# Models has code related to SQL queries, general database knowledge and XORM.
models/.* @dachary @earl-warren @gusted
# The routers directory contains the most amount code that requires a good grasp
# of how Forgejo comes together. It's tedious to write good integration testing
# for code that lives in here.
routers/.* @dachary @earl-warren @gusted

View File

@ -4,6 +4,40 @@ A Forgejo release is published shortly after a Gitea release is published and th
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).
## 1.21.8-0
The [complete list of commits](https://codeberg.org/forgejo/forgejo/commits/branch/v1.21/forgejo) included in the `Forgejo v1.21.8-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 v1.21.7-0..v1.21.8-0
```
This stable release contains bug fixes.
* Recommended Action
We recommend that all Forgejo installations are [upgraded](https://forgejo.org/docs/v1.21/admin/upgrade/) to the latest version.
* [Forgejo Semantic Version](https://forgejo.org/docs/v1.21/user/semver/)
The semantic version was updated to `6.0.8+0-gitea-1.21.8`
* Bug fixes
The most prominent ones are described here, others can be found in the list of commits included in the release as described above.
* [Fix `/api/v1/{owner}/{repo}/issue_templates`](https://codeberg.org/forgejo/forgejo/commit/969d3f44101402afd9dd848e79dd5823d547a00d) which was always failing with a 500 error.
* [Prevent error 500 on /user/settings/security when SignedUser has a linked account from a deactivated authentication source](https://codeberg.org/forgejo/forgejo/commit/d9418651af8c8a3276ebc40a516109c0f33139b0).
* [Fix error 500 when pushing release to an empty repo](https://codeberg.org/forgejo/forgejo/commit/b76f370a3f8993638cad91547491b46631776f59).
* [Fix incorrect rendering csv file when file size is larger than UI.CSV.MaxFileSize](https://codeberg.org/forgejo/forgejo/commit/e151e0467341bd25a2465ca15e81ebc0c8fa3fc4).
* [Fix error 500 when deleting account with incorrect password or unsupported login type](https://codeberg.org/forgejo/forgejo/commit/66061d28286ee3adf69747c284d40121e2e4b280).
* [handle user-defined `name` anchors like `[Link](#link)` linking to `<a name="link"></a>Link`](https://codeberg.org/forgejo/forgejo/commit/03caefbb02854d5c98a26d889e0e30c910651395).
* [Use correct head commit for CODEOWNER](https://codeberg.org/forgejo/forgejo/commit/d1cebb0e884a88941e27e2280e117cc04d2665fe).
* [Fix manual merge button](https://codeberg.org/forgejo/forgejo/commit/c70719c59c410e5378c04926c66461d7b9f72884).
* [Make meilisearch do exact search for issues](https://codeberg.org/forgejo/forgejo/commit/a876ac2c7934fa0f8a66424e178b501e4a341e0f).
* [Fix PR creation via api between branches of same repo with head field namespaced](https://codeberg.org/forgejo/forgejo/commit/120a173e24fd359b0b57f2bd1021168645fab5a8).
## 1.21.7-0
The [complete list of commits](https://codeberg.org/forgejo/forgejo/commits/branch/v1.21/forgejo) included in the `Forgejo v1.21.7-0` release can be reviewed from the command line with:

2
go.mod
View File

@ -1,6 +1,6 @@
module code.gitea.io/gitea
go 1.21
go 1.22
require (
code.gitea.io/actions-proto-go v0.4.0

View File

@ -6,6 +6,7 @@
repo_id: 2 # private
is_private: true
created_unix: 1603228283
content: '1|' # issueId 4
-
id: 2

View File

@ -17,6 +17,195 @@
updated: 1683636626
need_approval: 0
approved_by: 0
event_payload: |
{
"after": "7a3858dc7f059543a8807a8b551304b7e362a7ef",
"before": "0000000000000000000000000000000000000000",
"commits": [
{
"added": [
".forgejo/workflows/test.yml"
],
"author": {
"email": "root@example.com",
"name": "username",
"username": "root"
},
"committer": {
"email": "root@example.com",
"name": "username",
"username": "root"
},
"id": "7a3858dc7f059543a8807a8b551304b7e362a7ef",
"message": "initial commit\n",
"modified": [],
"removed": [],
"timestamp": "2024-01-24T18:59:25Z",
"url": "http://10.201.14.40:3000/root/example-push/commit/7a3858dc7f059543a8807a8b551304b7e362a7ef",
"verification": null
}
],
"compare_url": "http://10.201.14.40:3000/",
"head_commit": {
"added": [
".forgejo/workflows/test.yml"
],
"author": {
"email": "root@example.com",
"name": "username",
"username": "root"
},
"committer": {
"email": "root@example.com",
"name": "username",
"username": "root"
},
"id": "7a3858dc7f059543a8807a8b551304b7e362a7ef",
"message": "initial commit\n",
"modified": [],
"removed": [],
"timestamp": "2024-01-24T18:59:25Z",
"url": "http://10.201.14.40:3000/root/example-push/commit/7a3858dc7f059543a8807a8b551304b7e362a7ef",
"verification": null
},
"pusher": {
"active": false,
"avatar_url": "http://10.201.14.40:3000/avatars/04edfc0ef6c6cf6d6b88fbc69f9f9071",
"created": "2024-01-24T18:57:32Z",
"description": "",
"email": "root@noreply.10.201.14.40",
"followers_count": 0,
"following_count": 0,
"full_name": "",
"id": 1,
"is_admin": false,
"language": "",
"last_login": "0001-01-01T00:00:00Z",
"location": "",
"login": "root",
"login_name": "",
"prohibit_login": false,
"restricted": false,
"starred_repos_count": 0,
"username": "root",
"visibility": "public",
"website": ""
},
"ref": "refs/heads/main",
"repository": {
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_rebase_update": true,
"allow_squash_merge": true,
"archived": false,
"archived_at": "1970-01-01T00:00:00Z",
"avatar_url": "",
"clone_url": "http://10.201.14.40:3000/root/example-push.git",
"created_at": "2024-01-24T18:59:25Z",
"default_allow_maintainer_edit": false,
"default_branch": "main",
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"description": "",
"empty": false,
"fork": false,
"forks_count": 0,
"full_name": "root/example-push",
"has_actions": true,
"has_issues": true,
"has_packages": true,
"has_projects": true,
"has_pull_requests": true,
"has_releases": true,
"has_wiki": true,
"html_url": "http://10.201.14.40:3000/root/example-push",
"id": 2,
"ignore_whitespace_conflicts": false,
"internal": false,
"internal_tracker": {
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true,
"enable_time_tracker": true
},
"language": "",
"languages_url": "http://10.201.14.40:3000/api/v1/repos/root/example-push/languages",
"link": "",
"mirror": false,
"mirror_interval": "",
"mirror_updated": "0001-01-01T00:00:00Z",
"name": "example-push",
"object_format_name": "",
"open_issues_count": 0,
"open_pr_counter": 0,
"original_url": "",
"owner": {
"active": false,
"avatar_url": "http://10.201.14.40:3000/avatars/04edfc0ef6c6cf6d6b88fbc69f9f9071",
"created": "2024-01-24T18:57:32Z",
"description": "",
"email": "root@example.com",
"followers_count": 0,
"following_count": 0,
"full_name": "",
"id": 1,
"is_admin": false,
"language": "",
"last_login": "0001-01-01T00:00:00Z",
"location": "",
"login": "root",
"login_name": "",
"prohibit_login": false,
"restricted": false,
"starred_repos_count": 0,
"username": "root",
"visibility": "public",
"website": ""
},
"parent": null,
"permissions": {
"admin": true,
"pull": true,
"push": true
},
"private": false,
"release_counter": 0,
"repo_transfer": null,
"size": 25,
"ssh_url": "forgejo@10.201.14.40:root/example-push.git",
"stars_count": 0,
"template": false,
"updated_at": "2024-01-24T18:59:25Z",
"url": "http://10.201.14.40:3000/api/v1/repos/root/example-push",
"watchers_count": 1,
"website": ""
},
"sender": {
"active": false,
"avatar_url": "http://10.201.14.40:3000/avatars/04edfc0ef6c6cf6d6b88fbc69f9f9071",
"created": "2024-01-24T18:57:32Z",
"description": "",
"email": "root@noreply.10.201.14.40",
"followers_count": 0,
"following_count": 0,
"full_name": "",
"id": 1,
"is_admin": false,
"language": "",
"last_login": "0001-01-01T00:00:00Z",
"location": "",
"login": "root",
"login_name": "",
"prohibit_login": false,
"restricted": false,
"starred_repos_count": 0,
"username": "root",
"visibility": "public",
"website": ""
},
"total_commits": 0
}
-
id: 792
title: "update actions"
@ -36,3 +225,191 @@
updated: 1683636626
need_approval: 0
approved_by: 0
event_payload: |
{
"after": "7a3858dc7f059543a8807a8b551304b7e362a7ef",
"before": "0000000000000000000000000000000000000000",
"commits": [
{
"added": [
".forgejo/workflows/test.yml"
],
"author": {
"email": "root@example.com",
"name": "username",
"username": "root"
},
"committer": {
"email": "root@example.com",
"name": "username",
"username": "root"
},
"id": "7a3858dc7f059543a8807a8b551304b7e362a7ef",
"message": "initial commit\n",
"modified": [],
"removed": [],
"timestamp": "2024-01-24T18:59:25Z",
"url": "http://10.201.14.40:3000/root/example-push/commit/7a3858dc7f059543a8807a8b551304b7e362a7ef",
"verification": null
}
],
"compare_url": "http://10.201.14.40:3000/",
"head_commit": {
"added": [
".forgejo/workflows/test.yml"
],
"author": {
"email": "root@example.com",
"name": "username",
"username": "root"
},
"committer": {
"email": "root@example.com",
"name": "username",
"username": "root"
},
"id": "7a3858dc7f059543a8807a8b551304b7e362a7ef",
"message": "initial commit\n",
"modified": [],
"removed": [],
"timestamp": "2024-01-24T18:59:25Z",
"url": "http://10.201.14.40:3000/root/example-push/commit/7a3858dc7f059543a8807a8b551304b7e362a7ef",
"verification": null
},
"pusher": {
"active": false,
"avatar_url": "http://10.201.14.40:3000/avatars/04edfc0ef6c6cf6d6b88fbc69f9f9071",
"created": "2024-01-24T18:57:32Z",
"description": "",
"email": "root@noreply.10.201.14.40",
"followers_count": 0,
"following_count": 0,
"full_name": "",
"id": 1,
"is_admin": false,
"language": "",
"last_login": "0001-01-01T00:00:00Z",
"location": "",
"login": "root",
"login_name": "",
"prohibit_login": false,
"restricted": false,
"starred_repos_count": 0,
"username": "root",
"visibility": "public",
"website": ""
},
"ref": "refs/heads/main",
"repository": {
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_rebase_update": true,
"allow_squash_merge": true,
"archived": false,
"archived_at": "1970-01-01T00:00:00Z",
"avatar_url": "",
"clone_url": "http://10.201.14.40:3000/root/example-push.git",
"created_at": "2024-01-24T18:59:25Z",
"default_allow_maintainer_edit": false,
"default_branch": "main",
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"description": "",
"empty": false,
"fork": false,
"forks_count": 0,
"full_name": "root/example-push",
"has_actions": true,
"has_issues": true,
"has_packages": true,
"has_projects": true,
"has_pull_requests": true,
"has_releases": true,
"has_wiki": true,
"html_url": "http://10.201.14.40:3000/root/example-push",
"id": 2,
"ignore_whitespace_conflicts": false,
"internal": false,
"internal_tracker": {
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true,
"enable_time_tracker": true
},
"language": "",
"languages_url": "http://10.201.14.40:3000/api/v1/repos/root/example-push/languages",
"link": "",
"mirror": false,
"mirror_interval": "",
"mirror_updated": "0001-01-01T00:00:00Z",
"name": "example-push",
"object_format_name": "",
"open_issues_count": 0,
"open_pr_counter": 0,
"original_url": "",
"owner": {
"active": false,
"avatar_url": "http://10.201.14.40:3000/avatars/04edfc0ef6c6cf6d6b88fbc69f9f9071",
"created": "2024-01-24T18:57:32Z",
"description": "",
"email": "root@example.com",
"followers_count": 0,
"following_count": 0,
"full_name": "",
"id": 1,
"is_admin": false,
"language": "",
"last_login": "0001-01-01T00:00:00Z",
"location": "",
"login": "root",
"login_name": "",
"prohibit_login": false,
"restricted": false,
"starred_repos_count": 0,
"username": "root",
"visibility": "public",
"website": ""
},
"parent": null,
"permissions": {
"admin": true,
"pull": true,
"push": true
},
"private": false,
"release_counter": 0,
"repo_transfer": null,
"size": 25,
"ssh_url": "forgejo@10.201.14.40:root/example-push.git",
"stars_count": 0,
"template": false,
"updated_at": "2024-01-24T18:59:25Z",
"url": "http://10.201.14.40:3000/api/v1/repos/root/example-push",
"watchers_count": 1,
"website": ""
},
"sender": {
"active": false,
"avatar_url": "http://10.201.14.40:3000/avatars/04edfc0ef6c6cf6d6b88fbc69f9f9071",
"created": "2024-01-24T18:57:32Z",
"description": "",
"email": "root@noreply.10.201.14.40",
"followers_count": 0,
"following_count": 0,
"full_name": "",
"id": 1,
"is_admin": false,
"language": "",
"last_login": "0001-01-01T00:00:00Z",
"location": "",
"login": "root",
"login_name": "",
"prohibit_login": false,
"restricted": false,
"starred_repos_count": 0,
"username": "root",
"visibility": "public",
"website": ""
},
"total_commits": 0
}

View File

@ -1,15 +1,17 @@
-
id: 1
repo_id: 1
url: www.example.com/url1
url: http://www.example.com/url1
http_method: POST
content_type: 1 # json
events: '{"push_only":true,"send_everything":false,"choose_events":false,"events":{"create":false,"push":true,"pull_request":false}}'
is_active: true
is_active: false # disable to prevent sending hook task during unrelated tests
-
id: 2
repo_id: 1
url: www.example.com/url2
url: http://www.example.com/url2
http_method: POST
content_type: 1 # json
events: '{"push_only":false,"send_everything":false,"choose_events":false,"events":{"create":false,"push":true,"pull_request":true}}'
is_active: false
@ -18,14 +20,16 @@
id: 3
owner_id: 3
repo_id: 3
url: www.example.com/url3
url: http://www.example.com/url3
http_method: POST
content_type: 1 # json
events: '{"push_only":false,"send_everything":false,"choose_events":false,"events":{"create":false,"push":true,"pull_request":true}}'
is_active: true
is_active: false
-
id: 4
repo_id: 2
url: www.example.com/url4
url: http://www.example.com/url4
http_method: POST
content_type: 1 # json
events: '{"push_only":true,"branch_filter":"{master,feature*}"}'
is_active: true
is_active: false

View File

@ -50,6 +50,8 @@ var migrations = []*Migration{
NewMigration("create the forgejo_repo_flag table", forgejo_v1_22.CreateRepoFlagTable),
// v5 -> v6
NewMigration("Add wiki_branch to repository", forgejo_v1_22.AddWikiBranchToRepository),
// v6 -> v7
NewMigration("Add enable_repo_unit_hints to the user table", forgejo_v1_22.AddUserRepoUnitHintsSetting),
}
// GetCurrentDBVersion returns the current Forgejo database version.

View File

@ -0,0 +1,17 @@
// Copyright 2024 The Forgejo Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package v1_22 //nolint
import (
"xorm.io/xorm"
)
func AddUserRepoUnitHintsSetting(x *xorm.Engine) error {
type User struct {
ID int64
EnableRepoUnitHints bool `xorm:"NOT NULL DEFAULT true"`
}
return x.Sync(&User{})
}

View File

@ -199,22 +199,17 @@ func (status *CommitStatus) LocaleString(lang translation.Locale) string {
// CalcCommitStatus returns commit status state via some status, the commit statues should order by id desc
func CalcCommitStatus(statuses []*CommitStatus) *CommitStatus {
var lastStatus *CommitStatus
state := api.CommitStatusSuccess
for _, status := range statuses {
if status.State.NoBetterThan(state) {
state = status.State
lastStatus = status
if len(statuses) == 0 {
return nil
}
latestWorstStatus := statuses[0]
for _, status := range statuses[1:] {
if status.State.NoBetterThan(latestWorstStatus.State) {
latestWorstStatus = status
}
}
if lastStatus == nil {
if len(statuses) > 0 {
lastStatus = statuses[0]
} else {
lastStatus = &CommitStatus{}
}
}
return lastStatus
return latestWorstStatus
}
// CommitStatusOptions holds the options for query commit statuses

View File

@ -141,16 +141,20 @@ func Test_CalcCommitStatus(t *testing.T) {
statuses: []*git_model.CommitStatus{
{
State: structs.CommitStatusSuccess,
ID: 1,
},
{
State: structs.CommitStatusSuccess,
ID: 2,
},
{
State: structs.CommitStatusSuccess,
ID: 3,
},
},
expected: &git_model.CommitStatus{
State: structs.CommitStatusSuccess,
ID: 3,
},
},
{
@ -169,6 +173,10 @@ func Test_CalcCommitStatus(t *testing.T) {
State: structs.CommitStatusError,
},
},
{
statuses: []*git_model.CommitStatus{},
expected: nil,
},
}
for _, kase := range kases {

View File

@ -500,7 +500,7 @@ func (issue *Issue) GetLastEventLabelFake() string {
// GetIssueByIndex returns raw issue without loading attributes by index in a repository.
func GetIssueByIndex(ctx context.Context, repoID, index int64) (*Issue, error) {
if index < 1 {
return nil, ErrIssueNotExist{}
return nil, ErrIssueNotExist{0, repoID, index}
}
issue := &Issue{
RepoID: repoID,

View File

@ -160,6 +160,10 @@ func MainTest(m *testing.M) {
exitStatus := m.Run()
if err := testlogger.WriterCloser.Reset(); err != nil && exitStatus == 0 {
fmt.Printf("testlogger.WriterCloser.Reset: %v\n", err)
os.Exit(1)
}
if err := removeAllWithRetry(setting.RepoRootPath); err != nil {
fmt.Fprintf(os.Stderr, "os.RemoveAll: %v\n", err)
}

View File

@ -23,9 +23,9 @@ func AddBranchProtectionCanPushAndEnableWhitelist(x *xorm.Engine) error {
Type int
// Permissions
IsAdmin bool
IsRestricted bool `xorm:"NOT NULL DEFAULT false"`
Visibility int `xorm:"NOT NULL DEFAULT 0"`
IsAdmin bool
// IsRestricted bool `xorm:"NOT NULL DEFAULT false"` glitch: this column was added in v1_12/v121.go
// Visibility int `xorm:"NOT NULL DEFAULT 0"` glitch: this column was added in v1_12/v124.go
}
type Review struct {
@ -51,9 +51,9 @@ func AddBranchProtectionCanPushAndEnableWhitelist(x *xorm.Engine) error {
ReviewTypeReject int = 3
// VisibleTypePublic Visible for everyone
VisibleTypePublic int = 0
// VisibleTypePublic int = 0
// VisibleTypePrivate Visible only for organization's members
VisibleTypePrivate int = 2
// VisibleTypePrivate int = 2
// unit.UnitTypeCode is unit type code
UnitTypeCode int = 1
@ -145,9 +145,9 @@ func AddBranchProtectionCanPushAndEnableWhitelist(x *xorm.Engine) error {
hasOrgVisible := true
// Not SignedUser
if user == nil {
hasOrgVisible = repoOwner.Visibility == VisibleTypePublic
// hasOrgVisible = repoOwner.Visibility == VisibleTypePublic // VisibleTypePublic is the default
} else if !user.IsAdmin {
hasMemberWithUserID, err := sess.
_, err := sess.
Where("uid=?", user.ID).
And("org_id=?", repoOwner.ID).
Table("org_user").
@ -155,9 +155,10 @@ func AddBranchProtectionCanPushAndEnableWhitelist(x *xorm.Engine) error {
if err != nil {
hasOrgVisible = false
}
if (repoOwner.Visibility == VisibleTypePrivate || user.IsRestricted) && !hasMemberWithUserID {
hasOrgVisible = false
}
// VisibleTypePublic is the default so the condition below is always false
// if (repoOwner.Visibility == VisibleTypePrivate) && !hasMemberWithUserID {
// hasOrgVisible = false
// }
}
isCollaborator, err := sess.Get(&Collaboration{RepoID: repo.ID, UserID: user.ID})
@ -195,7 +196,7 @@ func AddBranchProtectionCanPushAndEnableWhitelist(x *xorm.Engine) error {
if user != nil {
userID = user.ID
restricted = user.IsRestricted
restricted = false
}
if !restricted && !repo.IsPrivate {
@ -284,7 +285,7 @@ func AddBranchProtectionCanPushAndEnableWhitelist(x *xorm.Engine) error {
}
// for a public repo on an organization, a non-restricted user has read permission on non-team defined units.
if !found && !repo.IsPrivate && !user.IsRestricted {
if !found && !repo.IsPrivate {
if _, ok := perm.UnitsMode[u.Type]; !ok {
perm.UnitsMode[u.Type] = AccessModeRead
}

View File

@ -94,7 +94,7 @@ func FixMergeBase(x *xorm.Engine) error {
} else {
parentsString, _, err := git.NewCommand(git.DefaultContext, "rev-list", "--parents", "-n", "1").AddDynamicArguments(pr.MergedCommitID).RunStdString(&git.RunOpts{Dir: repoPath})
if err != nil {
log.Error("Unable to get parents for merged PR ID %d, Index %d in %s/%s. Error: %v", pr.ID, pr.Index, baseRepo.OwnerName, baseRepo.Name, err)
log.Warn("Unable to get parents for merged PR ID %d, Index %d in %s/%s. Error: %v", pr.ID, pr.Index, baseRepo.OwnerName, baseRepo.Name, err)
continue
}
parents := strings.Split(strings.TrimSpace(parentsString), " ")

View File

@ -81,7 +81,7 @@ func RefixMergeBase(x *xorm.Engine) error {
parentsString, _, err := git.NewCommand(git.DefaultContext, "rev-list", "--parents", "-n", "1").AddDynamicArguments(pr.MergedCommitID).RunStdString(&git.RunOpts{Dir: repoPath})
if err != nil {
log.Error("Unable to get parents for merged PR ID %d, Index %d in %s/%s. Error: %v", pr.ID, pr.Index, baseRepo.OwnerName, baseRepo.Name, err)
log.Warn("Unable to get parents for merged PR ID %d, Index %d in %s/%s. Error: %v", pr.ID, pr.Index, baseRepo.OwnerName, baseRepo.Name, err)
continue
}
parents := strings.Split(strings.TrimSpace(parentsString), " ")

View File

@ -146,6 +146,7 @@ type User struct {
DiffViewStyle string `xorm:"NOT NULL DEFAULT ''"`
Theme string `xorm:"NOT NULL DEFAULT ''"`
KeepActivityPrivate bool `xorm:"NOT NULL DEFAULT false"`
EnableRepoUnitHints bool `xorm:"NOT NULL DEFAULT true"`
}
func init() {

View File

@ -451,6 +451,13 @@ func (opts ListWebhookOptions) ToConds() builder.Cond {
return cond
}
var _ db.FindOptionsOrder = ListWebhookOptions{}
// ToOrders implements db.FindOptionsOrder, to sort the webhooks by id asc
func (opts ListWebhookOptions) ToOrders() string {
return "webhook.id"
}
// UpdateWebhook updates information of webhook.
func UpdateWebhook(ctx context.Context, w *Webhook) error {
_, err := db.GetEngine(ctx).ID(w.ID).AllCols().Update(w)

View File

@ -124,6 +124,9 @@ func TestGetWebhookByOwnerID(t *testing.T) {
func TestGetActiveWebhooksByRepoID(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
activateWebhook(t, 1)
hooks, err := db.Find[Webhook](db.DefaultContext, ListWebhookOptions{RepoID: 1, IsActive: optional.Some(true)})
assert.NoError(t, err)
if assert.Len(t, hooks, 1) {
@ -144,6 +147,9 @@ func TestGetWebhooksByRepoID(t *testing.T) {
func TestGetActiveWebhooksByOwnerID(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
activateWebhook(t, 3)
hooks, err := db.Find[Webhook](db.DefaultContext, ListWebhookOptions{OwnerID: 3, IsActive: optional.Some(true)})
assert.NoError(t, err)
if assert.Len(t, hooks, 1) {
@ -152,8 +158,18 @@ func TestGetActiveWebhooksByOwnerID(t *testing.T) {
}
}
func activateWebhook(t *testing.T, hookID int64) {
t.Helper()
updated, err := db.GetEngine(db.DefaultContext).ID(hookID).Cols("is_active").Update(Webhook{IsActive: true})
assert.Equal(t, int64(1), updated)
assert.NoError(t, err)
}
func TestGetWebhooksByOwnerID(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
activateWebhook(t, 3)
hooks, err := db.Find[Webhook](db.DefaultContext, ListWebhookOptions{OwnerID: 3})
assert.NoError(t, err)
if assert.Len(t, hooks, 1) {

View File

@ -174,10 +174,3 @@ func NewColorPreview(color []byte) *ColorPreview {
Color: color,
}
}
// IsColorPreview returns true if the given node implements the ColorPreview interface,
// otherwise false.
func IsColorPreview(node ast.Node) bool {
_, ok := node.(*ColorPreview)
return ok
}

View File

@ -68,9 +68,10 @@ func (g *GitHubCalloutTransformer) Transform(node *ast.Document, reader text.Rea
}
// color the blockquote
v.SetAttributeString("class", []byte("gt-py-3 attention attention-"+attentionType))
v.SetAttributeString("class", []byte("attention-header attention-"+attentionType))
// create an emphasis to make it bold
attentionParagraph := ast.NewParagraph()
emphasis := ast.NewEmphasis(2)
emphasis.SetAttributeString("class", []byte("attention-"+attentionType))
firstParagraph.InsertBefore(firstParagraph, firstTextNode, emphasis)
@ -78,14 +79,11 @@ func (g *GitHubCalloutTransformer) Transform(node *ast.Document, reader text.Rea
// capitalize first letter
attentionText := ast.NewString([]byte(strings.ToUpper(string(attentionType[0])) + attentionType[1:]))
// replace the ![TYPE] with icon+Type
// replace the ![TYPE] with a dedicated paragraph of icon+Type
emphasis.AppendChild(emphasis, attentionText)
for i := 0; i < 2; i++ {
lineBreak := ast.NewText()
lineBreak.SetSoftLineBreak(true)
firstParagraph.InsertAfter(firstParagraph, emphasis, lineBreak)
}
firstParagraph.InsertBefore(firstParagraph, emphasis, NewAttention(attentionType))
attentionParagraph.AppendChild(attentionParagraph, NewAttention(attentionType))
attentionParagraph.AppendChild(attentionParagraph, emphasis)
firstParagraph.Parent().InsertBefore(firstParagraph.Parent(), firstParagraph, attentionParagraph)
firstParagraph.RemoveChild(firstParagraph, firstTextNode)
firstParagraph.RemoveChild(firstParagraph, secondTextNode)
firstParagraph.RemoveChild(firstParagraph, thirdTextNode)
@ -106,27 +104,24 @@ func (r *GitHubCalloutHTMLRenderer) RegisterFuncs(reg renderer.NodeRendererFuncR
// renderAttention renders a quote marked with i.e. "> **Note**" or "> **Warning**" with a corresponding svg
func (r *GitHubCalloutHTMLRenderer) renderAttention(w util.BufWriter, source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {
if entering {
_, _ = w.WriteString(`<span class="gt-mr-2 gt-vm attention-`)
n := node.(*Attention)
_, _ = w.WriteString(strings.ToLower(n.AttentionType))
_, _ = w.WriteString(`">`)
var octiconType string
var octiconName string
switch n.AttentionType {
case "note":
octiconType = "info"
octiconName = "info"
case "tip":
octiconType = "light-bulb"
octiconName = "light-bulb"
case "important":
octiconType = "report"
octiconName = "report"
case "warning":
octiconType = "alert"
octiconName = "alert"
case "caution":
octiconType = "stop"
octiconName = "stop"
default:
octiconName = "info"
}
_, _ = w.WriteString(string(svg.RenderHTML("octicon-" + octiconType)))
} else {
_, _ = w.WriteString("</span>\n")
_, _ = w.WriteString(string(svg.RenderHTML("octicon-"+octiconName, 16, "attention-icon attention-"+n.AttentionType)))
}
return ast.WalkContinue, nil
}

View File

@ -49,7 +49,7 @@ func (g *GitHubLegacyCalloutTransformer) Transform(node *ast.Document, reader te
calloutNode.SetAttributeString("class", []byte("attention-"+calloutType))
// color the blockquote
v.SetAttributeString("class", []byte("gt-py-3 attention attention-"+calloutType))
v.SetAttributeString("class", []byte("attention-header attention-"+calloutType))
// Prepend callout icon before the callout node itself
firstParagraph.InsertBefore(firstParagraph, calloutNode, NewAttention(calloutType))

View File

@ -64,10 +64,9 @@ func createDefaultPolicy() *bluemonday.Policy {
policy.AllowAttrs("class").Matching(regexp.MustCompile(`^color-preview$`)).OnElements("span")
// For attention
policy.AllowAttrs("class").Matching(regexp.MustCompile(`^gt-py-3 attention attention-\w+$`)).OnElements("blockquote")
policy.AllowAttrs("class").Matching(regexp.MustCompile(`^attention-header attention-\w+$`)).OnElements("blockquote")
policy.AllowAttrs("class").Matching(regexp.MustCompile(`^attention-\w+$`)).OnElements("strong")
policy.AllowAttrs("class").Matching(regexp.MustCompile(`^gt-mr-2 gt-vm attention-\w+$`)).OnElements("span", "strong")
policy.AllowAttrs("class").Matching(regexp.MustCompile(`^svg octicon-(\w|-)+$`)).OnElements("svg")
policy.AllowAttrs("class").Matching(regexp.MustCompile(`^attention-icon attention-\w+ svg octicon-[\w-]+$`)).OnElements("svg")
policy.AllowAttrs("viewBox", "width", "height", "aria-hidden").OnElements("svg")
policy.AllowAttrs("fill-rule", "d").OnElements("path")
@ -105,18 +104,12 @@ func createDefaultPolicy() *bluemonday.Policy {
// Allow icons
policy.AllowAttrs("class").Matching(regexp.MustCompile(`^icon(\s+[\p{L}\p{N}_-]+)+$`)).OnElements("i")
// Allow unlabelled labels
policy.AllowNoAttrs().OnElements("label")
// Allow classes for emojis
policy.AllowAttrs("class").Matching(regexp.MustCompile(`emoji`)).OnElements("img")
// Allow icons, emojis, chroma syntax and keyword markup on span
policy.AllowAttrs("class").Matching(regexp.MustCompile(`^((icon(\s+[\p{L}\p{N}_-]+)+)|(emoji)|(language-math display)|(language-math inline))$|^([a-z][a-z0-9]{0,2})$|^` + keywordClass + `$`)).OnElements("span")
// Allow 'style' attribute on text elements.
policy.AllowAttrs("style").OnElements("span", "p")
// Allow 'color' and 'background-color' properties for the style attribute on text elements.
policy.AllowStyles("color", "background-color").OnElements("span", "p")
@ -144,7 +137,7 @@ func createDefaultPolicy() *bluemonday.Policy {
generalSafeElements := []string{
"h1", "h2", "h3", "h4", "h5", "h6", "h7", "h8", "br", "b", "i", "strong", "em", "a", "pre", "code", "img", "tt",
"div", "ins", "del", "sup", "sub", "p", "ol", "ul", "table", "thead", "tbody", "tfoot", "blockquote",
"div", "ins", "del", "sup", "sub", "p", "ol", "ul", "table", "thead", "tbody", "tfoot", "blockquote", "label",
"dl", "dt", "dd", "kbd", "q", "samp", "var", "hr", "ruby", "rt", "rp", "li", "tr", "td", "th", "s", "strike", "summary",
"details", "caption", "figure", "figcaption",
"abbr", "bdo", "cite", "dfn", "mark", "small", "span", "time", "video", "wbr",

View File

@ -146,8 +146,6 @@ func (q *WorkerPoolQueue[T]) doStartNewWorker(wp *workerGroup[T]) {
log.Debug("Queue %q starts new worker", q.GetName())
defer log.Debug("Queue %q stops idle worker", q.GetName())
atomic.AddInt32(&q.workerStartedCounter, 1) // Only increase counter, used for debugging
t := time.NewTicker(workerIdleDuration)
defer t.Stop()
@ -336,7 +334,10 @@ func (q *WorkerPoolQueue[T]) doRun() {
// since we are already in a "flush" operation, so the dispatching function shouldn't read the flush chan.
q.doDispatchBatchToWorker(wg, skipFlushChan)
q.doFlush(wg, flush)
case err := <-wg.popItemErr:
case err, errOk := <-wg.popItemErr:
if !errOk {
return
}
if !q.isCtxRunCanceled() {
log.Error("Failed to pop item from queue %q (doRun): %v", q.GetName(), err)
}

View File

@ -40,8 +40,6 @@ type WorkerPoolQueue[T any] struct {
workerMaxNum int
workerActiveNum int
workerNumMu sync.Mutex
workerStartedCounter int32
}
type flushType chan struct{}

View File

@ -4,7 +4,9 @@
package queue
import (
"bytes"
"context"
"runtime"
"strconv"
"sync"
"testing"
@ -14,6 +16,7 @@ import (
"code.gitea.io/gitea/modules/test"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func runWorkerPoolQueue[T any](q *WorkerPoolQueue[T]) func() {
@ -249,23 +252,40 @@ func TestWorkerPoolQueueShutdown(t *testing.T) {
}
func TestWorkerPoolQueueWorkerIdleReset(t *testing.T) {
defer test.MockVariableValue(&workerIdleDuration, 10*time.Millisecond)()
defer test.MockVariableValue(&workerIdleDuration, 1*time.Millisecond)()
chGoroutineIDs := make(chan string)
handler := func(items ...int) (unhandled []int) {
time.Sleep(50 * time.Millisecond)
time.Sleep(10 * workerIdleDuration)
chGoroutineIDs <- goroutineID() // hacky way to identify a worker
return nil
}
q, _ := newWorkerPoolQueueForTest("test-workpoolqueue", setting.QueueSettings{Type: "channel", BatchLength: 1, MaxWorkers: 2, Length: 100}, handler, false)
stop := runWorkerPoolQueue(q)
for i := 0; i < 20; i++ {
const workloadSize = 12
for i := 0; i < workloadSize; i++ {
assert.NoError(t, q.Push(i))
}
time.Sleep(500 * time.Millisecond)
assert.EqualValues(t, 2, q.GetWorkerNumber())
assert.EqualValues(t, 2, q.GetWorkerActiveNumber())
// when the queue never becomes empty, the existing workers should keep working
assert.LessOrEqual(t, q.workerStartedCounter, int32(4)) // counter should be 2, but sometimes it gets bigger
workerIDs := make(map[string]struct{})
for i := 0; i < workloadSize; i++ {
c := <-chGoroutineIDs
workerIDs[c] = struct{}{}
t.Logf("%d workers: overall=%d current=%d", i, len(workerIDs), q.GetWorkerNumber())
// ensure that no more than qs.MaxWorkers workers are created over the whole lifetime of the queue
// (otherwise it would mean that some workers got shut down while the queue was full)
require.LessOrEqual(t, len(workerIDs), q.GetWorkerMaxNumber())
}
close(chGoroutineIDs)
stop()
}
func goroutineID() string {
var buffer [31]byte
_ = runtime.Stack(buffer[:], false)
return string(bytes.Fields(buffer[10:])[0])
}

View File

@ -15,8 +15,45 @@ type PictureStruct struct {
EnableFederatedAvatar *config.Value[bool]
}
type OpenWithEditorApp struct {
DisplayName string
OpenURL string
}
type OpenWithEditorAppsType []OpenWithEditorApp
func (t OpenWithEditorAppsType) ToTextareaString() string {
ret := ""
for _, app := range t {
ret += app.DisplayName + " = " + app.OpenURL + "\n"
}
return ret
}
func DefaultOpenWithEditorApps() OpenWithEditorAppsType {
return OpenWithEditorAppsType{
{
DisplayName: "VS Code",
OpenURL: "vscode://vscode.git/clone?url={url}",
},
{
DisplayName: "VSCodium",
OpenURL: "vscodium://vscode.git/clone?url={url}",
},
{
DisplayName: "Intellij IDEA",
OpenURL: "jetbrains://idea/checkout/git?idea.required.plugins.id=Git4Idea&checkout.repo={url}",
},
}
}
type RepositoryStruct struct {
OpenWithEditorApps *config.Value[OpenWithEditorAppsType]
}
type ConfigStruct struct {
Picture *PictureStruct
Picture *PictureStruct
Repository *RepositoryStruct
}
var (
@ -28,8 +65,11 @@ func initDefaultConfig() {
config.SetCfgSecKeyGetter(&cfgSecKeyGetter{})
defaultConfig = &ConfigStruct{
Picture: &PictureStruct{
DisableGravatar: config.Bool(false, config.CfgSecKey{Sec: "picture", Key: "DISABLE_GRAVATAR"}, "picture.disable_gravatar"),
EnableFederatedAvatar: config.Bool(false, config.CfgSecKey{Sec: "picture", Key: "ENABLE_FEDERATED_AVATAR"}, "picture.enable_federated_avatar"),
DisableGravatar: config.ValueJSON[bool]("picture.disable_gravatar").WithFileConfig(config.CfgSecKey{Sec: "picture", Key: "DISABLE_GRAVATAR"}),
EnableFederatedAvatar: config.ValueJSON[bool]("picture.enable_federated_avatar").WithFileConfig(config.CfgSecKey{Sec: "picture", Key: "ENABLE_FEDERATED_AVATAR"}),
},
Repository: &RepositoryStruct{
OpenWithEditorApps: config.ValueJSON[OpenWithEditorAppsType]("repository.open-with.editor-apps"),
},
}
}
@ -42,6 +82,9 @@ func Config() *ConfigStruct {
type cfgSecKeyGetter struct{}
func (c cfgSecKeyGetter) GetValue(sec, key string) (v string, has bool) {
if key == "" {
return "", false
}
cfgSec, err := CfgProvider.GetSection(sec)
if err != nil {
log.Error("Unable to get config section: %q", sec)

View File

@ -5,8 +5,11 @@ package config
import (
"context"
"strconv"
"sync"
"code.gitea.io/gitea/modules/json"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/util"
)
type CfgSecKey struct {
@ -23,14 +26,14 @@ type Value[T any] struct {
revision int
}
func (value *Value[T]) parse(s string) (v T) {
switch any(v).(type) {
case bool:
b, _ := strconv.ParseBool(s)
return any(b).(T)
default:
panic("unsupported config type, please complete the code")
func (value *Value[T]) parse(key, valStr string) (v T) {
v = value.def
if valStr != "" {
if err := json.Unmarshal(util.UnsafeStringToBytes(valStr), &v); err != nil {
log.Error("Unable to unmarshal json config for key %q, err: %v", key, err)
}
}
return v
}
func (value *Value[T]) Value(ctx context.Context) (v T) {
@ -62,7 +65,7 @@ func (value *Value[T]) Value(ctx context.Context) (v T) {
if valStr == nil {
v = value.def
} else {
v = value.parse(*valStr)
v = value.parse(value.dynKey, *valStr)
}
value.mu.Lock()
@ -76,6 +79,16 @@ func (value *Value[T]) DynKey() string {
return value.dynKey
}
func Bool(def bool, cfgSecKey CfgSecKey, dynKey string) *Value[bool] {
return &Value[bool]{def: def, cfgSecKey: cfgSecKey, dynKey: dynKey}
func (value *Value[T]) WithDefault(def T) *Value[T] {
value.def = def
return value
}
func (value *Value[T]) WithFileConfig(cfgSecKey CfgSecKey) *Value[T] {
value.cfgSecKey = cfgSecKey
return value
}
func ValueJSON[T any](dynKey string) *Value[T] {
return &Value[T]{dynKey: dynKey}
}

View File

@ -20,11 +20,14 @@ var defaultI18nLangNames = []string{
"pt-BR", "Português do Brasil",
"pt-PT", "Português de Portugal",
"pl-PL", "Polski",
"bg-BG", "Български",
"bg", "Български",
"it-IT", "Italiano",
"fi-FI", "Suomi",
"fil", "Filipino",
"eo", "Esperanto",
"tr-TR", "Türkçe",
"cs-CZ", "Čeština",
"sl", "Slovenščina",
"sv-SE", "Svenska",
"ko-KR", "한국어",
"el-GR", "Ελληνικά",

View File

@ -7,7 +7,6 @@ import (
"os/exec"
"path"
"path/filepath"
"slices"
"strings"
"code.gitea.io/gitea/modules/log"
@ -20,8 +19,6 @@ const (
RepoCreatingPublic = "public"
)
var RecognisedRepositoryDownloadOrCloneMethods = []string{"download-zip", "download-targz", "download-bundle", "vscode-clone", "vscodium-clone", "cite"}
// MaxUserCardsPerPage sets maximum amount of watchers and stargazers shown per page
// those pages use 2 or 3 column layout, so the value should be divisible by 2 and 3
var MaxUserCardsPerPage = 36
@ -50,7 +47,6 @@ var (
DisabledRepoUnits []string
DefaultRepoUnits []string
DefaultForkRepoUnits []string
DownloadOrCloneMethods []string
PrefixArchiveFiles bool
DisableMigrations bool
DisableStars bool
@ -173,7 +169,6 @@ var (
DisabledRepoUnits: []string{},
DefaultRepoUnits: []string{},
DefaultForkRepoUnits: []string{},
DownloadOrCloneMethods: []string{"download-zip", "download-targz", "download-bundle", "vscode-clone"},
PrefixArchiveFiles: true,
DisableMigrations: false,
DisableStars: false,
@ -377,12 +372,5 @@ func loadRepositoryFrom(rootCfg ConfigProvider) {
if err := loadRepoArchiveFrom(rootCfg); err != nil {
log.Fatal("loadRepoArchiveFrom: %v", err)
}
for _, method := range Repository.DownloadOrCloneMethods {
if !slices.Contains(RecognisedRepositoryDownloadOrCloneMethods, method) {
log.Error("Unrecognised repository download or clone method: %s", method)
}
}
Repository.EnableFlags = sec.Key("ENABLE_FLAGS").MustBool()
}

View File

@ -67,13 +67,14 @@ func (u User) MarshalJSON() ([]byte, error) {
// UserSettings represents user settings
// swagger:model
type UserSettings struct {
FullName string `json:"full_name"`
Website string `json:"website"`
Description string `json:"description"`
Location string `json:"location"`
Language string `json:"language"`
Theme string `json:"theme"`
DiffViewStyle string `json:"diff_view_style"`
FullName string `json:"full_name"`
Website string `json:"website"`
Description string `json:"description"`
Location string `json:"location"`
Language string `json:"language"`
Theme string `json:"theme"`
DiffViewStyle string `json:"diff_view_style"`
EnableRepoUnitHints bool `json:"enable_repo_unit_hints"`
// Privacy
HideEmail bool `json:"hide_email"`
HideActivity bool `json:"hide_activity"`
@ -82,13 +83,14 @@ type UserSettings struct {
// UserSettingsOptions represents options to change user settings
// swagger:model
type UserSettingsOptions struct {
FullName *string `json:"full_name" binding:"MaxSize(100)"`
Website *string `json:"website" binding:"OmitEmpty;ValidUrl;MaxSize(255)"`
Description *string `json:"description" binding:"MaxSize(255)"`
Location *string `json:"location" binding:"MaxSize(50)"`
Language *string `json:"language"`
Theme *string `json:"theme"`
DiffViewStyle *string `json:"diff_view_style"`
FullName *string `json:"full_name" binding:"MaxSize(100)"`
Website *string `json:"website" binding:"OmitEmpty;ValidUrl;MaxSize(255)"`
Description *string `json:"description" binding:"MaxSize(255)"`
Location *string `json:"location" binding:"MaxSize(50)"`
Language *string `json:"language"`
Theme *string `json:"theme"`
DiffViewStyle *string `json:"diff_view_style"`
EnableRepoUnitHints *bool `json:"enable_repo_unit_hints"`
// Privacy
HideEmail *bool `json:"hide_email"`
HideActivity *bool `json:"hide_activity"`

View File

@ -4,8 +4,11 @@
package testlogger
import (
"bytes"
"context"
"errors"
"fmt"
"io"
"os"
"runtime"
"strings"
@ -27,53 +30,146 @@ var WriterCloser = &testLoggerWriterCloser{}
type testLoggerWriterCloser struct {
sync.RWMutex
t []testing.TB
t []testing.TB
errs []error // stack of error, parallel to the stack of testing.TB
err error // fallback if the stack is empty
}
func (w *testLoggerWriterCloser) pushT(t testing.TB) {
w.Lock()
w.t = append(w.t, t)
w.errs = append(w.errs, nil)
w.Unlock()
}
func (w *testLoggerWriterCloser) Write(p []byte) (int, error) {
func (w *testLoggerWriterCloser) Log(level log.Level, msg string) {
if len(msg) > 0 && msg[len(msg)-1] == '\n' {
msg = msg[:len(msg)-1]
}
w.printMsg(msg)
if level >= log.ERROR {
w.recordError(msg)
}
}
// list of error message which will not fail the test
// ideally this list should be empty, however ensuring that it does not grow
// is already a good first step.
var ignoredErrorMessageSuffixes = []string{
// only seen on mysql tests https://codeberg.org/forgejo/forgejo/pulls/2657#issuecomment-1693055
`table columns using inconsistent collation, they should use "utf8mb4_0900_ai_ci". Please go to admin panel Self Check page`,
// TestAPIDeleteReleaseByTagName
// action notification were a commit cannot be computed (because the commit got deleted)
`Notify() [E] an error occurred while executing the DeleteRelease actions method: gitRepo.GetCommit: object does not exist [id: refs/tags/release-tag, rel_path: ]`,
`Notify() [E] an error occurred while executing the PushCommits actions method: gitRepo.GetCommit: object does not exist [id: refs/tags/release-tag, rel_path: ]`,
// TestAPIRepoTags
`Notify() [E] an error occurred while executing the DeleteRelease actions method: gitRepo.GetCommit: object does not exist [id: refs/tags/gitea/22, rel_path: ]`,
`Notify() [E] an error occurred while executing the PushCommits actions method: gitRepo.GetCommit: object does not exist [id: refs/tags/gitea/22, rel_path: ]`,
// TestAPIDeleteTagByName
`Notify() [E] an error occurred while executing the DeleteRelease actions method: gitRepo.GetCommit: object does not exist [id: refs/tags/delete-tag, rel_path: ]`,
`Notify() [E] an error occurred while executing the PushCommits actions method: gitRepo.GetCommit: object does not exist [id: refs/tags/delete-tag, rel_path: ]`,
// TestAPIGenerateRepo
`Notify() [E] an error occurred while executing the CreateRepository actions method: gitRepo.GetCommit: object does not exist [id: , rel_path: ]`,
// TestAPIPullReview
`PullRequestReview() [E] Unsupported review webhook type`,
// TestAPIPullReviewRequest
`ToAPIPullRequest() [E] unable to resolve PR head ref`,
// TestAPILFSUpload
`Put() [E] Whilst putting LFS OID[ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb]: Failed to copy to tmpPath: ca/97/8112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb Error: content size does not match`,
`[E] Error putting LFS MetaObject [ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb] into content store. Error: content size does not match`,
`UploadHandler() [E] Upload does not match LFS MetaObject [ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb]. Error: content size does not match`,
`Put() [E] Whilst putting LFS OID[2581dd7bbc1fe44726de4b7dd806a087a978b9c5aec0a60481259e34be09b06a]: Failed to copy to tmpPath: 25/81/dd7bbc1fe44726de4b7dd806a087a978b9c5aec0a60481259e34be09b06a Error: content hash does not match OID`,
`[E] Error putting LFS MetaObject [2581dd7bbc1fe44726de4b7dd806a087a978b9c5aec0a60481259e34be09b06a] into content store. Error: content hash does not match OID`,
`UploadHandler() [E] Upload does not match LFS MetaObject [2581dd7bbc1fe44726de4b7dd806a087a978b9c5aec0a60481259e34be09b06a]. Error: content hash does not match OID`,
`UploadHandler() [E] Upload does not match LFS MetaObject [83de2e488b89a0aa1c97496b888120a28b0c1e15463a4adb8405578c540f36d4]. Error: content size does not match`,
// TestAPILFSVerify
`getAuthenticatedMeta() [E] Unable to get LFS OID[fb8f7d8435968c4f82a726a92395be4d16f2f63116caf36c8ad35c60831ab042] Error: LFS Meta object does not exist`,
// TestAPIUpdateOrgAvatar
`UpdateAvatar() [E] UploadAvatar: image.DecodeConfig: image: unknown format`,
// TestGetAttachment
`/data/attachments/a/0/a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a18: no such file or directory`,
// TestBlockUser
`BlockedUsersUnblock() [E] IsOrganization: org3 is an organization not a user`,
`BlockedUsersBlock() [E] IsOrganization: org3 is an organization not a user`,
`Action() [E] Cannot perform this action on an organization "unblock"`,
`Action() [E] Cannot perform this action on an organization "block"`,
// TestBlockActions
`/gitea-repositories/user10/repo7.git Error: no such file or directory`,
// TestE2e/explore.test.e2e
`TrString() [E] Missing translation "more_items"`,
// TestRebuildCargo
`RebuildCargoIndex() [E] RebuildIndex failed: GetRepositoryByOwnerAndName: repository does not exist [id: 0, uid: 0, owner_name: user2, name: _cargo-index]`,
}
func (w *testLoggerWriterCloser) recordError(msg string) {
for _, s := range ignoredErrorMessageSuffixes {
if strings.HasSuffix(msg, s) {
return
}
}
w.Lock()
defer w.Unlock()
err := w.err
if len(w.errs) > 0 {
err = w.errs[len(w.errs)-1]
}
err = errors.Join(err, errors.New(msg))
if len(w.errs) > 0 {
w.errs[len(w.errs)-1] = err
} else {
w.err = err
}
}
func (w *testLoggerWriterCloser) printMsg(msg string) {
// There was a data race problem: the logger system could still try to output logs after the runner is finished.
// So we must ensure that the "t" in stack is still valid.
w.RLock()
defer w.RUnlock()
var t testing.TB
if len(w.t) > 0 {
t = w.t[len(w.t)-1]
}
if len(p) > 0 && p[len(p)-1] == '\n' {
p = p[:len(p)-1]
}
if t == nil {
t := w.t[len(w.t)-1]
t.Log(msg)
} else {
// if there is no running test, the log message should be outputted to console, to avoid losing important information.
// the "???" prefix is used to match the "===" and "+++" in PrintCurrentTest
return fmt.Fprintf(os.Stdout, "??? [TestLogger] %s\n", p)
fmt.Fprintln(os.Stdout, "??? [TestLogger]", msg)
}
t.Log(string(p))
return len(p), nil
}
func (w *testLoggerWriterCloser) popT() {
func (w *testLoggerWriterCloser) popT() error {
w.Lock()
defer w.Unlock()
if len(w.t) > 0 {
w.t = w.t[:len(w.t)-1]
err := w.errs[len(w.errs)-1]
w.errs = w.errs[:len(w.errs)-1]
return err
}
w.Unlock()
return w.err
}
func (w *testLoggerWriterCloser) Close() error {
return nil
}
func (w *testLoggerWriterCloser) Reset() {
func (w *testLoggerWriterCloser) Reset() error {
w.Lock()
if len(w.t) > 0 {
for _, t := range w.t {
@ -84,8 +180,12 @@ func (w *testLoggerWriterCloser) Reset() {
t.Errorf("Unclosed logger writer in test: %s", t.Name())
}
w.t = nil
w.errs = nil
}
err := w.err
w.err = nil
w.Unlock()
return err
}
// PrintCurrentTest prints the current test to os.Stdout
@ -132,7 +232,10 @@ func PrintCurrentTest(t testing.TB, skip ...int) func() {
_, _ = fmt.Fprintf(os.Stdout, "+++ %s had a slow clean-up flush (took %v)\n", t.Name(), flushTook)
}
}
WriterCloser.popT()
if err := WriterCloser.popT(); err != nil {
t.Errorf("testlogger.go:recordError() FATAL ERROR: log.Error has been called: %v", err)
}
}
}
@ -146,19 +249,72 @@ func Printf(format string, args ...any) {
_, _ = fmt.Fprintf(os.Stdout, "\t"+format, args...)
}
// TestLogEventWriter is a logger which will write to the testing log
type TestLogEventWriter struct {
*log.EventWriterBaseImpl
}
// NewTestLoggerWriter creates a TestLogEventWriter as a log.LoggerProvider
func NewTestLoggerWriter(name string, mode log.WriterMode) log.EventWriter {
w := &TestLogEventWriter{}
w.EventWriterBaseImpl = log.NewEventWriterBase(name, "test-log-writer", mode)
w.OutputWriteCloser = WriterCloser
w.base = log.NewEventWriterBase(name, "test-log-writer", mode)
w.writer = WriterCloser
return w
}
// TestLogEventWriter is a logger which will write to the testing log
type TestLogEventWriter struct {
base *log.EventWriterBaseImpl
writer *testLoggerWriterCloser
}
// Base implements log.EventWriter.
func (t *TestLogEventWriter) Base() *log.EventWriterBaseImpl {
return t.base
}
// GetLevel implements log.EventWriter.
func (t *TestLogEventWriter) GetLevel() log.Level {
return t.base.GetLevel()
}
// GetWriterName implements log.EventWriter.
func (t *TestLogEventWriter) GetWriterName() string {
return t.base.GetWriterName()
}
// GetWriterType implements log.EventWriter.
func (t *TestLogEventWriter) GetWriterType() string {
return t.base.GetWriterType()
}
// Run implements log.EventWriter.
func (t *TestLogEventWriter) Run(ctx context.Context) {
for {
select {
case <-ctx.Done():
return
case event, ok := <-t.base.Queue:
if !ok {
return
}
var errorMsg string
switch msg := event.Msg.(type) {
case string:
errorMsg = msg
case []byte:
errorMsg = string(msg)
case io.WriterTo:
var buf bytes.Buffer
if _, err := msg.WriteTo(&buf); err != nil {
panic(err)
}
errorMsg = buf.String()
default:
errorMsg = fmt.Sprint(msg)
}
t.writer.Log(event.Origin.Level, errorMsg)
}
}
}
func init() {
const relFilePath = "modules/testlogger/testlogger.go"
_, filename, _, _ := runtime.Caller(0)

View File

@ -114,16 +114,22 @@ func (l *locale) TrString(trKey string, trArgs ...any) string {
format := trKey
idx, ok := l.store.trKeyToIdxMap[trKey]
found := false
if ok {
if msg, ok := l.idxToMsgMap[idx]; ok {
format = msg // use the found translation
found = true
} else if def, ok := l.store.localeMap[l.store.defaultLang]; ok {
// try to use default locale's translation
if msg, ok := def.idxToMsgMap[idx]; ok {
format = msg
found = true
}
}
}
if !found {
log.Error("Missing translation %q", trKey)
}
msg, err := Format(format, trArgs...)
if err != nil {

View File

@ -53,7 +53,6 @@ func CommonTemplateContextData() ContextData {
"ShowMilestonesDashboardPage": setting.Service.ShowMilestonesDashboardPage,
"ShowFooterVersion": setting.Other.ShowFooterVersion,
"DisableDownloadSourceArchives": setting.Repository.DisableDownloadSourceArchives,
"DownloadOrCloneMethods": setting.Repository.DownloadOrCloneMethods,
"EnableSwagger": setting.API.EnableSwagger,
"EnableOpenIDSignIn": setting.Service.EnableOpenIDSignIn,

View File

@ -1655,6 +1655,7 @@ config.default_keep_email_private = أخفِ عناوين البريد الإل
config.default_allow_create_organization = اسمح بإنشاء المنظمات مبدئيا
config.enable_timetracking = فعّل تتبع الوقت
config.default_enable_timetracking = فعّل تتبع الوقت مبدئيا
config.allow_dots_in_usernames = السماح للمستخدمين بوضع نقاط في أسمائهم. لا يؤثر على الحسابات الموجودة.
config.default_allow_only_contributors_to_track_time = اسمح للمشتركين في المستودع موحدهم بتتبع الوقت
[form]

File diff suppressed because it is too large Load Diff

View File

@ -167,6 +167,9 @@ number_of_contributions_in_the_last_12_months=%s Beiträge in den letzten 12 Mon
contributions_zero=Keine Beiträge
less=Weniger
more=Mehr
contributions_format = {contributions} am {day}. {month} {year}
contributions_one = Beitrag
contributions_few = Beiträge
[editor]
buttons.heading.tooltip=Titel hinzufügen
@ -238,7 +241,7 @@ err_admin_name_pattern_not_allowed=Administrator-Benutzername ist ungültig, der
err_admin_name_is_invalid=Administratornutzername ist ungültig
general_title=Allgemeine Einstellungen
app_name=Instanzname
app_name=Instanztitel
app_name_helper=Du kannst hier den Namen deines Unternehmens eingeben.
repo_path=Repository-Verzeichnis
repo_path_helper=Remote-Git-Repositorys werden in diesem Verzeichnis gespeichert.
@ -269,7 +272,7 @@ register_confirm=E-Mail-Bestätigung benötigt zum Registrieren
mail_notify=E-Mail-Benachrichtigungen aktivieren
server_service_title=Sonstige Server- und Drittserviceeinstellungen
offline_mode=Offline-Modus aktivieren
offline_mode_popup=Drittanbieter-CDNs deaktivieren und alle Ressourcen lokal zur Verfügung stellen.
offline_mode_popup=Drittanbieter-CDNs deaktivieren und alle Ressourcen lokal zustellen.
disable_gravatar=Gravatar deaktivieren
disable_gravatar_popup=Gravatar und Drittanbieter-Avatar-Quellen deaktivieren. Ein Standardavatar wird verwendet, bis der Nutzer einen eigenen Avatar hochlädt.
federated_avatar_lookup=Föderierte Profilbilder einschalten
@ -331,7 +334,7 @@ switch_dashboard_context=Kontext der Übersichtsseite wechseln
my_repos=Repositorys
show_more_repos=Zeige mehr Repositorys …
collaborative_repos=Gemeinschaftliche Repositorys
my_orgs=Meine Organisationen
my_orgs=Organisationen
my_mirrors=Meine Spiegel
view_home=%s ansehen
search_repos=Finde ein Repository …
@ -369,9 +372,13 @@ user_no_results=Keine passenden Benutzer gefunden.
org_no_results=Keine passenden Organisationen gefunden.
code_no_results=Es konnte kein passender Code für deinen Suchbegriff gefunden werden.
code_search_results=Suchergebnisse für „%s“
code_last_indexed_at=Zuletzt indexiert %s
code_last_indexed_at=Zuletzt indiziert %s
relevant_repositories_tooltip=Repositorys, die Forks sind oder die kein Thema, kein Symbol und keine Beschreibung haben, werden ausgeblendet.
relevant_repositories=Es werden nur relevante Repositorys angezeigt, <a href="%s">ungefilterte Ergebnisse anzeigen</a>.
stars_one = %d Favorisierung
stars_few = %d Favorisierungen
forks_one = %d Fork
forks_few = %d Forks
[auth]
create_new_account=Konto anlegen
@ -447,6 +454,8 @@ change_unconfirmed_email_error = Ändern der E-Mail-Adresse fehlgeschlagen: %v
last_admin = Du kannst den letzten Administrator nicht entfernen. Es muss mindestens einen Administrator geben.
change_unconfirmed_email = Wenn Sie bei der Registrierung eine falsche E-Mail-Adresse angegeben haben, können Sie diese unten ändern, woraufhin eine Bestätigung an die neue Adresse geschickt wird.
remember_me.compromised = Der Anmeldetoken ist nicht mehr gültig, dies könnte auf ein kompromittiertes Konto hindeuten. Bitte prüfe dein Konto auf ungewöhnliche Aktivitäten.
tab_signin = Anmelden
tab_signup = Registrieren
[mail]
view_it_on=Auf %s ansehen
@ -666,7 +675,7 @@ applications=Anwendungen
orgs=Organisationen verwalten
repos=Repositorys
delete=Konto löschen
twofa=Zwei-Faktor-Authentifizierung
twofa=Zwei-Faktor-Authentifizierung (TOTP)
account_link=Verknüpfte Benutzerkonten
organization=Organisationen
uid=UID
@ -682,7 +691,7 @@ website=Webseite
location=Standort
update_theme=Theme ändern
update_profile=Profil aktualisieren
update_language=Sprache aktualisieren
update_language=Sprache ändern
update_language_not_found=Sprache „%s“ ist nicht verfügbar.
update_language_success=Sprache wurde aktualisiert.
update_profile_success=Dein Profil wurde aktualisiert.
@ -714,7 +723,7 @@ comment_type_group_issue_ref=Issue-Referenz
saved_successfully=Die Einstellungen wurden erfolgreich gespeichert.
privacy=Datenschutz
keep_activity_private=Aktivität auf der Profilseite ausblenden
keep_activity_private_popup=Macht die Aktivität nur für dich und die Administratoren sichtbar
keep_activity_private_popup=Deine Aktivität wird nur für dich und die Instanzadministratoren sichtbar sein
lookup_avatar_by_mail=Profilbild anhand der E-Mail-Addresse suchen
federated_avatar_lookup=Suche nach föderierten Profilbildern
@ -985,7 +994,7 @@ visibility=Sichtbarkeit
visibility_description=Nur der Besitzer oder Organisationsmitglieder mit entsprechender Berechtigung werden in der Lage sein, es zu sehen.
visibility_helper=In privates Repository umwandeln
visibility_helper_forced=Auf dieser Forgejo-Instanz können nur private Repositorys angelegt werden.
visibility_fork_helper=(Eine Änderung dieses Wertes wirkt sich auf alle Forks aus)
visibility_fork_helper=(Eine Änderung dieses Wertes wirkt sich auf die Sichtbarkeit aller Forks aus)
clone_helper=Benötigst du Hilfe beim Klonen? Öffne die <a target="_blank" rel="noopener noreferrer" href="%s">Hilfe</a>.
fork_repo=Repository forken
fork_from=Fork von
@ -1136,7 +1145,7 @@ migrate.migrating=Migriere von <b>%s</b> ...
migrate.migrating_failed=Migrieren von <b>%s</b> fehlgeschlagen.
migrate.migrating_failed.error=Migration fehlgeschlagen: %s
migrate.migrating_failed_no_addr=Migration fehlgeschlagen.
migrate.github.description=Daten von github.com oder anderen GitHub-Instanzen migrieren.
migrate.github.description=Daten von github.com oder GitHub Enterprise Server migrieren.
migrate.git.description=Ein Repository von einem beliebigen Git Service klonen.
migrate.gitlab.description=Daten von gitlab.com oder anderen GitLab-Instanzen migrieren.
migrate.gitea.description=Daten von gitea.com oder anderen Gitea-/Forgejo-Instanzen migrieren.
@ -1427,7 +1436,7 @@ issues.new_label=Neues Label
issues.new_label_placeholder=Labelname
issues.new_label_desc_placeholder=Beschreibung
issues.create_label=Label erstellen
issues.label_templates.title=Eine vordefinierte Label-Sammung laden
issues.label_templates.title=Eine Label-Sammlung laden
issues.label_templates.info=Es existieren noch keine Labels. Erstelle ein neues Label („Neues Label“) oder verwende die Standard-Label-Sammlung:
issues.label_templates.helper=Wähle eine Label-Sammlung
issues.label_templates.use=Label-Sammlung verwenden
@ -1755,8 +1764,8 @@ pulls.nothing_to_compare=Diese Branches sind identisch. Es muss kein Pull-Reques
pulls.nothing_to_compare_and_allow_empty_pr=Diese Branches sind gleich. Der Pull-Request wird leer sein.
pulls.has_pull_request=`Es existiert bereits ein Pull-Request zwischen diesen beiden Branches: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create=Pull-Request erstellen
pulls.title_desc=möchte %[1]d Commits von <code>%[2]s</code> nach <code id="branch_target">%[3]s</code> mergen
pulls.merged_title_desc=hat %[1]d Commits von <code>%[2]s</code> nach <code>%[3]s</code> %[4]s zusammengeführt
pulls.title_desc_few=möchte %[1]d Commits von <code>%[2]s</code> nach <code id="branch_target">%[3]s</code> mergen
pulls.merged_title_desc_few=hat %[1]d Commits von <code>%[2]s</code> nach <code>%[3]s</code> %[4]s zusammengeführt
pulls.change_target_branch_at=`hat den Zielbranch von <b>%s</b> nach <b>%s</b> %s geändert`
pulls.tab_conversation=Diskussion
pulls.tab_commits=Commits
@ -2099,10 +2108,10 @@ settings.admin_settings=Administratoreinstellungen
settings.admin_enable_health_check=Repository-Health-Checks aktivieren (git fsck)
settings.admin_code_indexer=Code-Indexer
settings.admin_stats_indexer=Code-Statistik-Indexer
settings.admin_indexer_commit_sha=Zuletzt indexierter SHA
settings.admin_indexer_commit_sha=Zuletzt indizierter SHA
settings.admin_indexer_unindexed=Unindiziert
settings.reindex_button=Zur Warteschlange für erneutes Indexieren hinzufügen
settings.reindex_requested=Erneutes Indexieren angefordert
settings.reindex_button=Zur Warteschlange für erneutes Indizieren hinzufügen
settings.reindex_requested=Erneutes Indizieren angefordert
settings.admin_enable_close_issues_via_commit_in_any_branch=Einen Issue mit einem Commit auf einem Nicht-Standard-Branch schließen
settings.danger_zone=Gefahrenzone
settings.new_owner_has_same_repo=Der neue Besitzer hat bereits ein Repository mit dem gleichen Namen. Bitte wähle einen anderen Namen.
@ -2186,7 +2195,7 @@ settings.hooks_desc=Webhooks senden bei bestimmten Forgejo-Events automatisch
settings.webhook_deletion=Webhook löschen
settings.webhook_deletion_desc=Das Entfernen eines Webhooks löscht seine Einstellungen und Zustellungsverlauf. Fortfahren?
settings.webhook_deletion_success=Webhook wurde entfernt.
settings.webhook.test_delivery=Senden testen
settings.webhook.test_delivery=Zustellung testen
settings.webhook.test_delivery_desc=Teste diesen Webhook mit einem Fake-Event.
settings.webhook.test_delivery_desc_disabled=Um diesen Webhook mit einem Fake-Event zu testen, aktiviere ihn.
settings.webhook.request=Anfrage
@ -2196,7 +2205,7 @@ settings.webhook.payload=Inhalt
settings.webhook.body=Inhalt
settings.webhook.replay.description=Diesen Webhook wiederholen.
settings.webhook.replay.description_disabled=Um diesen Webhook wiederzugeben, aktiviere ihn.
settings.webhook.delivery.success=Ein Event wurde zur Sendungs-Warteschlange hinzugefügt. Es kann ein paar Sekunden dauern, bevor es im Verlauf erscheint.
settings.webhook.delivery.success=Ein Event wurde zur Zustellungswarteschlange hinzugefügt. Es kann ein paar Sekunden dauern, bevor es im Zustellungsverlauf erscheint.
settings.githooks_desc=Git-Hooks werden von Git selbst bereitgestellt. Du kannst die Dateien der unterstützten Hooks in der Liste unten bearbeiten, um eigene Operationen einzubinden.
settings.githook_edit_desc=Wenn ein Hook nicht aktiv ist, wird der Standardinhalt benutzt. Lasse den Inhalt leer, um den Hook zu deaktivieren.
settings.githook_name=Hook-Name
@ -2326,7 +2335,7 @@ 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_merge=Merge aktivieren
settings.protect_enable_merge_desc=Jeder mit Schreibzugriff darf die Pull-Requests in diesen Branch mergen.
settings.protect_whitelist_committers=Schütze gewhitelistete Commiter
settings.protect_whitelist_committers=Whitelist-eingeschränkter Push
settings.protect_whitelist_committers_desc=Jeder, der auf der Whitelist steht, darf in diesen Branch pushen (aber kein Force-Push).
settings.protect_whitelist_deploy_keys=Deploy-Key mit Schreibzugriff zum Pushen whitelisten.
settings.protect_whitelist_users=Nutzer, die pushen dürfen:
@ -2337,7 +2346,7 @@ settings.protect_merge_whitelist_committers=Merge-Whitelist aktivieren
settings.protect_merge_whitelist_committers_desc=Erlaube Nutzern oder Teams auf der Whitelist, Pull-Requests in diesen Branch zu mergen.
settings.protect_merge_whitelist_users=Nutzer, die mergen dürfen:
settings.protect_merge_whitelist_teams=Teams, die mergen dürfen:
settings.protect_check_status_contexts=Statusprüfungen aktivieren
settings.protect_check_status_contexts=Statusprüfung aktivieren
settings.protect_status_check_patterns=Statuscheck-Muster:
settings.protect_status_check_patterns_desc=Gib Muster ein, um festzulegen, welche Statusüberprüfungen durchgeführt werden müssen, bevor Branches in einen Branch, der dieser Regel entspricht, gemergt werden können. Jede Zeile gibt ein Muster an. Muster dürfen nicht leer sein.
settings.protect_check_status_contexts_desc=Vor dem Mergen müssen Statusprüfungen bestanden werden. Wähle aus, welche Statusprüfungen erfolgreich durchgeführt werden müssen, bevor Branches in einen anderen gemergt werden können, der dieser Regel entspricht. Wenn aktiviert, müssen Commits zuerst auf einen anderen Branch gepusht werden, dann nach bestandener Statusprüfung gemergt oder direkt auf einen Branch gepusht werden, der dieser Regel entspricht. Wenn kein Kontext ausgewählt ist, muss der letzte Commit unabhängig vom Kontext erfolgreich sein.
@ -2366,7 +2375,7 @@ settings.delete_protected_branch=Schutz deaktivieren
settings.update_protect_branch_success=Branchschutzregel „%s“ wurde aktualisiert.
settings.remove_protected_branch_success=Branchschutzregel „%s“ wurde entfernt.
settings.remove_protected_branch_failed=Entfernen der Branchschutzregel „%s“ fehlgeschlagen.
settings.protected_branch_deletion=Branch-Schutz deaktivieren
settings.protected_branch_deletion=Branch-Schutz löschen
settings.protected_branch_deletion_desc=Wenn du den Branch-Schutz deaktivierst, können alle Nutzer mit Schreibrechten auf den Branch pushen. Fortfahren?
settings.block_rejected_reviews=Merge bei abgelehnten Reviews blockieren
settings.block_rejected_reviews_desc=Mergen ist nicht möglich, wenn Änderungen durch offizielle Reviewer angefragt werden, auch wenn es genügend Genehmigungen gibt.
@ -2390,7 +2399,7 @@ settings.tags.protection.allowed=Erlaubt
settings.tags.protection.allowed.users=Erlaubte Benutzer
settings.tags.protection.allowed.teams=Erlaubte Teams
settings.tags.protection.allowed.noone=Niemand
settings.tags.protection.create=Tag schützen
settings.tags.protection.create=Regel hinzufügen
settings.tags.protection.none=Es gibt keine geschützten Tags.
settings.tags.protection.pattern.description=Du kannst einen einzigen Namen oder ein globales Schema oder einen regulären Ausdruck verwenden, um mehrere Tags zu schützen. Mehr dazu im <a target="_blank" rel="noopener" href="https://forgejo.org/docs/latest/user/protection/#protected-tags">Guide für geschützte Tags (Englisch)</a>.
settings.bot_token=Bot-Token
@ -2449,11 +2458,11 @@ diff.browse_source=Quellcode durchsuchen
diff.parent=Ursprung
diff.commit=Commit
diff.git-notes=Hinweise
diff.data_not_available=Keine Diff-Daten verfügbar
diff.data_not_available=Kein Diff-Inhalt verfügbar
diff.options_button=Diff-Optionen
diff.show_diff_stats=Statistiken anzeigen
diff.download_patch=Patch-Datei herunterladen
diff.download_diff=Vergleichs-Datei herunterladen
diff.download_diff=Diff-Datei herunterladen
diff.show_split_view=Geteilte Ansicht
diff.show_unified_view=Gesamtansicht
diff.whitespace_button=Leerzeichen
@ -2716,7 +2725,7 @@ settings.visibility.limited_shortname=Begrenzt
settings.visibility.private=Privat (nur für Organisationsmitglieder sichtbar)
settings.visibility.private_shortname=Privat
settings.update_settings=Einstellungen speichern
settings.update_settings=Einstellungen aktualisieren
settings.update_setting_success=Organisationseinstellungen wurden aktualisiert.
settings.change_orgname_prompt=Hinweis: Das Ändern des Organisationsnamens wird auch die URL deiner Organisation ändern und den alten Namen freigeben.
settings.change_orgname_redirect_prompt=Der alte Name wird weiterleiten, bis er wieder beansprucht wird.
@ -2801,7 +2810,7 @@ follow_blocked_user = Du kannst dieser Organisation nicht folgen, weil diese Org
[admin]
dashboard=Übersicht
identity_access=Identität & Zugriff
identity_access=Identität u. Zugriff
users=Benutzerkonten
organizations=Organisationen
assets=Code-Assets
@ -2902,7 +2911,7 @@ dashboard.start_schedule_tasks=Terminierte Aufgaben starten
dashboard.sync_branch.started=Synchronisierung der Branches gestartet
dashboard.rebuild_issue_indexer=Issue-Indexer neu bauen
users.user_manage_panel=Benutzerkontenverwaltung
users.user_manage_panel=Benutzerkonten verwalten
users.new_account=Benutzerkonto erstellen
users.name=Benutzername
users.full_name=Vollständiger Name
@ -2932,10 +2941,10 @@ users.is_activated=Account ist aktiviert
users.prohibit_login=Anmelden deaktivieren
users.is_admin=Ist Administrator
users.is_restricted=Ist eingeschränkt
users.allow_git_hook=Darf „Git Hooks“ erstellen
users.allow_git_hook=Kann Git-Hooks erstellen
users.allow_git_hook_tooltip=Git-Hooks werden mit denselben Benutzer-Rechten ausgeführt, mit denen Forgejo läuft, und haben die gleiche Ebene von Host-Zugriff. Dadurch können Benutzer mit diesen speziellen Git-Hook-Rechten auf alle Forgejo-Repositorys sowie auf die von Forgejo verwendete Datenbank zugreifen und diese ändern. Auch das Erhalten von Administratorrechten für Forgejo ist möglich.
users.allow_import_local=Darf lokale Repositorys importieren
users.allow_create_organization=Darf Organisationen erstellen
users.allow_import_local=Kann lokale Repositorys importieren
users.allow_create_organization=Kann Organisationen erstellen
users.update_profile=Benutzerkonto aktualisieren
users.delete_account=Benutzerkonto löschen
users.cannot_delete_self=Du kannst dich nicht selbst löschen
@ -2960,7 +2969,7 @@ users.list_status_filter.is_2fa_enabled=2FA aktiviert
users.list_status_filter.not_2fa_enabled=2FA deaktiviert
users.details=Benutzerdetails
emails.email_manage_panel=Benutzer-E-Mail-Verwaltung
emails.email_manage_panel=Benutzer-E-Mails verwalten
emails.primary=Primär
emails.activated=Aktiviert
emails.filter_sort.email=E-Mail
@ -2972,13 +2981,13 @@ emails.not_updated=Fehler beim Aktualisieren der angeforderten E-Mail-Adresse: %
emails.duplicate_active=Diese E-Mail-Adresse wird bereits von einem Nutzer verwendet.
emails.change_email_header=E-Mail-Eigenschaften aktualisieren
orgs.org_manage_panel=Organisationsverwaltung
orgs.org_manage_panel=Organisationen verwalten
orgs.name=Name
orgs.teams=Teams
orgs.members=Mitglieder
orgs.new_orga=Neue Organisation
repos.repo_manage_panel=Repositoryverwaltung
repos.repo_manage_panel=Repositorys verwalten
repos.unadopted=Nicht übernommene Repositorys
repos.unadopted.no_more=Keine weiteren nicht übernommenen Repositorys gefunden
repos.owner=Besitzer
@ -2991,7 +3000,7 @@ repos.issues=Issues
repos.size=Größe
repos.lfs_size=LFS-Größe
packages.package_manage_panel=Paketverwaltung
packages.package_manage_panel=Pakete verwalten
packages.total_size=Gesamtgröße: %s
packages.unreferenced_size=Nicht referenzierte Größe: %s
packages.cleanup=Veraltete Daten löschen
@ -3038,7 +3047,7 @@ auths.attribute_surname=Nachnamensattribut
auths.attribute_mail=E-Mail-Attribut
auths.attribute_ssh_public_key=Öffentlicher-SSH-Schlüssel-Attribut
auths.attribute_avatar=Avatar-Attribut
auths.attributes_in_bind=Hole Attribute im Bind-Kontext
auths.attributes_in_bind=Hole Attribute im Nind-DN-Kontext
auths.allow_deactivate_all=Erlaube ein leeres Suchergebnis, um alle Benutzer zu deaktivieren
auths.use_paged_search=Seitensuche verwenden
auths.search_page_size=Seitengröße
@ -3048,7 +3057,7 @@ auths.restricted_filter=Eingeschränkte Filter
auths.restricted_filter_helper=Leer lassen, um keine Benutzer als eingeschränkt festzulegen. Verwende einen Asterisk („*“), um alle Benutzer, die nicht dem Admin-Filter entsprechen, als eingeschränkt zu setzen.
auths.verify_group_membership=Gruppenmitgliedschaft in LDAP verifizieren (zum Überspringen leer lassen)
auths.group_search_base=Gruppensuche Basisdomainname
auths.group_attribute_list_users=Gruppenattribut, welches die Benutzerliste enthält
auths.group_attribute_list_users=Gruppenattribut, welches Benutzerliste enthält
auths.user_attribute_in_group=Benutzerattribut in der Gruppenliste
auths.map_group_to_team=Ordne LDAP-Gruppen Organisationsteams zu (zum Überspringen leer lassen)
auths.map_group_to_team_removal=Benutzer aus synchronisierten Teams entfernen, wenn der Benutzer nicht zur entsprechenden LDAP-Gruppe gehört
@ -3066,7 +3075,7 @@ auths.helo_hostname=HELO-Hostname
auths.helo_hostname_helper=Mit HELO gesendeter Hostname. Leer lassen, um den aktuellen Hostnamen zu senden.
auths.disable_helo=HELO deaktivieren
auths.pam_service_name=PAM-Dienstname
auths.pam_email_domain=PAM E-Mail-Domain (optional)
auths.pam_email_domain=PAM-E-Mail-Domain (optional)
auths.oauth2_provider=OAuth2-Anbieter
auths.oauth2_icon_url=Symbol-URL
auths.oauth2_clientID=Client-ID (Schlüssel)
@ -3195,6 +3204,7 @@ config.default_keep_email_private=E-Mail-Adressen standardmäßig verbergen
config.default_allow_create_organization=Erstellen von Organisationen standardmäßig erlauben
config.enable_timetracking=Zeiterfassung aktivieren
config.default_enable_timetracking=Zeiterfassung standardmäßig aktivieren
config.allow_dots_in_usernames = Erlaubt Benutzern die Verwendung von Punkten in ihren Benutzernamen. Hat keine Auswirkungen auf bestehende Konten.
config.default_allow_only_contributors_to_track_time=Nur Mitarbeitern erlauben, die Zeiterfassung zu nutzen
config.no_reply_address=Versteckte E-Mail-Domain
config.default_visibility_organization=Standard-Sichtbarkeit für neue Organisationen
@ -3210,7 +3220,7 @@ config.mailer_enabled=Aktiviert
config.mailer_enable_helo=HELO aktivieren
config.mailer_name=Name
config.mailer_protocol=Protokoll
config.mailer_smtp_addr=SMTP-Adresse
config.mailer_smtp_addr=SMTP-Host
config.mailer_smtp_port=SMTP-Port
config.mailer_user=Benutzer
config.mailer_use_sendmail=Sendmail benutzen
@ -3231,7 +3241,7 @@ config.cache_config=Cache-Konfiguration
config.cache_adapter=Cache-Adapter
config.cache_interval=Cache-Intervall
config.cache_conn=Cache-Anbindung
config.cache_item_ttl=Cache Item-TTL
config.cache_item_ttl=Cache-Item-TTL
config.session_config=Session-Konfiguration
config.session_provider=Session-Provider
@ -3334,6 +3344,7 @@ self_check.database_fix_mssql = Für MSSQL-Benutzer: Du kannst das Problem im Mo
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_collation_mismatch = Erwarte von Datenbank, folgende Collation zu verwenden: %s
auths.tips.gmail_settings = Gmail-Einstellungen:
[action]
@ -3446,9 +3457,9 @@ dependencies=Abhängigkeiten
keywords=Schlüsselwörter
details=Details
details.author=Autor
details.project_site=Projektseite
details.repository_site=Repository-Seite
details.documentation_site=Dokumentationsseite
details.project_site=Projektwebseite
details.repository_site=Repository-Webseite
details.documentation_site=Dokumentationswebseite
details.license=Lizenz
assets=Dateien
versions=Versionen
@ -3578,6 +3589,7 @@ owner.settings.chef.keypair.description=Ein Schlüsselpaar ist notwendig, um mit
rpm.repository = Repository-Info
rpm.repository.multiple_groups = Dieses Paket ist in mehreren Gruppen verfügbar.
rpm.repository.architectures = Architekturen
owner.settings.cargo.rebuild.no_index = Kann nicht erneut erzeugen, es wurde kein Index initialisiert.
[secrets]
secrets=Secrets
@ -3592,7 +3604,7 @@ deletion=Secret entfernen
deletion.description=Das Entfernen eines Secrets kann nicht rückgängig gemacht werden. Fortfahren?
deletion.success=Das Secret wurde entfernt.
deletion.failed=Secret konnte nicht entfernt werden.
management=Secret-Verwaltung
management=Secrets verwalten
[actions]
actions=Actions
@ -3609,7 +3621,7 @@ status.skipped=Übersprungen
status.blocked=Blockiert
runners=Runner
runners.runner_manage_panel=Runner-Verwaltung
runners.runner_manage_panel=Runner verwalten
runners.new=Neuen Runner erstellen
runners.new_notice=Wie man einen Runner startet
runners.status=Status
@ -3666,7 +3678,7 @@ workflow.disabled=Workflow ist deaktiviert.
need_approval_desc=Um Workflows für den Pull-Request eines Forks auszuführen, ist eine Genehmigung erforderlich.
variables=Variablen
variables.management=Variablenverwaltung
variables.management=Variablen verwalten
variables.creation=Variable hinzufügen
variables.none=Es gibt noch keine Variablen.
variables.deletion=Variable entfernen

View File

@ -1753,8 +1753,8 @@ pulls.nothing_to_compare=Αυτοί οι κλάδοι είναι όμοιοι.
pulls.nothing_to_compare_and_allow_empty_pr=Αυτοί οι κλάδοι είναι ίσοι. Αυτό το PR θα είναι κενό.
pulls.has_pull_request=`Υπάρχει ήδη pull request μεταξύ αυτών των κλάδων: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create=Δημιουργία Pull Request
pulls.title_desc=θέλει να συγχωνεύσει %[1]d υποβολές από <code>%[2]s</code> σε <code id="branch_target">%[3]s</code>
pulls.merged_title_desc=συγχώνευσε %[1]d υποβολές από <code>%[2]s</code> σε <code>%[3]s</code> %[4]s
pulls.title_desc_few=θέλει να συγχωνεύσει %[1]d υποβολές από <code>%[2]s</code> σε <code id="branch_target">%[3]s</code>
pulls.merged_title_desc_few=συγχώνευσε %[1]d υποβολές από <code>%[2]s</code> σε <code>%[3]s</code> %[4]s
pulls.change_target_branch_at=`άλλαξε τον κλάδο προορισμού από <b>%s</b> σε <b>%s</b> %s`
pulls.tab_conversation=Συζήτηση
pulls.tab_commits=Υποβολές
@ -3192,6 +3192,7 @@ config.default_keep_email_private=Να αποκρύπτονται οι διευ
config.default_allow_create_organization=Να επιτρέπεται η δημιουργία οργανισμών από προεπιλογή
config.enable_timetracking=Ενεργοποίηση καταγραφής χρόνου
config.default_enable_timetracking=Ενεργοποίηση καταγραφής χρόνου από προεπιλογή
config.allow_dots_in_usernames = Επιτρέπει την χρήση τελείων σε ονόματα χρηστών. Δεν θα επηρεαστούν λογαριασμοί που ήδη υπάρχουν.
config.default_allow_only_contributors_to_track_time=Να επιτρέπεται η καταγραφή χρόνου μόνο από συνεισφέροντες
config.no_reply_address=Κρυφό email domain
config.default_visibility_organization=Προεπιλεγμένη ορατότητα νέων οργανισμών

View File

@ -156,6 +156,27 @@ filter.not_template = Not Template
filter.public = Public
filter.private = Private
[search]
search = Search...
type_tooltip = Search type
fuzzy = Fuzzy
fuzzy_tooltip = Include results that also match the search term closely
match = Match
match_tooltip = Include only results that match the exact search term
repo_kind = Search repos...
user_kind = Search users...
org_kind = Search orgs...
team_kind = Search teams...
code_kind = Search code...
code_search_unavailable = Code search is currently not available. Please contact the site administrator.
package_kind = Search packages...
project_kind = Search projects...
branch_kind = Search branches...
commit_kind = Search commits...
runner_kind = Search runners...
no_results = No matching results found.
keyword_search_unavailable = Searching by keyword is currently not available. Please contact the site administrator.
[aria]
navbar = Navigation Bar
footer = Footer
@ -336,7 +357,6 @@ my_orgs = Organizations
show_more_repos = Show more repositories…
collaborative_repos = Collaborative Repositories
view_home = View %s
search_repos = Find a repository…
filter = Other Filters
filter_by_team_repositories = Filter by team repositories
feed_of = Feed of "%s"
@ -361,20 +381,8 @@ stars_few = %d stars
forks_one = %d fork
forks_few = %d forks
organizations = Organizations
search = Search
go_to = Go to
code = Code
search.type.tooltip = Search type
search.fuzzy = Fuzzy
search.fuzzy.tooltip = Include results that also matches the search term closely
search.match = Match
search.match.tooltip = Include only results that matches the exact search term
code_search_unavailable = Currently code search is not available. Please contact your site administrator.
repo_no_results = No matching repositories found.
user_no_results = No matching users found.
org_no_results = No matching organizations found.
code_no_results = No source code matching your search term found.
code_search_results = Search results for "%s"
code_last_indexed_at = Last indexed %s
relevant_repositories_tooltip = Repositories that are forks or that have no topic, no icon, and no description are hidden.
relevant_repositories = Only relevant repositories are being shown, <a href="%s">show unfiltered results</a>.
@ -703,6 +711,11 @@ continue = Continue
cancel = Cancel
language = Language
ui = Theme
hints = Hints
additional_repo_units_hint_description = Display an "Add more units..." button for repositories that do not have all available units enabled.
additional_repo_units_hint = Encourage enabling additional repository units
update_hints = Update hints
update_hints_success = Hints have been updated.
hidden_comment_types = Hidden comment types
hidden_comment_types_description = Comment types checked here will not be shown inside issue pages. Checking "Label" for example removes all "<user> added/removed <label>" comments.
hidden_comment_types.ref_tooltip = Comments where this issue was referenced from another issue/commit/…
@ -1015,8 +1028,7 @@ fork_branch = Branch to be cloned to the fork
all_branches = All branches
fork_no_valid_owners = This repository can not be forked because there are no valid owners.
use_template = Use this template
clone_in_vsc = Clone in VS Code
clone_in_vscodium = Clone in VSCodium
open_with_editor = Open with %s
download_zip = Download ZIP
download_tar = Download TAR.GZ
download_bundle = Download BUNDLE
@ -1343,9 +1355,8 @@ commits.desc = Browse source code change history.
commits.commits = Commits
commits.no_commits = No commits in common. "%s" and "%s" have entirely different histories.
commits.nothing_to_compare = These branches are equal.
commits.search = Search commits…
commits.search.tooltip = You can prefix keywords with "author:", "committer:", "after:", or "before:", e.g. "revert author:Alice before:2019-01-13".
commits.find = Search
commits.search_branch = This Branch
commits.search_all = All Branches
commits.author = Author
commits.message = Message
@ -1521,7 +1532,6 @@ issues.filter_sort.moststars = Most stars
issues.filter_sort.feweststars = Fewest stars
issues.filter_sort.mostforks = Most forks
issues.filter_sort.fewestforks = Fewest forks
issues.keyword_search_unavailable = Searching by keyword is currently not available. Please contact your site administrator.
issues.action_open = Open
issues.action_close = Close
issues.action_label = Label
@ -1788,8 +1798,10 @@ pulls.nothing_to_compare_have_tag = The selected branch/tag are equal.
pulls.nothing_to_compare_and_allow_empty_pr = These branches are equal. This PR will be empty.
pulls.has_pull_request = `A pull request between these branches already exists: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create = Create pull request
pulls.title_desc = wants to merge %[1]d commits from <code>%[2]s</code> into <code id="branch_target">%[3]s</code>
pulls.merged_title_desc = merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
pulls.title_desc_one = wants to merge %[1]d commit from <code>%[2]s</code> into <code id="branch_target">%[3]s</code>
pulls.title_desc_few = wants to merge %[1]d commits from <code>%[2]s</code> into <code id="branch_target">%[3]s</code>
pulls.merged_title_desc_one = merged %[1]d commit from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
pulls.merged_title_desc_few = merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
pulls.change_target_branch_at = `changed target branch from <b>%s</b> to <b>%s</b> %s`
pulls.tab_conversation = Conversation
pulls.tab_commits = Commits
@ -1806,6 +1818,7 @@ pulls.title_wip_desc = `<a href="#">Start the title with <strong>%s</strong></a>
pulls.cannot_merge_work_in_progress = This pull request is marked as a work in progress.
pulls.still_in_progress = Still in progress?
pulls.add_prefix = Add <strong>%s</strong> prefix
pulls.ready_for_review = Ready for review?
pulls.remove_prefix = Remove <strong>%s</strong> prefix
pulls.data_broken = This pull request is broken due to missing fork information.
pulls.files_conflicted = This pull request has changes conflicting with the target branch.
@ -2062,17 +2075,6 @@ contributors.contribution_type.commits = Commits
contributors.contribution_type.additions = Additions
contributors.contribution_type.deletions = Deletions
search = Search
search.search_repo = Search repository
search.type.tooltip = Search type
search.fuzzy = Fuzzy
search.fuzzy.tooltip = Include results that also matches the search term closely
search.match = Match
search.match.tooltip = Include only results that matches the exact search term
search.results = Search results for "%s" in <a href="%s">%s</a>
search.code_no_results = No source code matching your search term found.
search.code_search_unavailable = Currently code search is not available. Please contact your site administrator.
settings = Settings
settings.desc = Settings is where you can manage the settings for the repository
settings.options = Repository
@ -2241,7 +2243,6 @@ settings.delete_collaborator = Remove
settings.collaborator_deletion = Remove Collaborator
settings.collaborator_deletion_desc = Removing a collaborator will revoke their access to this repository. Continue?
settings.remove_collaborator_success = The collaborator has been removed.
settings.search_user_placeholder = Search user…
settings.org_not_allowed_to_be_collaborator = Organizations cannot be added as a collaborator.
settings.change_team_access_not_allowed = Changing team access for repository has been restricted to organization owner
settings.team_not_in_organization = The team is not in the same organization as the repository
@ -2249,7 +2250,6 @@ settings.teams = Teams
settings.add_team = Add team
settings.add_team_duplicate = Team already has the repository
settings.add_team_success = The team now have access to the repository.
settings.search_team = Search team…
settings.change_team_permission_tip = Team's permission is set on the team setting page and can't be changed per repository
settings.delete_team_tip = This team has access to all repositories and can't be removed
settings.remove_team_success = The team's access to the repository has been removed.
@ -2403,9 +2403,7 @@ settings.protect_whitelist_committers = Whitelist restricted push
settings.protect_whitelist_committers_desc = Only whitelisted users or teams will be allowed to push to this branch (but not force push).
settings.protect_whitelist_deploy_keys = Whitelist deploy keys with write access to push.
settings.protect_whitelist_users = Whitelisted users for pushing:
settings.protect_whitelist_search_users = Search users…
settings.protect_whitelist_teams = Whitelisted teams for pushing:
settings.protect_whitelist_search_teams = Search teams…
settings.protect_merge_whitelist_committers = Enable merge whitelist
settings.protect_merge_whitelist_committers_desc = Allow only whitelisted users or teams to merge pull requests into this branch.
settings.protect_merge_whitelist_users = Whitelisted users for merging:
@ -2650,7 +2648,6 @@ branch.default_deletion_failed = Branch "%s" is the default branch. It cannot be
branch.restore = Restore branch "%s"
branch.download = Download branch "%s"
branch.rename = Rename branch "%s"
branch.search = Search branch
branch.included_desc = This branch is part of the default branch
branch.included = Included
branch.create_new_branch = Create branch from branch:
@ -2797,7 +2794,6 @@ teams.write_permission_desc = This team grants <strong>Write</strong> access: me
teams.admin_permission_desc = This team grants <strong>Admin</strong> access: members can read from, push to and add collaborators to team repositories.
teams.create_repo_permission_desc = Additionally, this team grants <strong>Create repository</strong> permission: members can create new repositories in organization.
teams.repositories = Team repositories
teams.search_repo_placeholder = Search repository…
teams.remove_all_repos_title = Remove all team repositories
teams.remove_all_repos_desc = This will remove all repositories from the team.
teams.add_all_repos_title = Add all repositories
@ -2831,6 +2827,8 @@ authentication = Authentication sources
emails = User emails
config = Configuration
notices = System notices
config_summary = Summary
config_settings = Settings
monitor = Monitoring
first_page = First
last_page = Last
@ -3060,7 +3058,7 @@ auths.attribute_surname = Surname attribute
auths.attribute_mail = Email attribute
auths.attribute_ssh_public_key = Public SSH key attribute
auths.attribute_avatar = Avatar attribute
auths.attributes_in_bind = Fetch attributes in nind DN context
auths.attributes_in_bind = Fetch attributes in bind DN context
auths.allow_deactivate_all = Allow an empty search result to deactivate all users
auths.use_paged_search = Use paged search
auths.search_page_size = Page size
@ -3218,6 +3216,7 @@ config.default_keep_email_private = Hide email addresses by default
config.default_allow_create_organization = Allow creation of organizations by default
config.enable_timetracking = Enable time tracking
config.default_enable_timetracking = Enable time tracking by default
config.allow_dots_in_usernames = Allow users to use dots in their usernames. Doesn't affect existing accounts.
config.default_allow_only_contributors_to_track_time = Let only contributors track time
config.no_reply_address = Hidden email domain
config.default_visibility_organization = Default visibility of new organizations
@ -3269,6 +3268,7 @@ config.picture_config = Picture and avatar configuration
config.picture_service = Picture service
config.disable_gravatar = Disable Gravatar
config.enable_federated_avatar = Enable federated avatars
config.open_with_editor_app_help = The "Open with" editors for the clone menu. If left empty, the default will be used. Expand to see the default.
config.git_config = Git configuration
config.git_disable_diff_highlight = Disable diff syntax highlighting

View File

@ -303,6 +303,7 @@ smtp_from_invalid = La «Sendu retleterojn kiel» adreso malvalidas
[admin]
config.app_data_path = Programdatuja doseiervojo
config.allow_dots_in_usernames = Permesi ĉeeston de punktoj en uzantonomoj. Ne efikas je jamaj kontoj.
[home]
filter = Aliaj filtriloj

View File

@ -1734,8 +1734,8 @@ pulls.nothing_to_compare=Estas ramas son iguales. No hay necesidad para crear un
pulls.nothing_to_compare_and_allow_empty_pr=Estas ramas son iguales. Este PR estará vacío.
pulls.has_pull_request=`Ya existe un pull request entre estas ramas: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create=Crear Pull Request
pulls.title_desc=desea fusionar %[1]d commits de <code>%[2]s</code> en <code id="branch_target">%[3]s</code>
pulls.merged_title_desc=fusionados %[1]d commits de <code>%[2]s</code> en <code>%[3]s</code> %[4]s
pulls.title_desc_few=desea fusionar %[1]d commits de <code>%[2]s</code> en <code id="branch_target">%[3]s</code>
pulls.merged_title_desc_few=fusionados %[1]d commits de <code>%[2]s</code> en <code>%[3]s</code> %[4]s
pulls.change_target_branch_at=`cambió la rama objetivo de <b>%s</b> a <b>%s</b> %s`
pulls.tab_conversation=Conversación
pulls.tab_commits=Commits
@ -3107,6 +3107,7 @@ config.default_keep_email_private=Ocultar direcciones de correo electrónico por
config.default_allow_create_organization=Permitir la creación de organizaciones por defecto
config.enable_timetracking=Habilitar seguimiento de tiempo
config.default_enable_timetracking=Habilitar seguimiento de tiempo por defecto
config.allow_dots_in_usernames = Permite utilizar puntos en los nombres de usuario. No tiene efecto sobre cuentas existentes.
config.default_allow_only_contributors_to_track_time=Deje que solo los colaboradores hagan un seguimiento del tiempo
config.no_reply_address=Dominio de correos electrónicos ocultos
config.default_visibility_organization=Visibilidad por defecto para nuevas organizaciones

View File

@ -24,12 +24,12 @@ licenses=گواهینامه ها
return_to_gitea=بازگشت به Forgejo
username=نام کاربری
email=آدرس ایمیل
email=نشانی رایانامه
password=رمز عبور
access_token=ژتون دسترسی
re_type=تکرارگذواژه
re_type=تأیید گذرواژه
captcha=کپچا
twofa=احراز هویت دوگانه
twofa=احراز هویت دو مرحله‌ای
twofa_scratch=کد احراز هویت
passcode=رمز عبور
@ -39,7 +39,7 @@ organization=سازمان
mirror=قرینه
new_repo=مخزن جدید
new_migrate=انتقال جدید
new_mirror=قرینه ای جدید
new_mirror=آینه جدید
new_fork=انشعاب مخزن جدید
new_org=سازمان جدید
new_project=پروژه جدید
@ -100,6 +100,25 @@ concept_user_organization=سازمان
name=نام
logo = نشان
sign_in_with_provider = ورود با %s
enable_javascript = این وب‌گاه به جاوا اسکریپت نیاز دارد.
webauthn_press_button = لطفاً دکمۀ روی کلید امنیتی را فشار دهید…
webauthn_unsupported_browser = مرورگر شما در حال حاضر از WebAuthn پشتیبانی نمی‌کند.
webauthn_error_unknown = خطایی ناشناخته رخ داد. لطفاً دوباره سعی کنید.
webauthn_error_unable_to_process = کارساز نتوانست درخواست شما را پردازش کند.
webauthn_reload = تازه‌سازی
new_project_column = ستون جدید
retry = سعی دوباره
rerun = اجرای دوباره
rerun_all = اجرای دوباره تمام کارها
rss_feed = خوراک RSS
pin = سنجاق
unpin = حذف سنجاق
locked = قفل شده
copy_hash = رونوشت هش
unknown = نامشخص
copy_type_unsupported = این نوع از فایل نمی‌تواند رونوشت شود.
[aria]
@ -1307,8 +1326,8 @@ pulls.nothing_to_compare=این شاخه‎ها یکی هستند. نیازی ب
pulls.nothing_to_compare_and_allow_empty_pr=این شاخه ها برابر هستند. این PR خالی خواهد بود.
pulls.has_pull_request=`A درخواست pull بین این شاخه ها از قبل وجود دارد: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create=ایجاد تقاضای واکشی
pulls.title_desc=قصد ادغام %[1]d تغییر را از <code>%[2]s</code> به <code id="branch_target">%[3]s</code> دارد
pulls.merged_title_desc=%[1]d کامیت ادغام شده از <code>%[2]s</code> به <code>%[3]s</code> %[4]s
pulls.title_desc_few=قصد ادغام %[1]d تغییر را از <code>%[2]s</code> به <code id="branch_target">%[3]s</code> دارد
pulls.merged_title_desc_few=%[1]d کامیت ادغام شده از <code>%[2]s</code> به <code>%[3]s</code> %[4]s
pulls.change_target_branch_at=`هدف شاخه از <b>%s</b> به <b>%s</b> %s تغییر کرد`
pulls.tab_conversation=گفتگو
pulls.tab_commits=کامیت‌ها

View File

@ -989,8 +989,8 @@ pulls.nothing_to_compare=Nämä haarat vastaavat toisiaan. Ei ole tarvetta luoda
pulls.nothing_to_compare_and_allow_empty_pr=Nämä haarat vastaavat toisiaan. Vetopyyntö tulee olemaan tyhjä.
pulls.has_pull_request=`Vetopyyntö haarojen välillä on jo olemassa: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create=Luo Pull-pyyntö
pulls.title_desc=haluaa yhdistää %[1]d committia lähteestä <code>%[2]s</code> kohteeseen <code id="branch_target">%[3]s</code>
pulls.merged_title_desc=yhdistetty %[1]d committia lähteestä <code>%[2]s</code> kohteeseen <code>%[3]s</code> %[4]s
pulls.title_desc_few=haluaa yhdistää %[1]d committia lähteestä <code>%[2]s</code> kohteeseen <code id="branch_target">%[3]s</code>
pulls.merged_title_desc_few=yhdistetty %[1]d committia lähteestä <code>%[2]s</code> kohteeseen <code>%[3]s</code> %[4]s
pulls.tab_conversation=Keskustelu
pulls.tab_commits=Commitit
pulls.tab_files=Muuttuneet tiedostot

View File

@ -168,6 +168,9 @@ number_of_contributions_in_the_last_12_months=%s contributions au cours des 12 d
contributions_zero=Aucune contribution
less=Moins
more=Plus
contributions_one = contribution
contributions_few = contributions
contributions_format = {contributions} le {day} {month} {year}
[editor]
buttons.heading.tooltip=Ajouter un en-tête
@ -332,7 +335,7 @@ switch_dashboard_context=Basculer le contexte du tableau de bord
my_repos=Dépôts
show_more_repos=Afficher plus de dépôts…
collaborative_repos=Dépôts collaboratifs
my_orgs=Mes organisations
my_orgs=Organisations
my_mirrors=Mes miroirs
view_home=Voir %s
search_repos=Trouver un dépôt …
@ -373,6 +376,10 @@ code_search_results=Résultats de la recherche pour « %s »
code_last_indexed_at=Dernière indexation %s
relevant_repositories_tooltip=Les dépôts qui sont des forks ou qui n'ont aucun sujet, aucune icône et aucune description sont cachés.
relevant_repositories=Seuls les dépôts pertinents sont affichés, <a href="%s">afficher les résultats non filtrés</a>.
stars_few = %d étoiles
forks_one = %d bifurcation
stars_one = %d étoiles
forks_few = %d bifurcations
[auth]
create_new_account=Créer un compte
@ -449,6 +456,8 @@ change_unconfirmed_email = Si vous avez donné un courriel incorrect à l'inscri
change_unconfirmed_email_summary = Modifier l'adresse à laquelle le courriel d'activation est envoyé.
last_admin = Vous ne pouvez pas supprimer le dernier compte administrateur. Il doit exister au moins un compte administrateur.
remember_me.compromised = Le jeton de login n'est plus valide ce qui pourrait indiquer une compromission de compte. Veuillez vérifier d'éventuelles activités inhabituelles.
tab_signup = Enregistrement
tab_signin = Connexion
[mail]
view_it_on=Voir sur %s
@ -673,7 +682,7 @@ twofa=Authentification à deux facteurs
account_link=Comptes liés
organization=Organisations
uid=UID
webauthn=Clés de sécurité
webauthn=Clés de sécurité à deux facteurs
public_profile=Profil public
biography_placeholder=Parlez-nous un peu de vous! (Vous pouvez utiliser Markdown)
@ -762,7 +771,7 @@ openid_deletion_desc=Supprimer cette adresse OpenID de votre compte vous empêch
openid_deletion_success=L'adresse OpenID a été supprimée.
add_new_email=Ajouter une nouvelle adresse e-mail
add_new_openid=Ajouter une nouvelle URI OpenID
add_email=Ajouter une adresse e-mail
add_email=Ajouter une adresse courriel
add_openid=Ajouter une URI OpenID
add_email_confirmation_sent=Un e-mail de confirmation a été envoyé à "%s". Veuillez vérifier votre boîte de réception dans les %s suivants pour confirmer votre adresse e-mail.
add_email_success=La nouvelle adresse e-mail a été ajoutée.
@ -956,8 +965,8 @@ delete_account_desc=Êtes-vous sûr de vouloir supprimer définitivement ce comp
email_notifications.enable=Activer les notifications par e-mail
email_notifications.onmention=N'envoyer un e-mail que si vous êtes mentionné
email_notifications.disable=Désactiver les notifications par e-mail
email_notifications.submit=Définir les préférences d'e-mail
email_notifications.disable=Désactiver les notifications par courriel
email_notifications.submit=Définir les préférences de courriel
email_notifications.andyourown=Et vos propres notifications
visibility=Visibilité de l'utilisateur
@ -989,7 +998,7 @@ visibility=Visibilité
visibility_description=Seuls le propriétaire ou les membres de l'organisation, s'ils ont des droits, seront en mesure de le voir.
visibility_helper=Rendre le dépôt privé
visibility_helper_forced=Ladministrateur requière que les nouveaux dépôts soient privés.
visibility_fork_helper=(Changer ceci affectera toutes les bifurcations.)
visibility_fork_helper=(Changer ceci affectera la visibilité des bifurcations.)
clone_helper=Besoin d'aide pour dupliquer ? Visitez <a target="_blank" rel="noopener noreferrer" href="%s">l'aide</a>.
fork_repo=Bifurquer le dépôt
fork_from=Bifurquer depuis
@ -1142,7 +1151,7 @@ migrate.migrating=Migration de <b>%s</b> ...
migrate.migrating_failed=La migration de <b>%s</b> a échoué.
migrate.migrating_failed.error=Échec de la migration : %s
migrate.migrating_failed_no_addr=Échec de la migration.
migrate.github.description=Migrer les données depuis github.com ou dautres instances de GitHub.
migrate.github.description=Migrer les données depuis github.com ou GitHub Enterprise Server.
migrate.git.description=Migrer uniquement un dépôt depuis nimporte quel service Git.
migrate.gitlab.description=Migrer les données depuis gitlab.com ou dautres instances de GitLab.
migrate.gitea.description=Migrer les données depuis gitea.com ou dautres instances de Gitea/Forgejo.
@ -1154,7 +1163,7 @@ migrate.migrating_git=Migration des données Git
migrate.migrating_topics=Migration des sujets
migrate.migrating_milestones=Migration des jalons
migrate.migrating_labels=Migration des labels
migrate.migrating_releases=Migration des Publications.
migrate.migrating_releases=Migration des publications.
migrate.migrating_issues=Migration des tickets
migrate.migrating_pulls=Migration des demandes d'ajout
migrate.cancel_migrating_title=Annuler la migration
@ -1229,7 +1238,7 @@ ambiguous_character=`%[1]c [U+%04[1]X] peut être confondu avec %[2]c [U+%04[2]X
escape_control_characters=Échapper
unescape_control_characters=Annuler l'échappement
file_copy_permalink=Copier le lien permanent
view_git_blame=Voir Git Blâme
view_git_blame=Voir Git blame
video_not_supported_in_browser=Votre navigateur ne supporte pas la balise « vidéo » HTML5.
audio_not_supported_in_browser=Votre navigateur ne supporte pas la balise « audio » HTML5.
stored_lfs=Stocké avec Git LFS
@ -1305,8 +1314,8 @@ editor.commit_empty_file_text=Le fichier que vous allez réviser est vide. Conti
editor.no_changes_to_show=Il ny a aucune modification à afficher.
editor.fail_to_update_file=Impossible de mettre à jour/créer le fichier "%s".
editor.fail_to_update_file_summary=Message d'erreur :
editor.push_rejected_no_message=La modification a été rejetée par le serveur sans message. Veuillez vérifier les Git Hooks.
editor.push_rejected=La modification a été rejetée par le serveur. Veuillez vérifier vos Git Hooks.
editor.push_rejected_no_message=La modification a été rejetée par le serveur sans message. Veuillez vérifier les Git hooks.
editor.push_rejected=La modification a été rejetée par le serveur. Veuillez vérifier vos Git hooks.
editor.push_rejected_summary=Message de rejet complet :
editor.add_subdir=Ajouter un dossier…
editor.unable_to_upload_files=Impossible d'envoyer le fichier "%s" : %v
@ -1435,8 +1444,8 @@ issues.new_label=Nouveau label
issues.new_label_placeholder=Nom du label
issues.new_label_desc_placeholder=Description
issues.create_label=Créer un label
issues.label_templates.title=Charger un ensemble prédéfini de label
issues.label_templates.info=Il n'existe pas encore de label. Créez-en un avec « Nouveau label » ou utilisez un jeu de label prédéfini :
issues.label_templates.title=Charger un ensemble de label
issues.label_templates.info=Il n'existe pas encore de label. Créez-en un avec « Nouveau label » ou utilisez un jeu de label :
issues.label_templates.helper=Sélectionnez un jeu de label
issues.label_templates.use=Utiliser le jeu de labels
issues.label_templates.fail_to_load_file=Impossible de charger le fichier de modèle de label « %s » : %v
@ -1533,9 +1542,9 @@ issues.no_content=Sans contenu.
issues.close=Fermer le ticket
issues.comment_pull_merged_at=a fusionné la révision %[1]s dans %[2]s %[3]s
issues.comment_manually_pull_merged_at=a fusionné manuellement la révision %[1]s dans %[2]s %[3]s
issues.close_comment_issue=Commenter et Fermer
issues.close_comment_issue=Commenter et fermer
issues.reopen_issue=Rouvrir
issues.reopen_comment_issue=Commenter et Réouvrir
issues.reopen_comment_issue=Commenter et réouvrir
issues.create_comment=Commenter
issues.closed_at=`a fermé ce ticket <a id="%[1]s" href="#%[1]s">%[2]s</a>.`
issues.reopened_at=`a réouvert ce ticket <a id="%[1]s" href="#%[1]s">%[2]s</a>.`
@ -1573,7 +1582,7 @@ issues.label_title=Nom du label
issues.label_description=Description du label
issues.label_color=Couleur du label
issues.label_exclusive=Exclusif
issues.label_archive=Archivé
issues.label_archive=Label archivé
issues.label_archived_filter=Afficher les labels archivés
issues.label_archive_tooltip=Les labels archivés sont par défaut exclus des suggestions lors de la recherche par label.
issues.label_exclusive_desc=Remarque : pour rendre des labels mutuellement exclusifs, préfixez leur nom dune portée au format <code>portée/label</code>.
@ -1622,12 +1631,12 @@ issues.delete=Supprimer
issues.delete.title=Supprimer ce ticket ?
issues.delete.text=Voulez-vous vraiment supprimer ce ticket ? (Cette opération supprimera définitivement tout le contenu. Envisagez plutôt de le fermer si vous avez l'intention de l'archiver)
issues.tracker=Minuteur
issues.start_tracking_short=Démarrer la minuteuse
issues.start_tracking_short=Démarrer le chronomètre
issues.start_tracking=Démarrer le suivi du temps
issues.start_tracking_history=`a commencé son travail %s.`
issues.tracker_auto_close=Le minuteur sera automatiquement arrêté quand le ticket sera fermé.
issues.tracking_already_started=`Vous avez déjà un minuteur en cours sur <a href="%s">un autre ticket</a> !`
issues.stop_tracking=Arrêter la minuteuse
issues.stop_tracking=Arrêter le chronomètre
issues.stop_tracking_history=`a fini de travailler %s.`
issues.cancel_tracking=Abandonner le minuteur
issues.cancel_tracking_history=`a abandonné son minuteur %s.`
@ -1763,8 +1772,8 @@ pulls.nothing_to_compare=Ces branches sont identiques. Il ny a pas besoin de
pulls.nothing_to_compare_and_allow_empty_pr=Ces branches sont égales. Cette demande d'ajout sera vide.
pulls.has_pull_request='Il existe déjà une demande d'ajout entre ces deux branches : <a href="%[1]s">%[2]s#%[3]d</a>'
pulls.create=Créer une demande d'ajout
pulls.title_desc=souhaite fusionner %[1]d révision(s) depuis <code>%[2]s</code> vers <code id="branch_target">%[3]s</code>
pulls.merged_title_desc=a fusionné %[1]d révision(s) à partir de <code>%[2]s</code> vers <code>%[3]s</code> %[4]s
pulls.title_desc_few=souhaite fusionner %[1]d révision(s) depuis <code>%[2]s</code> vers <code id="branch_target">%[3]s</code>
pulls.merged_title_desc_few=a fusionné %[1]d révision(s) à partir de <code>%[2]s</code> vers <code>%[3]s</code> %[4]s
pulls.change_target_branch_at=`a remplacée la branche cible <b><strike>%s</strike></b> par <b>%s</b> %s.`
pulls.tab_conversation=Discussion
pulls.tab_commits=Révisions
@ -1832,9 +1841,9 @@ pulls.unrelated_histories=Échec de la fusion: La tête de fusion et la base ne
pulls.merge_out_of_date=Échec de la fusion: La base a été mise à jour en cours de fusion. Indice : Réessayez.
pulls.head_out_of_date=Échec de la fusion : Len-tête a été mis à jour pendant la fusion. Conseil : réessayez.
pulls.has_merged=Échec : La demande dajout est déjà fusionnée, vous ne pouvez plus la fusionner, ni modifier sa branche cible.
pulls.push_rejected=Échec du push : la soumission a été rejetée. Revoyez les déclencheurs Git pour ce dépôt.
pulls.push_rejected=Échec du push : la soumission a été rejetée. Revoyez les Git hook pour ce dépôt.
pulls.push_rejected_summary=Message de rejet complet
pulls.push_rejected_no_message=Échec du push : la soumission a été rejetée sans raison. Revoyez les déclencheurs Git pour ce dépôt
pulls.push_rejected_no_message=Échec du push : la soumission a été rejetée sans raison. Revoyez les Git hook pour ce dépôt
pulls.open_unmerged_pull_exists=`Vous ne pouvez pas rouvrir ceci car la demande dajout #%d, en attente, a des propriétés identiques.`
pulls.status_checking=Certains contrôles sont en attente
pulls.status_checks_success=Tous les contrôles ont réussi
@ -2047,9 +2056,9 @@ settings.collaboration.read=Lecture
settings.collaboration.owner=Propriétaire
settings.collaboration.undefined=Indéfini
settings.hooks=Webhooks
settings.githooks=Déclencheurs Git
settings.githooks=Git hooks
settings.basic_settings=Paramètres de base
settings.mirror_settings=Réglages Miroir
settings.mirror_settings=Réglages miroir
settings.mirror_settings.docs=Configurez votre dépôt pour synchroniser automatiquement les révisions, étiquettes et branches avec un autre dépôt.
settings.mirror_settings.docs.disabled_pull_mirror.instructions=Configurez votre projet pour soumettre automatiquement les révisions, étiquettes et branches vers un autre dépôt. Les miroirs ont été désactivés par l'administrateur de votre site.
settings.mirror_settings.docs.disabled_push_mirror.instructions=Configurez votre projet pour synchroniser automatiquement les révisions, étiquettes et branches d'un autre dépôt.
@ -2076,16 +2085,16 @@ settings.sync_mirror=Synchroniser maintenant
settings.pull_mirror_sync_in_progress=Récupération des changements depuis le miroir distant %s en cours.
settings.push_mirror_sync_in_progress=Versement des changements vers le miroir distant %s en cours.
settings.site=Site Web
settings.update_settings=Appliquer
settings.update_settings=Appliquer les paramètres
settings.update_mirror_settings=Mettre à jour les paramètres du miroir
settings.branches.switch_default_branch=Changer de branche
settings.branches.update_default_branch=Changer la Branche par Défaut
settings.branches.update_default_branch=Changer la branche par défaut
settings.branches.add_new_rule=Ajouter une nouvelle règle
settings.advanced_settings=Paramètres avancés
settings.wiki_desc=Activer le wiki du dépôt
settings.use_internal_wiki=Utiliser le wiki interne
settings.use_external_wiki=Utiliser un wiki externe
settings.external_wiki_url=URL Wiki externe
settings.external_wiki_url=URL wiki externe
settings.external_wiki_url_error=LURL du wiki externe nest pas une URL valide.
settings.external_wiki_url_desc=Les visiteurs sont redirigés vers lURL du wiki externe lors d'un clic sur longlet wiki.
settings.issues_desc=Activer le suivi de tickets du dépôt
@ -2105,7 +2114,7 @@ settings.tracker_issue_style.regexp_pattern_desc=Le premier groupe capturé sera
settings.tracker_url_format_desc=Utilisez les balises <code>{user}</code>, <code>{repo}</code> et <code>{index}</code> respectivement pour le nom d'utilisateur, le nom du dépôt et le numéro de ticket.
settings.enable_timetracker=Activer le suivi du temps
settings.allow_only_contributors_to_track_time=Restreindre le suivi de temps aux contributeurs
settings.pulls_desc=Activer les demandes de fusion
settings.pulls_desc=Activer les demandes d'ajout
settings.pulls.ignore_whitespace=Ignorer les espaces lors des conflits
settings.pulls.enable_autodetect_manual_merge=Activer la détection automatique de la fusion manuelle (Remarque : dans certains cas particuliers, des erreurs de détection peuvent se produire)
settings.pulls.allow_rebase_update=Activer la mise à jour de demande d'ajout par rebase
@ -2154,7 +2163,7 @@ settings.transfer_started=`Ce dépôt a été marqué pour le transfert et atten
settings.transfer_succeed=Le dépôt a été transféré.
settings.signing_settings=Paramètres de vérification de la signature
settings.trust_model=Niveau de confiance
settings.trust_model.default=Par défaut
settings.trust_model.default=Modèle de confiance par défaut
settings.trust_model.default.desc=Utiliser le niveau de confiance configuré par défaut pour cette instance Forgejo.
settings.trust_model.collaborator=Collaborateur
settings.trust_model.collaborator.long=Collaborateur : ne se fier qu'aux signatures des collaborateurs du dépôt
@ -2165,10 +2174,10 @@ settings.trust_model.committer.desc=La signature d'une révision est dite « fia
settings.trust_model.collaboratorcommitter=Collaborateur et Auteur
settings.trust_model.collaboratorcommitter.long=Collaborateur et Auteur : ne se fier qu'aux signatures des auteurs collaborant au dépôt
settings.trust_model.collaboratorcommitter.desc=La signature d'une révision est dite « fiable » si elle correponds à l'auteur collaborant au dépôt. Elle est « dilettante » si elle ne correponds qu'à l'auteur, et autrement « discordante ». Pour les révisions déléguées à Forgejo, elles seront signées par Forgejo et l'auteur original sera crédité "Co-authored-by:" et "Co-committed-by:" en pied de révision. Pour cela, la clé configurée par défaut de Forgejo doit correspondre à celle d'un utilisateur.
settings.wiki_delete=Supprimer les données du Wiki
settings.wiki_delete=Supprimer les données du wiki
settings.wiki_delete_desc=Supprimer les données du wiki d'un dépôt est permanent. Cette action est irréversible.
settings.wiki_delete_notices_1=- Ceci supprimera de manière permanente et désactivera le wiki de dépôt pour %s.
settings.confirm_wiki_delete=Supprimer les données du Wiki
settings.confirm_wiki_delete=Supprimer les données du wiki
settings.wiki_deletion_success=Les données du wiki de ce dépôt ont été effacées.
settings.delete=Supprimer ce dépôt
settings.delete_desc=Supprimer un dépôt est permanent et irréversible.
@ -2650,7 +2659,7 @@ vendored = Vendored
issues.blocked_by_user = Vous ne pouvez pas créer un ticket sur ce dépôt car vous avez été bloqué par son propriétaire.
pulls.blocked_by_user = Vous ne pouvez pas créer une pull request sur ce dépôt car vous êtes bloqué par son propriétaire.
wiki.cancel = Annuler
settings.wiki_globally_editable = Permettre l'édition du Wiki a tout le monde
settings.wiki_globally_editable = Permettre l'édition du wiki a tout le monde
settings.ignore_stale_approvals = Ignorer les approbations obsolètes
settings.ignore_stale_approvals_desc = Ne pas prendre en compte les approbations faites sur d'anciens commits (revues obsolètes) dans le total des approbations pour cette PR. Sans effet si les revues obsolètes ont déjà été annulées.
settings.archive.mirrors_unavailable = Les mirroirs ne sont pas disponibles si le dépôt a été archivé.
@ -2659,7 +2668,7 @@ settings.new_owner_blocked_doer = Le nouveau propriétaire vous a bloqué.
settings.enter_repo_name = Confirmez en entrant le propriétaire et le nom du dépôt exactement comme affiché :
settings.wiki_rename_branch_main = Normalise le nom de la branche du Wiki
settings.wiki_rename_branch_main_desc = Renommer la branche utilisée en interne par le Wiki en "%s". Cette modification est permanente et ne peut être annulée.
settings.wiki_rename_branch_main_notices_2 = Cela changera le nom de la branche interne du Wiki associé au dépôt %s de façon permanente. Les checkouts existant devront être mis à jour.
settings.wiki_rename_branch_main_notices_2 = Cela changera le nom de la branche interne associée au dépôt du wiki %s de façon permanente. Les checkouts existant devront être mis à jour.
settings.wiki_branch_rename_success = Le nom de branche du wiki associé au dépôt a été normalisé avec succès.
settings.confirm_wiki_branch_rename = Renommer la branche du wiki
settings.add_collaborator_blocked_them = Il n'est pas possible d'ajouter ce collaborateur parce-qu'il a bloqué le propriétaire du dépôt.
@ -2668,7 +2677,7 @@ settings.add_collaborator_blocked_our = Il n'est pas possible d'ajouter ce colla
settings.wiki_rename_branch_main_notices_1 = Cette operation <strong>NE PEUT PAS</strong> être annulée.
settings.wiki_branch_rename_failure = Le nom de la branche associée au wiki du dépôt n'a pu être normalisé.
pulls.reopen_failed.head_branch = La pull request ne peut pas être re-ouverte car la branch d'origine n'existe plus.
settings.units.units = Fonctionalités des dépôt
settings.units.units = Fonctionnalités des dépôt
pulls.fast_forward_only_merge_pull_request = Fast-forward uniquement
pulls.reopen_failed.base_branch = La pull request ne peut pas être re-ouverte car la branche de destination n'existe plus.
settings.units.overview = Vue générale
@ -2685,7 +2694,7 @@ activity.navbar.recent_commits = Commits récents
file_follow = Suivre le lien symbolique
error.broken_git_hook = Les hooks Git de ce dépôt semblent cassés. Référez vous à la <a target="_blank" rel="noreferrer" href="%s">documentation</a> pour les réparer, puis poussez des commits pour mettre à jour le statut.
settings.confirmation_string = Chaine de confirmation
pulls.agit_explanation = Créé par le workflow AGit. AGit permet aux contributeurs de proposer des modifications en utilisant "git push" sans créer une fourche ou une nouvelle branche.
pulls.agit_explanation = Créé par le workflow AGit. AGit permet aux contributeurs de proposer des modifications en utilisant "git push" sans créer une bifurcation ou une nouvelle branche.
[graphs]
component_loading=Chargement de %s…
@ -3220,6 +3229,7 @@ config.default_keep_email_private=Masquer les adresses courriel par défaut
config.default_allow_create_organization=Autoriser la création d'organisations par défaut
config.enable_timetracking=Activer le suivi du temps
config.default_enable_timetracking=Activer le suivi de temps par défaut
config.allow_dots_in_usernames = Les points sont autorisés dans les noms d'utilisateurs. Sans effet sur les comptes existants.
config.default_allow_only_contributors_to_track_time=Restreindre le suivi de temps aux contributeurs
config.no_reply_address=Domaine pour les courriels cachés
config.default_visibility_organization=Visibilité par défaut des nouvelles organisations

View File

@ -933,8 +933,8 @@ pulls.filter_branch=Ágra szűrés
pulls.no_results=Nincs találat.
pulls.nothing_to_compare=Ezek az ágak egyenlőek. Nincs szükség egyesítési kérésre.
pulls.create=Egyesítési kérés létrehozása
pulls.title_desc=egyesíteni szeretné %[1]d változás(oka)t a(z) <code>%[2]s</code>-ból <code id="branch_target">%[3]s</code>-ba
pulls.merged_title_desc=egyesítve %[1]d változás(ok) a <code>%[2]s</code>-ból <code>%[3]s</code>-ba %[4]s
pulls.title_desc_few=egyesíteni szeretné %[1]d változás(oka)t a(z) <code>%[2]s</code>-ból <code id="branch_target">%[3]s</code>-ba
pulls.merged_title_desc_few=egyesítve %[1]d változás(ok) a <code>%[2]s</code>-ból <code>%[3]s</code>-ba %[4]s
pulls.tab_conversation=Beszélgetés
pulls.tab_commits=Commit-ok
pulls.tab_files=Módosított fájlok

View File

@ -752,8 +752,8 @@ pulls.compare_changes=Permintaan Tarik Baru
pulls.filter_branch=Penyaringan cabang
pulls.no_results=Hasil tidak ditemukan.
pulls.create=Buat Permintaan Tarik
pulls.title_desc=ingin menggabungkan komit %[1]d dari <code>%[2]s</code> menuju <code id="branch_target">%[3]s</code>
pulls.merged_title_desc=commit %[1]d telah digabungkan dari <code>%[2]s</code> menjadi <code>%[3]s</code> %[4]s
pulls.title_desc_few=ingin menggabungkan komit %[1]d dari <code>%[2]s</code> menuju <code id="branch_target">%[3]s</code>
pulls.merged_title_desc_few=commit %[1]d telah digabungkan dari <code>%[2]s</code> menjadi <code>%[3]s</code> %[4]s
pulls.tab_conversation=Percakapan
pulls.tab_commits=Melakukan
pulls.reopen_to_merge=Tolong buka kembali permintaan tarik ini untuk melaksanakan penggabungan.

View File

@ -889,7 +889,7 @@ pulls.new=Ný Sameiningarbeiðni
pulls.view=Skoða Sameiningarbeiðni
pulls.compare_changes=Ný Sameiningarbeiðni
pulls.create=Skapa Sameiningarbeiðni
pulls.title_desc=vill sameina %[1]d framlög frá <code>%[2]s</code> í <code id="branch_target">%[3]s</code>
pulls.title_desc_few=vill sameina %[1]d framlög frá <code>%[2]s</code> í <code id="branch_target">%[3]s</code>
pulls.tab_conversation=Umræða
pulls.tab_commits=Framlög
pulls.tab_files=Skráum Breytt

File diff suppressed because it is too large Load Diff

View File

@ -1760,8 +1760,8 @@ pulls.nothing_to_compare=同じブランチ同士のため、 プルリクエス
pulls.nothing_to_compare_and_allow_empty_pr=これらのブランチは内容が同じです。 空のプルリクエストになります。
pulls.has_pull_request=`同じブランチのプルリクエストはすでに存在します: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create=プルリクエストを作成
pulls.title_desc=が <code>%[2]s</code> から <code id="branch_target">%[3]s</code> への %[1]d コミットのマージを希望しています
pulls.merged_title_desc=が %[1]d 個のコミットを <code>%[2]s</code> から <code>%[3]s</code> へマージ %[4]s
pulls.title_desc_few=が <code>%[2]s</code> から <code id="branch_target">%[3]s</code> への %[1]d コミットのマージを希望しています
pulls.merged_title_desc_few=が %[1]d 個のコミットを <code>%[2]s</code> から <code>%[3]s</code> へマージ %[4]s
pulls.change_target_branch_at=`がターゲットブランチを <b>%s</b> から <b>%s</b> に変更 %s`
pulls.tab_conversation=会話
pulls.tab_commits=コミット
@ -3184,6 +3184,7 @@ config.default_keep_email_private=デフォルトでメールアドレスを隠
config.default_allow_create_organization=デフォルトで組織の作成を許可
config.enable_timetracking=タイムトラッキング有効
config.default_enable_timetracking=デフォルトでタイムトラッキング有効
config.allow_dots_in_usernames = ユーザー名にドットを使用できるようにします。既存のアカウントには影響しません。
config.default_allow_only_contributors_to_track_time=コントリビューターだけタイムトラッキングする
config.no_reply_address=メールを隠すときのドメイン
config.default_visibility_organization=新しい組織のデフォルトの表示設定

View File

@ -847,8 +847,8 @@ pulls.compare_compare=다음으로부터 풀
pulls.filter_branch=Filter Branch
pulls.no_results=결과 없음
pulls.create=풀 리퀘스트 생성
pulls.title_desc="<code>%[2]s</code> 에서 <code id=\"branch_target\">%[3]s</code> 로 %[1]d commits 를 머지하려 합니다"
pulls.merged_title_desc=<code>%[2]s</code> 에서 <code>%[3]s</code> 로 %[1]d commits 를 머지했습니다 %[4]s
pulls.title_desc_few="<code>%[2]s</code> 에서 <code id=\"branch_target\">%[3]s</code> 로 %[1]d commits 를 머지하려 합니다"
pulls.merged_title_desc_few=<code>%[2]s</code> 에서 <code>%[3]s</code> 로 %[1]d commits 를 머지했습니다 %[4]s
pulls.tab_conversation=대화
pulls.tab_commits=커밋
pulls.tab_files=파일 변경됨

View File

@ -1713,8 +1713,8 @@ pulls.nothing_to_compare=Nav ko salīdzināt, jo bāzes un salīdzināmie atzari
pulls.nothing_to_compare_and_allow_empty_pr=Šie atzari ir vienādi. Izveidotais izmaiņu pieprasījums būs tukšs.
pulls.has_pull_request=`Izmaiņu pieprasījums starp šiem atzariem jau eksistē: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create=Izveidot izmaiņu pieprasījumu
pulls.title_desc=vēlas sapludināt %[1]d revīzijas no <code>%[2]s</code> uz <code id="branch_target">%[3]s</code>
pulls.merged_title_desc=sapludināja %[1]d revīzijas no <code>%[2]s</code> uz <code>%[3]s</code> %[4]s
pulls.title_desc_few=vēlas sapludināt %[1]d revīzijas no <code>%[2]s</code> uz <code id="branch_target">%[3]s</code>
pulls.merged_title_desc_few=sapludināja %[1]d revīzijas no <code>%[2]s</code> uz <code>%[3]s</code> %[4]s
pulls.change_target_branch_at=`nomainīja mērķa atzaru no <b>%s</b> uz <b>%s</b> %s`
pulls.tab_conversation=Saruna
pulls.tab_commits=Revīzijas

View File

@ -1618,8 +1618,8 @@ pulls.nothing_to_compare=Deze branches zijn gelijk. Er is geen pull request nodi
pulls.nothing_to_compare_and_allow_empty_pr=Deze branches zijn gelijk. Deze pull verzoek zal leeg zijn.
pulls.has_pull_request=`Een pull-verzoek tussen deze branches bestaat al: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create=Pull verzoek aanmaken
pulls.title_desc=wil %[1]d commits van <code>%[2]s</code> samenvoegen met <code id="branch_target">%[3]s</code>
pulls.merged_title_desc=heeft %[1]d commits samengevoegd van <code>%[2]s</code> naar <code>%[3]s</code> %[4]s
pulls.title_desc_few=wil %[1]d commits van <code>%[2]s</code> samenvoegen met <code id="branch_target">%[3]s</code>
pulls.merged_title_desc_few=heeft %[1]d commits samengevoegd van <code>%[2]s</code> naar <code>%[3]s</code> %[4]s
pulls.change_target_branch_at='doelbranch aangepast van <b>%s</b> naar <b>%s</b> %s'
pulls.tab_conversation=Discussie
pulls.tab_commits=Commits
@ -3096,6 +3096,7 @@ config.default_keep_email_private=Verberg standaard alle e-mailadressen
config.default_allow_create_organization=Standaard toestaan om organisaties aan te maken
config.enable_timetracking=Tijdregistratie inschakelen
config.default_enable_timetracking=Tijdregistratie standaard inschakelen
config.allow_dots_in_usernames = Sta gebruikers toe om punten te gebruiken in hun gebruikersnaam. Heeft geen invloed op bestaande accounts.
config.default_allow_only_contributors_to_track_time=Sta alleen bijdragers toe tijdregistratie te gebruiken
config.no_reply_address=Verborgen e-maildomein
config.default_visibility_organization=Standaard zichtbaarheid voor nieuwe organisaties

View File

@ -1302,8 +1302,8 @@ pulls.no_results=Nie znaleziono wyników.
pulls.nothing_to_compare=Te gałęzie są sobie równe. Nie ma potrzeby tworzyć Pull Requesta.
pulls.nothing_to_compare_and_allow_empty_pr=Te gałęzie są równe. Ten PR będzie pusty.
pulls.create=Utwórz Pull Request
pulls.title_desc=chce scalić %[1]d commity/ów z <code>%[2]s</code> do <code id="branch_target">%[3]s</code>
pulls.merged_title_desc=scala %[1]d commity/ów z <code>%[2]s</code> do <code>%[3]s</code> %[4]s
pulls.title_desc_few=chce scalić %[1]d commity/ów z <code>%[2]s</code> do <code id="branch_target">%[3]s</code>
pulls.merged_title_desc_few=scala %[1]d commity/ów z <code>%[2]s</code> do <code>%[3]s</code> %[4]s
pulls.change_target_branch_at=`zmienia gałąź docelową z <b>%s</b> na <b>%s</b> %s`
pulls.tab_conversation=Dyskusja
pulls.tab_commits=Commity

View File

@ -1724,8 +1724,8 @@ pulls.nothing_to_compare=Estes branches são iguais. Não há nenhuma necessidad
pulls.nothing_to_compare_and_allow_empty_pr=Estes branches são iguais. Este PR ficará vazio.
pulls.has_pull_request=`Um pull request entre esses branches já existe: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create=Criar pull request
pulls.title_desc=quer aplicar o merge de %[1]d commits de <code>%[2]s</code> em <code id="branch_target">%[3]s</code>
pulls.merged_title_desc=aplicou merge dos %[1]d commits de <code>%[2]s</code> em <code>%[3]s</code> %[4]s
pulls.title_desc_few=quer aplicar o merge de %[1]d commits de <code>%[2]s</code> em <code id="branch_target">%[3]s</code>
pulls.merged_title_desc_few=aplicou merge dos %[1]d commits de <code>%[2]s</code> em <code>%[3]s</code> %[4]s
pulls.change_target_branch_at=`mudou o branch de destino de <b>%s</b> para <b>%s</b> %s`
pulls.tab_conversation=Conversação
pulls.tab_commits=Commits
@ -3096,6 +3096,7 @@ config.default_keep_email_private=Ocultar endereços de e-mail por padrão
config.default_allow_create_organization=Permitir a criação de organizações por padrão
config.enable_timetracking=Habilitar Cronômetro
config.default_enable_timetracking=Habilitar o Cronômetro por Padrão
config.allow_dots_in_usernames = Permitir pontos em nomes de usuário. Esta opção não afeta contas já existentes.
config.default_allow_only_contributors_to_track_time=Permitir que apenas os colaboradores acompanhem o contador de tempo
config.no_reply_address=Ocultar domínio de e-mail
config.default_visibility_organization=Visibilidade padrão para novas organizações

View File

@ -1722,8 +1722,8 @@ pulls.nothing_to_compare_have_tag=O ramo/etiqueta escolhidos são iguais.
pulls.nothing_to_compare_and_allow_empty_pr=Estes ramos são iguais. Este pedido de integração ficará vazio.
pulls.has_pull_request=`Já existe um pedido de integração entre estes ramos: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create=Criar um pedido de integração
pulls.title_desc=quer integrar %[1]d cometimento(s) do ramo <code>%[2]s</code> no ramo <code id="branch_target">%[3]s</code>
pulls.merged_title_desc=integrou %[1]d cometimento(s) do ramo <code>%[2]s</code> no ramo <code>%[3]s</code> %[4]s
pulls.title_desc_few=quer integrar %[1]d cometimento(s) do ramo <code>%[2]s</code> no ramo <code id="branch_target">%[3]s</code>
pulls.merged_title_desc_few=integrou %[1]d cometimento(s) do ramo <code>%[2]s</code> no ramo <code>%[3]s</code> %[4]s
pulls.change_target_branch_at=`mudou o ramo de destino de <b>%s</b> para <b>%s</b> %s`
pulls.tab_conversation=Diálogo
pulls.tab_commits=Cometimentos

View File

@ -1,6 +1,6 @@
[common]
home=Главная
dashboard=Панель управления
dashboard=Главная
explore=Обзор
help=Помощь
logo=Логотип
@ -269,13 +269,13 @@ smtp_from_helper=Адрес эл. почты, который будет испо
mailer_user=Логин SMTP
mailer_password=Пароль SMTP
register_confirm=Требовать подтверждение по эл. почте для регистрации
mail_notify=Разрешить почтовые уведомления
server_service_title=Сервер и настройки внешних служб
offline_mode=Включить локальный режим
mail_notify=Уведомления по эл. почте
server_service_title=Настройки сервера и внешних служб
offline_mode=Локальный режим
offline_mode_popup=Отключить сторонние сети доставки контента и передавать все ресурсы из их локальных копий.
disable_gravatar=Отключить Gravatar
disable_gravatar_popup=Отключить Gravatar и сторонние источники аватаров. Если пользователь не загрузит аватар локально, то по умолчанию будет использоваться стандартный аватар.
federated_avatar_lookup=Включить федерированные аватары
federated_avatar_lookup=Федерированные аватары
federated_avatar_lookup_popup=Включите поиск федеративного аватара для использования службы с открытым исходным кодом на основе libravatar.
disable_registration=Отключить самостоятельную регистрацию
disable_registration_popup=Отключить самостоятельную регистрацию. Только администраторы смогут создавать новые учётные записи пользователей.
@ -390,7 +390,7 @@ forgot_password=Забыли пароль?
sign_up_now=Нужна учётная запись? Зарегистрируйтесь.
sign_up_successful=Учётная запись успешно создана. Добро пожаловать!
confirmation_mail_sent_prompt=Новое письмо для подтверждения направлено на <b>%s</b>. Пожалуйста, проверьте ваш почтовый ящик в течение %s для завершения регистрации.
must_change_password=Обновить пароль
must_change_password=Обновите пароль
allow_password_change=Требовать смену пароля пользователем (рекомендуется)
reset_password_mail_sent_prompt=Письмо с подтверждением отправлено на <b>%s</b>. Пожалуйста, проверьте входящую почту в течение %s, чтобы завершить процесс восстановления учётной записи.
active_your_account=Активируйте свою учётную запись
@ -671,7 +671,7 @@ applications=Приложения
orgs=Управление организациями
repos=Репозитории
delete=Удалить учётную запись
twofa=Двухфакторная аутентификация
twofa=Двухфакторная аутентификация (TOTP)
account_link=Привязанные учётные записи
organization=Организации
uid=UID
@ -682,12 +682,12 @@ biography_placeholder=Расскажите немного о себе! (Можн
location_placeholder=Поделитесь своим приблизительным местоположением с другими
profile_desc=Как ваш профиль будет отображаться для других пользователей. Ваш основной адрес эл. почты будет использоваться для уведомлений, восстановления пароля и веб-операций с Git.
password_username_disabled=Нелокальным пользователям запрещено изменение их имени пользователя. Для получения более подробной информации обратитесь к администратору сайта.
full_name=Имя и фамилия
full_name=Полное имя
website=Веб-сайт
location=Местоположение
update_theme=Обновить тему
update_theme=Изменить тему
update_profile=Обновить профиль
update_language=Обновить язык
update_language=Сменить язык
update_language_not_found=Язык «%s» недоступен.
update_language_success=Язык обновлён.
update_profile_success=Ваш профиль успешно обновлён.
@ -711,7 +711,7 @@ comment_type_group_branch=Операции с ветками
comment_type_group_time_tracking=Отслеживание времени
comment_type_group_deadline=Модификации сроков выполнения
comment_type_group_dependency=Модификации зависимостей
comment_type_group_lock=Смена статуса ограничения на обсуждение
comment_type_group_lock=Статус ограничения
comment_type_group_review_request=Запросы на рецензию
comment_type_group_pull_request_push=Добавленные коммиты
comment_type_group_project=Проект
@ -743,7 +743,7 @@ password_change_disabled=Нелокальные учётные записи не
emails=Email адреса
manage_emails=Управление адресами эл. почты
manage_themes=Выберите тему по умолчанию
manage_openid=Управление OpenID
manage_openid=Управление адресами OpenID
email_desc=Ваш основной адрес эл. почты будет использоваться для уведомлений, восстановления пароля и, если он не скрыт, для действий с Git в веб-интерфейсе.
theme_desc=Это будет темой по умолчанию для всего сайта.
primary=Основной
@ -764,7 +764,7 @@ openid_deletion_desc=После удаления адреса OpenID вы не
openid_deletion_success=Адрес OpenID удален.
add_new_email=Добавить адрес эл. почты
add_new_openid=Добавить новый OpenID URI
add_email=Добавить новый адрес
add_email=Добавить адрес эл. почты
add_openid=Добавить адрес OpenID
add_email_confirmation_sent=Письмо для подтверждения отправлено на «%s». Пожалуйста, проверьте ваш почтовый ящик в течение %s, чтобы завершить процесс подтверждения.
add_email_success=Добавлен новый адрес эл. почты.
@ -946,11 +946,11 @@ repos_none=Вы не владеете ни одним репозиторием.
delete_account=Удаление учётной записи
delete_prompt=Эта операция навсегда удалит вашу учётную запись. Это <strong>НЕВОЗМОЖНО</strong> будет отменить.
delete_with_all_comments=Ваша учётная запись младше %s. Чтобы избежать комментариев к плану, все комментарии к ней будут удалены.
confirm_delete_account=Подтвердите удаление
confirm_delete_account=Подтвердить удаление
delete_account_title=Удалить эту учётную запись
delete_account_desc=Вы уверены, что хотите навсегда удалить эту учётную запись?
email_notifications.enable=Включить почтовые уведомления
email_notifications.enable=Разрешить уведомления по почте
email_notifications.onmention=Посылать письмо на эл. почту только при упоминании
email_notifications.disable=Отключить почтовые уведомления
email_notifications.submit=Установить настройки эл. почты
@ -990,7 +990,7 @@ visibility=Видимость
visibility_description=Это увидят только владелец организации или участники при наличии прав.
visibility_helper=Сделать репозиторий приватным
visibility_helper_forced=Администратор сайта настроил параметр видимости новых репозиториев. Репозиторий приватный по умолчанию.
visibility_fork_helper=(Это изменит все ответвления.)
visibility_fork_helper=(Это изменит видимость всех ответвлений.)
clone_helper=Нужна помощь в клонировании? Посетите страницу <a target="_blank" rel="noopener noreferrer" href="%s">помощи</a>.
fork_repo=Создать ответвление
fork_from=Ответвить от
@ -1004,7 +1004,7 @@ clone_in_vsc=Клонировать в VS Code
download_zip=Скачать ZIP
download_tar=Скачать TAR.GZ
download_bundle=Скачать BUNDLE
generate_repo=Создать репозиторий
generate_repo=Сгенерировать репозиторий
generate_from=Создать из
repo_desc=Описание
repo_desc_helper=Добавьте краткое описание (необязательно)
@ -1066,9 +1066,9 @@ author_search_tooltip=Показывает максимум 30 пользова
tree_path_not_found_commit=Путь %[1]s не существует в коммите %[2]s
tree_path_not_found_branch=Путь %[1]s не существует в ветке %[2]s
transfer.accept=Принять перенос
transfer.accept=Принять передачу
transfer.accept_desc=Переместить в «%s»
transfer.reject=Отказаться от перемещения
transfer.reject=Отказаться от передачи
transfer.reject_desc=Отменить перемещение в «%s»
desc.private=Приватный
@ -1097,14 +1097,14 @@ form.name_reserved=Название репозитория «%s» зарезер
form.name_pattern_not_allowed=Шаблон «%s» не допускается в названии репозитория.
need_auth=Авторизация
migrate_options=Параметры миграции
migrate_options=Параметры переноса
migrate_service=Сервис миграции
migrate_options_mirror_helper=Этот репозиторий будет зеркалом
migrate_options_lfs=Перенос LFS файлов
migrate_options_lfs_endpoint.label=Конечная точка LFS
migrate_options_lfs_endpoint.description=Миграция попытается использовать ваш Git удаленно, чтобы <a target="_blank" rel="noopener noreferrer" href="%s">определить сервер LFS</a>. Вы также можете указать пользовательскую конечную точку, если данные хранятся в другом месте.
migrate_options_lfs_endpoint.description=При переносе будет произведена попытка <a target="_blank" rel="noopener noreferrer" href="%s">определить сервер LFS</a> автоматически через Git. Если данные LFS хранятся в другом месте, укажите конечную точку самостоятельно.
migrate_options_lfs_endpoint.description.local=Также поддерживается путь на локальном сервере.
migrate_items=Элементы миграции
migrate_items=Переносимые элементы
migrate_items_wiki=Вики
migrate_items_milestones=Этапы
migrate_items_labels=Метки
@ -1121,16 +1121,16 @@ migrate.permission_denied=У вас нет прав на импорт локал
migrate.permission_denied_blocked=Вы не можете импортировать с запрещённых хостов, пожалуйста, попросите администратора проверить настройки ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS.
migrate.invalid_local_path=Недопустимый локальный путь. Он не существует или не является каталогом.
migrate.invalid_lfs_endpoint=Конечная точка LFS недействительна.
migrate.failed=Миграция не удалась: %v
migrate.migrate_items_options=Токен доступа необходим для миграции дополнительных элементов
migrate.failed=Перенос не удался: %v
migrate.migrate_items_options=Токен доступа необходим для переноса дополнительных элементов
migrated_from=Перенесено из <a href="%[1]s">%[2]s</a>
migrated_from_fake=Перенесено из %[1]s
migrate.migrate=Миграция из %s
migrate.migrate=Перенос из %s
migrate.migrating=Перенос из <b>%s</b>...
migrate.migrating_failed=Перенос из <b>%s</b> не удался.
migrate.migrating_failed.error=Не удалось мигрировать: %s
migrate.migrating_failed_no_addr=Миграция не удалась.
migrate.github.description=Переносите данные с github.com или других серверов GitHub.
migrate.migrating_failed_no_addr=Перенос не удался.
migrate.github.description=Перенесите данные с github.com или сервера GitHub Enterprise.
migrate.git.description=Перенести только репозиторий из любого Git сервиса.
migrate.gitlab.description=Перенести данные с gitlab.com или других серверов GitLab.
migrate.gitea.description=Перенести данные с gitea.com или других серверов Gitea/Forgejo.
@ -1138,14 +1138,14 @@ migrate.gogs.description=Перенести данные с notabug.org или
migrate.onedev.description=Перенести данные с code.onedev.io или других серверов OneDev.
migrate.codebase.description=Перенос данных с codebasehq.com.
migrate.gitbucket.description=Перенести данные из экземпляров GitBucket.
migrate.migrating_git=Перенос Git данных
migrate.migrating_topics=Миграция тем
migrate.migrating_git=Перенос данных Git
migrate.migrating_topics=Перенос тем
migrate.migrating_milestones=Перенос этапов
migrate.migrating_labels=Миграция меток
migrate.migrating_releases=Миграция выпусков
migrate.migrating_issues=Миграция задач
migrate.migrating_pulls=Миграция запросов на слияние
migrate.cancel_migrating_title=Отменить миграцию
migrate.migrating_labels=Перенос меток
migrate.migrating_releases=Перенос выпусков
migrate.migrating_issues=Перенос задач
migrate.migrating_pulls=Перенос запросов на слияние
migrate.cancel_migrating_title=Отменить перенос
migrate.cancel_migrating_confirm=Вы хотите отменить эту миграцию?
mirror_from=зеркало из
@ -1555,7 +1555,7 @@ issues.label_title=Имя метки
issues.label_description=Описание метки
issues.label_color=Цвет метки
issues.label_exclusive=Эксклюзивный
issues.label_archive=Метка архива
issues.label_archive=Архивная метка
issues.label_archived_filter=Показать архивированные метки
issues.label_archive_tooltip=Архивированные метки исключаются по умолчанию из подсказок при поиске по метке.
issues.label_exclusive_desc=Назовите метку <code>область/элемент</code>, чтобы сделать ее взаимоисключающей с другими метками <code>область/</code>.
@ -1603,17 +1603,17 @@ issues.comment_on_locked=Вы не можете оставить коммент
issues.delete=Удалить
issues.delete.title=Удалить эту задачу?
issues.delete.text=Вы точно хотите удалить эту задачу? (Это навсегда удалит всё её содержимое. Возможно, лучше закрыть её в архивных целях)
issues.tracker=Отслеживание времени
issues.start_tracking_short=Запустить таймер
issues.start_tracking=Начать отслеживание времени
issues.tracker=Подсчёт времени
issues.start_tracking_short=Запустить подсчёт
issues.start_tracking=Начать подсчёт времени
issues.start_tracking_history=`начал(а) работать %s`
issues.tracker_auto_close=Таймер будет остановлен автоматически, когда эта проблема будет закрыта
issues.tracking_already_started=`Вы уже начали отслеживать время для <a href="%s">другой задачи</a>!`
issues.stop_tracking=Остановить таймер
issues.stop_tracking=Остановить подсчёт
issues.stop_tracking_history=`перестал(а) работать %s`
issues.cancel_tracking=Отмена
issues.cancel_tracking_history=`отменил(а) отслеживание времени %s`
issues.add_time=Вручную добавить время
issues.add_time=Добавить время вручную
issues.del_time=Удалить этот журнал времени
issues.add_time_short=Добавить время
issues.add_time_cancel=Отмена
@ -1622,8 +1622,8 @@ issues.del_time_history=`удалил(а) потраченное время %s`
issues.add_time_hours=Часы
issues.add_time_minutes=Минуты
issues.add_time_sum_to_small=Время не было введено.
issues.time_spent_total=Общее затраченное время
issues.time_spent_from_all_authors=`Общее затраченное время: %s`
issues.time_spent_total=Всего затрачено времени
issues.time_spent_from_all_authors=`Всего затрачено времени: %s`
issues.due_date=Срок выполнения
issues.invalid_due_date_format=Срок выполнения должен быть в формате «гггг-мм-дд».
issues.error_modifying_due_date=Не удалось изменить срок выполнения.
@ -1741,8 +1741,10 @@ pulls.nothing_to_compare=Нечего сравнивать, родительск
pulls.nothing_to_compare_and_allow_empty_pr=Ветки идентичны. Этот PR будет пустым.
pulls.has_pull_request=`Запрос на слияние этих веток уже существует: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create=Создать запрос на слияние
pulls.title_desc=хочет влить %[1]d коммит(ов) из <code>%[2]s</code> в <code id="branch_target">%[3]s</code>
pulls.merged_title_desc=слито %[1]d коммит(ов) из <code>%[2]s</code> в <code>%[3]s</code> %[4]s
pulls.title_desc_one=хочет влить %[1]d коммит из <code>%[2]s</code> в <code id="branch_target">%[3]s</code>
pulls.title_desc_few=хочет влить %[1]d коммит(ов) из <code>%[2]s</code> в <code id="branch_target">%[3]s</code>
pulls.merged_title_desc_one=слит %[1]d коммит из <code>%[2]s</code> в <code>%[3]s</code> %[4]s
pulls.merged_title_desc_few=слито %[1]d коммит(ов) из <code>%[2]s</code> в <code>%[3]s</code> %[4]s
pulls.change_target_branch_at=`изменил(а) целевую ветку с <b>%s</b> на <b>%s</b> %s`
pulls.tab_conversation=Обсуждение
pulls.tab_commits=Коммиты
@ -2093,22 +2095,22 @@ settings.convert_succeed=Репозиторий успешно преобраз
settings.convert_fork=Преобразовать в обычный репозиторий
settings.convert_fork_desc=Вы можете преобразовать это ответвление в обычный репозиторий. Это не может быть отменено.
settings.convert_fork_notices_1=Эта операция преобразует этот ответвление в обычный репозиторий, и не может быть отменена.
settings.convert_fork_confirm=Преобразовать Репозиторий
settings.convert_fork_confirm=Преобразовать репозиторий
settings.convert_fork_succeed=Ответвление преобразовано в обычный репозиторий.
settings.transfer=Передать права собственности
settings.transfer.rejected=Перенос репозитория отменён.
settings.transfer.success=Перенос репозитория выполнен успешно.
settings.transfer_abort=Отменить перенос
settings.transfer_abort_invalid=Невозможно отменить перенос несуществующего репозитория.
settings.transfer.rejected=Передача репозитория отменена.
settings.transfer.success=Передача репозитория выполнена успешно.
settings.transfer_abort=Отменить передачу
settings.transfer_abort_invalid=Невозможно отменить передачу несуществующего репозитория.
settings.transfer_abort_success=Передача репозитория %s успешно отменена.
settings.transfer_desc=Передать репозиторий другому пользователю или организации где у вас есть права администратора.
settings.transfer_form_title=Введите сопутствующую информацию для подтверждения операции:
settings.transfer_in_progress=Имеется текущий перенос. Отмените его, если хотите выполнить перенос другому пользователю.
settings.transfer_in_progress=Имеется текущая передача. Отмените её, если хотите выполнить передачу другому пользователю.
settings.transfer_notices_1=- Вы можете потерять доступ, если новый владелец является отдельным пользователем.
settings.transfer_notices_2=- Вы сохраните доступ, если новым владельцем станет организация, владельцем которой вы являетесь.
settings.transfer_notices_3=- если репозиторий является приватным и передается отдельному пользователю, это действие позволяет убедиться, что пользователь имеет хотя бы права на чтение (и при необходимости изменяет права доступа).
settings.transfer_owner=Новый владелец
settings.transfer_perform=Выполнить перенос
settings.transfer_perform=Выполнить передачу
settings.transfer_started=Репозиторий ожидает подтверждения передачи от «%s»
settings.transfer_succeed=Репозиторий перенесён.
settings.signing_settings=Настройки подписи верификации
@ -2611,8 +2613,8 @@ diff.comment.add_line_comment = Добавить комментарий к ст
tree_path_not_found_tag = Путь %[1]s отсутствует в теге %[2]s
migrate_options_lfs_endpoint.placeholder = Если не заполнено, конечная точка будет определена из URL клонирования
invisible_runes_description = `Этот файл содержит невидимые символы Юникода, которые невозможно заметить, но которые потенциально будут влиять на обработку файла. Если так и должно быть, можете спокойно игнорировать это предупреждение. Отобразить символы можно кнопкой Экранирования.`
transfer.no_permission_to_accept = У вас недостаточно прав для принятия этого переноса.
transfer.no_permission_to_reject = У вас недостаточно прав для отклонения этого переноса.
transfer.no_permission_to_accept = У вас недостаточно прав для принятия этой передачи.
transfer.no_permission_to_reject = У вас недостаточно прав для отклонения этой передачи.
commits.view_path = Просмотреть в этом моменте истории
commits.renamed_from = Переименован с %s
issues.due_date_not_writer = Для обновления срока выполнения задачи требуется право на запись в этом репозитории.
@ -2705,17 +2707,17 @@ form.create_org_not_allowed=Этому пользователю не разре
settings=Настройки
settings.options=Организация
settings.full_name=Полное имя
settings.email=Почта для связи
settings.email=Эл. почта для связи
settings.website=Сайт
settings.location=Местоположение
settings.permission=Разрешения
settings.repoadminchangeteam=Администратор репозитория может добавлять и удалять права доступа для команд
settings.visibility=Видимость
settings.visibility.public=Публичный
settings.visibility.limited=Ограниченный (Видимый только выполнившим вход пользователям)
settings.visibility.limited=Ограниченная (видна только авторизованным пользователям)
settings.visibility.limited_shortname=Ограниченный
settings.visibility.private=Приватный (Видимый только для участников организации)
settings.visibility.private_shortname=Приватный
settings.visibility.private=Частная (видна только участникам организации)
settings.visibility.private_shortname=Частная
settings.update_settings=Обновить настройки
settings.update_setting_success=Настройки организации обновлены.
@ -2726,13 +2728,13 @@ settings.delete=Удалить организацию
settings.delete_account=Удалить эту организацию
settings.delete_prompt=Это действие <strong>БЕЗВОЗВРАТНО</strong> удалит эту организацию навсегда!
settings.confirm_delete_account=Подтвердить удаление
settings.delete_org_title=Удалить организацию
settings.delete_org_title=Удаление организации
settings.delete_org_desc=Эта организация будет безвозвратно удалена. Продолжить?
settings.hooks_desc=Добавьте веб-хуки, которые будет вызываться для <strong>всех репозиториев</strong> под этой организации.
settings.labels_desc=Добавьте метки, которые могут быть использованы в задачах для <strong>всех репозиториев</strong> этой организации.
members.membership_visibility=Видимость участника команды:
members.membership_visibility=Видимость участника:
members.public=Видимый
members.public_helper=скрыть
members.private=Скрыт
@ -2770,14 +2772,14 @@ teams.delete_team=Удалить команду
teams.add_team_member=Добавить участника
teams.invite_team_member=Пригласить в %s
teams.invite_team_member.list=Приглашения в ожидании
teams.delete_team_title=Удалить команду
teams.delete_team_title=Удаление команды
teams.delete_team_desc=Удаление команды отменяет доступ к репозиторию для её членов. Продолжить?
teams.delete_team_success=Команда удалена.
teams.read_permission_desc=Эта команда предоставляет доступ на <strong>Чтение</strong>: члены могут просматривать и клонировать репозитории команды.
teams.write_permission_desc=Эта команда предоставляет доступ на <strong>Запись</strong>: члены могут получать и выполнять push команды в репозитории.
teams.admin_permission_desc=Эта команда даёт <strong>административный</strong> доступ: участники могут читать, отправлять изменения и добавлять соучастников к её репозиториям.
teams.create_repo_permission_desc=Кроме того, эта команда предоставляет право <strong>Создание репозитория</strong>: участники команды могут создавать новые репозитории в организации.
teams.repositories=Репозитории группы разработки
teams.repositories=Репозитории команды
teams.search_repo_placeholder=Поиск репозитория…
teams.remove_all_repos_title=Удалить все репозитории команды
teams.remove_all_repos_desc=Удаляет все репозитории из команды.
@ -2801,7 +2803,7 @@ follow_blocked_user = Вы не можете подписаться на эту
teams.general_access = Настраиваемый доступ
[admin]
dashboard=Панель
dashboard=Панель управления
identity_access=Идентификация и доступ
users=Пользователи
organizations=Организации
@ -3187,6 +3189,7 @@ config.default_keep_email_private=Скрывать адреса эл. почты
config.default_allow_create_organization=Разрешить создание организаций по умолчанию
config.enable_timetracking=Отслеживание времени
config.default_enable_timetracking=Включить отслеживание времени по умолчанию
config.allow_dots_in_usernames = Разрешить точки в логинах пользователей. Это не повлияет на уже созданные учётные записи.
config.default_allow_only_contributors_to_track_time=Подсчитывать время могут только соавторы
config.no_reply_address=Домен скрытых адресов почты
config.default_visibility_organization=Видимость новых организаций по умолчанию
@ -3208,7 +3211,7 @@ config.mailer_user=Пользователь
config.mailer_use_sendmail=Использовать Sendmail
config.mailer_sendmail_path=Путь к Sendmail
config.mailer_sendmail_args=Дополнительные аргументы для Sendmail
config.mailer_sendmail_timeout=Тайм-аут Sendmail
config.mailer_sendmail_timeout=Истечение ожидания Sendmail
config.mailer_use_dummy=Заглушка
config.test_email_placeholder=Эл. почта (например, test@example.com)
config.send_test_mail=Отправить тестовое письмо
@ -3237,7 +3240,7 @@ config.cookie_life_time=Время жизни файла cookie
config.picture_config=Конфигурация аватаров и изображений
config.picture_service=Служба изображений
config.disable_gravatar=Отключить Gravatar
config.enable_federated_avatar=Включить федерированные аватары
config.enable_federated_avatar=Федерированные аватары
config.git_config=Конфигурация Git
config.git_disable_diff_highlight=Отключить подсветку синтаксиса при сравнении

View File

@ -1269,8 +1269,8 @@ pulls.nothing_to_compare=මෙම ශාඛා සමාන වේ. අදි
pulls.nothing_to_compare_and_allow_empty_pr=මෙම ශාඛා සමාන වේ. මෙම මහජන සම්බන්ධතා හිස් වනු ඇත.
pulls.has_pull_request=`මෙම ශාඛා අතර අදින්න ඉල්ලීම දැනටමත් පවතී: <a href="%[1]s">%[2]s #%[3]d</a>`
pulls.create=අදින්න ඉල්ලීම නිර්මාණය
pulls.title_desc=%[1]d සිට <code>%[2]s</code> දක්වා <code id="branch_target">%[3]s</code>
pulls.merged_title_desc=මර්ජ්%[1]d සිට <code>%[2]s</code> දක්වා <code>%[3]s</code> %[4]s
pulls.title_desc_few=%[1]d සිට <code>%[2]s</code> දක්වා <code id="branch_target">%[3]s</code>
pulls.merged_title_desc_few=මර්ජ්%[1]d සිට <code>%[2]s</code> දක්වා <code>%[3]s</code> %[4]s
pulls.change_target_branch_at=`ඉලක්කගත ශාඛාව <b>%s</b> සිට <b>%s</b> %sදක්වා වෙනස් කර ඇත`
pulls.tab_conversation=සංවාදය
pulls.tab_commits=විවරයන්

View File

@ -267,6 +267,7 @@ config.git_config = Konfiguracija Git
config.git_max_diff_line_characters = Največ različnih znakov na vrstico
notices.view_detail_header = Podrobnosti obvestila
config.log_config = Konfiguracija dnevnika
config.allow_dots_in_usernames = Uporabnikom dovolite uporabo pik v uporabniških imenih. Ne vpliva na obstoječe račune.
[repo]
migrate.github_token_desc = Tu lahko vstavite enega ali več žetonov, ločenih z vejico, da bo selitev hitrejša zaradi omejitve hitrosti GitHub API. OPOZORILO: Zloraba te funkcije lahko krši pravila ponudnika storitev in povzroči blokado računa.

View File

@ -1088,8 +1088,8 @@ pulls.filter_branch=Filtrera gren
pulls.no_results=Inga resultat hittades.
pulls.nothing_to_compare=Dessa brancher är ekvivalenta. Det finns ingen anledning att skapa en pull-request.
pulls.create=Skapa Pullförfrågan
pulls.title_desc=vill sammanfoga %[1]d incheckningar från <code>s[2]s</code> in i <code id="branch_target">%[3]s</code>
pulls.merged_title_desc=sammanfogade %[1]d incheckningar från <code>%[2]s</code> in i <code>%[3]s</code> %[4]s
pulls.title_desc_few=vill sammanfoga %[1]d incheckningar från <code>s[2]s</code> in i <code id="branch_target">%[3]s</code>
pulls.merged_title_desc_few=sammanfogade %[1]d incheckningar från <code>%[2]s</code> in i <code>%[3]s</code> %[4]s
pulls.change_target_branch_at=`ändrade mål-branch från <b>%s</b> till <b>%s</b>%s`
pulls.tab_conversation=Konversation
pulls.tab_commits=Incheckningar

View File

@ -1712,8 +1712,8 @@ pulls.nothing_to_compare=Bu dallar eşit. Değişiklik isteği oluşturmaya gere
pulls.nothing_to_compare_and_allow_empty_pr=Bu dallar eşittir. Bu Dİ boş olacak.
pulls.has_pull_request=`Bu dallar arasında zaten bir değişiklik isteği var: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create=Değişiklik İsteği Oluştur
pulls.title_desc=<code>%[2]s</code> içindeki %[1]d işlemeyi <code id="branch_target">%[3]s</code> ile birleştirmek istiyor
pulls.merged_title_desc=%[4]s <code>%[2]s</code> içindeki %[1]d işlemeyi <code>%[3]s</code> ile birleştirdi
pulls.title_desc_few=<code>%[2]s</code> içindeki %[1]d işlemeyi <code id="branch_target">%[3]s</code> ile birleştirmek istiyor
pulls.merged_title_desc_few=%[4]s <code>%[2]s</code> içindeki %[1]d işlemeyi <code>%[3]s</code> ile birleştirdi
pulls.change_target_branch_at='hedef dal <b>%s</b> adresinden <b>%s</b>%s adresine değiştirildi'
pulls.tab_conversation=Sohbet
pulls.tab_commits=İşleme

View File

@ -1385,8 +1385,8 @@ pulls.nothing_to_compare=Ці гілки однакові. Немає необх
pulls.nothing_to_compare_and_allow_empty_pr=Одинакові гілки. Цей PR буде порожнім.
pulls.has_pull_request=`Запит злиття для цих гілок вже існує: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create=Створити запит на злиття
pulls.title_desc=хоче злити %[1]d комітів з <code>%[2]s</code> в <code id="branch_target">%[3]s</code>
pulls.merged_title_desc=злито %[1]d комітів з <code>%[2]s</code> до <code>%[3]s</code> %[4]s
pulls.title_desc_few=хоче злити %[1]d комітів з <code>%[2]s</code> в <code id="branch_target">%[3]s</code>
pulls.merged_title_desc_few=злито %[1]d комітів з <code>%[2]s</code> до <code>%[3]s</code> %[4]s
pulls.change_target_branch_at=`змінена цільова гілка з <b>%s</b> на <b>%s</b> %s`
pulls.tab_conversation=Обговорення
pulls.tab_commits=Коміти

View File

@ -167,6 +167,7 @@ number_of_contributions_in_the_last_12_months=一年内 %s 次贡献
contributions_zero=目前还没有贡献。
less=更少的
more=更多的
contributions_format = {contributions} 于 {month} {day}, {year}
[editor]
buttons.heading.tooltip=添加标题
@ -248,7 +249,7 @@ run_user=以用户名运行
run_user_helper=输入 Forgejo 运行的操作系统用户名。请注意,此用户必须具有对仓库根路径的访问权限。
domain=服务器域名
domain_helper=服务器的域名或主机地址。
ssh_port=SSH 服务端口
ssh_port=SSH 服务端口
ssh_port_helper=SSH 服务器的端口号,为空则禁用它。
http_port=HTTP 服务端口
http_port_helper=Forgejos web 服务器将侦听的端口号。
@ -372,6 +373,10 @@ code_search_results=“%s” 的搜索结果是
code_last_indexed_at=最后索引于 %s
relevant_repositories_tooltip=派生的仓库,以及缺少主题、图标和描述的仓库将被隐藏。
relevant_repositories=只显示相关的仓库, <a href="%s">显示未过滤结果</a>。
stars_one = %d 点赞
stars_few = %d 点赞
forks_one = %d 派生
forks_few = %d 派生
[auth]
create_new_account=注册帐号
@ -447,6 +452,8 @@ last_admin=您不能删除最后一个管理员。必须至少保留一个管理
change_unconfirmed_email = 如果您在注册时提供了错误的邮箱地址,您可以在下方修改,激活邮件会发送到修改后的邮箱地址。
change_unconfirmed_email_summary = 修改用来接收激活邮件的邮箱地址。
change_unconfirmed_email_error = 无法修改邮箱地址: %v
tab_signin = 登录
tab_signup = 注册
[mail]
view_it_on=在 %s 上查看
@ -501,12 +508,12 @@ release.downloads=下载:
release.download.zip=源代码 (ZIP)
release.download.targz=源代码 (TAR.GZ)
repo.transfer.subject_to=%s 想要将 "%s" 转让给 %s
repo.transfer.subject_to_you=%s 想要将 "%s" 转让给你
repo.transfer.subject_to=%s 想要将 "%s" 仓库转让给 %s
repo.transfer.subject_to_you=%s 想要将 "%s" 仓库转让给你
repo.transfer.to_you=
repo.transfer.body=访问 %s 以接受或拒绝转移,亦可忽略此邮件。
repo.collaborator.added.subject=%s 把你添加到了 %s
repo.collaborator.added.subject=%s 已将你作为协作者添加到 %s
repo.collaborator.added.text=您已被添加为代码库的协作者:
team_invite.subject=%[1]s 邀请您加入组织 %[2]s
@ -678,12 +685,12 @@ biography_placeholder=告诉我们一点您自己! (您可以使用Markdown)
location_placeholder=与他人分享你的大概位置
profile_desc=控制您的个人资料对其他用户的显示方式。您的主要电子邮件地址将用于通知、密码恢复和基于网页界面的 Git 操作。
password_username_disabled=不允许非本地用户更改他们的用户名。更多详情请联系您的系统管理员。
full_name=自定义名称
full_name=全名
website=个人网站
location=所在地区
update_theme=主题
update_profile=更新信息
update_language=语言
update_theme=主题
update_profile=更新个人资料
update_language=语言
update_language_not_found=语言 %s 不可用。
update_language_success=语言已更新。
update_profile_success=您的资料信息已经更新
@ -717,7 +724,7 @@ privacy=隐私设置
keep_activity_private=隐藏个人资料页面中的活动
keep_activity_private_popup=使活动仅对您和管理员可见
lookup_avatar_by_mail=电子邮箱地址查找头像
lookup_avatar_by_mail=使用电子邮箱地址查找头像
federated_avatar_lookup=Federated Avatar 查找
enable_custom_avatar=启动自定义头像
choose_new_avatar=选择新的头像
@ -858,7 +865,7 @@ generate_token=生成令牌
generate_token_success=新令牌生成成功。请拷贝因为令牌将只会显示一次。
generate_token_name_duplicate=<strong>%s</strong> 已被用作应用程序名称。请使用一个新的名称。
delete_token=删除令牌
access_token_deletion=删除 Access Token
access_token_deletion=删除访问令牌
access_token_deletion_cancel_action=取消
access_token_deletion_confirm_action=刪除
access_token_deletion_desc=删除令牌将撤销程序对您账户的访问权限。此操作无法撤消。是否继续?
@ -910,7 +917,7 @@ twofa_recovery_tip=如果您丢失了您的设备,您将能够使用一次性
twofa_is_enrolled=你的账号<strong>已启用</strong>了两步验证。
twofa_not_enrolled=你的账号未开启两步验证。
twofa_disable=禁用两步认证
twofa_scratch_token_regenerate=重新生成初始令牌
twofa_scratch_token_regenerate=重新生成一次性恢复令牌
twofa_scratch_token_regenerated=您的临时令牌现在是 %s。将其存放在安全的地方它将不会再次显示。
twofa_enroll=启用两步验证
twofa_disable_note=如果需要, 可以禁用双因素身份验证。
@ -1151,12 +1158,12 @@ migrate.onedev.description=从 code.onedev.io 或其他 OneDev 实例迁移数
migrate.codebase.description=从 codebasehq.com 迁移数据
migrate.gitbucket.description=从 GitBucket 实例迁移数据
migrate.migrating_git=迁移Git数据
migrate.migrating_topics=迁移主题
migrate.migrating_milestones=迁移里程碑
migrate.migrating_labels=迁移标签
migrate.migrating_releases=迁移发布
migrate.migrating_issues=迁移工单
migrate.migrating_pulls=迁移合并请求
migrate.migrating_topics=正在迁移主题
migrate.migrating_milestones=正在迁移里程碑
migrate.migrating_labels=正在迁移标签
migrate.migrating_releases=正在迁移发布
migrate.migrating_issues=正在迁移工单
migrate.migrating_pulls=正在迁移合并请求
migrate.cancel_migrating_title=取消迁移
migrate.cancel_migrating_confirm=您想要取消此次迁移吗?
@ -1228,7 +1235,7 @@ ambiguous_character=`%[1]c [U+%04[1]X] 容易和 %[2]c [U+%04[2]X] 混淆`
escape_control_characters=Escape
unescape_control_characters=Unescape
file_copy_permalink=复制永久链接
file_copy_permalink=复制固定链接
view_git_blame=查看 Git Blame
video_not_supported_in_browser=您的浏览器不支持 HTML5 “video” 标签。
audio_not_supported_in_browser=您的浏览器不支持 HTML5 “audio” 标签。
@ -1429,7 +1436,7 @@ issues.choose.blank_about=从默认模板创建一个工单。
issues.choose.ignore_invalid_templates=已忽略无效模板
issues.choose.invalid_templates=发现了 %v 个无效模板
issues.choose.invalid_config=问题配置包含错误:
issues.no_ref=分支/标记未指定
issues.no_ref=未指定分支或标签
issues.create=创建工单
issues.new_label=创建标签
issues.new_label_placeholder=标签名称
@ -1631,7 +1638,7 @@ issues.stop_tracking=停止计时器
issues.stop_tracking_history=`停止工作 %s`
issues.cancel_tracking=放弃
issues.cancel_tracking_history=`取消时间跟踪 %s`
issues.add_time=手动添加时间
issues.add_time=手动记录时间
issues.del_time=删除此时间跟踪日志
issues.add_time_short=添加时间
issues.add_time_cancel=取消
@ -1735,7 +1742,7 @@ compare.compare_head=比较
pulls.desc=启用合并请求和代码评审。
pulls.new=创建合并请求
pulls.view=查看拉取请求
pulls.view=审阅合并请求
pulls.compare_changes=创建合并请求
pulls.allow_edits_from_maintainers=允许维护者编辑
pulls.allow_edits_from_maintainers_desc=对基础分支有写入权限的用户也可以推送到此分支
@ -1764,8 +1771,8 @@ pulls.nothing_to_compare_have_tag=所选分支/标签相同。
pulls.nothing_to_compare_and_allow_empty_pr=这些分支是相等的,此合并请求将为空。
pulls.has_pull_request=这些分支之间的合并请求已存在: <a href="%[1]s">%[2]s#%[3]d</a>
pulls.create=创建合并请求
pulls.title_desc=请求将 %[1]d 次代码提交从 <code>%[2]s</code> 合并至 <code id="branch_target">%[3]s</code>
pulls.merged_title_desc=于 %[4]s 将 %[1]d 次代码提交从 <code>%[2]s</code>合并至 <code>%[3]s</code>
pulls.title_desc_few=请求将 %[1]d 次代码提交从 <code>%[2]s</code> 合并至 <code id="branch_target">%[3]s</code>
pulls.merged_title_desc_few=于 %[4]s 将 %[1]d 次代码提交从 <code>%[2]s</code>合并至 <code>%[3]s</code>
pulls.change_target_branch_at=将目标分支从 <b>%s</b> 更改为 <b>%s</b> %s
pulls.tab_conversation=对话内容
pulls.tab_commits=代码提交
@ -1967,14 +1974,14 @@ activity.period.yearly=1年
activity.overview=概览
activity.active_prs_count_1=<strong>%d</strong> 合并请求
activity.active_prs_count_n=<strong>%d</strong> 合并请求
activity.merged_prs_count_1=合并请求
activity.merged_prs_count_n=合并请求
activity.merged_prs_count_1=已合并的合并请求
activity.merged_prs_count_n=已合并的合并请求
activity.opened_prs_count_1=新合并请求
activity.opened_prs_count_n=新合并请求
activity.title.user_1=%d 用户
activity.title.user_n=%d 用户
activity.title.prs_1=%d 合并请求
activity.title.prs_n=%d 合并请求
activity.title.prs_1=%d 合并请求
activity.title.prs_n=%d 合并请求
activity.title.prs_merged_by=%[2]s 由 %[1]s 合并
activity.title.prs_opened_by=%[2]s 创建了 %[1]s
activity.merged_prs_label=已合并
@ -2073,7 +2080,7 @@ settings.mirror_settings.push_mirror.remote_url=Git 远程仓库链接
settings.mirror_settings.push_mirror.add=添加推送镜像
settings.mirror_settings.push_mirror.edit_sync_time=编辑镜像同步间隔
settings.sync_mirror=同步
settings.sync_mirror=立即同步
settings.pull_mirror_sync_in_progress=正在从远程 %s 拉取更改。
settings.push_mirror_sync_in_progress=正在推送变更到远程 %s 。
settings.site=网站
@ -2951,7 +2958,7 @@ users.max_repo_creation_desc=(设置为 -1 表示使用全局默认值)
users.is_activated=该用户已被激活
users.prohibit_login=禁用登录
users.is_admin=是管理员
users.is_restricted=受限
users.is_restricted=受限制的
users.allow_git_hook=允许创建 Git 钩子
users.allow_git_hook_tooltip=Git 钩子将会被以操作系统用户运行将会拥有同样的主机访问权限。因此拥有此特殊的Git 钩子权限将能够访问合修改所有的 Forgejo 仓库或者Forgejo的数据库。同时也能获得Forgejo的管理员权限。
users.allow_import_local=允许导入本地仓库
@ -2980,7 +2987,7 @@ users.list_status_filter.is_2fa_enabled=已启用 2FA
users.list_status_filter.not_2fa_enabled=未启用 2FA
users.details=用户详细信息
emails.email_manage_panel=邮件管理
emails.email_manage_panel=管理用户邮件地址
emails.primary=主要的
emails.activated=已激活
emails.filter_sort.email=电子邮件
@ -3217,6 +3224,7 @@ config.default_keep_email_private=默认情况下隐藏电子邮件地址
config.default_allow_create_organization=默认情况下允许创建组织
config.enable_timetracking=启用时间跟踪
config.default_enable_timetracking=默认情况下启用时间跟踪
config.allow_dots_in_usernames = 允许用户在用户名中使用英文句号。不影响已有的帐户。
config.default_allow_only_contributors_to_track_time=仅允许成员跟踪时间
config.no_reply_address=隐藏电子邮件域
config.default_visibility_organization=新组织的默认可见性
@ -3361,6 +3369,7 @@ self_check.database_collation_case_insensitive=数据库正在使用一个校验
self_check.database_inconsistent_collation_columns=数据库正在使用%s的排序规则但是这些列使用了不匹配的排序规则。这可能会造成一些意外问题。
self_check.database_fix_mysql=对于MySQL/MariaDB用户您可以使用“gitea doctor convert”命令来解决校验问题。 或者您也可以通过 "ALTER ... COLLATE ..." 这样的SQL 来手动解决这个问题。
self_check.database_fix_mssql=对于MSSQL用户您现在只能通过"ALTER ... COLLATE ..."SQLs手动解决这个问题。
auths.tips.gmail_settings = Gmail 设置:
[action]
create_repo=创建了仓库 <a href="%s">%s</a>
@ -3605,6 +3614,7 @@ owner.settings.chef.keypair.description=需要密钥对才能向 Chef 注册中
rpm.repository = 仓库信息
rpm.repository.architectures = 架构
rpm.repository.multiple_groups = 该软件包可在多个组中使用。
owner.settings.cargo.rebuild.no_index = 无法重建,未初始化任何索引。
[secrets]
secrets=密钥

View File

@ -484,7 +484,7 @@ pulls.compare_changes=建立合併請求
pulls.filter_branch=過濾分支
pulls.no_results=未找到結果
pulls.create=建立合併請求
pulls.merged_title_desc=於 %[4]s 將 %[1]d 次代碼提交從 <code>%[2]s</code>合併至 <code>%[3]s</code>
pulls.merged_title_desc_few=於 %[4]s 將 %[1]d 次代碼提交從 <code>%[2]s</code>合併至 <code>%[3]s</code>
pulls.tab_conversation=對話內容
pulls.tab_commits=程式碼提交
pulls.reopen_to_merge=請重新開啟合併請求來完成合併操作。

View File

@ -54,7 +54,7 @@ organization=組織
mirror=鏡像
new_repo=新增儲存庫
new_migrate=遷移外部儲存庫
new_mirror=新鏡像
new_mirror=建立鏡像
new_fork=新增儲存庫 Fork
new_org=新增組織
new_project=新增專案
@ -141,8 +141,8 @@ filter.is_archived = 已歸檔
filter.not_archived = 未歸檔
filter.is_fork = 已派生
filter.not_fork = 未派生
filter.is_mirror = 映象
filter.not_mirror = 映象
filter.is_mirror = 鏡像
filter.not_mirror = 鏡像
filter.is_template = 模板
filter.not_template = 非模版
filter.public = 公開
@ -1592,8 +1592,8 @@ pulls.nothing_to_compare=這些分支的內容相同,無需建立合併請求
pulls.nothing_to_compare_and_allow_empty_pr=這些分支的內容相同,此合併請求將會是空白的。
pulls.has_pull_request=`已有介於這些分支間的合併請求:<a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create=建立合併請求
pulls.title_desc=請求將 %[1]d 次程式碼提交從 <code>%[2]s</code> 合併至 <code id="branch_target">%[3]s</code>
pulls.merged_title_desc=將 %[1]d 次提交從 <code>%[2]s</code> 合併至 <code>%[3]s</code> %[4]s
pulls.title_desc_few=請求將 %[1]d 次程式碼提交從 <code>%[2]s</code> 合併至 <code id="branch_target">%[3]s</code>
pulls.merged_title_desc_few=將 %[1]d 次提交從 <code>%[2]s</code> 合併至 <code>%[3]s</code> %[4]s
pulls.change_target_branch_at=`將目標分支從 <b>%s</b> 更改為 <b>%s</b> %s`
pulls.tab_conversation=對話內容
pulls.tab_commits=程式碼提交

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 70 70" class="svg gitea-open-with-jetbrains" width="16" height="16" aria-hidden="true"><linearGradient id="gitea-open-with-jetbrains__a" x1=".79" x2="33.317" y1="40.089" y2="40.089" gradientUnits="userSpaceOnUse"><stop offset=".258" style="stop-color:#f97a12"/><stop offset=".459" style="stop-color:#b07b58"/><stop offset=".724" style="stop-color:#577bae"/><stop offset=".91" style="stop-color:#1e7ce5"/><stop offset="1" style="stop-color:#087cfa"/></linearGradient><path d="M17.7 54.6.8 41.2l8.4-15.6L33.3 35z" style="fill:url(#gitea-open-with-jetbrains__a)"/><linearGradient id="gitea-open-with-jetbrains__b" x1="25.767" x2="79.424" y1="24.88" y2="54.57" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#f97a12"/><stop offset=".072" style="stop-color:#cb7a3e"/><stop offset=".154" style="stop-color:#9e7b6a"/><stop offset=".242" style="stop-color:#757b91"/><stop offset=".334" style="stop-color:#537bb1"/><stop offset=".432" style="stop-color:#387ccc"/><stop offset=".538" style="stop-color:#237ce0"/><stop offset=".655" style="stop-color:#147cef"/><stop offset=".792" style="stop-color:#0b7cf7"/><stop offset="1" style="stop-color:#087cfa"/></linearGradient><path d="m70 18.7-1.3 40.5L41.8 70 25.6 59.6 49.3 35 38.9 12.3l9.3-11.2z" style="fill:url(#gitea-open-with-jetbrains__b)"/><linearGradient id="gitea-open-with-jetbrains__c" x1="63.228" x2="48.29" y1="42.915" y2="-1.719" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#fe315d"/><stop offset=".078" style="stop-color:#cb417e"/><stop offset=".16" style="stop-color:#9e4e9b"/><stop offset=".247" style="stop-color:#755bb4"/><stop offset=".339" style="stop-color:#5365ca"/><stop offset=".436" style="stop-color:#386ddb"/><stop offset=".541" style="stop-color:#2374e9"/><stop offset=".658" style="stop-color:#1478f3"/><stop offset=".794" style="stop-color:#0b7bf8"/><stop offset="1" style="stop-color:#087cfa"/></linearGradient><path d="M70 18.7 48.7 43.9l-9.8-31.6 9.3-11.2z" style="fill:url(#gitea-open-with-jetbrains__c)"/><linearGradient id="gitea-open-with-jetbrains__d" x1="10.72" x2="55.524" y1="16.473" y2="90.58" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#fe315d"/><stop offset=".04" style="stop-color:#f63462"/><stop offset=".104" style="stop-color:#df3a71"/><stop offset=".167" style="stop-color:#c24383"/><stop offset=".291" style="stop-color:#ad4a91"/><stop offset=".55" style="stop-color:#755bb4"/><stop offset=".917" style="stop-color:#1d76ed"/><stop offset="1" style="stop-color:#087cfa"/></linearGradient><path d="M33.7 58.1 5.6 68.3l4.5-15.8L16 33.1 0 27.7 10.1 0l22 2.7 21.6 24.7z" style="fill:url(#gitea-open-with-jetbrains__d)"/><path d="M13.7 13.5h43.2v43.2H13.7z" style="fill:#000"/><path d="M17.7 48.6h16.2v2.7H17.7zM29.4 22.4v-3.3h-9v3.3H23v11.3h-2.6V37h9v-3.3h-2.5V22.4zM38 37.3c-1.4 0-2.6-.3-3.5-.8s-1.7-1.2-2.3-1.9l2.5-2.8c.5.6 1 1 1.5 1.3s1.1.5 1.7.5c.7 0 1.3-.2 1.8-.7.4-.5.6-1.2.6-2.3V19.1h4v11.7c0 1.1-.1 2-.4 2.8s-.7 1.4-1.3 2c-.5.5-1.2 1-2 1.2-.8.3-1.6.5-2.6.5" style="fill:#fff"/></svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-1 -1 34 34" class="svg gitea-open-with-vscode" width="16" height="16" aria-hidden="true"><path d="M30.9 3.4 24.3.3a2 2 0 0 0-2.3.4L9.4 12.2 3.9 8c-.5-.4-1.2-.4-1.7 0L.4 9.8c-.5.5-.5 1.4 0 2L5.2 16 .4 20.3c-.5.6-.5 1.5 0 2L2.2 24c.5.5 1.2.5 1.7 0l5.5-4L22 31.2a2 2 0 0 0 2.3.4l6.6-3.2a2 2 0 0 0 1.1-1.8V5.2a2 2 0 0 0-1.1-1.8M24 23.3 14.4 16 24 8.7z"/></svg>

After

Width:  |  Height:  |  Size: 406 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" clip-rule="evenodd" viewBox="0 0 16 16" class="svg gitea-open-with-vscodium" width="16" height="16" aria-hidden="true"><path fill-rule="nonzero" d="m10.2.2.5-.3c.3 0 .5.2.7.4l.2.8-.2 1-.8 2.4c-.3 1-.4 2 0 2.9l.8-2c.2 0 .4.1.4.3l-.3 1L9.2 13l3.1-2.9c.3-.2.7-.5.8-1a2 2 0 0 0-.3-1c-.2-.5-.5-.9-.6-1.4l.1-.7c.1-.1.3-.2.5-.1.2 0 .3.2.4.4.3.5.4 1.2.5 1.8l.6-1.2c0-.2.2-.4.4-.6l.4-.2c.2 0 .4.3.4.4v.6l-.8 1.6-1.4 1.8 1-.4c.2 0 .6.2.7.5 0 .2 0 .4-.2.5-.3.2-.6.2-1 .2-1 0-2.2.6-2.9 1.4L9.6 15c-.4.4-.9 1-1.4.8-.8-.1-.8-1.3-1-1.8 0-.3-.2-.6-.4-.7-.3-.2-.5-.3-.8-.3-.6-.1-1.2 0-1.8-.2l-.8-.4-.4-.7c-.3-.6-.3-1.2-.5-1.8A4 4 0 0 0 1 8l-.4-.4v-.4c.2-.2.5-.2.7 0 .5.2.5.8 1 1.1V6.2s.3-.1.4 0l.2.5L3 9c.4-.4.6-1 .5-1.5L3.4 7l.3-.2c.2 0 .3.2.4.3v.7c0 .6-.3 1.1-.4 1.7-.2.4-.3 1-.1 1.4.1.5.5.9.9 1 .5.3 1.1.4 1.7.4-.4-.6-.7-1.2-.7-2 0-.7.4-1.3.6-2C6.3 7 5.7 5.8 4.8 5l-1.5-.7c-.4-.2-.7-.7-.7-1.2.3-.1.7 0 1 .1L5 4.5l.6.1c.2-.3 0-.6-.2-.8-.3-.5-1-.6-1.3-1a.9.9 0 0 1-.2-.8c0-.2.3-.4.5-.4.4 0 .7.3.9.5.8.8 1.2 1.8 1.4 3s0 2.5-.2 3.7c0 .3-.2.5-.1.8l.2.2c.2 0 .4 0 .5-.2.4-.3.8-.8.9-1.3l.1-1.2.1-.6.4-.2.3.3v.6c-.1.5-.2 1-.5 1.6a2 2 0 0 1-.6 1l-1 1c-.1.2-.2.6-.1.9 0 .2.2.4.4.5.4.2.8.2 1 0 .3-.1.5-.4.7-.6l.5-1.4.4-2.5C9.7 7 9.6 6 9 5.2c-.2-.4-.5-.7-1-1l-1-.8c-.2-.3-.4-.7-.3-1.2h.6c.4.1.7.4.9.8s.4.8.9 1l-1-2c-.1-.3-.3-.5-.2-.8 0-.2.2-.4.4-.4s.4.1.5.3l.2.5 1 3.1a4 4 0 0 0 .4-2.3L10 1V.2Z"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-1 -1 34 34" class="svg gitea-vscode" width="16" height="16" aria-hidden="true"><path d="M30.9 3.4 24.3.3a2 2 0 0 0-2.3.4L9.4 12.2 3.9 8c-.5-.4-1.2-.4-1.7 0L.4 9.8c-.5.5-.5 1.4 0 2L5.2 16 .4 20.3c-.5.6-.5 1.5 0 2L2.2 24c.5.5 1.2.5 1.7 0l5.5-4L22 31.2a2 2 0 0 0 2.3.4l6.6-3.2a2 2 0 0 0 1.1-1.8V5.2a2 2 0 0 0-1.1-1.8M24 23.3 14.4 16 24 8.7z"/></svg>

Before

Width:  |  Height:  |  Size: 396 B

46
renovate.json Normal file
View File

@ -0,0 +1,46 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:best-practices", ":approveMajorUpdates"],
"ignorePresets": [":semanticPrefixFixDepsChoreOthers", "docker:pinDigests", "helpers:pinGitHubActionDigests"],
"semanticCommits": "disabled",
"postUpdateOptions": ["gomodTidy", "gomodUpdateImportPaths", "npmDedupe"],
"platformAutomerge": false,
"packageRules": [
{
"description": "Require approval for go and python minor version",
"matchDepNames": ["go", "python"],
"matchUpdateTypes": ["minor"],
"dependencyDashboardApproval": true
},
{
"description": "Automerge renovate updates",
"matchDatasources": ["docker"],
"matchPackageNames": ["ghcr.io/visualon/renovate"],
"matchUpdateTypes": ["minor", "patch", "digest"],
"automerge": true
},
{
"description": "Update renovate only daily",
"matchDatasources": ["docker"],
"matchDepNames": ["ghcr.io/visualon/renovate"],
"extends": ["schedule:daily"]
},
{
"description": "Disable actions/cascading-pr for now <https://github.com/renovatebot/renovate/issues/28120>",
"matchDepNames": ["actions/cascading-pr"],
"matchManagers": ["github-actions"],
"enabled": false
}
],
"customManagers": [
{
"description": "Update go-version in forgejo workflows",
"customType": "regex",
"fileMatch": ["^.forgejo/workflows/.+\\.yml$"],
"matchStrings": ["\\s+go-version: ['\"]?(?<currentValue>.+?)['\"]?\\s"],
"depNameTemplate": "go",
"datasourceTemplate": "golang-version",
"versioningTemplate": "go-mod-directive"
}
]
}

View File

@ -311,7 +311,7 @@ func (ar artifactRoutes) comfirmUploadArtifact(ctx *ArtifactContext) {
}
artifactName := ctx.Req.URL.Query().Get("artifactName")
if artifactName == "" {
log.Error("Error artifact name is empty")
log.Warn("Error artifact name is empty")
ctx.Error(http.StatusBadRequest, "Error artifact name is empty")
return
}

View File

@ -61,7 +61,7 @@ func validateArtifactHash(ctx *ArtifactContext, artifactName string) bool {
if paramHash == artifactHash {
return true
}
log.Error("Invalid artifact hash: %s", paramHash)
log.Warn("Invalid artifact hash: %s", paramHash)
ctx.Error(http.StatusBadRequest, "Invalid artifact hash")
return false
}

View File

@ -359,7 +359,7 @@ func (r *artifactV4Routes) finalizeArtifact(ctx *ArtifactContext) {
checksum = req.Hash.Value
}
if err := mergeChunksForArtifact(ctx, chunks, r.fs, artifact, checksum); err != nil {
log.Error("Error merge chunks: %v", err)
log.Warn("Error merge chunks: %v", err)
ctx.Error(http.StatusInternalServerError, "Error merge chunks")
return
}

View File

@ -49,7 +49,10 @@ var (
func apiError(ctx *context.Context, status int, obj any) {
helper.LogAndProcessError(ctx, status, obj, func(message string) {
// The maven client does not present the error message to the user. Log it for users with access to server logs.
if status == http.StatusBadRequest || status == http.StatusInternalServerError {
switch status {
case http.StatusBadRequest:
log.Warn(message)
case http.StatusInternalServerError:
log.Error(message)
}

View File

@ -14,6 +14,7 @@ import (
"code.gitea.io/gitea/modules/activitypub"
"code.gitea.io/gitea/modules/httplib"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
gitea_context "code.gitea.io/gitea/services/context"
@ -89,7 +90,8 @@ func verifyHTTPSignatures(ctx *gitea_context.APIContext) (authenticated bool, er
func ReqHTTPSignature() func(ctx *gitea_context.APIContext) {
return func(ctx *gitea_context.APIContext) {
if authenticated, err := verifyHTTPSignatures(ctx); err != nil {
ctx.ServerError("verifyHttpSignatures", err)
log.Warn("verifyHttpSignatures failed: %v", err)
ctx.Error(http.StatusBadRequest, "reqSignature", "request signature verification failed")
} else if !authenticated {
ctx.Error(http.StatusForbidden, "reqSignature", "request signature verification failed")
}

View File

@ -10,7 +10,6 @@ import (
activities_model "code.gitea.io/gitea/models/activities"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/services/context"
"code.gitea.io/gitea/services/convert"
@ -201,7 +200,6 @@ func ReadRepoNotifications(ctx *context.APIContext) {
if !ctx.FormBool("all") {
statuses := ctx.FormStrings("status-types")
opts.Status = statusStringsToNotificationStatuses(statuses, []string{"unread"})
log.Error("%v", opts.Status)
}
nl, err := db.Find[activities_model.Notification](ctx, opts)
if err != nil {

View File

@ -55,6 +55,7 @@ func UpdateUserSettings(ctx *context.APIContext) {
DiffViewStyle: optional.FromPtr(form.DiffViewStyle),
KeepEmailPrivate: optional.FromPtr(form.HideEmail),
KeepActivityPrivate: optional.FromPtr(form.HideActivity),
EnableRepoUnitHints: optional.FromPtr(form.EnableRepoUnitHints),
}
if err := user_service.UpdateUser(ctx, ctx.Doer, opts); err != nil {
ctx.InternalServerError(err)

View File

@ -7,11 +7,11 @@ package admin
import (
"net/http"
"net/url"
"strconv"
"strings"
system_model "code.gitea.io/gitea/models/system"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/container"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/json"
"code.gitea.io/gitea/modules/log"
@ -24,7 +24,10 @@ import (
"gitea.com/go-chi/session"
)
const tplConfig base.TplName = "admin/config"
const (
tplConfig base.TplName = "admin/config"
tplConfigSettings base.TplName = "admin/config_settings"
)
// SendTestMail send test mail to confirm mail service is OK
func SendTestMail(ctx *context.Context) {
@ -98,8 +101,9 @@ func shadowPassword(provider, cfgItem string) string {
// Config show admin config page
func Config(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("admin.config")
ctx.Data["Title"] = ctx.Tr("admin.config_summary")
ctx.Data["PageIsAdminConfig"] = true
ctx.Data["PageIsAdminConfigSummary"] = true
ctx.Data["CustomConf"] = setting.CustomConf
ctx.Data["AppUrl"] = setting.AppURL
@ -161,23 +165,70 @@ func Config(ctx *context.Context) {
ctx.Data["Loggers"] = log.GetManager().DumpLoggers()
config.GetDynGetter().InvalidateCache()
ctx.Data["SystemConfig"] = setting.Config()
prepareDeprecatedWarningsAlert(ctx)
ctx.HTML(http.StatusOK, tplConfig)
}
func ConfigSettings(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("admin.config_settings")
ctx.Data["PageIsAdminConfig"] = true
ctx.Data["PageIsAdminConfigSettings"] = true
ctx.Data["DefaultOpenWithEditorAppsString"] = setting.DefaultOpenWithEditorApps().ToTextareaString()
ctx.HTML(http.StatusOK, tplConfigSettings)
}
func ChangeConfig(ctx *context.Context) {
key := strings.TrimSpace(ctx.FormString("key"))
value := ctx.FormString("value")
cfg := setting.Config()
allowedKeys := container.SetOf(cfg.Picture.DisableGravatar.DynKey(), cfg.Picture.EnableFederatedAvatar.DynKey())
if !allowedKeys.Contains(key) {
marshalBool := func(v string) (string, error) {
if b, _ := strconv.ParseBool(v); b {
return "true", nil
}
return "false", nil
}
marshalOpenWithApps := func(value string) (string, error) {
lines := strings.Split(value, "\n")
var openWithEditorApps setting.OpenWithEditorAppsType
for _, line := range lines {
line = strings.TrimSpace(line)
if line == "" {
continue
}
displayName, openURL, ok := strings.Cut(line, "=")
displayName, openURL = strings.TrimSpace(displayName), strings.TrimSpace(openURL)
if !ok || displayName == "" || openURL == "" {
continue
}
openWithEditorApps = append(openWithEditorApps, setting.OpenWithEditorApp{
DisplayName: strings.TrimSpace(displayName),
OpenURL: strings.TrimSpace(openURL),
})
}
b, err := json.Marshal(openWithEditorApps)
if err != nil {
return "", err
}
return string(b), nil
}
marshallers := map[string]func(string) (string, error){
cfg.Picture.DisableGravatar.DynKey(): marshalBool,
cfg.Picture.EnableFederatedAvatar.DynKey(): marshalBool,
cfg.Repository.OpenWithEditorApps.DynKey(): marshalOpenWithApps,
}
marshaller, hasMarshaller := marshallers[key]
if !hasMarshaller {
ctx.JSONError(ctx.Tr("admin.config.set_setting_failed", key))
return
}
if err := system_model.SetSettings(ctx, map[string]string{key: value}); err != nil {
log.Error("set setting failed: %v", err)
marshaledValue, err := marshaller(value)
if err != nil {
ctx.JSONError(ctx.Tr("admin.config.set_setting_failed", key))
return
}
if err = system_model.SetSettings(ctx, map[string]string{key: marshaledValue}); err != nil {
ctx.JSONError(ctx.Tr("admin.config.set_setting_failed", key))
return
}

View File

@ -35,12 +35,11 @@ func Code(ctx *context.Context) {
language := ctx.FormTrim("l")
keyword := ctx.FormTrim("q")
queryType := ctx.FormTrim("t")
isFuzzy := queryType != "match"
isFuzzy := ctx.FormOptionalBool("fuzzy").ValueOrDefault(true)
ctx.Data["Keyword"] = keyword
ctx.Data["Language"] = language
ctx.Data["queryType"] = queryType
ctx.Data["IsFuzzy"] = isFuzzy
ctx.Data["PageIsViewCode"] = true
if keyword == "" {

View File

@ -203,7 +203,7 @@ func SearchCommits(ctx *context.Context) {
ctx.Data["Keyword"] = query
if all {
ctx.Data["All"] = "checked"
ctx.Data["All"] = true
}
ctx.Data["Username"] = ctx.Repo.Owner.Name
ctx.Data["Reponame"] = ctx.Repo.Repository.Name

View File

@ -21,12 +21,11 @@ func Search(ctx *context.Context) {
language := ctx.FormTrim("l")
keyword := ctx.FormTrim("q")
queryType := ctx.FormTrim("t")
isFuzzy := queryType != "match"
isFuzzy := ctx.FormOptionalBool("fuzzy").ValueOrDefault(true)
ctx.Data["Keyword"] = keyword
ctx.Data["Language"] = language
ctx.Data["queryType"] = queryType
ctx.Data["IsFuzzy"] = isFuzzy
ctx.Data["PageIsViewCode"] = true
if keyword == "" {
@ -34,7 +33,7 @@ func Search(ctx *context.Context) {
return
}
ctx.Data["SourcePath"] = ctx.Repo.Repository.Link()
ctx.Data["Repo"] = ctx.Repo.Repository
page := ctx.FormInt("page")
if page <= 0 {
@ -42,7 +41,7 @@ func Search(ctx *context.Context) {
}
if setting.Indexer.RepoIndexerEnabled {
ctx.Data["CodeIndexerEnabled"] = true
ctx.Data["CodeIndexerDisabled"] = false
total, searchResults, searchResultLanguages, err := code_indexer.PerformSearch(ctx, &code_indexer.SearchOptions{
RepoIDs: []int64{ctx.Repo.Repository.ID},
@ -78,7 +77,7 @@ func Search(ctx *context.Context) {
return
}
ctx.Data["CodeIndexerEnabled"] = false
ctx.Data["CodeIndexerDisabled"] = true
ctx.Data["SearchResults"] = data
pager := context.NewPagination(len(data), setting.UI.RepoSearchPagingNum, page, 5)

View File

@ -214,9 +214,10 @@ func createWebhook(ctx *context.Context, params webhookParams) {
return
}
ctx.Data["BaseLink"] = orCtx.LinkNew
ctx.Data["BaseLinkNew"] = orCtx.LinkNew
if ctx.HasError() {
ctx.HTML(http.StatusOK, orCtx.NewTemplate)
ctx.HTML(http.StatusUnprocessableEntity, orCtx.NewTemplate)
return
}
@ -271,7 +272,7 @@ func editWebhook(ctx *context.Context, params webhookParams) {
ctx.Data["Webhook"] = w
if ctx.HasError() {
ctx.HTML(http.StatusOK, orCtx.NewTemplate)
ctx.HTML(http.StatusUnprocessableEntity, orCtx.NewTemplate)
return
}

View File

@ -44,6 +44,7 @@ import (
repo_module "code.gitea.io/gitea/modules/repository"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/svg"
"code.gitea.io/gitea/modules/typesniffer"
"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/routers/web/feed"
@ -812,7 +813,7 @@ func Home(ctx *context.Context) {
return
}
renderCode(ctx)
renderHomeCode(ctx)
}
// LastCommit returns lastCommit data for the provided branch/tag/commit and directory (in url) and filenames in body
@ -932,9 +933,33 @@ func renderRepoTopics(ctx *context.Context) {
ctx.Data["Topics"] = topics
}
func renderCode(ctx *context.Context) {
func prepareOpenWithEditorApps(ctx *context.Context) {
var tmplApps []map[string]any
apps := setting.Config().Repository.OpenWithEditorApps.Value(ctx)
if len(apps) == 0 {
apps = setting.DefaultOpenWithEditorApps()
}
for _, app := range apps {
schema, _, _ := strings.Cut(app.OpenURL, ":")
var iconHTML template.HTML
if schema == "vscode" || schema == "vscodium" || schema == "jetbrains" {
iconHTML = svg.RenderHTML(fmt.Sprintf("gitea-open-with-%s", schema), 16, "gt-mr-3")
} else {
iconHTML = svg.RenderHTML("gitea-git", 16, "gt-mr-3") // TODO: it could support user's customized icon in the future
}
tmplApps = append(tmplApps, map[string]any{
"DisplayName": app.DisplayName,
"OpenURL": app.OpenURL,
"IconHTML": iconHTML,
})
}
ctx.Data["OpenWithEditorApps"] = tmplApps
}
func renderHomeCode(ctx *context.Context) {
ctx.Data["PageIsViewCode"] = true
ctx.Data["RepositoryUploadEnabled"] = setting.Repository.Upload.Enabled
prepareOpenWithEditorApps(ctx)
if ctx.Repo.Commit == nil || ctx.Repo.Repository.IsEmpty || ctx.Repo.Repository.IsBroken() {
showEmpty := true

View File

@ -40,12 +40,11 @@ func CodeSearch(ctx *context.Context) {
language := ctx.FormTrim("l")
keyword := ctx.FormTrim("q")
queryType := ctx.FormTrim("t")
isFuzzy := queryType != "match"
isFuzzy := ctx.FormOptionalBool("fuzzy").ValueOrDefault(true)
ctx.Data["Keyword"] = keyword
ctx.Data["Language"] = language
ctx.Data["queryType"] = queryType
ctx.Data["IsFuzzy"] = isFuzzy
ctx.Data["IsCodePage"] = true
if keyword == "" {

View File

@ -393,6 +393,25 @@ func UpdateUserLang(ctx *context.Context) {
ctx.Redirect(setting.AppSubURL + "/user/settings/appearance")
}
// UpdateUserHints updates a user's hints settings
func UpdateUserHints(ctx *context.Context) {
form := web.GetForm(ctx).(*forms.UpdateHintsForm)
ctx.Data["Title"] = ctx.Tr("settings")
ctx.Data["PageIsSettingsAppearance"] = true
opts := &user_service.UpdateOptions{
EnableRepoUnitHints: optional.Some(form.EnableRepoUnitHints),
}
if err := user_service.UpdateUser(ctx, ctx.Doer, opts); err != nil {
ctx.ServerError("UpdateUser", err)
return
}
log.Trace("User settings updated: %s", ctx.Doer.Name)
ctx.Flash.Success(translation.NewLocale(ctx.Doer.Language).TrString("settings.update_hints_success"))
ctx.Redirect(setting.AppSubURL + "/user/settings/appearance")
}
// UpdateUserHiddenComments update a user's shown comment types
func UpdateUserHiddenComments(ctx *context.Context) {
err := user_model.SetUserSetting(ctx, ctx.Doer.ID, user_model.SettingsKeyHiddenCommentTypes, forms.UserHiddenCommentTypesFromRequest(ctx).String())

View File

@ -568,6 +568,7 @@ func registerRoutes(m *web.Route) {
m.Group("/appearance", func() {
m.Get("", user_setting.Appearance)
m.Post("/language", web.Bind(forms.UpdateLanguageForm{}), user_setting.UpdateUserLang)
m.Post("/hints", web.Bind(forms.UpdateHintsForm{}), user_setting.UpdateUserHints)
m.Post("/hidden_comments", user_setting.UpdateUserHiddenComments)
m.Post("/theme", web.Bind(forms.UpdateThemeForm{}), user_setting.UpdateUIThemePost)
})
@ -691,6 +692,7 @@ func registerRoutes(m *web.Route) {
m.Get("", admin.Config)
m.Post("", admin.ChangeConfig)
m.Post("/test_mail", admin.SendTestMail)
m.Get("/settings", admin.ConfigSettings)
})
m.Group("/monitor", func() {

View File

@ -6,6 +6,7 @@ package actions
import (
"bytes"
"context"
"errors"
"fmt"
"slices"
"strings"
@ -25,6 +26,7 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/util"
webhook_module "code.gitea.io/gitea/modules/webhook"
"code.gitea.io/gitea/services/convert"
@ -190,6 +192,12 @@ func notify(ctx context.Context, input *notifyInput) error {
baseRef := git.BranchPrefix + input.PullRequest.BaseBranch
baseCommit, err := gitRepo.GetCommit(baseRef)
if err != nil {
if prp, ok := input.Payload.(*api.PullRequestPayload); ok && errors.Is(err, util.ErrNotExist) {
// the baseBranch was deleted and the PR closed: the action can be skipped
if prp.Action == api.HookIssueClosed {
return nil
}
}
return fmt.Errorf("gitRepo.GetCommit: %w", err)
}
baseWorkflows, _, err := actions_module.DetectWorkflows(gitRepo, baseCommit, input.Event, input.Payload)

View File

@ -192,6 +192,7 @@ func Contexter() func(next http.Handler) http.Handler {
httpcache.SetCacheControlInHeader(ctx.Resp.Header(), 0, "no-transform")
ctx.Resp.Header().Set(`X-Frame-Options`, setting.CORSConfig.XFrameOptions)
ctx.Data["SystemConfig"] = setting.Config()
ctx.Data["CsrfToken"] = ctx.Csrf.GetToken()
ctx.Data["CsrfTokenHtml"] = template.HTML(`<input type="hidden" name="_csrf" value="` + ctx.Data["CsrfToken"].(string) + `">`)

View File

@ -53,5 +53,5 @@ func (p *Pagination) SetDefaultParams(ctx *Context) {
p.AddParam(ctx, "sort", "SortType")
p.AddParam(ctx, "q", "Keyword")
// do not add any more uncommon params here!
p.AddParam(ctx, "t", "queryType")
p.AddParam(ctx, "fuzzy", "IsFuzzy")
}

View File

@ -86,15 +86,16 @@ func toUser(ctx context.Context, user *user_model.User, signed, authed bool) *ap
// User2UserSettings return UserSettings based on a user
func User2UserSettings(user *user_model.User) api.UserSettings {
return api.UserSettings{
FullName: user.FullName,
Website: user.Website,
Location: user.Location,
Language: user.Language,
Description: user.Description,
Theme: user.Theme,
HideEmail: user.KeepEmailPrivate,
HideActivity: user.KeepActivityPrivate,
DiffViewStyle: user.DiffViewStyle,
FullName: user.FullName,
Website: user.Website,
Location: user.Location,
Language: user.Language,
Description: user.Description,
Theme: user.Theme,
HideEmail: user.KeepEmailPrivate,
HideActivity: user.KeepActivityPrivate,
DiffViewStyle: user.DiffViewStyle,
EnableRepoUnitHints: user.EnableRepoUnitHints,
}
}

View File

@ -234,6 +234,11 @@ type UpdateLanguageForm struct {
Language string
}
// UpdateHintsForm form for updating user hint settings
type UpdateHintsForm struct {
EnableRepoUnitHints bool
}
// Validate validates the fields
func (f *UpdateLanguageForm) Validate(req *http.Request, errs binding.Errors) binding.Errors {
ctx := context.GetValidateContext(req)

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