From 8740631b79390299e0dc82469bcb85553a4a09f7 Mon Sep 17 00:00:00 2001 From: Gusted Date: Tue, 2 Aug 2022 09:56:38 +0200 Subject: [PATCH 1/7] Enable Wire 2 for Internal SSH Server (#20616) - Git only decides to use the Wire 2 protocol when `git {receive,upload}-pack` receive the `GIT_PROTOCOL` environment with as value `version=2`. Currently the internal SSH Server wasn't passing this environment through. The `gitea serv` code already passed all received environments to the git command, so no code changes there. --- modules/ssh/ssh.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/modules/ssh/ssh.go b/modules/ssh/ssh.go index bffe29f4c385b..5cc011e5813a2 100644 --- a/modules/ssh/ssh.go +++ b/modules/ssh/ssh.go @@ -75,11 +75,21 @@ func sessionHandler(session ssh.Session) { ctx, cancel := context.WithCancel(session.Context()) defer cancel() + gitProtocol := "" + for _, env := range session.Environ() { + if strings.HasPrefix(env, "GIT_PROTOCOL=") { + // The value would be version=2, so using normal split doesn't work here. + gitProtocol = strings.SplitN(env, "=", 2)[1] + break + } + } + cmd := exec.CommandContext(ctx, setting.AppPath, args...) cmd.Env = append( os.Environ(), "SSH_ORIGINAL_COMMAND="+command, "SKIP_MINWINSVC=1", + "GIT_PROTOCOL="+gitProtocol, ) stdout, err := cmd.StdoutPipe() From e43bb2b0b51e45e157df5d5cdcb4a63b2847e469 Mon Sep 17 00:00:00 2001 From: Gusted Date: Tue, 2 Aug 2022 12:25:26 +0200 Subject: [PATCH 2/7] Add info about Wire 2 when Git over SSH (#20619) - Follow up of #20616. Add a note about this in the config cheat sheet, given there's no dedicated page for this. --- custom/conf/app.example.ini | 1 + docs/content/doc/advanced/config-cheat-sheet.en-us.md | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/custom/conf/app.example.ini b/custom/conf/app.example.ini index 367553f1fa44b..feff190f85f45 100644 --- a/custom/conf/app.example.ini +++ b/custom/conf/app.example.ini @@ -632,6 +632,7 @@ ROUTER = console ;GC_ARGS = ;; ;; If use git wire protocol version 2 when git version >= 2.18, default is true, set to false when you always want git wire protocol version 1 +;; To enable this for Git over SSH when using a OpenSSH server, add `AcceptEnv GIT_PROTOCOL` to your sshd_config file. ;ENABLE_AUTO_GIT_WIRE_PROTOCOL = true ;; ;; Respond to pushes to a non-default branch with a URL for creating a Pull Request (if the repository has them enabled) diff --git a/docs/content/doc/advanced/config-cheat-sheet.en-us.md b/docs/content/doc/advanced/config-cheat-sheet.en-us.md index c6a4d989a6f61..fef32018433b8 100644 --- a/docs/content/doc/advanced/config-cheat-sheet.en-us.md +++ b/docs/content/doc/advanced/config-cheat-sheet.en-us.md @@ -964,7 +964,8 @@ Default templates for project boards: - `COMMITS_RANGE_SIZE`: **50**: Set the default commits range size - `BRANCHES_RANGE_SIZE`: **20**: Set the default branches range size - `GC_ARGS`: **\**: Arguments for command `git gc`, e.g. `--aggressive --auto`. See more on http://git-scm.com/docs/git-gc/ -- `ENABLE_AUTO_GIT_WIRE_PROTOCOL`: **true**: If use Git wire protocol version 2 when Git version >= 2.18, default is true, set to false when you always want Git wire protocol version 1 +- `ENABLE_AUTO_GIT_WIRE_PROTOCOL`: **true**: If use Git wire protocol version 2 when Git version >= 2.18, default is true, set to false when you always want Git wire protocol version 1. + To enable this for Git over SSH when using a OpenSSH server, add `AcceptEnv GIT_PROTOCOL` to your sshd_config file. - `PULL_REQUEST_PUSH_MESSAGE`: **true**: Respond to pushes to a non-default branch with a URL for creating a Pull Request (if the repository has them enabled) - `VERBOSE_PUSH`: **true**: Print status information about pushes as they are being processed. - `VERBOSE_PUSH_DELAY`: **5s**: Only print verbose information if push takes longer than this delay. From 631539c104c790fccf31a80a92e31fcc8a16521c Mon Sep 17 00:00:00 2001 From: KN4CK3R Date: Tue, 2 Aug 2022 15:35:48 +0200 Subject: [PATCH 3/7] Fix package upload for files >32mb (#20622) * Rewind file before first read. * Added tests. Co-authored-by: Lunny Xiao --- modules/packages/hashed_buffer_test.go | 47 +++++++++++++++++++ modules/util/filebuffer/file_backed_buffer.go | 20 ++++++-- .../filebuffer/file_backed_buffer_test.go | 36 ++++++++++++++ 3 files changed, 98 insertions(+), 5 deletions(-) create mode 100644 modules/packages/hashed_buffer_test.go create mode 100644 modules/util/filebuffer/file_backed_buffer_test.go diff --git a/modules/packages/hashed_buffer_test.go b/modules/packages/hashed_buffer_test.go new file mode 100644 index 0000000000000..e21ec67e1fed2 --- /dev/null +++ b/modules/packages/hashed_buffer_test.go @@ -0,0 +1,47 @@ +// Copyright 2022 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package packages + +import ( + "fmt" + "io" + "strings" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestHashedBuffer(t *testing.T) { + cases := []struct { + MaxMemorySize int + Data string + HashMD5 string + HashSHA1 string + HashSHA256 string + HashSHA512 string + }{ + {5, "test", "098f6bcd4621d373cade4e832627b4f6", "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3", "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", "ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff"}, + {5, "testtest", "05a671c66aefea124cc08b76ea6d30bb", "51abb9636078defbf888d8457a7c76f85c8f114c", "37268335dd6931045bdcdf92623ff819a64244b53d0e746d438797349d4da578", "125d6d03b32c84d492747f79cf0bf6e179d287f341384eb5d6d3197525ad6be8e6df0116032935698f99a09e265073d1d6c32c274591bf1d0a20ad67cba921bc"}, + } + + for _, c := range cases { + buf, err := CreateHashedBufferFromReader(strings.NewReader(c.Data), c.MaxMemorySize) + assert.NoError(t, err) + + assert.EqualValues(t, len(c.Data), buf.Size()) + + data, err := io.ReadAll(buf) + assert.NoError(t, err) + assert.Equal(t, c.Data, string(data)) + + hashMD5, hashSHA1, hashSHA256, hashSHA512 := buf.Sums() + assert.Equal(t, c.HashMD5, fmt.Sprintf("%x", hashMD5)) + assert.Equal(t, c.HashSHA1, fmt.Sprintf("%x", hashSHA1)) + assert.Equal(t, c.HashSHA256, fmt.Sprintf("%x", hashSHA256)) + assert.Equal(t, c.HashSHA512, fmt.Sprintf("%x", hashSHA512)) + + assert.NoError(t, buf.Close()) + } +} diff --git a/modules/util/filebuffer/file_backed_buffer.go b/modules/util/filebuffer/file_backed_buffer.go index 128030b4c5c1b..8e3e138e04b77 100644 --- a/modules/util/filebuffer/file_backed_buffer.go +++ b/modules/util/filebuffer/file_backed_buffer.go @@ -103,35 +103,45 @@ func (b *FileBackedBuffer) Size() int64 { return b.size } -func (b *FileBackedBuffer) switchToReader() { +func (b *FileBackedBuffer) switchToReader() error { if b.reader != nil { - return + return nil } if b.file != nil { + if _, err := b.file.Seek(0, io.SeekStart); err != nil { + return err + } b.reader = b.file } else { b.reader = bytes.NewReader(b.buffer.Bytes()) } + return nil } // Read implements io.Reader func (b *FileBackedBuffer) Read(p []byte) (int, error) { - b.switchToReader() + if err := b.switchToReader(); err != nil { + return 0, err + } return b.reader.Read(p) } // ReadAt implements io.ReaderAt func (b *FileBackedBuffer) ReadAt(p []byte, off int64) (int, error) { - b.switchToReader() + if err := b.switchToReader(); err != nil { + return 0, err + } return b.reader.ReadAt(p, off) } // Seek implements io.Seeker func (b *FileBackedBuffer) Seek(offset int64, whence int) (int64, error) { - b.switchToReader() + if err := b.switchToReader(); err != nil { + return 0, err + } return b.reader.Seek(offset, whence) } diff --git a/modules/util/filebuffer/file_backed_buffer_test.go b/modules/util/filebuffer/file_backed_buffer_test.go new file mode 100644 index 0000000000000..83ef58561de53 --- /dev/null +++ b/modules/util/filebuffer/file_backed_buffer_test.go @@ -0,0 +1,36 @@ +// Copyright 2022 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package filebuffer + +import ( + "io" + "strings" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestFileBackedBuffer(t *testing.T) { + cases := []struct { + MaxMemorySize int + Data string + }{ + {5, "test"}, + {5, "testtest"}, + } + + for _, c := range cases { + buf, err := CreateFromReader(strings.NewReader(c.Data), c.MaxMemorySize) + assert.NoError(t, err) + + assert.EqualValues(t, len(c.Data), buf.Size()) + + data, err := io.ReadAll(buf) + assert.NoError(t, err) + assert.Equal(t, c.Data, string(data)) + + assert.NoError(t, buf.Close()) + } +} From 2754ecc293ffa8c9b44f2bd60dc83d295fc037ba Mon Sep 17 00:00:00 2001 From: Norwin Date: Tue, 2 Aug 2022 16:59:44 +0200 Subject: [PATCH 4/7] Use correct page size for link header pagination (#20546) Co-authored-by: Lunny Xiao Co-authored-by: wxiaoguang --- routers/api/v1/repo/issue.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/api/v1/repo/issue.go b/routers/api/v1/repo/issue.go index ddad18ef62caf..08e3e037417c0 100644 --- a/routers/api/v1/repo/issue.go +++ b/routers/api/v1/repo/issue.go @@ -282,7 +282,7 @@ func SearchIssues(ctx *context.APIContext) { } } - ctx.SetLinkHeader(int(filteredCount), setting.UI.IssuePagingNum) + ctx.SetLinkHeader(int(filteredCount), limit) ctx.SetTotalCountHeader(filteredCount) ctx.JSON(http.StatusOK, convert.ToAPIIssueList(issues)) } From 90b2657ae7f022f0a9fe2ba7199c60d32a36d673 Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Wed, 3 Aug 2022 00:43:27 +0800 Subject: [PATCH 5/7] Fix the admin mailer config display (#20633) --- options/locale/locale_en-US.ini | 9 ++++++--- templates/admin/config.tmpl | 19 +++++++++++++------ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index a774bf92fff42..b6f00727ea755 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -2796,16 +2796,19 @@ config.queue_length = Queue Length config.deliver_timeout = Deliver Timeout config.skip_tls_verify = Skip TLS Verification -config.mailer_config = SMTP Mailer Configuration +config.mailer_config = Mailer Configuration config.mailer_enabled = Enabled -config.mailer_disable_helo = Disable HELO +config.mailer_enable_helo = Enable HELO config.mailer_name = Name -config.mailer_host = Host +config.mailer_protocol = Protocol +config.mailer_smtp_addr = SMTP Addr +config.mailer_smtp_port = SMTP Port config.mailer_user = User config.mailer_use_sendmail = Use Sendmail config.mailer_sendmail_path = Sendmail Path config.mailer_sendmail_args = Extra Arguments to Sendmail config.mailer_sendmail_timeout = Sendmail Timeout +config.mailer_use_dummy = Dummy config.test_email_placeholder = Email (e.g. test@example.com) config.send_test_mail = Send Testing Email config.test_mail_failed = Failed to send a testing email to '%s': %v diff --git a/templates/admin/config.tmpl b/templates/admin/config.tmpl index a55a797262a01..ccd1029cd80c1 100644 --- a/templates/admin/config.tmpl +++ b/templates/admin/config.tmpl @@ -218,12 +218,7 @@ {{if .MailerEnabled}}
{{.locale.Tr "admin.config.mailer_name"}}
{{.Mailer.Name}}
- {{if eq .Mailer.MailerType "smtp"}} -
{{.locale.Tr "admin.config.mailer_disable_helo"}}
-
{{if .DisableHelo}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
-
{{.locale.Tr "admin.config.mailer_host"}}
-
{{.Mailer.Host}}
- {{else if eq .Mailer.MailerType "sendmail"}} + {{if eq .Mailer.Protocol "sendmail"}}
{{.locale.Tr "admin.config.mailer_use_sendmail"}}
{{svg "octicon-check"}}
{{.locale.Tr "admin.config.mailer_sendmail_path"}}
@@ -232,6 +227,18 @@
{{.Mailer.SendmailArgs}}
{{.locale.Tr "admin.config.mailer_sendmail_timeout"}}
{{.Mailer.SendmailTimeout}} {{.locale.Tr "tool.raw_seconds"}}
+ {{else if eq .Mailer.Protocol "dummy"}} +
{{.locale.Tr "admin.config.mailer_use_dummy"}}
+
{{svg "octicon-check"}}
+ {{else}}{{/* SMTP family */}} +
{{.locale.Tr "admin.config.mailer_protocol"}}
+
{{.Mailer.Protocol}}
+
{{.locale.Tr "admin.config.mailer_enable_helo"}}
+
{{if .Mailer.EnableHelo}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}
+
{{.locale.Tr "admin.config.mailer_smtp_addr"}}
+
{{.Mailer.SMTPAddr}}
+
{{.locale.Tr "admin.config.mailer_smtp_port"}}
+
{{.Mailer.SMTPPort}}
{{end}}
{{.locale.Tr "admin.config.mailer_user"}}
{{if .Mailer.User}}{{.Mailer.User}}{{else}}(empty){{end}}

From 87a7c37ecb4ddb2116cb4e853a61781d0de37ddb Mon Sep 17 00:00:00 2001 From: Gusted Date: Wed, 3 Aug 2022 00:34:50 +0200 Subject: [PATCH 6/7] Use `strings.Cut` for GIT_PROTOCOL value (#20638) - As per https://github.com/go-gitea/gitea/pull/20616#discussion_r935612542 --- modules/ssh/ssh.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/ssh/ssh.go b/modules/ssh/ssh.go index 5cc011e5813a2..6b601c008fe9e 100644 --- a/modules/ssh/ssh.go +++ b/modules/ssh/ssh.go @@ -78,8 +78,7 @@ func sessionHandler(session ssh.Session) { gitProtocol := "" for _, env := range session.Environ() { if strings.HasPrefix(env, "GIT_PROTOCOL=") { - // The value would be version=2, so using normal split doesn't work here. - gitProtocol = strings.SplitN(env, "=", 2)[1] + _, gitProtocol, _ = strings.Cut(env, "=") break } } From 7baa7cb98f2fff18fb483d9fb11c414844af8898 Mon Sep 17 00:00:00 2001 From: Gusted Date: Wed, 3 Aug 2022 00:21:26 +0000 Subject: [PATCH 7/7] [skip ci] Updated translations via Crowdin --- options/locale/locale_nl-NL.ini | 26 ++++++ options/locale/locale_tr-TR.ini | 141 +++++++++++++++++++++++++++++++- 2 files changed, 166 insertions(+), 1 deletion(-) diff --git a/options/locale/locale_nl-NL.ini b/options/locale/locale_nl-NL.ini index fcc048b3c1c5b..4a7de692cefd4 100644 --- a/options/locale/locale_nl-NL.ini +++ b/options/locale/locale_nl-NL.ini @@ -1293,11 +1293,13 @@ issues.previous=Vorige issues.next=Volgende issues.open_title=Open issues.closed_title=Gesloten +issues.draft_title=Concept issues.num_comments=%d opmerkingen issues.commented_at=`reageerde %s` issues.delete_comment_confirm=Weet u zeker dat u deze reactie wilt verwijderen? issues.context.copy_link=Link kopiëren issues.context.quote_reply=Citeer antwoord +issues.context.reference_issue=Verwijs in nieuw issue issues.context.edit=Bewerken issues.context.delete=Verwijder issues.no_content=Er is nog geen inhoud. @@ -1323,6 +1325,7 @@ issues.re_request_review=Opnieuw aanvragen review issues.is_stale=Er zijn wijzigingen aangebracht in deze PR sinds deze beoordeling issues.remove_request_review=Verwijder beoordelingsverzoek issues.remove_request_review_block=Kan beoordelingsverzoek niet verwijderen +issues.dismiss_review=Beoordeling afwijzen issues.sign_in_require_desc=Log in om deel te nemen aan deze discussie. issues.edit=Bewerken issues.cancel=Annuleren @@ -1366,13 +1369,21 @@ issues.lock.reason=Reden voor vergrendeling issues.lock.title=Vergrendel gesprek over dit probleem. issues.unlock.title=Ontgrendel gesprek over dit probleem. issues.comment_on_locked=Je kunt geen commentaar geven op een vergrendeld probleem. +issues.delete=Verwijderen +issues.delete.title=Deze issue verwijderen? +issues.delete.text=Wilt u deze issue echt verwijderen? (Dit is permanent en verwijdert alle inhoud. Overweeg om deze issue te sluiten, als u liever deze als archief wilt bijhouden) issues.tracker=Tijdregistratie +issues.start_tracking_short=Start timer issues.start_tracking=Start tijdregistratie issues.start_tracking_history=`%s is begonnen` issues.tracker_auto_close=Timer wordt automatisch gestopt wanneer dit probleem wordt gesloten +issues.tracking_already_started=`Je houd al tijd bij voor een ander issue!` +issues.stop_tracking=Stop timer issues.stop_tracking_history=`gestopt met werken aan %s` +issues.cancel_tracking=Weggooien issues.cancel_tracking_history=`tijd bijhouden geannuleerd: %s` issues.add_time=Tijd handmatig toevoegen +issues.del_time=Verwijder deze tijdlog issues.add_time_short=Timer toevoegen issues.add_time_cancel=Annuleren issues.add_time_history=`heeft besteedde tijd toegevoegd: %s` @@ -1395,10 +1406,13 @@ issues.due_date_form_remove=Verwijder issues.due_date_not_writer=Je hebt schrijftoegang in deze repository nodig om de deadline van een kwestie aan te passen. issues.due_date_not_set=Geen vervaldatum ingesteld. issues.due_date_added=heeft %[2]s de deadline %[1]s toegevoegd +issues.due_date_modified=de vervaldatum van %[2]s is gewijzigd naar %[1]s[3]s issues.due_date_remove=heeft %[2]s de deadline %[1]s verwijderd issues.due_date_overdue=Over tijd issues.due_date_invalid=De deadline is ongeldig of buiten bereik. Gebruik het formaat 'jjjj-mm-dd'. issues.dependency.title=Afhankelijkheden +issues.dependency.issue_no_dependencies=Geen afhankelijkheden ingesteld. +issues.dependency.pr_no_dependencies=Geen afhankelijkheden ingesteld. issues.dependency.add=Voeg afhankelijkheid toe… issues.dependency.cancel=Annuleer issues.dependency.remove=Verwijder @@ -1579,6 +1593,8 @@ pulls.auto_merge_has_pending_schedule=%[1]s heeft deze pull-verzoek automatisch pulls.auto_merge_cancel_schedule=Automatisch samenvoegen annuleren +pulls.delete.title=Deze pull-verzoek verwijderen? +pulls.delete.text=Weet je zeker dat je deze pull-verzoek wilt verwijderen? (Dit zal alle inhoud permanent verwijderen. Overweeg om het te sluiten als je het gearchiveerd wilt houden) milestones.new=Nieuwe mijlpaal milestones.closed=%s werd gesloten @@ -1624,6 +1640,7 @@ signing.wont_sign.commitssigned=De samenvoeging wordt niet ondertekend omdat all signing.wont_sign.approved=De samenvoeging wordt niet ondertekend omdat de PR niet is goedgekeurd signing.wont_sign.not_signed_in=U bent niet ingelogd +ext_wiki=Toegang tot Externe Wiki ext_wiki.desc=Koppelen aan een externe wiki. wiki=Wiki @@ -1648,6 +1665,7 @@ wiki.page_already_exists=Er bestaat al een wiki-pagina met deze naam. wiki.reserved_page=De wiki-paginanaam '%s' is gereserveerd. wiki.pages=Pagina’s wiki.last_updated=Laatst bijgewerkt: %s +wiki.page_name_desc=Voer een naam in voor deze Wiki pagina. Sommige speciale namen zijn: 'Home', '_Sidebar' en '_Footer'. activity=Activiteit activity.period.filter_label=Periode: @@ -1679,6 +1697,7 @@ activity.closed_issues_count_1=Gesloten problemen activity.closed_issues_count_n=Gesloten problemen activity.title.issues_1=%d Probleem activity.title.issues_n=%d Problemen +activity.title.issues_closed_from=%s gesloten van %s activity.title.issues_created_by=%s gemaakt door %s activity.closed_issue_label=Gesloten activity.new_issues_count_1=Nieuw probleem @@ -1716,7 +1735,11 @@ activity.git_stats_deletion_n=%d verwijderingen search=Zoek search.search_repo=Zoek repository +search.fuzzy=Vergelijkbaar +search.match=Overeenkomst search.results=Zoek resultaat voor "%s" in %s +search.code_no_results=Geen broncode gevonden die aan uw zoekterm voldoet. +search.code_search_unavailable=Er is momenteel geen code zoekfunctie beschikbaar. Neem contact op met uw sitebeheerder. settings=Instellingen settings.desc=In de instellingen kan je de instellingen van de repository aanpassen @@ -1734,11 +1757,14 @@ settings.mirror_settings=Kopie Settings settings.mirror_settings.direction=Richting settings.mirror_settings.direction.pull=Pull settings.mirror_settings.direction.push=Push +settings.mirror_settings.last_update=Laatst bijgewerkt settings.mirror_settings.push_mirror.none=Geen spiegels geconfigureerd +settings.mirror_settings.push_mirror.add=Voeg Push Mirror toe settings.sync_mirror=Synchroniseer settings.mirror_sync_in_progress=Mirror-synchronisatie is momenteel bezig - kom later terug. settings.site=Website settings.update_settings=Instellingen bewerken +settings.branches.update_default_branch=Standaard branch bijwerken settings.advanced_settings=Geavanceerde opties settings.wiki_desc=Repository-wiki inschakelen settings.use_internal_wiki=Ingebouwde wiki gebruiken diff --git a/options/locale/locale_tr-TR.ini b/options/locale/locale_tr-TR.ini index 4197f14e5069d..d56e02b3957d2 100644 --- a/options/locale/locale_tr-TR.ini +++ b/options/locale/locale_tr-TR.ini @@ -111,6 +111,7 @@ rss_feed=RSS Beslemesi occurred=Bir hata oluştu report_message=Bunun bir Gitea hatası olduğundan eminseniz, lütfen GitHub sayfasında sorunu arayın veya gerekiyorsa yeni bir sorun açın. missing_csrf=Hatalı İstek: CSRF anahtarı yok +invalid_csrf=Hatalı İstek: geçersiz CSRF erişim anahtarı not_found=Hedef bulunamadı. network_error=Ağ hatası @@ -555,6 +556,7 @@ cancel=İptal language=Dil ui=Tema hidden_comment_types=Gizli yorum türleri +comment_type_group_reference=Referans comment_type_group_label=Etiket comment_type_group_milestone=Dönüm noktası comment_type_group_assignee=Atanan @@ -660,7 +662,13 @@ verify_gpg_key_success=GPG anahtarı '%s' doğrulandı. ssh_key_verified=Doğrulanmış Anahtar ssh_key_verified_long=Bu anahtar bir belirteç ile doğrulandı ve bu kullanıcı için etkinleştirilmiş herhangi bir e-posta adresi ile uyuşan işlemeleri doğrulamak için kullanılabilir. ssh_key_verify=Doğrula +ssh_invalid_token_signature=Verilen SSH anahtarı, imza veya erişim anahtarı uyuşmuyor veya erişim anahtarı çok eski. +ssh_token_required=Aşağıdaki erişim anahtarı için bir imza sağlamalısınız +ssh_token=Erişim Anahtarı ssh_token_help=Şunu kullanarak bir imza oluşturabilirsiniz: +ssh_token_signature=Korumalı SSH imzası +key_signature_ssh_placeholder='-----BEGIN SSH SIGNATURE-----' ile başlar +verify_ssh_key_success=SSH anahtarı '%s' doğrulandı. subkeys=Alt anahtarlar key_id=Anahtar Kimliği key_name=Anahtar İsmi @@ -708,6 +716,9 @@ generate_token_success=Yeni bir jeton oluşturuldu. Tekrar gösterilmeyeceği i generate_token_name_duplicate=%s zaten bir uygulama adı olarak kullanılmış. Lütfen yeni bir tane kullanın. delete_token=Sil access_token_deletion=Erişim Jetonunu Sil +access_token_deletion_cancel_action=İptal +access_token_deletion_confirm_action=Sil +access_token_deletion_desc=Bir erişim anahtarını silmek, onu kullanan uygulamaların hesabınıza erişimini kaldırır. Bu geri alınamaz. Devam edilsin mi? delete_token_success=Jeton silindi. Onu kullanan uygulamalar artık hesabınıza erişemez. manage_oauth2_applications=OAuth2 Uygulamalarını Yönet @@ -760,10 +771,16 @@ passcode_invalid=Şifre geçersiz. Tekrar deneyin. twofa_enrolled=Hesabınız iki faktörlü kimlik doğrulamasına kaydedildi. Kazıma belirtecini (%s) yalnızca bir kez gösterdiği gibi güvenli bir yerde saklayın! twofa_failed_get_secret=Gizlilik elde edilemedi. +webauthn_desc=Güvenlik anahtarları, şifreleme anahtarlarını içeren donanım aygıtlarıdır. İki aşamalı kimlik doğrulama için kullanılabilirler. Güvenlik anahtarları WebAuthn Authenticator standardını desteklemelidir. +webauthn_register_key=Güvenlik Anahtarı Ekle +webauthn_nickname=Takma Ad +webauthn_delete_key=Güvenlik Anahtarını Kaldır +webauthn_delete_key_desc=Bir güvenlik anahtarını kaldırırsanız, onunla artık giriş yapamazsınız. Devam edilsin mi? manage_account_links=Bağlı Hesapları Yönet manage_account_links_desc=Bu harici hesaplar Gitea hesabınızla bağlantılı. account_links_not_available=Şu anda Gitea hesabınıza bağlı harici bir hesap yok. +link_account=Hesap Bağla remove_account_link=Bağlantılı Hesabı Kaldır remove_account_link_desc=Bağlantılı bir hesabı kaldırmak, onunla Gitea hesabınıza erişimi iptal edecektir. Devam edilsin mi? remove_account_link_success=Bağlantılı hesap kaldırıldı. @@ -782,6 +799,7 @@ email_notifications.enable=E-posta Bildirimlerini Etkinleştir email_notifications.onmention=Sadece Bahsedilen E-posta email_notifications.disable=E-posta Bildirimlerini Devre Dışı Bırak email_notifications.submit=E-posta Tercihlerini Ayarla +email_notifications.andyourown=Ve Sizin Bildirimleriniz visibility=Kullanıcı görünürlüğü visibility.public=Herkese Açık @@ -844,7 +862,9 @@ default_branch=Varsayılan Dal default_branch_helper=Varsayılan dal, değişiklik istekleri ve kod işlemeleri için temel daldır. mirror_prune=Buda mirror_prune_desc=Kullanılmayan uzak depoları izleyen referansları kaldır +mirror_interval=Yansı Aralığı (geçerli zaman birimleri 'h', 'm', 's'). Periyodik senkronizasyonu devre dışı bırakmak için 0 kullanın. (Asgari aralık: %s) mirror_interval_invalid=Yansı süre aralığı geçerli değil. +mirror_sync_on_commit=İşlemeler gönderildiğinde senkronize et mirror_address=URL'den Klonla mirror_address_desc=Yetkilendirme bölümüne gerekli tüm kimlik bilgilerini girin. mirror_address_url_invalid=Sağlanan Url geçersiz. Url'nin tüm bileşenlerinden doğru olarak kaçmalısınız. @@ -893,6 +913,7 @@ desc.archived=Arşivlenmiş template.items=Şablon Öğeleri template.git_content=Git İçeriği (Varsayılan Dal) template.git_hooks=Git İstekleri +template.git_hooks_tooltip=Eklendikten sonra Git Hooks'u değiştirmek veya kaldırmak mümkün değildir. Bunu yalnızca şablon deposuna güveniyorsanız seçin. template.webhooks=Web İstemcileri template.topics=Konular template.avatar=Profil Resmi @@ -912,6 +933,7 @@ form.name_pattern_not_allowed='%s' deseni, depo adı için geçerli değildir. need_auth=Yetkilendirme migrate_options=Göç Seçenekleri migrate_service=Göç Hizmeti +migrate_options_mirror_helper=Bu depo bir yansı olacaktır migrate_options_lfs=LFS dosyalarını taşı migrate_options_lfs_endpoint.label=LFS Uç Noktası migrate_options_lfs_endpoint.description=Taşıma, LFS sunucusunu belirlemek için Git uzak sunucusunu kullanmaya çalışacak. Eğer LFS veri deposu başka yerdeyse özel bir uç nokta da belirtebilirsiniz. @@ -928,6 +950,7 @@ migrate_items_releases=Sürümler migrate_repo=Depoyu Göç Ettir migrate.clone_address=URL'den Taşı / Klonla migrate.clone_address_desc=Varolan bir deponun HTTP(S) veya Git 'klonlama' URL'si +migrate.github_token_desc=GitHub API hız sınırı nedeniyle göçü hızlandırmak için buraya virgülle ayrılmış bir veya daha fazla erişm anahtarı koyabilirsiniz. UYARI: Bu özelliğin kötüye kullanılması, hizmet sağlayıcının politikasını ihlal edebilir ve hesabın engellenmesine yol açabilir. migrate.clone_local_path=veya bir yerel sunucu yolu migrate.permission_denied=Yerel depoları içeri aktarma izniniz yok. migrate.invalid_local_path=Yerel yol geçersiz. Mevcut değil veya bir dizin değil. @@ -990,6 +1013,7 @@ tags=Etiket issues=Konular pulls=Değişiklik İstekleri project_board=Projeler +packages=Paketler labels=Etiketler org_labels_desc=Bu organizasyon altında tüm depolarla kullanılabilen organizasyon düzeyinde etiketler org_labels_desc_manage=yönet @@ -1008,7 +1032,17 @@ file_view_rendered=Oluşturulanları Görüntüle file_view_raw=Ham Görünüm file_permalink=Kalıcı Bağlantı file_too_large=Bu dosya görüntülemek için çok büyük. - +bidi_bad_header=`Bu dosya beklenmeyen tek yönlü evrensel kodlu karakter içeriyor!` +bidi_bad_description=`Bu dosya, aşağıda görünenden farklı bir şekilde işlenebilecek beklenmeyen tek yönlü evrensel kodlu karakter içeriyor. Eğer bunu kasıtlı ve meşru olarak yaptıysanız bu uyarıyı yok sayabilirsiniz. Gizli karakterleri göstermek için Kaçış Karakterli düğmesine tıklayın.` +bidi_bad_description_escaped=`Bu dosya beklenmeyen tek yönlü evrensel kodlu karakter içeriyor. Gizlenmiş evrensel kodlu karakterler aşağıda kaçış karakteri olarak gösteriliyor. Nasıl temsil edildiklerini görüntülemek için Kaçış Karaktersiz düğmesine tıklayın.` +unicode_header=`Bu dosya gizli evrensel kodlu karakter içeriyor!` +unicode_description=`Bu dosya, aşağıda görünenden farklı bir şekilde işlenebilecek gizli evrensel kodlu karakter içeriyor. Eğer bunu kasıtlı ve meşru olarak yaptıysanız bu uyarıyı yok sayabilirsiniz. Gizli karakterleri göstermek için Kaçış Karakterli düğmesine tıklayın.` +unicode_description_escaped=`Bu dosya gizli evrensel kodlu karakter içeriyor. Gizlenmiş evrensel kodlu karakterler aşağıda kaçış karakteri olarak gösteriliyor. Nasıl temsil edildiklerini görüntülemek için Kaçış Karaktersiz düğmesine tıklayın.` +line_unicode=`Bu satırda gizli evrensel kod karakterler var` + +escape_control_characters=Kaçış Karakterli +unescape_control_characters=Kaçış Karaktersiz +file_copy_permalink=Kalıcı Bağlantıyı Kopyala video_not_supported_in_browser=Tarayıcınız HTML5 'video' etiketini desteklemiyor. audio_not_supported_in_browser=Tarayıcınız HTML5 'audio' etiketini desteklemiyor. stored_lfs=Git LFS ile depolandı @@ -1896,6 +1930,8 @@ settings.event_pull_request_review=Değişiklik İsteği İncelendi settings.event_pull_request_review_desc=Değişiklik isteği onaylandı, reddedildi veya yorumu incelendi. settings.event_pull_request_sync=Değişiklik İsteği Senkronize Edildi settings.event_pull_request_sync_desc=Değişiklik isteği senkronize edildi. +settings.event_package=Paket +settings.event_package_desc=Bir depoda paket oluşturuldu veya silindi. settings.branch_filter=Dal filtresi settings.branch_filter_desc=Gönderme, dal oluşturma ve dal silme olayları için glob deseni olarak belirtilen dal beyaz listesi. Boşsa veya * ise, tüm dallar için olaylar raporlanır. Sözdizimi için github.com/gobwas/glob belgelerine bakın. Örnekler: master, {master,release*}. settings.active=Etkin @@ -1909,6 +1945,22 @@ settings.hook_type=İstek Türü settings.slack_token=Erişim Anahtarı settings.slack_domain=Alan Adı settings.slack_channel=Kanal +settings.web_hook_name_gitea=Gitea +settings.web_hook_name_gogs=Gogs +settings.web_hook_name_slack=Slack +settings.web_hook_name_discord=Discord +settings.web_hook_name_dingtalk=DingTalk +settings.web_hook_name_telegram=Telegram +settings.web_hook_name_matrix=Matrix +settings.web_hook_name_msteams=Microsoft Teams +settings.web_hook_name_feishu_or_larksuite=Feishu / Lark Suite +settings.web_hook_name_feishu=Feishu +settings.web_hook_name_larksuite=Lark Suite +settings.web_hook_name_wechatwork=WeCom (Wechat Work) +settings.web_hook_name_packagist=Packagist +settings.packagist_username=Packagist kullanıcı adı +settings.packagist_api_token=API erişim anahtarı +settings.packagist_package_url=Packagist paket URL'si settings.deploy_keys=Dağıtım Anahtarları settings.add_deploy_key=Dağıtım Anahtarı Ekle settings.deploy_key_desc=Dağıtım anahtarları, depoyu salt okunur çekme yetkisine sahip. @@ -2036,6 +2088,12 @@ settings.lfs_pointers.inRepo=Depoda settings.lfs_pointers.exists=Mağazada var settings.lfs_pointers.accessible=Kullanıcı tarafından erişilebilir settings.lfs_pointers.associateAccessible=Erişilebilir %d OID ilişkilendirme +settings.rename_branch_failed_exist=%s dalı zaten mevcut olduğu için dalın adı değiştirilemiyor. +settings.rename_branch_failed_not_exist=%s dalının adı değiştirilemiyor, çünkü böyle bir dal yok. +settings.rename_branch_success=%s dalının adı başarılı bir şekilde %s oldu. +settings.rename_branch_from=önceki dal adı +settings.rename_branch_to=yeni dal adı +settings.rename_branch=Dalı yeniden adlandır diff.browse_source=Kaynağa Gözat diff.parent=ebeveyn @@ -2065,6 +2123,9 @@ diff.file_image_height=Yükseklik diff.file_byte_size=Boyut diff.file_suppressed=Dosya farkı çok büyük olduğundan ihmal edildi diff.file_suppressed_line_too_long=Dosya farkları bir veya daha fazla satır çok uzun olduğundan bastırıldı +diff.too_many_files=Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor +diff.show_more=Daha Fazla Göster +diff.load=Fark Yükle diff.generated=üretilen diff.vendored=sağlanmış diff.comment.placeholder=Yorum Yap @@ -2084,6 +2145,7 @@ diff.protected=Korumalı diff.image.side_by_side=Yan Yana diff.image.swipe=Kaydır diff.image.overlay=Arayüz +diff.has_escaped=Bu satırda gizli evrensel kod karakterler var releases.desc=Proje sürümlerini ve indirmeleri takip edin. release.releases=Sürümler @@ -2154,10 +2216,15 @@ branch.included_desc=Bu dal varsayılan dalın bir parçasıdır branch.included=Dahil branch.create_new_branch=Şu daldan dal oluştur: branch.confirm_create_branch=Dal oluştur +branch.create_branch_operation=Dal oluştur branch.new_branch=Yeni dal oluştur branch.new_branch_from='%s' dalından yeni dal oluştur +branch.renamed=%s dalının adı %s olarak değiştirildi. tag.create_tag=%s etiketi oluştur +tag.create_tag_operation=Etiket oluştur +tag.confirm_create_tag=Etiket oluştur +tag.create_tag_from='%s' kullanarak yeni etiket oluştur tag.create_success='%s' etiketi oluşturuldu. @@ -2166,6 +2233,8 @@ topic.done=Bitti topic.count_prompt=25'ten fazla konu seçemezsiniz topic.format_prompt=Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir. +find_file.go_to_file=Dosyaya git +find_file.no_matching=Eşleşen dosya bulunamadı error.csv.too_large=Bu dosya çok büyük olduğu için işlenemiyor. error.csv.unexpected=%d satırı ve %d sütununda beklenmeyen bir karakter içerdiğinden bu dosya işlenemiyor. @@ -2246,7 +2315,13 @@ teams.leave=Ayrıl teams.leave.detail=%s bırakılsın mı? teams.can_create_org_repo=Depoları oluştur teams.can_create_org_repo_helper=Üyeler organizasyonda yeni depolar oluşturabilirler. Oluşturan yeni depoya yönetici erişimi sağlayacak. +teams.none_access=Erişim Yok +teams.none_access_helper=Üyeler bu birimi görüntüleyemez veya üzerinde başka bir işlem yapamaz. +teams.general_access=Genel Erişim +teams.general_access_helper=Üyelerin izinleri aşağıdaki izin tablosuna göre kararlaştırılacaktır. +teams.read_access=Okuma teams.read_access_helper=Üyeler, takım depolarını görüntüleyebilir ve klonlayabilir. +teams.write_access=Yazma teams.write_access_helper=Üyeler takım depolarını okuyabilir ve itme yapabilir. teams.admin_access=Yönetici Erişimi teams.admin_access_helper=Üyeler takım depolarını çekip itebilir ve katkıcı ekleyebilir. @@ -2297,6 +2372,7 @@ first_page=İlk last_page=Son total=Toplam: %d +dashboard.new_version_hint=Gitea %s şimdi hazır, %s çalıştırıyorsunuz. Ayrıntılar için blog'a bakabilirsiniz. dashboard.statistic=Özet dashboard.operations=Bakım İşlemleri dashboard.system_status=Sistem Durumu @@ -2339,6 +2415,7 @@ dashboard.resync_all_hooks=Tüm depoların alma öncesi, güncelleme ve alma son dashboard.reinit_missing_repos=Kayıtları bulunanlar için tüm eksik Git depolarını yeniden başlat dashboard.sync_external_users=Harici kullanıcı verisini senkronize et dashboard.cleanup_hook_task_table=Hook_task tablosunu temizleme +dashboard.cleanup_packages=Süresi dolmuş paketleri temizleme dashboard.server_uptime=Sunucunun Ayakta Kalma Süresi dashboard.current_goroutine=Güncel Goroutine'ler dashboard.current_memory_usage=Güncel Bellek Kullanımı @@ -2370,6 +2447,8 @@ dashboard.last_gc_pause=Son GC Durması dashboard.gc_times=GC Zamanları dashboard.delete_old_actions=Veritabanından tüm eski eylemleri sil dashboard.delete_old_actions.started=Veritabanından başlatılan tüm eski eylemleri silin. +dashboard.update_checker=Denetleyiciyi güncelle +dashboard.delete_old_system_notices=Veritabanından tüm eski sistem bildirimlerini sil users.user_manage_panel=Kullanıcı Hesap Yönetimi users.new_account=Yeni Kullanıcı Hesabı @@ -2404,8 +2483,12 @@ users.allow_import_local=Yerel Depoları Alabilir users.allow_create_organization=Organizasyon Oluşturabilir users.update_profile=Kullanıcı Hesabını Güncelle users.delete_account=Kullanıcı Hesabını Sil +users.cannot_delete_self=Kendinizi silemezsiniz users.still_own_repo=Bu kullanıcı hala bir veya daha fazla depoya sahip. Önce bu depoları silin veya transfer edin. users.still_has_org=Bu kullanıcı bir organizasyonun üyesidir. Önce kullanıcıyı tüm organizasyonlardan çıkarın. +users.purge=Kullanıcıyı Temizle +users.purge_help=Kullanıcıyı ve sahip olduğu herhangi bir depoyu, organizasyonu ve paketleri zorla sil. Tüm yorumlar da silinecektir. +users.still_own_packages=Kullanıcının bir veya daha fazla paketi var. Önce bu paketleri silin. users.deletion_success=Kullanıcı hesabı silindi. users.reset_2fa=2FD'yi sıfırla @@ -2835,8 +2918,64 @@ error.probable_bad_signature=UYARI! Veritabanında bu kimliğe sahip bir anahtar error.probable_bad_default_signature=UYARI! Varsayılan anahtarın bu kimliği olmasına rağmen, bu işlemeyi doğrulamaz! Bu işleme ŞÜPHELİDİR. [units] +unit=Birim error.no_unit_allowed_repo=Bu deponun hiçbir bölümüne erişme izniniz yok. error.unit_not_allowed=Bu depo bölümüne erişme izniniz yok. [packages] +title=Paketler +desc=Depo paketlerini yönet. +empty=Henüz hiçbir paket yok. +filter.type=Tür +filter.type.all=Tümü +filter.container.tagged=Etiketlenmiş +filter.container.untagged=Etiketlenmemiş +installation=Kurulum +about=Bu paket hakkında +requirements=Gereksinimler +dependencies=Bağımlılıklar +keywords=Anahtar Kelimeler +details=Ayrıntılar +details.author=Yazar +details.project_site=Proje Web Sitesi +details.license=Lisans +assets=Varlıklar +versions=Sürümler +versions.on=açık +versions.view_all=Tümünü görüntüle +dependency.version=Sürüm +composer.dependencies=Bağımlılıklar +composer.dependencies.development=Geliştirme Bağımlılıkları +conan.details.repository=Depo +conan.registry=Bu kütüğü komut satırını kullanarak kurun: +conan.install=Conan ile paket kurmak için aşağıdaki komutu çalıştırın: +npm.install=Paketi npm ile kurmak için, şu komutu çalıştırın: +npm.install2=veya paketi package.json dosyasına ekleyin: +npm.documentation=Npm kütüğü hakkında daha fazla bilgi için, belgeye bakabilirsiniz. +npm.dependencies=Bağımlılıklar +npm.dependencies.development=Geliştirme Bağımlılıkları +npm.dependencies.peer=Eş Bağımlılıkları +npm.dependencies.optional=İsteğe Bağlı Bağımlılıklar +npm.details.tag=Etiket +pypi.requires=Gereken Python +pypi.install=Paketi pip ile kurmak için, şu komutu çalıştırın: +pypi.documentation=PyPI kütüğü hakkında daha fazla bilgi için, belgeye bakabilirsiniz. +rubygems.install=Paketi gem ile kurmak için, şu komutu çalıştırın: +rubygems.install2=veya paketi Gemfile dosyasına ekleyin: +rubygems.dependencies.runtime=Çalışma Zamanı Bağımlılıkları +rubygems.dependencies.development=Geliştirme Bağımlılıkları +rubygems.required.ruby=Gereken Ruby sürümü +rubygems.required.rubygems=Gereken RubyGem sürümü +rubygems.documentation=RubyGems kütüğü hakkında daha fazla bilgi için, belgeye bakabilirsiniz. +settings.link=Bu paketi bir depoya bağlayın +settings.link.description=Eğer bir paketi bir depoya bağlarsanız, paket deponun paket listesinde listelenecektir. +settings.link.select=Depo Seç +settings.link.button=Depo Bağlantısını Güncelle +settings.link.success=Depo bağlantısı başarıyla güncellendi. +settings.link.error=Depo bağlantısı güncellenemedi. +settings.delete=Paket Sil +settings.delete.description=Bir paketi silmek kalıcıdır ve geri alınamaz. +settings.delete.notice=%s (%s) paketini silmek üzeresiniz. Bu işlem geri alınamaz, emin misiniz? +settings.delete.success=Paket silindi. +settings.delete.error=Paket silinemedi.