Merge branch 'main' into feature-activitypub

This commit is contained in:
6543 2022-06-18 15:19:10 +02:00 committed by GitHub
commit 7bfadb46ff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
24 changed files with 730 additions and 116 deletions

View file

@ -21,6 +21,7 @@ import (
"code.gitea.io/gitea/routers"
"code.gitea.io/gitea/routers/install"
"github.com/felixge/fgprof"
"github.com/urfave/cli"
ini "gopkg.in/ini.v1"
)
@ -145,6 +146,7 @@ func runWeb(ctx *cli.Context) error {
if setting.EnablePprof {
go func() {
http.DefaultServeMux.Handle("/debug/fgprof", fgprof.Handler())
_, _, finished := process.GetManager().AddTypedContext(context.Background(), "Web: PProf Server", process.SystemProcessType, true)
log.Info("Starting pprof server on localhost:6060")
log.Info("%v", http.ListenAndServe("localhost:6060", nil))

1
go.mod
View file

@ -26,6 +26,7 @@ require (
github.com/editorconfig/editorconfig-core-go/v2 v2.4.4
github.com/emirpasic/gods v1.18.1
github.com/ethantkoenig/rupture v1.0.1
github.com/felixge/fgprof v0.9.2
github.com/gliderlabs/ssh v0.3.4
github.com/go-ap/activitypub v0.0.0-20220615144428-48208c70483b
github.com/go-chi/chi/v5 v5.0.7

4
go.sum
View file

@ -428,6 +428,8 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
github.com/felixge/fgprof v0.9.2 h1:tAMHtWMyl6E0BimjVbFt7fieU6FpjttsZN7j0wT5blc=
github.com/felixge/fgprof v0.9.2/go.mod h1:+VNi+ZXtHIQ6wIw6bUT8nXQRefQflWECoFyRealT5sg=
github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o=
github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
@ -777,6 +779,7 @@ github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLe
github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg=
github.com/google/pprof v0.0.0-20220509035851-59ca7ad80af3 h1:vFrXU7L2gqtlP/ZGijSpaDIc16ZQrZI4FAuYtpQTyQc=
github.com/google/pprof v0.0.0-20220509035851-59ca7ad80af3/go.mod h1:Pt31oes+eGImORns3McJn8zHefuQl2rG8l6xQjGYB4U=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
@ -900,6 +903,7 @@ github.com/iancoleman/strcase v0.0.0-20180726023541-3605ed457bf7/go.mod h1:SK73t
github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w=
github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=

View file

@ -30,6 +30,7 @@ import (
"code.gitea.io/gitea/modules/util"
"xorm.io/builder"
"xorm.io/xorm/schemas"
)
// ActionType represents the type of an action.
@ -70,25 +71,36 @@ const (
// used in template render.
type Action struct {
ID int64 `xorm:"pk autoincr"`
UserID int64 `xorm:"INDEX"` // Receiver user id.
UserID int64 // Receiver user id.
OpType ActionType
ActUserID int64 `xorm:"INDEX"` // Action user id.
ActUser *user_model.User `xorm:"-"`
RepoID int64 `xorm:"INDEX"`
ActUserID int64 // Action user id.
ActUser *user_model.User `xorm:"-"`
RepoID int64
Repo *repo_model.Repository `xorm:"-"`
CommentID int64 `xorm:"INDEX"`
Comment *issues_model.Comment `xorm:"-"`
IsDeleted bool `xorm:"INDEX NOT NULL DEFAULT false"`
IsDeleted bool `xorm:"NOT NULL DEFAULT false"`
RefName string
IsPrivate bool `xorm:"INDEX NOT NULL DEFAULT false"`
IsPrivate bool `xorm:"NOT NULL DEFAULT false"`
Content string `xorm:"TEXT"`
CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
CreatedUnix timeutil.TimeStamp `xorm:"created"`
}
func init() {
db.RegisterModel(new(Action))
}
// TableIndices implements xorm's TableIndices interface
func (a *Action) TableIndices() []*schemas.Index {
actUserIndex := schemas.NewIndex("au_r_c_u_d", schemas.IndexType)
actUserIndex.AddColumn("act_user_id", "repo_id", "created_unix", "user_id", "is_deleted")
repoIndex := schemas.NewIndex("r_c_u_d", schemas.IndexType)
repoIndex.AddColumn("repo_id", "created_unix", "user_id", "is_deleted")
return []*schemas.Index{actUserIndex, repoIndex}
}
// GetOpType gets the ActionType of this action.
func (a *Action) GetOpType() ActionType {
return a.OpType

View file

@ -733,7 +733,7 @@ func DeleteLabelsByRepoID(ctx context.Context, repoID int64) error {
// CountOrphanedLabels return count of labels witch are broken and not accessible via ui anymore
func CountOrphanedLabels() (int64, error) {
noref, err := db.GetEngine(db.DefaultContext).Table("label").Where("repo_id=? AND org_id=?", 0, 0).Count("label.id")
noref, err := db.GetEngine(db.DefaultContext).Table("label").Where("repo_id=? AND org_id=?", 0, 0).Count()
if err != nil {
return 0, err
}

View file

@ -387,6 +387,8 @@ var migrations = []Migration{
NewMigration("Add auto merge table", addAutoMergeTable),
// v215 -> v216
NewMigration("allow to view files in PRs", addReviewViewedFiles),
// v216 -> v217
NewMigration("Improve Action table indices", improveActionTableIndices),
}
// GetCurrentDBVersion returns the current db version

67
models/migrations/v216.go Normal file
View file

@ -0,0 +1,67 @@
// 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 migrations
import (
"code.gitea.io/gitea/modules/timeutil"
"xorm.io/xorm"
"xorm.io/xorm/schemas"
)
type improveActionTableIndicesAction struct {
ID int64 `xorm:"pk autoincr"`
UserID int64 // Receiver user id.
OpType int
ActUserID int64 // Action user id.
RepoID int64
CommentID int64 `xorm:"INDEX"`
IsDeleted bool `xorm:"NOT NULL DEFAULT false"`
RefName string
IsPrivate bool `xorm:"NOT NULL DEFAULT false"`
Content string `xorm:"TEXT"`
CreatedUnix timeutil.TimeStamp `xorm:"created"`
}
// TableName sets the name of this table
func (a *improveActionTableIndicesAction) TableName() string {
return "action"
}
// TableIndices implements xorm's TableIndices interface
func (a *improveActionTableIndicesAction) TableIndices() []*schemas.Index {
actUserIndex := schemas.NewIndex("au_r_c_u_d", schemas.IndexType)
actUserIndex.AddColumn("act_user_id", "repo_id", "created_unix", "user_id", "is_deleted")
repoIndex := schemas.NewIndex("r_c_u_d", schemas.IndexType)
repoIndex.AddColumn("repo_id", "created_unix", "user_id", "is_deleted")
return []*schemas.Index{actUserIndex, repoIndex}
}
func improveActionTableIndices(x *xorm.Engine) error {
{
type Action struct {
ID int64 `xorm:"pk autoincr"`
UserID int64 `xorm:"INDEX"` // Receiver user id.
OpType int
ActUserID int64 `xorm:"INDEX"` // Action user id.
RepoID int64 `xorm:"INDEX"`
CommentID int64 `xorm:"INDEX"`
IsDeleted bool `xorm:"INDEX NOT NULL DEFAULT false"`
RefName string
IsPrivate bool `xorm:"INDEX NOT NULL DEFAULT false"`
Content string `xorm:"TEXT"`
CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
}
if err := x.Sync2(&Action{}); err != nil {
return err
}
if err := x.DropIndexes(&Action{}); err != nil {
return err
}
}
return x.Sync2(&improveActionTableIndicesAction{})
}

View file

@ -199,6 +199,12 @@ func checkDBConsistency(ctx context.Context, logger log.Logger, autofix bool) er
// find OAuth2AuthorizationCode without existing OAuth2Grant
genericOrphanCheck("Orphaned OAuth2AuthorizationCode without existing OAuth2Grant",
"oauth2_authorization_code", "oauth2_grant", "oauth2_authorization_code.grant_id=oauth2_grant.id"),
// find stopwatches without existing user
genericOrphanCheck("Orphaned Stopwatches without existing User",
"stopwatch", "user", "stopwatch.user_id=user.id"),
// find stopwatches without existing issue
genericOrphanCheck("Orphaned Stopwatches without existing Issue",
"stopwatch", "issue", "stopwatch.issue_id=issue.id"),
)
for _, c := range consistencyChecks {

View file

@ -94,7 +94,9 @@ loop:
for _, userStopwatches := range usersStopwatches {
apiSWs, err := convert.ToStopWatches(userStopwatches.StopWatches)
if err != nil {
log.Error("Unable to APIFormat stopwatches: %v", err)
if !issues_model.IsErrIssueNotExist(err) {
log.Error("Unable to APIFormat stopwatches: %v", err)
}
continue
}
dataBs, err := json.Marshal(apiSWs)

View file

@ -238,6 +238,9 @@ func syncGitConfig() (err error) {
if err := configSet("gc.writeCommitGraph", "true"); err != nil {
return err
}
if err := configSet("fetch.writeCommitGraph", "true"); err != nil {
return err
}
}
if SupportProcReceive {
@ -251,6 +254,19 @@ func syncGitConfig() (err error) {
}
}
// Due to CVE-2022-24765, git now denies access to git directories which are not owned by current user
// however, some docker users and samba users find it difficult to configure their systems so that Gitea's git repositories are owned by the Gitea user. (Possibly Windows Service users - but ownership in this case should really be set correctly on the filesystem.)
// see issue: https://github.com/go-gitea/gitea/issues/19455
// Fundamentally the problem lies with the uid-gid-mapping mechanism for filesystems in docker on windows (and to a lesser extent samba).
// Docker's configuration mechanism for local filesystems provides no way of setting this mapping and although there is a mechanism for setting this uid through using cifs mounting it is complicated and essentially undocumented
// Thus the owner uid/gid for files on these filesystems will be marked as root.
// As Gitea now always use its internal git config file, and access to the git repositories is managed through Gitea,
// it is now safe to set "safe.directory=*" for internal usage only.
// Please note: the wildcard "*" is only supported by Git 2.30.4/2.31.3/2.32.2/2.33.3/2.34.3/2.35.3/2.36 and later
// Although only supported by Git 2.30.4/2.31.3/2.32.2/2.33.3/2.34.3/2.35.3/2.36 and later - this setting is tolerated by earlier versions
if err := configAddNonExist("safe.directory", "*"); err != nil {
return err
}
if runtime.GOOS == "windows" {
if err := configSet("core.longpaths", "true"); err != nil {
return err

View file

@ -89,8 +89,10 @@ func (l *ChannelledLog) Start() {
l.closeLogger()
return
}
l.emptyQueue()
l.loggerProvider.Flush()
case <-l.close:
l.emptyQueue()
l.closeLogger()
return
}
@ -111,6 +113,20 @@ func (l *ChannelledLog) LogEvent(event *Event) error {
}
}
func (l *ChannelledLog) emptyQueue() bool {
for {
select {
case event, ok := <-l.queue:
if !ok {
return false
}
l.loggerProvider.LogEvent(event)
default:
return true
}
}
}
func (l *ChannelledLog) closeLogger() {
l.loggerProvider.Flush()
l.loggerProvider.Close()
@ -345,18 +361,41 @@ func (m *MultiChannelledLog) Start() {
m.closeLoggers()
return
}
m.emptyQueue()
m.rwmutex.RLock()
for _, logger := range m.loggers {
logger.Flush()
}
m.rwmutex.RUnlock()
case <-m.close:
m.emptyQueue()
m.closeLoggers()
return
}
}
}
func (m *MultiChannelledLog) emptyQueue() bool {
for {
select {
case event, ok := <-m.queue:
if !ok {
return false
}
m.rwmutex.RLock()
for _, logger := range m.loggers {
err := logger.LogEvent(event)
if err != nil {
fmt.Println(err)
}
}
m.rwmutex.RUnlock()
default:
return true
}
}
}
// LogEvent logs an event to this MultiChannelledLog
func (m *MultiChannelledLog) LogEvent(event *Event) error {
select {

View file

@ -976,9 +976,6 @@ type remoteAddress struct {
func mirrorRemoteAddress(ctx context.Context, m *repo_model.Repository, remoteName string) remoteAddress {
a := remoteAddress{}
if !m.IsMirror {
return a
}
remoteURL := m.OriginalURL
if remoteURL == "" {

View file

@ -2,6 +2,7 @@ home=Startseite
dashboard=Übersicht
explore=Erkunden
help=Hilfe
logo=Logo
sign_in=Anmelden
sign_in_with=Anmelden mit
sign_out=Abmelden
@ -44,7 +45,9 @@ webauthn_error_unknown=Ein unbekannter Fehler ist aufgetreten. Bitte versuche es
webauthn_error_insecure=WebAuthn unterstützt nur sichere Verbindungen. Zum Testen über HTTP kannst du "localhost" oder "127.0.0.1" als Host verwenden
webauthn_error_unable_to_process=Der Server konnte deine Anfrage nicht bearbeiten.
webauthn_error_duplicated=Für diese Anfrage ist der Sicherheitsschlüssel nicht erlaubt. Bitte stell sicher, dass er nicht bereits registriert ist.
webauthn_error_empty=Du musst einen Namen für diesen Schlüssel festlegen.
webauthn_error_timeout=Das Zeitlimit wurde erreicht, bevor dein Schlüssel gelesen werden konnte. Bitte lade die Seite erneut.
webauthn_u2f_deprecated=Der Schlüssel: '%s' authentifiziert sich über den veralteten U2F-Prozess. Bitte registriere den Schlüssel neu und lösche die alte Registrierung.
webauthn_reload=Neu laden
repository=Repository
@ -103,6 +106,7 @@ error404=Die Seite, die du gerade versuchst aufzurufen, <strong>existiert entwed
never=Niemals
rss_feed=RSS Feed
[error]
occurred=Ein Fehler ist aufgetreten
@ -143,6 +147,8 @@ path=Pfad
sqlite_helper=Dateipfad zur SQLite3 Datenbank.<br>Gebe einen absoluten Pfad an, wenn Gitea als Service gestartet wird.
reinstall_error=Du versuchst, in eine bereits existierende Gitea Datenbank zu installieren
reinstall_confirm_message=Eine Neuinstallation mit einer bestehenden Gitea-Datenbank kann mehrere Probleme verursachen. In den meisten Fällen solltest du deine vorhandene "app.ini" verwenden, um Gitea auszuführen. Wenn du weist, was du tust, bestätigen die folgenden Angaben:
reinstall_confirm_check_1=Die von der SECRET_KEY in app.ini verschlüsselten Daten können verloren gehen: Benutzer können sich unter Umständen nicht mit 2FA/OTP einloggen & Spiegelungen könnten nicht mehr richtig funktionieren. Durch Ankreuzung dieses Kästchens bestätigst du, dass die aktuelle app.ini Datei den korrekten SECRET_KEY enthält.
reinstall_confirm_check_2=Die Repositories und Einstellungen müssen eventuell neu synchronisiert werden. Durch Ankreuzung dieses Kästchens bestätigst du, dass du die Hooks für die Repositories und authorized_keys Datei manuell neu synchronisierst. Du bestätigst, dass du sicher stellst, dass die Repository- und Spiegel-Einstellungen korrekt sind.
reinstall_confirm_check_3=Du bestätigst, dass du absolut sicher bist, dass diese Gitea mit der richtigen app.ini läuft, und du sicher bist, dass du neu installieren musst. Du bestätigst, dass du die oben genannten Risiken anerkennst.
err_empty_db_path=Der SQLite3 Datenbankpfad darf nicht leer sein.
no_admin_and_disable_registration=Du kannst Selbst-Registrierungen nicht deaktivieren, ohne ein Administratorkonto zu erstellen.
@ -265,6 +271,7 @@ search=Suche
code=Code
search.fuzzy=Ähnlich
search.match=Genau
code_search_unavailable=Derzeit ist die Code-Suche nicht verfügbar. Bitte wende dich an den Website-Administrator.
repo_no_results=Keine passenden Repositories gefunden.
user_no_results=Keine passenden Benutzer gefunden.
org_no_results=Keine passenden Organisationen gefunden.
@ -278,6 +285,7 @@ register_helper_msg=Hast du bereits ein Konto? Jetzt anmelden!
social_register_helper_msg=Hast du bereits ein Konto? Jetzt verknüpfen!
disable_register_prompt=Die Registrierung ist deaktiviert. Bitte wende dich an den Administrator.
disable_register_mail=E-Mail-Bestätigung bei der Registrierung ist deaktiviert.
manual_activation_only=Kontaktiere den Website-Administrator, um die Aktivierung abzuschließen.
remember_me=Dieses Gerät speichern
forgot_password_title=Passwort vergessen
forgot_password=Passwort vergessen?
@ -435,6 +443,7 @@ size_error=` muss die Größe %s haben.`
min_size_error=` muss mindestens %s Zeichen enthalten.`
max_size_error=` darf höchstens %s Zeichen enthalten.`
email_error=` ist keine gültige E-Mail-Adresse.`
url_error=`'%s' ist keine valide URL.`
include_error=` muss den Text „%s“ enthalten.`
glob_pattern_error=` Der Glob Pattern ist ungültig: %s.`
regex_pattern_error=` regex ist ungültig: %s.`
@ -482,7 +491,9 @@ auth_failed=Authentifizierung fehlgeschlagen: %v
still_own_repo=Dein Konto besitzt ein oder mehrere Repositories. Diese müssen zuerst gelöscht oder übertragen werden.
still_has_org=Dein Account ist Mitglied in mindestens einer Organisation. Bitte verlasse diese zuerst.
still_own_packages=Ihr Konto besitzt ein oder mehrere Pakete; löschen Sie diese zuerst.
org_still_own_repo=Diese Organisation besitzt noch mindestens ein Repository. Bitte lösche oder übertrage diese zuerst.
org_still_own_packages=Diese Organisation besitzt noch ein oder mehrere Pakete; lösche diese bitte zuerst.
target_branch_not_exist=Der Ziel-Branch existiert nicht.
@ -545,8 +556,11 @@ continue=Weiter
cancel=Abbrechen
language=Sprache
ui=Theme
hidden_comment_types=Ausgeblendeter Kommentartypen
comment_type_group_reference=Verweis auf Mitglieder
comment_type_group_label=Label
comment_type_group_milestone=Meilenstein
comment_type_group_assignee=Zuweisung
comment_type_group_title=Titel
comment_type_group_branch=Branch
comment_type_group_time_tracking=Zeiterfassung
@ -703,6 +717,9 @@ generate_token_success=Ein neuer Token wurde generiert. Kopiere diesen, da er ni
generate_token_name_duplicate=<strong>%s</strong> wurde bereits als Anwendungsname verwendet. Bitte wähle einen neuen Namen.
delete_token=Löschen
access_token_deletion=Zugriffstoken löschen
access_token_deletion_cancel_action=Abbrechen
access_token_deletion_confirm_action=Löschen
access_token_deletion_desc=Wenn du ein Token löschst, haben die Anwendungen, die es nutzen, keinen Zugriff mehr auf deinen Account. Dies kann nicht rückgängig gemacht werden. Fortfahren?
delete_token_success=Der Zugriffstoken wurde gelöscht. Anwendungen die diesen Token genutzt haben, haben nun keinen Zugriff mehr auf deinen Account.
manage_oauth2_applications=OAuth2 Anwendungen verwalten
@ -755,6 +772,7 @@ passcode_invalid=Die PIN ist falsch. Probiere es erneut.
twofa_enrolled=Die Zwei-Faktor-Authentifizierung wurde für dein Konto aktiviert. Bewahre dein Einmalpasswort (%s) an einem sicheren Ort auf, da es nicht wieder angezeigt werden wird.
twofa_failed_get_secret=Fehler beim Abrufen des Secrets.
webauthn_desc=Sicherheitsschlüssel sind Geräte, die kryptografische Schlüssel beeinhalten. Diese können für die Zwei-Faktor-Authentifizierung verwendet werden. Der Sicherheitsschlüssel muss den Standard „<a rel="noreferrer" target="_blank" href="https://w3c.github.io/webauthn/#webauthn-authenticator">WebAuthn</a>“ unterstützen.
webauthn_register_key=Sicherheitsschlüssel hinzufügen
webauthn_nickname=Nickname
webauthn_delete_key=Sicherheitsschlüssel entfernen
@ -763,6 +781,7 @@ webauthn_delete_key_desc=Wenn du einen Sicherheitsschlüssel entfernst, kannst d
manage_account_links=Verknüpfte Accounts verwalten
manage_account_links_desc=Diese externen Accounts sind mit deinem Gitea-Account verknüpft.
account_links_not_available=Es sind keine externen Accounts mit diesem Gitea-Account verknüpft.
link_account=Account verbinden
remove_account_link=Verknüpften Account entfernen
remove_account_link_desc=Wenn du den verknüpften Account entfernst, wirst du darüber nicht mehr auf deinen Gitea-Account zugreifen können. Fortfahren?
remove_account_link_success=Der verknüpfte Account wurde entfernt.
@ -843,6 +862,7 @@ default_branch=Standardbranch
default_branch_helper=Der default Branch ist der Basisbranch für Pull-Requests und Commits.
mirror_prune=Entfernen
mirror_prune_desc=Entferne veraltete remote-tracking Referenzen
mirror_interval=Mirror-Intervall. Gültige Zeiteinheiten sind 'h', 'm', sowie 's'. 0 deaktiviert die automatische Synchronisierung. (Minimum: %s)
mirror_interval_invalid=Das Spiegel-Intervall ist ungültig.
mirror_address=Klonen via URL
mirror_address_desc=Gib alle erforderlichen Anmeldedaten im Abschnitt "Authentifizierung" ein.
@ -994,6 +1014,7 @@ tags=Tags
issues=Issues
pulls=Pull-Requests
project_board=Projekte
packages=Pakete
labels=Label
org_labels_desc=Labels der Organisationsebene, die mit <strong>allen Repositories</strong> in dieser Organisation verwendet werden können
org_labels_desc_manage=verwalten
@ -1024,6 +1045,7 @@ line_unicode=`Diese Zeile hat versteckte Unicode-Zeichen`
escape_control_characters=Escapen
unescape_control_characters=Unescapen
file_copy_permalink=Permalink kopieren
view_git_blame=Git Blame ansehen
video_not_supported_in_browser=Dein Browser unterstützt das HTML5 'video'-Tag nicht.
audio_not_supported_in_browser=Dein Browser unterstützt den HTML5 'audio'-Tag nicht.
stored_lfs=Gespeichert mit Git LFS
@ -1102,6 +1124,7 @@ editor.no_commit_to_branch=Kann nicht direkt zum Branch committen, da:
editor.user_no_push_to_branch=Benutzer kann nicht in die Branch pushen
editor.require_signed_commit=Branch erfordert einen signierten Commit
editor.cherry_pick=Cherry-Picke %s von:
editor.revert=%s zurücksetzen auf:
commits.desc=Durchsuche die Quellcode-Änderungshistorie.
commits.commits=Commits
@ -1124,6 +1147,11 @@ commits.ssh_key_fingerprint=SSH-Key-Fingerabdruck
commit.actions=Aktionen
commit.revert=Zurücksetzen
commit.revert-header=Setze zurück: %s
commit.revert-content=Branch auswählen, der zurückgesetzt werden soll:
commit.cherry-pick=Cherry-Pick
commit.cherry-pick-header=Cherry-Picke: %s
commit.cherry-pick-content=Branch auswählen, auf dem Cherry-Picked werden soll:
ext_issues=Zugriff auf Externe Issues
ext_issues.desc=Link zu externem Issuetracker.
@ -1162,6 +1190,7 @@ projects.board.deletion_desc=Beim Löschen eines Projektboards werden alle Eintr
projects.board.color=Farbe
projects.open=Öffnen
projects.close=Schließen
projects.board.assigned_to=Zugewiesen an
issues.desc=Verwalte Bug-Reports, Aufgaben und Meilensteine.
issues.filter_assignees=Filter
@ -1256,6 +1285,7 @@ issues.filter_sort.moststars=Meiste Favoriten
issues.filter_sort.feweststars=Wenigste Favoriten
issues.filter_sort.mostforks=Meiste Forks
issues.filter_sort.fewestforks=Wenigste Forks
issues.keyword_search_unavailable=Zurzeit ist die Stichwort-Suche nicht verfügbar. Bitte wende dich an den Website-Administrator.
issues.action_open=Öffnen
issues.action_close=Schließen
issues.action_label=Label
@ -1351,6 +1381,9 @@ issues.lock.reason=Grund für die Sperrung
issues.lock.title=Diskussion zu diesem Issue sperren.
issues.unlock.title=Diskussion zu diesem Issue entsperren.
issues.comment_on_locked=Du kannst einen gesperrten Issue nicht kommentieren.
issues.delete=Löschen
issues.delete.title=Dieses Issue löschen?
issues.delete.text=Möchtest du dieses Issue wirklich löschen? (Dadurch wird der Inhalt dauerhaft gelöscht. Denke daran, es stattdessen zu schließen, wenn du es archivieren willst)
issues.tracker=Zeiterfassung
issues.start_tracking_short=Zeiterfassung starten
issues.start_tracking=Zeiterfassung starten
@ -1391,6 +1424,8 @@ issues.due_date_remove=hat %[2]s das Fälligkeitsdatum %[1]s entfernt
issues.due_date_overdue=Überfällig
issues.due_date_invalid=Das Fälligkeitsdatum ist ungültig oder außerhalb des zulässigen Bereichs. Bitte verwende das Format „jjjj-mm-tt“.
issues.dependency.title=Abhängigkeiten
issues.dependency.issue_no_dependencies=Keine Abhängigkeiten gesetzt.
issues.dependency.pr_no_dependencies=Keine Abhängigkeiten gesetzt.
issues.dependency.add=Abhängigkeit hinzufügen…
issues.dependency.cancel=Abbrechen
issues.dependency.remove=Entfernen
@ -1429,6 +1464,7 @@ issues.review.add_review_request=hat ein Review von %s %s angefragt
issues.review.remove_review_request=hat die Aufforderung zum Review an %s %s entfernt
issues.review.remove_review_request_self=hat das Review verweigert %s
issues.review.pending=Ausstehend
issues.review.pending.tooltip=Dieser Kommentar ist derzeit nicht für andere Benutzer sichtbar. Um Ihre ausstehenden Kommentare einzureichen, wählen Sie '%s' -> '%s/%s/%s' oben auf der Seite.
issues.review.review=Review
issues.review.reviewers=Reviewer
issues.review.outdated=Veraltet
@ -1447,6 +1483,7 @@ issues.content_history.created=erstellt
issues.content_history.delete_from_history=Aus dem Verlauf entfernen
issues.content_history.delete_from_history_confirm=Aus dem Verlauf löschen?
issues.content_history.options=Optionen
issues.reference_link=Referenz: %s
compare.compare_base=Basis
compare.compare_head=vergleichen
@ -1455,7 +1492,13 @@ pulls.desc=Pull-Requests und Code-Reviews aktivieren.
pulls.new=Neuer Pull-Request
pulls.view=Pull-Request ansehen
pulls.compare_changes=Neuer Pull-Request
pulls.allow_edits_from_maintainers=Änderungen von Maintainern erlauben
pulls.allow_edits_from_maintainers_desc=Nutzer mit Schreibzugriff auf den Basisbranch können auch auf diesen Branch pushen
pulls.allow_edits_from_maintainers_err=Aktualisieren fehlgeschlagen
pulls.compare_changes_desc=Wähle den Ziel- und Quellbranch aus.
pulls.has_viewed_file=Gesehen
pulls.has_changed_since_last_review=Inzwischen geändert
pulls.viewed_files_label=%[1]d / %[2]d Dateien reviewed
pulls.compare_base=Ziel
pulls.compare_compare=pullen von
pulls.switch_comparison_type=Vergleichstyp wechseln
@ -1555,8 +1598,17 @@ pulls.merge_instruction_hint=`Siehe auch die <a class="show-instruction">Anleitu
pulls.merge_instruction_step1_desc=Wechsle auf einen neuen Branch in deinem lokalen Repository und teste die Änderungen.
pulls.merge_instruction_step2_desc=Führe die Änderungen zusammen und aktualisiere den Stand online auf Gitea.
pulls.auto_merge_button_when_succeed=(Wenn die Checks erfolgreich sind)
pulls.auto_merge_when_succeed=Automergen, sobald alle Checks erfüllt sind
pulls.auto_merge_newly_scheduled=Der Pull-Request wird automatisch gemergt, wenn alle Checks erfolgreich sind.
pulls.auto_merge_has_pending_schedule=%[1]s hat einen Automerge für diesen Pull-Request %[2]s geplant.
pulls.auto_merge_cancel_schedule=Automerge abbrechen
pulls.auto_merge_not_scheduled=Dieser Pull Request hat keinen geplanten Automerge.
pulls.auto_merge_canceled_schedule=Der Automerge dieses Pull-Requests wurde abgebrochen.
pulls.auto_merge_newly_scheduled_comment=`hat einen Automerge für diesen Pull-Request %[1]s geplant`
pulls.auto_merge_canceled_schedule_comment=`hat den Automerge für diesen Pull-Request %[1]s abgebrochen`
milestones.new=Neuer Meilenstein
milestones.closed=Geschlossen %s
@ -1700,6 +1752,8 @@ search.search_repo=Repository durchsuchen
search.fuzzy=Ähnlich
search.match=Genau
search.results=Suchergebnisse für „%s“ in <a href="%s"> %s</a>
search.code_no_results=Es konnte kein passender Code für deinen Suchbegriff gefunden werden.
search.code_search_unavailable=Derzeit ist die Code-Suche nicht verfügbar. Bitte wende dich an den Website-Administrator.
settings=Einstellungen
settings.desc=In den Einstellungen kannst du die Einstellungen des Repositorys anpassen
@ -1750,6 +1804,9 @@ settings.tracker_url_format_error=Das URL-Format des externen Issue-Trackers ist
settings.tracker_issue_style=Namenskonvention des externen Issue-Trackers
settings.tracker_issue_style.numeric=Numerisch
settings.tracker_issue_style.alphanumeric=Alphanumerisch
settings.tracker_issue_style.regexp=Regulärer Ausdruck
settings.tracker_issue_style.regexp_pattern=Regulärer Ausdruck
settings.tracker_issue_style.regexp_pattern_desc=Die erste gecapturte Gruppe wird statt <code>{index}</code> verwendet.
settings.tracker_url_format_desc=Du kannst die Platzhalter <code>{user}</code>, <code>{repo}</code>, <code>{index}</code> für den Benutzernamen, den Namen des Repositorys und die Issue-Nummer verwenden.
settings.enable_timetracker=Zeiterfassung aktivieren
settings.allow_only_contributors_to_track_time=Nur Mitarbeitern erlauben, die Zeiterfassung zu nutzen
@ -1761,12 +1818,15 @@ settings.pulls.allow_rebase_merge_commit=Rebasing mit expliziten merge commits a
settings.pulls.allow_squash_commits=Mergen von Commits durch Squash aktivieren
settings.pulls.allow_manual_merge=Manuelles Mergen von Pull Requests aktivieren
settings.pulls.enable_autodetect_manual_merge=Autoerkennung von manuellen Merges aktivieren (in Ausnahmefällen können Fehleinschätzungen auftreten)
settings.pulls.allow_rebase_update=Update von Pull Request Branches per Rebase erlauben
settings.pulls.default_delete_branch_after_merge=Standardmäßig bei Pull-Requests den Branch nach dem Mergen löschen
settings.packages_desc=Repository Packages Registry aktivieren
settings.projects_desc=Repository-Projekte aktivieren
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_unindexed=Unindiziert
settings.reindex_button=Zur Warteschlange für erneutes Indexieren hinzufügen
settings.reindex_requested=Erneutes Indexieren angefordert
@ -1918,6 +1978,8 @@ settings.event_pull_request_review=Pull-Request überprüft
settings.event_pull_request_review_desc=Pull-Request genehmigt, abgelehnt oder Kommentar hinterlassen.
settings.event_pull_request_sync=Pull-Request synchronisiert
settings.event_pull_request_sync_desc=Pull-Request synchronisiert.
settings.event_package=Paket
settings.event_package_desc=Paket wurde in einem Repository erstellt oder gelöscht.
settings.branch_filter=Branch-Filter
settings.branch_filter_desc=Whitelist für Branches für Push-, Erzeugungs- und Löschevents, als glob Pattern beschrieben. Es werden Events für alle Branches gemeldet, falls das Pattern <code>*</code> ist, oder falls es leer ist. Siehe die <a href="https://pkg.go.dev/github.com/gobwas/glob#Compile">github.com/gobwas/glob</a> Dokumentation für die Syntax (Englisch). Beispiele: <code>master</code>, <code>{master,release*}</code>.
settings.active=Aktiv
@ -1931,6 +1993,7 @@ settings.hook_type=Hook-Typ
settings.slack_token=Token
settings.slack_domain=Domain
settings.slack_channel=Kanal
settings.add_web_hook_desc=<a target="_blank" rel="noreferrer" href="%s">%s</a> in das Repository integrieren.
settings.web_hook_name_gitea=Gitea
settings.web_hook_name_gogs=Gogs
settings.web_hook_name_slack=Slack
@ -2000,6 +2063,7 @@ settings.require_signed_commits_desc=Pushes auf diesen Branch ablehnen, wenn Com
settings.protect_protected_file_patterns=Geschützte Dateimuster (durch Semikolon getrennt '\;'):
settings.protect_protected_file_patterns_desc=Geschützte Dateien, die nicht einmal geändert werden können, wenn der Benutzer die Rechte hat, Dateien in diesem Branch hinzuzufügen, zu bearbeiten, oder zu löschen. Verschiedene Pattern können per Semicolon (';') getrennt werden. Siehe die <a href="https://pkg.go.dev/github.com/gobwas/glob#Compile">github.com/gobwas/glob</a> Dokumentation für die Pattern Syntax (Englisch). Beispiele: <code>.drone.yml</code>, <code>/docs/**/*.txt</code>.
settings.protect_unprotected_file_patterns=Ungeschützte Dateimuster (durch Semikolon '\;' getrennt):
settings.protect_unprotected_file_patterns_desc=Ungeschützte Dateien können ohne Push-Beschränkung geändert werden, falls der Benutzer Schreibzugriff hat. Mehrere Muster können mit Semikolon getrennt werden ('\;'). Siehe die <a href="https://pkg.go.dev/github.com/gobwas/glob#Compile">github.com/gobwas/glob</a> Dokumentation für Mustersyntax. Beispiele: <code>.drone.yml</code>, <code>/docs/**/*.txt</code>.
settings.add_protected_branch=Schutz aktivieren
settings.delete_protected_branch=Schutz deaktivieren
settings.update_protect_branch_success=Branch-Schutz für den Branch „%s“ wurde geändert.
@ -2209,6 +2273,7 @@ branch.renamed=Branch %s wurde in %s umbenannt.
tag.create_tag=Tag <strong>%s</strong> erstellen
tag.create_tag_operation=Tag erstellen
tag.confirm_create_tag=Tag erstellen
tag.create_tag_from=Neuen Tag von '%s' erstellen
tag.create_success=Tag "%s" wurde erstellt.
@ -2217,6 +2282,8 @@ topic.done=Fertig
topic.count_prompt=Du kannst nicht mehr als 25 Themen auswählen
topic.format_prompt=Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
find_file.go_to_file=Datei suchen
find_file.no_matching=Keine passende Datei gefunden
error.csv.too_large=Diese Datei kann nicht gerendert werden, da sie zu groß ist.
error.csv.unexpected=Diese Datei kann nicht gerendert werden, da sie ein unerwartetes Zeichen in Zeile %d und Spalte %d enthält.
@ -2354,9 +2421,11 @@ first_page=Erste
last_page=Letzte
total=Gesamt: %d
dashboard.new_version_hint=Gitea %s ist jetzt verfügbar, die derzeitige Version ist %s. Weitere Details findest du im <a target="_blank" rel="noreferrer" href="https://blog.gitea.io">Blog</a>.
dashboard.statistic=Übersicht
dashboard.operations=Wartungsoperationen
dashboard.system_status=System-Status
dashboard.statistic_info=Giteas Datenbank hat <b>%d</b> Benutzer, <b>%d</b> Organisationen, <b>%d</b> öffentliche Schlüssel, <b>%d</b> Repositorys, <b>%d</b> Beobachtungen, <b>%d</b> Favoriten, ~<b>%d</b> Aktionen, <b>%d</b> Zugriffe, <b>%d</b> Issues, <b>%d</b> Kommentare, <b>%d</b> Konten sozialer Netzwerke, <b>%d</b> Gefolgte, <b>%d</b> Mirrors, <b>%d</b> Releases, <b>%d</b> Login-Quellen, <b>%d</b> Webhooks, <b>%d</b> Meilensteine, <b>%d</b> Label, <b>%d</b> Hook-Tasks, <b>%d</b> Teams, <b>%d</b> Aktualisierungs-Tasks, <b>%d</b> Anhänge.
dashboard.operation_name=Name der Operation
dashboard.operation_switch=Wechseln
dashboard.operation_run=Ausführen
@ -2395,6 +2464,7 @@ dashboard.resync_all_hooks=Synchronisiere „pre-receive“-, „update“- und
dashboard.reinit_missing_repos=Alle Git-Repositories mit Einträgen neu einlesen
dashboard.sync_external_users=Externe Benutzerdaten synchronisieren
dashboard.cleanup_hook_task_table=Hook-Task-Tabelle bereinigen
dashboard.cleanup_packages=Veraltete Pakete löschen
dashboard.server_uptime=Server-Uptime
dashboard.current_goroutine=Aktuelle Goroutinen
dashboard.current_memory_usage=Aktuelle Speichernutzung
@ -2426,6 +2496,8 @@ dashboard.last_gc_pause=Letzte GC-Pause
dashboard.gc_times=Anzahl GC
dashboard.delete_old_actions=Alle alten Aktionen aus der Datenbank löschen
dashboard.delete_old_actions.started=Löschen aller alten Aktionen in der Datenbank gestartet.
dashboard.update_checker=Update-Checker
dashboard.delete_old_system_notices=Alle alten Systemmeldungen aus der Datenbank löschen
users.user_manage_panel=Benutzerkontenverwaltung
users.new_account=Benutzerkonto erstellen
@ -2460,8 +2532,10 @@ users.allow_import_local=Darf lokale Repositories importieren
users.allow_create_organization=Darf Organisationen erstellen
users.update_profile=Benutzerkonto aktualisieren
users.delete_account=Benutzerkonto löschen
users.cannot_delete_self=Du kannst dich nicht selbst löschen
users.still_own_repo=Dieser Benutzer besitzt noch mindestens ein Repository. Bitte lösche oder übertrage diese zuerst.
users.still_has_org=Dieser Nutzer ist Mitglied einer Organisation. Du musst ihn zuerst aus allen Organisationen entfernen.
users.still_own_packages=Dieser Benutzer besitzt noch ein oder mehrere Pakete. Lösche diese Pakete zuerst.
users.deletion_success=Der Account wurde gelöscht.
users.reset_2fa=2FA zurücksetzen
users.list_status_filter.menu_text=Filter
@ -2508,6 +2582,16 @@ repos.forks=Forks
repos.issues=Issues
repos.size=Größe
packages.package_manage_panel=Paketverwaltung
packages.total_size=Gesamtgröße: %s
packages.owner=Besitzer
packages.creator=Ersteller
packages.name=Name
packages.version=Version
packages.type=Typ
packages.repository=Repository
packages.size=Größe
packages.published=Veröffentlicht
defaulthooks=Standard-Webhooks
defaulthooks.desc=Webhooks senden automatisch eine HTTP POST Anfrage an einen Server, wenn bestimmte Gitea Events ausgelöst werden. Hier definierte Webhooks sind die Standardwerte, die in alle neuen Repositories kopiert werden. Mehr Infos findest du in der <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">Webhooks Anleitung</a> (auf englisch).
@ -2551,9 +2635,13 @@ auths.filter=Benutzerfilter
auths.admin_filter=Admin-Filter
auths.restricted_filter=Eingeschränkte Filter
auths.restricted_filter_helper=Leer lassen, um keine Benutzer als eingeschränkt festzulegen. Verwende einen Stern ('*'), 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 die 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
auths.enable_ldap_groups=LDAP-Gruppen aktivieren
auths.ms_ad_sa=MS-AD-Suchattribute
auths.smtp_auth=SMTP-Authentifizierungstyp
auths.smtphost=SMTP-Host
@ -2579,6 +2667,7 @@ auths.oauth2_authURL=Authorisierungs-URL
auths.oauth2_profileURL=Profil-URL
auths.oauth2_emailURL=E-Mail-URL
auths.skip_local_two_fa=Lokale 2FA überspringen
auths.skip_local_two_fa_helper=Leer lassen bedeutet, dass lokale User die 2FA immer noch bestehen müssen, um sich anzumelden
auths.oauth2_tenant=Inhaber
auths.oauth2_scopes=Zusätzliche Bereiche
auths.oauth2_required_claim_name=Benötigter Claim-Name
@ -2771,9 +2860,12 @@ monitor.next=Nächste Ausführung
monitor.previous=Letzte Ausführung
monitor.execute_times=Ausführungen
monitor.process=Laufende Prozesse
monitor.stacktrace=Stacktraces
monitor.goroutines=%d Goroutinen
monitor.desc=Beschreibung
monitor.start=Startzeit
monitor.execute_time=Ausführungszeit
monitor.last_execution_result=Ergebnis
monitor.process.cancel=Prozess abbrechen
monitor.process.cancel_desc=Abbrechen eines Prozesses kann Datenverlust verursachen
monitor.process.cancel_notices=Abbrechen: <strong>%s</strong>?
@ -2785,6 +2877,7 @@ monitor.queue.type=Typ
monitor.queue.exemplar=Beispieltyp
monitor.queue.numberworkers=Anzahl der Worker
monitor.queue.maxnumberworkers=Maximale Anzahl der Worker
monitor.queue.numberinqueue=Nummer in der Warteschlange
monitor.queue.review=Konfiguration überprüfen
monitor.queue.review_add=Worker hinzufügen/prüfen
monitor.queue.configuration=Erstkonfiguration
@ -2804,6 +2897,12 @@ monitor.queue.pool.flush.title=Warteschlange leeren
monitor.queue.pool.flush.desc=Flush fügt einen Worker hinzu, der sich beendet, sobald die Warteschlange leer ist oder in den Timeout läuft.
monitor.queue.pool.flush.submit=Füge Flush-Worker hinzu
monitor.queue.pool.flush.added=Flush-Worker hinzugefügt für %[1]s
monitor.queue.pool.pause.title=Warteschlange pausieren
monitor.queue.pool.pause.desc=Eine pausierte Warteschlange verarbeitet keine Daten mehr
monitor.queue.pool.pause.submit=Warteschlange pausieren
monitor.queue.pool.resume.title=Warteschlange fortsetzen
monitor.queue.pool.resume.desc=Diese Warteschlange wieder starten
monitor.queue.pool.resume.submit=Warteschlange fortsetzen
monitor.queue.settings.title=Pool-Einstellungen
monitor.queue.settings.desc=Pools wachsen dynamisch mit einem Boost als Reaktion auf die Blockierung ihrer Workerwarteschlangen. Diese Änderungen wirken sich nicht auf die aktuellen Worker Gruppen aus.
@ -2934,4 +3033,94 @@ error.no_unit_allowed_repo=Du hast keine Berechtigung, um auf irgendeinen Bereic
error.unit_not_allowed=Du hast keine Berechtigung, um auf diesen Repository-Bereich zuzugreifen.
[packages]
title=Pakete
desc=Repository-Pakete verwalten.
empty=Noch keine Pakete vorhanden.
empty.documentation=Weitere Informationen zur Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/overview">Dokumentation</a>.
filter.type=Typ
filter.type.all=Alle
filter.no_result=Keine Ergebnisse mit diesen Kriterien gefunden.
filter.container.tagged=Getaggt
filter.container.untagged=Nicht getaggt
published_by=%[1]s von <a href="%[2]s">%[3]s</a> veröffentlicht
published_by_in=%[1]s von <a href="%[2]s">%[3]s</a> in <a href="%[4]s"><strong>%[5]s</strong></a> veröffentlicht
installation=Installation
about=Über dieses Paket
requirements=Voraussetzungen
dependencies=Abhängigkeiten
keywords=Schlüsselwörter
details=Details
details.author=Autor
details.project_site=Projektseite
details.license=Lizenz
assets=Dateien
versions=Versionen
versions.on=am
versions.view_all=Alle anzeigen
dependency.id=ID
dependency.version=Version
composer.registry=Setze diese Paketverwaltung in deiner <code>~/.composer/config.json</code> Datei auf:
composer.install=Nutze folgenden Befehl, um das Paket mit Composer zu installieren:
composer.documentation=Weitere Informationen zur Composer-Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/composer/">Dokumentation</a>.
composer.dependencies=Abhängigkeiten
composer.dependencies.development=Entwicklungsabhängigkeiten
conan.details.repository=Repository
conan.registry=Diese Registry über die Kommandozeile einrichten:
conan.install=Um das Paket mit Conan zu installieren, führe den folgenden Befehl aus:
conan.documentation=Weitere Informationen zur Conan-Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/conan/">Dokumentation</a>.
container.details.type=Container-Image Typ
container.details.platform=Plattform
container.details.repository_site=Repository-Seite
container.details.documentation_site=Dokumentationsseite
container.pull=Downloade das Container-Image aus der Kommandozeile:
container.documentation=Weitere Informationen zur Container-Imageverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/container/">Dokumentation</a>.
container.multi_arch=Betriebsystem / Architektur
container.layers=Container-Image Ebenen
container.labels=Labels
container.labels.key=Schlüssel
container.labels.value=Wert
generic.download=Downloade das Paket aus der Kommandozeile:
generic.documentation=Weitere Informationen zur generischen Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/generic">Dokumentation</a>.
helm.registry=Diese Paketverwaltung über die Kommandozeile einrichten:
helm.install=Nutze folgenden Befehl, um das Paket zu installieren:
helm.documentation=Weitere Informationen zur Helm-Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/helm/">Dokumentation</a>.
maven.registry=Setze diese Paketverwaltung in der <code>pom.xml</code> deines Projektes auf:
maven.install=Nimm Folgendes in den <code>dependencies</code> deiner <code>pom.xml</code> auf, um das Paket zu installieren:
maven.install2=Über die Kommandozeile ausführen:
maven.download=Nutze folgendes Kommando, um die Dependency herunterzuladen:
maven.documentation=Weitere Informationen zur Maven-Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/maven/">Dokumentation</a>.
nuget.registry=Diese Registry über die Kommandozeile einrichten:
nuget.install=Um das Paket mit NuGet zu installieren, führe den folgenden Befehl aus:
nuget.documentation=Weitere Informationen zur NuGet-Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/nuget/">Dokumentation</a>.
nuget.dependency.framework=Zielframework
npm.registry=Setze diese Paketverwaltung in der <code>.npmrc</code> deines Projektes auf:
npm.install=Um das Paket mit npm zu installieren, führe den folgenden Befehl aus:
npm.install2=oder füge es zur package.json-Datei hinzu:
npm.documentation=Weitere Informationen zur npm-Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/npm/">Dokumentation</a>.
npm.dependencies=Abhängigkeiten
npm.dependencies.development=Entwicklungsabhängigkeiten
npm.dependencies.peer=Peer Abhängigkeiten
npm.dependencies.optional=Optionale Abhängigkeiten
npm.details.tag=Tag
pypi.requires=Erfordert Python
pypi.install=Nutze folgenden Befehl, um das Paket mit pip zu installieren:
pypi.documentation=Weitere Informationen zur PyPI-Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/pypi/">Dokumentation</a>.
rubygems.install=Um das Paket mit gem zu installieren, führe den folgenden Befehl aus:
rubygems.install2=oder füg es zum Gemfile hinzu:
rubygems.dependencies.runtime=Laufzeitabhängigkeiten
rubygems.dependencies.development=Entwicklungsabhängigkeiten
rubygems.required.ruby=Benötigt Ruby Version
rubygems.required.rubygems=Benötigt RubyGem Version
rubygems.documentation=Weitere Informationen zur RubyGems-Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/rubygems/">Dokumentation</a>.
settings.link=Dieses Paket einem Repository zuweisen
settings.link.description=Wenn du ein Paket mit einem Repository verknüpfst, wird es in der Paketliste des Repositories angezeigt.
settings.link.select=Repository auswählen
settings.link.button=Repository-Link aktualisieren
settings.link.success=Repository-Link wurde erfolgreich aktualisiert.
settings.link.error=Fehler beim Aktualisieren des Repository-Links.
settings.delete=Paket löschen
settings.delete.description=Das Löschen eines Pakets ist dauerhaft und kann nicht rückgängig gemacht werden.
settings.delete.notice=Du bist dabei, %s (%s) zu löschen. Dieser Vorgang ist unwiderruflich. Bist du sicher?
settings.delete.success=Das Paket wurde gelöscht.
settings.delete.error=Löschen des Pakets fehlgeschlagen.

View file

@ -2,6 +2,7 @@ home=Inicio
dashboard=Panel de control
explore=Explorar
help=Ayuda
logo=Logotipo
sign_in=Iniciar sesión
sign_in_with=Iniciar sesión con
sign_out=Cerrar sesión
@ -105,6 +106,7 @@ error404=La página a la que está intentando acceder o <strong>no existe</stron
never=Nunca
rss_feed=Fuentes RSS
[error]
occurred=Ha ocurrido un error
@ -441,6 +443,7 @@ size_error=` debe ser de tamaño %s.`
min_size_error=` debe contener al menos %s caracteres.`
max_size_error=` debe contener como máximo %s caracteres.`
email_error=` no es una dirección de correo válida.`
url_error=`'%s' no es un URL válido.`
include_error=` debe contener la subcadena '%s'.`
glob_pattern_error=` el patrón globo no es válido: %s.`
regex_pattern_error=` el patrón de regex no es válido: %s.`
@ -488,7 +491,9 @@ auth_failed=Autenticación fallo: %v
still_own_repo=Su cuenta posee uno o más repositorios; elimine o transfiera primero.
still_has_org=Su cuenta es miembro de una o más organizaciones; déjalas primero.
still_own_packages=Su cuenta posee uno o más repositorios; elimine o transfiera primero.
org_still_own_repo=Esta organización todavía es dueña de uno o más repositorios; elimínelos o transfiéralos primero.
org_still_own_packages=Esta organización todavía es dueña de uno o más repositorios; elimínelos o transfiéralos primero.
target_branch_not_exist=La rama de destino no existe
@ -561,6 +566,12 @@ comment_type_group_branch=Rama
comment_type_group_time_tracking=Seguimiento de Tiempo
comment_type_group_deadline=Fecha límite
comment_type_group_dependency=Dependencia
comment_type_group_lock=Estado de bloqueo
comment_type_group_review_request=Revisión solicitada
comment_type_group_pull_request_push=Commits añandidos
comment_type_group_project=Proyecto
comment_type_group_issue_ref=Referencia del incidente
saved_successfully=Tus ajustes se han guardado correctamente.
privacy=Privacidad
keep_activity_private=Ocultar la actividad de la página del perfil
keep_activity_private_popup=Hace la actividad visible sólo para ti y los administradores
@ -706,6 +717,9 @@ generate_token_success=Su nuevo token ha sido generado. Cópielo ahora, ya que n
generate_token_name_duplicate=<strong>%s</strong> ya se ha utilizado como nombre de la aplicación. Por favor, utilice una nueva.
delete_token=Eliminar
access_token_deletion=Eliminar Token de Acceso
access_token_deletion_cancel_action=Cancelar
access_token_deletion_confirm_action=Eliminar
access_token_deletion_desc=Eliminar un token revocará el acceso a su cuenta para las aplicaciones que lo usen. Esto no se puede deshacer. ¿Continuar?
delete_token_success=El token ha sido eliminado. Las aplicaciones que lo usen ya no tienen acceso a su cuenta.
manage_oauth2_applications=Administrar aplicaciones OAuth2
@ -767,6 +781,7 @@ webauthn_delete_key_desc=Si elimina una clave de seguridad no podrá utilizarla
manage_account_links=Administrar cuentas vinculadas
manage_account_links_desc=Estas cuentas externas están vinculadas a su cuenta de Gitea.
account_links_not_available=Actualmente no hay cuentas externas vinculadas a su cuenta de Gitea.
link_account=Enlazar cuenta
remove_account_link=Eliminar cuenta vinculada
remove_account_link_desc=Eliminar una cuenta vinculada revocará su acceso a su cuenta de Gitea. ¿Continuar?
remove_account_link_success=La cuenta vinculada ha sido eliminada.
@ -847,6 +862,7 @@ default_branch=Rama por defecto
default_branch_helper=La rama por defecto es la rama base para pull requests y commits de código.
mirror_prune=Purgar
mirror_prune_desc=Eliminar referencias de seguimiento de remotes obsoletas
mirror_interval=Intervalo de replicación (las unidades de tiempo válidas son «h», «m» y «s»). 0 desactiva la sincronización automática. (Intervalo mínimo: %s)
mirror_interval_invalid=El intervalo de réplica no es válido.
mirror_address=Clonar desde URL
mirror_address_desc=Ponga cualquier credencial requerida en la sección de Autorización.
@ -998,6 +1014,7 @@ tags=Etiquetas
issues=Incidencias
pulls=Pull Requests
project_board=Proyectos
packages=Paquetes
labels=Etiquetas
org_labels_desc=Etiquetas de nivel de la organización que pueden ser utilizadas con <strong>todos los repositorios</strong> bajo esta organización
org_labels_desc_manage=gestionar
@ -1028,6 +1045,7 @@ line_unicode=`Esta línea tiene caracteres unicode ocultos`
escape_control_characters=Escapar
unescape_control_characters=No Escapar
file_copy_permalink=Copiar Permalink
view_git_blame=Ver la culpa de Git
video_not_supported_in_browser=Su navegador no soporta el tag video de HTML5.
audio_not_supported_in_browser=Su navegador no soporta el tag audio de HTML5.
stored_lfs=Almacenados con Git LFS
@ -1066,6 +1084,10 @@ editor.add_tmpl=Añadir '<filename>'
editor.add=Añadir '%s'
editor.update=Actualizar '%s'
editor.delete=Eliminar '%s'
editor.patch=Aplicar parche
editor.patching=Parcheando:
editor.fail_to_apply_patch=No se puede aplicar el parche '%s'
editor.new_patch=Nuevo parche
editor.commit_message_desc=Añadir una descripción extendida opcional…
editor.signoff_desc=Añadir un trailer firmado por el committer al final del mensaje de registro de confirmación.
editor.commit_directly_to_this_branch=Hacer commit directamente en la rama <strong class="branch-name">%s</strong>.
@ -1101,6 +1123,8 @@ editor.cannot_commit_to_protected_branch=No se puede hacer commit a la rama prot
editor.no_commit_to_branch=No se puede hacer commit directamente a la rama porque:
editor.user_no_push_to_branch=El usuario no puede hacer push a la rama
editor.require_signed_commit=Esta rama requiere un commit firmado
editor.cherry_pick=Hacer Cherry-pick %s en:
editor.revert=Revertir %s en:
commits.desc=Ver el historial de cambios de código fuente.
commits.commits=Commits
@ -1121,6 +1145,13 @@ commits.signed_by_untrusted_user_unmatched=Firmado por un usuario no fiable que
commits.gpg_key_id=ID de clave GPG
commits.ssh_key_fingerprint=Huella clave SSH
commit.actions=Acciones
commit.revert=Revertir
commit.revert-header=Revertir: %s
commit.revert-content=Seleccionar rama en la que revertir:
commit.cherry-pick=Hacer Cherry-pick
commit.cherry-pick-header=Hacer Cherry-pick: %s
commit.cherry-pick-content=Seleccionar rama en la que hacer cherry-pick:
ext_issues=Acceso a incidencias externas
ext_issues.desc=Enlace a un gestor de incidencias externo.
@ -1159,6 +1190,7 @@ projects.board.deletion_desc=Eliminar un tablón de proyecto mueve todas las inc
projects.board.color=Color
projects.open=Abrir
projects.close=Cerrar
projects.board.assigned_to=Asignado a
issues.desc=Organizar los informes de fallos, tareas e hitos.
issues.filter_assignees=Filtrar asignado
@ -1253,6 +1285,7 @@ issues.filter_sort.moststars=Mas estrellas
issues.filter_sort.feweststars=Menor número de estrellas
issues.filter_sort.mostforks=La mayoría de forks
issues.filter_sort.fewestforks=Menor número de forks
issues.keyword_search_unavailable=Actualmente la búsqueda por palabra clave no está disponible. Por favor, póngase en contacto con el administrador de su sitio.
issues.action_open=Abrir
issues.action_close=Cerrar
issues.action_label=Etiqueta
@ -1348,6 +1381,9 @@ issues.lock.reason=Motivo del bloqueo
issues.lock.title=Bloquear conversación sobre esta incidencia.
issues.unlock.title=Desbloquear conversación sobre esta incidencia.
issues.comment_on_locked=No puede comentar una incidencia bloqueada.
issues.delete=Eliminar
issues.delete.title=¿Eliminar esta incidencia?
issues.delete.text=¿Realmente quieres eliminar esta incidencia? (Esto eliminará permanentemente todo el contenido. Considera cerrarlo en su lugar, si quieres mantenerlo archivado)
issues.tracker=Gestor de tiempo
issues.start_tracking_short=Iniciar temporizador
issues.start_tracking=Inicio de seguimiento de tiempo
@ -1388,6 +1424,8 @@ issues.due_date_remove=eliminó la fecha de vencimiento %s %s
issues.due_date_overdue=Vencido
issues.due_date_invalid=La fecha de vencimiento es inválida o está fuera de rango. Por favor utilice el formato 'aaaa-mm-dd'.
issues.dependency.title=Dependencias
issues.dependency.issue_no_dependencies=No se han establecido dependencias.
issues.dependency.pr_no_dependencies=No se han establecido dependencias.
issues.dependency.add=Añadir dependencia…
issues.dependency.cancel=Cancelar
issues.dependency.remove=Eliminar
@ -1426,6 +1464,7 @@ issues.review.add_review_request=solicitud de revisión de %s %s
issues.review.remove_review_request=solicitud de revisión eliminada para %s %s
issues.review.remove_review_request_self=rechazó revisar %s
issues.review.pending=Pendiente
issues.review.pending.tooltip=Este comentario no es visible actualmente para otros usuarios. Para enviar sus comentarios pendientes, seleccione '%s' -> '%s/%s/%s' en la parte superior de la página.
issues.review.review=Revisar
issues.review.reviewers=Revisores
issues.review.outdated=Obsoleto
@ -1444,6 +1483,7 @@ issues.content_history.created=creado
issues.content_history.delete_from_history=Eliminar del historial
issues.content_history.delete_from_history_confirm=¿Eliminar del historial?
issues.content_history.options=Opciones
issues.reference_link=Referencia: %s
compare.compare_base=base
compare.compare_head=comparar
@ -1452,7 +1492,13 @@ pulls.desc=Activar Pull Requests y revisiones de código.
pulls.new=Nuevo Pull Request
pulls.view=Ver Pull Request
pulls.compare_changes=Nuevo pull request
pulls.allow_edits_from_maintainers=Permitir ediciones de mantenedores
pulls.allow_edits_from_maintainers_desc=Los usuarios con acceso de escritura a la rama base también pueden hacer push a esta rama
pulls.allow_edits_from_maintainers_err=Error al Actualizar
pulls.compare_changes_desc=Seleccione la rama en la que se fusiona y la rama a recuperar.
pulls.has_viewed_file=Visto
pulls.has_changed_since_last_review=Cambiado desde tu última revisión
pulls.viewed_files_label=%[1]d / %[2]d archivos vistos
pulls.compare_base=fusionar en
pulls.compare_compare=recuperar de
pulls.switch_comparison_type=Cambiar tipo de comparación
@ -1552,8 +1598,17 @@ pulls.merge_instruction_hint=`También puede ver <a class="show-instruction">ins
pulls.merge_instruction_step1_desc=Desde el repositorio de su proyecto, revisa una nueva rama y prueba los cambios.
pulls.merge_instruction_step2_desc=Combine los cambios y actualice en Gitea.
pulls.auto_merge_button_when_succeed=(cuando las comprobaciones tengan éxito)
pulls.auto_merge_when_succeed=Fusionar automática cuando todas las comprobaciones tengan éxito
pulls.auto_merge_newly_scheduled=El Pull Request se programó para fusionarse cuando todas las comprobaciones tengan éxito.
pulls.auto_merge_has_pending_schedule=%[1]s programó este Pull Request para fusionar automática cuando todas las comprobaciones tengan éxito %[2]s.
pulls.auto_merge_cancel_schedule=Cancelar fusión automática
pulls.auto_merge_not_scheduled=Este Pull Request no está programado para fusionar automática.
pulls.auto_merge_canceled_schedule=Fusión automaticá estaba cancellada para este Pull Request.
pulls.auto_merge_newly_scheduled_comment=`programó este Pull Request para fusionar automática cuando todas las comprobaciones tengan éxito %[1]s`
pulls.auto_merge_canceled_schedule_comment=`canceló la fusión automática de este Pull Request %[1]s`
milestones.new=Nuevo hito
milestones.closed=Cerrada %s
@ -1697,6 +1752,8 @@ search.search_repo=Buscar repositorio
search.fuzzy=Parcial
search.match=Coincidir
search.results=Resultados de la búsqueda para "%s" en <a href="%s">%s</a>
search.code_no_results=No se ha encontrado código de fuente que coincida con su término de búsqueda.
search.code_search_unavailable=Actualmente la búsqueda de código no está disponible. Póngase en contacto con el administrador de su sitio.
settings=Configuración
settings.desc=La configuración es donde puede administrar la configuración del repositorio
@ -1747,6 +1804,9 @@ settings.tracker_url_format_error=El formato de la URL del gestor de incidencias
settings.tracker_issue_style=Formato numérico del gestor de incidencias externo
settings.tracker_issue_style.numeric=Numérico
settings.tracker_issue_style.alphanumeric=Alfanumérico
settings.tracker_issue_style.regexp=Expresión regular
settings.tracker_issue_style.regexp_pattern=Pauta de expresiones regulares
settings.tracker_issue_style.regexp_pattern_desc=Se utilizará el primer grupo capturado en lugar de <code>{index}</code>.
settings.tracker_url_format_desc=Utilice los marcadores <code>{user}</code>, <code>{repo}</code> y <code>{index}</code> para designar el usuario, el nombre del repositorio y el índice de incidencia.
settings.enable_timetracker=Habilitar gestor de tiempo
settings.allow_only_contributors_to_track_time=Deje que solo los colaboradores hagan un seguimiento del tiempo
@ -1758,7 +1818,9 @@ settings.pulls.allow_rebase_merge_commit=Activar Rebase con commits explícitos
settings.pulls.allow_squash_commits=Activar Squash en los commits fusionados
settings.pulls.allow_manual_merge=Habilitar marcar PR como fusionado manualmente
settings.pulls.enable_autodetect_manual_merge=Habilitar la autodetección de los commits fusionado manualmente (Nota: en algunos casos especiales, pueden producirse errores de apreciación)
settings.pulls.allow_rebase_update=Habilitar la actualización de la rama de Pull Request por rebase
settings.pulls.default_delete_branch_after_merge=Eliminar por defecto la rama de pull request después de fusionar
settings.packages_desc=Habilitar registro de paquetes de repositorio
settings.projects_desc=Activar Proyectos de Repositorio
settings.admin_settings=Ajustes de administrador
settings.admin_enable_health_check=Activar cheques de estado de salud del repositorio (git fsck)
@ -1916,6 +1978,8 @@ settings.event_pull_request_review=Pull Request revisado
settings.event_pull_request_review_desc=Pull request aprobado, rechazado o comentario de revisión.
settings.event_pull_request_sync=Pull Request sincronizado
settings.event_pull_request_sync_desc=Pull request sincronizado.
settings.event_package=Paquete
settings.event_package_desc=Paquete creado o eliminado en un repositorio.
settings.branch_filter=Filtro de rama
settings.branch_filter_desc=Lista blanca de rama para eventos de push, creación de rama y eliminación de rama, especificados como patrón globo. Si está vacío o <code>*</code>, se reportan eventos para todas las ramas. Ver <a href="https://pkg.go.dev/github.com/gobwas/glob#Compile">github.com/gobwas/glob</a> documentación para la sintaxis. Ejemplos: <code>master</code>, <code>{master,release*}</code>.
settings.active=Activo
@ -1929,6 +1993,23 @@ settings.hook_type=Tipo de Hook
settings.slack_token=Token
settings.slack_domain=Dominio
settings.slack_channel=Canal
settings.add_web_hook_desc=Integrar <a target="_blank" rel="noreferrer" href="%s">%s</a> en su repositorio.
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=Nombre de usuario Packagist
settings.packagist_api_token=Token de API
settings.packagist_package_url=URL del paquete Packagist
settings.deploy_keys=Claves de Implementación
settings.add_deploy_key=Añadir Clave de Implementación
settings.deploy_key_desc=Las claves de implementación tienen acceso de sólo lectura al repositorio.
@ -2184,11 +2265,15 @@ branch.included_desc=Esta rama forma parte de la predeterminada
branch.included=Incluida
branch.create_new_branch=Crear rama desde la rama:
branch.confirm_create_branch=Crear rama
branch.create_branch_operation=Crear rama
branch.new_branch=Crear nueva rama
branch.new_branch_from=Crear nueva rama desde '%s'
branch.renamed=La rama %s fue renombrada a %s.
tag.create_tag=Crear etiqueta <strong>%s</strong>
tag.create_tag_operation=Crear etiqueta
tag.confirm_create_tag=Crear etiqueta
tag.create_tag_from=Crear etiqueta nueva a partir de «%s»
tag.create_success=La etiqueta '%s' ha sido creada.
@ -2197,6 +2282,8 @@ topic.done=Hecho
topic.count_prompt=No puede seleccionar más de 25 temas
topic.format_prompt=Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
find_file.go_to_file=Ir al archivo
find_file.no_matching=No se encontró ningún archivo que coincidiese
error.csv.too_large=No se puede renderizar este archivo porque es demasiado grande.
error.csv.unexpected=No se puede procesar este archivo porque contiene un carácter inesperado en la línea %d y la columna %d.
@ -2334,9 +2421,11 @@ first_page=Primera
last_page=Última
total=Total: %d
dashboard.new_version_hint=Gitea %s ya está disponible; en este momento ejecuta la versión %s. Consulte el <a target="_blank" rel="noreferrer" href="https://blog.gitea.io">blog</a> para conocer más.
dashboard.statistic=Resumen
dashboard.operations=Operaciones de mantenimiento
dashboard.system_status=Estado del sistema
dashboard.statistic_info=La base de datos de Gitea contiene <b>%d</b> usuarios, <b>%d</b> organizaciones, <b>%d</b> claves públicas, <b>%d</b> repositorios, <b>%d</b> elementos observados, <b>%d</b> destacados, ~<b>%d</b> acciones, <b>%d</b> accesos, <b>%d</b> incidencias, <b>%d</b> comentarios, <b>%d</b> cuentas sociales, <b>%d</b> seguidos, <b>%d</b> réplicas, <b>%d</b> releases, <b>%d</b> orígenes de autenticación, <b>%d</b> webhooks, <b>%d</b> milestones, <b>%d</b> etiquetas, <b>%d</b> tareas de hook, <b>%d</b> equipos, <b>%d</b> tareas de actualización, <b>%d</b> adjuntos.
dashboard.operation_name=Nombre de la operación
dashboard.operation_switch=Interruptor
dashboard.operation_run=Ejecutar
@ -2375,6 +2464,7 @@ dashboard.resync_all_hooks=Resincronizar los hooks de pre-recepción, actualizac
dashboard.reinit_missing_repos=Reiniciar todos los repositorios Git faltantes de los que existen registros
dashboard.sync_external_users=Sincronizar datos de usuario externo
dashboard.cleanup_hook_task_table=Limpiar tabla hook_task
dashboard.cleanup_packages=Limpieza de paquetes caducados
dashboard.server_uptime=Tiempo de actividad del servidor
dashboard.current_goroutine=Gorutinas actuales
dashboard.current_memory_usage=Uso de memoria actual
@ -2406,6 +2496,8 @@ dashboard.last_gc_pause=Última Pausa por GC
dashboard.gc_times=Ejecuciones GC
dashboard.delete_old_actions=Eliminar todas las acciones antiguas de la base de datos
dashboard.delete_old_actions.started=Eliminar todas las acciones antiguas de la base de datos inicializada.
dashboard.update_checker=Buscador de actualizaciones
dashboard.delete_old_system_notices=Borrar todos los avisos antiguos del sistema de la base de datos
users.user_manage_panel=Gestión de cuentas de usuario
users.new_account=Crear Cuenta de Usuario
@ -2440,8 +2532,10 @@ users.allow_import_local=Puede importar repositorios locales
users.allow_create_organization=Puede crear organizaciones
users.update_profile=Actualizar cuenta de usuario
users.delete_account=Eliminar Cuenta de Usuario
users.cannot_delete_self=No puedes eliminarte a ti mismo
users.still_own_repo=Este usuario todavía posee uno o más depósitos. Eliminar o transferir estos repositorios primero.
users.still_has_org=Este usuario es un miembro de una organización. Primero retire el usuario de cualquier organización.
users.still_own_packages=Este usuario todavía posee uno o más paquetes. Elimine estos paquetes primero.
users.deletion_success=La cuenta de usuario ha sido eliminada.
users.reset_2fa=Reiniciar 2FA
users.list_status_filter.menu_text=Filtro
@ -2488,6 +2582,16 @@ repos.forks=Forks
repos.issues=Incidencias
repos.size=Tamaño
packages.package_manage_panel=Gestión de paquetes
packages.total_size=Tamaño total: %s
packages.owner=Propietario
packages.creator=Creador
packages.name=Nombre
packages.version=Versión
packages.type=Tipo
packages.repository=Repositorio
packages.size=Tamaño
packages.published=Publicado
defaulthooks=Webhooks por defecto
defaulthooks.desc=Los Webhooks automáticamente hacen peticiones HTTP POST a un servidor cuando ciertos eventos de Gitea se activan. Los ganchos definidos aquí son predeterminados y serán copiados en todos los nuevos repositorios. Leer más en la guía <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">webhooks</a>.
@ -2531,9 +2635,13 @@ auths.filter=Filtro de usuario
auths.admin_filter=Filtro de aministrador
auths.restricted_filter=Filtro restringido
auths.restricted_filter_helper=Dejar en blanco para no establecer ningún usuario como restringido. Utilice un asterisco ('*') para establecer todos los usuarios que no coincidan con el filtro de administración como restringido.
auths.verify_group_membership=Verificar pertenencia al grupo en LDAP (dejar el filtro vacío para saltar)
auths.group_search_base=Base DN para la búsqueda de grupos
auths.group_attribute_list_users=Atributo del grupo que contiene la lista de usuarios
auths.user_attribute_in_group=Atributo de usuario listado en el grupo
auths.map_group_to_team=Mapear grupos LDAP a equipos de la Organización (dejar el campo vacío para saltar)
auths.map_group_to_team_removal=Eliminar usuarios de equipos sincronizados si el usuario no pertenece al grupo LDAP correspondiente
auths.enable_ldap_groups=Habilitar grupos LDAP
auths.ms_ad_sa=Atributos de búsqueda de MS AD
auths.smtp_auth=Tipo de autenticación SMTP
auths.smtphost=Servidor SMTP
@ -2752,9 +2860,12 @@ monitor.next=Siguiente
monitor.previous=Anterior
monitor.execute_times=Ejecuciones
monitor.process=Procesos en ejecución
monitor.stacktrace=Rastros de pila
monitor.goroutines=%d Gorutinas
monitor.desc=Descripción
monitor.start=Hora de Inicio
monitor.execute_time=Tiempo de ejecución
monitor.last_execution_result=Resultado
monitor.process.cancel=Cancelar el proceso
monitor.process.cancel_desc=Cancelar un proceso puede ocasionar una pérdida de datos
monitor.process.cancel_notices=Cancelar: <strong>%s</strong>?
@ -2766,6 +2877,7 @@ monitor.queue.type=Tipo
monitor.queue.exemplar=Ejemplo
monitor.queue.numberworkers=Número de trabajadores
monitor.queue.maxnumberworkers=Número máximo de trabajadores
monitor.queue.numberinqueue=Número en cola
monitor.queue.review=Revisar configuración
monitor.queue.review_add=Revisar/Añadir trabajadores
monitor.queue.configuration=Configuración inicial
@ -2786,7 +2898,10 @@ monitor.queue.pool.flush.desc=Al vaciar la cola se añadirá un worker que termi
monitor.queue.pool.flush.submit=Añadir trabajador de vaciado
monitor.queue.pool.flush.added=Trabajador de vaciado añadido por %[1]s
monitor.queue.pool.pause.title=Pausar cola
monitor.queue.pool.pause.desc=La pausa de una cola evitará que procese datos
monitor.queue.pool.pause.submit=Pausar cola
monitor.queue.pool.resume.title=Reanudar cola
monitor.queue.pool.resume.desc=Establecer esta cola para reanudar el trabajo
monitor.queue.pool.resume.submit=Reanudar cola
monitor.queue.settings.title=Ajustes del grupo
@ -2918,4 +3033,94 @@ error.no_unit_allowed_repo=No tiene permisos para acceder a ninguna sección de
error.unit_not_allowed=No tiene permisos para acceder a esta sección del repositorio.
[packages]
title=Paquetes
desc=Administrar paquetes del repositorio.
empty=Todavía no hay paquetes.
empty.documentation=Para más información sobre el registro de paquetes, consulte <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/overview">la documentación</a>.
filter.type=Tipo
filter.type.all=Todo
filter.no_result=El filtro no produjo ningún resultado.
filter.container.tagged=Etiquetado
filter.container.untagged=Etiqueta eliminada
published_by=Publicado %[1]s por <a href="%[2]s">%[3]s</a>
published_by_in=Publicado %[1]s por <a href="%[2]s">%[3]s</a> en <a href="%[4]s"><strong>%[5]s</strong></a>
installation=Instalación
about=Acerca de este paquete
requirements=Requisitos
dependencies=Dependencias
keywords=Palabras clave
details=Detalles
details.author=Autoría
details.project_site=Sitio del proyecto
details.license=Licencia
assets=Activos
versions=Versiones
versions.on=en
versions.view_all=Ver todo
dependency.id=Id.
dependency.version=Versión
composer.registry=Configura este registro en el archivo <code>~/.composer/config.json</code>:
composer.install=Para instalar el paquete usando Composer, ejecute el siguiente comando:
composer.documentation=Para más información sobre el registro de Composer, consulte <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/composer/">la documentación</a>.
composer.dependencies=Dependencias
composer.dependencies.development=Dependencias de desarrollo
conan.details.repository=Repositorio
conan.registry=Configurar este registro desde la línea de comandos:
conan.install=Para instalar el paquete usando Conan, ejecuta el siguiente comando:
conan.documentation=Para más información sobre el registro de Conan, consulte <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/conan/">la documentación</a>.
container.details.type=Tipo de imagen
container.details.platform=Plataforma
container.details.repository_site=Sitio del repositorio
container.details.documentation_site=Sitio de documentación
container.pull=Arrastra la imagen desde la línea de comandos:
container.documentation=Para más información sobre el registro de Container, consulte <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/container/">la documentación</a>.
container.multi_arch=SO / Arquitectura
container.layers=Capas de imagen
container.labels=Etiquetas
container.labels.key=Clave
container.labels.value=Valor
generic.download=Descargar paquete desde la línea de comandos:
generic.documentation=Para más información sobre el registro genérico, consulte <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/generic">la documentación</a>.
helm.registry=Configurar este registro desde la línea de comandos:
helm.install=Para instalar el paquete, ejecute el siguiente comando:
helm.documentation=Para obtener más información sobre el registro de Helm, consulte <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/helm/">la documentación</a>.
maven.registry=Configure este registro en su proyecto <code>pom.xml</code> archivo:
maven.install=Para usar el paquete incluya lo siguiente en el bloque <code>dependencias</code> en el archivo <code>pom.xml</code>:
maven.install2=Ejecutar vía línea de comandos:
maven.download=Para descargar la dependencia, ejecute vía línea de comandos:
maven.documentation=Para obtener más información sobre el registro de Maven, consulte <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/maven/">la documentación</a>.
nuget.registry=Configurar este registro desde la línea de comandos:
nuget.install=Para instalar el paquete usando NuGet, ejecute el siguiente comando:
nuget.documentation=Para obtener más información sobre el registro de NuGet consulte <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/nuget/">la documentación</a>.
nuget.dependency.framework=Marco de destino
npm.registry=Configura este registro en tu proyecto <code>.npmrc</code> archivo:
npm.install=Para instalar el paquete usando npm, ejecute el siguiente comando:
npm.install2=o añádelo al archivo package.json:
npm.documentation=Para más información sobre el registro de npm, consulte <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/npm/">la documentación</a>.
npm.dependencies=Dependencias
npm.dependencies.development=Dependencias de desarrollo
npm.dependencies.peer=Dependencias de pares
npm.dependencies.optional=Dependencias opcionales
npm.details.tag=Etiqueta
pypi.requires=Requiere Python
pypi.install=Para instalar el paquete usando pip, ejecute el siguiente comando:
pypi.documentation=Para obtener más información sobre el registro PyPI, consulte <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/pypi/">la documentación</a>.
rubygems.install=Para instalar el paquete usando gem, ejecute el siguiente comando:
rubygems.install2=o añádelo al archivo Gemfile:
rubygems.dependencies.runtime=Dependencias en tiempo de ejecución
rubygems.dependencies.development=Dependencias de desarrollo
rubygems.required.ruby=Requiere versión Ruby
rubygems.required.rubygems=Requiere la versión de RubyGem
rubygems.documentation=Para obtener más información sobre el registro de RubyGems, consulte <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/rubygems/">la documentación</a>.
settings.link=Vincular este paquete a un repositorio
settings.link.description=Si enlaza un paquete con un repositorio, el paquete se enumera en la lista de paquetes del repositorio.
settings.link.select=Seleccionar repositorio
settings.link.button=Actualizar enlace de repositorio
settings.link.success=El enlace del repositorio se ha actualizado correctamente.
settings.link.error=Error al actualizar el enlace del repositorio.
settings.delete=Eliminar paquete
settings.delete.description=La eliminación de un paquete es permanente y no se puede deshacer.
settings.delete.notice=Está a punto de eliminar %s (%s). Esta operación es irreversible, ¿está seguro?
settings.delete.success=Se ha eliminado el paquete.
settings.delete.error=No se pudo eliminar el paquete.

View file

@ -34,6 +34,7 @@ twofa=Authentification à deux facteurs
twofa_scratch=Code de secours pour l'authentification à deux facteurs
passcode=Code d'accès
webauthn_insert_key=Insérez votre clé de sécurité
repository=Dépôt
organization=Organisation
@ -91,6 +92,7 @@ error404=La page que vous essayez d'atteindre <strong>n'existe pas</strong> ou <
never=Jamais
rss_feed=Flux RSS
[error]
missing_csrf=Requête incorrecte: aucun jeton CSRF présent
@ -347,6 +349,7 @@ reset_password.text=Veuillez cliquer sur le lien suivant pour récupérer votre
register_success=Inscription réussie
issue_assigned.issue=@%[1]s vous a assigné le ticket %[2]s dans le dépôt %[3]s.
issue.x_mentioned_you=<b>@%s</b> vous a mentionné:
issue.action.approve=<b>@%[1]s</b> a approuvé cette demande d'ajout.
@ -357,12 +360,17 @@ issue.action.ready_for_review=<b>@%[1]s</b> a marqué cette demande d'ajout prê
issue.in_tree_path=Dans %s:
release.new.subject=%s publiée dans %s
release.new.text=<b>@%[1]s</b> a publié [2]s dans %[3]s
release.title=Titre: %s
release.note=Remarque :
release.downloads=Téléchargements :
release.download.zip=Code source (ZIP)
release.download.targz=Code source (TAR.GZ)
repo.transfer.subject_to=%s aimerait transférer "%s" à %s
repo.transfer.subject_to_you=%s aimerait vous transférer "%s"
repo.transfer.to_you=vous
repo.transfer.body=Pour l'accepter ou le rejeter, visitez %s ou ignorez-le.
repo.collaborator.added.subject=%s vous a ajouté à %s
repo.collaborator.added.text=Vous avez été ajouté en tant que collaborateur du dépôt :
@ -475,6 +483,7 @@ form.name_chars_not_allowed=Le nom d'utilisateur '%s' contient des caractères n
[settings]
profile=Profil
account=Compte
appearance=Apparence
password=Mot de passe
security=Sécurité
avatar=Avatar
@ -498,7 +507,9 @@ website=Site Web
location=Localisation
update_theme=Mise à jour du thème
update_profile=Valider les modifications
update_language=Mettre à jour le langage
update_language_not_found=La langue '%s' n'est pas disponible.
update_language_success=Le langage à été mis à jour.
update_profile_success=Votre profil a été mis à jour.
change_username=Votre nom d'utilisateur a été modifié.
change_username_prompt=Remarque : changer votre nom d'utilisateur change également l'URL de votre compte.
@ -507,6 +518,21 @@ continue=Continuer
cancel=Annuler
language=Langues
ui=Thème
comment_type_group_reference=Référence
comment_type_group_label=Étiquette
comment_type_group_milestone=Jalon
comment_type_group_assignee=Assigné à
comment_type_group_title=Titre
comment_type_group_branch=Branche
comment_type_group_time_tracking=Suivi du temps
comment_type_group_deadline=Date déchéance
comment_type_group_dependency=Dépendance
comment_type_group_lock=Verrouiller le statut
comment_type_group_review_request=Demande de revue
comment_type_group_pull_request_push=Révisions ajoutées
comment_type_group_project=Projet
comment_type_group_issue_ref=Référence du ticket
saved_successfully=Vos paramètres ont été enregistrés avec succès.
privacy=Confidentialité
keep_activity_private=Masquer l'activité de la page de profil
keep_activity_private_popup=Rend l'activité visible uniquement pour vous et les administrateurs
@ -520,6 +546,7 @@ delete_current_avatar=Supprimer l'avatar actuel
uploaded_avatar_not_a_image=Le fichier téléversé n'est pas une image.
uploaded_avatar_is_too_big=Le fichier téléversé dépasse la taille maximale.
update_avatar_success=Votre avatar a été mis à jour.
update_user_avatar_success=L'avatar de l'utilisateur a été mis à jour.
change_password=Modifier le mot de passe
old_password=Mot de passe actuel
@ -580,6 +607,18 @@ ssh_key_been_used=Cette clef SSH a déjà été ajoutée au serveur.
ssh_key_name_used=Une clé SSH avec le même nom existe déjà sur votre compte.
ssh_principal_been_used=Ce principal a déjà été ajouté au serveur.
gpg_key_id_used=Une clef GPG publique avec le même identifiant existe déjà.
gpg_key_verified=Clé vérifiée
gpg_invalid_token_signature=La clé GPG fournie, la signature et le jeton ne correspondent pas ou le jeton n'est pas à jour.
gpg_token_required=Vous devez fournir une signature pour le jeton ci-dessous
gpg_token=Jeton
gpg_token_help=Vous pouvez générer une signature en utilisant :
gpg_token_code=echo "%s" | gpg -a --default-key %s --detach-sig
gpg_token_signature=Signature GPG renforcée
key_signature_gpg_placeholder=Commence par '-----BEGIN PGP SIGNATURE-----'
ssh_token_required=Vous devez fournir une signature pour le jeton ci-dessous
ssh_token=Jeton
ssh_token_help=Vous pouvez générer une signature en utilisant :
ssh_token_signature=Signature SSH renforcée
subkeys=Sous-clés
key_id=Clé ID
key_name=Nom de la Clé
@ -702,6 +741,12 @@ email_notifications.onmention=N'envoyer un e-mail que si vous êtes mentionné
email_notifications.disable=Désactiver les notifications par email
email_notifications.submit=Définir la préférence e-mail
visibility.public=Publique
visibility.public_tooltip=Visible par tous les utilisateurs
visibility.limited=Limitée
visibility.limited_tooltip=Visible uniquement par les utilisateurs connectés
visibility.private=Privée
visibility.private_tooltip=Visible uniquement par les membres de l'organisation
[repo]
new_repo_helper=Un dépôt contient tous les fichiers du projet, y compris l'historique des révisions. Vous l'avez déjà ailleurs ? <a href="%s">Migrer le dépôt.</a>
@ -724,6 +769,10 @@ fork_repo=Créer une bifurcation du dépôt
fork_from=Bifurquer depuis
fork_visibility_helper=La visibilité d'un dépôt bifurqué ne peut pas être modifiée.
use_template=Utiliser ce modèle
clone_in_vsc=Cloner dans VS Code
download_zip=Télécharger le ZIP
download_tar=Télécharger le TAR.GZ
download_bundle=Télécharger le BUNDLE
generate_repo=Générer un dépôt
generate_from=Générer depuis
repo_desc=Description
@ -742,6 +791,8 @@ readme_helper_desc=Vous pouvez écrire ici une description complète de votre pr
auto_init=Initialiser le dépôt (ajoute les fichiers .gitignore, Licence et LISEZMOI)
trust_model_helper=Sélectionnez le modèle de confiance pour la vérification des signatures. Les options possibles sont :
trust_model_helper_collaborator=Collaborateur: Faire confiance aux signatures des collaborateurs
trust_model_helper_committer=Auteur de la révision: Faire confiance aux signatures qui correspondent à celle de l'auteur de la révision
trust_model_helper_collaborator_committer=Collaborateur+Auteur: Faire confiance aux signatures des collaborateurs qui correspondent à l'auteur de la révision
trust_model_helper_default=Valeur par défaut: Utiliser le modèle de confiance par défaut pour cette installation
create_repo=Créer un dépôt
default_branch=Branche par défaut
@ -777,6 +828,7 @@ delete_preexisting_label=Supprimer
delete_preexisting=Supprimer les fichiers préexistants
delete_preexisting_content=Supprimer les fichiers dans %s
delete_preexisting_success=Supprimer les fichiers non adoptés dans %s
blame_prior=Voir le blame avant cette modification
transfer.accept=Accepter le transfert
transfer.accept_desc=Transférer à "%s"
@ -844,6 +896,11 @@ migrate.migrate=Migrer depuis %s
migrate.migrating=Migration de <b>%s</b> ...
migrate.migrating_failed=La migration de <b>%s</b> a échoué.
migrate.migrating_failed.error=Erreur: %s
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.
migrate.gogs.description=Migrer les données depuis notabug.org ou dautres instances de Gogs.
migrate.onedev.description=Migrer les données depuis code.onedev.io ou dautre instance de OneDev.
migrate.migrating_git=Migration des données Git
migrate.migrating_topics=Migration des sujets
migrate.migrating_milestones=Migration des jalons
@ -896,6 +953,7 @@ release=Versions
releases=Versions
tag=Tag
released_this=a publié ceci
file.title=%s sur %s
file_raw=Brut
file_history=Historique
file_view_source=Voir le code source
@ -904,6 +962,7 @@ file_view_raw=Voir le Raw
file_permalink=Lien permanent
file_too_large=Le fichier est trop gros pour être affiché.
file_copy_permalink=Copier le lien permanent
video_not_supported_in_browser=Votre navigateur ne supporte pas le tag HTML5 "video".
audio_not_supported_in_browser=Votre navigateur ne supporte pas la balise « audio » HTML5.
stored_lfs=Stocké avec Git LFS
@ -912,7 +971,9 @@ commit_graph=Graphique des révisions
commit_graph.select=Sélectionner les branches
commit_graph.hide_pr_refs=Masquer les demandes d'ajout
commit_graph.monochrome=Monochrome
commit_graph.color=Couleur
blame=Annotations
download_file=Télécharger le fichier
normal_view=Vue normale
line=ligne
lines=lignes
@ -977,6 +1038,7 @@ editor.require_signed_commit=Cette branche nécessite une révision signée
commits.desc=Naviguer dans l'historique des modifications.
commits.commits=Révisions
commits.no_commits=Pas de révisions en commun. '%s' et '%s' ont des historiques entièrement différents.
commits.nothing_to_compare=Ces branches sont égales.
commits.search=Rechercher des révisions…
commits.search.tooltip=Vous pouvez préfixer les mots-clés avec "author:", "committer:", "after:", ou "before:", par exemple "revert author:Alice before:2019-04-01".
commits.find=Chercher
@ -1025,6 +1087,7 @@ projects.board.set_default=Définir par défaut
projects.board.set_default_desc=Définir ce tableau comme valeur par défaut pour les tickets et demande d'ajouts non catégorisés
projects.board.delete=Supprimer le tableau
projects.board.deletion_desc=La suppression d'un tableau de projet déplace tous les tickets liés dans 'Non catégorisé'. Voulez vous continuer ?
projects.board.color=Couleur
projects.open=Ouvrir
projects.close=Fermer
@ -1126,6 +1189,7 @@ issues.action_milestone_no_select=Aucun jalon
issues.action_assignee=Assigné à
issues.action_assignee_no_select=Pas d'assignataire
issues.opened_by=créé %[1]s par <a href="%[2]s">%[3]s</a>
issues.opened_by_fake=%[1]s ouvert par %[2]s
issues.previous=Page Précédente
issues.next=Page Suivante
issues.open_title=Ouvert
@ -1254,6 +1318,8 @@ issues.dependency.remove=Supprimer
issues.dependency.remove_info=Supprimer cette dépendance
issues.dependency.added_dependency=`a ajouté une nouvelle dépendance %s`
issues.dependency.removed_dependency=`a supprimé une dépendance %s`
issues.dependency.pr_closing_blockedby=La fermeture de cette demande dajout est bloquée par les tickets suivants
issues.dependency.issue_closing_blockedby=La fermeture de ce ticket est bloquée par les tickets suivants
issues.dependency.issue_close_blocks=Cette demande d'ajout empêche la clôture des tickets suivants
issues.dependency.pr_close_blocks=Cette demande d'ajout empêche la clôture des tickets suivants
issues.dependency.issue_close_blocked=Vous devez fermer tous les tickets qui bloquent ce ticket avant de pouvoir le fermer.
@ -1296,6 +1362,11 @@ issues.review.un_resolve_conversation=Conversation non résolue
issues.review.resolved_by=marquer cette conversation comme résolue
issues.assignee.error=Tous les assignés n'ont pas été ajoutés en raison d'une erreur inattendue.
issues.reference_issue.body=Corps
issues.content_history.edited=édité
issues.content_history.created=créé
issues.content_history.delete_from_history=Supprimé de lhistorique
issues.content_history.delete_from_history_confirm=Supprimer de lhistorique ?
issues.content_history.options=Options
compare.compare_base=base
compare.compare_head=comparer
@ -1306,6 +1377,7 @@ pulls.compare_changes=Nouvelle demande de fusion
pulls.compare_changes_desc=Sélectionnez la branche dans laquelle fusionner et la branche depuis laquelle tirer les modifications.
pulls.compare_base=fusionner dans
pulls.compare_compare=tirer les modifications depuis
pulls.switch_comparison_type=Changer le type de comparaison
pulls.filter_branch=Filtre de branche
pulls.no_results=Aucun résultat trouvé.
pulls.nothing_to_compare=Ces branches sont identiques. Il n'y a pas besoin de créer une demande de fusion.
@ -1326,6 +1398,9 @@ pulls.manually_merged_as=La demande d'ajout a été fusionnée manuellement en t
pulls.is_closed=La demande de fusion a été fermée.
pulls.has_merged=La pull request a été fusionnée.
pulls.title_wip_desc=`<a href="#">Préfixer le titre par <strong>%s</strong></a> pour empêcher cette demande d'ajout d'être fusionnée par erreur.`
pulls.cannot_merge_work_in_progress=Cette demande d'ajout est marquée comme en cours de chantier.
pulls.still_in_progress=Toujours en cours ?
pulls.add_prefix=Ajouter le préfixe <strong>%s</strong>
pulls.remove_prefix=Enlever le préfixe <strong>%s</strong>
pulls.data_broken=Cette demande de fusion est impossible par manque d'informations de bifurcation.
pulls.files_conflicted=Cette demande d'ajout contient des modifications en conflit avec la branche ciblée.
@ -1545,7 +1620,9 @@ settings.hooks=Déclencheurs Web
settings.githooks=Déclencheurs Git
settings.basic_settings=Paramètres de base
settings.mirror_settings=Réglages Miroir
settings.mirror_settings.mirrored_repository=Dépôt en miroir
settings.mirror_settings.direction=Direction
settings.mirror_settings.direction.push=Pousser
settings.mirror_settings.last_update=Dernière mise à jour
settings.mirror_settings.push_mirror.remote_url=URL du dépôt distant Git
settings.sync_mirror=Synchroniser maintenant
@ -1586,6 +1663,7 @@ settings.pulls.allow_rebase_merge_commit=Activer le rebasage avec un commit de f
settings.pulls.allow_squash_commits=Activer la concaténation de révisions
settings.pulls.allow_manual_merge=Activer le marquage des demandes d'ajout comme fusionnées manuellement
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.default_delete_branch_after_merge=Supprimer la branche après la fusion par default
settings.projects_desc=Activer les projets de dépôt
settings.admin_settings=Paramètres administrateur
settings.admin_enable_health_check=Activer les vérifications de santé du dépôt (git fsck)
@ -1613,6 +1691,7 @@ settings.transfer_form_title=Entrez le nom du dépôt pour confirmer :
settings.transfer_in_progress=Il y a actuellement un transfert en cours. Veuillez l'annuler si vous souhaitez transférer ce dépôt à un autre utilisateur.
settings.transfer_notices_1=- Vous perdrez l'accès à ce dépôt si vous le transférez à un autre utilisateur.
settings.transfer_notices_2=- Vous conserverez l'accès à ce dépôt si vous le transférez à une organisation dont vous êtes (co-)propriétaire.
settings.transfer_notices_3=- Si le dépôt est privé et est transféré à un utilisateur individuel, cette action s'assure que l'utilisateur a au moins la permission de lire (et modifie les permissions si nécessaire).
settings.transfer_owner=Nouveau propriétaire
settings.transfer_perform=Effectuer le transfert
settings.transfer_started=Ce dépôt a été marqué pour le transfert et attend la confirmation de "%s"
@ -1885,6 +1964,7 @@ diff.file_image_width=Largeur
diff.file_image_height=Hauteur
diff.file_byte_size=Taille
diff.file_suppressed=Fichier diff supprimé car celui-ci est trop grand
diff.file_suppressed_line_too_long=Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
diff.comment.placeholder=Laisser un commentaire
diff.comment.markdown_info=Mise en page avec markdown est prise en charge.
diff.comment.add_single_comment=Ajouter un commentaire
@ -1911,6 +1991,7 @@ release.new_release=Nouvelle version
release.draft=Brouillon
release.prerelease=Pré-publication
release.stable=Stable
release.compare=Comparer
release.edit=Éditer
release.ahead.target=à %s depuis cette livraison
release.source_code=Code source
@ -1963,6 +2044,10 @@ branch.restore=Restaurer la branche '%s'
branch.download=Télécharger la branche '%s'
branch.included_desc=Cette branche fait partie de la branche par défaut
branch.included=Incluses
branch.create_new_branch=Créer une branche à partir de la branche :
branch.confirm_create_branch=Créer une branche
branch.new_branch=Créer une nouvelle branche
branch.new_branch_from=Créer une nouvelle branche à partir de '%s'
@ -2009,11 +2094,14 @@ settings.repoadminchangeteam=L'administrateur de dépôt peut ajouter et supprim
settings.visibility=Visibilité
settings.visibility.public=Public
settings.visibility.limited=Limité (Visible uniquement aux utilisateurs connectés)
settings.visibility.limited_shortname=Limité
settings.visibility.private=Privé (Visible uniquement aux membres de lorganisation)
settings.visibility.private_shortname=Privé
settings.update_settings=Valider
settings.update_setting_success=Les paramètres de l'organisation ont été mis à jour.
settings.change_orgname_prompt=NB: changer le nom de l'organisation changera aussi son URL.
settings.change_orgname_redirect_prompt=L'ancien nom d'utilisateur redirigera jusqu'à ce qu'il soit réclamé.
settings.update_avatar_success=L'avatar de l'organisation a été mis à jour.
settings.delete=Supprimer l'organisation
settings.delete_account=Supprimer cette organisation
@ -2034,12 +2122,15 @@ members.member_role=Rôle du membre :
members.owner=Propriétaire
members.member=Membre
members.remove=Exclure
members.remove.detail=Supprimer %[1]s de %[2]s?
members.leave=Quitter
members.leave.detail=Quitter %s?
members.invite_desc=Ajouter un nouveau membre à %s :
members.invite_now=Envoyer une invitation
teams.join=Rejoindre
teams.leave=Quitter
teams.leave.detail=Quitter %s?
teams.can_create_org_repo=Créer des dépôts
teams.can_create_org_repo_helper=Les membres peuvent créer de nouveaux dépôts dans l'organisation. Le créateur obtiendra l'accès administrateur au nouveau dépôt.
teams.read_access_helper=Les membres peuvent voir et cloner les dépôts de l'équipe.
@ -2100,15 +2191,31 @@ dashboard.operation_switch=Basculer
dashboard.operation_run=Exécuter
dashboard.clean_unbind_oauth=Effacer les connexions OAuth associées
dashboard.clean_unbind_oauth_success=Toutes les connexions OAuth associées ont été supprimées.
dashboard.task.started=Tâche démarrée: %[1]s
dashboard.task.process=Tâche: %[1]s
dashboard.task.cancelled=Tâche: %[1]s a annulé: %[3]s
dashboard.task.error=Erreur dans la tâche: %[1]s: %[3]s
dashboard.task.finished=Tâche: %[1]s démarrée par %[2]s est terminée
dashboard.task.unknown=Tâche inconnue: %[1]s
dashboard.cron.process=Tâche planifiée: %[1]s
dashboard.cron.cancelled=Tâche planifiée : %s annulée : %[3]s
dashboard.cron.error=Erreur dans la tâche planifiée : %s: %[3]s
dashboard.cron.finished=Tâche planifiée : %[1]s a terminé
dashboard.delete_inactive_accounts=Supprimer tous les comptes non actifs
dashboard.delete_inactive_accounts.started=Tâche de suppression de tous les comptes inactifs démarrée.
dashboard.delete_repo_archives=Supprimer toutes les archives des dépôts (ZIP, TAR.GZ, etc..)
dashboard.delete_repo_archives.started=Tâche de suppression de toutes les archives de dépôts démarrée.
dashboard.delete_missing_repos=Supprimer tous les dépôts dont les fichiers Git sont manquants
dashboard.delete_missing_repos.started=Tâche de suppression de tous les dépôts sans fichiers Git démarrée.
dashboard.delete_generated_repository_avatars=Supprimer les avatars de dépôt générés
dashboard.update_mirrors=Mettre à jour les miroirs
dashboard.repo_health_check=Vérifier l'état de santé de tous les dépôts
dashboard.check_repo_stats=Voir les statistiques de tous les dépôts
dashboard.archive_cleanup=Supprimer les archives des vieux dépôts
dashboard.deleted_branches_cleanup=Nettoyer les branches supprimées
dashboard.git_gc_repos=Collecter les déchets des dépôts
dashboard.resync_all_sshkeys.desc=(Inutile pour le serveur SSH intégré.)
dashboard.resync_all_sshprincipals.desc=(Inutile pour le serveur SSH intégré.)
dashboard.resync_all_hooks=Re-synchroniser les déclencheurs Git pre-receive, update et post-receive de tous les dépôts.
dashboard.reinit_missing_repos=Réinitialiser tous les dépôts Git manquants pour lesquels un enregistrement existe
dashboard.sync_external_users=Synchroniser les données de lutilisateur externe
@ -2256,6 +2363,8 @@ auths.smtpport=Port SMTP
auths.allowed_domains=Domaines autorisés
auths.allowed_domains_helper=Laisser ce champ vide autorise tous les domaines. Separez les domaines multiples avec une virgule (",").
auths.skip_tls_verify=Ne pas vérifier TLS
auths.force_smtps=Forcer SMTPS
auths.helo_hostname=Nom dhôte HELO
auths.pam_service_name=Nom du Service PAM
auths.oauth2_provider=Fournisseur OAuth2
auths.oauth2_clientID=ID du client (clé)
@ -2293,6 +2402,7 @@ auths.tip.twitter=Rendez-vous sur https://dev.twitter.com/apps, créez une appli
auths.tip.discord=Enregistrer une nouvelle application sur https://discordapp.com/developers/applications/me
auths.tip.gitea=Enregistrez une nouvelle application OAuth2. Un guide peut être trouvé sur https://docs.gitea.io/en-us/oauth2-provider/
auths.tip.yandex=Créez une nouvelle application sur https://oauth.yandex.com/client/new. Sélectionnez les autorisations suivantes dans la section "Yandex API passport" : "Accès à l'adresse e-mail", "Accès à l'avatar de l'utilisateur" et "Accès au nom d'utilisateur, prénom et prénom, genre"
auths.tip.mastodon=Entrez une URL d'instance personnalisée pour l'instance mastodon avec laquelle vous voulez vous authentifier (ou utiliser celle par défaut)
auths.edit=Mettre à jour la source d'authentification
auths.activated=Cette source d'authentification est activée
auths.new_success=L'authentification "%s" a été ajoutée.
@ -2352,6 +2462,7 @@ config.db_path=Emplacement
config.service_config=Configuration du service
config.register_email_confirm=Exiger la confirmation de l'e-mail lors de l'inscription
config.disable_register=Désactiver le formulaire d'inscription
config.allow_only_internal_registration=Autoriser l'inscription uniquement via Gitea lui-même
config.allow_only_external_registration=N'autoriser l'inscription qu'à partir des services externes
config.enable_openid_signup=Activer l'inscription avec OpenID
config.enable_openid_signin=Activer la connexion avec OpenID

View file

@ -8,8 +8,10 @@ package private
import (
"net/http"
repo_model "code.gitea.io/gitea/models/repo"
gitea_context "code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/private"
"code.gitea.io/gitea/modules/web"
"code.gitea.io/gitea/services/agit"
@ -23,8 +25,17 @@ func HookProcReceive(ctx *gitea_context.PrivateContext) {
return
}
results := agit.ProcReceive(ctx, opts)
if ctx.Written() {
results, err := agit.ProcReceive(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, opts)
if err != nil {
if repo_model.IsErrUserDoesNotHaveAccessToRepo(err) {
ctx.Error(http.StatusBadRequest, "UserDoesNotHaveAccessToRepo", err.Error())
} else {
log.Error(err.Error())
ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
"Err": err.Error(),
})
}
return
}

View file

@ -215,7 +215,7 @@ func newAccessTokenResponse(ctx stdContext.Context, grant *auth.OAuth2Grant, ser
Nonce: grant.Nonce,
}
if grant.ScopeContains("profile") {
idToken.Name = user.FullName
idToken.Name = user.GetDisplayName()
idToken.PreferredUsername = user.Name
idToken.Profile = user.HTMLURL()
idToken.Picture = user.AvatarLink()

View file

@ -11,6 +11,7 @@ import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/services/auth/source/oauth2"
"github.com/golang-jwt/jwt/v4"
@ -64,6 +65,24 @@ func TestNewAccessTokenResponse_OIDCToken(t *testing.T) {
assert.NoError(t, err)
assert.Len(t, grants, 1)
// Scopes: openid profile email
oidcToken = createAndParseToken(t, grants[0])
assert.Equal(t, user.Name, oidcToken.Name)
assert.Equal(t, user.Name, oidcToken.PreferredUsername)
assert.Equal(t, user.HTMLURL(), oidcToken.Profile)
assert.Equal(t, user.AvatarLink(), oidcToken.Picture)
assert.Equal(t, user.Website, oidcToken.Website)
assert.Equal(t, user.UpdatedUnix, oidcToken.UpdatedAt)
assert.Equal(t, user.Email, oidcToken.Email)
assert.Equal(t, user.IsActive, oidcToken.EmailVerified)
// set DefaultShowFullName to true
oldDefaultShowFullName := setting.UI.DefaultShowFullName
setting.UI.DefaultShowFullName = true
defer func() {
setting.UI.DefaultShowFullName = oldDefaultShowFullName
}()
// Scopes: openid profile email
oidcToken = createAndParseToken(t, grants[0])
assert.Equal(t, user.FullName, oidcToken.Name)

View file

@ -99,7 +99,9 @@ func GetActiveStopwatch(ctx *context.Context) {
issue, err := issues_model.GetIssueByID(ctx, sw.IssueID)
if err != nil || issue == nil {
ctx.ServerError("GetIssueByID", err)
if !issues_model.IsErrIssueNotExist(err) {
ctx.ServerError("GetIssueByID", err)
}
return
}
if err = issue.LoadRepo(ctx); err != nil {

View file

@ -357,7 +357,7 @@ func renderReadmeFile(ctx *context.Context, readmeFile *namedBlob, readmeTreelin
var result strings.Builder
err := markup.Render(&markup.RenderContext{
Ctx: ctx,
RelativePath: ctx.Repo.TreePath,
RelativePath: path.Join(ctx.Repo.TreePath, readmeFile.name), // ctx.Repo.TreePath is the directory not the Readme so we must append the Readme filename (and path).
URLPrefix: readmeTreelink,
Metas: ctx.Repo.Repository.ComposeDocumentMetas(),
GitRepo: ctx.Repo.GitRepo,

View file

@ -5,15 +5,14 @@
package agit
import (
"context"
"fmt"
"net/http"
"os"
"strings"
issues_model "code.gitea.io/gitea/models/issues"
repo_model "code.gitea.io/gitea/models/repo"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/notification"
@ -22,7 +21,7 @@ import (
)
// ProcReceive handle proc receive work
func ProcReceive(ctx *context.PrivateContext, opts *private.HookOptions) []private.HookProcReceiveRefResult {
func ProcReceive(ctx context.Context, repo *repo_model.Repository, gitRepo *git.Repository, opts *private.HookOptions) ([]private.HookProcReceiveRefResult, error) {
// TODO: Add more options?
var (
topicBranch string
@ -32,10 +31,9 @@ func ProcReceive(ctx *context.PrivateContext, opts *private.HookOptions) []priva
)
results := make([]private.HookProcReceiveRefResult, 0, len(opts.OldCommitIDs))
repo := ctx.Repo.Repository
gitRepo := ctx.Repo.GitRepo
ownerName := ctx.Repo.Repository.OwnerName
repoName := ctx.Repo.Repository.Name
ownerName := repo.OwnerName
repoName := repo.Name
topicBranch = opts.GitPushOptions["topic"]
_, forcePush = opts.GitPushOptions["force-push"]
@ -101,11 +99,7 @@ func ProcReceive(ctx *context.PrivateContext, opts *private.HookOptions) []priva
pr, err := issues_model.GetUnmergedPullRequest(repo.ID, repo.ID, headBranch, baseBranchName, issues_model.PullRequestFlowAGit)
if err != nil {
if !issues_model.IsErrPullRequestNotExist(err) {
log.Error("Failed to get unmerged agit flow pull request in repository: %s/%s Error: %v", ownerName, repoName, err)
ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
"Err": fmt.Sprintf("Failed to get unmerged agit flow pull request in repository: %s/%s Error: %v", ownerName, repoName, err),
})
return nil
return nil, fmt.Errorf("Failed to get unmerged agit flow pull request in repository: %s/%s Error: %v", ownerName, repoName, err)
}
// create a new pull request
@ -115,11 +109,7 @@ func ProcReceive(ctx *context.PrivateContext, opts *private.HookOptions) []priva
if !has || len(title) == 0 {
commit, err := gitRepo.GetCommit(opts.NewCommitIDs[i])
if err != nil {
log.Error("Failed to get commit %s in repository: %s/%s Error: %v", opts.NewCommitIDs[i], ownerName, repoName, err)
ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
"Err": fmt.Sprintf("Failed to get commit %s in repository: %s/%s Error: %v", opts.NewCommitIDs[i], ownerName, repoName, err),
})
return nil
return nil, fmt.Errorf("Failed to get commit %s in repository: %s/%s Error: %v", opts.NewCommitIDs[i], ownerName, repoName, err)
}
title = strings.Split(commit.CommitMessage, "\n")[0]
}
@ -128,11 +118,7 @@ func ProcReceive(ctx *context.PrivateContext, opts *private.HookOptions) []priva
pusher, err := user_model.GetUserByID(opts.UserID)
if err != nil {
log.Error("Failed to get user. Error: %v", err)
ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
"Err": fmt.Sprintf("Failed to get user. Error: %v", err),
})
return nil
return nil, fmt.Errorf("Failed to get user. Error: %v", err)
}
prIssue := &issues_model.Issue{
@ -158,12 +144,7 @@ func ProcReceive(ctx *context.PrivateContext, opts *private.HookOptions) []priva
}
if err := pull_service.NewPullRequest(ctx, repo, prIssue, []int64{}, []string{}, pr, []int64{}); err != nil {
if repo_model.IsErrUserDoesNotHaveAccessToRepo(err) {
ctx.Error(http.StatusBadRequest, "UserDoesNotHaveAccessToRepo", err.Error())
return nil
}
ctx.Error(http.StatusInternalServerError, "NewPullRequest", err.Error())
return nil
return nil, err
}
log.Trace("Pull request created: %d/%d", repo.ID, prIssue.ID)
@ -179,20 +160,12 @@ func ProcReceive(ctx *context.PrivateContext, opts *private.HookOptions) []priva
// update exist pull request
if err := pr.LoadBaseRepoCtx(ctx); err != nil {
log.Error("Unable to load base repository for PR[%d] Error: %v", pr.ID, err)
ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
"Err": fmt.Sprintf("Unable to load base repository for PR[%d] Error: %v", pr.ID, err),
})
return nil
return nil, fmt.Errorf("Unable to load base repository for PR[%d] Error: %v", pr.ID, err)
}
oldCommitID, err := gitRepo.GetRefCommitID(pr.GetGitRefName())
if err != nil {
log.Error("Unable to get ref commit id in base repository for PR[%d] Error: %v", pr.ID, err)
ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
"Err": fmt.Sprintf("Unable to get ref commit id in base repository for PR[%d] Error: %v", pr.ID, err),
})
return nil
return nil, fmt.Errorf("Unable to get ref commit id in base repository for PR[%d] Error: %v", pr.ID, err)
}
if oldCommitID == opts.NewCommitIDs[i] {
@ -208,11 +181,7 @@ func ProcReceive(ctx *context.PrivateContext, opts *private.HookOptions) []priva
if !forcePush {
output, _, err := git.NewCommand(ctx, "rev-list", "--max-count=1", oldCommitID, "^"+opts.NewCommitIDs[i]).RunStdString(&git.RunOpts{Dir: repo.RepoPath(), Env: os.Environ()})
if err != nil {
log.Error("Unable to detect force push between: %s and %s in %-v Error: %v", oldCommitID, opts.NewCommitIDs[i], repo, err)
ctx.JSON(http.StatusInternalServerError, private.Response{
Err: fmt.Sprintf("Fail to detect force push: %v", err),
})
return nil
return nil, fmt.Errorf("Fail to detect force push: %v", err)
} else if len(output) > 0 {
results = append(results, private.HookProcReceiveRefResult{
OriginalRef: opts.RefFullNames[i],
@ -226,29 +195,17 @@ func ProcReceive(ctx *context.PrivateContext, opts *private.HookOptions) []priva
pr.HeadCommitID = opts.NewCommitIDs[i]
if err = pull_service.UpdateRef(ctx, pr); err != nil {
log.Error("Failed to update pull ref. Error: %v", err)
ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
"Err": fmt.Sprintf("Failed to update pull ref. Error: %v", err),
})
return nil
return nil, fmt.Errorf("Failed to update pull ref. Error: %v", err)
}
pull_service.AddToTaskQueue(pr)
pusher, err := user_model.GetUserByID(opts.UserID)
if err != nil {
log.Error("Failed to get user. Error: %v", err)
ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
"Err": fmt.Sprintf("Failed to get user. Error: %v", err),
})
return nil
return nil, fmt.Errorf("Failed to get user. Error: %v", err)
}
err = pr.LoadIssue()
if err != nil {
log.Error("Failed to load pull issue. Error: %v", err)
ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
"Err": fmt.Sprintf("Failed to load pull issue. Error: %v", err),
})
return nil
return nil, fmt.Errorf("Failed to load pull issue. Error: %v", err)
}
comment, err := issues_model.CreatePushPullComment(ctx, pusher, pr, oldCommitID, opts.NewCommitIDs[i])
if err == nil && comment != nil {
@ -266,7 +223,7 @@ func ProcReceive(ctx *context.PrivateContext, opts *private.HookOptions) []priva
})
}
return results
return results, nil
}
// UserNameChanged handle user name change for agit flow pull

View file

@ -159,6 +159,9 @@ func (g *RepositoryDumper) CreateRepo(repo *base.Repository, opts base.MigrateOp
if err != nil {
return fmt.Errorf("Clone: %v", err)
}
if err := git.WriteCommitGraph(g.ctx, repoPath); err != nil {
return err
}
if opts.Wiki {
wikiPath := g.wikiPath()
@ -179,6 +182,8 @@ func (g *RepositoryDumper) CreateRepo(repo *base.Repository, opts base.MigrateOp
if err := os.RemoveAll(wikiPath); err != nil {
return fmt.Errorf("Failed to remove %s: %v", wikiPath, err)
}
} else if err := git.WriteCommitGraph(g.ctx, wikiPath); err != nil {
return err
}
}
}

View file

@ -283,7 +283,7 @@
{{end}}
{{end}}
{{if (gt .Issue.PullRequest.CommitsBehind 0)}}
{{if and (gt .Issue.PullRequest.CommitsBehind 0) (not .Issue.IsClosed) (not .Issue.PullRequest.IsChecking) (not .IsPullFilesConflicted) (not .IsPullRequestBroken) (not $canAutoMerge)}}
<div class="ui divider"></div>
<div class="item item-section">
<div class="item-section-left">
@ -481,44 +481,6 @@
{{end}}
{{end}}
{{if and (gt .Issue.PullRequest.CommitsBehind 0) (not .Issue.IsClosed) (not .Issue.PullRequest.IsChecking) (not .IsPullFilesConflicted) (not .IsPullRequestBroken) (not $canAutoMerge)}}
<div class="item df ac sb">
<div>
<i class="icon icon-octicon">{{svg "octicon-alert"}}</i>
{{$.i18n.Tr "repo.pulls.outdated_with_base_branch"}}
</div>
<div>
{{if and .UpdateAllowed .UpdateByRebaseAllowed }}
<div class="dib">
<div class="ui buttons update-button">
<button class="ui button" data-do="{{.Link}}/update" data-redirect="{{.Link}}">
<span class="button-text">
{{$.i18n.Tr "repo.pulls.update_branch"}}
</span>
</button>
<div class="ui dropdown icon button no-text">
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
<div class="menu">
<div class="item active selected" data-do="{{.Link}}/update">{{$.i18n.Tr "repo.pulls.update_branch"}}</div>
<div class="item" data-do="{{.Link}}/update?style=rebase">{{$.i18n.Tr "repo.pulls.update_branch_rebase"}}</div>
</div>
</div>
</div>
</div>
{{end}}
{{if and .UpdateAllowed (not .UpdateByRebaseAllowed)}}
<form action="{{.Link}}/update" method="post">
{{.CsrfTokenHtml}}
<button class="ui compact button" data-do="update">
<span class="ui text">{{$.i18n.Tr "repo.pulls.update_branch"}}</span>
</button>
</form>
{{end}}
</div>
</div>
{{end}}
{{if $.StillCanManualMerge}}
<div class="ui divider"></div>
<div class="ui form manually-merged-fields" style="display: none">

View file

@ -45,7 +45,12 @@ export function initRepoCommitLastCommitLoader() {
$('table#repo-files-table .commit-list').replaceWith(row);
return;
}
entryMap[$(row).attr('data-entryname')].replaceWith(row);
// there are other <tr> rows in response (eg: <tr class="has-parent">)
// at the moment only the "data-entryname" rows should be processed
const entryName = $(row).attr('data-entryname');
if (entryName) {
entryMap[entryName].replaceWith(row);
}
});
});
}