Compare commits

...

14 commits

Author SHA1 Message Date
monstorix 492199b104
Translated using Weblate (Chinese (Simplified))
Currently translated at 92.0% (3269 of 3551 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/zh_Hans/
2024-04-28 20:48:39 +00:00
0ko 9b3a86aa48
Translated using Weblate (Russian)
Currently translated at 92.0% (3270 of 3551 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/ru/
2024-04-28 20:48:39 +00:00
Panagiotis \"Ivory\" Vasilopoulos 2f486a0a54
Translated using Weblate (Greek)
Currently translated at 96.7% (3436 of 3551 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/el/
2024-04-28 20:48:39 +00:00
zyachel f6fc68a234
Added translation using Weblate (Hindi) 2024-04-28 20:48:39 +00:00
Wuzzy db88c56f41
Translated using Weblate (German)
Currently translated at 100.0% (3551 of 3551 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/de/
2024-04-28 20:48:39 +00:00
Fjuro 304db0519b
Translated using Weblate (Czech)
Currently translated at 100.0% (3551 of 3551 strings)

Translation: Forgejo/forgejo
Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/cs/
2024-04-28 20:48:39 +00:00
Earl Warren 27fa12427c Merge pull request 'replaced link to gitea docu' (#3503) from mainboarder/forgejo:repo-mirror into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/3503
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-04-28 14:05:18 +00:00
Beowulf c54896ba70 Show repo activities even if only code unit active or git repo is empty but issue is active (#3455)
When all repository units are deactivated except for the code unit, the activity tab will not be shown.
Since the activities tab also shows contributing stats, it would be good to show the activities tab also when only code is active.
This commit changes the behavior when the activities tab is shown.
Previous it would only be shown when Issues, Pull-Requests or Releases are activated. Now it would additionally be shown when the code unit is activated.

Refs: #3429

| Before (Code + Issues - Owner) | Before (Code - Viewer) | After (Code + Issues - Owner) | After (Code - Viewer) |
| -- | -- | -- | -- |
| ![image](/attachments/2af997bc-1f38-48c6-bdf3-cfbd7087b220)  | ![image](/attachments/ef1797f0-5c9a-4a1a-ba82-749f3ab4f403) | ![image](/attachments/fd28a96c-04ca-407e-a70d-d28b393f223d) | ![image](/attachments/2cd0d559-a6de-4ca0-a736-29c5fea81b5a) |
|  | `/activity` returns 404 for everyone | ![image](/attachments/e0e97d8f-48cb-4c16-a505-1fafa46c4b8e)  | - |

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/3455
Reviewed-by: Otto <otto@codeberg.org>
Co-authored-by: Beowulf <beowulf@beocode.eu>
Co-committed-by: Beowulf <beowulf@beocode.eu>
2024-04-28 13:47:52 +00:00
Earl Warren de9d498109 Merge pull request 'Fix issue watch button' (#3509) from fnetx/fix-issue-watch into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/3509
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-04-28 12:45:27 +00:00
Otto 641ddbbbb9 Merge pull request 'Release notes: Limit database max connections by default' (#3500) from fnetx/release-notes-maxconn into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/3500
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2024-04-28 11:19:22 +00:00
Otto Richter bc8860ce32 Move watching sub-template to sidebar folder 2024-04-28 12:56:28 +02:00
Otto Richter 4b8f0d0972 Revert "Unify watching template"
This reverts commit 47ef51d51e.
2024-04-28 12:48:17 +02:00
Robin Kloppe 10cd0f3992 replaced link to gitea docu 2024-04-27 23:27:57 +02:00
Otto Richter 5c76c37a50 Release notes for Limit database max connections by default 2024-04-27 22:03:25 +02:00
16 changed files with 213 additions and 65 deletions

View file

@ -3439,6 +3439,7 @@ config_summary = Souhrn
config.open_with_editor_app_help = Editory v nabídce „Otevřít pomocí“ v nabídce klonování. Ponechte prázdné pro použití výchozího editoru (zobrazíte jej rozšířením).
config_settings = Nastavení
auths.tip.gitlab_new = Zaregistrujte si novou aplikaci na https://gitlab.com/-/profile/applications
auths.default_domain_name = Výchozí doménové jméno použité pro e-mailovou adresu
[action]
create_repo=vytvořil/a repozitář <a href="%s">%s</a>

View file

@ -3406,6 +3406,7 @@ config_settings = Einstellungen
config.open_with_editor_app_help = Die „Öffnen mit“-Editoren für das Klonmenü. Falls es leer gelassen wird, wird der Standardwert benutzt. Erweitern, um den Standardwert zu sehen.
config_summary = Zusammenfassung
auths.tip.gitlab_new = Registriere eine neue Anwendung auf https://gitlab.com/-/profile/applications
auths.default_domain_name = Standarddomainname, der für die E-Mail-Adresse benutzt wird
[action]

View file

@ -144,12 +144,12 @@ value=Τιμή
toggle_menu = Μενού
confirm_delete_artifact = Είστε βέβαιοι πως θέλετε να διαγράψετε το προϊόν «%s»;
filter = Φίλτρο
filter.is_archived = Αρχειοθετημένο
filter.is_archived = Αρχειοθετημένα
filter.clear = Απενεργοποίηση φίλτρου
filter.not_archived = Μη αρχειοθετημένα
filter.is_template = Πρότυπο
filter.public = Δημόσιο
filter.private = Ιδιωτικό
filter.is_template = Πρότυπα
filter.public = Δημόσια
filter.private = Ιδιωτικά
filter.not_fork = Εξαίρεση fork
filter.is_mirror = Είδωλα
filter.not_mirror = Εξαίρεση ειδώλων
@ -169,7 +169,7 @@ number_of_contributions_in_the_last_12_months=%s συνεισφορές τους
contributions_zero=Χωρίς συνεισφορές
less=Λιγότερα
more=Περισσότερα
contributions_format = {contributions} στις {day} του μήνα {month} του έτους {year}
contributions_format = {contributions} στις {day} {month} του έτους {year}
contributions_one = συνεισφορά
contributions_few = συνεισφορές
@ -497,7 +497,7 @@ issue.action.reopen=Ο/Η <b>@%[1]s</b> άνοιξε ξανά το #%[2]d.
issue.action.merge=Ο/Η <b>@%[1]s</b> συγχώνευσε το #%[2]d στο %[3]s.
issue.action.approve=<b>@%[1]s</b> ενέκρινε αυτό το pull request.
issue.action.reject=<b>@%[1]s</b> ζήτησε αλλαγές σε αυτό το pull request.
issue.action.review=<b>@%[1]s</b> σχολίασε αυτό το pull request.
issue.action.review=<b>@%[1]s</b> άφησε σχόλιο σε αυτό το pull request.
issue.action.review_dismissed=<b>@%[1]s</b> απέρριψε την τελευταία αναθεώρηση από %[2]s για αυτό το pull request.
issue.action.ready_for_review=Ο/Η <b>@%[1]s</b> επισήμανε πως αυτό το pull request είναι έτοιμο για αξιολόγηση.
issue.action.new=Ο/Η <b>@%[1]s</b> δημιούργησε το #%[2]d.
@ -647,9 +647,9 @@ follow=Ακολούθηση
unfollow=Να μην ακολουθώ
user_bio=Βιογραφικό
disabled_public_activity=Αυτός ο χρήστης έχει απενεργοποιήσει τη δημόσια προβολή της δραστηριότητας του.
email_visibility.limited=Η διεύθυνση email σας είναι ορατή σε όλους τους ταυτοποιημένους χρήστες
email_visibility.limited=Η διεύθυνση email σας είναι ορατή σε κάθε ταυτοποιημένο χρήστη
email_visibility.private=Η διεύθυνση email σας είναι ορατή μόνο σε εσάς και στους διαχειριστές
show_on_map=Δείτε το μέρος αυτό σε έναν χάρτη
show_on_map=Προβολή σε χάρτη
settings=Ρυθμίσεις χρήστη
form.name_reserved=Το όνομα χρήστη «%s» είναι δεσμευμένο.
@ -1183,7 +1183,7 @@ fork_from_self=Δεν μπορείτε να κάνετε fork σε ένα απο
fork_guest_user=Συνδεθείτε για να κάνετε fork αυτό το αποθετήριο.
watch_guest_user=Συνδεθείτε για να παρακολουθήσετε αυτό το αποθετήριο.
star_guest_user=Συνδεθείτε για να δώσετε ένα αστέρι σε αυτό το αποθετήριο.
unwatch=Μη Παρακολούθηση
unwatch=Παύση ακολούθησης
watch=Παρακολούθηση
unstar=Όχι Αστέρι
star=Αστέρι
@ -1475,7 +1475,7 @@ issues.change_title_at=`άλλαξε το τίτλο από <b><strike>%s</strik
issues.change_ref_at=`άλλαξε την αναφορά από <b><strike>%s</strike></b> σε <b>%s</b> %s`
issues.remove_ref_at=`αφαίρεση την αναφορά <b>%s</b> %s`
issues.add_ref_at=`πρόσθεσε την αναφορά <b>%s</b> %s`
issues.delete_branch_at=`διέγραψε το κλάδο <b>%s</b> %s`
issues.delete_branch_at=`διέγραψε τον κλάδο <b>%s</b> %s`
issues.filter_label=Σήμα
issues.filter_label_exclude=`Χρησιμοποιήστε <code>alt</code> + <code>κάντε κλικ/Enter</code> για να εξαιρέσετε τις σημάνσεις`
issues.filter_label_no_select=Όλα τα σήματα
@ -1503,8 +1503,8 @@ issues.filter_type.reviewed_by_you=Ελέγχθηκε από εσάς
issues.filter_sort=Ταξινόμηση
issues.filter_sort.latest=Νεότερα
issues.filter_sort.oldest=Παλαιότερα
issues.filter_sort.recentupdate=Ενημερώθηκαν πρόσφατα
issues.filter_sort.leastupdate=Ενημερώθηκαν παλαιότερα
issues.filter_sort.recentupdate=Πρόσφατη δραστηριότητα
issues.filter_sort.leastupdate=Ανενεργή δραστηριότητα
issues.filter_sort.mostcomment=Περισσότερα σχόλια
issues.filter_sort.leastcomment=Λιγότερα σχόλια
issues.filter_sort.nearduedate=Πλησιέστερη ημερομηνία παράδοσης
@ -1529,9 +1529,9 @@ pulls.merged_by_fake=από %[2]s συγχωνεύθηκε %[1]s
issues.closed_by=από <a href="%[2]s">%[3]s</a> έκλεισαν %[1]s
issues.opened_by_fake=άνοιξε το %[1]s από %[2]s
issues.closed_by_fake=από %[2]s έκλεισαν %[1]s
issues.previous=Προηγούμενο
issues.next=Επόμενο
issues.open_title=Ανοικτό
issues.previous=Προηγούμενη
issues.next=Επόμενη
issues.open_title=Ανοιχτά
issues.closed_title=Κλειστά
issues.draft_title=Προσχέδιο
issues.num_comments_1=%d σχόλιο
@ -1602,8 +1602,8 @@ issues.label_deletion_desc=Η διαγραφή ενός σήματος θα το
issues.label_deletion_success=Το σήμα έχει διαγραφεί.
issues.label.filter_sort.alphabetically=Αλφαβητικά
issues.label.filter_sort.reverse_alphabetically=Αντίστροφα αλφαβητικά
issues.label.filter_sort.by_size=Μικρότερο μέγεθος
issues.label.filter_sort.reverse_by_size=Μεγαλύτερο μέγεθος
issues.label.filter_sort.by_size=Μικρότερου μεγέθους
issues.label.filter_sort.reverse_by_size=Μεγαλύτερου μεγέθους
issues.num_participants_few=%d Συμμετέχοντες
issues.attachment.open_tab=`Πατήστε εδώ για να ανοίξετε το «%s» σε μια νέα καρτέλα`
issues.attachment.download=`Πατήστε εδώ για να κατεβάσετε το «%s»`
@ -1944,7 +1944,7 @@ wiki=Wiki
wiki.welcome=Καλώς ήρθατε στο Wiki.
wiki.welcome_desc=Το wiki σας επιτρέπει να γράψετε και να μοιραστείτε τεκμηριώσεις (documentation) με άλλους συνεργάτες.
wiki.desc=Γράψτε και μοιραστείτε τεκμηριώσεις με συνεργάτες.
wiki.create_first_page=Δημιουργία της πρώτης σελίδας
wiki.create_first_page=Δημιουργία πρώτης σελίδας
wiki.page=Σελίδα
wiki.filter_page=Φιλτράρισμα σελίδας
wiki.new_page=Σελίδα
@ -1981,7 +1981,7 @@ activity.active_prs_count_1=<strong>%d</strong> ενεργό pull request
activity.active_prs_count_n=<strong>%d</strong> ενεργά pull request
activity.merged_prs_count_1=Συγχωνευμένο pull request
activity.merged_prs_count_n=Συγχωνευμένα pull request
activity.opened_prs_count_1=Συνιστώμενο pull request
activity.opened_prs_count_1=Νέα pull request
activity.opened_prs_count_n=Συνιστώμενα pull requests
activity.title.user_1=%d χρήστη
activity.title.user_n=%d χρήστες
@ -1993,7 +1993,7 @@ activity.merged_prs_label=Συγχωνευμένο
activity.opened_prs_label=Προτεινόμενα
activity.active_issues_count_1=<strong>%d</strong> ενεργό ζήτημα
activity.active_issues_count_n=<strong>%d</strong> ενεργά ζητήματα
activity.closed_issues_count_1=Κλειστό ζήτημα
activity.closed_issues_count_1=Κλεισμένα ζητήματα
activity.closed_issues_count_n=Κλειστά ζητήματα
activity.title.issues_1=%d ζήτημα
activity.title.issues_n=%d ζητήματα
@ -2871,8 +2871,8 @@ emails=Email χρήστη
config=Διαμόρφωση
notices=Ειδοποιήσεις συστήματος
monitor=Παρακολούθηση
first_page=Πρώτο
last_page=Τελευταίο
first_page=Πρώτη
last_page=Τελευταία
total=Σύνολο: %d
settings=Ρυθμίσεις διαχειριστή
@ -3402,14 +3402,14 @@ self_check.database_collation_case_insensitive = Η βάση δεδομένων
[action]
create_repo=δημιούργησε το αποθετήριο <a href="%s">%s</a>
rename_repo=μετονόμασε το αποθετήριο από <code>%[1]s</code> σε <a href="%[2]s">%[3]s</a>
commit_repo=έκανε push στο <a href="%[2]s">%[3]s</a> σε <a href="%[1]s">%[4]s</a>
commit_repo=έκανε push στο <a href="%[2]s">%[3]s</a> του <a href="%[1]s">%[4]s</a>
create_issue=`άνοιξε το ζήτημα <a href="%[1]s">%[3]s#%[2]s</a>`
close_issue=`έκλεισε το ζήτημα <a href="%[1]s">%[3]s#%[2]s</a>`
reopen_issue=`άνοιξε ξανά το ζήτημα <a href="%[1]s">%[3]s#%[2]s</a>`
create_pull_request=`δημιούργησε το pull request <a href="%[1]s">%[3]s#%[2]s</a>`
close_pull_request=`έκλεισε pull request <a href="%[1]s">%[3]s#%[2]s</a>`
reopen_pull_request=`άνοιξε ξανά το pull request <a href="%[1]s">%[3]s#%[2]s</a>`
comment_issue=`σχολίασε το ζήτημα <a href="%[1]s">%[3]s#%[2]s</a>`
comment_issue=`άφησε σχόλιο στο ζήτημα <a href="%[1]s">%[3]s#%[2]s</a>`
comment_pull=`σχολίασε στο pull request <a href="%[1]s">%[3]s#%[2]s</a>`
merge_pull_request=`συγχώνευσε το pull request <a href="%[1]s">%[3]s#%[2]s</a>`
auto_merge_pull_request=`αυτόματη συγχώνευση του pull request <a href="%[1]s">%[3]s#%[2]s</a>`
@ -3770,7 +3770,7 @@ submodule=Υπομονάδα
code_search_unavailable = Η αναζήτηση κώδικα δεν είναι επί του παρόντος διαθέσιμη. Παρακαλώ επικοινωνήστε με τον διαχειριστή σας.
keyword_search_unavailable = Η αναζήτηση με την χρήση λέξεων-κλειδιών δεν είναι επί του παρόντος διαθέσιμη. Παρακαλώ επικοινωνήστε με τον διαχειριστή σας.
runner_kind = Αναζήτηση runner...
code_search_by_git_grep = Η αναζήτηση κώδικα εκτελείται με την χρήση της εντολής «git grep». Αν ο διαχειριστής σας ενεργοποιήσει ένα ευρετήριο για αποθετήρια («Repository Indexer»), ίσως να παρουσιαστούν καλύτερα αποτελέσματα.
code_search_by_git_grep = Για την αναζήτηση κώδικα, χρησιμοποιείται η εντολή «git grep». Ίσως να παρουσιαστούν καλύτερα αποτελέσματα, αν ο διαχειριστής σας ενεργοποιήσει ένα ευρετήριο για αποθετήρια («Repository Indexer»).
package_kind = Αναζήτηση πακέτων...
project_kind = Αναζήτηση έργων...
branch_kind = Αναζήτηση κλάδων...
@ -3780,7 +3780,7 @@ search = Αναζήτηση...
type_tooltip = Είδος αναζήτησης
fuzzy = Στο περίπου
fuzzy_tooltip = Να συμπεριληφθούν αποτελέσματα που μοιάζουν με τον όρο αναζήτησης
match = Ταιριαστά
match = Ακριβής
match_tooltip = Να συμπεριληφθούν αποτελέσματα που ταιριάζουν με τον όρο αναζήτησης
repo_kind = Αναζήτηση αποθετηρίων...
user_kind = Αναζήτηση χρηστών...

View file

@ -0,0 +1 @@

View file

@ -145,7 +145,7 @@ confirm_delete_artifact = Вы точно хотите удалить артеф
toggle_menu = Показать/скрыть меню
filter.not_archived = Не архивированные
filter = Фильтры
filter.clear = Очистить фильтры
filter.clear = Снять фильтры
filter.is_fork = Ответвления
filter.not_fork = Не ответвления
filter.is_mirror = Зеркала
@ -1895,15 +1895,15 @@ milestones.create_success=Этап «%s» создан.
milestones.edit=Редактировать этап
milestones.edit_subheader=Используйте лучшее описание контрольной точки, во избежание непонимания со стороны других людей.
milestones.cancel=Отмена
milestones.modify=Обновить этап
milestones.modify=Сохранить этап
milestones.edit_success=Этап «%s» обновлён.
milestones.deletion=Удалить этап
milestones.deletion_desc=Удаление этапа приведет к его удалению из всех связанных задач. Продолжить?
milestones.deletion_success=Этап успешно удалён.
milestones.filter_sort.earliest_due_data=Ближайший срок выполнения
milestones.filter_sort.latest_due_date=Поздний срок выполнения
milestones.filter_sort.least_complete=Менее полное
milestones.filter_sort.most_complete=Более полное
milestones.filter_sort.least_complete=Менее выполненные
milestones.filter_sort.most_complete=Более выполненные
milestones.filter_sort.most_issues=Больше задач
milestones.filter_sort.least_issues=Меньше задач
@ -2323,7 +2323,7 @@ settings.protected_branch.delete_rule=Удалить правило
settings.protected_branch_can_push=Разрешить отправку?
settings.protected_branch_can_push_yes=Вы можете выполнять отправку
settings.protected_branch_can_push_no=Вы не можете выполнять отправку
settings.branch_protection=Правила защиты ветки «<b>%s</b>»
settings.branch_protection=Правила доступа ветки «<b>%s</b>»
settings.protect_this_branch=Защитить эту ветку
settings.protect_this_branch_desc=Предотвращает удаление, ограничивает Push и слияние Git в ветку.
settings.protect_disable_push=Запретить отправку изменений
@ -2370,9 +2370,9 @@ settings.protect_unprotected_file_patterns=Шаблоны незащищённы
settings.protect_unprotected_file_patterns_desc=Незащищенные файлы, которые допускается изменять напрямую, если пользователь имеет право на запись, несмотря на ограничение отправки изменений. Можно указать несколько шаблонов, разделяя их точкой с запятой («;»). О синтаксисе шаблонов читайте в документации <a href="https://pkg.go.dev/github.com/gobwas/glob#Compile">github.com/gobwas/glob</a> . Примеры: <code>.drone.yml</code>, <code>/docs/**/*.txt</code>.
settings.add_protected_branch=Включить защиту
settings.delete_protected_branch=Отключить защиту
settings.update_protect_branch_success=Защита веток по правилу «%s» изменена.
settings.remove_protected_branch_success=Защита веток по правилу «%s» удалена.
settings.remove_protected_branch_failed=Не удалось удалить правило защиты веток «%s».
settings.update_protect_branch_success=Правила доступа веток «%s» изменена.
settings.remove_protected_branch_success=Правила доступа веток «%s» удалена.
settings.remove_protected_branch_failed=Не удалось удалить правило доступа веток «%s».
settings.protected_branch_deletion=Отключение защиты ветки
settings.protected_branch_deletion_desc=Любой пользователь с разрешениями на запись сможет выполнять push в эту ветку. Вы уверены?
settings.block_rejected_reviews=Блокировка слияния по отклоненным отзывам
@ -2452,7 +2452,7 @@ diff.browse_source=Просмотр исходного кода
diff.parent=родитель
diff.commit=коммит
diff.git-notes=Заметки
diff.data_not_available=Различия недоступны
diff.data_not_available=Различия отсутствуют или недоступны
diff.options_button=Опции Diff
diff.show_diff_stats=Показать статистику
diff.download_patch=Скачать .patch
@ -2626,7 +2626,7 @@ issues.blocked_by_user = Невозможно создать задачу в э
settings.new_owner_blocked_doer = Вы заблокированы новым владельцем.
settings.add_collaborator_blocked_them = Невозможно добавить соучастника, т.к. им заблокирован владелец репозитория.
pulls.blocked_by_changed_protected_files_1 = Этот запрос на слияние заблокирован, т.к. им изменяется защищённый файл:
object_format_helper = Формат объектов в репозитории. Невозможно изменить в дальнейшем. SHA1 даёт наибольшую совместимость.
object_format_helper = Формат объектов в репозитории. Невозможно изменить в дальнейшем. SHA1 имеет наибольшую совместимость.
pulls.blocked_by_outdated_branch = Этот запрос на слияние заблокирован, т.к. он устарел.
pulls.blocked_by_changed_protected_files_n = Этот запрос на слияние заблокирован, т.к. им изменяются защищённые файлы:
blame.ignore_revs.failed = Не удалось проигнорировать правки из <a href="%s">.git-blame-ignore-revs</a>.

View file

@ -638,6 +638,8 @@ Location = 地区
To = 分支名
AccessToken = 访问令牌
Description = 描述
Pronouns = 代称
Biography = 简历
[user]
change_avatar=修改头像
@ -2105,7 +2107,7 @@ settings.sync_mirror=立即同步
settings.pull_mirror_sync_in_progress=正在从远程 %s 拉取更改。
settings.push_mirror_sync_in_progress=正在推送变更到远程 %s 。
settings.site=网站
settings.update_settings=更新仓库设置
settings.update_settings=保存设置
settings.update_mirror_settings=更新镜像设置
settings.branches.switch_default_branch=切换默认分支
settings.branches.update_default_branch=更新默认分支
@ -2287,7 +2289,7 @@ settings.event_issue_assign=工单已分配
settings.event_issue_assign_desc=工单已被指派或取消指派。
settings.event_issue_label=工单已分类
settings.event_issue_label_desc=工单标签被更新或清除。
settings.event_issue_milestone=工单被收入里程碑中
settings.event_issue_milestone=工单被收入里程碑中
settings.event_issue_milestone_desc=工单被收入或取消收入里程碑中。
settings.event_issue_comment=工单评论
settings.event_issue_comment_desc=工单评论被创建、编辑或删除
@ -2737,6 +2739,16 @@ release.download_count_one = %s 下载
release.download_count_few = %s 下载
release.system_generated = 此附件是自动生成的。
pulls.ready_for_review = 准备好接受评审了吗?
settings.web_hook_name_sourcehut_builds = SourceHut 构建
settings.graphql_url = GraphQL URL 链接
settings.sourcehut_builds.access_token_helper = 已授予 JOBS:RW 权限的访问令牌。可在 meta.sr.ht 上生成标准的 <a target="_blank" rel="noopener noreferrer" href="%s">builds.sr.ht 令牌</a>或<a target="_blank" rel="noopener noreferrer" href="%s">带有密匙访问权限的 builds.sr.ht 令牌</a> 。
settings.matrix.access_token_helper = 推荐为此设立专门的 Matrix 账户。访问令牌可从 Element Web 客户端(在隐私/无痕模式选项卡中打开)> 用户菜单(左上角)> 所有设置 > 帮助及关于 > 高级 > 访问令牌(在主服务器 URL 下方)检索。获取完成后,请直接关闭隐私/无痕选项卡(注销会使令牌失效)。
settings.event_pull_request_enforcement = 执行
settings.sourcehut_builds.manifest_path = 构建清单路径
settings.sourcehut_builds.visibility = 作业可见性
settings.matrix.room_id_helper = 房间 ID 可从 Element Web 客户端 > 房间设置 > 高级 > 内部房间 ID 获得。例如:%s。
release.hide_archive_links_helper = 为此版本发布隐藏自动生成的源代码存档。例如,如果您准备自行上传。
release.hide_archive_links = 隐藏自动生成的存档
[graphs]
component_loading=正在加载 %s...
@ -3420,6 +3432,8 @@ auths.tips.gmail_settings = Gmail 设置:
auths.tip.gitlab_new = 在 https://gitlab.com/-/profile/applications 上注册新应用
config_settings = 设置
config_summary = 概况
auths.default_domain_name = 用于电子邮件地址的默认域名
config.open_with_editor_app_help = 克隆菜单中的“打开方式”所用的编辑器。如果留空,将使用默认值。展开以查看默认值。
[action]
create_repo=创建了仓库 <a href="%s">%s</a>
@ -3773,6 +3787,7 @@ variables.creation.success=变量 “%s” 添加成功。
variables.update.failed=编辑变量失败。
variables.update.success=该变量已被编辑。
runs.workflow = 工作流
runs.no_job_without_needs = 工作流必须至少包含一组没有依赖的作业。
[projects]
type-1.display_name=个人项目
@ -3807,7 +3822,7 @@ runner_kind = 搜索Runners...
no_results = 未找到匹配的结果。
type_tooltip = 搜索类型
fuzzy = 模糊
code_search_by_git_grep = 当前搜索结果由 git grep 提供,如果站点管理员启用了仓库索引可能会有更好的结果。
code_search_by_git_grep = 当前搜索结果由 git grep 提供,如果站点管理员启用了代码索引可能会有更好的结果。
match = 匹配
match_tooltip = 仅包含与搜索词完全匹配的结果
fuzzy_tooltip = 在搜索结果中包含与搜索词相近的项目

View file

@ -0,0 +1 @@
The default config for `database.MAX_OPEN_CONNS` changed from 0 (unlimited) to 100 to avoid problems if it exceeds the limit by the database server. If you require high concurrency, try to increase this value for both Forgejo **and your database server**. [`Limit database max connections by default`](https://codeberg.org/forgejo/forgejo/pulls/3383)

View file

@ -57,7 +57,7 @@ func Activity(ctx *context.Context) {
ctx.Repo.CanRead(unit.TypeReleases),
ctx.Repo.CanRead(unit.TypeIssues),
ctx.Repo.CanRead(unit.TypePullRequests),
ctx.Repo.CanRead(unit.TypeCode)); err != nil {
ctx.Repo.CanRead(unit.TypeCode) && !ctx.Repo.Repository.IsEmpty); err != nil {
ctx.ServerError("GetActivityStats", err)
return
}

View file

@ -14,7 +14,7 @@ import (
)
const (
tplWatching base.TplName = "repo/issue/view_content/watching"
tplWatching base.TplName = "repo/issue/view_content/sidebar/watching"
)
// IssueWatch sets issue watching

View file

@ -1423,16 +1423,16 @@ func registerRoutes(m *web.Route) {
m.Group("/contributors", func() {
m.Get("", repo.Contributors)
m.Get("/data", repo.ContributorsData)
})
}, repo.MustBeNotEmpty, context.RequireRepoReaderOr(unit.TypeCode))
m.Group("/code-frequency", func() {
m.Get("", repo.CodeFrequency)
m.Get("/data", repo.CodeFrequencyData)
})
}, repo.MustBeNotEmpty, context.RequireRepoReaderOr(unit.TypeCode))
m.Group("/recent-commits", func() {
m.Get("", repo.RecentCommits)
m.Get("/data", repo.RecentCommitsData)
})
}, context.RepoRef(), repo.MustBeNotEmpty, context.RequireRepoReaderOr(unit.TypePullRequests, unit.TypeIssues, unit.TypeReleases))
}, repo.MustBeNotEmpty, context.RequireRepoReaderOr(unit.TypeCode))
}, context.RepoRef(), context.RequireRepoReaderOr(unit.TypeCode, unit.TypePullRequests, unit.TypeIssues, unit.TypeReleases))
m.Group("/activity_author_data", func() {
m.Get("", repo.ActivityAuthors)

View file

@ -2,9 +2,11 @@
<div role="main" aria-label="{{.Title}}" class="page-content repository commits">
{{template "repo/header" .}}
<div class="ui container flex-container">
<div class="flex-container-nav">
{{template "repo/navbar" .}}
</div>
{{if and (not .IsEmptyRepo) (.Permission.CanRead $.UnitTypeCode)}}
<div class="flex-container-nav">
{{template "repo/navbar" .}}
</div>
{{end}}
<div class="flex-container-main">
{{if .PageIsPulse}}{{template "repo/pulse" .}}{{end}}
{{if .PageIsContributors}}{{template "repo/contributors" .}}{{end}}

View file

@ -159,7 +159,7 @@
</a>
{{end}}
{{if and (.Permission.CanReadAny $.UnitTypePullRequests $.UnitTypeIssues $.UnitTypeReleases) (not .IsEmptyRepo)}}
{{if and (.Permission.CanReadAny $.UnitTypeCode $.UnitTypePullRequests $.UnitTypeIssues $.UnitTypeReleases)}}
<a class="{{if .PageIsActivity}}active {{end}}item" href="{{.RepoLink}}/activity">
{{svg "octicon-pulse"}} {{ctx.Locale.Tr "repo.activity"}}
</a>

View file

@ -1,17 +1,6 @@
<div class="ui watching">
<span class="text"><strong>{{ctx.Locale.Tr "notification.notifications"}}</strong></span>
<div class="tw-mt-2">
<form hx-boost="true" hx-sync="this:replace" hx-target="this" method="post" action="{{.Issue.Link}}/watch">
<input type="hidden" name="watch" value="{{if $.IssueWatch.IsWatching}}0{{else}}1{{end}}">
<button class="fluid ui button">
{{if $.IssueWatch.IsWatching}}
{{svg "octicon-mute" 16 "tw-mr-2"}}
{{ctx.Locale.Tr "repo.issues.unsubscribe"}}
{{else}}
{{svg "octicon-unmute" 16 "tw-mr-2"}}
{{ctx.Locale.Tr "repo.issues.subscribe"}}
{{end}}
</button>
</form>
{{template "repo/issue/view_content/sidebar/watching" .}}
</div>
</div>

View file

@ -0,0 +1,12 @@
<form hx-boost="true" hx-sync="this:replace" hx-target="this" method="post" action="{{.Issue.Link}}/watch">
<input type="hidden" name="watch" value="{{if $.IssueWatch.IsWatching}}0{{else}}1{{end}}">
<button class="fluid ui button">
{{if $.IssueWatch.IsWatching}}
{{svg "octicon-mute" 16 "tw-mr-2"}}
{{ctx.Locale.Tr "repo.issues.unsubscribe"}}
{{else}}
{{svg "octicon-unmute" 16 "tw-mr-2"}}
{{ctx.Locale.Tr "repo.issues.subscribe"}}
{{end}}
</button>
</form>

View file

@ -86,18 +86,18 @@
{{else}}
{{if $newMirrorsEntirelyEnabled}}
{{ctx.Locale.Tr "repo.settings.mirror_settings.docs"}}
<a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.com/usage/repo-mirror#pushing-to-a-remote-repository">{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.doc_link_title"}}</a><br><br>
<a target="_blank" rel="noopener noreferrer" href="https://forgejo.org/docs/latest/user/repo-mirror#pushing-to-a-remote-repository">{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.doc_link_title"}}</a><br><br>
{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.pull_mirror_instructions"}}
<a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.com/usage/repo-mirror#pulling-from-a-remote-repository">{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.doc_link_pull_section"}}</a><br>
<a target="_blank" rel="noopener noreferrer" href="https://forgejo.org/docs/latest/user/repo-mirror#pulling-from-a-remote-repository">{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.doc_link_pull_section"}}</a><br>
{{else if $onlyNewPushMirrorsEnabled}}
{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.disabled_pull_mirror.instructions"}}
{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.more_information_if_disabled"}}
<a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.com/usage/repo-mirror#pulling-from-a-remote-repository">{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.doc_link_title"}}</a><br>
<a target="_blank" rel="noopener noreferrer" href="https://forgejo.org/docs/latest/user/repo-mirror#pulling-from-a-remote-repository">{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.doc_link_title"}}</a><br>
{{else if $onlyNewPullMirrorsEnabled}}
{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.disabled_push_mirror.instructions"}}
{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning"}}
{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.more_information_if_disabled"}}
<a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.com/usage/repo-mirror#pulling-from-a-remote-repository">{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.doc_link_title"}}</a><br><br>
<a target="_blank" rel="noopener noreferrer" href="https://forgejo.org/docs/latest/user/repo-mirror#pulling-from-a-remote-repository">{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.doc_link_title"}}</a><br><br>
{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.disabled_push_mirror.info"}}
{{if $existingPushMirror}}
{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.can_still_use"}}

View file

@ -4,13 +4,20 @@
package integration
import (
"fmt"
"net/http"
"net/url"
"strings"
"testing"
"code.gitea.io/gitea/models/db"
repo_model "code.gitea.io/gitea/models/repo"
unit_model "code.gitea.io/gitea/models/unit"
"code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/test"
repo_service "code.gitea.io/gitea/services/repository"
"code.gitea.io/gitea/tests"
"github.com/stretchr/testify/assert"
)
@ -63,3 +70,122 @@ func TestRepoActivity(t *testing.T) {
assert.Len(t, list.Nodes, 3)
})
}
func TestRepoActivityAllUnitsDisabled(t *testing.T) {
defer tests.PrepareTestEnv(t)()
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user1"})
session := loginUser(t, user.Name)
unit_model.LoadUnitConfig()
// Create a repo, with no unit enabled.
repo, err := repo_service.CreateRepository(db.DefaultContext, user, user, repo_service.CreateRepoOptions{
Name: "empty-repo",
AutoInit: false,
})
assert.NoError(t, err)
assert.NotEmpty(t, repo)
enabledUnits := make([]repo_model.RepoUnit, 0)
disabledUnits := []unit_model.Type{unit_model.TypeCode, unit_model.TypeIssues, unit_model.TypePullRequests, unit_model.TypeReleases}
err = repo_service.UpdateRepositoryUnits(db.DefaultContext, repo, enabledUnits, disabledUnits)
assert.NoError(t, err)
req := NewRequest(t, "GET", fmt.Sprintf("%s/activity", repo.Link()))
session.MakeRequest(t, req, http.StatusNotFound)
req = NewRequest(t, "GET", fmt.Sprintf("%s/activity/contributors", repo.Link()))
session.MakeRequest(t, req, http.StatusNotFound)
req = NewRequest(t, "GET", fmt.Sprintf("%s/activity/code-frequency", repo.Link()))
session.MakeRequest(t, req, http.StatusNotFound)
req = NewRequest(t, "GET", fmt.Sprintf("%s/activity/recent-commits", repo.Link()))
session.MakeRequest(t, req, http.StatusNotFound)
}
func TestRepoActivityOnlyCodeUnitWithEmptyRepo(t *testing.T) {
defer tests.PrepareTestEnv(t)()
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user1"})
session := loginUser(t, user.Name)
unit_model.LoadUnitConfig()
// Create a empty repo, with only code unit enabled.
repo, err := repo_service.CreateRepository(db.DefaultContext, user, user, repo_service.CreateRepoOptions{
Name: "empty-repo",
AutoInit: false,
})
assert.NoError(t, err)
assert.NotEmpty(t, repo)
enabledUnits := make([]repo_model.RepoUnit, 1)
enabledUnits[0] = repo_model.RepoUnit{RepoID: repo.ID, Type: unit_model.TypeCode}
disabledUnits := []unit_model.Type{unit_model.TypeIssues, unit_model.TypePullRequests, unit_model.TypeReleases}
err = repo_service.UpdateRepositoryUnits(db.DefaultContext, repo, enabledUnits, disabledUnits)
assert.NoError(t, err)
req := NewRequest(t, "GET", fmt.Sprintf("%s/activity", repo.Link()))
session.MakeRequest(t, req, http.StatusOK)
// Git repo empty so no activity for contributors etc
req = NewRequest(t, "GET", fmt.Sprintf("%s/activity/contributors", repo.Link()))
session.MakeRequest(t, req, http.StatusNotFound)
req = NewRequest(t, "GET", fmt.Sprintf("%s/activity/code-frequency", repo.Link()))
session.MakeRequest(t, req, http.StatusNotFound)
req = NewRequest(t, "GET", fmt.Sprintf("%s/activity/recent-commits", repo.Link()))
session.MakeRequest(t, req, http.StatusNotFound)
}
func TestRepoActivityOnlyCodeUnitWithNonEmptyRepo(t *testing.T) {
defer tests.PrepareTestEnv(t)()
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user1"})
session := loginUser(t, user.Name)
unit_model.LoadUnitConfig()
// Create a repo, with only code unit enabled.
repo, _, f := CreateDeclarativeRepo(t, user, "", []unit_model.Type{unit_model.TypeCode}, nil, nil)
defer f()
req := NewRequest(t, "GET", fmt.Sprintf("%s/activity", repo.Link()))
session.MakeRequest(t, req, http.StatusOK)
// Git repo not empty so activity for contributors etc
req = NewRequest(t, "GET", fmt.Sprintf("%s/activity/contributors", repo.Link()))
session.MakeRequest(t, req, http.StatusOK)
req = NewRequest(t, "GET", fmt.Sprintf("%s/activity/code-frequency", repo.Link()))
session.MakeRequest(t, req, http.StatusOK)
req = NewRequest(t, "GET", fmt.Sprintf("%s/activity/recent-commits", repo.Link()))
session.MakeRequest(t, req, http.StatusOK)
}
func TestRepoActivityOnlyIssuesUnit(t *testing.T) {
defer tests.PrepareTestEnv(t)()
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user1"})
session := loginUser(t, user.Name)
unit_model.LoadUnitConfig()
// Create a empty repo, with only code unit enabled.
repo, err := repo_service.CreateRepository(db.DefaultContext, user, user, repo_service.CreateRepoOptions{
Name: "empty-repo",
AutoInit: false,
})
assert.NoError(t, err)
assert.NotEmpty(t, repo)
enabledUnits := make([]repo_model.RepoUnit, 1)
enabledUnits[0] = repo_model.RepoUnit{RepoID: repo.ID, Type: unit_model.TypeIssues}
disabledUnits := []unit_model.Type{unit_model.TypeCode, unit_model.TypePullRequests, unit_model.TypeReleases}
err = repo_service.UpdateRepositoryUnits(db.DefaultContext, repo, enabledUnits, disabledUnits)
assert.NoError(t, err)
req := NewRequest(t, "GET", fmt.Sprintf("%s/activity", repo.Link()))
session.MakeRequest(t, req, http.StatusOK)
// Git repo empty so no activity for contributors etc
req = NewRequest(t, "GET", fmt.Sprintf("%s/activity/contributors", repo.Link()))
session.MakeRequest(t, req, http.StatusNotFound)
req = NewRequest(t, "GET", fmt.Sprintf("%s/activity/code-frequency", repo.Link()))
session.MakeRequest(t, req, http.StatusNotFound)
req = NewRequest(t, "GET", fmt.Sprintf("%s/activity/recent-commits", repo.Link()))
session.MakeRequest(t, req, http.StatusNotFound)
}