Merge branch 'main' into sync-issue-pr-and-more

This commit is contained in:
Chongyi Zheng 2023-09-18 01:45:07 -04:00
commit e28fa781c2
No known key found for this signature in database
GPG Key ID: E3C2287691E40E35
207 changed files with 2248 additions and 1450 deletions

View File

@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest
if: github.repository == 'go-gitea/gitea'
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: "~1.21"

View File

@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest
if: github.repository == 'go-gitea/gitea'
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: download from crowdin
uses: docker://jonasfranz/crowdin
env:
@ -35,7 +35,7 @@ jobs:
runs-on: ubuntu-latest
if: github.repository == 'go-gitea/gitea'
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: push translations to crowdin
uses: docker://jonasfranz/crowdin
env:

View File

@ -34,7 +34,7 @@ jobs:
swagger: ${{ steps.changes.outputs.swagger }}
yaml: ${{ steps.changes.outputs.yaml }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v2
id: changes
with:
@ -64,9 +64,12 @@ jobs:
- "**/*.md"
- "docs/**"
- ".markdownlint.yaml"
- "package.json"
- "package-lock.json"
actions:
- ".github/workflows/*"
- "Makefile"
templates:
- "templates/**/*.tmpl"
@ -90,3 +93,5 @@ jobs:
- "**/*.yml"
- "**/*.yaml"
- ".yamllint.yaml"
- "pyproject.toml"
- "poetry.lock"

View File

@ -16,7 +16,7 @@ jobs:
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: "~1.21"
@ -31,7 +31,7 @@ jobs:
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: "3.11"
@ -44,7 +44,7 @@ jobs:
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: "3.11"
@ -57,7 +57,7 @@ jobs:
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-node@v3
with:
node-version: 20
@ -69,7 +69,7 @@ jobs:
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: "~1.21"
@ -86,7 +86,7 @@ jobs:
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: "~1.21"
@ -101,7 +101,7 @@ jobs:
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: "~1.21"
@ -114,7 +114,7 @@ jobs:
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-node@v3
with:
node-version: 20
@ -129,7 +129,7 @@ jobs:
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: "~1.21"
@ -161,7 +161,7 @@ jobs:
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-node@v3
with:
node-version: 20
@ -174,6 +174,6 @@ jobs:
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
- run: make lint-actions

View File

@ -38,7 +38,7 @@ jobs:
ports:
- "9000:9000"
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: "~1.21"
@ -63,7 +63,7 @@ jobs:
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: "~1.21"
@ -128,7 +128,7 @@ jobs:
ports:
- "9000:9000"
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: "~1.21"
@ -178,7 +178,7 @@ jobs:
- "587:587"
- "993:993"
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: "~1.21"
@ -210,7 +210,7 @@ jobs:
ports:
- "3306:3306"
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: "~1.21"
@ -241,7 +241,7 @@ jobs:
ports:
- "1433:1433"
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: "~1.21"

View File

@ -16,7 +16,7 @@ jobs:
needs: files-changed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: "~1.21"

View File

@ -12,7 +12,7 @@ jobs:
nightly-binary:
runs-on: actuated-4cpu-16gb
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
# fetch all commits instead of only the last as some branches are long lived and could have many between versions
# fetch all tags to ensure that "git describe" reports expected Gitea version, eg. v1.21.0-dev-1-g1234567
- run: git fetch --unshallow --quiet --tags --force
@ -58,7 +58,7 @@ jobs:
nightly-docker-rootful:
runs-on: actuated-4cpu-16gb
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
# fetch all commits instead of only the last as some branches are long lived and could have many between versions
# fetch all tags to ensure that "git describe" reports expected Gitea version, eg. v1.21.0-dev-1-g1234567
- run: git fetch --unshallow --quiet --tags --force
@ -95,7 +95,7 @@ jobs:
nightly-docker-rootless:
runs-on: actuated-4cpu-16gb
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
# fetch all commits instead of only the last as some branches are long lived and could have many between versions
# fetch all tags to ensure that "git describe" reports expected Gitea version, eg. v1.21.0-dev-1-g1234567
- run: git fetch --unshallow --quiet --tags --force

View File

@ -0,0 +1,38 @@
---
date: "2023-08-14T00:00:00+00:00"
title: "Blame File View"
slug: "blame"
sidebar_position: 13
toc: false
draft: false
aliases:
- /en-us/blame
menu:
sidebar:
parent: "usage"
name: "Blame"
sidebar_position: 13
identifier: "blame"
---
# Blame File View
Gitea supports viewing the line-by-line revision history for a file also known as blame view.
You can also use [`git blame`](https://git-scm.com/docs/git-blame) on the command line to view the revision history of lines within a file.
1. Navigate to and open the file whose line history you want to view.
1. Click the `Blame` button in the file header bar.
1. The new view shows the line-by-line revision history for a file with author and commit information on the left side.
1. To navigate to an older commit, click the ![versions](/octicon-versions.svg) icon.
## Ignore commits in the blame view
All revisions specified in the `.git-blame-ignore-revs` file are hidden from the blame view.
This is especially useful to hide reformatting changes and keep the benefits of `git blame`.
Lines that were changed or added by an ignored commit will be blamed on the previous commit that changed that line or nearby lines.
The `.git-blame-ignore-revs` file must be located in the root directory of the repository.
For more information like the file format, see [the `git blame --ignore-revs-file` documentation](https://git-scm.com/docs/git-blame#Documentation/git-blame.txt---ignore-revs-fileltfilegt).
### Bypassing `.git-blame-ignore-revs` in the blame view
If the blame view for a file shows a message about ignored revisions, you can see the normal blame view by appending the url parameter `?bypass-blame-ignore=true`.

1
docs/static/octicon-versions.svg vendored Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M7.75 14A1.75 1.75 0 0 1 6 12.25v-8.5C6 2.784 6.784 2 7.75 2h6.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 14Zm-.25-1.75c0 .138.112.25.25.25h6.5a.25.25 0 0 0 .25-.25v-8.5a.25.25 0 0 0-.25-.25h-6.5a.25.25 0 0 0-.25.25ZM4.9 3.508a.75.75 0 0 1-.274 1.025.249.249 0 0 0-.126.217v6.5c0 .09.048.173.126.217a.75.75 0 0 1-.752 1.298A1.75 1.75 0 0 1 3 11.25v-6.5c0-.649.353-1.214.874-1.516a.75.75 0 0 1 1.025.274ZM1.625 5.533h.001a.249.249 0 0 0-.126.217v4.5c0 .09.048.173.126.217a.75.75 0 0 1-.752 1.298A1.748 1.748 0 0 1 0 10.25v-4.5a1.748 1.748 0 0 1 .873-1.516.75.75 0 1 1 .752 1.299Z"></path></svg>

After

Width:  |  Height:  |  Size: 696 B

View File

@ -41,15 +41,15 @@ func init() {
}
// GetSchedulesMapByIDs returns the schedules by given id slice.
func GetSchedulesMapByIDs(ids []int64) (map[int64]*ActionSchedule, error) {
func GetSchedulesMapByIDs(ctx context.Context, ids []int64) (map[int64]*ActionSchedule, error) {
schedules := make(map[int64]*ActionSchedule, len(ids))
return schedules, db.GetEngine(db.DefaultContext).In("id", ids).Find(&schedules)
return schedules, db.GetEngine(ctx).In("id", ids).Find(&schedules)
}
// GetReposMapByIDs returns the repos by given id slice.
func GetReposMapByIDs(ids []int64) (map[int64]*repo_model.Repository, error) {
func GetReposMapByIDs(ctx context.Context, ids []int64) (map[int64]*repo_model.Repository, error) {
repos := make(map[int64]*repo_model.Repository, len(ids))
return repos, db.GetEngine(db.DefaultContext).In("id", ids).Find(&repos)
return repos, db.GetEngine(ctx).In("id", ids).Find(&repos)
}
var cronParser = cron.NewParser(cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor)

View File

@ -23,9 +23,9 @@ func (specs SpecList) GetScheduleIDs() []int64 {
return ids.Values()
}
func (specs SpecList) LoadSchedules() error {
func (specs SpecList) LoadSchedules(ctx context.Context) error {
scheduleIDs := specs.GetScheduleIDs()
schedules, err := GetSchedulesMapByIDs(scheduleIDs)
schedules, err := GetSchedulesMapByIDs(ctx, scheduleIDs)
if err != nil {
return err
}
@ -34,7 +34,7 @@ func (specs SpecList) LoadSchedules() error {
}
repoIDs := specs.GetRepoIDs()
repos, err := GetReposMapByIDs(repoIDs)
repos, err := GetReposMapByIDs(ctx, repoIDs)
if err != nil {
return err
}
@ -95,7 +95,7 @@ func FindSpecs(ctx context.Context, opts FindSpecOptions) (SpecList, int64, erro
return nil, 0, err
}
if err := specs.LoadSchedules(); err != nil {
if err := specs.LoadSchedules(ctx); err != nil {
return nil, 0, err
}
return specs, total, nil

View File

@ -48,11 +48,7 @@ type TranslatableMessage struct {
}
// LoadRepo loads repository of the task
func (task *Task) LoadRepo() error {
return task.loadRepo(db.DefaultContext)
}
func (task *Task) loadRepo(ctx context.Context) error {
func (task *Task) LoadRepo(ctx context.Context) error {
if task.Repo != nil {
return nil
}
@ -70,13 +66,13 @@ func (task *Task) loadRepo(ctx context.Context) error {
}
// LoadDoer loads do user
func (task *Task) LoadDoer() error {
func (task *Task) LoadDoer(ctx context.Context) error {
if task.Doer != nil {
return nil
}
var doer user_model.User
has, err := db.GetEngine(db.DefaultContext).ID(task.DoerID).Get(&doer)
has, err := db.GetEngine(ctx).ID(task.DoerID).Get(&doer)
if err != nil {
return err
} else if !has {
@ -90,13 +86,13 @@ func (task *Task) LoadDoer() error {
}
// LoadOwner loads owner user
func (task *Task) LoadOwner() error {
func (task *Task) LoadOwner(ctx context.Context) error {
if task.Owner != nil {
return nil
}
var owner user_model.User
has, err := db.GetEngine(db.DefaultContext).ID(task.OwnerID).Get(&owner)
has, err := db.GetEngine(ctx).ID(task.OwnerID).Get(&owner)
if err != nil {
return err
} else if !has {
@ -110,8 +106,8 @@ func (task *Task) LoadOwner() error {
}
// UpdateCols updates some columns
func (task *Task) UpdateCols(cols ...string) error {
_, err := db.GetEngine(db.DefaultContext).ID(task.ID).Cols(cols...).Update(task)
func (task *Task) UpdateCols(ctx context.Context, cols ...string) error {
_, err := db.GetEngine(ctx).ID(task.ID).Cols(cols...).Update(task)
return err
}
@ -169,12 +165,12 @@ func (err ErrTaskDoesNotExist) Unwrap() error {
}
// GetMigratingTask returns the migrating task by repo's id
func GetMigratingTask(repoID int64) (*Task, error) {
func GetMigratingTask(ctx context.Context, repoID int64) (*Task, error) {
task := Task{
RepoID: repoID,
Type: structs.TaskTypeMigrateRepo,
}
has, err := db.GetEngine(db.DefaultContext).Get(&task)
has, err := db.GetEngine(ctx).Get(&task)
if err != nil {
return nil, err
} else if !has {
@ -184,13 +180,13 @@ func GetMigratingTask(repoID int64) (*Task, error) {
}
// GetMigratingTaskByID returns the migrating task by repo's id
func GetMigratingTaskByID(id, doerID int64) (*Task, *migration.MigrateOptions, error) {
func GetMigratingTaskByID(ctx context.Context, id, doerID int64) (*Task, *migration.MigrateOptions, error) {
task := Task{
ID: id,
DoerID: doerID,
Type: structs.TaskTypeMigrateRepo,
}
has, err := db.GetEngine(db.DefaultContext).Get(&task)
has, err := db.GetEngine(ctx).Get(&task)
if err != nil {
return nil, nil, err
} else if !has {
@ -205,12 +201,12 @@ func GetMigratingTaskByID(id, doerID int64) (*Task, *migration.MigrateOptions, e
}
// CreateTask creates a task on database
func CreateTask(task *Task) error {
return db.Insert(db.DefaultContext, task)
func CreateTask(ctx context.Context, task *Task) error {
return db.Insert(ctx, task)
}
// FinishMigrateTask updates database when migrate task finished
func FinishMigrateTask(task *Task) error {
func FinishMigrateTask(ctx context.Context, task *Task) error {
task.Status = structs.TaskStatusFinished
task.EndTime = timeutil.TimeStampNow()
@ -231,6 +227,6 @@ func FinishMigrateTask(task *Task) error {
}
task.PayloadContent = string(confBytes)
_, err = db.GetEngine(db.DefaultContext).ID(task.ID).Cols("status", "end_time", "payload_content").Update(task)
_, err = db.GetEngine(ctx).ID(task.ID).Cols("status", "end_time", "payload_content").Update(task)
return err
}

View File

@ -4,6 +4,7 @@
package auth
import (
"context"
"fmt"
"code.gitea.io/gitea/models/db"
@ -22,8 +23,8 @@ func init() {
}
// UpdateSession updates the session with provided id
func UpdateSession(key string, data []byte) error {
_, err := db.GetEngine(db.DefaultContext).ID(key).Update(&Session{
func UpdateSession(ctx context.Context, key string, data []byte) error {
_, err := db.GetEngine(ctx).ID(key).Update(&Session{
Data: data,
Expiry: timeutil.TimeStampNow(),
})
@ -31,12 +32,12 @@ func UpdateSession(key string, data []byte) error {
}
// ReadSession reads the data for the provided session
func ReadSession(key string) (*Session, error) {
func ReadSession(ctx context.Context, key string) (*Session, error) {
session := Session{
Key: key,
}
ctx, committer, err := db.TxContext(db.DefaultContext)
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return nil, err
}
@ -55,24 +56,24 @@ func ReadSession(key string) (*Session, error) {
}
// ExistSession checks if a session exists
func ExistSession(key string) (bool, error) {
func ExistSession(ctx context.Context, key string) (bool, error) {
session := Session{
Key: key,
}
return db.GetEngine(db.DefaultContext).Get(&session)
return db.GetEngine(ctx).Get(&session)
}
// DestroySession destroys a session
func DestroySession(key string) error {
_, err := db.GetEngine(db.DefaultContext).Delete(&Session{
func DestroySession(ctx context.Context, key string) error {
_, err := db.GetEngine(ctx).Delete(&Session{
Key: key,
})
return err
}
// RegenerateSession regenerates a session from the old id
func RegenerateSession(oldKey, newKey string) (*Session, error) {
ctx, committer, err := db.TxContext(db.DefaultContext)
func RegenerateSession(ctx context.Context, oldKey, newKey string) (*Session, error) {
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return nil, err
}
@ -114,12 +115,12 @@ func RegenerateSession(oldKey, newKey string) (*Session, error) {
}
// CountSessions returns the number of sessions
func CountSessions() (int64, error) {
return db.GetEngine(db.DefaultContext).Count(&Session{})
func CountSessions(ctx context.Context) (int64, error) {
return db.GetEngine(ctx).Count(&Session{})
}
// CleanupSessions cleans up expired sessions
func CleanupSessions(maxLifetime int64) error {
_, err := db.GetEngine(db.DefaultContext).Where("expiry <= ?", timeutil.TimeStampNow().Add(-maxLifetime)).Delete(&Session{})
func CleanupSessions(ctx context.Context, maxLifetime int64) error {
_, err := db.GetEngine(ctx).Where("expiry <= ?", timeutil.TimeStampNow().Add(-maxLifetime)).Delete(&Session{})
return err
}

View File

@ -67,11 +67,7 @@ func (cred WebAuthnCredential) TableName() string {
}
// UpdateSignCount will update the database value of SignCount
func (cred *WebAuthnCredential) UpdateSignCount() error {
return cred.updateSignCount(db.DefaultContext)
}
func (cred *WebAuthnCredential) updateSignCount(ctx context.Context) error {
func (cred *WebAuthnCredential) UpdateSignCount(ctx context.Context) error {
_, err := db.GetEngine(ctx).ID(cred.ID).Cols("sign_count").Update(cred)
return err
}
@ -113,30 +109,18 @@ func (list WebAuthnCredentialList) ToCredentials() []webauthn.Credential {
}
// GetWebAuthnCredentialsByUID returns all WebAuthn credentials of the given user
func GetWebAuthnCredentialsByUID(uid int64) (WebAuthnCredentialList, error) {
return getWebAuthnCredentialsByUID(db.DefaultContext, uid)
}
func getWebAuthnCredentialsByUID(ctx context.Context, uid int64) (WebAuthnCredentialList, error) {
func GetWebAuthnCredentialsByUID(ctx context.Context, uid int64) (WebAuthnCredentialList, error) {
creds := make(WebAuthnCredentialList, 0)
return creds, db.GetEngine(ctx).Where("user_id = ?", uid).Find(&creds)
}
// ExistsWebAuthnCredentialsForUID returns if the given user has credentials
func ExistsWebAuthnCredentialsForUID(uid int64) (bool, error) {
return existsWebAuthnCredentialsByUID(db.DefaultContext, uid)
}
func existsWebAuthnCredentialsByUID(ctx context.Context, uid int64) (bool, error) {
func ExistsWebAuthnCredentialsForUID(ctx context.Context, uid int64) (bool, error) {
return db.GetEngine(ctx).Where("user_id = ?", uid).Exist(&WebAuthnCredential{})
}
// GetWebAuthnCredentialByName returns WebAuthn credential by id
func GetWebAuthnCredentialByName(uid int64, name string) (*WebAuthnCredential, error) {
return getWebAuthnCredentialByName(db.DefaultContext, uid, name)
}
func getWebAuthnCredentialByName(ctx context.Context, uid int64, name string) (*WebAuthnCredential, error) {
func GetWebAuthnCredentialByName(ctx context.Context, uid int64, name string) (*WebAuthnCredential, error) {
cred := new(WebAuthnCredential)
if found, err := db.GetEngine(ctx).Where("user_id = ? AND lower_name = ?", uid, strings.ToLower(name)).Get(cred); err != nil {
return nil, err
@ -147,11 +131,7 @@ func getWebAuthnCredentialByName(ctx context.Context, uid int64, name string) (*
}
// GetWebAuthnCredentialByID returns WebAuthn credential by id
func GetWebAuthnCredentialByID(id int64) (*WebAuthnCredential, error) {
return getWebAuthnCredentialByID(db.DefaultContext, id)
}
func getWebAuthnCredentialByID(ctx context.Context, id int64) (*WebAuthnCredential, error) {
func GetWebAuthnCredentialByID(ctx context.Context, id int64) (*WebAuthnCredential, error) {
cred := new(WebAuthnCredential)
if found, err := db.GetEngine(ctx).ID(id).Get(cred); err != nil {
return nil, err
@ -162,16 +142,12 @@ func getWebAuthnCredentialByID(ctx context.Context, id int64) (*WebAuthnCredenti
}
// HasWebAuthnRegistrationsByUID returns whether a given user has WebAuthn registrations
func HasWebAuthnRegistrationsByUID(uid int64) (bool, error) {
return db.GetEngine(db.DefaultContext).Where("user_id = ?", uid).Exist(&WebAuthnCredential{})
func HasWebAuthnRegistrationsByUID(ctx context.Context, uid int64) (bool, error) {
return db.GetEngine(ctx).Where("user_id = ?", uid).Exist(&WebAuthnCredential{})
}
// GetWebAuthnCredentialByCredID returns WebAuthn credential by credential ID
func GetWebAuthnCredentialByCredID(userID int64, credID []byte) (*WebAuthnCredential, error) {
return getWebAuthnCredentialByCredID(db.DefaultContext, userID, credID)
}
func getWebAuthnCredentialByCredID(ctx context.Context, userID int64, credID []byte) (*WebAuthnCredential, error) {
func GetWebAuthnCredentialByCredID(ctx context.Context, userID int64, credID []byte) (*WebAuthnCredential, error) {
cred := new(WebAuthnCredential)
if found, err := db.GetEngine(ctx).Where("user_id = ? AND credential_id = ?", userID, credID).Get(cred); err != nil {
return nil, err
@ -182,11 +158,7 @@ func getWebAuthnCredentialByCredID(ctx context.Context, userID int64, credID []b
}
// CreateCredential will create a new WebAuthnCredential from the given Credential
func CreateCredential(userID int64, name string, cred *webauthn.Credential) (*WebAuthnCredential, error) {
return createCredential(db.DefaultContext, userID, name, cred)
}
func createCredential(ctx context.Context, userID int64, name string, cred *webauthn.Credential) (*WebAuthnCredential, error) {
func CreateCredential(ctx context.Context, userID int64, name string, cred *webauthn.Credential) (*WebAuthnCredential, error) {
c := &WebAuthnCredential{
UserID: userID,
Name: name,
@ -205,18 +177,14 @@ func createCredential(ctx context.Context, userID int64, name string, cred *weba
}
// DeleteCredential will delete WebAuthnCredential
func DeleteCredential(id, userID int64) (bool, error) {
return deleteCredential(db.DefaultContext, id, userID)
}
func deleteCredential(ctx context.Context, id, userID int64) (bool, error) {
func DeleteCredential(ctx context.Context, id, userID int64) (bool, error) {
had, err := db.GetEngine(ctx).ID(id).Where("user_id = ?", userID).Delete(&WebAuthnCredential{})
return had > 0, err
}
// WebAuthnCredentials implementns the webauthn.User interface
func WebAuthnCredentials(userID int64) ([]webauthn.Credential, error) {
dbCreds, err := GetWebAuthnCredentialsByUID(userID)
func WebAuthnCredentials(ctx context.Context, userID int64) ([]webauthn.Credential, error) {
dbCreds, err := GetWebAuthnCredentialsByUID(ctx, userID)
if err != nil {
return nil, err
}

View File

@ -7,6 +7,7 @@ import (
"testing"
auth_model "code.gitea.io/gitea/models/auth"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
"github.com/go-webauthn/webauthn/webauthn"
@ -16,11 +17,11 @@ import (
func TestGetWebAuthnCredentialByID(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
res, err := auth_model.GetWebAuthnCredentialByID(1)
res, err := auth_model.GetWebAuthnCredentialByID(db.DefaultContext, 1)
assert.NoError(t, err)
assert.Equal(t, "WebAuthn credential", res.Name)
_, err = auth_model.GetWebAuthnCredentialByID(342432)
_, err = auth_model.GetWebAuthnCredentialByID(db.DefaultContext, 342432)
assert.Error(t, err)
assert.True(t, auth_model.IsErrWebAuthnCredentialNotExist(err))
}
@ -28,7 +29,7 @@ func TestGetWebAuthnCredentialByID(t *testing.T) {
func TestGetWebAuthnCredentialsByUID(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
res, err := auth_model.GetWebAuthnCredentialsByUID(32)
res, err := auth_model.GetWebAuthnCredentialsByUID(db.DefaultContext, 32)
assert.NoError(t, err)
assert.Len(t, res, 1)
assert.Equal(t, "WebAuthn credential", res[0].Name)
@ -42,7 +43,7 @@ func TestWebAuthnCredential_UpdateSignCount(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
cred := unittest.AssertExistsAndLoadBean(t, &auth_model.WebAuthnCredential{ID: 1})
cred.SignCount = 1
assert.NoError(t, cred.UpdateSignCount())
assert.NoError(t, cred.UpdateSignCount(db.DefaultContext))
unittest.AssertExistsIf(t, true, &auth_model.WebAuthnCredential{ID: 1, SignCount: 1})
}
@ -50,14 +51,14 @@ func TestWebAuthnCredential_UpdateLargeCounter(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
cred := unittest.AssertExistsAndLoadBean(t, &auth_model.WebAuthnCredential{ID: 1})
cred.SignCount = 0xffffffff
assert.NoError(t, cred.UpdateSignCount())
assert.NoError(t, cred.UpdateSignCount(db.DefaultContext))
unittest.AssertExistsIf(t, true, &auth_model.WebAuthnCredential{ID: 1, SignCount: 0xffffffff})
}
func TestCreateCredential(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
res, err := auth_model.CreateCredential(1, "WebAuthn Created Credential", &webauthn.Credential{ID: []byte("Test")})
res, err := auth_model.CreateCredential(db.DefaultContext, 1, "WebAuthn Created Credential", &webauthn.Credential{ID: []byte("Test")})
assert.NoError(t, err)
assert.Equal(t, "WebAuthn Created Credential", res.Name)
assert.Equal(t, []byte("Test"), res.CredentialID)

View File

@ -70,6 +70,7 @@ type FindBranchOptions struct {
ExcludeBranchNames []string
IsDeletedBranch util.OptionalBool
OrderBy string
Keyword string
}
func (opts *FindBranchOptions) Cond() builder.Cond {
@ -84,6 +85,9 @@ func (opts *FindBranchOptions) Cond() builder.Cond {
if !opts.IsDeletedBranch.IsNone() {
cond = cond.And(builder.Eq{"is_deleted": opts.IsDeletedBranch.IsTrue()})
}
if opts.Keyword != "" {
cond = cond.And(builder.Like{"name", opts.Keyword})
}
return cond
}

View File

@ -385,7 +385,7 @@ func TestMilestoneList_LoadTotalTrackedTimes(t *testing.T) {
unittest.AssertExistsAndLoadBean(t, &issues_model.Milestone{ID: 1}),
}
assert.NoError(t, miles.LoadTotalTrackedTimes())
assert.NoError(t, miles.LoadTotalTrackedTimes(db.DefaultContext))
assert.Equal(t, int64(3682), miles[0].TotalTrackedTime)
}
@ -394,7 +394,7 @@ func TestLoadTotalTrackedTime(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
milestone := unittest.AssertExistsAndLoadBean(t, &issues_model.Milestone{ID: 1})
assert.NoError(t, milestone.LoadTotalTrackedTime())
assert.NoError(t, milestone.LoadTotalTrackedTime(db.DefaultContext))
assert.Equal(t, int64(3682), milestone.TotalTrackedTime)
}

View File

@ -30,8 +30,8 @@ func init() {
type IssueWatchList []*IssueWatch
// CreateOrUpdateIssueWatch set watching for a user and issue
func CreateOrUpdateIssueWatch(userID, issueID int64, isWatching bool) error {
iw, exists, err := GetIssueWatch(db.DefaultContext, userID, issueID)
func CreateOrUpdateIssueWatch(ctx context.Context, userID, issueID int64, isWatching bool) error {
iw, exists, err := GetIssueWatch(ctx, userID, issueID)
if err != nil {
return err
}
@ -43,13 +43,13 @@ func CreateOrUpdateIssueWatch(userID, issueID int64, isWatching bool) error {
IsWatching: isWatching,
}
if _, err := db.GetEngine(db.DefaultContext).Insert(iw); err != nil {
if _, err := db.GetEngine(ctx).Insert(iw); err != nil {
return err
}
} else {
iw.IsWatching = isWatching
if _, err := db.GetEngine(db.DefaultContext).ID(iw.ID).Cols("is_watching", "updated_unix").Update(iw); err != nil {
if _, err := db.GetEngine(ctx).ID(iw.ID).Cols("is_watching", "updated_unix").Update(iw); err != nil {
return err
}
}
@ -69,15 +69,15 @@ func GetIssueWatch(ctx context.Context, userID, issueID int64) (iw *IssueWatch,
// CheckIssueWatch check if an user is watching an issue
// it takes participants and repo watch into account
func CheckIssueWatch(user *user_model.User, issue *Issue) (bool, error) {
iw, exist, err := GetIssueWatch(db.DefaultContext, user.ID, issue.ID)
func CheckIssueWatch(ctx context.Context, user *user_model.User, issue *Issue) (bool, error) {
iw, exist, err := GetIssueWatch(ctx, user.ID, issue.ID)
if err != nil {
return false, err
}
if exist {
return iw.IsWatching, nil
}
w, err := repo_model.GetWatch(db.DefaultContext, user.ID, issue.RepoID)
w, err := repo_model.GetWatch(ctx, user.ID, issue.RepoID)
if err != nil {
return false, err
}

View File

@ -16,11 +16,11 @@ import (
func TestCreateOrUpdateIssueWatch(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
assert.NoError(t, issues_model.CreateOrUpdateIssueWatch(3, 1, true))
assert.NoError(t, issues_model.CreateOrUpdateIssueWatch(db.DefaultContext, 3, 1, true))
iw := unittest.AssertExistsAndLoadBean(t, &issues_model.IssueWatch{UserID: 3, IssueID: 1})
assert.True(t, iw.IsWatching)
assert.NoError(t, issues_model.CreateOrUpdateIssueWatch(1, 1, false))
assert.NoError(t, issues_model.CreateOrUpdateIssueWatch(db.DefaultContext, 1, 1, false))
iw = unittest.AssertExistsAndLoadBean(t, &issues_model.IssueWatch{UserID: 1, IssueID: 1})
assert.False(t, iw.IsWatching)
}

View File

@ -201,8 +201,8 @@ func NewLabel(ctx context.Context, l *Label) error {
}
// NewLabels creates new labels
func NewLabels(labels ...*Label) error {
ctx, committer, err := db.TxContext(db.DefaultContext)
func NewLabels(ctx context.Context, labels ...*Label) error {
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}
@ -230,7 +230,7 @@ func UpdateLabel(ctx context.Context, l *Label) error {
}
l.Color = color
return updateLabelCols(db.DefaultContext, l, "name", "description", "color", "exclusive", "archived_unix")
return updateLabelCols(ctx, l, "name", "description", "color", "exclusive", "archived_unix")
}
// DeleteLabel delete a label
@ -289,9 +289,9 @@ func GetLabelByID(ctx context.Context, labelID int64) (*Label, error) {
}
// GetLabelsByIDs returns a list of labels by IDs
func GetLabelsByIDs(labelIDs []int64, cols ...string) ([]*Label, error) {
func GetLabelsByIDs(ctx context.Context, labelIDs []int64, cols ...string) ([]*Label, error) {
labels := make([]*Label, 0, len(labelIDs))
return labels, db.GetEngine(db.DefaultContext).Table("label").
return labels, db.GetEngine(ctx).Table("label").
In("id", labelIDs).
Asc("name").
Cols(cols...).
@ -339,9 +339,9 @@ func GetLabelInRepoByID(ctx context.Context, repoID, labelID int64) (*Label, err
// GetLabelIDsInRepoByNames returns a list of labelIDs by names in a given
// repository.
// it silently ignores label names that do not belong to the repository.
func GetLabelIDsInRepoByNames(repoID int64, labelNames []string) ([]int64, error) {
func GetLabelIDsInRepoByNames(ctx context.Context, repoID int64, labelNames []string) ([]int64, error) {
labelIDs := make([]int64, 0, len(labelNames))
return labelIDs, db.GetEngine(db.DefaultContext).Table("label").
return labelIDs, db.GetEngine(ctx).Table("label").
Where("repo_id = ?", repoID).
In("name", labelNames).
Asc("name").
@ -461,8 +461,8 @@ func UpdateLabelsByRepoID(ctx context.Context, repoID int64, labels ...*Label) e
}
// CountLabelsByRepoID count number of all labels that belong to given repository by ID.
func CountLabelsByRepoID(repoID int64) (int64, error) {
return db.GetEngine(db.DefaultContext).Where("repo_id = ?", repoID).Count(&Label{})
func CountLabelsByRepoID(ctx context.Context, repoID int64) (int64, error) {
return db.GetEngine(ctx).Where("repo_id = ?", repoID).Count(&Label{})
}
// GetLabelInOrgByName returns a label by name in given organization.
@ -505,13 +505,13 @@ func GetLabelInOrgByID(ctx context.Context, orgID, labelID int64) (*Label, error
// GetLabelIDsInOrgByNames returns a list of labelIDs by names in a given
// organization.
func GetLabelIDsInOrgByNames(orgID int64, labelNames []string) ([]int64, error) {
func GetLabelIDsInOrgByNames(ctx context.Context, orgID int64, labelNames []string) ([]int64, error) {
if orgID <= 0 {
return nil, ErrOrgLabelNotExist{0, orgID}
}
labelIDs := make([]int64, 0, len(labelNames))
return labelIDs, db.GetEngine(db.DefaultContext).Table("label").
return labelIDs, db.GetEngine(ctx).Table("label").
Where("org_id = ?", orgID).
In("name", labelNames).
Asc("name").
@ -569,8 +569,8 @@ func GetLabelIDsByNames(ctx context.Context, labelNames []string) ([]int64, erro
}
// CountLabelsByOrgID count all labels that belong to given organization by ID.
func CountLabelsByOrgID(orgID int64) (int64, error) {
return db.GetEngine(db.DefaultContext).Where("org_id = ?", orgID).Count(&Label{})
func CountLabelsByOrgID(ctx context.Context, orgID int64) (int64, error) {
return db.GetEngine(ctx).Where("org_id = ?", orgID).Count(&Label{})
}
func updateLabelCols(ctx context.Context, l *Label, cols ...string) error {

View File

@ -48,7 +48,7 @@ func TestNewLabels(t *testing.T) {
for _, label := range labels {
unittest.AssertNotExistsBean(t, label)
}
assert.NoError(t, issues_model.NewLabels(labels...))
assert.NoError(t, issues_model.NewLabels(db.DefaultContext, labels...))
for _, label := range labels {
unittest.AssertExistsAndLoadBean(t, label, unittest.Cond("id = ?", label.ID))
}
@ -81,7 +81,7 @@ func TestGetLabelInRepoByName(t *testing.T) {
func TestGetLabelInRepoByNames(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
labelIDs, err := issues_model.GetLabelIDsInRepoByNames(1, []string{"label1", "label2"})
labelIDs, err := issues_model.GetLabelIDsInRepoByNames(db.DefaultContext, 1, []string{"label1", "label2"})
assert.NoError(t, err)
assert.Len(t, labelIDs, 2)
@ -93,7 +93,7 @@ func TestGetLabelInRepoByNames(t *testing.T) {
func TestGetLabelInRepoByNamesDiscardsNonExistentLabels(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
// label3 doesn't exists.. See labels.yml
labelIDs, err := issues_model.GetLabelIDsInRepoByNames(1, []string{"label1", "label2", "label3"})
labelIDs, err := issues_model.GetLabelIDsInRepoByNames(db.DefaultContext, 1, []string{"label1", "label2", "label3"})
assert.NoError(t, err)
assert.Len(t, labelIDs, 2)
@ -166,7 +166,7 @@ func TestGetLabelInOrgByName(t *testing.T) {
func TestGetLabelInOrgByNames(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
labelIDs, err := issues_model.GetLabelIDsInOrgByNames(3, []string{"orglabel3", "orglabel4"})
labelIDs, err := issues_model.GetLabelIDsInOrgByNames(db.DefaultContext, 3, []string{"orglabel3", "orglabel4"})
assert.NoError(t, err)
assert.Len(t, labelIDs, 2)
@ -178,7 +178,7 @@ func TestGetLabelInOrgByNames(t *testing.T) {
func TestGetLabelInOrgByNamesDiscardsNonExistentLabels(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
// orglabel99 doesn't exists.. See labels.yml
labelIDs, err := issues_model.GetLabelIDsInOrgByNames(3, []string{"orglabel3", "orglabel4", "orglabel99"})
labelIDs, err := issues_model.GetLabelIDsInOrgByNames(db.DefaultContext, 3, []string{"orglabel3", "orglabel4", "orglabel99"})
assert.NoError(t, err)
assert.Len(t, labelIDs, 2)

View File

@ -105,8 +105,8 @@ func (m *Milestone) State() api.StateType {
}
// NewMilestone creates new milestone of repository.
func NewMilestone(m *Milestone) (err error) {
ctx, committer, err := db.TxContext(db.DefaultContext)
func NewMilestone(ctx context.Context, m *Milestone) (err error) {
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}
@ -142,9 +142,9 @@ func GetMilestoneByRepoID(ctx context.Context, repoID, id int64) (*Milestone, er
}
// GetMilestoneByRepoIDANDName return a milestone if one exist by name and repo
func GetMilestoneByRepoIDANDName(repoID int64, name string) (*Milestone, error) {
func GetMilestoneByRepoIDANDName(ctx context.Context, repoID int64, name string) (*Milestone, error) {
var mile Milestone
has, err := db.GetEngine(db.DefaultContext).Where("repo_id=? AND name=?", repoID, name).Get(&mile)
has, err := db.GetEngine(ctx).Where("repo_id=? AND name=?", repoID, name).Get(&mile)
if err != nil {
return nil, err
}
@ -155,8 +155,8 @@ func GetMilestoneByRepoIDANDName(repoID int64, name string) (*Milestone, error)
}
// UpdateMilestone updates information of given milestone.
func UpdateMilestone(m *Milestone, oldIsClosed bool) error {
ctx, committer, err := db.TxContext(db.DefaultContext)
func UpdateMilestone(ctx context.Context, m *Milestone, oldIsClosed bool) error {
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}
@ -213,8 +213,8 @@ func UpdateMilestoneCounters(ctx context.Context, id int64) error {
}
// ChangeMilestoneStatusByRepoIDAndID changes a milestone open/closed status if the milestone ID is in the repo.
func ChangeMilestoneStatusByRepoIDAndID(repoID, milestoneID int64, isClosed bool) error {
ctx, committer, err := db.TxContext(db.DefaultContext)
func ChangeMilestoneStatusByRepoIDAndID(ctx context.Context, repoID, milestoneID int64, isClosed bool) error {
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}
@ -240,8 +240,8 @@ func ChangeMilestoneStatusByRepoIDAndID(repoID, milestoneID int64, isClosed bool
}
// ChangeMilestoneStatus changes the milestone open/closed status.
func ChangeMilestoneStatus(m *Milestone, isClosed bool) (err error) {
ctx, committer, err := db.TxContext(db.DefaultContext)
func ChangeMilestoneStatus(ctx context.Context, m *Milestone, isClosed bool) (err error) {
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}
@ -271,8 +271,8 @@ func changeMilestoneStatus(ctx context.Context, m *Milestone, isClosed bool) err
}
// DeleteMilestoneByRepoID deletes a milestone from a repository.
func DeleteMilestoneByRepoID(repoID, id int64) error {
m, err := GetMilestoneByRepoID(db.DefaultContext, repoID, id)
func DeleteMilestoneByRepoID(ctx context.Context, repoID, id int64) error {
m, err := GetMilestoneByRepoID(ctx, repoID, id)
if err != nil {
if IsErrMilestoneNotExist(err) {
return nil
@ -280,12 +280,12 @@ func DeleteMilestoneByRepoID(repoID, id int64) error {
return err
}
repo, err := repo_model.GetRepositoryByID(db.DefaultContext, m.RepoID)
repo, err := repo_model.GetRepositoryByID(ctx, m.RepoID)
if err != nil {
return err
}
ctx, committer, err := db.TxContext(db.DefaultContext)
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}
@ -334,7 +334,8 @@ func updateRepoMilestoneNum(ctx context.Context, repoID int64) error {
return err
}
func (m *Milestone) loadTotalTrackedTime(ctx context.Context) error {
// LoadTotalTrackedTime loads the tracked time for the milestone
func (m *Milestone) LoadTotalTrackedTime(ctx context.Context) error {
type totalTimesByMilestone struct {
MilestoneID int64
Time int64
@ -357,18 +358,13 @@ func (m *Milestone) loadTotalTrackedTime(ctx context.Context) error {
return nil
}
// LoadTotalTrackedTime loads the tracked time for the milestone
func (m *Milestone) LoadTotalTrackedTime() error {
return m.loadTotalTrackedTime(db.DefaultContext)
}
// InsertMilestones creates milestones of repository.
func InsertMilestones(ms ...*Milestone) (err error) {
func InsertMilestones(ctx context.Context, ms ...*Milestone) (err error) {
if len(ms) == 0 {
return nil
}
ctx, committer, err := db.TxContext(db.DefaultContext)
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}

View File

@ -100,9 +100,9 @@ func GetMilestoneIDsByNames(ctx context.Context, names []string) ([]int64, error
}
// SearchMilestones search milestones
func SearchMilestones(repoCond builder.Cond, page int, isClosed bool, sortType, keyword string) (MilestoneList, error) {
func SearchMilestones(ctx context.Context, repoCond builder.Cond, page int, isClosed bool, sortType, keyword string) (MilestoneList, error) {
miles := make([]*Milestone, 0, setting.UI.IssuePagingNum)
sess := db.GetEngine(db.DefaultContext).Where("is_closed = ?", isClosed)
sess := db.GetEngine(ctx).Where("is_closed = ?", isClosed)
if len(keyword) > 0 {
sess = sess.And(builder.Like{"UPPER(name)", strings.ToUpper(keyword)})
}
@ -131,8 +131,9 @@ func SearchMilestones(repoCond builder.Cond, page int, isClosed bool, sortType,
}
// GetMilestonesByRepoIDs returns a list of milestones of given repositories and status.
func GetMilestonesByRepoIDs(repoIDs []int64, page int, isClosed bool, sortType string) (MilestoneList, error) {
func GetMilestonesByRepoIDs(ctx context.Context, repoIDs []int64, page int, isClosed bool, sortType string) (MilestoneList, error) {
return SearchMilestones(
ctx,
builder.In("repo_id", repoIDs),
page,
isClosed,
@ -141,7 +142,8 @@ func GetMilestonesByRepoIDs(repoIDs []int64, page int, isClosed bool, sortType s
)
}
func (milestones MilestoneList) loadTotalTrackedTimes(ctx context.Context) error {
// LoadTotalTrackedTimes loads for every milestone in the list the TotalTrackedTime by a batch request
func (milestones MilestoneList) LoadTotalTrackedTimes(ctx context.Context) error {
type totalTimesByMilestone struct {
MilestoneID int64
Time int64
@ -181,11 +183,6 @@ func (milestones MilestoneList) loadTotalTrackedTimes(ctx context.Context) error
return nil
}
// LoadTotalTrackedTimes loads for every milestone in the list the TotalTrackedTime by a batch request
func (milestones MilestoneList) LoadTotalTrackedTimes() error {
return milestones.loadTotalTrackedTimes(db.DefaultContext)
}
// CountMilestones returns number of milestones in given repository with other options
func CountMilestones(ctx context.Context, opts GetMilestonesOption) (int64, error) {
return db.GetEngine(ctx).
@ -194,8 +191,8 @@ func CountMilestones(ctx context.Context, opts GetMilestonesOption) (int64, erro
}
// CountMilestonesByRepoCond map from repo conditions to number of milestones matching the options`
func CountMilestonesByRepoCond(repoCond builder.Cond, isClosed bool) (map[int64]int64, error) {
sess := db.GetEngine(db.DefaultContext).Where("is_closed = ?", isClosed)
func CountMilestonesByRepoCond(ctx context.Context, repoCond builder.Cond, isClosed bool) (map[int64]int64, error) {
sess := db.GetEngine(ctx).Where("is_closed = ?", isClosed)
if repoCond.IsValid() {
sess.In("repo_id", builder.Select("id").From("repository").Where(repoCond))
}
@ -219,8 +216,8 @@ func CountMilestonesByRepoCond(repoCond builder.Cond, isClosed bool) (map[int64]
}
// CountMilestonesByRepoCondAndKw map from repo conditions and the keyword of milestones' name to number of milestones matching the options`
func CountMilestonesByRepoCondAndKw(repoCond builder.Cond, keyword string, isClosed bool) (map[int64]int64, error) {
sess := db.GetEngine(db.DefaultContext).Where("is_closed = ?", isClosed)
func CountMilestonesByRepoCondAndKw(ctx context.Context, repoCond builder.Cond, keyword string, isClosed bool) (map[int64]int64, error) {
sess := db.GetEngine(ctx).Where("is_closed = ?", isClosed)
if len(keyword) > 0 {
sess = sess.And(builder.Like{"UPPER(name)", strings.ToUpper(keyword)})
}
@ -257,11 +254,11 @@ func (m MilestonesStats) Total() int64 {
}
// GetMilestonesStatsByRepoCond returns milestone statistic information for dashboard by given conditions.
func GetMilestonesStatsByRepoCond(repoCond builder.Cond) (*MilestonesStats, error) {
func GetMilestonesStatsByRepoCond(ctx context.Context, repoCond builder.Cond) (*MilestonesStats, error) {
var err error
stats := &MilestonesStats{}
sess := db.GetEngine(db.DefaultContext).Where("is_closed = ?", false)
sess := db.GetEngine(ctx).Where("is_closed = ?", false)
if repoCond.IsValid() {
sess.And(builder.In("repo_id", builder.Select("id").From("repository").Where(repoCond)))
}
@ -270,7 +267,7 @@ func GetMilestonesStatsByRepoCond(repoCond builder.Cond) (*MilestonesStats, erro
return nil, err
}
sess = db.GetEngine(db.DefaultContext).Where("is_closed = ?", true)
sess = db.GetEngine(ctx).Where("is_closed = ?", true)
if repoCond.IsValid() {
sess.And(builder.In("repo_id", builder.Select("id").From("repository").Where(repoCond)))
}
@ -283,11 +280,11 @@ func GetMilestonesStatsByRepoCond(repoCond builder.Cond) (*MilestonesStats, erro
}
// GetMilestonesStatsByRepoCondAndKw returns milestone statistic information for dashboard by given repo conditions and name keyword.
func GetMilestonesStatsByRepoCondAndKw(repoCond builder.Cond, keyword string) (*MilestonesStats, error) {
func GetMilestonesStatsByRepoCondAndKw(ctx context.Context, repoCond builder.Cond, keyword string) (*MilestonesStats, error) {
var err error
stats := &MilestonesStats{}
sess := db.GetEngine(db.DefaultContext).Where("is_closed = ?", false)
sess := db.GetEngine(ctx).Where("is_closed = ?", false)
if len(keyword) > 0 {
sess = sess.And(builder.Like{"UPPER(name)", strings.ToUpper(keyword)})
}
@ -299,7 +296,7 @@ func GetMilestonesStatsByRepoCondAndKw(repoCond builder.Cond, keyword string) (*
return nil, err
}
sess = db.GetEngine(db.DefaultContext).Where("is_closed = ?", true)
sess = db.GetEngine(ctx).Where("is_closed = ?", true)
if len(keyword) > 0 {
sess = sess.And(builder.Like{"UPPER(name)", strings.ToUpper(keyword)})
}

View File

@ -201,12 +201,12 @@ func TestCountMilestonesByRepoIDs(t *testing.T) {
repo1OpenCount, repo1ClosedCount := milestonesCount(1)
repo2OpenCount, repo2ClosedCount := milestonesCount(2)
openCounts, err := issues_model.CountMilestonesByRepoCond(builder.In("repo_id", []int64{1, 2}), false)
openCounts, err := issues_model.CountMilestonesByRepoCond(db.DefaultContext, builder.In("repo_id", []int64{1, 2}), false)
assert.NoError(t, err)
assert.EqualValues(t, repo1OpenCount, openCounts[1])
assert.EqualValues(t, repo2OpenCount, openCounts[2])
closedCounts, err := issues_model.CountMilestonesByRepoCond(builder.In("repo_id", []int64{1, 2}), true)
closedCounts, err := issues_model.CountMilestonesByRepoCond(db.DefaultContext, builder.In("repo_id", []int64{1, 2}), true)
assert.NoError(t, err)
assert.EqualValues(t, repo1ClosedCount, closedCounts[1])
assert.EqualValues(t, repo2ClosedCount, closedCounts[2])
@ -218,7 +218,7 @@ func TestGetMilestonesByRepoIDs(t *testing.T) {
repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2})
test := func(sortType string, sortCond func(*issues_model.Milestone) int) {
for _, page := range []int{0, 1} {
openMilestones, err := issues_model.GetMilestonesByRepoIDs([]int64{repo1.ID, repo2.ID}, page, false, sortType)
openMilestones, err := issues_model.GetMilestonesByRepoIDs(db.DefaultContext, []int64{repo1.ID, repo2.ID}, page, false, sortType)
assert.NoError(t, err)
assert.Len(t, openMilestones, repo1.NumOpenMilestones+repo2.NumOpenMilestones)
values := make([]int, len(openMilestones))
@ -227,7 +227,7 @@ func TestGetMilestonesByRepoIDs(t *testing.T) {
}
assert.True(t, sort.IntsAreSorted(values))
closedMilestones, err := issues_model.GetMilestonesByRepoIDs([]int64{repo1.ID, repo2.ID}, page, true, sortType)
closedMilestones, err := issues_model.GetMilestonesByRepoIDs(db.DefaultContext, []int64{repo1.ID, repo2.ID}, page, true, sortType)
assert.NoError(t, err)
assert.Len(t, closedMilestones, repo1.NumClosedMilestones+repo2.NumClosedMilestones)
values = make([]int, len(closedMilestones))
@ -262,7 +262,7 @@ func TestGetMilestonesStats(t *testing.T) {
test := func(repoID int64) {
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: repoID})
stats, err := issues_model.GetMilestonesStatsByRepoCond(builder.And(builder.Eq{"repo_id": repoID}))
stats, err := issues_model.GetMilestonesStatsByRepoCond(db.DefaultContext, builder.And(builder.Eq{"repo_id": repoID}))
assert.NoError(t, err)
assert.EqualValues(t, repo.NumMilestones-repo.NumClosedMilestones, stats.OpenCount)
assert.EqualValues(t, repo.NumClosedMilestones, stats.ClosedCount)
@ -271,7 +271,7 @@ func TestGetMilestonesStats(t *testing.T) {
test(2)
test(3)
stats, err := issues_model.GetMilestonesStatsByRepoCond(builder.And(builder.Eq{"repo_id": unittest.NonexistentID}))
stats, err := issues_model.GetMilestonesStatsByRepoCond(db.DefaultContext, builder.And(builder.Eq{"repo_id": unittest.NonexistentID}))
assert.NoError(t, err)
assert.EqualValues(t, 0, stats.OpenCount)
assert.EqualValues(t, 0, stats.ClosedCount)
@ -279,7 +279,7 @@ func TestGetMilestonesStats(t *testing.T) {
repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2})
milestoneStats, err := issues_model.GetMilestonesStatsByRepoCond(builder.In("repo_id", []int64{repo1.ID, repo2.ID}))
milestoneStats, err := issues_model.GetMilestonesStatsByRepoCond(db.DefaultContext, builder.In("repo_id", []int64{repo1.ID, repo2.ID}))
assert.NoError(t, err)
assert.EqualValues(t, repo1.NumOpenMilestones+repo2.NumOpenMilestones, milestoneStats.OpenCount)
assert.EqualValues(t, repo1.NumClosedMilestones+repo2.NumClosedMilestones, milestoneStats.ClosedCount)
@ -293,7 +293,7 @@ func TestNewMilestone(t *testing.T) {
Content: "milestoneContent",
}
assert.NoError(t, issues_model.NewMilestone(milestone))
assert.NoError(t, issues_model.NewMilestone(db.DefaultContext, milestone))
unittest.AssertExistsAndLoadBean(t, milestone)
unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: milestone.RepoID}, &issues_model.Milestone{})
}
@ -302,22 +302,22 @@ func TestChangeMilestoneStatus(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
milestone := unittest.AssertExistsAndLoadBean(t, &issues_model.Milestone{ID: 1})
assert.NoError(t, issues_model.ChangeMilestoneStatus(milestone, true))
assert.NoError(t, issues_model.ChangeMilestoneStatus(db.DefaultContext, milestone, true))
unittest.AssertExistsAndLoadBean(t, &issues_model.Milestone{ID: 1}, "is_closed=1")
unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: milestone.RepoID}, &issues_model.Milestone{})
assert.NoError(t, issues_model.ChangeMilestoneStatus(milestone, false))
assert.NoError(t, issues_model.ChangeMilestoneStatus(db.DefaultContext, milestone, false))
unittest.AssertExistsAndLoadBean(t, &issues_model.Milestone{ID: 1}, "is_closed=0")
unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: milestone.RepoID}, &issues_model.Milestone{})
}
func TestDeleteMilestoneByRepoID(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
assert.NoError(t, issues_model.DeleteMilestoneByRepoID(1, 1))
assert.NoError(t, issues_model.DeleteMilestoneByRepoID(db.DefaultContext, 1, 1))
unittest.AssertNotExistsBean(t, &issues_model.Milestone{ID: 1})
unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: 1})
assert.NoError(t, issues_model.DeleteMilestoneByRepoID(unittest.NonexistentID, unittest.NonexistentID))
assert.NoError(t, issues_model.DeleteMilestoneByRepoID(db.DefaultContext, unittest.NonexistentID, unittest.NonexistentID))
}
func TestUpdateMilestone(t *testing.T) {
@ -326,7 +326,7 @@ func TestUpdateMilestone(t *testing.T) {
milestone := unittest.AssertExistsAndLoadBean(t, &issues_model.Milestone{ID: 1})
milestone.Name = " newMilestoneName "
milestone.Content = "newMilestoneContent"
assert.NoError(t, issues_model.UpdateMilestone(milestone, milestone.IsClosed))
assert.NoError(t, issues_model.UpdateMilestone(db.DefaultContext, milestone, milestone.IsClosed))
milestone = unittest.AssertExistsAndLoadBean(t, &issues_model.Milestone{ID: 1})
assert.EqualValues(t, "newMilestoneName", milestone.Name)
unittest.CheckConsistencyFor(t, &issues_model.Milestone{})
@ -361,7 +361,7 @@ func TestMigrate_InsertMilestones(t *testing.T) {
RepoID: repo.ID,
Name: name,
}
err := issues_model.InsertMilestones(ms)
err := issues_model.InsertMilestones(db.DefaultContext, ms)
assert.NoError(t, err)
unittest.AssertExistsAndLoadBean(t, ms)
repoModified := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: repo.ID})

View File

@ -81,9 +81,9 @@ type UserStopwatch struct {
}
// GetUIDsAndNotificationCounts between the two provided times
func GetUIDsAndStopwatch() ([]*UserStopwatch, error) {
func GetUIDsAndStopwatch(ctx context.Context) ([]*UserStopwatch, error) {
sws := []*Stopwatch{}
if err := db.GetEngine(db.DefaultContext).Where("issue_id != 0").Find(&sws); err != nil {
if err := db.GetEngine(ctx).Where("issue_id != 0").Find(&sws); err != nil {
return nil, err
}
if len(sws) == 0 {
@ -107,9 +107,9 @@ func GetUIDsAndStopwatch() ([]*UserStopwatch, error) {
}
// GetUserStopwatches return list of all stopwatches of a user
func GetUserStopwatches(userID int64, listOptions db.ListOptions) ([]*Stopwatch, error) {
func GetUserStopwatches(ctx context.Context, userID int64, listOptions db.ListOptions) ([]*Stopwatch, error) {
sws := make([]*Stopwatch, 0, 8)
sess := db.GetEngine(db.DefaultContext).Where("stopwatch.user_id = ?", userID)
sess := db.GetEngine(ctx).Where("stopwatch.user_id = ?", userID)
if listOptions.Page != 0 {
sess = db.SetSessionPagination(sess, &listOptions)
}
@ -122,13 +122,13 @@ func GetUserStopwatches(userID int64, listOptions db.ListOptions) ([]*Stopwatch,
}
// CountUserStopwatches return count of all stopwatches of a user
func CountUserStopwatches(userID int64) (int64, error) {
return db.GetEngine(db.DefaultContext).Where("user_id = ?", userID).Count(&Stopwatch{})
func CountUserStopwatches(ctx context.Context, userID int64) (int64, error) {
return db.GetEngine(ctx).Where("user_id = ?", userID).Count(&Stopwatch{})
}
// StopwatchExists returns true if the stopwatch exists
func StopwatchExists(userID, issueID int64) bool {
_, exists, _ := getStopwatch(db.DefaultContext, userID, issueID)
func StopwatchExists(ctx context.Context, userID, issueID int64) bool {
_, exists, _ := getStopwatch(ctx, userID, issueID)
return exists
}
@ -168,15 +168,15 @@ func FinishIssueStopwatchIfPossible(ctx context.Context, user *user_model.User,
}
// CreateOrStopIssueStopwatch create an issue stopwatch if it's not exist, otherwise finish it
func CreateOrStopIssueStopwatch(user *user_model.User, issue *Issue) error {
_, exists, err := getStopwatch(db.DefaultContext, user.ID, issue.ID)
func CreateOrStopIssueStopwatch(ctx context.Context, user *user_model.User, issue *Issue) error {
_, exists, err := getStopwatch(ctx, user.ID, issue.ID)
if err != nil {
return err
}
if exists {
return FinishIssueStopwatch(db.DefaultContext, user, issue)
return FinishIssueStopwatch(ctx, user, issue)
}
return CreateIssueStopwatch(db.DefaultContext, user, issue)
return CreateIssueStopwatch(ctx, user, issue)
}
// FinishIssueStopwatch if stopwatch exist then finish it otherwise return an error
@ -269,8 +269,8 @@ func CreateIssueStopwatch(ctx context.Context, user *user_model.User, issue *Iss
}
// CancelStopwatch removes the given stopwatch and logs it into issue's timeline.
func CancelStopwatch(user *user_model.User, issue *Issue) error {
ctx, committer, err := db.TxContext(db.DefaultContext)
func CancelStopwatch(ctx context.Context, user *user_model.User, issue *Issue) error {
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}

View File

@ -26,20 +26,20 @@ func TestCancelStopwatch(t *testing.T) {
issue2, err := issues_model.GetIssueByID(db.DefaultContext, 2)
assert.NoError(t, err)
err = issues_model.CancelStopwatch(user1, issue1)
err = issues_model.CancelStopwatch(db.DefaultContext, user1, issue1)
assert.NoError(t, err)
unittest.AssertNotExistsBean(t, &issues_model.Stopwatch{UserID: user1.ID, IssueID: issue1.ID})
_ = unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{Type: issues_model.CommentTypeCancelTracking, PosterID: user1.ID, IssueID: issue1.ID})
assert.Nil(t, issues_model.CancelStopwatch(user1, issue2))
assert.Nil(t, issues_model.CancelStopwatch(db.DefaultContext, user1, issue2))
}
func TestStopwatchExists(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
assert.True(t, issues_model.StopwatchExists(1, 1))
assert.False(t, issues_model.StopwatchExists(1, 2))
assert.True(t, issues_model.StopwatchExists(db.DefaultContext, 1, 1))
assert.False(t, issues_model.StopwatchExists(db.DefaultContext, 1, 2))
}
func TestHasUserStopwatch(t *testing.T) {
@ -68,11 +68,11 @@ func TestCreateOrStopIssueStopwatch(t *testing.T) {
issue2, err := issues_model.GetIssueByID(db.DefaultContext, 2)
assert.NoError(t, err)
assert.NoError(t, issues_model.CreateOrStopIssueStopwatch(org3, issue1))
assert.NoError(t, issues_model.CreateOrStopIssueStopwatch(db.DefaultContext, org3, issue1))
sw := unittest.AssertExistsAndLoadBean(t, &issues_model.Stopwatch{UserID: 3, IssueID: 1})
assert.LessOrEqual(t, sw.CreatedUnix, timeutil.TimeStampNow())
assert.NoError(t, issues_model.CreateOrStopIssueStopwatch(user2, issue2))
assert.NoError(t, issues_model.CreateOrStopIssueStopwatch(db.DefaultContext, user2, issue2))
unittest.AssertNotExistsBean(t, &issues_model.Stopwatch{UserID: 2, IssueID: 2})
unittest.AssertExistsAndLoadBean(t, &issues_model.TrackedTime{UserID: 2, IssueID: 2})
}

View File

@ -532,6 +532,8 @@ var migrations = []Migration{
NewMigration("Add Actions artifacts expiration date", v1_21.AddExpiredUnixColumnInActionArtifactTable),
// v275 -> v276
NewMigration("Add ScheduleID for ActionRun", v1_21.AddScheduleIDForActionRun),
// v276 -> v277
NewMigration("Add RemoteAddress to mirrors", v1_21.AddRemoteAddressToMirrors),
}
// GetCurrentDBVersion returns the current db version

View File

@ -0,0 +1,184 @@
// Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package v1_21 //nolint
import (
"context"
"fmt"
"path/filepath"
"strings"
"code.gitea.io/gitea/modules/git"
giturl "code.gitea.io/gitea/modules/git/url"
"code.gitea.io/gitea/modules/setting"
"xorm.io/xorm"
)
func AddRemoteAddressToMirrors(x *xorm.Engine) error {
type Mirror struct {
RemoteAddress string `xorm:"VARCHAR(2048)"`
}
type PushMirror struct {
RemoteAddress string `xorm:"VARCHAR(2048)"`
}
if err := x.Sync(new(Mirror), new(PushMirror)); err != nil {
return err
}
if err := migratePullMirrors(x); err != nil {
return err
}
return migratePushMirrors(x)
}
func migratePullMirrors(x *xorm.Engine) error {
type Mirror struct {
ID int64 `xorm:"pk autoincr"`
RepoID int64 `xorm:"INDEX"`
RemoteAddress string `xorm:"VARCHAR(2048)"`
}
sess := x.NewSession()
defer sess.Close()
if err := sess.Begin(); err != nil {
return err
}
limit := setting.Database.IterateBufferSize
if limit <= 0 {
limit = 50
}
start := 0
for {
var mirrors []Mirror
if err := sess.Limit(limit, start).Find(&mirrors); err != nil {
return err
}
if len(mirrors) == 0 {
break
}
start += len(mirrors)
for _, m := range mirrors {
remoteAddress, err := getRemoteAddress(sess, m.RepoID, "origin")
if err != nil {
return err
}
m.RemoteAddress = remoteAddress
if _, err = sess.ID(m.ID).Cols("remote_address").Update(m); err != nil {
return err
}
}
if start%1000 == 0 { // avoid a too big transaction
if err := sess.Commit(); err != nil {
return err
}
if err := sess.Begin(); err != nil {
return err
}
}
}
return sess.Commit()
}
func migratePushMirrors(x *xorm.Engine) error {
type PushMirror struct {
ID int64 `xorm:"pk autoincr"`
RepoID int64 `xorm:"INDEX"`
RemoteName string
RemoteAddress string `xorm:"VARCHAR(2048)"`
}
sess := x.NewSession()
defer sess.Close()
if err := sess.Begin(); err != nil {
return err
}
limit := setting.Database.IterateBufferSize
if limit <= 0 {
limit = 50
}
start := 0
for {
var mirrors []PushMirror
if err := sess.Limit(limit, start).Find(&mirrors); err != nil {
return err
}
if len(mirrors) == 0 {
break
}
start += len(mirrors)
for _, m := range mirrors {
remoteAddress, err := getRemoteAddress(sess, m.RepoID, m.RemoteName)
if err != nil {
return err
}
m.RemoteAddress = remoteAddress
if _, err = sess.ID(m.ID).Cols("remote_address").Update(m); err != nil {
return err
}
}
if start%1000 == 0 { // avoid a too big transaction
if err := sess.Commit(); err != nil {
return err
}
if err := sess.Begin(); err != nil {
return err
}
}
}
return sess.Commit()
}
func getRemoteAddress(sess *xorm.Session, repoID int64, remoteName string) (string, error) {
var ownerName string
var repoName string
has, err := sess.
Table("repository").
Cols("owner_name", "lower_name").
Where("id=?", repoID).
Get(&ownerName, &repoName)
if err != nil {
return "", err
} else if !has {
return "", fmt.Errorf("repository [%v] not found", repoID)
}
repoPath := filepath.Join(setting.RepoRootPath, strings.ToLower(ownerName), strings.ToLower(repoName)+".git")
remoteURL, err := git.GetRemoteAddress(context.Background(), repoPath, remoteName)
if err != nil {
return "", err
}
u, err := giturl.Parse(remoteURL)
if err != nil {
return "", err
}
u.User = nil
return u.String(), nil
}

View File

@ -366,69 +366,69 @@ func AddTeamMember(ctx context.Context, team *organization.Team, userID int64) e
return err
}
ctx, committer, err := db.TxContext(ctx)
err = db.WithTx(ctx, func(ctx context.Context) error {
// check in transaction
isAlreadyMember, err = organization.IsTeamMember(ctx, team.OrgID, team.ID, userID)
if err != nil || isAlreadyMember {
return err
}
sess := db.GetEngine(ctx)
if err := db.Insert(ctx, &organization.TeamUser{
UID: userID,
OrgID: team.OrgID,
TeamID: team.ID,
}); err != nil {
return err
} else if _, err := sess.Incr("num_members").ID(team.ID).Update(new(organization.Team)); err != nil {
return err
}
team.NumMembers++
// Give access to team repositories.
// update exist access if mode become bigger
subQuery := builder.Select("repo_id").From("team_repo").
Where(builder.Eq{"team_id": team.ID})
if _, err := sess.Where("user_id=?", userID).
In("repo_id", subQuery).
And("mode < ?", team.AccessMode).
SetExpr("mode", team.AccessMode).
Update(new(access_model.Access)); err != nil {
return fmt.Errorf("update user accesses: %w", err)
}
// for not exist access
var repoIDs []int64
accessSubQuery := builder.Select("repo_id").From("access").Where(builder.Eq{"user_id": userID})
if err := sess.SQL(subQuery.And(builder.NotIn("repo_id", accessSubQuery))).Find(&repoIDs); err != nil {
return fmt.Errorf("select id accesses: %w", err)
}
accesses := make([]*access_model.Access, 0, 100)
for i, repoID := range repoIDs {
accesses = append(accesses, &access_model.Access{RepoID: repoID, UserID: userID, Mode: team.AccessMode})
if (i%100 == 0 || i == len(repoIDs)-1) && len(accesses) > 0 {
if err = db.Insert(ctx, accesses); err != nil {
return fmt.Errorf("insert new user accesses: %w", err)
}
accesses = accesses[:0]
}
}
return nil
})
if err != nil {
return err
}
defer committer.Close()
// check in transaction
isAlreadyMember, err = organization.IsTeamMember(ctx, team.OrgID, team.ID, userID)
if err != nil || isAlreadyMember {
return err
}
sess := db.GetEngine(ctx)
if err := db.Insert(ctx, &organization.TeamUser{
UID: userID,
OrgID: team.OrgID,
TeamID: team.ID,
}); err != nil {
return err
} else if _, err := sess.Incr("num_members").ID(team.ID).Update(new(organization.Team)); err != nil {
return err
}
team.NumMembers++
// Give access to team repositories.
// update exist access if mode become bigger
subQuery := builder.Select("repo_id").From("team_repo").
Where(builder.Eq{"team_id": team.ID})
if _, err := sess.Where("user_id=?", userID).
In("repo_id", subQuery).
And("mode < ?", team.AccessMode).
SetExpr("mode", team.AccessMode).
Update(new(access_model.Access)); err != nil {
return fmt.Errorf("update user accesses: %w", err)
}
// for not exist access
var repoIDs []int64
accessSubQuery := builder.Select("repo_id").From("access").Where(builder.Eq{"user_id": userID})
if err := sess.SQL(subQuery.And(builder.NotIn("repo_id", accessSubQuery))).Find(&repoIDs); err != nil {
return fmt.Errorf("select id accesses: %w", err)
}
accesses := make([]*access_model.Access, 0, 100)
for i, repoID := range repoIDs {
accesses = append(accesses, &access_model.Access{RepoID: repoID, UserID: userID, Mode: team.AccessMode})
if (i%100 == 0 || i == len(repoIDs)-1) && len(accesses) > 0 {
if err = db.Insert(ctx, accesses); err != nil {
return fmt.Errorf("insert new user accesses: %w", err)
}
accesses = accesses[:0]
}
}
// this behaviour may spend much time so run it in a goroutine
// FIXME: Update watch repos batchly
if setting.Service.AutoWatchNewRepos {
// Get team and its repositories.
if err := team.LoadRepositories(ctx); err != nil {
log.Error("getRepositories failed: %v", err)
log.Error("team.LoadRepositories failed: %v", err)
}
// FIXME: in the goroutine, it can't access the "ctx", it could only use db.DefaultContext at the moment
go func(repos []*repo_model.Repository) {
@ -440,7 +440,7 @@ func AddTeamMember(ctx context.Context, team *organization.Team, userID int64) e
}(team.Repos)
}
return committer.Commit()
return nil
}
func removeTeamMember(ctx context.Context, team *organization.Team, userID int64) error {

View File

@ -4,6 +4,7 @@
package organization
import (
"context"
"fmt"
"strings"
@ -19,7 +20,7 @@ import (
type MinimalOrg = Organization
// GetUserOrgsList returns all organizations the given user has access to
func GetUserOrgsList(user *user_model.User) ([]*MinimalOrg, error) {
func GetUserOrgsList(ctx context.Context, user *user_model.User) ([]*MinimalOrg, error) {
schema, err := db.TableInfo(new(user_model.User))
if err != nil {
return nil, err
@ -42,7 +43,7 @@ func GetUserOrgsList(user *user_model.User) ([]*MinimalOrg, error) {
groupByStr := groupByCols.String()
groupByStr = groupByStr[0 : len(groupByStr)-1]
sess := db.GetEngine(db.DefaultContext)
sess := db.GetEngine(ctx)
sess = sess.Select(groupByStr+", count(distinct repo_id) as org_count").
Table("user").
Join("INNER", "team", "`team`.org_id = `user`.id").

View File

@ -72,7 +72,7 @@ var delRepoArchiver = new(RepoArchiver)
// DeleteRepoArchiver delete archiver
func DeleteRepoArchiver(ctx context.Context, archiver *RepoArchiver) error {
_, err := db.GetEngine(db.DefaultContext).ID(archiver.ID).Delete(delRepoArchiver)
_, err := db.GetEngine(ctx).ID(archiver.ID).Delete(delRepoArchiver)
return err
}
@ -113,8 +113,8 @@ func UpdateRepoArchiverStatus(ctx context.Context, archiver *RepoArchiver) error
}
// DeleteAllRepoArchives deletes all repo archives records
func DeleteAllRepoArchives() error {
_, err := db.GetEngine(db.DefaultContext).Where("1=1").Delete(new(RepoArchiver))
func DeleteAllRepoArchives(ctx context.Context) error {
_, err := db.GetEngine(ctx).Where("1=1").Delete(new(RepoArchiver))
return err
}
@ -133,10 +133,10 @@ func (opts FindRepoArchiversOption) toConds() builder.Cond {
}
// FindRepoArchives find repo archivers
func FindRepoArchives(opts FindRepoArchiversOption) ([]*RepoArchiver, error) {
func FindRepoArchives(ctx context.Context, opts FindRepoArchiversOption) ([]*RepoArchiver, error) {
archivers := make([]*RepoArchiver, 0, opts.PageSize)
start, limit := opts.GetSkipTake()
err := db.GetEngine(db.DefaultContext).Where(opts.toConds()).
err := db.GetEngine(ctx).Where(opts.toConds()).
Asc("created_unix").
Limit(limit, start).
Find(&archivers)
@ -144,7 +144,7 @@ func FindRepoArchives(opts FindRepoArchiversOption) ([]*RepoArchiver, error) {
}
// SetArchiveRepoState sets if a repo is archived
func SetArchiveRepoState(repo *Repository, isArchived bool) (err error) {
func SetArchiveRepoState(ctx context.Context, repo *Repository, isArchived bool) (err error) {
repo.IsArchived = isArchived
if isArchived {
@ -153,6 +153,6 @@ func SetArchiveRepoState(repo *Repository, isArchived bool) (err error) {
repo.ArchivedUnix = timeutil.TimeStamp(0)
}
_, err = db.GetEngine(db.DefaultContext).ID(repo.ID).Cols("is_archived", "archived_unix").NoAutoTime().Update(repo)
_, err = db.GetEngine(ctx).ID(repo.ID).Cols("is_archived", "archived_unix").NoAutoTime().Update(repo)
return err
}

View File

@ -39,7 +39,7 @@ type Mirror struct {
LFS bool `xorm:"lfs_enabled NOT NULL DEFAULT false"`
LFSEndpoint string `xorm:"lfs_endpoint TEXT"`
Address string `xorm:"-"`
RemoteAddress string `xorm:"VARCHAR(2048)"`
}
func init() {

View File

@ -20,10 +20,11 @@ var ErrPushMirrorNotExist = util.NewNotExistErrorf("PushMirror does not exist")
// PushMirror represents mirror information of a repository.
type PushMirror struct {
ID int64 `xorm:"pk autoincr"`
RepoID int64 `xorm:"INDEX"`
Repo *Repository `xorm:"-"`
RemoteName string
ID int64 `xorm:"pk autoincr"`
RepoID int64 `xorm:"INDEX"`
Repo *Repository `xorm:"-"`
RemoteName string
RemoteAddress string `xorm:"VARCHAR(2048)"`
SyncOnCommit bool `xorm:"NOT NULL DEFAULT true"`
Interval time.Duration
@ -31,6 +32,7 @@ type PushMirror struct {
LastUpdateUnix timeutil.TimeStamp `xorm:"INDEX last_update"`
LastError string `xorm:"text"`
}
type PushMirrorOptions struct {
ID int64
RepoID int64

View File

@ -191,12 +191,8 @@ func (repo *Repository) SanitizedOriginalURL() string {
if repo.OriginalURL == "" {
return ""
}
u, err := url.Parse(repo.OriginalURL)
if err != nil {
return ""
}
u.User = nil
return u.String()
u, _ := util.SanitizeURL(repo.OriginalURL)
return u
}
// text representations to be returned in SizeDetail.Name

View File

@ -92,9 +92,9 @@ func SanitizeAndValidateTopics(topics []string) (validTopics, invalidTopics []st
}
// GetTopicByName retrieves topic by name
func GetTopicByName(name string) (*Topic, error) {
func GetTopicByName(ctx context.Context, name string) (*Topic, error) {
var topic Topic
if has, err := db.GetEngine(db.DefaultContext).Where("name = ?", name).Get(&topic); err != nil {
if has, err := db.GetEngine(ctx).Where("name = ?", name).Get(&topic); err != nil {
return nil, err
} else if !has {
return nil, ErrTopicNotExist{name}
@ -192,8 +192,8 @@ func (opts *FindTopicOptions) toConds() builder.Cond {
}
// FindTopics retrieves the topics via FindTopicOptions
func FindTopics(opts *FindTopicOptions) ([]*Topic, int64, error) {
sess := db.GetEngine(db.DefaultContext).Select("topic.*").Where(opts.toConds())
func FindTopics(ctx context.Context, opts *FindTopicOptions) ([]*Topic, int64, error) {
sess := db.GetEngine(ctx).Select("topic.*").Where(opts.toConds())
orderBy := "topic.repo_count DESC"
if opts.RepoID > 0 {
sess.Join("INNER", "repo_topic", "repo_topic.topic_id = topic.id")
@ -208,8 +208,8 @@ func FindTopics(opts *FindTopicOptions) ([]*Topic, int64, error) {
}
// CountTopics counts the number of topics matching the FindTopicOptions
func CountTopics(opts *FindTopicOptions) (int64, error) {
sess := db.GetEngine(db.DefaultContext).Where(opts.toConds())
func CountTopics(ctx context.Context, opts *FindTopicOptions) (int64, error) {
sess := db.GetEngine(ctx).Where(opts.toConds())
if opts.RepoID > 0 {
sess.Join("INNER", "repo_topic", "repo_topic.topic_id = topic.id")
}
@ -231,8 +231,8 @@ func GetRepoTopicByName(ctx context.Context, repoID int64, topicName string) (*T
}
// AddTopic adds a topic name to a repository (if it does not already have it)
func AddTopic(repoID int64, topicName string) (*Topic, error) {
ctx, committer, err := db.TxContext(db.DefaultContext)
func AddTopic(ctx context.Context, repoID int64, topicName string) (*Topic, error) {
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return nil, err
}
@ -289,8 +289,8 @@ func AddTopics(repoID int64, topicNames ...string) error {
}
// DeleteTopic removes a topic name from a repository (if it has it)
func DeleteTopic(repoID int64, topicName string) (*Topic, error) {
topic, err := GetRepoTopicByName(db.DefaultContext, repoID, topicName)
func DeleteTopic(ctx context.Context, repoID int64, topicName string) (*Topic, error) {
topic, err := GetRepoTopicByName(ctx, repoID, topicName)
if err != nil {
return nil, err
}
@ -299,26 +299,26 @@ func DeleteTopic(repoID int64, topicName string) (*Topic, error) {
return nil, nil
}
err = removeTopicFromRepo(db.DefaultContext, repoID, topic)
err = removeTopicFromRepo(ctx, repoID, topic)
if err != nil {
return nil, err
}
err = syncTopicsInRepository(db.GetEngine(db.DefaultContext), repoID)
err = syncTopicsInRepository(db.GetEngine(ctx), repoID)
return topic, err
}
// SaveTopics save topics to a repository (add and delete respective topics)
func SaveTopics(repoID int64, topicNames ...string) error {
topics, _, err := FindTopics(&FindTopicOptions{
func SaveTopics(ctx context.Context, repoID int64, topicNames ...string) error {
topics, _, err := FindTopics(ctx, &FindTopicOptions{
RepoID: repoID,
})
if err != nil {
return err
}
ctx, committer, err := db.TxContext(db.DefaultContext)
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}

View File

@ -19,47 +19,47 @@ func TestAddTopic(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
topics, _, err := repo_model.FindTopics(&repo_model.FindTopicOptions{})
topics, _, err := repo_model.FindTopics(db.DefaultContext, &repo_model.FindTopicOptions{})
assert.NoError(t, err)
assert.Len(t, topics, totalNrOfTopics)
topics, total, err := repo_model.FindTopics(&repo_model.FindTopicOptions{
topics, total, err := repo_model.FindTopics(db.DefaultContext, &repo_model.FindTopicOptions{
ListOptions: db.ListOptions{Page: 1, PageSize: 2},
})
assert.NoError(t, err)
assert.Len(t, topics, 2)
assert.EqualValues(t, 6, total)
topics, _, err = repo_model.FindTopics(&repo_model.FindTopicOptions{
topics, _, err = repo_model.FindTopics(db.DefaultContext, &repo_model.FindTopicOptions{
RepoID: 1,
})
assert.NoError(t, err)
assert.Len(t, topics, repo1NrOfTopics)
assert.NoError(t, repo_model.SaveTopics(2, "golang"))
assert.NoError(t, repo_model.SaveTopics(db.DefaultContext, 2, "golang"))
repo2NrOfTopics := 1
topics, _, err = repo_model.FindTopics(&repo_model.FindTopicOptions{})
topics, _, err = repo_model.FindTopics(db.DefaultContext, &repo_model.FindTopicOptions{})
assert.NoError(t, err)
assert.Len(t, topics, totalNrOfTopics)
topics, _, err = repo_model.FindTopics(&repo_model.FindTopicOptions{
topics, _, err = repo_model.FindTopics(db.DefaultContext, &repo_model.FindTopicOptions{
RepoID: 2,
})
assert.NoError(t, err)
assert.Len(t, topics, repo2NrOfTopics)
assert.NoError(t, repo_model.SaveTopics(2, "golang", "gitea"))
assert.NoError(t, repo_model.SaveTopics(db.DefaultContext, 2, "golang", "gitea"))
repo2NrOfTopics = 2
totalNrOfTopics++
topic, err := repo_model.GetTopicByName("gitea")
topic, err := repo_model.GetTopicByName(db.DefaultContext, "gitea")
assert.NoError(t, err)
assert.EqualValues(t, 1, topic.RepoCount)
topics, _, err = repo_model.FindTopics(&repo_model.FindTopicOptions{})
topics, _, err = repo_model.FindTopics(db.DefaultContext, &repo_model.FindTopicOptions{})
assert.NoError(t, err)
assert.Len(t, topics, totalNrOfTopics)
topics, _, err = repo_model.FindTopics(&repo_model.FindTopicOptions{
topics, _, err = repo_model.FindTopics(db.DefaultContext, &repo_model.FindTopicOptions{
RepoID: 2,
})
assert.NoError(t, err)

View File

@ -16,11 +16,11 @@ import (
)
// UpdateRepositoryOwnerNames updates repository owner_names (this should only be used when the ownerName has changed case)
func UpdateRepositoryOwnerNames(ownerID int64, ownerName string) error {
func UpdateRepositoryOwnerNames(ctx context.Context, ownerID int64, ownerName string) error {
if ownerID == 0 {
return nil
}
ctx, committer, err := db.TxContext(db.DefaultContext)
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}
@ -36,8 +36,8 @@ func UpdateRepositoryOwnerNames(ownerID int64, ownerName string) error {
}
// UpdateRepositoryUpdatedTime updates a repository's updated time
func UpdateRepositoryUpdatedTime(repoID int64, updateTime time.Time) error {
_, err := db.GetEngine(db.DefaultContext).Exec("UPDATE repository SET updated_unix = ? WHERE id = ?", updateTime.Unix(), repoID)
func UpdateRepositoryUpdatedTime(ctx context.Context, repoID int64, updateTime time.Time) error {
_, err := db.GetEngine(ctx).Exec("UPDATE repository SET updated_unix = ? WHERE id = ?", updateTime.Unix(), repoID)
return err
}
@ -107,7 +107,7 @@ func (err ErrRepoFilesAlreadyExist) Unwrap() error {
}
// CheckCreateRepository check if could created a repository
func CheckCreateRepository(doer, u *user_model.User, name string, overwriteOrAdopt bool) error {
func CheckCreateRepository(ctx context.Context, doer, u *user_model.User, name string, overwriteOrAdopt bool) error {
if !doer.CanCreateRepo() {
return ErrReachLimitOfRepo{u.MaxRepoCreation}
}
@ -116,7 +116,7 @@ func CheckCreateRepository(doer, u *user_model.User, name string, overwriteOrAdo
return err
}
has, err := IsRepositoryModelOrDirExist(db.DefaultContext, u, name)
has, err := IsRepositoryModelOrDirExist(ctx, u, name)
if err != nil {
return fmt.Errorf("IsRepositoryExist: %w", err)
} else if has {
@ -136,18 +136,18 @@ func CheckCreateRepository(doer, u *user_model.User, name string, overwriteOrAdo
}
// ChangeRepositoryName changes all corresponding setting from old repository name to new one.
func ChangeRepositoryName(doer *user_model.User, repo *Repository, newRepoName string) (err error) {
func ChangeRepositoryName(ctx context.Context, doer *user_model.User, repo *Repository, newRepoName string) (err error) {
oldRepoName := repo.Name
newRepoName = strings.ToLower(newRepoName)
if err = IsUsableRepoName(newRepoName); err != nil {
return err
}
if err := repo.LoadOwner(db.DefaultContext); err != nil {
if err := repo.LoadOwner(ctx); err != nil {
return err
}
has, err := IsRepositoryModelOrDirExist(db.DefaultContext, repo.Owner, newRepoName)
has, err := IsRepositoryModelOrDirExist(ctx, repo.Owner, newRepoName)
if err != nil {
return fmt.Errorf("IsRepositoryExist: %w", err)
} else if has {
@ -171,7 +171,7 @@ func ChangeRepositoryName(doer *user_model.User, repo *Repository, newRepoName s
}
}
ctx, committer, err := db.TxContext(db.DefaultContext)
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}

View File

@ -79,8 +79,8 @@ func (r *RepoTransfer) LoadAttributes(ctx context.Context) error {
// CanUserAcceptTransfer checks if the user has the rights to accept/decline a repo transfer.
// For user, it checks if it's himself
// For organizations, it checks if the user is able to create repos
func (r *RepoTransfer) CanUserAcceptTransfer(u *user_model.User) bool {
if err := r.LoadAttributes(db.DefaultContext); err != nil {
func (r *RepoTransfer) CanUserAcceptTransfer(ctx context.Context, u *user_model.User) bool {
if err := r.LoadAttributes(ctx); err != nil {
log.Error("LoadAttributes: %v", err)
return false
}
@ -89,7 +89,7 @@ func (r *RepoTransfer) CanUserAcceptTransfer(u *user_model.User) bool {
return r.RecipientID == u.ID
}
allowed, err := organization.CanCreateOrgRepo(db.DefaultContext, r.RecipientID, u.ID)
allowed, err := organization.CanCreateOrgRepo(ctx, r.RecipientID, u.ID)
if err != nil {
log.Error("CanCreateOrgRepo: %v", err)
return false
@ -122,8 +122,8 @@ func deleteRepositoryTransfer(ctx context.Context, repoID int64) error {
// CancelRepositoryTransfer marks the repository as ready and remove pending transfer entry,
// thus cancel the transfer process.
func CancelRepositoryTransfer(repo *repo_model.Repository) error {
ctx, committer, err := db.TxContext(db.DefaultContext)
func CancelRepositoryTransfer(ctx context.Context, repo *repo_model.Repository) error {
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}
@ -199,7 +199,7 @@ func CreatePendingRepositoryTransfer(ctx context.Context, doer, newOwner *user_m
}
// TransferOwnership transfers all corresponding repository items from old user to new one.
func TransferOwnership(doer *user_model.User, newOwnerName string, repo *repo_model.Repository) (err error) {
func TransferOwnership(ctx context.Context, doer *user_model.User, newOwnerName string, repo *repo_model.Repository) (err error) {
repoRenamed := false
wikiRenamed := false
oldOwnerName := doer.Name
@ -234,7 +234,7 @@ func TransferOwnership(doer *user_model.User, newOwnerName string, repo *repo_mo
}
}()
ctx, committer, err := db.TxContext(db.DefaultContext)
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}

View File

@ -25,7 +25,7 @@ func TestRepositoryTransfer(t *testing.T) {
assert.NotNil(t, transfer)
// Cancel transfer
assert.NoError(t, CancelRepositoryTransfer(repo))
assert.NoError(t, CancelRepositoryTransfer(db.DefaultContext, repo))
transfer, err = GetPendingRepositoryTransfer(db.DefaultContext, repo)
assert.Error(t, err)
@ -53,5 +53,5 @@ func TestRepositoryTransfer(t *testing.T) {
assert.Error(t, err)
// Cancel transfer
assert.NoError(t, CancelRepositoryTransfer(repo))
assert.NoError(t, CancelRepositoryTransfer(db.DefaultContext, repo))
}

View File

@ -4,6 +4,8 @@
package user
import (
"context"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/modules/timeutil"
)
@ -21,18 +23,18 @@ func init() {
}
// IsFollowing returns true if user is following followID.
func IsFollowing(userID, followID int64) bool {
has, _ := db.GetEngine(db.DefaultContext).Get(&Follow{UserID: userID, FollowID: followID})
func IsFollowing(ctx context.Context, userID, followID int64) bool {
has, _ := db.GetEngine(ctx).Get(&Follow{UserID: userID, FollowID: followID})
return has
}
// FollowUser marks someone be another's follower.
func FollowUser(userID, followID int64) (err error) {
if userID == followID || IsFollowing(userID, followID) {
func FollowUser(ctx context.Context, userID, followID int64) (err error) {
if userID == followID || IsFollowing(ctx, userID, followID) {
return nil
}
ctx, committer, err := db.TxContext(db.DefaultContext)
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}
@ -53,12 +55,12 @@ func FollowUser(userID, followID int64) (err error) {
}
// UnfollowUser unmarks someone as another's follower.
func UnfollowUser(userID, followID int64) (err error) {
if userID == followID || !IsFollowing(userID, followID) {
func UnfollowUser(ctx context.Context, userID, followID int64) (err error) {
if userID == followID || !IsFollowing(ctx, userID, followID) {
return nil
}
ctx, committer, err := db.TxContext(db.DefaultContext)
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}

View File

@ -6,6 +6,7 @@ package user_test
import (
"testing"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
@ -14,9 +15,9 @@ import (
func TestIsFollowing(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
assert.True(t, user_model.IsFollowing(4, 2))
assert.False(t, user_model.IsFollowing(2, 4))
assert.False(t, user_model.IsFollowing(5, unittest.NonexistentID))
assert.False(t, user_model.IsFollowing(unittest.NonexistentID, 5))
assert.False(t, user_model.IsFollowing(unittest.NonexistentID, unittest.NonexistentID))
assert.True(t, user_model.IsFollowing(db.DefaultContext, 4, 2))
assert.False(t, user_model.IsFollowing(db.DefaultContext, 2, 4))
assert.False(t, user_model.IsFollowing(db.DefaultContext, 5, unittest.NonexistentID))
assert.False(t, user_model.IsFollowing(db.DefaultContext, unittest.NonexistentID, 5))
assert.False(t, user_model.IsFollowing(db.DefaultContext, unittest.NonexistentID, unittest.NonexistentID))
}

View File

@ -1246,7 +1246,7 @@ func IsUserVisibleToViewer(ctx context.Context, u, viewer *User) bool {
}
// If they follow - they see each over
follower := IsFollowing(u.ID, viewer.ID)
follower := IsFollowing(ctx, u.ID, viewer.ID)
if follower {
return true
}

View File

@ -449,13 +449,13 @@ func TestFollowUser(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
testSuccess := func(followerID, followedID int64) {
assert.NoError(t, user_model.FollowUser(followerID, followedID))
assert.NoError(t, user_model.FollowUser(db.DefaultContext, followerID, followedID))
unittest.AssertExistsAndLoadBean(t, &user_model.Follow{UserID: followerID, FollowID: followedID})
}
testSuccess(4, 2)
testSuccess(5, 2)
assert.NoError(t, user_model.FollowUser(2, 2))
assert.NoError(t, user_model.FollowUser(db.DefaultContext, 2, 2))
unittest.CheckConsistencyFor(t, &user_model.User{})
}
@ -464,7 +464,7 @@ func TestUnfollowUser(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
testSuccess := func(followerID, followedID int64) {
assert.NoError(t, user_model.UnfollowUser(followerID, followedID))
assert.NoError(t, user_model.UnfollowUser(db.DefaultContext, followerID, followedID))
unittest.AssertNotExistsBean(t, &user_model.Follow{UserID: followerID, FollowID: followedID})
}
testSuccess(4, 2)

View File

@ -68,7 +68,7 @@ func (u *User) WebAuthnIcon() string {
// WebAuthnCredentials implementns the webauthn.User interface
func (u *User) WebAuthnCredentials() []webauthn.Credential {
dbCreds, err := auth.GetWebAuthnCredentialsByUID(u.ID)
dbCreds, err := auth.GetWebAuthnCredentialsByUID(db.DefaultContext, u.ID)
if err != nil {
return nil
}

View File

@ -741,7 +741,7 @@ func RepoAssignment(ctx *Context) context.CancelFunc {
ctx.Data["RepoTransfer"] = repoTransfer
if ctx.Doer != nil {
ctx.Data["CanUserAcceptTransfer"] = repoTransfer.CanUserAcceptTransfer(ctx.Doer)
ctx.Data["CanUserAcceptTransfer"] = repoTransfer.CanUserAcceptTransfer(ctx, ctx.Doer)
}
}

View File

@ -84,7 +84,7 @@ loop:
then = now
if setting.Service.EnableTimetracking {
usersStopwatches, err := issues_model.GetUIDsAndStopwatch()
usersStopwatches, err := issues_model.GetUIDsAndStopwatch(ctx)
if err != nil {
log.Error("Unable to get GetUIDsAndStopwatch: %v", err)
return

View File

@ -13,6 +13,7 @@ import (
"regexp"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/util"
)
// BlamePart represents block of blame - continuous lines with one sha
@ -23,12 +24,16 @@ type BlamePart struct {
// BlameReader returns part of file blame one by one
type BlameReader struct {
cmd *Command
output io.WriteCloser
reader io.ReadCloser
bufferedReader *bufio.Reader
done chan error
lastSha *string
ignoreRevsFile *string
}
func (r *BlameReader) UsesIgnoreRevs() bool {
return r.ignoreRevsFile != nil
}
var shaLineRegex = regexp.MustCompile("^([a-z0-9]{40})")
@ -101,28 +106,44 @@ func (r *BlameReader) Close() error {
r.bufferedReader = nil
_ = r.reader.Close()
_ = r.output.Close()
if r.ignoreRevsFile != nil {
_ = util.Remove(*r.ignoreRevsFile)
}
return err
}
// CreateBlameReader creates reader for given repository, commit and file
func CreateBlameReader(ctx context.Context, repoPath, commitID, file string) (*BlameReader, error) {
cmd := NewCommandContextNoGlobals(ctx, "blame", "--porcelain").
AddDynamicArguments(commitID).
func CreateBlameReader(ctx context.Context, repoPath string, commit *Commit, file string, bypassBlameIgnore bool) (*BlameReader, error) {
var ignoreRevsFile *string
if CheckGitVersionAtLeast("2.23") == nil && !bypassBlameIgnore {
ignoreRevsFile = tryCreateBlameIgnoreRevsFile(commit)
}
cmd := NewCommandContextNoGlobals(ctx, "blame", "--porcelain")
if ignoreRevsFile != nil {
// Possible improvement: use --ignore-revs-file /dev/stdin on unix
// There is no equivalent on Windows. May be implemented if Gitea uses an external git backend.
cmd.AddOptionValues("--ignore-revs-file", *ignoreRevsFile)
}
cmd.AddDynamicArguments(commit.ID.String()).
AddDashesAndList(file).
SetDescription(fmt.Sprintf("GetBlame [repo_path: %s]", repoPath))
reader, stdout, err := os.Pipe()
if err != nil {
if ignoreRevsFile != nil {
_ = util.Remove(*ignoreRevsFile)
}
return nil, err
}
done := make(chan error, 1)
go func(cmd *Command, dir string, stdout io.WriteCloser, done chan error) {
go func() {
stderr := bytes.Buffer{}
// TODO: it doesn't work for directories (the directories shouldn't be "blamed"), and the "err" should be returned by "Read" but not by "Close"
err := cmd.Run(&RunOpts{
UseContextTimeout: true,
Dir: dir,
Dir: repoPath,
Stdout: stdout,
Stderr: &stderr,
})
@ -131,15 +152,42 @@ func CreateBlameReader(ctx context.Context, repoPath, commitID, file string) (*B
if err != nil {
log.Error("Error running git blame (dir: %v): %v, stderr: %v", repoPath, err, stderr.String())
}
}(cmd, repoPath, stdout, done)
}()
bufferedReader := bufio.NewReader(reader)
return &BlameReader{
cmd: cmd,
output: stdout,
reader: reader,
bufferedReader: bufferedReader,
done: done,
ignoreRevsFile: ignoreRevsFile,
}, nil
}
func tryCreateBlameIgnoreRevsFile(commit *Commit) *string {
entry, err := commit.GetTreeEntryByPath(".git-blame-ignore-revs")
if err != nil {
return nil
}
r, err := entry.Blob().DataAsync()
if err != nil {
return nil
}
defer r.Close()
f, err := os.CreateTemp("", "gitea_git-blame-ignore-revs")
if err != nil {
return nil
}
_, err = io.Copy(f, r)
_ = f.Close()
if err != nil {
_ = util.Remove(f.Name())
return nil
}
return util.ToPointer(f.Name())
}

View File

@ -14,27 +14,127 @@ func TestReadingBlameOutput(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
blameReader, err := CreateBlameReader(ctx, "./tests/repos/repo5_pulls", "f32b0a9dfd09a60f616f29158f772cedd89942d2", "README.md")
assert.NoError(t, err)
defer blameReader.Close()
parts := []*BlamePart{
{
"72866af952e98d02a73003501836074b286a78f6",
[]string{
"# test_repo",
"Test repository for testing migration from github to gitea",
},
},
{
"f32b0a9dfd09a60f616f29158f772cedd89942d2",
[]string{"", "Do not make any changes to this repo it is used for unit testing"},
},
}
for _, part := range parts {
actualPart, err := blameReader.NextPart()
t.Run("Without .git-blame-ignore-revs", func(t *testing.T) {
repo, err := OpenRepository(ctx, "./tests/repos/repo5_pulls")
assert.NoError(t, err)
assert.Equal(t, part, actualPart)
}
defer repo.Close()
commit, err := repo.GetCommit("f32b0a9dfd09a60f616f29158f772cedd89942d2")
assert.NoError(t, err)
parts := []*BlamePart{
{
"72866af952e98d02a73003501836074b286a78f6",
[]string{
"# test_repo",
"Test repository for testing migration from github to gitea",
},
},
{
"f32b0a9dfd09a60f616f29158f772cedd89942d2",
[]string{"", "Do not make any changes to this repo it is used for unit testing"},
},
}
for _, bypass := range []bool{false, true} {
blameReader, err := CreateBlameReader(ctx, "./tests/repos/repo5_pulls", commit, "README.md", bypass)
assert.NoError(t, err)
assert.NotNil(t, blameReader)
defer blameReader.Close()
assert.False(t, blameReader.UsesIgnoreRevs())
for _, part := range parts {
actualPart, err := blameReader.NextPart()
assert.NoError(t, err)
assert.Equal(t, part, actualPart)
}
// make sure all parts have been read
actualPart, err := blameReader.NextPart()
assert.Nil(t, actualPart)
assert.NoError(t, err)
}
})
t.Run("With .git-blame-ignore-revs", func(t *testing.T) {
repo, err := OpenRepository(ctx, "./tests/repos/repo6_blame")
assert.NoError(t, err)
defer repo.Close()
full := []*BlamePart{
{
"af7486bd54cfc39eea97207ca666aa69c9d6df93",
[]string{"line", "line"},
},
{
"45fb6cbc12f970b04eacd5cd4165edd11c8d7376",
[]string{"changed line"},
},
{
"af7486bd54cfc39eea97207ca666aa69c9d6df93",
[]string{"line", "line", ""},
},
}
cases := []struct {
CommitID string
UsesIgnoreRevs bool
Bypass bool
Parts []*BlamePart
}{
{
CommitID: "544d8f7a3b15927cddf2299b4b562d6ebd71b6a7",
UsesIgnoreRevs: true,
Bypass: false,
Parts: []*BlamePart{
{
"af7486bd54cfc39eea97207ca666aa69c9d6df93",
[]string{"line", "line", "changed line", "line", "line", ""},
},
},
},
{
CommitID: "544d8f7a3b15927cddf2299b4b562d6ebd71b6a7",
UsesIgnoreRevs: false,
Bypass: true,
Parts: full,
},
{
CommitID: "45fb6cbc12f970b04eacd5cd4165edd11c8d7376",
UsesIgnoreRevs: false,
Bypass: false,
Parts: full,
},
{
CommitID: "45fb6cbc12f970b04eacd5cd4165edd11c8d7376",
UsesIgnoreRevs: false,
Bypass: false,
Parts: full,
},
}
for _, c := range cases {
commit, err := repo.GetCommit(c.CommitID)
assert.NoError(t, err)
blameReader, err := CreateBlameReader(ctx, "./tests/repos/repo6_blame", commit, "blame.txt", c.Bypass)
assert.NoError(t, err)
assert.NotNil(t, blameReader)
defer blameReader.Close()
assert.Equal(t, c.UsesIgnoreRevs, blameReader.UsesIgnoreRevs())
for _, part := range c.Parts {
actualPart, err := blameReader.NextPart()
assert.NoError(t, err)
assert.Equal(t, part, actualPart)
}
// make sure all parts have been read
actualPart, err := blameReader.NextPart()
assert.Nil(t, actualPart)
assert.NoError(t, err)
}
})
}

View File

@ -0,0 +1 @@
ref: refs/heads/master

View File

@ -0,0 +1,4 @@
[core]
repositoryformatversion = 0
filemode = true
bare = true

View File

@ -0,0 +1 @@
544d8f7a3b15927cddf2299b4b562d6ebd71b6a7

View File

@ -97,7 +97,7 @@ func ToDBOptions(ctx context.Context, options *internal.SearchOptions) (*issue_m
if len(options.IncludedLabelIDs) == 0 && len(options.IncludedAnyLabelIDs) > 0 {
_ = ctx // issue_model.GetLabelsByIDs should be called with ctx, this line can be removed when it's done.
labels, err := issue_model.GetLabelsByIDs(options.IncludedAnyLabelIDs, "name")
labels, err := issue_model.GetLabelsByIDs(ctx, options.IncludedAnyLabelIDs, "name")
if err != nil {
return nil, fmt.Errorf("GetLabelsByIDs: %v", err)
}

View File

@ -5,14 +5,12 @@ package issues
import (
"context"
"fmt"
"path"
"path/filepath"
"testing"
"time"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
"code.gitea.io/gitea/modules/indexer/issues/bleve"
"code.gitea.io/gitea/modules/indexer/issues/internal"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
@ -29,122 +27,71 @@ func TestMain(m *testing.M) {
})
}
func TestBleveSearchIssues(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
setting.CfgProvider, _ = setting.NewConfigProviderFromData("")
tmpIndexerDir := t.TempDir()
setting.CfgProvider.Section("queue.issue_indexer").Key("DATADIR").MustString(path.Join(tmpIndexerDir, "issues.queue"))
oldIssuePath := setting.Indexer.IssuePath
setting.Indexer.IssuePath = path.Join(tmpIndexerDir, "issues.queue")
defer func() {
setting.Indexer.IssuePath = oldIssuePath
}()
setting.Indexer.IssueType = "bleve"
setting.LoadQueueSettings()
InitIssueIndexer(true)
defer func() {
if bleveIndexer, ok := (*globalIndexer.Load()).(*bleve.Indexer); ok {
bleveIndexer.Close()
}
}()
time.Sleep(5 * time.Second)
t.Run("issue2", func(t *testing.T) {
ids, _, err := SearchIssues(context.TODO(), &SearchOptions{
Keyword: "issue2",
RepoIDs: []int64{1},
})
assert.NoError(t, err)
assert.EqualValues(t, []int64{2}, ids)
})
t.Run("first", func(t *testing.T) {
ids, _, err := SearchIssues(context.TODO(), &SearchOptions{
Keyword: "first",
RepoIDs: []int64{1},
})
assert.NoError(t, err)
assert.EqualValues(t, []int64{1}, ids)
})
t.Run("for", func(t *testing.T) {
ids, _, err := SearchIssues(context.TODO(), &SearchOptions{
Keyword: "for",
RepoIDs: []int64{1},
})
assert.NoError(t, err)
assert.ElementsMatch(t, []int64{1, 2, 3, 5, 11}, ids)
})
t.Run("good", func(t *testing.T) {
ids, _, err := SearchIssues(context.TODO(), &SearchOptions{
Keyword: "good",
RepoIDs: []int64{1},
})
assert.NoError(t, err)
assert.EqualValues(t, []int64{1}, ids)
})
}
func TestDBSearchIssuesWithKeyword(t *testing.T) {
func TestDBSearchIssues(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
setting.Indexer.IssueType = "db"
InitIssueIndexer(true)
t.Run("issue2", func(t *testing.T) {
ids, _, err := SearchIssues(context.TODO(), &SearchOptions{
Keyword: "issue2",
RepoIDs: []int64{1},
})
assert.NoError(t, err)
assert.EqualValues(t, []int64{2}, ids)
})
t.Run("first", func(t *testing.T) {
ids, _, err := SearchIssues(context.TODO(), &SearchOptions{
Keyword: "first",
RepoIDs: []int64{1},
})
assert.NoError(t, err)
assert.EqualValues(t, []int64{1}, ids)
})
t.Run("for", func(t *testing.T) {
ids, _, err := SearchIssues(context.TODO(), &SearchOptions{
Keyword: "for",
RepoIDs: []int64{1},
})
assert.NoError(t, err)
assert.ElementsMatch(t, []int64{1, 2, 3, 5, 11}, ids)
})
t.Run("good", func(t *testing.T) {
ids, _, err := SearchIssues(context.TODO(), &SearchOptions{
Keyword: "good",
RepoIDs: []int64{1},
})
assert.NoError(t, err)
assert.EqualValues(t, []int64{1}, ids)
})
t.Run("search issues with keyword", searchIssueWithKeyword)
t.Run("search issues in repo", searchIssueInRepo)
t.Run("search issues by ID", searchIssueByID)
t.Run("search issues is pr", searchIssueIsPull)
t.Run("search issues is closed", searchIssueIsClosed)
t.Run("search issues by milestone", searchIssueByMilestoneID)
t.Run("search issues by label", searchIssueByLabelID)
t.Run("search issues by time", searchIssueByTime)
t.Run("search issues with order", searchIssueWithOrder)
t.Run("search issues in project", searchIssueInProject)
t.Run("search issues with paginator", searchIssueWithPaginator)
}
// TODO: add more tests
func TestDBSearchIssueWithoutKeyword(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
setting.Indexer.IssueType = "db"
InitIssueIndexer(true)
int64Pointer := func(x int64) *int64 {
return &x
func searchIssueWithKeyword(t *testing.T) {
tests := []struct {
opts SearchOptions
expectedIDs []int64
}{
{
SearchOptions{
Keyword: "issue2",
RepoIDs: []int64{1},
},
[]int64{2},
},
{
SearchOptions{
Keyword: "first",
RepoIDs: []int64{1},
},
[]int64{1},
},
{
SearchOptions{
Keyword: "for",
RepoIDs: []int64{1},
},
[]int64{11, 5, 3, 2, 1},
},
{
SearchOptions{
Keyword: "good",
RepoIDs: []int64{1},
},
[]int64{1},
},
}
for _, test := range []struct {
for _, test := range tests {
issueIDs, _, err := SearchIssues(context.TODO(), &test.opts)
if !assert.NoError(t, err) {
return
}
assert.Equal(t, test.expectedIDs, issueIDs)
}
}
func searchIssueInRepo(t *testing.T) {
tests := []struct {
opts SearchOptions
expectedIDs []int64
}{
@ -156,59 +103,305 @@ func TestDBSearchIssueWithoutKeyword(t *testing.T) {
},
{
SearchOptions{
RepoIDs: []int64{1},
AssigneeID: int64Pointer(1),
RepoIDs: []int64{2},
},
[]int64{1},
[]int64{7, 4},
},
{
SearchOptions{
RepoIDs: []int64{1},
PosterID: int64Pointer(1),
RepoIDs: []int64{3},
},
[]int64{11, 3, 2, 1},
[]int64{12, 6},
},
{
SearchOptions{
RepoIDs: []int64{1},
IsClosed: util.OptionalBoolFalse,
RepoIDs: []int64{4},
},
[]int64{11, 3, 2, 1},
[]int64{},
},
{
SearchOptions{
RepoIDs: []int64{1},
IsClosed: util.OptionalBoolTrue,
RepoIDs: []int64{5},
},
[]int64{5},
[]int64{15},
},
{
SearchOptions{
RepoIDs: []int64{1},
},
[]int64{11, 5, 3, 2, 1},
},
{
SearchOptions{
RepoIDs: []int64{1},
AssigneeID: int64Pointer(1),
},
[]int64{1},
},
{
SearchOptions{
RepoIDs: []int64{1},
PosterID: int64Pointer(1),
},
[]int64{11, 3, 2, 1},
},
} {
t.Run(fmt.Sprintf("%#v", test.opts), func(t *testing.T) {
issueIDs, _, err := SearchIssues(context.TODO(), &test.opts)
if !assert.NoError(t, err) {
return
}
assert.Equal(t, test.expectedIDs, issueIDs)
})
}
for _, test := range tests {
issueIDs, _, err := SearchIssues(context.TODO(), &test.opts)
if !assert.NoError(t, err) {
return
}
assert.Equal(t, test.expectedIDs, issueIDs)
}
}
func searchIssueByID(t *testing.T) {
int64Pointer := func(x int64) *int64 {
return &x
}
tests := []struct {
opts SearchOptions
expectedIDs []int64
}{
{
SearchOptions{
PosterID: int64Pointer(1),
},
[]int64{11, 6, 3, 2, 1},
},
{
SearchOptions{
AssigneeID: int64Pointer(1),
},
[]int64{6, 1},
},
{
SearchOptions{
MentionID: int64Pointer(4),
},
[]int64{1},
},
{
SearchOptions{
ReviewedID: int64Pointer(1),
},
[]int64{},
},
{
SearchOptions{
ReviewRequestedID: int64Pointer(1),
},
[]int64{12},
},
{
SearchOptions{
SubscriberID: int64Pointer(1),
},
[]int64{11, 6, 5, 3, 2, 1},
},
}
for _, test := range tests {
issueIDs, _, err := SearchIssues(context.TODO(), &test.opts)
if !assert.NoError(t, err) {
return
}
assert.Equal(t, test.expectedIDs, issueIDs)
}
}
func searchIssueIsPull(t *testing.T) {
tests := []struct {
opts SearchOptions
expectedIDs []int64
}{
{
SearchOptions{
IsPull: util.OptionalBoolFalse,
},
[]int64{17, 16, 15, 14, 13, 6, 5, 18, 10, 7, 4, 1},
},
{
SearchOptions{
IsPull: util.OptionalBoolTrue,
},
[]int64{12, 11, 19, 9, 8, 3, 2},
},
}
for _, test := range tests {
issueIDs, _, err := SearchIssues(context.TODO(), &test.opts)
if !assert.NoError(t, err) {
return
}
assert.Equal(t, test.expectedIDs, issueIDs)
}
}
func searchIssueIsClosed(t *testing.T) {
tests := []struct {
opts SearchOptions
expectedIDs []int64
}{
{
SearchOptions{
IsClosed: util.OptionalBoolFalse,
},
[]int64{17, 16, 15, 14, 13, 12, 11, 6, 19, 18, 10, 7, 9, 8, 3, 2, 1},
},
{
SearchOptions{
IsClosed: util.OptionalBoolTrue,
},
[]int64{5, 4},
},
}
for _, test := range tests {
issueIDs, _, err := SearchIssues(context.TODO(), &test.opts)
if !assert.NoError(t, err) {
return
}
assert.Equal(t, test.expectedIDs, issueIDs)
}
}
func searchIssueByMilestoneID(t *testing.T) {
tests := []struct {
opts SearchOptions
expectedIDs []int64
}{
{
SearchOptions{
MilestoneIDs: []int64{1},
},
[]int64{2},
},
{
SearchOptions{
MilestoneIDs: []int64{3},
},
[]int64{3},
},
}
for _, test := range tests {
issueIDs, _, err := SearchIssues(context.TODO(), &test.opts)
if !assert.NoError(t, err) {
return
}
assert.Equal(t, test.expectedIDs, issueIDs)
}
}
func searchIssueByLabelID(t *testing.T) {
tests := []struct {
opts SearchOptions
expectedIDs []int64
}{
{
SearchOptions{
IncludedLabelIDs: []int64{1},
},
[]int64{2, 1},
},
{
SearchOptions{
IncludedLabelIDs: []int64{4},
},
[]int64{2},
},
{
SearchOptions{
ExcludedLabelIDs: []int64{1},
},
[]int64{17, 16, 15, 14, 13, 12, 11, 6, 5, 19, 18, 10, 7, 4, 9, 8, 3},
},
}
for _, test := range tests {
issueIDs, _, err := SearchIssues(context.TODO(), &test.opts)
if !assert.NoError(t, err) {
return
}
assert.Equal(t, test.expectedIDs, issueIDs)
}
}
func searchIssueByTime(t *testing.T) {
int64Pointer := func(i int64) *int64 {
return &i
}
tests := []struct {
opts SearchOptions
expectedIDs []int64
}{
{
SearchOptions{
UpdatedAfterUnix: int64Pointer(0),
},
[]int64{17, 16, 15, 14, 13, 12, 11, 6, 5, 19, 18, 10, 7, 4, 9, 8, 3, 2, 1},
},
}
for _, test := range tests {
issueIDs, _, err := SearchIssues(context.TODO(), &test.opts)
if !assert.NoError(t, err) {
return
}
assert.Equal(t, test.expectedIDs, issueIDs)
}
}
func searchIssueWithOrder(t *testing.T) {
tests := []struct {
opts SearchOptions
expectedIDs []int64
}{
{
SearchOptions{
SortBy: internal.SortByCreatedAsc,
},
[]int64{1, 2, 3, 8, 9, 4, 7, 10, 18, 19, 5, 6, 11, 12, 13, 14, 15, 16, 17},
},
}
for _, test := range tests {
issueIDs, _, err := SearchIssues(context.TODO(), &test.opts)
if !assert.NoError(t, err) {
return
}
assert.Equal(t, test.expectedIDs, issueIDs)
}
}
func searchIssueInProject(t *testing.T) {
int64Pointer := func(i int64) *int64 {
return &i
}
tests := []struct {
opts SearchOptions
expectedIDs []int64
}{
{
SearchOptions{
ProjectID: int64Pointer(1),
},
[]int64{5, 3, 2, 1},
},
{
SearchOptions{
ProjectBoardID: int64Pointer(1),
},
[]int64{1},
},
}
for _, test := range tests {
issueIDs, _, err := SearchIssues(context.TODO(), &test.opts)
if !assert.NoError(t, err) {
return
}
assert.Equal(t, test.expectedIDs, issueIDs)
}
}
func searchIssueWithPaginator(t *testing.T) {
tests := []struct {
opts SearchOptions
expectedIDs []int64
expectedTotal int64
}{
{
SearchOptions{
Paginator: &db.ListOptions{
PageSize: 5,
},
},
[]int64{17, 16, 15, 14, 13},
19,
},
}
for _, test := range tests {
issueIDs, total, err := SearchIssues(context.TODO(), &test.opts)
if !assert.NoError(t, err) {
return
}
assert.Equal(t, test.expectedIDs, issueIDs)
assert.Equal(t, test.expectedTotal, total)
}
}

View File

@ -181,6 +181,10 @@ func MigrateRepositoryGitData(ctx context.Context, u *user_model.User,
defer committer.Close()
if opts.Mirror {
remoteAddress, err := util.SanitizeURL(opts.CloneAddr)
if err != nil {
return repo, err
}
mirrorModel := repo_model.Mirror{
RepoID: repo.ID,
Interval: setting.Mirror.DefaultInterval,
@ -194,6 +198,7 @@ func MigrateRepositoryGitData(ctx context.Context, u *user_model.User,
EnablePrune: true,
NextUpdateUnix: timeutil.TimeStampNow().AddDuration(setting.Mirror.DefaultInterval),
LFS: opts.LFS,
RemoteAddress: remoteAddress,
}
if opts.LFS {
mirrorModel.LFSEndpoint = opts.LFSEndpoint

View File

@ -8,6 +8,7 @@ import (
"sync"
"code.gitea.io/gitea/models/auth"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/modules/timeutil"
"gitea.com/go-chi/session"
@ -71,7 +72,7 @@ func (s *DBStore) Release() error {
return err
}
return auth.UpdateSession(s.sid, data)
return auth.UpdateSession(db.DefaultContext, s.sid, data)
}
// Flush deletes all session data.
@ -97,7 +98,7 @@ func (p *DBProvider) Init(maxLifetime int64, connStr string) error {
// Read returns raw session store by session ID.
func (p *DBProvider) Read(sid string) (session.RawStore, error) {
s, err := auth.ReadSession(sid)
s, err := auth.ReadSession(db.DefaultContext, sid)
if err != nil {
return nil, err
}
@ -117,7 +118,7 @@ func (p *DBProvider) Read(sid string) (session.RawStore, error) {
// Exist returns true if session with given ID exists.
func (p *DBProvider) Exist(sid string) bool {
has, err := auth.ExistSession(sid)
has, err := auth.ExistSession(db.DefaultContext, sid)
if err != nil {
panic("session/DB: error checking existence: " + err.Error())
}
@ -126,12 +127,12 @@ func (p *DBProvider) Exist(sid string) bool {
// Destroy deletes a session by session ID.
func (p *DBProvider) Destroy(sid string) error {
return auth.DestroySession(sid)
return auth.DestroySession(db.DefaultContext, sid)
}
// Regenerate regenerates a session store from old session ID to new one.
func (p *DBProvider) Regenerate(oldsid, sid string) (_ session.RawStore, err error) {
s, err := auth.RegenerateSession(oldsid, sid)
s, err := auth.RegenerateSession(db.DefaultContext, oldsid, sid)
if err != nil {
return nil, err
}
@ -151,7 +152,7 @@ func (p *DBProvider) Regenerate(oldsid, sid string) (_ session.RawStore, err err
// Count counts and returns number of sessions.
func (p *DBProvider) Count() int {
total, err := auth.CountSessions()
total, err := auth.CountSessions(db.DefaultContext)
if err != nil {
panic("session/DB: error counting records: " + err.Error())
}
@ -160,7 +161,7 @@ func (p *DBProvider) Count() int {
// GC calls GC to clean expired sessions.
func (p *DBProvider) GC() {
if err := auth.CleanupSessions(p.maxLifetime); err != nil {
if err := auth.CleanupSessions(db.DefaultContext, p.maxLifetime); err != nil {
log.Printf("session/DB: error garbage collecting: %v", err)
}
}

View File

@ -39,3 +39,12 @@ func URLJoin(base string, elems ...string) string {
}
return joinedURL
}
func SanitizeURL(s string) (string, error) {
u, err := url.Parse(s)
if err != nil {
return "", err
}
u.User = nil
return u.String(), nil
}

View File

@ -0,0 +1,29 @@
Copyright (c) 2001-2013 Oracle and/or its affiliates. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistribution in binary form must reproduct the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
Neither the name of Sun Microsystems, Inc. or the names of
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
This software is provided "AS IS," without a warranty of any kind. ALL
EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND
ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR LIABILITIES
SUFFERED BY LICENSEE AS A RESULT OF OR RELATING TO USE, MODIFICATION
OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

View File

@ -0,0 +1,39 @@
Copyright (C) 1995, 1996 Systemics Ltd (http://www.systemics.com/)
All rights reserved.
This library and applications are FREE FOR COMMERCIAL AND NON-COMMERCIAL USE
as long as the following conditions are adhered to.
Copyright remains with Systemics Ltd, and as such any Copyright notices
in the code are not to be removed. If this code is used in a product,
Systemics should be given attribution as the author of the parts used.
This can be in the form of a textual message at program startup or
in documentation (online or textual) provided with the package.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. All advertising materials mentioning features or use of this software
must display the following acknowledgement:
This product includes software developed by Systemics Ltd (http://www.systemics.com/)
THIS SOFTWARE IS PROVIDED BY SYSTEMICS LTD ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
The licence and distribution terms for any publically available version or
derivative of this code cannot be changed. i.e. this code cannot simply be
copied and put under another distribution licence [including the GNU Public Licence.]

View File

@ -1,5 +1,5 @@
Copyright (C) 1995-2009 Gerd Neugebauer
cwpuzzle.dtx is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY. No author or distributor accepts responsibility to anyone for the consequences of using it or for whether it serves any particular purpose or works at all, unless he says so in writing.
.
Everyone is granted permission to copy, modify and redistribute cwpuzzle.dtx, provided this copyright notice is preserved and any modifications are indicated.

View File

@ -0,0 +1,25 @@
DL-DE->Zero-2.0
Datenlizenz Deutschland Zero Version 2.0
Jede Nutzung ist ohne Einschränkungen oder Bedingungen zulässig.
Die bereitgestellten Daten und Metadaten dürfen für die kommerzielle und nicht kommerzielle Nutzung insbesondere
vervielfältigt, ausgedruckt, präsentiert, verändert, bearbeitet sowie an Dritte übermittelt werden;
mit eigenen Daten und Daten Anderer zusammengeführt und zu selbständigen neuen Datensätzen verbunden werden;
in interne und externe Geschäftsprozesse, Produkte und Anwendungen in öffentlichen und nicht öffentlichen elektronischen Netzwerken eingebunden werden.
Data licence Germany Zero version 2.0
Any use is permitted without restrictions or conditions.
The data and meta-data provided may, for commercial and non-commercial use, in particular
be copied, printed, presented, altered, processed and transmitted to third parties;
be merged with own data and with the data of others and be combined to form new and independent datasets;
be integrated in internal and external business processes, products and applications in public and non-public electronic networks.
URL: https://www.govdata.de/dl-de/zero-2-0

6
options/license/FBM Normal file
View File

@ -0,0 +1,6 @@
Portions of this code Copyright (C) 1989 by Michael Mauldin.
Permission is granted to use this file in whole or in
part for any purpose, educational, recreational or commercial,
provided that this copyright notice is retained unchanged.
This software is available to all free of charge by anonymous
FTP and in the UUNET archives.

View File

@ -0,0 +1,15 @@
The author hereby grants a perpetual license to everybody to
use this code for any purpose as long as the copyright message is included
in the source code of this or any derived work.
Yes, this means that you, your company, your club, and anyone else
can use this code anywhere you want. You can change it and distribute it
under the GPL, include it in your commercial product without releasing
the source code, put it on the web, etc.
The only thing you cannot do is remove my copyright message,
or distribute any source code based on this implementation that does not
include my copyright message.
I appreciate a mention in the documentation or credits,
but I understand if that is difficult to do.
I also appreciate it if you tell me where and why you used my code.

23
options/license/MPEG-SSG Normal file
View File

@ -0,0 +1,23 @@
Copyright (C) 1994, MPEG Software Simulation Group. All Rights Reserved. */
Disclaimer of Warranty
These software programs are available to the user without any license fee or
royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
any and all warranties, whether express, implied, or statuary, including any
implied warranties or merchantability or of fitness for a particular
purpose. In no event shall the copyright-holder be liable for any
incidental, punitive, or consequential damages of any kind whatsoever
arising from the use of these programs.
This disclaimer of warranty extends to the user of these programs and user's
customers, employees, agents, transferees, successors, and assigns.
The MPEG Software Simulation Group does not represent or warrant that the
programs furnished hereunder are free of infringement of any third-party
patents.
Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
are subject to royalty fees to patent holders. Many of these patents are
general enough such that they are unavoidable regardless of implementation
design.

View File

@ -8,20 +8,20 @@ NETSCAPE PUBLIC LICENSE Version 1.0
1.3. ``Covered Code'' means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof.
1.4. ``Electronic Distribution Mechanism'' means a mechanism generally accepted in the software development community for the electronic transfer of data.
1.5. ``Executable'' means Covered Code in any form other than Source Code.
1.6. ``Initial Developer'' means the individual or entity identified as the Initial Developer in the Source Code notice required byExhibit A.
1.6. ``Initial Developer'' means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A.
1.7. ``Larger Work'' means a work which combines Covered Code or portions thereof with code not governed by the terms of this License.
1.8. ``License'' means this document.
1.9. ``Modifications'' means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is:
A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications. B. Any new file that contains any part of the Original Code or previous Modifications.
1.10. ``Original Code'' means Source Code of computer software code which is described in the Source Code notice required byExhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License.
1.10. ``Original Code'' means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License.
1.11. ``Source Code'' means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or a list of source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge.
1.12. ``You'' means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, ``You'' includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, ``control'' means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of fifty percent (50%) or more of the outstanding shares or beneficial ownership of such entity.
2. Source Code License.
2.1. The Initial Developer Grant. The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims:
a) to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, or as part of a Larger Work; and
(a) to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, or as part of a Larger Work; and
(b) under patents now or hereafter owned or controlled by Initial Developer, to make, have made, use and sell (``Utilize'') the Original Code (or portions thereof), but solely to the extent that any such patent is reasonably necessary to enable You to Utilize the Original Code (or portions thereof) and not to any greater extent that may be necessary to Utilize further Modifications or combinations.
2.2. Contributor Grant. Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims:

23
options/license/pnmstitch Normal file
View File

@ -0,0 +1,23 @@
Copyright (c) 2002 Mark Salyzyn
All rights reserved.
TERMS AND CONDITIONS OF USE
Redistribution and use in source form, with or without modification, are
permitted provided that redistributions of source code must retain the
above copyright notice, this list of conditions and the following
disclaimer.
This software is provided `as is' by Mark Salyzyn and any express or implied
warranties, including, but not limited to, the implied warranties of
merchantability and fitness for a particular purpose, are disclaimed. In no
event shall Mark Salyzyn be liable for any direct, indirect, incidental,
special, exemplary or consequential damages (including, but not limited to,
procurement of substitute goods or services; loss of use, data, or profits;
or business interruptions) however caused and on any theory of liability,
whether in contract, strict liability, or tort (including negligence or
otherwise) arising in any way out of the use of this software, even if
advised of the possibility of such damage.
Any restrictions or encumberances added to this source code or derivitives,
is prohibited.

View File

@ -175,7 +175,6 @@ network_error=Chyba sítě
[startpage]
app_desc=Snadno přístupný vlastní Git
install=Jednoduchá na instalaci
install_desc=Jednoduše <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">spusťte binárku</a> pro vaši platformu, nasaďte ji pomocí <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a>, nebo ji získejte z<a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">balíčku</a>.
platform=Multiplatformní
platform_desc=Gitea běží všude, kde <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a> může kompilovat: Windows, macOS, Linux, ARM, atd. Vyberte si ten, který milujete!
lightweight=Lehká
@ -308,6 +307,7 @@ filter_by_team_repositories=Filtrovat podle repozitářů týmu
feed_of=Kanál z „%s“
show_archived=Archivováno
archived=Archivováno
show_both_archived_unarchived=Zobrazeny jak archivované tak nearchivované
show_only_archived=Zobrazeny pouze archivované
show_only_unarchived=Zobrazeny pouze nearchivované
@ -574,7 +574,6 @@ overview=Přehled
following=Sledovaní
follow=Sledovat
unfollow=Přestat sledovat
heatmap.loading=Načítání teplotní mapy…
user_bio=Životopis
disabled_public_activity=Tento uživatel zakázal veřejnou viditelnost aktivity.
email_visibility.limited=Vaše e-mailová adresa je viditelná pro všechny ověřené uživatele
@ -644,7 +643,6 @@ choose_new_avatar=Vybrat nový avatar
update_avatar=Aktualizovat avatar
delete_current_avatar=Smazat aktuální avatar
uploaded_avatar_not_a_image=Nahraný soubor není obrázek.
uploaded_avatar_is_too_big=Nahraný soubor překročil maximální velikost.
update_avatar_success=Vaše avatar byl aktualizován.
update_user_avatar_success=Uživatelův avatar byl aktualizován.
@ -1192,6 +1190,11 @@ commit.cherry-pick=Cherry-pick
commit.cherry-pick-header=Cherry-pick: %s
commit.cherry-pick-content=Vyberte větev pro Cherry-pick na:
commitstatus.error=Chyba
commitstatus.failure=Chyba
commitstatus.pending=Čekající
commitstatus.success=Úspěch
ext_issues=Přístup k externím úkolům
ext_issues.desc=Odkaz na externí systém úkolů.
@ -1379,9 +1382,9 @@ issues.ref_reopening_from=`<a href="%[3]s">odkazoval/a na požadavek na natažen
issues.ref_closed_from=`<a href="%[3]s">uzavřel/a tento úkol %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">znovu otevřel/a tento úkol %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=`z %[1]s`
issues.poster=Autor
issues.collaborator=Spolupracovník
issues.owner=Vlastník
issues.author=Autor
issues.role.owner=Vlastník
issues.role.member=Člen
issues.re_request_review=Znovu požádat o posouzení
issues.is_stale=Od tohoto posouzení došlo ke změnám v tomto požadavku na natažení
issues.remove_request_review=Odstranit žádost o posouzení
@ -1685,8 +1688,6 @@ milestones.modify=Aktualizovat milník
milestones.deletion=Smazat milník
milestones.deletion_desc=Odstranění milníku jej smaže ze všech souvisejících úkolů. Pokračovat?
milestones.deletion_success=Milník byl odstraněn.
milestones.filter_sort.closest_due_date=Nejbližší datum dokončení
milestones.filter_sort.furthest_due_date=Nejvzdálenější datum dokončení
milestones.filter_sort.least_complete=Nejméně dokončené
milestones.filter_sort.most_complete=Nejvíce dokončené
milestones.filter_sort.most_issues=Nejvíce úkolů
@ -2127,7 +2128,6 @@ settings.tags.protection.allowed.teams=Povolené týmy
settings.tags.protection.allowed.noone=Nikdo
settings.tags.protection.create=Chránit značku
settings.tags.protection.none=Neexistují žádné chráněné značky.
settings.tags.protection.pattern.description=Můžete použít jediné jméno nebo vzor glob nebo regulární výraz, který bude odpovídat více značek. Přečtěte si více v <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/protected-tags/">průvodci chráněnými značkami</a>.
settings.bot_token=Token pro robota
settings.chat_id=ID chatu
settings.matrix.homeserver_url=URL adresa Homeserveru
@ -2605,12 +2605,10 @@ packages.size=Velikost
packages.published=Publikováno
defaulthooks=Výchozí webové háčky
defaulthooks.desc=Webové háčky automaticky vytvářejí HTTP POST dotazy na server při určitých Gitea událostech. Webové háčky definované zde jsou výchozí a budou zkopírovány do všech nových repozitářů. Přečtěte si více v <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">průvodci webovými háčky</a>.
defaulthooks.add_webhook=Přidat výchozí webový háček
defaulthooks.update_webhook=Aktualizovat výchozí webový háček
systemhooks=Systémové webové háčky
systemhooks.desc=Webové háčky automaticky vytvářejí HTTP POST dotazy na server při určitých Gitea událostech. Webové háčky definované zde budou vykonány na všech repozitářích systému, proto prosím zvažte jakékoli důsledky, které to může mít na výkon. Přečtěte si více v <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">průvodci webovými háčky</a>.
systemhooks.add_webhook=Přidat systémový webový háček
systemhooks.update_webhook=Aktualizovat systémový webový háček
@ -2713,7 +2711,6 @@ auths.tip.google_plus=Získejte klientské pověření OAuth2 z Google API konzo
auths.tip.openid_connect=Použijte OpenID URL pro objevování spojení (<server>/.well-known/openid-configuration) k nastavení koncových bodů
auths.tip.twitter=Jděte na https://dev.twitter.com/apps, vytvořte aplikaci a ujistěte se, že volba „Allow this application to be used to Sign in with Twitter“ je povolená
auths.tip.discord=Registrujte novou aplikaci na https://discordapp.com/developers/applications/me
auths.tip.gitea=Registrovat novou Oauth2 aplikaci. Návod naleznete na https://docs.gitea.io/en-us/oauth2-provider/
auths.tip.yandex=Vytvořte novou aplikaci na https://oauth.yandex.com/client/new. Vyberte následující oprávnění z „Yandex.Passport API“ sekce: „Přístup k e-mailové adrese“, „Přístup k uživatelskému avataru“ a „Přístup k uživatelskému jménu, jménu a příjmení, pohlaví“
auths.tip.mastodon=Vložte vlastní URL instance pro mastodon, kterou se chcete autentizovat (nebo použijte výchozí)
auths.edit=Upravit zdroj ověřování
@ -2885,8 +2882,6 @@ monitor.queue.exemplar=Typ vzoru
monitor.queue.numberworkers=Počet workerů
monitor.queue.maxnumberworkers=Maximální počet workerů
monitor.queue.numberinqueue=Číslo ve frontě
monitor.queue.review=Konfigurace posouzení
monitor.queue.review_add=Posoudit/přidat workery
monitor.queue.settings.title=Nastavení fondu
monitor.queue.settings.maxnumberworkers=Maximální počet workerů
monitor.queue.settings.maxnumberworkers.placeholder=V současné době %[1]d

View File

@ -181,7 +181,6 @@ network_error=Netzwerkfehler
[startpage]
app_desc=Ein einfacher, selbst gehosteter Git-Service
install=Einfach zu installieren
install_desc=Starte einfach <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">die Anwendung</a> für deine Plattform. Oder nutze <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a>. Es existieren auch <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">paketierte Versionen</a>.
platform=Plattformübergreifend
platform_desc=Gitea läuft überall, wo <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a> kompiliert: Windows, macOS, Linux, ARM, etc. Wähle das System, das dir am meisten gefällt!
lightweight=Leichtgewicht
@ -317,6 +316,7 @@ filter_by_team_repositories=Nach Team-Repositories filtern
feed_of=`Feed von "%s"`
show_archived=Archiviert
archived=Archiviert
show_both_archived_unarchived=Archivierte und nicht archivierte anzeigen
show_only_archived=Nur archivierte anzeigen
show_only_unarchived=Nur nicht archivierte anzeigen
@ -592,7 +592,6 @@ overview=Übersicht
following=Folge ich
follow=Folgen
unfollow=Nicht mehr folgen
heatmap.loading=Heatmap wird geladen…
user_bio=Biografie
disabled_public_activity=Dieser Benutzer hat die öffentliche Sichtbarkeit der Aktivität deaktiviert.
email_visibility.limited=Ihre E-Mail-Adresse ist für alle authentifizierten Benutzer sichtbar
@ -666,7 +665,6 @@ choose_new_avatar=Neues Profilbild auswählen
update_avatar=Profilbild aktualisieren
delete_current_avatar=Aktuelles Profilbild löschen
uploaded_avatar_not_a_image=Die hochgeladene Datei ist kein Bild.
uploaded_avatar_is_too_big=Die hochgeladene Datei hat die maximale Größe überschritten.
update_avatar_success=Dein Profilbild wurde geändert.
update_user_avatar_success=Der Avatar des Benutzers wurde aktualisiert.
@ -1229,6 +1227,11 @@ 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:
commitstatus.error=Fehler
commitstatus.failure=Fehler
commitstatus.pending=Ausstehend
commitstatus.success=Erfolg
ext_issues=Zugriff auf Externe Issues
ext_issues.desc=Link zu externem Issuetracker.
@ -1423,9 +1426,9 @@ issues.ref_reopening_from=`<a href="%[3]s">hat auf einen Pull Request %[4]s verw
issues.ref_closed_from=`<a href="%[3]s">hat dieses Issue %[4]s geschlossen</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">hat dieses Issue %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a> wieder geöffnet`
issues.ref_from=`von %[1]s`
issues.poster=Ersteller
issues.collaborator=Mitarbeiter
issues.owner=Besitzer
issues.author=Autor
issues.role.owner=Besitzer
issues.role.member=Mitglied
issues.re_request_review=Review erneut anfordern
issues.is_stale=Seit diesem Review gab es Änderungen an diesem PR
issues.remove_request_review=Review-Anfrage entfernen
@ -1743,8 +1746,6 @@ milestones.edit_success=Meilenstein "%s" wurde aktualisiert.
milestones.deletion=Meilenstein löschen
milestones.deletion_desc=Das Löschen des Meilensteins entfernt ihn von allen Issues. Fortfahren?
milestones.deletion_success=Der Meilenstein wurde gelöscht.
milestones.filter_sort.closest_due_date=Nächster Stichtag
milestones.filter_sort.furthest_due_date=Fernster Stichtag
milestones.filter_sort.least_complete=Am wenigsten vollständig
milestones.filter_sort.most_complete=Vollständigste
milestones.filter_sort.most_issues=Meiste Issues
@ -2225,7 +2226,6 @@ settings.tags.protection.allowed.teams=Erlaubte Teams
settings.tags.protection.allowed.noone=Niemand
settings.tags.protection.create=Tag schützen
settings.tags.protection.none=Es gibt keine geschützten Tags.
settings.tags.protection.pattern.description=Du kannst einen einzigen Namen oder ein globales Schema oder einen regulären Ausdruck verwenden, um mehrere Tags zu schützen. Mehr dazu im <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/protected-tags/">geschützte Tags Guide (Englisch)</a>.
settings.bot_token=Bot-Token
settings.chat_id=Chat-ID
settings.matrix.homeserver_url=Homeserver-URL
@ -2740,12 +2740,10 @@ 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).
defaulthooks.add_webhook=Standard-Webhook hinzufügen
defaulthooks.update_webhook=Standard-Webhook aktualisieren
systemhooks=System-Webhooks
systemhooks.desc=Webhooks senden automatisch HTTP-POST-Anfragen an einen Server, wenn bestimmte Gitea-Events ausgelöst werden. Hier definierte Webhooks werden auf alle Repositories des Systems übertragen, beachte daher mögliche Performance-Einbrüche. Mehr Infos findest du in der <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">Webhooks-Anleitung</a> (auf Englisch).
systemhooks.add_webhook=System-Webhook hinzufügen
systemhooks.update_webhook=System-Webhook aktualisieren
@ -2849,7 +2847,6 @@ auths.tip.google_plus=Du erhältst die OAuth2-Client-Zugangsdaten in der Google-
auths.tip.openid_connect=Benutze die OpenID-Connect-Discovery-URL (<server>/.well-known/openid-configuration), um die Endpunkte zu spezifizieren
auths.tip.twitter=Gehe auf https://dev.twitter.com/apps, erstelle eine Anwendung und stelle sicher, dass die Option „Allow this application to be used to Sign in with Twitter“ aktiviert ist
auths.tip.discord=Erstelle unter https://discordapp.com/developers/applications/me eine neue Anwendung.
auths.tip.gitea=Registriere eine neue OAuth2-Anwendung. Eine Anleitung findest du unter https://docs.gitea.io/en-us/oauth2-provider/
auths.tip.yandex=`Erstelle eine neue Anwendung auf https://oauth.yandex.com/client/new. Wähle folgende Berechtigungen aus dem "Yandex.Passport API" Bereich: "Zugriff auf E-Mail-Adresse", "Zugriff auf Benutzeravatar" und "Zugriff auf Benutzername, Vor- und Nachname, Geschlecht"`
auths.tip.mastodon=Gebe eine benutzerdefinierte URL für die Mastodon-Instanz ein, mit der du dich authentifizieren möchtest (oder benutze die standardmäßige)
auths.edit=Authentifikationsquelle bearbeiten
@ -3032,8 +3029,6 @@ 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.settings.title=Pool-Einstellungen
monitor.queue.settings.desc=Pools wachsen dynamisch basierend auf der Blockierung der Arbeitswarteschlange.
monitor.queue.settings.maxnumberworkers=Maximale Anzahl an Workern

View File

@ -175,7 +175,6 @@ network_error=Σφάλμα δικτύου
[startpage]
app_desc=Μια ανώδυνη, αυτο-φιλοξενούμενη υπηρεσία Git
install=Εύκολο στην εγκατάσταση
install_desc=Απλά <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">εκτελέστε το δυαδικό</a> για την πλατφόρμα σας, στείλτε το με <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a>, ή πάρτε το <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">πακέτο</a>.
platform=Πολυπλατφορμικό
platform_desc=Ο Gitea τρέχει οπουδήποτε <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a> μπορεί να γίνει compile για: Windows, macOS, Linux, ARM, κλπ. Επιλέξτε αυτό που αγαπάτε!
lightweight=Ελαφρύ
@ -308,6 +307,7 @@ filter_by_team_repositories=Φιλτράρισμα ανά αποθετήρια
feed_of=`Τροφοδοσία του "%s"`
show_archived=Αρχειοθετήθηκε
archived=Αρχειοθετήθηκε
show_both_archived_unarchived=Εμφάνιση και αρχειοθετημένων και μη αρχειοθετημένων
show_only_archived=Εμφάνιση μόνο αρχειοθετημένων
show_only_unarchived=Εμφάνιση μόνο μη αρχειοθετημένων
@ -582,7 +582,6 @@ overview=Επισκόπηση
following=Ακολουθεί
follow=Ακολουθήστε
unfollow=Να μην ακολουθώ
heatmap.loading=Φόρτωση heatmap…
user_bio=Βιογραφικό
disabled_public_activity=Αυτός ο χρήστης έχει απενεργοποιήσει τη δημόσια προβολή της δραστηριότητας.
email_visibility.limited=Η διεύθυνση email σας είναι ορατή σε όλους τους ταυτοποιημένους χρήστες
@ -655,7 +654,6 @@ choose_new_avatar=Επιλέξτε νέα εικόνα
update_avatar=Ενημέρωση Εικόνας
delete_current_avatar=Διαγραφή Τρέχουσας Εικόνας
uploaded_avatar_not_a_image=Το αρχείο που ανεβάσατε δεν είναι εικόνα.
uploaded_avatar_is_too_big=Το αρχείο έχει υπερβεί το μέγιστο μέγεθος.
update_avatar_success=Η εικόνα σας έχει ενημερωθεί.
update_user_avatar_success=Το avatar του χρήστη ενημερώθηκε.
@ -1217,6 +1215,11 @@ commit.cherry-pick=Cherry-pick
commit.cherry-pick-header=Ανθολόγηση: %s
commit.cherry-pick-content=Επιλέξτε κλάδο για να κάνετε ανθολόγηση σε αυτό:
commitstatus.error=Σφάλμα
commitstatus.failure=Αποτυχία
commitstatus.pending=Εκκρεμεί
commitstatus.success=Επιτυχές
ext_issues=Πρόσβαση στα Εξωτερικά Ζητήματα
ext_issues.desc=Σύνδεση σε εξωτερικό εφαρμογή ζητημάτων.
@ -1408,9 +1411,9 @@ issues.ref_reopening_from=`<a href="%[3]s">αναφέρθηκε σε ένα pull
issues.ref_closed_from=`<a href="%[3]s">έκλεισε αυτό το ζήτημα %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">άνοιξε ξανά αυτό το ζήτημα %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=`από %[1]s`
issues.poster=Συντάκτης
issues.collaborator=Συνεργάτης
issues.owner=Ιδιοκτήτης
issues.author=Συγγραφέας
issues.role.owner=Ιδιοκτήτης
issues.role.member=Μέλος
issues.re_request_review=Επαναίτηση ανασκόπησης
issues.is_stale=Έχουν υπάρξει αλλαγές σε αυτό το PR από αυτή την αναθεώρηση
issues.remove_request_review=Αφαίρεση αιτήματος αναθεώρησης
@ -1725,8 +1728,6 @@ milestones.edit_success=Το ορόσημο "%s" ενημερώθηκε.
milestones.deletion=Διαγραφή Ορόσημου
milestones.deletion_desc=Η διαγραφή ενός ορόσημου το αφαιρεί από όλα τα συναφή ζητήματα. Συνέχεια;
milestones.deletion_success=Το ορόσημο έχει διαγραφεί.
milestones.filter_sort.closest_due_date=Πλησιέστερη παράδοση
milestones.filter_sort.furthest_due_date=Απώτερη παράδοση
milestones.filter_sort.least_complete=Λιγότερο πλήρη
milestones.filter_sort.most_complete=Περισσότερο πλήρη
milestones.filter_sort.most_issues=Περισσότερα ζητήματα
@ -2207,7 +2208,6 @@ settings.tags.protection.allowed.teams=Επιτρεπόμενες ομάδες
settings.tags.protection.allowed.noone=Καμία
settings.tags.protection.create=Προστασία Ετικέτας
settings.tags.protection.none=Δεν υπάρχουν προστατευμένες ετικέτες.
settings.tags.protection.pattern.description=Μπορείτε να χρησιμοποιήσετε ένα μόνο όνομα ή ένα μοτίβο glob ή μια κανονική έκφραση για να ταιριάξετε πολλαπλές ετικέτες. Διαβάστε περισσότερα στον <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/protected-tags/">οδηγό προστατευμένων ετικετών</a>.
settings.bot_token=Διακριτικό Bot
settings.chat_id=ID Συνομιλίας
settings.matrix.homeserver_url=Homeserver URL
@ -2722,12 +2722,10 @@ packages.size=Μέγεθος
packages.published=Δημοσιευμένα
defaulthooks=Προεπιλεγμένα Webhooks
defaulthooks.desc=Τα Webhooks κάνουν αυτόματα αιτήσεις HTTP POST σε ένα διακομιστή όταν συμβαίνουν ορισμένα γεγονότα στο Gitea. Τα Webhooks που ορίζονται εδώ είναι προεπιλογή και θα αντιγραφούν σε όλα τα νέα αποθετήρια. Διαβάστε περισσότερα στον <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">οδηγό webhooks</a>.
defaulthooks.add_webhook=Προσθήκη Προεπιλεγμένου Webhook
defaulthooks.update_webhook=Ενημέρωση Προεπιλεγμένου Webhook
systemhooks=Webhooks Συστήματος
systemhooks.desc=Τα Webhooks κάνουν αυτόματα αιτήσεις HTTP POST σε ένα διακομιστή όταν συμβαίνουν ορισμένα γεγονότα στο Gitea. Τα Webhooks που ορίζονται εδώ θα ενεργούν σε όλα τα αποθετήρια του συστήματος, γι 'αυτό παρακαλώ εξετάστε τυχόν επιπτώσεις απόδοσης που μπορεί να υπάρξουν. Διαβάστε περισσότερα στον <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">οδηγό webhooks</a>.
systemhooks.add_webhook=Προσθήκη Webhook Συστήματος
systemhooks.update_webhook=Ενημέρωση Webhook Συστήματος
@ -2831,7 +2829,6 @@ auths.tip.google_plus=Αποκτήστε τα διαπιστευτήρια πε
auths.tip.openid_connect=Χρησιμοποιήστε το OpenID Connect Discovery URL (<server>/.well known/openid-configuration) για να καθορίσετε τα τελικά σημεία
auths.tip.twitter=Πηγαίνετε στο https://dev.twitter.com/apps, δημιουργήστε μια εφαρμογή και βεβαιωθείτε ότι η επιλογή “Allow this application to be used to Sign in with Twitter” είναι ενεργοποιημένη
auths.tip.discord=Καταχωρήστε μια νέα εφαρμογή στο https://discordapp.com/developers/applications/me
auths.tip.gitea=Καταχωρήστε μια νέα εφαρμογή OAuth2. Ο οδηγός μπορεί να βρεθεί στο https://docs.gitea.io/en-us/oauth2-provider/
auths.tip.yandex=`Δημιουργήστε μια νέα εφαρμογή στο https://oauth.yandex.com/client/new. Επιλέξτε τα ακόλουθα δικαιώματα από την ενότητα "Yandex.Passport API": "Access to email address", "Access to user avatar" και "Access to username, first name and surname, gender"`
auths.tip.mastodon=Εισαγάγετε ένα προσαρμομένο URL για την υπηρεσία mastodon με την οποία θέλετε να πιστοποιήσετε (ή να χρησιμοποιήσετε την προεπιλεγμένη)
auths.edit=Επεξεργασία Πηγής Ταυτοποίησης
@ -3014,8 +3011,6 @@ monitor.queue.exemplar=Τύπος Υποδείγματος
monitor.queue.numberworkers=Αριθμός Εργατών
monitor.queue.maxnumberworkers=Μέγιστος Αριθμός Εργατών
monitor.queue.numberinqueue=Πλήθος Ουράς
monitor.queue.review=Εξέταση Ρυθμίσεων
monitor.queue.review_add=Εξέταση/Προσθήκη Εργατών
monitor.queue.settings.title=Ρυθμίσεις Δεξαμενής
monitor.queue.settings.desc=Οι δεξαμενές αυξάνονται δυναμικά όταν υπάρχει φραγή της ουράς των εργατών τους.
monitor.queue.settings.maxnumberworkers=Μέγιστος Αριθμός Εργατών

View File

@ -123,6 +123,8 @@ unpin = Unpin
artifacts = Artifacts
archived = Archived
concept_system_global = Global
concept_user_individual = Individual
concept_code_repository = Repository
@ -317,7 +319,6 @@ filter_by_team_repositories = Filter by team repositories
feed_of = Feed of "%s"
show_archived = Archived
archived = Archived
show_both_archived_unarchived = Showing both archived and unarchived
show_only_archived = Showing only archived
show_only_unarchived = Showing only unarchived
@ -1007,6 +1008,8 @@ delete_preexisting = Delete pre-existing files
delete_preexisting_content = Delete files in %s
delete_preexisting_success = Deleted unadopted files in %s
blame_prior = View blame prior to this change
blame.ignore_revs = Ignoring revisions in <a href="%s">.git-blame-ignore-revs</a>. Click <a href="%s">here to bypass</a> and see the normal blame view.
blame.ignore_revs.failed = Failed to ignore revisions in <a href="%s">.git-blame-ignore-revs</a>.
author_search_tooltip = Shows a maximum of 30 users
transfer.accept = Accept Transfer
@ -2513,6 +2516,7 @@ branch.default_deletion_failed = Branch "%s" is the default branch. It cannot be
branch.restore = Restore Branch "%s"
branch.download = Download Branch "%s"
branch.rename = Rename Branch "%s"
branch.search = Search Branch
branch.included_desc = This branch is part of the default branch
branch.included = Included
branch.create_new_branch = Create branch from branch:

View File

@ -137,7 +137,6 @@ network_error=Error de red
[startpage]
app_desc=Un servicio de Git autoalojado y sin complicaciones
install=Fácil de instalar
install_desc=Simplemente <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">arranca el binario</a> para su plataforma. O utilice Gitea con <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a>, o utilice el <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">paquete</a>.
platform=Multiplataforma
platform_desc=Gitea funciona en cualquier platforma <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a> puede compilarlo en: Windows, macOS, Linux, ARM, etc. ¡Elige tu favorita!
lightweight=Ligero
@ -264,6 +263,7 @@ filter_by_team_repositories=Filtrar por repositorios de equipo
feed_of=`Suministro de noticias de "%s"`
show_archived=Archivado
archived=Archivado
show_both_archived_unarchived=Mostrar respositorios archivados y desarchivados
show_only_archived=Mostrar sólo repositorios archivados
show_only_unarchived=Mostrar sólo repositorios desarchivados
@ -518,7 +518,6 @@ overview=Resumen
following=Siguiendo
follow=Seguir
unfollow=Dejar de seguir
heatmap.loading=Cargando mapa de calor…
user_bio=Biografía
disabled_public_activity=Este usuario ha desactivado la visibilidad pública de la actividad.
@ -582,7 +581,6 @@ choose_new_avatar=Selecciona nuevo avatar
update_avatar=Actualizar Avatar
delete_current_avatar=Eliminar avatar
uploaded_avatar_not_a_image=El archivo subido no es una imagen.
uploaded_avatar_is_too_big=El archivo subido ha excedido el tamaño máximo.
update_avatar_success=Su avatar ha sido actualizado.
update_user_avatar_success=El avatar del usuario se ha actualizado.
@ -1090,6 +1088,9 @@ 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:
commitstatus.error=Error
commitstatus.pending=Pendiente
ext_issues=Acceso a incidencias externas
ext_issues.desc=Enlace a un gestor de incidencias externo.
@ -1253,9 +1254,9 @@ issues.ref_reopening_from=`<a href="%[3]s">referenció un pull request %[4]s que
issues.ref_closed_from=`<a href="%[3]s">cerró esta incidencia %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">reabrió esta incidencia %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=`de %[1]s`
issues.poster=Autor
issues.collaborator=Colaborador
issues.owner=Propietario
issues.author=Autoría
issues.role.owner=Propietario
issues.role.member=Miembro
issues.re_request_review=Solicitar revisión de nuevo
issues.is_stale=Ha habido cambios en este PR desde esta revisión
issues.remove_request_review=Eliminar solicitud de revisión
@ -1547,8 +1548,6 @@ milestones.modify=Actualizar hito
milestones.deletion=Eliminar hito
milestones.deletion_desc=Eliminando un hito lo elimina de todos los problemas relacionados. ¿Continuar?
milestones.deletion_success=El hito se ha eliminado.
milestones.filter_sort.closest_due_date=Más cerca de la fecha de vencimiento
milestones.filter_sort.furthest_due_date=Más lejos de la fecha de vencimiento
milestones.filter_sort.least_complete=Menos completa
milestones.filter_sort.most_complete=Más completa
milestones.filter_sort.most_issues=Mayoría de los problemas
@ -1980,7 +1979,6 @@ settings.tags.protection.allowed.teams=Equipos permitidos
settings.tags.protection.allowed.noone=Ningún
settings.tags.protection.create=Proteger Etiqueta
settings.tags.protection.none=No hay etiquetas protegidas.
settings.tags.protection.pattern.description=Puede usar un solo nombre o un patrón de glob o expresión regular para que coincida con varias etiquetas. Lea más en la guía de etiquetas <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/protected-tags/">protegida</a>.
settings.bot_token=Token del Bot
settings.chat_id=ID Chat
settings.matrix.homeserver_url=URL de Homeserver
@ -2449,12 +2447,10 @@ 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>.
defaulthooks.add_webhook=Añadir Webhook por defecto
defaulthooks.update_webhook=Actualizar Webhook por defecto
systemhooks=Webhooks del sistema
systemhooks.desc=Los webhooks automáticamente hacen peticiones HTTP POST a un servidor cuando ciertos eventos de Gitea se activan. Los webhooks definidos actuarán en todos los repositorios del sistema, así que por favor considere las implicaciones de rendimiento que esto pueda tener. Lea más en la guía de <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">webhooks</a>.
systemhooks.add_webhook=Añadir Webhook del Sistema
systemhooks.update_webhook=Actualizar Webhook del Sistema
@ -2556,7 +2552,6 @@ auths.tip.google_plus=Obtener credenciales de cliente OAuth2 desde la consola AP
auths.tip.openid_connect=Use el OpenID Connect Discovery URL (<server>/.well-known/openid-configuration) para especificar los puntos finales
auths.tip.twitter=Ir a https://dev.twitter.com/apps, crear una aplicación y asegurarse de que la opción "Permitir que esta aplicación sea usada para iniciar sesión con Twitter" está activada
auths.tip.discord=Registrar una nueva aplicación en https://discordapp.com/developers/applications/me
auths.tip.gitea=Registra una nueva aplicación OAuth2. La guía puede ser encontrada en https://docs.gitea.io/es-us/oauth2-provider/
auths.tip.yandex=`Crear una nueva aplicación en https://oauth.yandex.com/client/new. Seleccione los siguientes permisos del "Yandex.Passport API": "Access to email address", "Access to user avatar" y "Access to username, first name and surname, gender"`
auths.tip.mastodon=Introduzca una URL de instancia personalizada para la instancia mastodon con la que desea autenticarse (o utilice la predeterminada)
auths.edit=Editar origen de autenticación
@ -2727,8 +2722,6 @@ 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.settings.title=Ajustes del grupo
monitor.queue.settings.maxnumberworkers=Número máximo de trabajadores
monitor.queue.settings.maxnumberworkers.placeholder=Actualmente %[1]d

View File

@ -115,7 +115,6 @@ missing_csrf=درخواست بد: بلیط CSRF ندارد
[startpage]
app_desc=یک سرویس گیت بی‌درد سر و راحت
install=راه‌اندازی ساده
install_desc=به سادگی <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">فایل اجرایی را برای پلتفرم موردنظر خود اجرا کنید</a> یا آن را در قالب یک کانتینر <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a> آماده کنید و یا بصورت یک <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">بسته</a> دریافت کنید.
platform=مستقل از سکو
platform_desc=گیت همه جا اجرا می‌شود <a target="_blank" rel="noopener noreferrer" href="http://golang.org/"> بریم!</a> می‌توانید Windows, macOS, Linux, ARM و ... هر کدام را دوست داشتید انتخاب کنید!
lightweight=ابزارک سبک
@ -241,6 +240,7 @@ filter_by_team_repositories=فیلتر کردن با مخازن تیم‌ها
feed_of=`خوراک از "%s"`
show_archived=بایگانی شده
archived=بایگانی شده
show_both_archived_unarchived=نمایش دادن موارد بایگانی شده و غیر بایگانی نشده
show_only_archived=نمایش دادن موارد بایگانی شده
show_only_unarchived=نمایش دادن موارد بایگانی نشده
@ -478,7 +478,6 @@ overview=مرور
following=دنبال میکنید
follow=دنبال کردن
unfollow=عدم دنبال کردن
heatmap.loading=بارگذاری Heatmap…
user_bio=زندگی‌نامه
disabled_public_activity=این کاربر نمایش عمومی فعالیت های خود را غیرفعال کرده است.
@ -526,7 +525,6 @@ choose_new_avatar=انتخاب آواتار جدید
update_avatar=بروزرسانی آواتار
delete_current_avatar=حذف آواتار فعلی
uploaded_avatar_not_a_image=فایل بار‌گذاری شده تصویر نمی‌باشد.
uploaded_avatar_is_too_big=حجم فایل بارگزاری بیش از حد مجاز است.
update_avatar_success=آواتار شما تغییر کرد.
update_user_avatar_success=آواتار کاربر بروز رسانی شده است.
@ -991,6 +989,9 @@ commits.signed_by_untrusted_user_unmatched=امضا شده توسط یک کار
commits.gpg_key_id=شناسه کلید GPG
commitstatus.error=خطا
commitstatus.pending=در انتظار
ext_issues.desc=پیوند به ردیاب خارجی برای موضوع.
projects=پروژه‌ها
@ -1144,9 +1145,8 @@ issues.ref_reopening_from=`<a href="%[3]s"> تقاضای واکشی ارجاع
issues.ref_closed_from=`<a href="%[3]s"> بسته شده این مسائله %[4]</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s"> بازگشایی این مسائله %[4]</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=`از %[1]`
issues.poster=نویسنده
issues.collaborator=همكار
issues.owner=مالک
issues.role.owner=مالک
issues.role.member=عضو
issues.re_request_review=درخواست دوباره برای بازبینی
issues.is_stale=از زمان این بررسی تغییراتی در این پروژه ایجاد شده است
issues.remove_request_review=حذف درخواست بازبینی
@ -1409,8 +1409,6 @@ milestones.modify=به روزرسانی نقطه عطف
milestones.deletion=حذف نقطه عطف
milestones.deletion_desc=نقاط عطف از تمام مسائل مرتبط حذف میشوند. آیا ادامه میدهید؟
milestones.deletion_success=نقطه عطف حذف شد.
milestones.filter_sort.closest_due_date=نزدیکترین موعد مقرر
milestones.filter_sort.furthest_due_date=دورترین موعد مقرر
milestones.filter_sort.least_complete=حداقل کامل شده
milestones.filter_sort.most_complete=بیشترین کامل شده
milestones.filter_sort.most_issues=بیشترین مسائل
@ -1800,7 +1798,6 @@ settings.tags.protection.allowed.teams=تیم‌های مجاز
settings.tags.protection.allowed.noone=هیچیک
settings.tags.protection.create=تگ حفاظتی
settings.tags.protection.none=هیچ تگ حفاظتی وجود ندارد.
settings.tags.protection.pattern.description=می توانید از یک نام واحد یا یک الگوی glob یا عبارت منظم برای تطبیق چندین برچسب استفاده کنید. در <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/protected-tags/">راهنمای برچسب های محافظت شده</a> بیشتر بخوانید.
settings.bot_token=Token ربات
settings.chat_id=شناسه گپ
settings.matrix.homeserver_url=URL سرورخانه
@ -2243,12 +2240,10 @@ packages.repository=مخزن
packages.size=اندازه
defaulthooks=وب هوک های پیش فرض
defaulthooks.desc=هنگامی که برخی رویدادهای Gitea فعال می شوند، Webhook ها به طور خودکار درخواست های HTTP POST را به سرور ارسال می کنند. هوک های تعریف شده در اینجا پیش فرض هستند و در تمام مخازن جدید کپی می شوند. در <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">راهنمای هوک‌های وب</a> بیشتر بخوانید.
defaulthooks.add_webhook=اضافه کردن Webhook پیش فرض
defaulthooks.update_webhook=Webhook پیش فرض را به روز کنید
systemhooks=وب هوک های سیستم
systemhooks.desc=هنگامی که برخی رویدادهای Gitea فعال می شوند، Webhook ها به طور خودکار درخواست های HTTP POST را به سرور ارسال می کنند. وب هوک های تعریف شده در اینجا بر روی تمام انبارها سیستم عمل می کنند، بنابراین لطفاً هر گونه پیامدهای عملکردی که ممکن است داشته باشد را در نظر بگیرید. در <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">راهنمای هوک‌های وب</a> بیشتر بخوانید.
systemhooks.add_webhook=System Webhook را اضافه کنید
systemhooks.update_webhook=به روز رسانی Webhook سیستم
@ -2338,7 +2333,6 @@ auths.tip.google_plus=اطلاعات مربوط به مشتری OAuth2 را از
auths.tip.openid_connect=برای مشخص کردن نقاط پایانی از آدرس OpenID Connect Discovery URL (<server> /.well-known/openid-configuration) استفاده کنید.
auths.tip.twitter=به https://dev.twitter.com/apps بروید ، برنامه ای ایجاد کنید و اطمینان حاصل کنید که گزینه "اجازه استفاده از این برنامه برای ورود به سیستم با Twitter" را فعال کنید
auths.tip.discord=یک برنامه جدید را در https://discordapp.com/developers/applications/me ثبت کنید
auths.tip.gitea=یک برنامه OAuth2 ثبت کنید. راهنمایی بیشتر https://docs.gitea.io/en-us/oauth2-provider/
auths.tip.yandex=`یک برنامه جدید در https://oauth.yandex.com/client/new ایجاد کنید. مجوزهای زیر را از بخش "Yandex.Passport API" انتخاب کنید: "دسترسی به آدرس ایمیل"، "دسترسی به آواتار کاربر" و "دسترسی به نام کاربری، نام و نام خانوادگی، جنسیت"`
auths.tip.mastodon=یک URL نمونه سفارشی برای نمونه ماستودون که می خواهید با آن احراز هویت کنید وارد کنید (یا از یک پیش فرض استفاده کنید)
auths.edit=ویرایش منبع احراز هویت
@ -2499,8 +2493,6 @@ monitor.queue.type=نوع
monitor.queue.exemplar=نوع نمونه
monitor.queue.numberworkers=تعداد کارگران
monitor.queue.maxnumberworkers=بیشینه تعداد کارگران
monitor.queue.review=بررسی پیکربندی
monitor.queue.review_add=بررسی/افزودن کارگران
monitor.queue.settings.title=تنظیمات استخر
monitor.queue.settings.maxnumberworkers=بیشینه تعداد کارگران
monitor.queue.settings.maxnumberworkers.placeholder=در حال حاضر %[1]v

View File

@ -133,7 +133,6 @@ network_error=Verkkovirhe
[startpage]
app_desc=Kivuton, itsehostattu Git-palvelu
install=Helppo asentaa
install_desc=Yksinkertaisesti <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">aja binääri</a> alustallasi, toimita se <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Dockerilla</a>, tai saa se <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">pakettina</a>.
platform=Alustariippumaton
platform_desc=Gitea käy missä tahansa alustassa, johon <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a> kykenee kääntämään. Windows, macOS, Linux, ARM, jne. Valitse omasi!
lightweight=Kevyt
@ -251,6 +250,7 @@ filter_by_team_repositories=Suodata tiimin repojen mukaan
feed_of=`Syöte "%s"`
show_archived=Arkistoidut
archived=Arkistoidut
show_both_archived_unarchived=Näytetään arkistoidut ja arkistoimattomat
show_only_archived=Näytetään vain arkistoidut
show_only_unarchived=Näytetään vain arkistoimattomat
@ -439,7 +439,6 @@ overview=Yleiskatsaus
following=Seurataan
follow=Seuraa
unfollow=Lopeta seuraaminen
heatmap.loading=Ladataan lämpökarttaa…
user_bio=Elämäkerta
@ -794,6 +793,9 @@ commits.gpg_key_id=GPG avaimen ID
commits.ssh_key_fingerprint=SSH avaimen sormenjälki
commitstatus.error=Virhe
commitstatus.pending=Odottaa
projects=Projektit
projects.description_placeholder=Kuvaus
@ -900,9 +902,9 @@ issues.create_comment=Kommentoi
issues.closed_at=`sulki tämän ongelman <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`uudelleenavasi tämän ongelman <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.commit_ref_at=`viittasi tähän ongelmaan commitissa <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.poster=Tekijä
issues.collaborator=Yhteistyökumppani
issues.owner=Omistaja
issues.author=Tekijä
issues.role.owner=Omistaja
issues.role.member=Jäsen
issues.edit=Muokkaa
issues.cancel=Peruuta
issues.save=Tallenna
@ -1108,7 +1110,6 @@ settings.transfer=Siirrä omistajuus
settings.transfer_form_title=Syötä repon nimi vahvistuksena:
settings.transfer_notices_3=- Jos arkisto on yksityinen ja se siirretään yksittäiselle käyttäjälle, tämä toiminto varmistaa, että käyttäjällä on ainakin lukuoikeudet (ja muuttaa käyttöoikeuksia tarvittaessa).
settings.transfer_owner=Uusi omistaja
settings.trust_model.collaborator=Yhteistyökumppani
settings.wiki_delete=Poista Wiki data
settings.wiki_delete_desc=Repon wikin data poistaminen on pysyvä eikä voi peruuttaa.
settings.confirm_wiki_delete=Wiki datan poistaminen
@ -1220,7 +1221,6 @@ settings.tags.protection.allowed.teams=Sallitut tiimit
settings.tags.protection.allowed.noone=Ei kukaan
settings.tags.protection.create=Suojaa tagi
settings.tags.protection.none=Suojattuja tageja ei ole.
settings.tags.protection.pattern.description=Voit käyttää yhtä nimeä tai glob-kuviota tai säännöllistä lauseketta, joka täsmää useisiin tageihin. Lue lisää <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/protected-tags/">suojatut tagit oppaasta</a>.
settings.bot_token=Botti pääsymerkki
settings.matrix.homeserver_url=Kotipalvelimen URL
settings.archive.button=Arkistoi repo

View File

@ -181,7 +181,6 @@ network_error=Erreur réseau
[startpage]
app_desc=Un service Git auto-hébergé sans prise de tête
install=Facile à installer
install_desc=Il suffit de <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">lancer lexécutable</a> pour votre plateforme, le déployer avec <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a>, ou linstaller depuis <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">un paquet</a>.
platform=Multi-plateforme
platform_desc=Gitea tourne partout où <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a> peut être compilé : Windows, macOS, Linux, ARM, etc. Choisissez votre préféré !
lightweight=Léger
@ -317,6 +316,7 @@ filter_by_team_repositories=Dépôts filtrés par équipe
feed_of=Flux de « %s »
show_archived=Archivé
archived=Archivé
show_both_archived_unarchived=Afficher à la fois archivé et non archivé
show_only_archived=Afficher uniquement les archivés
show_only_unarchived=Afficher uniquement les non archivés
@ -598,7 +598,6 @@ overview=Vue d'ensemble
following=Abonnements
follow=Suivre
unfollow=Ne plus suivre
heatmap.loading=Chargement de la Heatmap…
user_bio=Biographie
disabled_public_activity=Cet utilisateur a désactivé la visibilité publique de l'activité.
email_visibility.limited=Votre adresse courriel est visible pour tous les utilisateurs authentifiés
@ -680,7 +679,6 @@ choose_new_avatar=Sélectionner un nouvel avatar
update_avatar=Modifier lavatar
delete_current_avatar=Supprimer l'avatar actuel
uploaded_avatar_not_a_image=Le fichier téléchargé n'est pas une image.
uploaded_avatar_is_too_big=Le fichier téléchargé dépasse la taille limite.
update_avatar_success=Votre avatar a été mis à jour.
update_user_avatar_success=L'avatar de l'utilisateur a été mis à jour.
@ -1280,6 +1278,11 @@ commit.cherry-pick=Picorer
commit.cherry-pick-header=Picorer : %s
commit.cherry-pick-content=Sélectionner la branche à picorer :
commitstatus.error=Erreur
commitstatus.failure=Échec
commitstatus.pending=En attente
commitstatus.success=Succès
ext_issues=Accès aux tickets externes
ext_issues.desc=Lien vers un gestionnaire de tickets externe.
@ -1475,9 +1478,9 @@ issues.ref_reopening_from=`<a href="%[3]s">a référencé une pull request %[4]s
issues.ref_closed_from=`<a href="%[3]s">a fermé ce ticket %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">a rouvert</a> ce ticket %[4]s <a id="%[1]s" href="#%[1]s">%[2]s</a>.`
issues.ref_from=`de %[1]s`
issues.poster=Éditeur
issues.collaborator=Collaborateur
issues.owner=Propriétaire
issues.author=Auteur
issues.role.owner=Propriétaire
issues.role.member=Membre
issues.re_request_review=Redemander une évaluation
issues.is_stale=Cette demande dajout a été corrigée depuis sa dernière évaluation.
issues.remove_request_review=Retirer la demande dévaluation
@ -1815,8 +1818,6 @@ milestones.edit_success=Le jalon "%s" a été mis à jour.
milestones.deletion=Supprimer un Jalon
milestones.deletion_desc=Supprimer un jalon le retire de tous les tickets. Continuer ?
milestones.deletion_success=Le jalon a été supprimé.
milestones.filter_sort.closest_due_date=Date d'échéance la plus proche
milestones.filter_sort.furthest_due_date=Date d'échéance la plus éloignée
milestones.filter_sort.least_complete=Le moins complété
milestones.filter_sort.most_complete=Le plus complété
milestones.filter_sort.most_issues=Le plus de tickets
@ -2314,7 +2315,6 @@ settings.tags.protection.allowed.teams=Équipes autorisées
settings.tags.protection.allowed.noone=Personne
settings.tags.protection.create=Protéger l'étiquette
settings.tags.protection.none=Il n'y a pas d'étiquettes protégées.
settings.tags.protection.pattern.description=Vous pouvez utiliser soit un nom unique, soit un motif de glob ou une expression régulière qui correspondront à plusieurs étiquettes. Pour plus d'informations, veuillez vous reporter au <a target="_blank" rel="noopener" href="https://docs.gitea.io/fr-fr/protected-tags/">guide sur les étiquettes protégées</a>.
settings.bot_token=Jeton de Bot
settings.chat_id=ID de conversation
settings.thread_id=ID du fil
@ -2851,12 +2851,10 @@ packages.size=Taille
packages.published=Publiés
defaulthooks=Déclencheurs web par défaut
defaulthooks.desc=Les Déclencheurs Web font des requêtes HTTP POST à un serveur lorsque certains événements Gitea se produisent. Les Déclencheurs déclarés ici seront prédéfinit dans tous nouveaux dépôts. Consultez le <a target="_blank" rel="noopener" href="https://docs.gitea.io/fr-fr/webhooks/">guide sur les Déclencheurs Web</a>.
defaulthooks.add_webhook=Ajouter un déclencheur web par défaut
defaulthooks.update_webhook=Mettre à jour le déclencheur web par défaut
systemhooks=Rappels système
systemhooks.desc=Les Webhooks font automatiquement des requêtes HTTP POST à un serveur lorsque certains événements Gitea se déclenchent. Les Webhooks définis ici agiront sur tous les dépots du système, donc veuillez prendre en compte les implications en termes de performances que cela peut avoir. Lire la suite dans le <a target="_blank" rel="noopener noreferrer" href="%s">guide des Webhooks</a>.
systemhooks.add_webhook=Ajouter un rappel système
systemhooks.update_webhook=Mettre à jour un rappel système
@ -2961,7 +2959,6 @@ auths.tip.google_plus=Obtenez des identifiants OAuth2 sur la console API de Goog
auths.tip.openid_connect=Utilisez l'URL de découvert OpenID (<server>/.well-known/openid-configuration) pour spécifier les points d'accès
auths.tip.twitter=Rendez-vous sur https://dev.twitter.com/apps, créez une application et assurez-vous que l'option "Autoriser l'application à être utilisée avec Twitter Connect" est activée
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
@ -3145,8 +3142,6 @@ monitor.queue.exemplar=Type d'exemple
monitor.queue.numberworkers=Nombre de processus
monitor.queue.maxnumberworkers=Nombre maximale de processus
monitor.queue.numberinqueue=Position dans la queue
monitor.queue.review=Revoir la configuration
monitor.queue.review_add=Réviser/Ajouter des processus
monitor.queue.settings.title=Paramètres du réservoir
monitor.queue.settings.desc=Les bassins croissent proportionnellement au besoin de leurs exécuteurs.
monitor.queue.settings.maxnumberworkers=Nombre maximale de processus

View File

@ -211,6 +211,7 @@ view_home=Nézet %s
search_repos=Tároló keresés…
show_archived=Archivált
archived=Archivált
show_private=Privát
show_both_private_public=Publikus és privát mutatása
@ -382,7 +383,6 @@ overview=Áttekintés
following=Követve
follow=Követés
unfollow=Követés törlése
heatmap.loading=Hőtérkép betöltése…
user_bio=Életrajz
@ -425,7 +425,6 @@ choose_new_avatar=Új profilkép kiválasztása
update_avatar=Profilkép Frissítése
delete_current_avatar=Jelenlegi profilkép törlése
uploaded_avatar_not_a_image=A feltöltött fájl nem kép.
uploaded_avatar_is_too_big=A feltöltött file mérete meghaladta a maximumot.
update_avatar_success=A profilképe frissítve lett.
change_password=Jelszó frissítése
@ -737,6 +736,8 @@ commits.signed_by=Aláírta
commits.gpg_key_id=GPG kulcs azonosító
commitstatus.pending=Függőben
ext_issues.desc=Külső hibakövető csatlakoztatás.
projects=Projektek
@ -835,9 +836,8 @@ issues.reopen_issue=Újranyitás
issues.reopen_comment_issue=Hozzászólás és újranyitás
issues.create_comment=Hozzászólás
issues.commit_ref_at=`hivatkozott erre a hibajegyre egy commit-ból <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.poster=Posztoló
issues.collaborator=Közreműködő
issues.owner=Tulajdonos
issues.role.owner=Tulajdonos
issues.role.member=Tag
issues.re_request_review=Véleményezés újrakérése
issues.sign_in_require_desc=<a href="%s">Jelentkezz be</a> hogy csatlakozz a beszélgetéshez.
issues.edit=Szerkesztés
@ -973,8 +973,6 @@ milestones.modify=Mérföldkő frissítése
milestones.deletion=Mérföldkő törlése
milestones.deletion_desc=A mérföldkő törlése eltávolítja az összes hozzárendelt hibajegyet. Biztosan folytatja?
milestones.deletion_success=A mérföldkő törölve.
milestones.filter_sort.closest_due_date=Legközelebbi határidő
milestones.filter_sort.furthest_due_date=Legtávolabbi határidő
milestones.filter_sort.least_complete=Legkevésbé befejezve
milestones.filter_sort.most_complete=Leginkább befejezve
milestones.filter_sort.most_issues=Legtöbb hibajegy
@ -1072,7 +1070,6 @@ settings.githooks=Git Hook-ok
settings.site=Webhely
settings.update_settings=Beállítások frissítése
settings.enable_timetracker=Időmérés bekapcsolása
settings.trust_model.collaborator=Közreműködő
settings.delete_collaborator=Eltávolítás
settings.teams=Csoportok
settings.webhook_deletion=Webhook törlése
@ -1423,7 +1420,6 @@ auths.tip.openid_connect=Használja az OpenID kapcsolódás felfedező URL-t (<k
auths.tip.twitter=Menyjen ide: https://dev.twitter.com/apps, hozzon létre egy alkalmazást és győződjön meg róla, hogy az “Allow this application to be used to Sign in with Twitter” opció be van kapcsolva
auths.tip.discord=Vegyen fel új alkalmazást itt:
https://discordapp.com/developers/applications/me
auths.tip.gitea=Regisztráljon új OAuth2 alkalmazást. Útmutató erről itt található: https://docs.gitea.io/en-us/oauth2-provider
auths.edit=Hitelesítési forrás szerkesztése
auths.activated=A hitelesítési forrás aktiválva lett
auths.update_success=A hitelesítési forrás frissítve lett.

View File

@ -304,7 +304,6 @@ overview=Tinjauan
following=Mengikuti
follow=Ikuti
unfollow=Berhenti Mengikuti
heatmap.loading=Memuat Peta Panas…
user_bio=Biografi
@ -346,7 +345,6 @@ choose_new_avatar=Pilih avatar baru
update_avatar=Perbarui Avatar
delete_current_avatar=Hapus Avatar Saat Ini
uploaded_avatar_not_a_image=Berkas yang diunggah bukanlah gambar.
uploaded_avatar_is_too_big=Berkas yang diunggah melebihi ukuran maksimum.
update_avatar_success=Avatar Anda telah diperbarui.
change_password=Perbarui kata sandi
@ -642,6 +640,7 @@ commits.signed_by=Ditandai oleh
projects.description_placeholder=Deskripsi
projects.title=Judul
projects.template.desc=Contoh
@ -713,9 +712,8 @@ issues.reopen_issue=Buka kembali
issues.reopen_comment_issue=Komentar dan Buka Kembali
issues.create_comment=Komentar
issues.commit_ref_at=`merujuk masalah dari komit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.poster=Poster
issues.collaborator=Kalaborator
issues.owner=Pemilik
issues.role.owner=Pemilik
issues.role.member=Anggota
issues.sign_in_require_desc=<a href="%s">Masuk</a> untuk bergabung dengan percakapan ini.
issues.edit=Sunting
issues.cancel=Batal
@ -780,8 +778,6 @@ milestones.due_date=Jatuh Tempo (opsional)
milestones.clear=Bersihkan
milestones.edit=Ubah Milestone
milestones.cancel=Batal
milestones.filter_sort.closest_due_date=Jatuh tempo terdekat
milestones.filter_sort.furthest_due_date=Jatuh tempo terjauh
milestones.filter_sort.least_complete=Paling tidak lengkap
milestones.filter_sort.most_complete=Paling lengkap
milestones.filter_sort.most_issues=Paling banyak masalah
@ -871,7 +867,6 @@ settings.danger_zone=Zona Bahaya
settings.new_owner_has_same_repo=Pemilik baru sudah memiliki repositori dengan nama yang sama. Silakan pilih nama lain.
settings.transfer=Transfer Kepemilikan
settings.transfer_owner=Pemilik Baru
settings.trust_model.collaborator=Kalaborator
settings.delete=Menghapus Repositori Ini
settings.delete_notices_1=- Operasi ini <strong>TIDAK BISA</strong> dibatalkan.
settings.delete_collaborator=Menghapus
@ -1250,8 +1245,6 @@ monitor.queue.type=Tipe
monitor.queue.exemplar=Contoh Tipe
monitor.queue.numberworkers=Jumlah Worker
monitor.queue.maxnumberworkers=Jumlah Maks. Worker
monitor.queue.review=Tinjau Konfigurasi
monitor.queue.review_add=Tinjau/Tambah Worker
monitor.queue.settings.title=Pengaturan Kelompok
monitor.queue.settings.maxnumberworkers=Jumlah Maks. Worker
monitor.queue.settings.maxnumberworkers.error=Jumlah maks. worker haruslah sebuah angka

View File

@ -130,7 +130,6 @@ network_error=Netkerfisvilla
[startpage]
app_desc=Þrautalaus og sjálfhýst Git þjónusta
install=Einföld uppsetning
install_desc=Einfaldlega <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">keyrðu forritið</a>fyrir vettvanginn þinn, <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a>, eða fáðu það <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">í pakka</a>.
platform=Fjölvettvangur
platform_desc=Gitea virkar hvar sem að <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a> gerir: Linux, macOS, Windows, ARM o. s. frv. Veldu það sem þú vilt!
lightweight=Létt
@ -230,6 +229,7 @@ search_repos=Finna hugbúnaðarsafn…
filter=Aðrar Síur
show_archived=Safnvistað
archived=Safnvistað
show_private=Einka
show_only_private=Að sýna aðeins einka
@ -416,7 +416,6 @@ overview=Yfirlit
following=Fylgir
follow=Fylgja
unfollow=Affylgja
heatmap.loading=Hleð Hitakorti…
user_bio=Lífssaga
disabled_public_activity=Þessi notandi hefur slökkt á opinberum sýnileika virkninnar.
@ -472,7 +471,6 @@ choose_new_avatar=Veldu nýja notandamynd
update_avatar=Uppfæra Notandamynd
delete_current_avatar=Eyða Núverandi Notandamynd
uploaded_avatar_not_a_image=Skráin sem hlaðin var upp er ekki mynd.
uploaded_avatar_is_too_big=Skráin sem hlaðin var upp er yfir hámarksstærð.
update_avatar_success=Notandamynd þín hefur verið uppfærð.
update_user_avatar_success=Notandamynd þessara notanda hefur verið uppfærð.
@ -717,6 +715,9 @@ commits.older=Eldri
commits.newer=Nýrri
commitstatus.error=Villa
commitstatus.pending=Í bið
projects=Verkefni
projects.description=Lýsing (valfrjálst)
@ -804,7 +805,9 @@ issues.create_comment=Senda Ummæli
issues.closed_at=`lokaði þessu vandamáli <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`enduropnaði þetta vandamál <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">enduropnaði þetta vandamál %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.owner=Eigandi
issues.author=Höfundur
issues.role.owner=Eigandi
issues.role.member=Meðlimur
issues.edit=Breyta
issues.cancel=Hætta við
issues.save=Vista
@ -1211,7 +1214,6 @@ packages.type=Tegund
packages.repository=Hugbúnaðarsafn
packages.size=Stærð
defaulthooks.desc=Vefkrókar senda sjálfkrafa HTTP POST beiðnir til netþjóns þegar ákveðnir Gitea atburðir koma af stað. Vefkrókar sem eru skilgreindir hér eru sjálfgefnir og verða afritaðir í allar nýjar geymslur. Frekari upplýsingar eru í <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">handbókini</a>.
auths.name=Heiti

View File

@ -135,7 +135,6 @@ network_error=Errore di rete
[startpage]
app_desc=Un servizio auto-ospitato per Git pronto all'uso
install=Facile da installare
install_desc=Semplicemente <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">avvia l'eseguibile</a> per la tua piattaforma. Oppure avvia Gitea con <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a>, oppure ottienilo <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">pacchettizzato</a>.
platform=Multipiattaforma
platform_desc=Gitea funziona ovunque <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a> possa essere compilato: Windows, macOS, Linux, ARM, etc. Scegli ciò che ami!
lightweight=Leggero
@ -262,6 +261,7 @@ filter_by_team_repositories=Filtra per repository del team
feed_of=`Feed di "%s"`
show_archived=Archiviato
archived=Archiviato
show_both_archived_unarchived=Mostra sia gli archiviati che i non archiviati
show_only_archived=Visualizzazione solo archiviati
show_only_unarchived=Visualizzazione solo non archiviati
@ -505,7 +505,6 @@ overview=Riepilogo
following=Seguiti
follow=Segui
unfollow=Non seguire più
heatmap.loading=Caricamento della Heatmap…
user_bio=Biografia
disabled_public_activity=L'utente ha disabilitato la vista pubblica dell'attività.
@ -569,7 +568,6 @@ choose_new_avatar=Scegli un nuovo avatar
update_avatar=Aggiorna Avatar
delete_current_avatar=Elimina Avatar attuale
uploaded_avatar_not_a_image=Il file caricato non è un'immagine.
uploaded_avatar_is_too_big=Il file inviato eccede le dimensioni massime.
update_avatar_success=Il tuo avatar è stato aggiornato.
update_user_avatar_success=L'avatar dell'utente è stato aggiornato.
@ -1077,6 +1075,9 @@ commit.cherry-pick=Cherry-pick
commit.cherry-pick-header=Cherry-pick: %s
commit.cherry-pick-content=Seleziona il ramo su cui scegliere:
commitstatus.error=Errore
commitstatus.pending=In sospeso
ext_issues=Accesso ai Problemi Esterni
ext_issues.desc=Collegamento al puntatore di una issue esterna.
@ -1238,9 +1239,9 @@ issues.ref_reopening_from=`<a href="%[3]s">ha fatto riferimento ad una pull requ
issues.ref_closed_from=`<a href="%[3]s">chiuso questo problema %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">riaperto questo problema %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=`da %[1]s`
issues.poster=Autore
issues.collaborator=Collaboratori
issues.owner=Proprietario
issues.author=Autore
issues.role.owner=Proprietario
issues.role.member=Membro
issues.re_request_review=Revisione ri-richiesta
issues.is_stale=Ci sono stati cambiamenti a questa PR da questa revisione
issues.remove_request_review=Elimina richiesta revisione
@ -1532,8 +1533,6 @@ milestones.modify=Aggiorna pietra miliare
milestones.deletion=Elimina pietra miliare
milestones.deletion_desc=Eliminare una pietra miliare la rimuove da tutte le relative issue. Continuare?
milestones.deletion_success=La pietra miliare è stata eliminata.
milestones.filter_sort.closest_due_date=Data di scadenza più vicina
milestones.filter_sort.furthest_due_date=Data di scadenza più lontana
milestones.filter_sort.least_complete=Meno completato
milestones.filter_sort.most_complete=Più completato
milestones.filter_sort.most_issues=Più problemi
@ -1958,7 +1957,6 @@ settings.tags.protection.allowed.teams=Squadre ammesse
settings.tags.protection.allowed.noone=Nessuno
settings.tags.protection.create=Proteggi Etichetta
settings.tags.protection.none=Non ci sono etichette protette.
settings.tags.protection.pattern.description=È possibile utilizzare un singolo nome o un modello globo o un'espressione regolare per abbinare più tag. Leggi di più nella <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/protected-tags/">guida per i tag protetti</a>.
settings.bot_token=Token del Bot
settings.chat_id=ID chat
settings.matrix.homeserver_url=URL Homeserver
@ -2424,12 +2422,10 @@ packages.size=Dimensione
packages.published=Pubblicata
defaulthooks=Webhook predefiniti
defaulthooks.desc=I Webhooks effettuano automaticamente richieste HTTP POST ad un server quando si verificano determinati eventi Gitea. I Webhooks definiti qui sono predefiniti e verranno copiati in tutti i nuovi repository. Per saperne di più leggi la <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">guida ai webhooks</a>.
defaulthooks.add_webhook=Aggiungi Webhook predefinito
defaulthooks.update_webhook=Aggiorna Webhook predefinito
systemhooks=Webhooks di Sistema
systemhooks.desc=I Webhooks effettuano automaticamente richieste HTTP POST ad un server quando si verificano determinati eventi Gitea. I Webhooks definiti qui agiranno su tutti i repository del sistema, quindi considera le eventuali implicazioni sulle performance che potrebbero avere. Per saperne di più leggi la <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">guida ai webhooks</a>.
systemhooks.add_webhook=Aggiungi Webhook di Sistema
systemhooks.update_webhook=Aggiorna Webhook di Sistema
@ -2531,7 +2527,6 @@ auths.tip.google_plus=Ottieni le credenziali del client OAuth2 dalla console API
auths.tip.openid_connect=Utilizza l'OpenID Connect Discovery URL (<server>/.well-known/openid-configuration) per specificare gli endpoint
auths.tip.twitter=Vai su https://dev.twitter.com/apps, crea una applicazione e assicurati che l'opzione "Allow this application to be used to Sign In with Twitter" sia abilitata
auths.tip.discord=Registra una nuova applicazione su https://discordapp.com/developers/applications/me
auths.tip.gitea=Registra una nuova applicazione OAuth2. La guida può essere trovata a https://docs.gitea.io/en-us/oauth2-provider/
auths.tip.yandex=`Crea una nuova applicazione su https://oauth.yandex.com/client/new. Seleziona i seguenti permessi da "Yandex. assport API": "Access to email address", "Access to user avatar" e "Access to username, name and surname, gender"`
auths.tip.mastodon=Inserisci un URL di istanza personalizzato per l'istanza mastodon con cui vuoi autenticarti (o usa quella predefinita)
auths.edit=Modifica fonte di autenticazione
@ -2700,8 +2695,6 @@ monitor.queue.exemplar=Tipo di esemplare
monitor.queue.numberworkers=Numero di workers
monitor.queue.maxnumberworkers=Massimo numero di Workers
monitor.queue.numberinqueue=Numero in coda
monitor.queue.review=Rivedi configurazione
monitor.queue.review_add=Rivedi/aggiungi Workers
monitor.queue.settings.title=Impostazioni pool
monitor.queue.settings.maxnumberworkers=Massimo numero di workers
monitor.queue.settings.maxnumberworkers.placeholder=Attualmente %[1]d

View File

@ -180,7 +180,6 @@ network_error=ネットワークエラー
[startpage]
app_desc=自分で立てる、超簡単 Git サービス
install=簡単インストール
install_desc=シンプルに、プラットフォームに応じて<a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">バイナリを実行</a>したり、<a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a>で動かしたり、<a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">パッケージ</a>を使うだけ。
platform=クロスプラットフォーム
platform_desc=Giteaは<a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a>でコンパイルできる環境ならどこでも動きます: Windows、macOS、Linux、ARM等々、好きなものを選んでください!
lightweight=軽量
@ -316,6 +315,7 @@ filter_by_team_repositories=チームリポジトリで絞り込み
feed_of=`"%s" のフィード`
show_archived=アーカイブ
archived=アーカイブ
show_both_archived_unarchived=アーカイブと非アーカイブの両方を表示
show_only_archived=アーカイブのみ表示
show_only_unarchived=非アーカイブのみ表示
@ -597,7 +597,6 @@ overview=概要
following=フォロー中
follow=フォロー
unfollow=フォロー解除
heatmap.loading=ヒートマップを読み込み中…
user_bio=経歴
disabled_public_activity=このユーザーはアクティビティ表示を公開していません。
email_visibility.limited=あなたのメールアドレスはすべての認証済みユーザーに表示されています
@ -679,7 +678,6 @@ choose_new_avatar=新しいアバターを選択
update_avatar=アバターを更新
delete_current_avatar=現在のアバターを削除
uploaded_avatar_not_a_image=アップロードしたファイルは画像ファイルではありません。
uploaded_avatar_is_too_big=アップロードしたファイルは最大サイズを超えています。
update_avatar_success=アバターを更新しました。
update_user_avatar_success=ユーザーのアバターを更新しました。
@ -1271,6 +1269,11 @@ commit.cherry-pick=チェリーピック
commit.cherry-pick-header=チェリーピック: %s
commit.cherry-pick-content=チェリーピック先のブランチを選択:
commitstatus.error=エラー
commitstatus.failure=失敗
commitstatus.pending=保留
commitstatus.success=成功
ext_issues=外部イシューへのアクセス
ext_issues.desc=外部のイシュートラッカーへのリンク。
@ -1463,9 +1466,9 @@ issues.ref_reopening_from=`<a href="%[3]s">が%[4]s、プルリクエストが
issues.ref_closed_from=`<a href="%[3]s">が%[4]s、このイシューをクローズ</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">が%[4]s、このイシューを再オープン</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=` %[1]s にて`
issues.poster=投稿
issues.collaborator=共同作業者
issues.owner=オーナ
issues.author=著作
issues.role.owner=オーナー
issues.role.member=メンバ
issues.re_request_review=レビューを再依頼
issues.is_stale=このレビューのあと、このPRに変更がありました
issues.remove_request_review=レビュー依頼を取り消し
@ -1789,8 +1792,6 @@ milestones.edit_success=マイルストーン "%s" を更新しました。
milestones.deletion=マイルストーンの削除
milestones.deletion_desc=マイルストーンを削除すると、関連するすべてのイシューから除去されます。 続行しますか?
milestones.deletion_success=マイルストーンを削除しました。
milestones.filter_sort.closest_due_date=期日が近い順
milestones.filter_sort.furthest_due_date=期日が遠い順
milestones.filter_sort.least_complete=消化率の低い順
milestones.filter_sort.most_complete=消化率の高い順
milestones.filter_sort.most_issues=イシューの多い順
@ -2288,7 +2289,6 @@ settings.tags.protection.allowed.teams=許可するチーム
settings.tags.protection.allowed.noone=なし
settings.tags.protection.create=タグを保護
settings.tags.protection.none=タグは保護されていません。
settings.tags.protection.pattern.description=ひとつのタグ名か、複数のタグにマッチするglobパターンまたは正規表現を使用できます。 詳しくは <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/protected-tags/">タグの保護ガイド</a> をご覧ください。
settings.bot_token=Botトークン
settings.chat_id=チャットID
settings.matrix.homeserver_url=ホームサーバー URL
@ -2816,12 +2816,10 @@ packages.size=サイズ
packages.published=配布
defaulthooks=デフォルトWebhook
defaulthooks.desc=Webhookは、特定のGiteaイベントトリガーが発生した際に、自動的にHTTP POSTリクエストをサーバーへ送信するものです。 ここで定義されたWebhookはデフォルトとなり、全ての新規リポジトリにコピーされます。 詳しくは<a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">webhooks guide</a>をご覧下さい。
defaulthooks.add_webhook=デフォルトWebhookの追加
defaulthooks.update_webhook=デフォルトWebhookの更新
systemhooks=システムWebhook
systemhooks.desc=Webhookは、特定のGiteaイベントトリガーが発生した際に、自動的にHTTP POSTリクエストをサーバーへ送信するものです。 ここで定義したWebhookはシステム内のすべてのリポジトリで呼び出されます。 そのため、パフォーマンスに及ぼす影響を考慮したうえで設定してください。 詳しくは<a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">webhooks guide</a>をご覧下さい。
systemhooks.add_webhook=システムWebhookを追加
systemhooks.update_webhook=システムWebhookを更新
@ -2925,7 +2923,6 @@ auths.tip.google_plus=OAuth2クライアント資格情報を、Google APIコン
auths.tip.openid_connect=OpenID Connect DiscoveryのURL (<server>/.well-known/openid-configuration) をエンドポイントとして指定してください
auths.tip.twitter=https://dev.twitter.com/apps へアクセスしてアプリケーションを作成し、“Allow this application to be used to Sign in with Twitter”オプションを有効にしてください。
auths.tip.discord=新しいアプリケーションを https://discordapp.com/developers/applications/me から登録してください。
auths.tip.gitea=新しいOAuthアプリケーションを登録してください。 利用ガイドは https://docs.gitea.io/en-us/oauth2-provider/
auths.tip.yandex=`https://oauth.yandex.com/client/new で新しいアプリケーションを作成してください。 "Yandex.Passport API" セクションで次の項目を許可します: "Access to email address"、"Access to user avatar"、"Access to username, first name and surname, gender"`
auths.tip.mastodon=認証したいMastodonインスタンスのカスタムURLを入力してください (入力しない場合はデフォルトのURLを使用します)
auths.edit=認証ソースの編集
@ -3108,8 +3105,6 @@ monitor.queue.exemplar=要素の型
monitor.queue.numberworkers=ワーカー数
monitor.queue.maxnumberworkers=ワーカー数上限
monitor.queue.numberinqueue=キュー内の数
monitor.queue.review=設定確認
monitor.queue.review_add=確認/ワーカー追加
monitor.queue.settings.title=プール設定
monitor.queue.settings.desc=プールはワーカーキューの待機状態に応じて動的に大きくなります。
monitor.queue.settings.maxnumberworkers=ワーカー数上限

View File

@ -360,7 +360,6 @@ overview=개요
following=팔로우 중
follow=추적하기
unfollow=추적해제
heatmap.loading=Heatmap 불러오는 중...
user_bio=소개
@ -402,7 +401,6 @@ choose_new_avatar=새로운 아바타 선택
update_avatar=아바타 변경하기
delete_current_avatar=현재 아바타 삭제
uploaded_avatar_not_a_image=업로드 된 파일은 이미지가 아닙니다.
uploaded_avatar_is_too_big=업로드된 파일이 최대 크기를 넘습니다.
update_avatar_success=아바타가 변경되었습니다.
change_password=비밀번호 변경
@ -674,6 +672,8 @@ commits.signed_by=로그인 계정
commits.gpg_key_id=GPG 키 ID
commitstatus.pending=보류
ext_issues.desc=외부 이슈 트래커 연결.
projects.description_placeholder=설명
@ -761,9 +761,8 @@ issues.reopen_issue=다시 열기
issues.reopen_comment_issue=다시 오픈 및 코멘트
issues.create_comment=코멘트
issues.commit_ref_at=` 커밋 <a id="%[1]s" href="#%[1]s">%[2]s</a>에서 이 이슈 언급`
issues.poster=포스터
issues.collaborator=협업자
issues.owner=소유자
issues.role.owner=소유자
issues.role.member=멤버
issues.sign_in_require_desc="<a href=\"%s\">로그인</a>하여 이 대화에 참여"
issues.edit=수정
issues.cancel=취소
@ -884,8 +883,6 @@ milestones.modify=마일스톤 갱신
milestones.deletion=마일스톤 삭제
milestones.deletion_desc=마일스톤을 삭제하면 연관된 모든 이슈에서 삭제됩니다. 계속 하시겠습니까?
milestones.deletion_success=마일스톤이 삭제되었습니다.
milestones.filter_sort.closest_due_date=마감일이 가까운 순
milestones.filter_sort.furthest_due_date=마감일이 먼 순
milestones.filter_sort.least_complete=완료율이 낮은 순
milestones.filter_sort.most_complete=완료율이 높은 순
milestones.filter_sort.most_issues=이슈 많은 순

View File

@ -175,7 +175,6 @@ network_error=Tīkla kļūda
[startpage]
app_desc=Viegli uzstādāms Git serviss
install=Vienkārši instalējams
install_desc=Nepieciešams tikai <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">palaist izpildāmo failu</a> vajadzīgajai platformai. Izmantot <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a> vai izmantot <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">pakotni</a>.
platform=Pieejama dažādām platformām
platform_desc=Gitea iespējams uzstādīt jebkur, kam <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a> var nokompilēt: Windows, macOS, Linux, ARM utt. Izvēlies to, kas tev patīk!
lightweight=Viegla
@ -308,6 +307,7 @@ filter_by_team_repositories=Filtrēt pēc komandas repozitorijiem
feed_of=`"%s" plūsma`
show_archived=Arhivētie
archived=Arhivētie
show_both_archived_unarchived=Attēlot gan arhivētos, gan nearhivētos
show_only_archived=Attēlot tikai arhivētos
show_only_unarchived=Attēlot tikai nearhivētos
@ -582,7 +582,6 @@ overview=Pārskats
following=Seko
follow=Sekot
unfollow=Nesekot
heatmap.loading=Ielādē intensitātes karti…
user_bio=Biogrāfija
disabled_public_activity=Šis lietotājs ir atslēdzies iespēju aplūkot tā aktivitāti.
email_visibility.limited=E-pasta adrese ir redzama visiem autentificētajiem lietotājiem
@ -655,7 +654,6 @@ choose_new_avatar=Izvēlēties jaunu profila attēlu
update_avatar=Saglabāt profila bildi
delete_current_avatar=Dzēst pašreizējo profila bildi
uploaded_avatar_not_a_image=Augšupielādētais fails nav attēls.
uploaded_avatar_is_too_big=Augšupielādētais fails parsniedz maksimālo izmēru.
update_avatar_success=Profila attēls tika saglabāts.
update_user_avatar_success=Lietotāja profila attēls tika atjaunots.
@ -1217,6 +1215,11 @@ commit.cherry-pick=Izlasīt
commit.cherry-pick-header=Izlasīt: %s
commit.cherry-pick-content=Norādiet atzaru uz kuru izlasīt:
commitstatus.error=Kļūda
commitstatus.failure=Neveiksmīgs
commitstatus.pending=Nav iesūtīts
commitstatus.success=Pabeigts
ext_issues=Piekļuve ārējām problēmām
ext_issues.desc=Saite uz ārējo problēmu sekotāju.
@ -1408,9 +1411,9 @@ issues.ref_reopening_from=`<a href="%[3]s">atsaucās uz izmaiņu pieprasījumu %
issues.ref_closed_from=`<a href="%[3]s">aizvēra problēmu %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">atkārtoti atvēra problēmu %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=`no %[1]s`
issues.poster=Autors
issues.collaborator=Līdzstrādnieks
issues.owner=Īpašnieks
issues.author=Autors
issues.role.owner=Īpašnieks
issues.role.member=Biedri
issues.re_request_review=Pieprasīt atkārtotu recenziju
issues.is_stale=Šajā izmaiņu pieprasījumā ir notikušas izmaiņās, kopš veicāt tā recenziju
issues.remove_request_review=Noņemt recenzijas pieprasījumu
@ -1725,8 +1728,6 @@ milestones.edit_success=Izmaiņas atskaites punktā "%s" tika veiksmīgi saglab
milestones.deletion=Dzēst atskaites punktu
milestones.deletion_desc=Dzēšot šo atskaites punktu, tas tiks noņemts no visām saistītajām problēmām un izmaiņu pieprasījumiem. Vai turpināt?
milestones.deletion_success=Atskaites punkts tika veiksmīgi izdzēsts.
milestones.filter_sort.closest_due_date=Tuvākais termiņš
milestones.filter_sort.furthest_due_date=Tālākais termiņš
milestones.filter_sort.least_complete=Vismazāk pabeigtais
milestones.filter_sort.most_complete=Visvairāk pabeigtais
milestones.filter_sort.most_issues=Visvairāk problēmu
@ -2207,7 +2208,6 @@ settings.tags.protection.allowed.teams=Atļauts komandām
settings.tags.protection.allowed.noone=Nevienam
settings.tags.protection.create=Aizsargāt tagus
settings.tags.protection.none=Nav uzstādīta tagu aizsargāšana.
settings.tags.protection.pattern.description=Var izmantot pilnu nosaukumu, glob šablonu vai regulāro izteiksmi, lai aizsargātu vairākus tagus. Detalizētāk var izlasīt <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/protected-tags/">tagu aizsargāšanas pamācībā</a>.
settings.bot_token=Bota pilnvara
settings.chat_id=Tērzēšanas ID
settings.matrix.homeserver_url=Mājas servera URL
@ -2722,12 +2722,10 @@ packages.size=Izmērs
packages.published=Publicēts
defaulthooks=Noklusētie tīmekļa āķi
defaulthooks.desc=Tīmekļa āķi ļauj paziņot ārējiem servisiem par noteiktiem notikumiem, kas notiek Gitea. Kad iestāsies kāds notikums, katram ārējā servisa URL tiks nosūtīts POST pieprasījums. Šeit izveidotie tīmekļa āķi tiks pievienoti visiem jaunajajiem repozitorijiem. Lai uzzinātu sīkāk skatieties <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">tīmekļa āķu rokasgrāmatā</a>.
defaulthooks.add_webhook=Pievienot noklusēto tīmekļa āķi
defaulthooks.update_webhook=Mainīt noklusēto tīmekļa āķi
systemhooks=Sistēmas tīmekļa āķi
systemhooks.desc=Tīmekļa āķi automātiski veic HTTP POST pieprasījumus uz serveri, kad notiek noteikti Gitea notikumi. Tīmekļa āķi izpildīsies uz visu servera repozitoriju notikumiem, tāpēc būtu jāņem vērā, ka tas var radīt ātrdarbības problēmas. Vairāk par tiem var uzzināt <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">tīmekļa āķu dokumentācijā</a>.
systemhooks.add_webhook=Pievienot sistēmas tīmekļa āķi
systemhooks.update_webhook=Mainīt sistēmas tīmekļa āķi
@ -2831,7 +2829,6 @@ auths.tip.google_plus=Iegūstiet OAuth2 klienta pilnvaru no Google API konsoles
auths.tip.openid_connect=Izmantojiet OpenID pieslēgšanās atklāšanas URL (<serveris>/.well-known/openid-configuration), lai norādītu galapunktus
auths.tip.twitter=Dodieties uz adresi https://dev.twitter.com/apps, izveidojiet aplikāciju un pārliecinieties, ka ir atzīmēts “Allow this application to be used to Sign in with Twitter”
auths.tip.discord=Reģistrējiet jaunu aplikāciju adresē https://discordapp.com/developers/applications/me
auths.tip.gitea=Reģistrēt jaunu OAuth2 lietojumprogrammu. Pamācību iespējams atrast https://docs.gitea.io/en-us/oauth2-provider/
auths.tip.yandex=`Izveidojiet jaunu lietotni adresē https://oauth.yandex.com/client/new. Izvēlieties sekojošas tiesības "Yandex.Passport API" sadaļā: "Access to email address", "Access to user avatar" un "Access to username, first name and surname, gender"`
auths.tip.mastodon=Norādiet pielāgotu mastodon instances URL, ar kuru vēlaties autorizēties (vai izmantojiet noklusēto)
auths.edit=Labot autentifikācijas avotu
@ -3014,8 +3011,6 @@ monitor.queue.exemplar=Eksemplāra veids
monitor.queue.numberworkers=Strādņu skaits
monitor.queue.maxnumberworkers=Maksimālais strādņu skaits
monitor.queue.numberinqueue=Skaits rindā
monitor.queue.review=Pārbaudīt konfigurāciju
monitor.queue.review_add=Pārbaudīt/Pievienot strādņus
monitor.queue.settings.title=Pūla iestatījumi
monitor.queue.settings.desc=Pūls dinamiski tiek palielināts atkarībā no bloķētiem darbiem rindā.
monitor.queue.settings.maxnumberworkers=Maksimālais strādņu skaits

View File

@ -134,7 +134,6 @@ network_error=Netwerk fout
[startpage]
app_desc=Een eenvoudige, self-hosted Git service
install=Makkelijk te installeren
install_desc=Je hoeft alleen maar de <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">binary</a> uit te voeren, gebruik het met <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a>, of download een <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">installatiepakket</a>.
platform=Cross-platform
platform_desc=Gitea werkt op alles waar <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a> op kan compileren: Windows, macOS, Linux, ARM, etc. Kies het platform dat bij je past!
lightweight=Lichtgewicht
@ -261,6 +260,7 @@ filter_by_team_repositories=Filter op team repositories
feed_of=`Feed van "%s"`
show_archived=Gearchiveerd
archived=Gearchiveerd
show_both_archived_unarchived=Toont zowel gearchiveerd als niet-gearchiveerd
show_only_archived=Toon alleen gearchiveerd
show_only_unarchived=Toon alleen niet gearchiveerd
@ -504,7 +504,6 @@ overview=Overzicht
following=Volgt
follow=Volg
unfollow=Niet meer volgen
heatmap.loading=Heatmap wordt geladen…
user_bio=Biografie
disabled_public_activity=Deze gebruiker heeft de publieke zichtbaarheid van de activiteit uitgeschakeld.
@ -568,7 +567,6 @@ choose_new_avatar=Kies een nieuwe avatar
update_avatar=Update Avatar
delete_current_avatar=Verwijder huidige avatar
uploaded_avatar_not_a_image=Het geüploade bestand is geen afbeelding.
uploaded_avatar_is_too_big=Het geüploade bestand heeft de maximale grootte overschreden.
update_avatar_success=Je avatar is bijgewerkt.
update_user_avatar_success=De avatar van de gebruiker is bijgewerkt.
@ -1075,6 +1073,9 @@ commit.cherry-pick=Cherry-pick
commit.cherry-pick-header=Cherry-pick: %s
commit.cherry-pick-content=Selecteer een branch om te cherry-pick op:
commitstatus.error=Fout
commitstatus.pending=In behandeling
ext_issues=Toegang tot Externe Issues
ext_issues.desc=Koppelen aan een externe kwestie-tracker.
@ -1236,9 +1237,8 @@ issues.ref_reopening_from=`<a href="%[3]s">verwees naar een pull request %[4]s d
issues.ref_closed_from=`<a href="%[3]s">sloot dit issue %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">heropende dit issue %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=`van %[1]s`
issues.poster=Poster
issues.collaborator=Medewerker
issues.owner=Eigenaar
issues.role.owner=Eigenaar
issues.role.member=Lid
issues.re_request_review=Opnieuw aanvragen review
issues.is_stale=Er zijn wijzigingen aangebracht in deze PR sinds deze beoordeling
issues.remove_request_review=Verwijder beoordelingsverzoek
@ -1528,8 +1528,6 @@ milestones.modify=Mijlpaal bijwerken
milestones.deletion=Mijlpaal verwijderen
milestones.deletion_desc=Als je een mijlpaal verwijdert, wordt hij van alle gerelateerde kwesties verwijderd. Doorgaan?
milestones.deletion_success=De mijlpaal is verwijderd.
milestones.filter_sort.closest_due_date=Dichtstbijzijnde deadline
milestones.filter_sort.furthest_due_date=Verste deadline
milestones.filter_sort.least_complete=Minst compleet
milestones.filter_sort.most_complete=Meest compleet
milestones.filter_sort.most_issues=Meeste problemen
@ -1686,7 +1684,6 @@ settings.enable_timetracker=Tijdregistratie inschakelen
settings.allow_only_contributors_to_track_time=Sta alleen bijdragers toe tijdregistratie te gebruiken
settings.pulls_desc=Repository-pull-aanvragen inschakelen
settings.pulls.ignore_whitespace=Witruimte negeren voor conflicten
settings.trust_model.collaborator=Medewerker
settings.trust_model.collaborator.long=Medewerker: Vertrouw handtekeningen door medewerkers
settings.trust_model.committer=Committer
settings.trust_model.committer.long=Committer: Vertrouw handtekeningen die overeenkomen met committers (Dit komt overeen met GitHub en zal Gitea ondertekende commits dwingen om Gitea als de committer te hebben)
@ -1898,7 +1895,6 @@ settings.tags.protection.allowed.teams=Toegestane teams
settings.tags.protection.allowed.noone=Niemand
settings.tags.protection.create=Beveilig Label
settings.tags.protection.none=Er zijn geen beveiligde labels.
settings.tags.protection.pattern.description=U kunt een enkele naam gebruiken of een glob patroon of reguliere expressie om meerdere labels te matchen. Lees meer in de <a target="_blank" rel="noopener" href="https://docs.gitea.io/nl-nl/protected-tags/">beschermde labels gids</a>.
settings.bot_token=Bot Token
settings.chat_id=Chat-ID
settings.matrix.homeserver_url=Homeserver URL
@ -2533,8 +2529,6 @@ monitor.queue.type=Type
monitor.queue.exemplar=Type voorbeeld
monitor.queue.numberworkers=Aantal workers
monitor.queue.maxnumberworkers=Maximum aantal workers
monitor.queue.review=Configuratie herzien
monitor.queue.review_add=Beoordeel/Voeg workers toe
monitor.queue.settings.title=Pool instellingen
monitor.queue.settings.maxnumberworkers=Maximum aantal workers
monitor.queue.settings.maxnumberworkers.placeholder=Momenteel %[1]d

View File

@ -132,7 +132,6 @@ network_error=Błąd sieci
[startpage]
app_desc=Bezbolesna usługa Git na własnym serwerze
install=Łatwa instalacja
install_desc=Po prostu <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">odpal plik binarny</a> dla swojej platformy, uruchom przy pomocy <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Dockera</a>, lub zainstaluj <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">z paczki</a>.
platform=Wieloplatformowość
platform_desc=Gitea ruszy gdziekolwiek <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a> jest możliwe do skompilowania: Windows, macOS, Linux, ARM, itd. Wybierz swój ulubiony system!
lightweight=Niskie wymagania
@ -259,6 +258,7 @@ filter_by_team_repositories=Filtruj według repozytoriów zespołu
feed_of=`Kanał "%s"`
show_archived=Zarchiwizowane
archived=Zarchiwizowane
show_both_archived_unarchived=Wyświetlanie zarchiwizowanych i niezarchiwizowanych
show_only_archived=Wyświetlanie tylko zarchiwizowanych
show_only_unarchived=Wyświetlanie tylko niezarchiwizowanych
@ -489,7 +489,6 @@ overview=Przegląd
following=Obserwowani
follow=Obserwuj
unfollow=Przestań obserwować
heatmap.loading=Ładowanie mapy cieplnej…
user_bio=Biografia
disabled_public_activity=Ten użytkownik wyłączył publiczne wyświetlanie jego aktywności.
@ -537,7 +536,6 @@ choose_new_avatar=Wybierz nowy avatar
update_avatar=Aktualizuj awatar
delete_current_avatar=Usuń obecny Avatar
uploaded_avatar_not_a_image=Załadowany plik nie jest obrazem.
uploaded_avatar_is_too_big=Przesłany plik przekroczył maksymalny rozmiar.
update_avatar_success=Twój awatar został zmieniony.
change_password=Aktualizuj hasło
@ -993,6 +991,9 @@ commits.signed_by_untrusted_user_unmatched=Podpisane przez niezaufanego użytkow
commits.gpg_key_id=ID klucza GPG
commitstatus.error=Błąd
commitstatus.pending=Oczekująca
ext_issues.desc=Link do zewnętrznego systemu śledzenia zgłoszeń.
projects=Projekty
@ -1139,9 +1140,8 @@ issues.ref_reopening_from=`<a href="%[3]s">odwołał(-a) się do Pull Requesta %
issues.ref_closed_from=`<a href="%[3]s">zamknął(-ęła) to zgłoszenie %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">ponownie otworzył(-a) to zgłoszenie %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=`z %[1]s`
issues.poster=Autor
issues.collaborator=Współpracownik
issues.owner=Właściciel
issues.role.owner=Właściciel
issues.role.member=Członek
issues.re_request_review=Poproś o ponowną recenzję
issues.remove_request_review=Usuń prośbę o recenzję
issues.remove_request_review_block=Nie można usunąć prośby o recenzję
@ -1380,8 +1380,6 @@ milestones.modify=Zaktualizuj cel
milestones.deletion=Usuń kamień milowy
milestones.deletion_desc=Usunięcie celu usuwa go z wszystkich pozostałych zagadnień. Kontynuować?
milestones.deletion_success=Cel został usunięty.
milestones.filter_sort.closest_due_date=Najbliżej daty realizacji
milestones.filter_sort.furthest_due_date=Najdalej daty realizacji
milestones.filter_sort.least_complete=Najmniej kompletne
milestones.filter_sort.most_complete=Najbardziej kompletne
milestones.filter_sort.most_issues=Najwięcej zgłoszeń
@ -1761,7 +1759,6 @@ settings.tags.protection.allowed.teams=Dozwolone zespoły
settings.tags.protection.allowed.noone=Brak
settings.tags.protection.create=Chroń tag
settings.tags.protection.none=Brak chronionych tagów.
settings.tags.protection.pattern.description=Możesz użyć pojedynczej nazwy lub wzoru glob lub wyrażenia regularnego, aby dopasować wiele tagów. Dowiedz się więcej w <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/protected-tags/">przewodniku tagów</a>.
settings.bot_token=Token bota
settings.chat_id=ID czatu
settings.matrix.homeserver_url=Adres URL serwera domowego
@ -2180,12 +2177,10 @@ packages.repository=Repozytorium
packages.size=Rozmiar
defaulthooks=Domyślne Webhooki
defaulthooks.desc=Webhooki automatycznie wysyłają zapytania HTTP POST na serwer, gdy niektóre zdarzenia Gitea je wyzwalają. Webhooki zdefiniowane tutaj są domyślne i zostaną skopiowane do wszystkich nowych repozytoriów. Przeczytaj więcej w <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">przewodniku webhooków</a>.
defaulthooks.add_webhook=Dodaj domyślny Webhook
defaulthooks.update_webhook=Zaktualizuj domyślny Webhook
systemhooks=Webhooki Systemowe
systemhooks.desc=Webhooki automatycznie tworzą zapytania HTTP POST do serwera, kiedy następują pewne zdarzenia w Gitea. Webhooki zdefiniowane w tym miejscu będą wykonywane dla wszystkich repozytoriów, więc rozważ ewentualne konsekwencje pod względem wydajności. Przeczytaj o tym więcej w <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/webhooks/">przewodniku o Webhookach</a>.
systemhooks.add_webhook=Dodaj Webhook Systemowy
systemhooks.update_webhook=Aktualizuj Webhook Systemowy
@ -2265,7 +2260,6 @@ auths.tip.google_plus=Uzyskaj dane uwierzytelniające klienta OAuth2 z konsoli G
auths.tip.openid_connect=Użyj adresu URL OpenID Connect Discovery (<server>/.well-known/openid-configuration), aby określić punkty końcowe
auths.tip.twitter=Przejdź na https://dev.twitter.com/apps, stwórz aplikację i upewnij się, że opcja “Allow this application to be used to Sign in with Twitter” jest włączona
auths.tip.discord=Zarejestruj nową aplikację na https://discordapp.com/developers/applications/me
auths.tip.gitea=Zarejestruj nową aplikację OAuth2. Przewodnik można znaleźć na https://docs.gitea.io/en-us/oauth2-provider/
auths.tip.yandex=`Utwórz nową aplikację na https://oauth.yandex.com/client/new. Wybierz następujące uprawnienia z "Yandex.Passport API": "Access to email address", "Access to user avatar" and "Access to username, first name and surname, gender"`
auths.tip.mastodon=Wprowadź niestandardowy adres URL instancji mastodona, którą chcesz uwierzytelnić (lub użyj domyślnego)
auths.edit=Edytuj źródło uwierzytelniania
@ -2423,8 +2417,6 @@ monitor.queue.type=Typ
monitor.queue.exemplar=Przykładowy typ
monitor.queue.numberworkers=Liczba procesów pracujących
monitor.queue.maxnumberworkers=Maksymalna liczba procesów pracujących
monitor.queue.review=Przejrzyj konfigurację
monitor.queue.review_add=Przejrzyj/Dodaj procesy pracujące
monitor.queue.settings.title=Ustawienia Puli
monitor.queue.settings.maxnumberworkers=Maksymalna liczba procesów pracujących
monitor.queue.settings.maxnumberworkers.placeholder=Obecnie %[1]d

View File

@ -175,7 +175,6 @@ network_error=Erro de rede
[startpage]
app_desc=Um serviço de hospedagem Git amigável
install=Fácil de instalar
install_desc=Simplesmente <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">execute o binário</a> para seu sistema operacional, instale com o <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a> ou faça download do <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">pacote</a>.
platform=Multi-plataforma
platform_desc=Gitea roda em qualquer sistema operacional em que <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a> consegue compilar: Windows, macOS, Linux, ARM, etc. Escolha qual você gosta mais!
lightweight=Leve e rápido
@ -308,6 +307,7 @@ filter_by_team_repositories=Filtrar por repositórios da equipe
feed_of=`Feed de "%s"`
show_archived=Arquivado
archived=Arquivado
show_both_archived_unarchived=Mostrando arquivados e não arquivados
show_only_archived=Mostrando somente arquivados
show_only_unarchived=Mostrando somente não arquivados
@ -582,7 +582,6 @@ overview=Visão geral
following=Seguindo
follow=Seguir
unfollow=Deixar de seguir
heatmap.loading=Carregando mapa de calor...
user_bio=Biografia
disabled_public_activity=Este usuário desativou a visibilidade pública da atividade.
email_visibility.limited=Seu endereço de e-mail está visível para todos os usuários autenticados
@ -655,7 +654,6 @@ choose_new_avatar=Escolha um novo avatar
update_avatar=Atualizar o avatar
delete_current_avatar=Excluir o avatar atual
uploaded_avatar_not_a_image=O arquivo enviado não é uma imagem.
uploaded_avatar_is_too_big=O arquivo enviado excedeu o tamanho máximo.
update_avatar_success=Seu avatar foi atualizado.
update_user_avatar_success=O avatar do usuário foi atualizado.
@ -1216,6 +1214,11 @@ commit.cherry-pick=Cherry-pick
commit.cherry-pick-header=Cherry-pick: %s
commit.cherry-pick-content=Selecione o branch para receber o cherry-pick:
commitstatus.error=Erro
commitstatus.failure=Falha
commitstatus.pending=Pendente
commitstatus.success=Sucesso
ext_issues=Acesso a Issues Externos
ext_issues.desc=Link para o issue tracker externo.
@ -1404,9 +1407,9 @@ issues.ref_reopening_from=`<a href="%[3]s">referenciado um pull request %[4]s qu
issues.ref_closed_from=`<a href="%[3]s">fechou esta issue %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">reabriu esta issue %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=`de %[1]s`
issues.poster=Autor
issues.collaborator=Colaborador
issues.owner=Proprietário
issues.author=Autor
issues.role.owner=Proprietário
issues.role.member=Membro
issues.re_request_review=Re-solicitar revisão
issues.is_stale=Houve alterações nessa PR desde essa revisão
issues.remove_request_review=Remover solicitação de revisão
@ -1720,8 +1723,6 @@ milestones.edit_success=O marco "%s" foi atualizado.
milestones.deletion=Excluir marco
milestones.deletion_desc=A exclusão deste marco irá removê-lo de todas as issues. Tem certeza que deseja continuar?
milestones.deletion_success=O marco foi excluído.
milestones.filter_sort.closest_due_date=Data limite mais próxima
milestones.filter_sort.furthest_due_date=Data limite mais distante
milestones.filter_sort.least_complete=Menos completo
milestones.filter_sort.most_complete=Mais completo
milestones.filter_sort.most_issues=Com mais issues
@ -2181,7 +2182,6 @@ settings.tags.protection.allowed.teams=Equipes permitidas
settings.tags.protection.allowed.noone=Ninguém
settings.tags.protection.create=Proteger tag
settings.tags.protection.none=Não há tags protegidas.
settings.tags.protection.pattern.description=Você pode usar um só nome ou um padrão glob ou uma expressão regular para corresponder a várias tags. Para mais informações leia o <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/protected-tags/">guia das tags protegidas</a>.
settings.bot_token=Token do Bot
settings.chat_id=ID do Chat
settings.matrix.homeserver_url=URL do Homeserver
@ -2693,12 +2693,10 @@ packages.size=Tamanho
packages.published=Publicado
defaulthooks=Webhooks Padrões
defaulthooks.desc=Webhooks automaticamente fazem requisições HTTP POST para um servidor quando acionados por determinados eventos do Gitea. Webhooks definidos aqui são os padrões e serão copiados para todos os novos repositórios. Leia mais no <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">guia de webhooks</a>.
defaulthooks.add_webhook=Adicionar Webhook Padrão
defaulthooks.update_webhook=Atualizar Webhook Padrão
systemhooks=Webhooks do Sistema
systemhooks.desc=Webhooks automaticamente fazem requisições HTTP POST para um servidor quando acionados por determinados eventos do Gitea. Webhooks definidos aqui agirão em todos os repositórios do sistema, então, por favor, considere quaisquer implicações de desempenho que isso possa ter. Leia mais no <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">guia de webhooks</a>.
systemhooks.add_webhook=Adicionar Webhook do Sistema
systemhooks.update_webhook=Atualizar Webhook do Sistema
@ -2802,7 +2800,6 @@ auths.tip.google_plus=Obter credenciais de cliente OAuth2 do console de API do G
auths.tip.openid_connect=Use o OpenID Connect Discovery URL (<servidor>/.well-known/openid-configuration) para especificar os endpoints
auths.tip.twitter=Vá em https://dev.twitter.com/apps, crie um aplicativo e certifique-se de que está habilitada a opção “Allow this application to be used to Sign in with Twitter“
auths.tip.discord=Cadastrar um novo aplicativo em https://discordapp.com/developers/applications/me
auths.tip.gitea=Cadastrar um novo aplicativo OAuth2. Guia pode ser encontrado em https://docs.gitea.io/en-us/oauth2-provider/
auths.tip.yandex=`Crie um novo aplicativo em https://oauth.yandex.com/client/new. Selecione as seguintes permissões da seção "Yandex.Passport API": "Access to email address", "Access to user avatar" and "Access to username, first name and surname, gender"`
auths.tip.mastodon=Insira a URL da instância personalizada do mastodon que você deseja usar para autenticar (ou use o padrão)
auths.edit=Editar fonte de autenticação
@ -2983,8 +2980,6 @@ monitor.queue.exemplar=Tipo de modelo
monitor.queue.numberworkers=Número de executores
monitor.queue.maxnumberworkers=Número máximo de executores
monitor.queue.numberinqueue=Número na Fila
monitor.queue.review=Revisar configuração
monitor.queue.review_add=Revisar/Adicionar executores
monitor.queue.settings.title=Configurações do conjunto
monitor.queue.settings.maxnumberworkers=Número máximo de executores
monitor.queue.settings.maxnumberworkers.placeholder=Atualmente %[1]d

View File

@ -181,7 +181,7 @@ network_error=Erro de rede
[startpage]
app_desc=Um serviço Git auto-hospedado e fácil de usar
install=Fácil de instalar
install_desc=Corra, simplesmente, <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">o ficheiro binário executável</a> para a sua plataforma, despache-o com o <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a>, ou obtenha-o sob a forma de <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">pacote</a>.
install_desc=Corra, simplesmente, <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.com/installation/install-from-binary">o ficheiro binário executável</a> para a sua plataforma, despache-o com o <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a>, ou obtenha-o sob a forma de <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.com/installation/install-from-package">pacote</a>.
platform=Multiplataforma
platform_desc=Gitea corre em qualquer plataforma onde possa compilar em linguagem <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a>: Windows, macOS, Linux, ARM, etc. Escolha a sua preferida!
lightweight=Leve
@ -203,7 +203,7 @@ db_name=Nome da base de dados
db_schema=Esquema
db_schema_helper=Deixe em branco para ficar o predefinido da base de dados ("público").
ssl_mode=SSL
path=Caminho
path=Localização
sqlite_helper=Localização do ficheiro da base de dados em SQLite3.<br>Insira um caminho absoluto se corre o Gitea como um serviço.
reinstall_error=Está a tentar instalar numa base de dados do Gitea já existente
reinstall_confirm_message=Reinstalar com uma base de dados do Gitea já existente pode causar múltiplos problemas. Na maioria dos casos deve usar o seu "app.ini" existente para correr o Gitea. Se souber o que está a fazer, confirme o seguinte:
@ -278,7 +278,7 @@ sqlite3_not_available=Esta versão do Gitea não suporta o SQLite3. Descarregue
invalid_db_setting=As configurações da base de dados são inválidas: %v
invalid_db_table=A tabela "%s" da base de dados é inválida: %v
invalid_repo_path=A localização base dos repositórios é inválida: %v
invalid_app_data_path=O caminho dos dados da aplicação é inválido: %v
invalid_app_data_path=A localização dos dados da aplicação é inválido: %v
run_user_not_match=O nome de utilizador para 'executar como' não é o nome de utilizador corrente: %s → %s
internal_token_failed=Falha ao gerar o código interno: %v
secret_key_failed=Falha ao gerar a chave secreta: %v
@ -317,6 +317,7 @@ filter_by_team_repositories=Filtrar por repositórios da equipa
feed_of=`Fonte de "%s"`
show_archived=Arquivado
archived=Arquivado
show_both_archived_unarchived=Apresentando arquivados e não arquivados
show_only_archived=Apresentando somente os arquivados
show_only_unarchived=Apresentando somente os não arquivados
@ -378,6 +379,7 @@ email_not_associate=O endereço de email não está associado a qualquer conta.
send_reset_mail=Enviar email de recuperação da conta
reset_password=Recuperação de conta
invalid_code=O seu código de confirmação é inválido ou expirou.
invalid_code_forgot_password=O seu código de confirmação é inválido ou já expirou. Clique <a href="%s">aqui</a> para iniciar uma nova sessão.
invalid_password=A sua senha não corresponde à senha que foi usada para criar a conta.
reset_password_helper=Recuperar conta
reset_password_wrong_user=Tem conta iniciada como %s, mas a ligação de recuperação de conta é para %s
@ -510,7 +512,7 @@ NewBranchName=Novo nome de ramo
CommitSummary=Sumário do cometimento
CommitMessage=Mensagem do cometimento
CommitChoice=Escolha do cometimento
TreeName=Caminho do ficheiro
TreeName=Localização do ficheiro
Content=Conteúdo
SSPISeparatorReplacement=Separador
@ -598,7 +600,6 @@ overview=Panorama geral
following=Que segue
follow=Seguir
unfollow=Deixar de seguir
heatmap.loading=Carregando mapa de laboração…
user_bio=Biografia
disabled_public_activity=Este utilizador desabilitou a visibilidade pública do trabalho.
email_visibility.limited=O seu endereço de email é visível para todos os utilizadores autenticados
@ -680,7 +681,7 @@ choose_new_avatar=Escolher um novo avatar
update_avatar=Substituir avatar
delete_current_avatar=Eliminar o avatar corrente
uploaded_avatar_not_a_image=O ficheiro carregado não é uma imagem.
uploaded_avatar_is_too_big=O ficheiro carregado excedeu o tamanho máximo.
uploaded_avatar_is_too_big=O tamanho do ficheiro carregado (%d KiB) excede o tamanho máximo (%d KiB).
update_avatar_success=O seu avatar foi substituído.
update_user_avatar_success=O avatar do utilizador foi modificado.
@ -841,7 +842,7 @@ create_oauth2_application_button=Criar aplicação
create_oauth2_application_success=Criou com sucesso uma nova aplicação OAuth2.
update_oauth2_application_success=Modificou com sucesso a aplicação OAuth2.
oauth2_application_name=Nome da aplicação
oauth2_confidential_client=Cliente confidencial. Escolha para aplicações que mantêm o segredo confidencial, tais como aplicações web. Não escolha para aplicações nativas, incluindo aplicações para computador e aplicações móveis.
oauth2_confidential_client=Cliente confidencial. Escolha esta opção para aplicações que mantêm o segredo confidencial, tais como aplicações web. Não escolha esta opção para aplicações nativas, incluindo aplicações para computador e aplicações móveis.
oauth2_redirect_uris=URIs de reencaminhamento. Use uma linha por URI.
save_application=Guardar
oauth2_client_id=ID do cliente
@ -970,6 +971,7 @@ trust_model_helper_collaborator_committer=Colaborador + Autor do cometimento: Co
trust_model_helper_default=Padrão: Usar o modelo de confiança padrão para esta instalação
create_repo=Criar repositório
default_branch=Ramo principal
default_branch_label=predefinido
default_branch_helper=O ramo principal é o ramo base para pedidos de integração e cometimentos.
mirror_prune=Podar
mirror_prune_desc=Remover referências obsoletas de seguimento remoto
@ -1050,7 +1052,7 @@ migrate_options_mirror_helper=Este repositório irá ser uma réplica
migrate_options_lfs=Migrar ficheiros LFS
migrate_options_lfs_endpoint.label=Destino LFS
migrate_options_lfs_endpoint.description=A migração irá tentar usar o seu controlo remoto do Git para <a target="_blank" rel="noopener noreferrer" href="%s">determinar o servidor LFS</a>. Também pode especificar um destino personalizado se os dados do repositório LFS forem armazenados noutro lugar.
migrate_options_lfs_endpoint.description.local=Um caminho de servidor local também é suportado.
migrate_options_lfs_endpoint.description.local=Uma localização de servidor local também é suportada.
migrate_options_lfs_endpoint.placeholder=Se for deixado em branco, o destino será determinado a partir do URL do clone
migrate_items=Itens da migração
migrate_items_wiki=Wiki
@ -1064,10 +1066,10 @@ migrate_repo=Migrar o repositório
migrate.clone_address=Migrar / clonar a partir do URL
migrate.clone_address_desc=O URL de clonagem HTTP(S) ou Git de um repositório existente
migrate.github_token_desc=Pode colocar aqui um ou mais códigos separados por vírgulas para tornar mais rápida a migração, para compensar a limitação de velocidade da API do GitHub. AVISO: O abuso desta funcionalidade poderá violar a política do seu fornecedor de serviço e levar ao bloqueio da conta.
migrate.clone_local_path=ou um caminho no servidor local
migrate.clone_local_path=ou uma localização no servidor local
migrate.permission_denied=Não está autorizado a importar repositórios locais.
migrate.permission_denied_blocked=Não pode importar de servidores não permitidos, por favor peça ao administrador para verificar as configurações ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS.
migrate.invalid_local_path=O caminho local é inválido. Não existe ou não é uma pasta.
migrate.invalid_local_path=A localização local é inválida. Não existe ou não é uma pasta.
migrate.invalid_lfs_endpoint=O destino LFS não é válido.
migrate.failed=A migração falhou: %v
migrate.migrate_items_options=É necessário um código de acesso para migrar itens adicionais
@ -1280,6 +1282,11 @@ commit.cherry-pick=Escolher a dedo
commit.cherry-pick-header=Escolher a dedo: %s
commit.cherry-pick-content=Escolha o ramo para onde vai escolher a dedo:
commitstatus.error=Erro
commitstatus.failure=Falha
commitstatus.pending=Pendente
commitstatus.success=Sucesso
ext_issues=Acesso a questões externas
ext_issues.desc=Ligação para um rastreador de questões externo.
@ -1475,9 +1482,18 @@ issues.ref_reopening_from=`<a href="%[3]s">referiu um pedido de integração %[4
issues.ref_closed_from=`<a href="%[3]s">encerrou esta questão %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">reabriu esta questão %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=`de %[1]s`
issues.poster=Remetente
issues.collaborator=Colaborador(a)
issues.owner=Proprietário(a)
issues.author=Autor(a)
issues.author_helper=Este utilizador é o autor.
issues.role.owner=Proprietário(a)
issues.role.owner_helper=Este utilizador é o proprietário deste repositório.
issues.role.member=Membro
issues.role.member_helper=Este utilizador é um membro da organização que é proprietária deste repositório.
issues.role.collaborator=Colaborador
issues.role.collaborator_helper=Este utilizador foi convidado a colaborar neste repositório.
issues.role.first_time_contributor=Contribuidor pela primeira vez
issues.role.first_time_contributor_helper=Esta é a primeira contribuição deste utilizador para o repositório.
issues.role.contributor=Contribuidor
issues.role.contributor_helper=Este utilizador cometeu anteriormente para o repositório.
issues.re_request_review=Voltar a solicitar revisão
issues.is_stale=Houve modificações neste pedido de integração posteriormente a esta revisão
issues.remove_request_review=Remover solicitação de revisão
@ -1748,6 +1764,7 @@ pulls.rebase_conflict_summary=Mensagem de erro
pulls.unrelated_histories=A integração falhou: O topo da integração e a base não partilham um histórico comum. Dica: Tente uma estratégia diferente
pulls.merge_out_of_date=Falhou a integração: Enquanto estava a gerar a integração, a base foi modificada. Dica: Tente de novo.
pulls.head_out_of_date=Falhou a integração: Enquanto estava a gerar a integração, o topo foi modificado. Dica: Tente de novo.
pulls.has_merged=Falhou: A integração constante do pedido foi executada, não pode integrar novamente nem modificar o ramo alvo.
pulls.push_rejected=A integração falhou: O envio foi rejeitado. Reveja os Automatismos do Git neste repositório.
pulls.push_rejected_summary=Mensagem completa de rejeição
pulls.push_rejected_no_message=A integração falhou: O envio foi rejeitado mas não houve qualquer mensagem remota.<br>Reveja os Automatismos do Git para este repositório
@ -1815,8 +1832,8 @@ milestones.edit_success=A etapa "%s" foi modificada.
milestones.deletion=Eliminar etapa
milestones.deletion_desc=Se eliminar uma etapa, irá removê-la de todas as questões relacionadas. Quer continuar?
milestones.deletion_success=A etapa foi eliminada.
milestones.filter_sort.closest_due_date=Data de vencimento mais próxima
milestones.filter_sort.furthest_due_date=Data de vencimento mais distante
milestones.filter_sort.earliest_due_data=Data de vencimento mais próxima
milestones.filter_sort.latest_due_date=Data de vencimento mais distante
milestones.filter_sort.least_complete=Menos completo
milestones.filter_sort.most_complete=Mais completo
milestones.filter_sort.most_issues=Mais questões
@ -2314,7 +2331,7 @@ settings.tags.protection.allowed.teams=Equipas com permissão
settings.tags.protection.allowed.noone=Ninguém
settings.tags.protection.create=Proteger etiqueta
settings.tags.protection.none=Não há etiquetas protegidas.
settings.tags.protection.pattern.description=Pode usar um só nome ou um padrão glob ou uma expressão regular para corresponder a várias etiquetas. Para mais informações leia o <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/protected-tags/">guia das etiquetas protegidas</a>.
settings.tags.protection.pattern.description=Pode usar um só nome ou um padrão glob ou uma expressão regular para corresponder a várias etiquetas. Para mais informações leia o <a target="_blank" rel="noopener" href="https://docs.gitea.com/usage/protected-tags">guia das etiquetas protegidas</a>.
settings.bot_token=Código do bot
settings.chat_id=ID do diálogo
settings.thread_id=ID da discussão
@ -2340,16 +2357,16 @@ settings.lfs_filelist=Ficheiros LFS armazenados neste repositório
settings.lfs_no_lfs_files=Não existem quaisquer ficheiros LFS armazenados neste repositório
settings.lfs_findcommits=Procurar cometimentos
settings.lfs_lfs_file_no_commits=Não foram encontrados quaisquer cometimentos para este ficheiro LFS
settings.lfs_noattribute=Este caminho não tem o atributo bloqueável no ramo principal
settings.lfs_noattribute=Esta localização não tem o atributo bloqueável no ramo principal
settings.lfs_delete=Eliminar ficheiro LFS com o OID %s
settings.lfs_delete_warning=Eliminar um ficheiro LFS pode causar erros do tipo 'elemento não existe' no checkout. Tem a certeza?
settings.lfs_findpointerfiles=Procurar ficheiros apontadores
settings.lfs_locks=Bloqueios
settings.lfs_invalid_locking_path=Caminho inválido: %s
settings.lfs_invalid_locking_path=Localização inválida: %s
settings.lfs_invalid_lock_directory=Não foi possível bloquear a pasta: %s
settings.lfs_lock_already_exists=Já existe um bloqueio: %s
settings.lfs_lock=Bloquear
settings.lfs_lock_path=Caminho de ficheiro a bloquear...
settings.lfs_lock_path=Localização do ficheiro a bloquear...
settings.lfs_locks_no_locks=Sem bloqueios
settings.lfs_lock_file_no_exist=O ficheiro bloqueado não existe no ramo principal
settings.lfs_force_unlock=Forçar desbloqueio
@ -2714,6 +2731,7 @@ dashboard.reinit_missing_repos=Reinicializar todos os repositórios Git em falta
dashboard.sync_external_users=Sincronizar dados externos do utilizador
dashboard.cleanup_hook_task_table=Limpar tabela hook_task
dashboard.cleanup_packages=Limpar pacotes expirados
dashboard.cleanup_actions=Registos expirados e artefactos das operações de limpeza
dashboard.server_uptime=Tempo em funcionamento contínuo do servidor
dashboard.current_goroutine=Goroutines em execução
dashboard.current_memory_usage=Utilização de memória corrente
@ -2751,7 +2769,9 @@ dashboard.gc_lfs=Recolher lixo dos meta-elementos LFS
dashboard.stop_zombie_tasks=Parar tarefas zombies
dashboard.stop_endless_tasks=Parar tarefas intermináveis
dashboard.cancel_abandoned_jobs=Cancelar trabalhos abandonados
dashboard.start_schedule_tasks=Iniciar tarefas de agendamento
dashboard.sync_branch.started=Sincronização de ramos iniciada
dashboard.rebuild_issue_indexer=Reconstruir indexador de questões
users.user_manage_panel=Gestão das contas de utilizadores
users.new_account=Criar conta de utilizador
@ -2760,6 +2780,9 @@ users.full_name=Nome completo
users.activated=Em uso
users.admin=Admin.
users.restricted=Restrita
users.reserved=Reservado
users.bot=Bot
users.remote=Remoto
users.2fa=Autenticação em dois passos
users.repos=Repos.
users.created=Criada
@ -2806,6 +2829,7 @@ users.list_status_filter.is_prohibit_login=Proibir início de sessão
users.list_status_filter.not_prohibit_login=Permitir início de sessão
users.list_status_filter.is_2fa_enabled=Autenticação em dois passos habilitada
users.list_status_filter.not_2fa_enabled=Autenticação em dois passos desabilitada
users.details=Detalhes do utilizador
emails.email_manage_panel=Gestão de endereços de email do utilizador
emails.primary=Principal
@ -2853,12 +2877,12 @@ packages.size=Tamanho
packages.published=Publicado
defaulthooks=Automatismos web predefinidos
defaulthooks.desc=Os automatismos web fazem pedidos HTTP POST automaticamente a um servidor quando são despoletados determinados eventos do Gitea. Os automatismos web definidos aqui são os predefinidos e serão copiados para todos os novos repositórios. Leia mais no <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">guia de automatismos web</a>.
defaulthooks.desc=Os automatismos web fazem pedidos HTTP POST automaticamente a um servidor quando são despoletados determinados eventos do Gitea. Os automatismos web definidos aqui são os predefinidos e serão copiados para todos os novos repositórios. Leia mais no <a target="_blank" rel="noopener" href="https://docs.gitea.com/usage/webhooks">guia de automatismos web</a>.
defaulthooks.add_webhook=Adicionar automatismo web predefinido
defaulthooks.update_webhook=Modificar automatismo web predefinido
systemhooks=Automatismos web do sistema
systemhooks.desc=Os automatismos web fazem pedidos HTTP POST automaticamente a um servidor quando são despoletados determinados eventos do Gitea. Os automatismos web definidos aqui irão operar em todos os repositórios deste sistema, por isso tenha em consideração quaisquer implicações de desempenho que isso possa ter. Leia mais no <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">guia de automatismos web</a>.
systemhooks.desc=Os automatismos web fazem pedidos HTTP POST automaticamente a um servidor quando são despoletados determinados eventos do Gitea. Os automatismos web definidos aqui irão operar em todos os repositórios deste sistema, por isso tenha em consideração quaisquer implicações de desempenho que isso possa ter. Leia mais no <a target="_blank" rel="noopener" href="https://docs.gitea.com/usage/webhooks">guia de automatismos web</a>.
systemhooks.add_webhook=Adicionar automatismo web do sistema
systemhooks.update_webhook=Modificar automatismo web do sistema
@ -2963,7 +2987,7 @@ auths.tip.google_plus=Obtenha credenciais de cliente OAuth2 a partir da consola
auths.tip.openid_connect=Use o URL da descoberta de conexão OpenID (<server>/.well-known/openid-configuration) para especificar os extremos
auths.tip.twitter=`Vá a https://dev.twitter.com/apps, crie uma aplicação e certifique-se de que está habilitada a opção "Allow this application to be used to Sign in with Twitter"`
auths.tip.discord=Registe uma nova aplicação em https://discordapp.com/developers/applications/me
auths.tip.gitea=Registe uma nova aplicação OAuth2. O guia pode ser encontrado em https://docs.gitea.io/en-us/oauth2-provider/
auths.tip.gitea=Registe uma nova aplicação OAuth2. O guia pode ser encontrado em https://docs.gitea.com/development/oauth2-provider
auths.tip.yandex=`Crie uma nova aplicação em https://oauth.yandex.com/client/new. Escolha as seguintes permissões da secção "Yandex.Passport API": "Acesso ao endereço de email", "Acesso ao avatar do utilizador" e "Acesso ao nome de utilizador, nome e sobrenome, género"`
auths.tip.mastodon=Insira o URL de uma instância personalizada para a instância do mastodon com que se pretende autenticar (ou então use a predefinida)
auths.edit=Editar fonte de autenticação
@ -2985,7 +3009,7 @@ config.server_config=Configuração do servidor
config.app_name=Título do sítio
config.app_ver=Versão do Gitea
config.app_url=URL base do Gitea
config.custom_conf=Caminho do ficheiro de configuração
config.custom_conf=Localização do ficheiro de configuração
config.custom_file_root_path=Localização dos ficheiros personalizados
config.domain=Domínio do servidor
config.offline_mode=Modo local
@ -2993,7 +3017,7 @@ config.disable_router_log=Desabilitar registos do encaminhador
config.run_user=Executa com este nome de utilizador
config.run_mode=Modo de execução
config.git_version=Versão do Git
config.app_data_path=Adicionar caminho dos dados
config.app_data_path=Localização dos dados da aplicação
config.repo_root_path=Localização dos repositórios
config.lfs_root_path=Localização dos LFS
config.log_file_root_path=Localização dos registos
@ -3024,7 +3048,7 @@ config.db_name=Nome
config.db_user=Nome de utilizador
config.db_schema=Esquema
config.db_ssl_mode=SSL
config.db_path=Caminho
config.db_path=Localização
config.service_config=Configuração do serviço
config.register_email_confirm=Exigir confirmação de email para se inscrever
@ -3063,7 +3087,7 @@ config.mailer_smtp_addr=Endereço SMTP
config.mailer_smtp_port=Porto do SMTP
config.mailer_user=Utilizador
config.mailer_use_sendmail=Usar o sendmail
config.mailer_sendmail_path=Caminho do sendmail
config.mailer_sendmail_path=Localização do sendmail
config.mailer_sendmail_args=Argumentos extras para o sendmail
config.mailer_sendmail_timeout=Tempo limite do Sendmail
config.mailer_use_dummy=Fictício
@ -3145,10 +3169,10 @@ monitor.queue.name=Nome
monitor.queue.type=Tipo
monitor.queue.exemplar=Tipo de exemplar
monitor.queue.numberworkers=Número de trabalhadores
monitor.queue.activeworkers=Trabalhadores operantes
monitor.queue.maxnumberworkers=Número máximo de trabalhadores
monitor.queue.numberinqueue=Número na fila
monitor.queue.review=Rever configuração
monitor.queue.review_add=Rever/Adicionar trabalhadores
monitor.queue.review_add=Rever / Adicionar trabalhadores
monitor.queue.settings.title=Configurações do agregado
monitor.queue.settings.desc=Agregados crescem dinamicamente em resposta aos bloqueios da sua fila de trabalhadores.
monitor.queue.settings.maxnumberworkers=Número máximo de trabalhadores
@ -3177,7 +3201,7 @@ notices.delete_success=As notificações do sistema foram eliminadas.
[action]
create_repo=criou o repositório <a href="%s">%s</a>
rename_repo=renomeou o repositório de <code>%[1]s</code> para <a href="%[2]s">%[3]s</a>
commit_repo=enviado para <a href="%[2]s">%[3]s</a> em <a href="%[1]s">%[4]s</a>
commit_repo=enviou para <a href="%[2]s">%[3]s</a> em <a href="%[1]s">%[4]s</a>
create_issue=`abriu a questão <a href="%[1]s">%[3]s#%[2]s</a>`
close_issue=`fechou a questão <a href="%[1]s">%[3]s#%[2]s</a>`
reopen_issue=`reabriu a questão <a href="%[1]s">%[3]s#%[2]s</a>`
@ -3483,6 +3507,7 @@ runners.reset_registration_token_success=O código de incrição do executor foi
runs.all_workflows=Todas as sequências de trabalho
runs.commit=Cometimento
runs.scheduled=Agendadas
runs.pushed_by=enviado por
runs.invalid_workflow_helper=O ficheiro de configuração da sequência de trabalho é inválido. Verifique o seu ficheiro de configuração: %s
runs.no_matching_runner_helper=Não há qualquer executor que corresponda: %s
@ -3497,6 +3522,7 @@ workflow.disable=Desabilitar sequência de trabalho
workflow.disable_success=A sequência de trabalho '%s' foi desabilitada com sucesso.
workflow.enable=Habilitar sequência de trabalho
workflow.enable_success=A sequência de trabalho '%s' foi habilitada com sucesso.
workflow.disabled=A sequência de trabalho está desabilitada.
need_approval_desc=É necessária aprovação para executar sequências de trabalho para a derivação do pedido de integração.

View File

@ -175,7 +175,6 @@ network_error=Ошибка сети
[startpage]
app_desc=Удобный сервис собственного хостинга репозиториев Git
install=Простой в установке
install_desc=Просто <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">запустите исполняемый файл</a> для вашей платформы, разверните через <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a>, или установите <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">с помощью менеджера пакетов</a>.
platform=Кроссплатформенный
platform_desc=Gitea работает на любой платформе, поддерживаемой <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a>: Windows, macOS, Linux, ARM и т. д. Выбирайте, что вам больше нравится!
lightweight=Легковесный
@ -308,6 +307,7 @@ filter_by_team_repositories=Фильтровать по репозиториям
feed_of=Лента «%s»
show_archived=Архивировано
archived=Архивировано
show_both_archived_unarchived=Показаны архивированные и разархивированные
show_only_archived=Показаны только архивированные
show_only_unarchived=Показаны только разархивированные
@ -582,7 +582,6 @@ overview=Обзор
following=Подписки
follow=Подписаться
unfollow=Отписаться
heatmap.loading=Загрузка карты активности…
user_bio=О себе
disabled_public_activity=Этот пользователь отключил публичную видимость активности.
email_visibility.limited=Ваш адрес электронной почты виден всем выполнившим вход пользователям
@ -655,7 +654,6 @@ choose_new_avatar=Выбрать новый аватар
update_avatar=Обновить аватар
delete_current_avatar=Удалить текущий аватар
uploaded_avatar_not_a_image=Загружаемый файл не является изображением.
uploaded_avatar_is_too_big=Загруженный файл превысил максимальный размер.
update_avatar_success=Ваш аватар был изменен.
update_user_avatar_success=Аватар пользователя обновлён.
@ -1216,6 +1214,11 @@ commit.cherry-pick=Перенос
commit.cherry-pick-header=Cherry-pick: %s
commit.cherry-pick-content=Выбрать ветку для переноса:
commitstatus.error=Ошибка
commitstatus.failure=Неудача
commitstatus.pending=Ожидание
commitstatus.success=Успешно
ext_issues=Доступ к внешним задачам
ext_issues.desc=Ссылка на внешнюю систему отслеживания ошибок.
@ -1407,9 +1410,9 @@ issues.ref_reopening_from=`<a href="%[3]s">сослался(ась) на зап
issues.ref_closed_from=`<a href="%[3]s">закрыл этот запрос %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">переоткрыл эту задачу %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=`из %[1]s`
issues.poster=Автор
issues.collaborator=Соавтор
issues.owner=Владелец
issues.author=Автор
issues.role.owner=Владелец
issues.role.member=Участник
issues.re_request_review=Повторить запрос на отзыв
issues.is_stale=Со времени этого обзора в этот PR были внесены некоторые изменения
issues.remove_request_review=Удалить запрос на отзыв
@ -1724,8 +1727,6 @@ milestones.edit_success=Этап «%s» обновлён.
milestones.deletion=Удалить этап
milestones.deletion_desc=Удаление этапа приведет к его удалению из всех связанных задач. Продолжить?
milestones.deletion_success=Этап успешно удалён.
milestones.filter_sort.closest_due_date=Ближайшее по дате
milestones.filter_sort.furthest_due_date=Дальнее по дате
milestones.filter_sort.least_complete=Менее полное
milestones.filter_sort.most_complete=Более полное
milestones.filter_sort.most_issues=Большинство задач
@ -2196,7 +2197,6 @@ settings.tags.protection.allowed.teams=Разрешенные команды
settings.tags.protection.allowed.noone=Ни один
settings.tags.protection.create=Защитить тег
settings.tags.protection.none=Нет защищенных тегов.
settings.tags.protection.pattern.description=Вы можете использовать одно имя или глоб-шаблон или регулярное выражение, для выбора нескольких тегов. Подробнее о <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/protected-tags/">защищенных тэгах</a>.
settings.bot_token=Токен для бота
settings.chat_id=ID чата
settings.matrix.homeserver_url=URL домашнего сервера
@ -2710,12 +2710,10 @@ packages.size=Размер
packages.published=Опубликовано
defaulthooks=Стандартные Веб-хуки
defaulthooks.desc=Веб-хуки автоматически делают HTTP-POST запросы на сервер, когда вызываются определенные события Gitea. Веб-хуки, определённые здесь, по умолчанию и будут скопированы во все новые репозитории. Подробнее читайте в <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">руководстве по веб-хукам</a>.
defaulthooks.add_webhook=Добавить стандартный Веб-хук
defaulthooks.update_webhook=Обновить стандартный Веб-хук
systemhooks=Системные веб-хуки
systemhooks.desc=Веб-хуки автоматически делают HTTP-POST запросы на сервер, когда вызываются определённые события Gitea. Определённые веб-хуки будут действовать на всех репозиториях системы, поэтому пожалуйста, учитывайте любые последствия для производительности. Подробнее читайте в <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">руководстве по веб-хукам</a>.
systemhooks.add_webhook=Добавить системный веб-хук
systemhooks.update_webhook=Обновить системный веб-хук
@ -2819,7 +2817,6 @@ auths.tip.google_plus=Получите учётные данные клиент
auths.tip.openid_connect=Используйте OpenID Connect Discovery URL (<server>/.well-known/openid-configuration) для автоматической настройки входа OAuth
auths.tip.twitter=Перейдите на https://dev.twitter.com/apps, создайте приложение и убедитесь, что включена опция «Разрешить это приложение для входа в систему с помощью Twitter»
auths.tip.discord=Добавьте новое приложение на https://discordapp.com/developers/applications/me
auths.tip.gitea=Зарегистрировать новое приложение OAuth2. Руководство можно найти на https://docs.gitea.io/ru-us/oauth2-provider/
auths.tip.yandex=`Создайте новое приложение по адресу https://oauth.yandex.com/client/new. В разделе "API Яндекс.Паспорта" выберите следующие разрешения: "Доступ к адресу электронной почты", "Доступ к аватару пользователя" и "Доступ к имени пользователя, фамилии и полу"`
auths.tip.mastodon=Введите пользовательский URL экземпляра для экземпляра mastodon, с которым вы хотите аутентифицироваться (или использовать его по умолчанию)
auths.edit=Обновить параметры аутентификации
@ -3002,8 +2999,6 @@ monitor.queue.exemplar=Тип образца
monitor.queue.numberworkers=Количество рабочих
monitor.queue.maxnumberworkers=Максимальное количество рабочих
monitor.queue.numberinqueue=Позиция в очереди
monitor.queue.review=Просмотр конфигурации
monitor.queue.review_add=Просмотреть/добавить рабочих
monitor.queue.settings.title=Настройки пула
monitor.queue.settings.desc=Пулы увеличиваются динамически в ответ на блокировку очередей своих рабочих.
monitor.queue.settings.maxnumberworkers=Максимальное количество рабочих

View File

@ -115,7 +115,6 @@ missing_csrf=නරක ඉල්ලීම: CSRF ටෝකන් නොමැත
[startpage]
app_desc=වේදනාකාරී, ස්වයං-සත්කාරක Git සේවාවක්
install=ස්ථාපනයට පහසුය
install_desc=සරලවම <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">ඔබේ වේදිකාව සඳහා ද්විමය</a> ධාවනය කරන්න, <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">ඩොකර්</a>සමඟ නැව්ගත කරන්න, නැතහොත් එය ලබා ගන්න <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">ඇසුරුම්</a>.
platform=හරස් වේදිකාව
platform_desc=Gitea ඕනෑම තැනක ධාවනය <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a> සඳහා සම්පාදනය කළ හැකිය: වින්ඩෝස්, මැකෝස්, ලිනක්ස්, ARM, ආදිය ඔබ ආදරය කරන එකක් තෝරන්න!
lightweight=සැහැල්ලු
@ -230,6 +229,7 @@ filter=වෙනත් පෙරහන්
filter_by_team_repositories=කණ්ඩායම් කෝෂ්ඨ අනුව පෙරන්න
show_archived=සංරක්ෂිත
archived=සංරක්ෂිත
show_both_archived_unarchived=සංරක්ෂිත සහ අක්රීය දෙකම පෙන්වීම
show_only_archived=සංරක්ෂිත පමණක් පෙන්වයි
show_only_unarchived=සංරක්ෂිත පමණක් පෙන්වීම
@ -465,7 +465,6 @@ overview=දළ විශ්ලේෂණය
following=පහත සඳහන්
follow=අනුගමනය කරන්න
unfollow=අනුගමනය නොකරන්න
heatmap.loading=තාප සිතියම් පූරණය…
user_bio=චරිතාපදානය
disabled_public_activity=මෙම පරිශීලකයා ක්රියාකාරකම්වල මහජන දෘශ්යතාව අක්රීය කර ඇත.
@ -513,7 +512,6 @@ choose_new_avatar=නව අවතාරය තෝරන්න
update_avatar=යාවත්කාලීන අවතාර්
delete_current_avatar=වත්මන් අවතාරය මකන්න
uploaded_avatar_not_a_image=උඩුගත කරන ලද ගොනුව රූපයක් නොවේ.
uploaded_avatar_is_too_big=උඩුගත කරන ලද ගොනුව උපරිම ප්රමාණය ඉක්මවා ඇත.
update_avatar_success=ඔබගේ අවතාරය යාවත්කාලීන කර ඇත.
update_user_avatar_success=පරිශීලකයාගේ අවතාරය යාවත්කාලීන කර ඇත.
@ -960,6 +958,9 @@ commits.signed_by_untrusted_user_unmatched=කමිටුව නොගැලප
commits.gpg_key_id=ජීපීජී යතුරෙහි හැඳු.
commitstatus.error=දෝෂයකි
commitstatus.pending=වංගු
ext_issues.desc=බාහිර නිකුතුවකට සම්බන්ධ වන්න ට්රැකර්.
projects=ව්‍යාපෘති
@ -1104,9 +1105,8 @@ issues.ref_reopening_from=<a href="%[3]s">මෙම ගැටළුව නැව
issues.ref_closed_from=<a href="%[3]s">මෙම නිකුතුව%[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>
issues.ref_reopened_from=<a href="%[3]s">මෙම නිකුතුව%[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>නැවත විවෘත කරන ලදි
issues.ref_from=`හිම%[1]s`
issues.poster=පෝස්ටර්
issues.collaborator=සහයෝගීතාව
issues.owner=හිමිකරු
issues.role.owner=හිමිකරු
issues.role.member=සාමාජික
issues.re_request_review=නැවත ඉල්ලීම සමාලෝචනය
issues.is_stale=මෙම සමාලෝචනයේ සිට මෙම මහජන සම්බන්ධතා සඳහා වෙනස්කම් සිදුවී ඇත
issues.remove_request_review=සමාලෝචන ඉල්ලීම ඉවත් කරන්න
@ -1369,8 +1369,6 @@ milestones.modify=සන්ධිස්ථානයක් යාවත්කා
milestones.deletion=සන්ධිස්ථානය මකන්න
milestones.deletion_desc=සන්ධිස්ථානයක් මකා දැමීම සම්බන්ධ සියලු ගැටළු වලින් එය ඉවත් කරයි. දිගටම?
milestones.deletion_success=සන්ධිස්ථානය මකා දමා ඇත.
milestones.filter_sort.closest_due_date=ආසන්නතම නියමිත දිනය
milestones.filter_sort.furthest_due_date=වඩාත්ම නියමිත දිනය
milestones.filter_sort.least_complete=අවම වශයෙන් සම්පූර්ණයි
milestones.filter_sort.most_complete=වඩාත්ම සම්පූර්ණයි
milestones.filter_sort.most_issues=බොහෝ ප්රශ්න
@ -1759,7 +1757,6 @@ settings.tags.protection.allowed.teams=ඉඩ දී ඇති කණ්ඩා
settings.tags.protection.allowed.noone=එකක් නැත
settings.tags.protection.create=ටැග ආරක්ෂා
settings.tags.protection.none=ආරක්ෂිත ටැග් නොමැත.
settings.tags.protection.pattern.description=බහු ටැග් වලට ගැලපෙන පරිදි ඔබට තනි නමක් හෝ ග්ලෝබ් රටාවක් හෝ සාමාන්ය ප්රකාශනයක් භාවිතා කළ හැකිය. තව දුරටත් කියවන්න <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/protected-tags/">ආරක්ෂිත ටැග් මාර්ගෝපදේශය</a>.
settings.bot_token=බොට් ටෝකනය
settings.chat_id=චැට් හැඳුනුම්පත
settings.matrix.homeserver_url=හෝම්සර්වර් URL
@ -2199,12 +2196,10 @@ packages.repository=කෝෂ්ඨය
packages.size=ප්‍රමාණය
defaulthooks=පෙරනිමි වෙබ් කොකු
defaulthooks.desc=ඇතැම් Gitea සිදුවීම් අවුලුවාලන විට වෙබ් හූක්ස් ස්වයංක්රීයව සේවාදායකයකට HTTP පෝස්ට් ඉල්ලීම් කරයි. මෙහි අර්ථ දක්වා ඇති වෙබ්කොකු පැහැර හැරීම් වන අතර සියලු නව ගබඩාවන් වෙත පිටපත් කරනු ලැබේ. තව දුරටත් කියවන්න <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">වෙබ් කොකු මාර්ගෝපදේශය</a>.
defaulthooks.add_webhook=පෙරනිමි වෙබ් හූක් එකතු කරන්න
defaulthooks.update_webhook=පෙරනිමි වෙබ් හූක් යාවත්කාලීන කරන්න
systemhooks=වෙබ් කොකු පද්ධතිය
systemhooks.desc=ඇතැම් Gitea සිදුවීම් අවුලුවාලන විට වෙබ් හූක්ස් ස්වයංක්රීයව සේවාදායකයකට HTTP පෝස්ට් ඉල්ලීම් කරයි. මෙහි අර්ථ Webhooks පද්ධතිය මත සියලු ගබඩාවන් මත ක්රියා කරනු ඇත, ඒ නිසා මෙම ඇති විය හැකි ඕනෑම කාර්ය සාධන ඇඟවුම් සලකා බලන්න. තව දුරටත් කියවන්න <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">වෙබ් කොකු මාර්ගෝපදේශය</a>.
systemhooks.add_webhook=පද්ධතිය වෙබ්හූක් එකතු කරන්න
systemhooks.update_webhook=වෙබ්හූක් පද්ධතිය යාවත්කාලීන
@ -2293,7 +2288,6 @@ auths.tip.google_plus=ගූගල් API කොන්සෝලය වෙති
auths.tip.openid_connect=අන්ත ලක්ෂ්ය නියම කිරීම සඳහා OpenID Connect ඩිස්කවරි URL (<server>/.හොඳින් දැන /openid-වින්යාසය) භාවිතා කරන්න
auths.tip.twitter=https://dev.twitter.com/apps වෙත යන්න, යෙදුමක් සාදන්න සහ “මෙම යෙදුම ට්විටර් සමඟ පුරනය වීමට භාවිතා කිරීමට ඉඩ දෙන්න” විකල්පය සක්රීය කර ඇති බවට සහතික වන්න
auths.tip.discord=https://discordapp.com/developers/applications/me හි නව අයදුම්පතක් ලියාපදිංචි කරන්න
auths.tip.gitea=නව OUTU2 අයදුම්පතක් ලියාපදිංචි කරන්න. මාර්ගෝපදේශය https://docs.gitea.io/en-us/oauth2-provider/ හි සොයාගත හැකිය
auths.tip.yandex=https://oauth.yandex.com/client/new හි නව යෙදුමක් සාදන්න. “Yandex.Passport API” කොටසේ පහත සඳහන් අවසරයන් තෝරන්න: “විද්යුත් තැපැල් ලිපිනය වෙත ප්රවේශය”, “පරිශීලක අවතාර් වෙත ප්රවේශය” සහ “පරිශීලක නාමය, මුල් නම සහ වාසගම, ස්ත්රී පුරුෂ භාවය”
auths.tip.mastodon=ඔබට සත්යාපනය කිරීමට අවශ්ය mastodon උදාහරණයක් සඳහා අභිරුචි උදාහරණයක් URL එකක් ආදාන කරන්න (හෝ පෙරනිමි එකක් භාවිතා කරන්න)
auths.edit=සත්යාපන මූලාශ්රය සංස්කරණය කරන්න
@ -2452,8 +2446,6 @@ monitor.queue.type=වර්ගය
monitor.queue.exemplar=ආදර්ශ වර්ගය
monitor.queue.numberworkers=කම්කරුවන් සංඛ්යාව
monitor.queue.maxnumberworkers=මැක්ස් කම්කරු සංඛ්යාව
monitor.queue.review=සමාලෝචන වින්යාසය
monitor.queue.review_add=සමාලෝචනය/කම්කරුවන් එකතු කරන්න
monitor.queue.settings.title=තටාකය සැකසුම්
monitor.queue.settings.maxnumberworkers=මැක්ස් කම්කරුවන් සංඛ්යාව
monitor.queue.settings.maxnumberworkers.placeholder=වත්මන්%[1]d

View File

@ -130,7 +130,6 @@ network_error=Chyba siete
[startpage]
app_desc=Jednoducho prístupný vlastný Git
install=Jednoduchá inštalácia
install_desc=Jednoducho <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">spusťte binárku</a> pre vašu platformu, dodávanú ako <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a>, alebo ju získajte <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">ako balík</a>.
platform=Multiplatformový
platform_desc=Gitea beží všade kde je možné preložiť <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a>: Windows, macOS, Linux, ARM, a podobne. Vyberte si!
lightweight=Ľahká
@ -257,6 +256,7 @@ filter_by_team_repositories=Filtrovať podľa tímových repozitárov
feed_of=Informačný kanál „%s“
show_archived=Archivované
archived=Archivované
show_both_archived_unarchived=Zobrazujú sa archivované aj nearchivované
show_only_archived=Zobrazuje sa iba archivované
show_only_unarchived=Zobrazuje sa iba nearchivované
@ -501,7 +501,6 @@ projects=Projekty
following=Sledovaní
follow=Sledovať
unfollow=Zrušiť sledovanie
heatmap.loading=Načítanie teplotnej mapy…
user_bio=Životopis
disabled_public_activity=Tento používateľ zákázal verejnú viditeľnosť aktivity.
@ -565,7 +564,6 @@ choose_new_avatar=Vybrať nový avatar
update_avatar=Aktualizovať avatar
delete_current_avatar=Odstrániť aktuálny avatar
uploaded_avatar_not_a_image=Nahraný súbor nieje obrázok.
uploaded_avatar_is_too_big=Nahraný súbor prekročil maximálnu veľkosť.
update_avatar_success=Váš avatar sa aktualizoval.
update_user_avatar_success=Užívateľov avatar bol aktualizovaný.
@ -951,6 +949,8 @@ commit.cherry-pick=Cherry-pick
commit.cherry-pick-header=Cherry-pick: %s
commit.cherry-pick-content=Vyberte vetvu pre cherry-pick na:
commitstatus.error=Chyba
ext_issues=Prístup k externým úkolom
ext_issues.desc=Odkaz na externé sledovanie úkolov.
@ -996,7 +996,7 @@ issues.ref_closing_from=`<a href="%[3]s">odkazoval/a na pull request %[4]s, ktor
issues.ref_reopening_from=`<a href="%[3]s">odkazoval/a na pull request %[4]s, ktorý znovu otvorí tento úkol</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_closed_from=`<a href="%[3]s">uzavrel/a tento úkol %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">znovu otvoril/a tento úkol %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.owner=Vlastník
issues.role.owner=Vlastník
issues.re_request_review=Znovu požiadať o revíziu
issues.is_stale=Od tejto kontroly došlo k zmenám v tomto pull requeste
issues.remove_request_review=Odstrániť žiadosť o revíziu
@ -1213,12 +1213,10 @@ packages.owner=Vlastník
packages.repository=Repozitár
defaulthooks=Defaultné webhooky
defaulthooks.desc=Webhooky automaticky odosielajú požiadavky HTTP POST na server, keď sa spustia určité udalosti Gitea. Tu definované webhooky sú predvolené a skopírujú sa do všetkých nových repozitárov. Prečítajte si viac v <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">sprievodcovi webhookmi</a>.
defaulthooks.add_webhook=Pridať defaultný webhook
defaulthooks.update_webhook=Aktualizovať defaultný webhook
systemhooks=Systémové webhooky
systemhooks.desc=Webhooky automaticky odosielajú požiadavky HTTP POST na server, keď sa spustia určité udalosti Gitea. Tu definované webhooky budú pôsobiť na všetky repozitáre v systéme, takže zvážte akékoľvek dôsledky na výkon, ktoré to môže mať. Prečítajte si viac v <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">sprievodcovi webhookmi</a>.
systemhooks.add_webhook=Pridať systémový webhook
systemhooks.update_webhook=Aktualizovať defaultný webhook
@ -1253,8 +1251,6 @@ config.oauth_enabled=Povolené
monitor.process.cancel=Zrušiť proces
monitor.queue.review=Konfigurácia revidovania
monitor.queue.review_add=Revidovať/Pridať revidentov
[action]

View File

@ -103,7 +103,6 @@ name=Namn
[startpage]
app_desc=En smidig, självhostad Git-tjänst
install=Lätt att installera
install_desc=Helt enkelt <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">kör binären</a> för din plattform, skicka den med <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a>, eller få den <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">paketerad</a>.
platform=Plattformsoberoende
platform_desc=Gitea kan köra överallt där <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a> kan kompileras: Windows, macOS, Linux, ARM, etc. Välj den du gillar!
lightweight=Lättviktig
@ -216,6 +215,7 @@ search_repos=Hitta en utvecklingskatalog…
filter=Övriga Filter
show_archived=Arkiverade
archived=Arkiverade
show_both_archived_unarchived=Visar både arkiverade och icke arkiverade
show_only_archived=Visar endast arkiverade
show_only_unarchived=Visa endast icke arkiverade
@ -402,7 +402,6 @@ overview=Översikt
following=Följer
follow=Följ
unfollow=Sluta följa
heatmap.loading=Laddar färgdiagram…
user_bio=Biografi
disabled_public_activity=Den här användaren har inaktiverat den publika synligheten av aktiviteten.
@ -447,7 +446,6 @@ choose_new_avatar=Välj ny avatar
update_avatar=Uppdatera Avatar
delete_current_avatar=Tag bort aktuell avatar
uploaded_avatar_not_a_image=Den uppladdade filen är inte en bild.
uploaded_avatar_is_too_big=Den uppladdade filen överstiger den maximala filstorleken.
update_avatar_success=Din avatar har blivit uppdaterad.
change_password=Ändra Lösenordet
@ -815,6 +813,8 @@ commits.signed_by_untrusted_user_unmatched=Signerad av opålitlig användare som
commits.gpg_key_id=GPG-nyckel ID
commitstatus.pending=Väntande
ext_issues.desc=Länk till externt ärendehanteringssystem.
projects=Projekt
@ -948,9 +948,8 @@ issues.ref_reopening_from=`<a href="%[3]s">refererade till en pull-förfrågan %
issues.ref_closed_from=`<a href="%[3]s">stängde detta ärende %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">öpnnade detta ärende igen %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=`från %[1]s`
issues.poster=Skapare
issues.collaborator=Deltagare
issues.owner=Ägare
issues.role.owner=Ägare
issues.role.member=Medlem
issues.re_request_review=Begär omgranskning
issues.remove_request_review=Ta bort granskningsbegäran
issues.remove_request_review_block=Kan inte ta bort granskningsbegäran
@ -1144,8 +1143,6 @@ milestones.modify=Uppdatera milstolpe
milestones.deletion=Ta bort milstolpe
milestones.deletion_desc=Borttagning av en milstolpe tar bort den från samtliga relaterade ärende. Fortsätta?
milestones.deletion_success=Milstolpen har blivit borttagen.
milestones.filter_sort.closest_due_date=Närmaste förfallodatum
milestones.filter_sort.furthest_due_date=Mest avlägsna förfallodatum
milestones.filter_sort.least_complete=Minst klar
milestones.filter_sort.most_complete=Mest klar
milestones.filter_sort.most_issues=Mest ärenden
@ -1962,8 +1959,6 @@ monitor.queue.name=Namn
monitor.queue.type=Typ
monitor.queue.numberworkers=Antal arbetare
monitor.queue.maxnumberworkers=Max antal arbetare
monitor.queue.review=Granska konfiguration
monitor.queue.review_add=Granska/Lägg till arbetare
monitor.queue.settings.submit=Uppdatera inställningar
monitor.queue.settings.changed=Inställningar uppdaterade

View File

@ -181,7 +181,6 @@ network_error=Ağ hatası
[startpage]
app_desc=Zahmetsiz, kendi sunucunuzda barındırabileceğiniz Git servisi
install=Kurulumu kolay
install_desc=Platformunuz için <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">ikili dosyayı çalıştırın</a>, <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a> ile gönderin veya <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">paketleyin</a>.
platform=Farklı platformlarda çalışablir
platform_desc=Gitea <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a> ile derleme yapılabilecek her yerde çalışmaktadır: Windows, macOS, Linux, ARM, vb. Hangisini seviyorsanız onu seçin!
lightweight=Hafif
@ -317,6 +316,7 @@ filter_by_team_repositories=Takım depolarına göre süz
feed_of=`"%s" beslemesi`
show_archived=Arşivlenmiş
archived=Arşivlenmiş
show_both_archived_unarchived=Arşivlenenlerin ve arşivlenmeyenlerin tümü gösteriliyor
show_only_archived=Yalnızca arşivlenenler gösteriliyor
show_only_unarchived=Yalnızca arşivlenmeyenler gösteriliyor
@ -598,7 +598,6 @@ overview=Genel Bakış
following=Takip Edilenler
follow=Takip Et
unfollow=Takibi Bırak
heatmap.loading=Isı haritası yükleniyor…
user_bio=Biyografi
disabled_public_activity=Bu kullanıcı, etkinliğin herkese görünür olmasını devre dışı bıraktı.
email_visibility.limited=E-posta adresiniz giriş yapmış tüm kullanıcılar tarafından görünür
@ -680,7 +679,6 @@ choose_new_avatar=Yeni Avatar Seç
update_avatar=Profil Resmini Güncelle
delete_current_avatar=Güncel Avatarı Sil
uploaded_avatar_not_a_image=Yüklenen dosya bir resim dosyası değil.
uploaded_avatar_is_too_big=Yüklenen dosya maksimum boyutu aştı.
update_avatar_success=Profil resminiz değiştirildi.
update_user_avatar_success=Kullanıcının avatarı güncellendi.
@ -1280,6 +1278,11 @@ commit.cherry-pick=Cımbızla
commit.cherry-pick-header=Cımbızla: %s
commit.cherry-pick-content=Cımbızlamak için dal seçin:
commitstatus.error=Hata
commitstatus.failure=Başarısız
commitstatus.pending=Beklemede
commitstatus.success=Başarılı
ext_issues=Harici Konulara Erişim
ext_issues.desc=Dışsal konu takip sistemine bağla.
@ -1475,9 +1478,9 @@ issues.ref_reopening_from=`<a href="%[3]s">bir değişiklik isteğine referansta
issues.ref_closed_from=`<a href="%[3]s">bu konuyu kapat%[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">konuyu yeniden aç%[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=`%[1]s'den`
issues.poster=Poster
issues.collaborator=Katkıcı
issues.owner=Sahibi
issues.author=Yazar
issues.role.owner=Sahibi
issues.role.member=Üye
issues.re_request_review=İncelemeyi yeniden iste
issues.is_stale=Bu incelemeden bu yana bu istekte değişiklikler oldu
issues.remove_request_review=İnceleme isteğini kaldır
@ -1815,8 +1818,6 @@ milestones.edit_success=`"%s" dönüm noktası güncellendi.`
milestones.deletion=Kilometre Taşını Sil
milestones.deletion_desc=Bir kilometre taşını silmek, onu ilgili tüm sorunlardan kaldırır. Devam edilsin mi?
milestones.deletion_success=Kilometre taşı silindi.
milestones.filter_sort.closest_due_date=En yakın zamanı gelmiş tarih
milestones.filter_sort.furthest_due_date=En uzak zamanı gelmiş tarih
milestones.filter_sort.least_complete=En az tamamlama
milestones.filter_sort.most_complete=En çok tamamlama
milestones.filter_sort.most_issues=En çok konu
@ -2314,7 +2315,6 @@ settings.tags.protection.allowed.teams=İzin verilen takımlar
settings.tags.protection.allowed.noone=Hiç kimse
settings.tags.protection.create=Etiketi Koru
settings.tags.protection.none=Korumalı etiket yok.
settings.tags.protection.pattern.description=Birden çok etiketi eşleştirmek için tek bir ad, glob deseni veya normal ifade kullanabilirsiniz. Daha fazlası için <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/protected-tags/">korumalı etiketler rehberini</a> okuyun.
settings.bot_token=Bot Jetonu
settings.chat_id=Sohbet Kimliği
settings.thread_id=İş Parçacığı ID
@ -2853,12 +2853,10 @@ packages.size=Boyut
packages.published=Yayınlandı
defaulthooks=Varsayılan Web İstemcileri
defaulthooks.desc=Web İstemcileri, belirli Gitea olayları tetiklendiğinde otomatik olarak HTTP POST isteklerini sunucuya yapar. Burada tanımlanan Web İstemcileri varsayılandır ve tüm yeni depolara kopyalanır. <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">web istemcileri kılavuzunda</a> daha fazla bilgi edinin.
defaulthooks.add_webhook=Varsayılan Web İstemcisi Ekle
defaulthooks.update_webhook=Varsayılan Web İstemcisini Güncelle
systemhooks=Sistem Web İstemcileri
systemhooks.desc=Belirli Gitea olayları tetiklendiğinde Web istemcileri otomatik olarak bir sunucuya HTTP POST istekleri yapar. Burada tanımlanan web istemcileri sistemdeki tüm depolar üzerinde çalışır, bu yüzden lütfen bunun olabilecek tüm performans sonuçlarını göz önünde bulundurun. <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">web istemcileri kılavuzunda</a> daha fazla bilgi edinin.
systemhooks.add_webhook=Sistem Web İstemcisi Ekle
systemhooks.update_webhook=Sistem Web İstemcisi Güncelle
@ -2963,7 +2961,6 @@ auths.tip.google_plus=OAuth2 istemci kimlik bilgilerini https://console.develope
auths.tip.openid_connect=Bitiş noktalarını belirlemek için OpenID Connect Discovery URL'sini kullanın (<server>/.well-known/openid-configuration)
auths.tip.twitter=https://dev.twitter.com/apps adresine gidin, bir uygulama oluşturun ve “Bu uygulamanın Twitter ile oturum açmak için kullanılmasına izin ver” seçeneğinin etkin olduğundan emin olun
auths.tip.discord=https://discordapp.com/developers/applications/me adresinde yeni bir uygulama kaydedin
auths.tip.gitea=Yeni bir OAuth2 uygulaması kaydedin. Rehber https://docs.gitea.io/en-us/oauth2-provider/ adresinde bulunabilir
auths.tip.yandex=`https://oauth.yandex.com/client/new adresinde yeni bir uygulama oluşturun. "Yandex.Passport API'sı" bölümünden aşağıdaki izinleri seçin: "E-posta adresine erişim", "Kullanıcı avatarına erişim" ve "Kullanıcı adına, ad ve soyadına, cinsiyete erişim"`
auths.tip.mastodon=Kimlik doğrulaması yapmak istediğiniz mastodon örneği için özel bir örnek URL girin (veya varsayılan olanı kullanın)
auths.edit=Kimlik Doğrulama Kaynağı Düzenle
@ -3147,8 +3144,6 @@ monitor.queue.exemplar=Örnek Türü
monitor.queue.numberworkers=Çalışan Sayısı
monitor.queue.maxnumberworkers=En Fazla Çalışan Sayısı
monitor.queue.numberinqueue=Kuyruktaki Sayı
monitor.queue.review=Yapılandırmayı İncele
monitor.queue.review_add=Çalışanları İncele/Ekle
monitor.queue.settings.title=Havuz Ayarları
monitor.queue.settings.desc=Havuzlar, çalışan kuyruğu tıkanmasına bir yanıt olarak dinamik olarak büyürler.
monitor.queue.settings.maxnumberworkers=En fazla çalışan Sayısı

View File

@ -118,7 +118,6 @@ network_error=Помилка мережі
[startpage]
app_desc=Зручний власний сервіс хостингу репозиторіїв Git
install=Легко встановити
install_desc=Просто запустіть <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">виконуваний файл</a> для вашої платформи, розміщуйте в <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a> або <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">встановіть пакунок</a>.
platform=Платформонезалежність
platform_desc=Gitea виконується на платформі, для якої можливо скомпілювати <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a>: Windows, macOS, Linux, ARM, та інших. Оберіть ту, яка вам до вподоби!
lightweight=Невибагливість
@ -244,6 +243,7 @@ filter_by_team_repositories=Фільтрувати за репозиторіям
feed_of=`Стрічка "%s"`
show_archived=Архівовані
archived=Архівовані
show_both_archived_unarchived=Показано архівовані і не архівовані
show_only_archived=Показано тільки архівовані
show_only_unarchived=Показано тільки не архівовані
@ -481,7 +481,6 @@ overview=Огляд
following=Читає
follow=Підписатися
unfollow=Відписатися
heatmap.loading=Завантаження карти активності…
user_bio=Біографія
disabled_public_activity=Цей користувач вимкнув публічний показ діяльності.
@ -534,7 +533,6 @@ choose_new_avatar=Оберіть новий аватар
update_avatar=Оновити аватар
delete_current_avatar=Видалити поточний аватар
uploaded_avatar_not_a_image=Завантажений файл не є зображенням.
uploaded_avatar_is_too_big=Файл, що завантажувався, перевищив максимальний розмір.
update_avatar_success=Ваш аватар був змінений.
update_user_avatar_success=Аватар користувача оновлено.
@ -999,6 +997,9 @@ commits.signed_by_untrusted_user_unmatched=Підписаний недовіре
commits.gpg_key_id=Ідентифікатор GPG ключа
commitstatus.error=Помилка
commitstatus.pending=Очікування
ext_issues=Доступ до зовнішніх задач
ext_issues.desc=Посилання на зовнішню систему відстеження задач.
@ -1154,9 +1155,8 @@ issues.ref_reopening_from=`<a href="%[3]s">згадав запит на злит
issues.ref_closed_from=`<a href="%[3]s">закрив цю задачу %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">повторно відкрито цю задачу %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=`із %[1]s`
issues.poster=Автор
issues.collaborator=Співавтор
issues.owner=Власник
issues.role.owner=Власник
issues.role.member=Учасник
issues.re_request_review=Повторно попросити рецензію
issues.is_stale=З часу останньої перевірки в цей PR було внесено деякі зміни
issues.remove_request_review=Видалити запит рецензування
@ -1419,8 +1419,6 @@ milestones.modify=Оновити етап
milestones.deletion=Видалити етап
milestones.deletion_desc=Видалення етапу призведе до його видалення з усіх пов'язаних задач. Продовжити?
milestones.deletion_success=Етап успішно видалено.
milestones.filter_sort.closest_due_date=Найближче за датою
milestones.filter_sort.furthest_due_date=Далі за датою
milestones.filter_sort.least_complete=Менш повне
milestones.filter_sort.most_complete=Більш повне
milestones.filter_sort.most_issues=Найбільш задач
@ -1810,7 +1808,6 @@ settings.tags.protection.allowed.teams=Дозволені команди
settings.tags.protection.allowed.noone=Ніхто
settings.tags.protection.create=Захистна мітка
settings.tags.protection.none=Там не немає захищених міток.
settings.tags.protection.pattern.description=Ви можете використовувати одне ім'я або глобальний шаблон або регулярний вираз для декількох тегів.. Детальніше в <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/protected-tags/">посібнику із захищених тегів</a>.
settings.bot_token=Токен для бота
settings.chat_id=Чат ID
settings.matrix.homeserver_url=URL домашньої сторінки
@ -2253,12 +2250,10 @@ packages.repository=Репозиторій
packages.size=Розмір
defaulthooks=Веб-хуки за замовчуванням
defaulthooks.desc=Веб-хуки автоматично створюють HTTP POST-запити до сервера, коли виконуються певні події Gitea. Визначені тут веб-хуки є типовими і копіюються у всі нові сховища. Детальніше читайте в <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">інструкції по використанню web-хуків</a>.
defaulthooks.add_webhook=Додати веб-хук за замовчуванням
defaulthooks.update_webhook=Змінити веб-хук за замовчуванням
systemhooks=Системні вебхуки
systemhooks.desc=Веб-хуки автоматично створюють HTTP POST-запити до сервера, коли виконуються певні тригери в Gitea. Визначені веб-хуки є типовими і копіюються у всі нові сховища. Детальніше читайте в <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">інструкції по використанню web-хуків</a>.
systemhooks.add_webhook=Додати системний вебхук
systemhooks.update_webhook=Оновити системний вебхук
@ -2347,7 +2342,6 @@ auths.tip.google_plus=Отримайте облікові дані клієнт
auths.tip.openid_connect=Використовуйте OpenID Connect Discovery URL (<server>/.well-known/openid-configuration) для автоматичної настройки входу OAuth
auths.tip.twitter=Перейдіть на https://dev.twitter.com/apps, створіть програму і переконайтеся, що включена опція «Дозволити цю програму для входу в систему за допомогою Twitter»
auths.tip.discord=Зареєструйте новий додаток на https://discordapp.com/developers/applications/me
auths.tip.gitea=Зареєструйте новий додаток OAuth2. Керівництво можна знайти на https://docs.gitea.io/en-us/oauth2-provider/
auths.tip.yandex=`Створіть нову програму в https://oauth.yandex.com/client/new. Виберіть наступні дозволи з "Yandex. assport API": "Доступ до адреси електронної пошти", "Доступ до аватара" і "Доступ до імені користувача, імені та прізвища, статі"`
auths.tip.mastodon=Введіть URL спеціального екземпляра для екземпляра mastodon, який ви хочете автентифікувати за допомогою (або використовувати за замовчуванням)
auths.edit=Редагувати джерело автентифікації
@ -2508,8 +2502,6 @@ monitor.queue.type=Тип
monitor.queue.exemplar=Приклад типу
monitor.queue.numberworkers=Кількість робочих потоків
monitor.queue.maxnumberworkers=Максимальна кількість робочих потоків
monitor.queue.review=Переглянути налаштування
monitor.queue.review_add=Перевірка/додавання потоків
monitor.queue.settings.title=Налаштування пулу
monitor.queue.settings.maxnumberworkers=Максимальна кількість робочих потоків
monitor.queue.settings.maxnumberworkers.placeholder=Поточний %[1]d

View File

@ -166,7 +166,6 @@ network_error=网络错误
[startpage]
app_desc=一款极易搭建的自助 Git 服务
install=易安装
install_desc=您除了可以根据操作系统平台通过 <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/zh-cn/install-from-binary/">二进制运行</a>,还可以通过 <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a> 或 <a target="_blank" rel="noopener noreferrer" href="https://github.com/alvaroaleman/ansible-gitea/blob/master/Vagrantfile">Vagrant</a>,以及 <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/zh-cn/install-from-package/">包管理</a> 安装。
platform=跨平台
platform_desc=任何 <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go 语言</a> 支持的平台都可以运行 Gitea包括 Windows、Mac、Linux 以及 ARM。挑一个您喜欢的就行
lightweight=轻量级
@ -299,6 +298,7 @@ filter_by_team_repositories=按团队仓库筛选
feed_of=`"%s"的源`
show_archived=已归档
archived=已归档
show_both_archived_unarchived=显示已归档和未归档的
show_only_archived=只显示已归档的
show_only_unarchived=只显示未归档的
@ -570,7 +570,6 @@ overview=概览
following=关注中
follow=关注
unfollow=取消关注
heatmap.loading=正在加载热图...
user_bio=简历
disabled_public_activity=该用户已隐藏活动记录。
email_visibility.limited=所有已认证用户均可看到您的电子邮件地址
@ -643,7 +642,6 @@ choose_new_avatar=选择新的头像
update_avatar=更新头像
delete_current_avatar=删除当前头像
uploaded_avatar_not_a_image=上传的文件不是一张图片。
uploaded_avatar_is_too_big=上传的文件超过了最大大小。
update_avatar_success=您的头像已更新。
update_user_avatar_success=用户头像已更新。
@ -1190,6 +1188,11 @@ commit.cherry-pick=Cherry-pick
commit.cherry-pick-header=Cherry-pick: %s
commit.cherry-pick-content=选择 cherry-pick 的目标分支:
commitstatus.error=错误
commitstatus.failure=失败
commitstatus.pending=待定
commitstatus.success=成功
ext_issues=访问外部工单
ext_issues.desc=链接到外部工单跟踪系统。
@ -1375,9 +1378,9 @@ issues.ref_reopening_from=`于 <a id="%[1]s" href="#%[1]s">%[2]s</a> <a href="%[
issues.ref_closed_from=`<a href="%[3]s">关闭了这个工单 %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_reopened_from=`<a href="%[3]s">重新打开这个工单 %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.ref_from=`来自 %[1]s`
issues.poster=发布
issues.collaborator=协作者
issues.owner=所有者
issues.author=
issues.role.owner=管理员
issues.role.member=普通成员
issues.re_request_review=再次请求审核
issues.is_stale=此评审之后代码有更新
issues.remove_request_review=移除审核请求
@ -1687,8 +1690,6 @@ milestones.edit_success=里程碑 %s 已经更新。
milestones.deletion=删除里程碑
milestones.deletion_desc=删除该里程碑将会移除所有工单中相关的信息。是否继续?
milestones.deletion_success=里程碑已被删除。
milestones.filter_sort.closest_due_date=到期日从近到远
milestones.filter_sort.furthest_due_date=到期日从远到近
milestones.filter_sort.least_complete=完成度从低到高
milestones.filter_sort.most_complete=完成度从高到低
milestones.filter_sort.most_issues=工单从多到少
@ -2144,7 +2145,6 @@ settings.tags.protection.allowed.teams=允许的团队
settings.tags.protection.allowed.noone=
settings.tags.protection.create=保护Git标签
settings.tags.protection.none=没有受保护的Git标签
settings.tags.protection.pattern.description=你可以使用单个名称或 glob 模式匹配或正则表达式来匹配多个标签。了解更多请阅读 <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/protected-tags/"> 受保护Git标签指南</a>
settings.bot_token=Bot 令牌
settings.chat_id=聊天 ID
settings.matrix.homeserver_url=主服务器网址
@ -2656,12 +2656,10 @@ packages.size=大小
packages.published=已发布
defaulthooks=默认Web钩子
defaulthooks.desc=当某些 Gitea 事件触发时Web 钩子自动向服务器发出 HTTP POST 请求。这里定义的 Web 钩子是默认配置,将被复制到所有新的仓库中。详情请访问 <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">Web 钩子指南</a>。
defaulthooks.add_webhook=添加默认Web 钩子
defaulthooks.update_webhook=更新默认Web钩子
systemhooks=系统 Web 钩子
systemhooks.desc=当某些 Gitea 事件触发时Web 钩子自动向服务器发出HTTP POST请求。这里定义的 Web 钩子将作用于系统上的所有仓库,所以请考虑这可能带来的任何性能影响。了解详情请访问 <a target="_blank" rel="noopener" href="https://docs.gitea.io/en-us/webhooks/">Web 钩子指南</a>。
systemhooks.add_webhook=添加系统 Web 钩子
systemhooks.update_webhook=更新系统 Web 钩子
@ -2765,7 +2763,6 @@ auths.tip.google_plus=从谷歌 API 控制台 (https://console.developers.google
auths.tip.openid_connect=使用 OpenID 连接发现 URL (<server>/.well-known/openid-configuration) 来指定终点
auths.tip.twitter=访问 https://dev.twitter.com/apps创建应用并确保启用了"允许此应用程序用于登录 Twitter"的选项。
auths.tip.discord=在 https://discordapp.com/developers/applications/me 上注册新应用程序
auths.tip.gitea=注册一个新的 OAuth2 应用程序,可以访问 https://docs.gitea.io/en-us/oauth2-provider/ 查看帮助 。
auths.tip.yandex=在 https://oauth.yandex.com/client/new 上创建一个新的应用程序。在“ Yandex.Passport API”这部分中选择以下权限“访问电子邮件地址Access to email address“访问用户头像Access to user avatar”和“访问用户名名字和姓氏性别Access to username, first name and surname, genderAccess to username, first name and surname, gender
auths.tip.mastodon=输入您想要认证的 mastodon 实例的自定义 URL (或使用默认值)
auths.edit=修改认证源
@ -2942,8 +2939,6 @@ monitor.queue.exemplar=数据类型
monitor.queue.numberworkers=工作者数量
monitor.queue.maxnumberworkers=最大工作者数量
monitor.queue.numberinqueue=队列中的数量
monitor.queue.review=查看配置
monitor.queue.review_add=查看/添加工作者
monitor.queue.settings.title=池设置
monitor.queue.settings.maxnumberworkers=最大工作者数量
monitor.queue.settings.maxnumberworkers.placeholder=当前 %[1]d

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