mirror of https://github.com/go-gitea/gitea
Merge branch 'main' into sync-issue-pr-and-more
This commit is contained in:
commit
e28fa781c2
|
@ -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"
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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`.
|
|
@ -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 |
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)})
|
||||
}
|
||||
|
|
|
@ -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})
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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})
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -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 {
|
||||
|
|
|
@ -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").
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
ref: refs/heads/master
|
|
@ -0,0 +1,4 @@
|
|||
[core]
|
||||
repositoryformatversion = 0
|
||||
filemode = true
|
||||
bare = true
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
544d8f7a3b15927cddf2299b4b562d6ebd71b6a7
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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.
|
|
@ -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.]
|
|
@ -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.
|
||||
|
|
|
@ -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
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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:
|
||||
|
|
|
@ -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.
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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=Μέγιστος Αριθμός Εργατών
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 l’exé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 l’installer 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 l’avatar
|
||||
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 d’ajout 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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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=ワーカー数上限
|
||||
|
|
|
@ -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=이슈 많은 순
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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=Максимальное количество рабочих
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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ı
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
Loading…
Reference in New Issue