Merge branch 'master' of https://github.com/go-gitea/gitea
This commit is contained in:
commit
647296ce63
|
|
@ -56,7 +56,7 @@ pipeline:
|
||||||
event: [ push, tag, pull_request ]
|
event: [ push, tag, pull_request ]
|
||||||
|
|
||||||
build-without-gcc:
|
build-without-gcc:
|
||||||
image: webhippie/golang:edge
|
image: webhippie/golang:1.8
|
||||||
pull: true
|
pull: true
|
||||||
environment:
|
environment:
|
||||||
GOPATH: /srv/app
|
GOPATH: /srv/app
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ menu:
|
||||||
|
|
||||||
This section will not include basic [installation instructions](https://golang.org/doc/install).
|
This section will not include basic [installation instructions](https://golang.org/doc/install).
|
||||||
|
|
||||||
**Note**: Go version 1.7 or higher is required
|
**Note**: Go version 1.8 or higher is required
|
||||||
|
|
||||||
## Download
|
## Download
|
||||||
|
|
||||||
|
|
|
||||||
85
integrations/api_releases_test.go
Normal file
85
integrations/api_releases_test.go
Normal file
|
|
@ -0,0 +1,85 @@
|
||||||
|
// Copyright 2018 The Gitea Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package integrations
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"code.gitea.io/git"
|
||||||
|
"code.gitea.io/gitea/models"
|
||||||
|
api "code.gitea.io/sdk/gitea"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestAPICreateRelease(t *testing.T) {
|
||||||
|
prepareTestEnv(t)
|
||||||
|
|
||||||
|
repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
|
||||||
|
owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User)
|
||||||
|
session := loginUser(t, owner.LowerName)
|
||||||
|
|
||||||
|
gitRepo, err := git.OpenRepository(repo.RepoPath())
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
err = gitRepo.CreateTag("v0.0.1", "master")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
commitID, err := gitRepo.GetTagCommitID("v0.0.1")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/releases",
|
||||||
|
owner.Name, repo.Name)
|
||||||
|
req := NewRequestWithJSON(t, "POST", urlStr, &api.CreateReleaseOption{
|
||||||
|
TagName: "v0.0.1",
|
||||||
|
Title: "v0.0.1",
|
||||||
|
Note: "test",
|
||||||
|
IsDraft: false,
|
||||||
|
IsPrerelease: false,
|
||||||
|
Target: commitID,
|
||||||
|
})
|
||||||
|
resp := session.MakeRequest(t, req, http.StatusCreated)
|
||||||
|
|
||||||
|
var newRelease api.Release
|
||||||
|
DecodeJSON(t, resp, &newRelease)
|
||||||
|
models.AssertExistsAndLoadBean(t, &models.Release{
|
||||||
|
ID: newRelease.ID,
|
||||||
|
TagName: newRelease.TagName,
|
||||||
|
Title: newRelease.Title,
|
||||||
|
Note: newRelease.Note,
|
||||||
|
})
|
||||||
|
|
||||||
|
urlStr = fmt.Sprintf("/api/v1/repos/%s/%s/releases/%d",
|
||||||
|
owner.Name, repo.Name, newRelease.ID)
|
||||||
|
req = NewRequest(t, "GET", urlStr)
|
||||||
|
resp = session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
|
||||||
|
var release api.Release
|
||||||
|
DecodeJSON(t, resp, &release)
|
||||||
|
|
||||||
|
assert.Equal(t, newRelease.TagName, release.TagName)
|
||||||
|
assert.Equal(t, newRelease.Title, release.Title)
|
||||||
|
assert.Equal(t, newRelease.Note, release.Note)
|
||||||
|
|
||||||
|
req = NewRequestWithJSON(t, "PATCH", urlStr, &api.EditReleaseOption{
|
||||||
|
TagName: release.TagName,
|
||||||
|
Title: release.Title,
|
||||||
|
Note: "updated",
|
||||||
|
IsDraft: &release.IsDraft,
|
||||||
|
IsPrerelease: &release.IsPrerelease,
|
||||||
|
Target: release.Target,
|
||||||
|
})
|
||||||
|
resp = session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
|
||||||
|
DecodeJSON(t, resp, &newRelease)
|
||||||
|
models.AssertExistsAndLoadBean(t, &models.Release{
|
||||||
|
ID: newRelease.ID,
|
||||||
|
TagName: newRelease.TagName,
|
||||||
|
Title: newRelease.Title,
|
||||||
|
Note: newRelease.Note,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
@ -6,8 +6,9 @@ package integrations
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"crypto/rand"
|
||||||
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"math/rand"
|
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
@ -17,6 +18,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"code.gitea.io/git"
|
"code.gitea.io/git"
|
||||||
|
"code.gitea.io/gitea/models"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
api "code.gitea.io/sdk/gitea"
|
api "code.gitea.io/sdk/gitea"
|
||||||
|
|
||||||
|
|
@ -24,7 +26,13 @@ import (
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func onGiteaWebRun(t *testing.T, callback func(*testing.T, *url.URL)) {
|
const (
|
||||||
|
littleSize = 1024 //1ko
|
||||||
|
bigSize = 128 * 1024 * 1024 //128Mo
|
||||||
|
)
|
||||||
|
|
||||||
|
func onGiteaRun(t *testing.T, callback func(*testing.T, *url.URL)) {
|
||||||
|
prepareTestEnv(t)
|
||||||
s := http.Server{
|
s := http.Server{
|
||||||
Handler: mac,
|
Handler: mac,
|
||||||
}
|
}
|
||||||
|
|
@ -35,151 +43,241 @@ func onGiteaWebRun(t *testing.T, callback func(*testing.T, *url.URL)) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
|
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
|
||||||
s.Shutdown(ctx)
|
s.Shutdown(ctx)
|
||||||
cancel()
|
cancel()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
go s.Serve(listener)
|
go s.Serve(listener)
|
||||||
|
//Started by config go ssh.Listen(setting.SSH.ListenHost, setting.SSH.ListenPort, setting.SSH.ServerCiphers, setting.SSH.ServerKeyExchanges, setting.SSH.ServerMACs)
|
||||||
|
|
||||||
callback(t, u)
|
callback(t, u)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGit(t *testing.T) {
|
func TestGit(t *testing.T) {
|
||||||
prepareTestEnv(t)
|
onGiteaRun(t, func(t *testing.T, u *url.URL) {
|
||||||
|
|
||||||
onGiteaWebRun(t, func(t *testing.T, u *url.URL) {
|
|
||||||
dstPath, err := ioutil.TempDir("", "repo-tmp-17")
|
|
||||||
assert.NoError(t, err)
|
|
||||||
defer os.RemoveAll(dstPath)
|
|
||||||
u.Path = "user2/repo1.git"
|
u.Path = "user2/repo1.git"
|
||||||
|
|
||||||
t.Run("Standard", func(t *testing.T) {
|
t.Run("HTTP", func(t *testing.T) {
|
||||||
|
dstPath, err := ioutil.TempDir("", "repo-tmp-17")
|
||||||
t.Run("CloneNoLogin", func(t *testing.T) {
|
assert.NoError(t, err)
|
||||||
dstLocalPath, err := ioutil.TempDir("", "repo1")
|
defer os.RemoveAll(dstPath)
|
||||||
assert.NoError(t, err)
|
t.Run("Standard", func(t *testing.T) {
|
||||||
defer os.RemoveAll(dstLocalPath)
|
t.Run("CloneNoLogin", func(t *testing.T) {
|
||||||
err = git.Clone(u.String(), dstLocalPath, git.CloneRepoOptions{})
|
dstLocalPath, err := ioutil.TempDir("", "repo1")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.True(t, com.IsExist(filepath.Join(dstLocalPath, "README.md")))
|
defer os.RemoveAll(dstLocalPath)
|
||||||
})
|
err = git.Clone(u.String(), dstLocalPath, git.CloneRepoOptions{})
|
||||||
|
assert.NoError(t, err)
|
||||||
t.Run("CreateRepo", func(t *testing.T) {
|
assert.True(t, com.IsExist(filepath.Join(dstLocalPath, "README.md")))
|
||||||
session := loginUser(t, "user2")
|
|
||||||
req := NewRequestWithJSON(t, "POST", "/api/v1/user/repos", &api.CreateRepoOption{
|
|
||||||
AutoInit: true,
|
|
||||||
Description: "Temporary repo",
|
|
||||||
Name: "repo-tmp-17",
|
|
||||||
Private: false,
|
|
||||||
Gitignores: "",
|
|
||||||
License: "WTFPL",
|
|
||||||
Readme: "Default",
|
|
||||||
})
|
})
|
||||||
session.MakeRequest(t, req, http.StatusCreated)
|
|
||||||
})
|
|
||||||
|
|
||||||
u.Path = "user2/repo-tmp-17.git"
|
t.Run("CreateRepo", func(t *testing.T) {
|
||||||
u.User = url.UserPassword("user2", userPassword)
|
session := loginUser(t, "user2")
|
||||||
t.Run("Clone", func(t *testing.T) {
|
req := NewRequestWithJSON(t, "POST", "/api/v1/user/repos", &api.CreateRepoOption{
|
||||||
err = git.Clone(u.String(), dstPath, git.CloneRepoOptions{})
|
AutoInit: true,
|
||||||
assert.NoError(t, err)
|
Description: "Temporary repo",
|
||||||
assert.True(t, com.IsExist(filepath.Join(dstPath, "README.md")))
|
Name: "repo-tmp-17",
|
||||||
})
|
Private: false,
|
||||||
|
Gitignores: "",
|
||||||
t.Run("PushCommit", func(t *testing.T) {
|
License: "WTFPL",
|
||||||
data := make([]byte, 1024)
|
Readme: "Default",
|
||||||
_, err := rand.Read(data)
|
})
|
||||||
assert.NoError(t, err)
|
session.MakeRequest(t, req, http.StatusCreated)
|
||||||
tmpFile, err := ioutil.TempFile(dstPath, "data-file-")
|
|
||||||
defer tmpFile.Close()
|
|
||||||
_, err = tmpFile.Write(data)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
|
|
||||||
//Commit
|
|
||||||
err = git.AddChanges(dstPath, false, filepath.Base(tmpFile.Name()))
|
|
||||||
assert.NoError(t, err)
|
|
||||||
err = git.CommitChanges(dstPath, git.CommitChangesOptions{
|
|
||||||
Committer: &git.Signature{
|
|
||||||
Email: "user2@example.com",
|
|
||||||
Name: "User Two",
|
|
||||||
When: time.Now(),
|
|
||||||
},
|
|
||||||
Author: &git.Signature{
|
|
||||||
Email: "user2@example.com",
|
|
||||||
Name: "User Two",
|
|
||||||
When: time.Now(),
|
|
||||||
},
|
|
||||||
Message: "Testing commit",
|
|
||||||
})
|
})
|
||||||
assert.NoError(t, err)
|
|
||||||
|
|
||||||
//Push
|
u.Path = "user2/repo-tmp-17.git"
|
||||||
err = git.Push(dstPath, git.PushOptions{
|
u.User = url.UserPassword("user2", userPassword)
|
||||||
Branch: "master",
|
t.Run("Clone", func(t *testing.T) {
|
||||||
Remote: u.String(),
|
err = git.Clone(u.String(), dstPath, git.CloneRepoOptions{})
|
||||||
Force: false,
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, com.IsExist(filepath.Join(dstPath, "README.md")))
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("PushCommit", func(t *testing.T) {
|
||||||
|
t.Run("Little", func(t *testing.T) {
|
||||||
|
commitAndPush(t, littleSize, dstPath)
|
||||||
|
})
|
||||||
|
t.Run("Big", func(t *testing.T) {
|
||||||
|
commitAndPush(t, bigSize, dstPath)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
t.Run("LFS", func(t *testing.T) {
|
||||||
|
t.Run("PushCommit", func(t *testing.T) {
|
||||||
|
//Setup git LFS
|
||||||
|
_, err = git.NewCommand("lfs").AddArguments("install").RunInDir(dstPath)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
_, err = git.NewCommand("lfs").AddArguments("track", "data-file-*").RunInDir(dstPath)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
err = git.AddChanges(dstPath, false, ".gitattributes")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
t.Run("Little", func(t *testing.T) {
|
||||||
|
commitAndPush(t, littleSize, dstPath)
|
||||||
|
})
|
||||||
|
t.Run("Big", func(t *testing.T) {
|
||||||
|
commitAndPush(t, bigSize, dstPath)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
t.Run("Locks", func(t *testing.T) {
|
||||||
|
lockTest(t, u.String(), dstPath)
|
||||||
})
|
})
|
||||||
assert.NoError(t, err)
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
t.Run("LFS", func(t *testing.T) {
|
t.Run("SSH", func(t *testing.T) {
|
||||||
t.Run("PushCommit", func(t *testing.T) {
|
//Setup remote link
|
||||||
/* Generate random file */
|
u.Scheme = "ssh"
|
||||||
data := make([]byte, 1024)
|
u.User = url.User("git")
|
||||||
_, err := rand.Read(data)
|
u.Host = fmt.Sprintf("%s:%d", setting.SSH.ListenHost, setting.SSH.ListenPort)
|
||||||
assert.NoError(t, err)
|
u.Path = "user2/repo-tmp-18.git"
|
||||||
tmpFile, err := ioutil.TempFile(dstPath, "data-file-")
|
|
||||||
defer tmpFile.Close()
|
|
||||||
_, err = tmpFile.Write(data)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
|
|
||||||
//Setup git LFS
|
//Setup key
|
||||||
_, err = git.NewCommand("lfs").AddArguments("install").RunInDir(dstPath)
|
keyFile := filepath.Join(setting.AppDataPath, "my-testing-key")
|
||||||
assert.NoError(t, err)
|
_, _, err := com.ExecCmd("ssh-keygen", "-f", keyFile, "-t", "rsa", "-N", "")
|
||||||
_, err = git.NewCommand("lfs").AddArguments("track", "data-file-*").RunInDir(dstPath)
|
assert.NoError(t, err)
|
||||||
assert.NoError(t, err)
|
defer os.RemoveAll(keyFile)
|
||||||
|
defer os.RemoveAll(keyFile + ".pub")
|
||||||
|
|
||||||
//Commit
|
session := loginUser(t, "user1")
|
||||||
err = git.AddChanges(dstPath, false, ".gitattributes", filepath.Base(tmpFile.Name()))
|
keyOwner := models.AssertExistsAndLoadBean(t, &models.User{Name: "user2"}).(*models.User)
|
||||||
assert.NoError(t, err)
|
urlStr := fmt.Sprintf("/api/v1/admin/users/%s/keys", keyOwner.Name)
|
||||||
err = git.CommitChanges(dstPath, git.CommitChangesOptions{
|
|
||||||
Committer: &git.Signature{
|
|
||||||
Email: "user2@example.com",
|
|
||||||
Name: "User Two",
|
|
||||||
When: time.Now(),
|
|
||||||
},
|
|
||||||
Author: &git.Signature{
|
|
||||||
Email: "user2@example.com",
|
|
||||||
Name: "User Two",
|
|
||||||
When: time.Now(),
|
|
||||||
},
|
|
||||||
Message: "Testing LFS ",
|
|
||||||
})
|
|
||||||
assert.NoError(t, err)
|
|
||||||
|
|
||||||
//Push
|
dataPubKey, err := ioutil.ReadFile(keyFile + ".pub")
|
||||||
u.User = url.UserPassword("user2", userPassword)
|
assert.NoError(t, err)
|
||||||
err = git.Push(dstPath, git.PushOptions{
|
req := NewRequestWithValues(t, "POST", urlStr, map[string]string{
|
||||||
Branch: "master",
|
"key": string(dataPubKey),
|
||||||
Remote: u.String(),
|
"title": "test-key",
|
||||||
Force: false,
|
|
||||||
})
|
|
||||||
assert.NoError(t, err)
|
|
||||||
})
|
|
||||||
t.Run("Locks", func(t *testing.T) {
|
|
||||||
_, err = git.NewCommand("remote").AddArguments("set-url", "origin", u.String()).RunInDir(dstPath) //TODO add test ssh git-lfs-creds
|
|
||||||
assert.NoError(t, err)
|
|
||||||
_, err = git.NewCommand("lfs").AddArguments("locks").RunInDir(dstPath)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
_, err = git.NewCommand("lfs").AddArguments("lock", "README.md").RunInDir(dstPath)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
_, err = git.NewCommand("lfs").AddArguments("locks").RunInDir(dstPath)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
_, err = git.NewCommand("lfs").AddArguments("unlock", "README.md").RunInDir(dstPath)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
})
|
})
|
||||||
|
session.MakeRequest(t, req, http.StatusCreated)
|
||||||
|
|
||||||
|
//Setup ssh wrapper
|
||||||
|
sshWrapper, err := ioutil.TempFile(setting.AppDataPath, "tmp-ssh-wrapper")
|
||||||
|
sshWrapper.WriteString("#!/bin/sh\n\n")
|
||||||
|
sshWrapper.WriteString("ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i \"" + filepath.Join(setting.AppWorkPath, keyFile) + "\" $* \n\n")
|
||||||
|
err = sshWrapper.Chmod(os.ModePerm)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
sshWrapper.Close()
|
||||||
|
defer os.RemoveAll(sshWrapper.Name())
|
||||||
|
|
||||||
|
//Setup clone folder
|
||||||
|
dstPath, err := ioutil.TempDir("", "repo-tmp-18")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
defer os.RemoveAll(dstPath)
|
||||||
|
|
||||||
|
t.Run("Standard", func(t *testing.T) {
|
||||||
|
t.Run("CreateRepo", func(t *testing.T) {
|
||||||
|
session := loginUser(t, "user2")
|
||||||
|
req := NewRequestWithJSON(t, "POST", "/api/v1/user/repos", &api.CreateRepoOption{
|
||||||
|
AutoInit: true,
|
||||||
|
Description: "Temporary repo",
|
||||||
|
Name: "repo-tmp-18",
|
||||||
|
Private: false,
|
||||||
|
Gitignores: "",
|
||||||
|
License: "WTFPL",
|
||||||
|
Readme: "Default",
|
||||||
|
})
|
||||||
|
session.MakeRequest(t, req, http.StatusCreated)
|
||||||
|
})
|
||||||
|
//TODO get url from api
|
||||||
|
t.Run("Clone", func(t *testing.T) {
|
||||||
|
_, err = git.NewCommand("clone").AddArguments("--config", "core.sshCommand="+filepath.Join(setting.AppWorkPath, sshWrapper.Name()), u.String(), dstPath).Run()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, com.IsExist(filepath.Join(dstPath, "README.md")))
|
||||||
|
})
|
||||||
|
//time.Sleep(5 * time.Minute)
|
||||||
|
t.Run("PushCommit", func(t *testing.T) {
|
||||||
|
t.Run("Little", func(t *testing.T) {
|
||||||
|
commitAndPush(t, littleSize, dstPath)
|
||||||
|
})
|
||||||
|
t.Run("Big", func(t *testing.T) {
|
||||||
|
commitAndPush(t, bigSize, dstPath)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
t.Run("LFS", func(t *testing.T) {
|
||||||
|
os.Setenv("GIT_SSH_COMMAND", filepath.Join(setting.AppWorkPath, sshWrapper.Name())) //TODO remove when fixed https://github.com/git-lfs/git-lfs/issues/2215
|
||||||
|
defer os.Unsetenv("GIT_SSH_COMMAND")
|
||||||
|
t.Run("PushCommit", func(t *testing.T) {
|
||||||
|
//Setup git LFS
|
||||||
|
_, err = git.NewCommand("lfs").AddArguments("install").RunInDir(dstPath)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
_, err = git.NewCommand("lfs").AddArguments("track", "data-file-*").RunInDir(dstPath)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
err = git.AddChanges(dstPath, false, ".gitattributes")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
t.Run("Little", func(t *testing.T) {
|
||||||
|
commitAndPush(t, littleSize, dstPath)
|
||||||
|
})
|
||||||
|
t.Run("Big", func(t *testing.T) {
|
||||||
|
commitAndPush(t, bigSize, dstPath)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
/* Failed without #3152. TODO activate with fix.
|
||||||
|
t.Run("Locks", func(t *testing.T) {
|
||||||
|
lockTest(t, u.String(), dstPath)
|
||||||
|
})
|
||||||
|
*/
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func lockTest(t *testing.T, remote, repoPath string) {
|
||||||
|
_, err := git.NewCommand("remote").AddArguments("set-url", "origin", remote).RunInDir(repoPath) //TODO add test ssh git-lfs-creds
|
||||||
|
assert.NoError(t, err)
|
||||||
|
_, err = git.NewCommand("lfs").AddArguments("locks").RunInDir(repoPath)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
_, err = git.NewCommand("lfs").AddArguments("lock", "README.md").RunInDir(repoPath)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
_, err = git.NewCommand("lfs").AddArguments("locks").RunInDir(repoPath)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
_, err = git.NewCommand("lfs").AddArguments("unlock", "README.md").RunInDir(repoPath)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func commitAndPush(t *testing.T, size int, repoPath string) {
|
||||||
|
err := generateCommitWithNewData(size, repoPath, "user2@example.com", "User Two")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
_, err = git.NewCommand("push").RunInDir(repoPath) //Push
|
||||||
|
assert.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func generateCommitWithNewData(size int, repoPath, email, fullName string) error {
|
||||||
|
//Generate random file
|
||||||
|
data := make([]byte, size)
|
||||||
|
_, err := rand.Read(data)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
tmpFile, err := ioutil.TempFile(repoPath, "data-file-")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer tmpFile.Close()
|
||||||
|
_, err = tmpFile.Write(data)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
//Commit
|
||||||
|
err = git.AddChanges(repoPath, false, filepath.Base(tmpFile.Name()))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = git.CommitChanges(repoPath, git.CommitChangesOptions{
|
||||||
|
Committer: &git.Signature{
|
||||||
|
Email: email,
|
||||||
|
Name: fullName,
|
||||||
|
When: time.Now(),
|
||||||
|
},
|
||||||
|
Author: &git.Signature{
|
||||||
|
Email: email,
|
||||||
|
Name: fullName,
|
||||||
|
When: time.Now(),
|
||||||
|
},
|
||||||
|
Message: fmt.Sprintf("Testing commit @ %v", time.Now()),
|
||||||
|
})
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ NAME = {{TEST_MYSQL_DBNAME}}
|
||||||
USER = {{TEST_MYSQL_USERNAME}}
|
USER = {{TEST_MYSQL_USERNAME}}
|
||||||
PASSWD = {{TEST_MYSQL_PASSWORD}}
|
PASSWD = {{TEST_MYSQL_PASSWORD}}
|
||||||
SSL_MODE = disable
|
SSL_MODE = disable
|
||||||
PATH = data/gitea.db
|
|
||||||
|
|
||||||
[indexer]
|
[indexer]
|
||||||
ISSUE_INDEXER_PATH = integrations/indexers-mysql/issues.bleve
|
ISSUE_INDEXER_PATH = integrations/indexers-mysql/issues.bleve
|
||||||
|
|
@ -27,10 +26,14 @@ SSH_DOMAIN = localhost
|
||||||
HTTP_PORT = 3001
|
HTTP_PORT = 3001
|
||||||
ROOT_URL = http://localhost:3001/
|
ROOT_URL = http://localhost:3001/
|
||||||
DISABLE_SSH = false
|
DISABLE_SSH = false
|
||||||
SSH_PORT = 22
|
SSH_LISTEN_HOST = localhost
|
||||||
|
SSH_PORT = 2201
|
||||||
|
START_SSH_SERVER = true
|
||||||
LFS_START_SERVER = true
|
LFS_START_SERVER = true
|
||||||
LFS_CONTENT_PATH = data/lfs-mysql
|
LFS_CONTENT_PATH = data/lfs-mysql
|
||||||
OFFLINE_MODE = false
|
OFFLINE_MODE = false
|
||||||
|
LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w
|
||||||
|
APP_DATA_PATH = integrations/gitea-integration-mysql/data
|
||||||
|
|
||||||
[mailer]
|
[mailer]
|
||||||
ENABLED = false
|
ENABLED = false
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ NAME = {{TEST_PGSQL_DBNAME}}
|
||||||
USER = {{TEST_PGSQL_USERNAME}}
|
USER = {{TEST_PGSQL_USERNAME}}
|
||||||
PASSWD = {{TEST_PGSQL_PASSWORD}}
|
PASSWD = {{TEST_PGSQL_PASSWORD}}
|
||||||
SSL_MODE = disable
|
SSL_MODE = disable
|
||||||
PATH = data/gitea.db
|
|
||||||
|
|
||||||
[indexer]
|
[indexer]
|
||||||
ISSUE_INDEXER_PATH = integrations/indexers-pgsql/issues.bleve
|
ISSUE_INDEXER_PATH = integrations/indexers-pgsql/issues.bleve
|
||||||
|
|
@ -27,23 +26,27 @@ SSH_DOMAIN = localhost
|
||||||
HTTP_PORT = 3002
|
HTTP_PORT = 3002
|
||||||
ROOT_URL = http://localhost:3002/
|
ROOT_URL = http://localhost:3002/
|
||||||
DISABLE_SSH = false
|
DISABLE_SSH = false
|
||||||
SSH_PORT = 22
|
SSH_LISTEN_HOST = localhost
|
||||||
|
SSH_PORT = 2202
|
||||||
|
START_SSH_SERVER = true
|
||||||
LFS_START_SERVER = true
|
LFS_START_SERVER = true
|
||||||
LFS_CONTENT_PATH = data/lfs-pgsql
|
LFS_CONTENT_PATH = data/lfs-pgsql
|
||||||
OFFLINE_MODE = false
|
OFFLINE_MODE = false
|
||||||
|
LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w
|
||||||
|
APP_DATA_PATH = integrations/gitea-integration-pgsql/data
|
||||||
|
|
||||||
[mailer]
|
[mailer]
|
||||||
ENABLED = false
|
ENABLED = false
|
||||||
|
|
||||||
[service]
|
[service]
|
||||||
REGISTER_EMAIL_CONFIRM = false
|
REGISTER_EMAIL_CONFIRM = false
|
||||||
ENABLE_NOTIFY_MAIL = false
|
ENABLE_NOTIFY_MAIL = false
|
||||||
DISABLE_REGISTRATION = false
|
DISABLE_REGISTRATION = false
|
||||||
ENABLE_CAPTCHA = false
|
ENABLE_CAPTCHA = false
|
||||||
REQUIRE_SIGNIN_VIEW = false
|
REQUIRE_SIGNIN_VIEW = false
|
||||||
DEFAULT_KEEP_EMAIL_PRIVATE = false
|
DEFAULT_KEEP_EMAIL_PRIVATE = false
|
||||||
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
|
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
|
||||||
NO_REPLY_ADDRESS = noreply.example.org
|
NO_REPLY_ADDRESS = noreply.example.org
|
||||||
|
|
||||||
[picture]
|
[picture]
|
||||||
DISABLE_GRAVATAR = false
|
DISABLE_GRAVATAR = false
|
||||||
|
|
@ -54,7 +57,7 @@ PROVIDER = file
|
||||||
PROVIDER_CONFIG = data/sessions-pgsql
|
PROVIDER_CONFIG = data/sessions-pgsql
|
||||||
|
|
||||||
[log]
|
[log]
|
||||||
MODE = console,file
|
MODE = console,file
|
||||||
ROOT_PATH = pgsql-log
|
ROOT_PATH = pgsql-log
|
||||||
|
|
||||||
[log.console]
|
[log.console]
|
||||||
|
|
@ -64,6 +67,6 @@ LEVEL = Warn
|
||||||
LEVEL = Debug
|
LEVEL = Debug
|
||||||
|
|
||||||
[security]
|
[security]
|
||||||
INSTALL_LOCK = true
|
INSTALL_LOCK = true
|
||||||
SECRET_KEY = 9pCviYTWSb
|
SECRET_KEY = 9pCviYTWSb
|
||||||
INTERNAL_TOKEN = test
|
INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTU1NTE2MTh9.hhSVGOANkaKk3vfCd2jDOIww4pUk0xtg9JRde5UogyQ
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,6 @@ func TestViewRepo1CloneLinkAuthorized(t *testing.T) {
|
||||||
assert.Equal(t, setting.AppURL+"user2/repo1.git", link)
|
assert.Equal(t, setting.AppURL+"user2/repo1.git", link)
|
||||||
link, exists = htmlDoc.doc.Find("#repo-clone-ssh").Attr("data-link")
|
link, exists = htmlDoc.doc.Find("#repo-clone-ssh").Attr("data-link")
|
||||||
assert.True(t, exists, "The template has changed")
|
assert.True(t, exists, "The template has changed")
|
||||||
sshURL := fmt.Sprintf("%s@%s:user2/repo1.git", setting.RunUser, setting.SSH.Domain)
|
sshURL := fmt.Sprintf("ssh://%s@%s:%d/user2/repo1.git", setting.RunUser, setting.SSH.Domain, setting.SSH.Port)
|
||||||
assert.Equal(t, sshURL, link)
|
assert.Equal(t, sshURL, link)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ RUN_MODE = prod
|
||||||
|
|
||||||
[database]
|
[database]
|
||||||
DB_TYPE = sqlite3
|
DB_TYPE = sqlite3
|
||||||
PATH = :memory:
|
PATH = integrations/gitea-integration-sqlite/gitea.db
|
||||||
|
|
||||||
[indexer]
|
[indexer]
|
||||||
ISSUE_INDEXER_PATH = integrations/indexers-sqlite/issues.bleve
|
ISSUE_INDEXER_PATH = integrations/indexers-sqlite/issues.bleve
|
||||||
|
|
@ -22,11 +22,14 @@ SSH_DOMAIN = localhost
|
||||||
HTTP_PORT = 3003
|
HTTP_PORT = 3003
|
||||||
ROOT_URL = http://localhost:3003/
|
ROOT_URL = http://localhost:3003/
|
||||||
DISABLE_SSH = false
|
DISABLE_SSH = false
|
||||||
SSH_PORT = 22
|
SSH_LISTEN_HOST = localhost
|
||||||
|
SSH_PORT = 2203
|
||||||
|
START_SSH_SERVER = true
|
||||||
LFS_START_SERVER = true
|
LFS_START_SERVER = true
|
||||||
LFS_CONTENT_PATH = data/lfs-sqlite
|
LFS_CONTENT_PATH = data/lfs-sqlite
|
||||||
OFFLINE_MODE = false
|
OFFLINE_MODE = false
|
||||||
LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w
|
LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w
|
||||||
|
APP_DATA_PATH = integrations/gitea-integration-sqlite/data
|
||||||
|
|
||||||
[mailer]
|
[mailer]
|
||||||
ENABLED = false
|
ENABLED = false
|
||||||
|
|
@ -62,4 +65,3 @@ LEVEL = Debug
|
||||||
INSTALL_LOCK = true
|
INSTALL_LOCK = true
|
||||||
SECRET_KEY = 9pCviYTWSb
|
SECRET_KEY = 9pCviYTWSb
|
||||||
INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTI3OTU5ODN9.OQkH5UmzID2XBdwQ9TAI6Jj2t1X-wElVTjbE7aoN4I8
|
INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTI3OTU5ODN9.OQkH5UmzID2XBdwQ9TAI6Jj2t1X-wElVTjbE7aoN4I8
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,11 @@ func (pr *PullRequest) GetDefaultSquashMessage() string {
|
||||||
return fmt.Sprintf("%s (#%d)", pr.Issue.Title, pr.Issue.Index)
|
return fmt.Sprintf("%s (#%d)", pr.Issue.Title, pr.Issue.Index)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetGitRefName returns git ref for hidden pull request branch
|
||||||
|
func (pr *PullRequest) GetGitRefName() string {
|
||||||
|
return fmt.Sprintf("refs/pull/%d/head", pr.Index)
|
||||||
|
}
|
||||||
|
|
||||||
// APIFormat assumes following fields have been assigned with valid values:
|
// APIFormat assumes following fields have been assigned with valid values:
|
||||||
// Required - Issue
|
// Required - Issue
|
||||||
// Optional - Merger
|
// Optional - Merger
|
||||||
|
|
@ -562,7 +567,7 @@ func (pr *PullRequest) getMergeCommit() (*git.Commit, error) {
|
||||||
indexTmpPath := filepath.Join(os.TempDir(), "gitea-"+pr.BaseRepo.Name+"-"+strconv.Itoa(time.Now().Nanosecond()))
|
indexTmpPath := filepath.Join(os.TempDir(), "gitea-"+pr.BaseRepo.Name+"-"+strconv.Itoa(time.Now().Nanosecond()))
|
||||||
defer os.Remove(indexTmpPath)
|
defer os.Remove(indexTmpPath)
|
||||||
|
|
||||||
headFile := fmt.Sprintf("refs/pull/%d/head", pr.Index)
|
headFile := pr.GetGitRefName()
|
||||||
|
|
||||||
// Check if a pull request is merged into BaseBranch
|
// Check if a pull request is merged into BaseBranch
|
||||||
_, stderr, err := process.GetManager().ExecDirEnv(-1, "", fmt.Sprintf("isMerged (git merge-base --is-ancestor): %d", pr.BaseRepo.ID),
|
_, stderr, err := process.GetManager().ExecDirEnv(-1, "", fmt.Sprintf("isMerged (git merge-base --is-ancestor): %d", pr.BaseRepo.ID),
|
||||||
|
|
@ -980,7 +985,7 @@ func (pr *PullRequest) UpdatePatch() (err error) {
|
||||||
// corresponding branches of base repository.
|
// corresponding branches of base repository.
|
||||||
// FIXME: Only push branches that are actually updates?
|
// FIXME: Only push branches that are actually updates?
|
||||||
func (pr *PullRequest) PushToBaseRepo() (err error) {
|
func (pr *PullRequest) PushToBaseRepo() (err error) {
|
||||||
log.Trace("PushToBaseRepo[%d]: pushing commits to base repo 'refs/pull/%d/head'", pr.BaseRepoID, pr.Index)
|
log.Trace("PushToBaseRepo[%d]: pushing commits to base repo '%s'", pr.BaseRepoID, pr.GetGitRefName())
|
||||||
|
|
||||||
headRepoPath := pr.HeadRepo.RepoPath()
|
headRepoPath := pr.HeadRepo.RepoPath()
|
||||||
headGitRepo, err := git.OpenRepository(headRepoPath)
|
headGitRepo, err := git.OpenRepository(headRepoPath)
|
||||||
|
|
@ -995,7 +1000,7 @@ func (pr *PullRequest) PushToBaseRepo() (err error) {
|
||||||
// Make sure to remove the remote even if the push fails
|
// Make sure to remove the remote even if the push fails
|
||||||
defer headGitRepo.RemoveRemote(tmpRemoteName)
|
defer headGitRepo.RemoveRemote(tmpRemoteName)
|
||||||
|
|
||||||
headFile := fmt.Sprintf("refs/pull/%d/head", pr.Index)
|
headFile := pr.GetGitRefName()
|
||||||
|
|
||||||
// Remove head in case there is a conflict.
|
// Remove head in case there is a conflict.
|
||||||
file := path.Join(pr.BaseRepo.RepoPath(), headFile)
|
file := path.Join(pr.BaseRepo.RepoPath(), headFile)
|
||||||
|
|
@ -1005,6 +1010,7 @@ func (pr *PullRequest) PushToBaseRepo() (err error) {
|
||||||
if err = git.Push(headRepoPath, git.PushOptions{
|
if err = git.Push(headRepoPath, git.PushOptions{
|
||||||
Remote: tmpRemoteName,
|
Remote: tmpRemoteName,
|
||||||
Branch: fmt.Sprintf("%s:%s", pr.HeadBranch, headFile),
|
Branch: fmt.Sprintf("%s:%s", pr.HeadBranch, headFile),
|
||||||
|
Force: true,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
return fmt.Errorf("Push: %v", err)
|
return fmt.Errorf("Push: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -86,6 +86,13 @@ func populateRepoIndexerAsynchronously() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if there is any existing repo indexer metadata in the DB, delete it
|
||||||
|
// since we are starting afresh. Also, xorm requires deletes to have a
|
||||||
|
// condition, and we want to delete everything, thus 1=1.
|
||||||
|
if _, err := x.Where("1=1").Delete(new(RepoIndexerStatus)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
var maxRepoID int64
|
var maxRepoID int64
|
||||||
if _, err = x.Select("MAX(id)").Table("repository").Get(&maxRepoID); err != nil {
|
if _, err = x.Select("MAX(id)").Table("repository").Get(&maxRepoID); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
||||||
|
|
@ -304,6 +304,11 @@ func CheckPublicKeyString(content string) (_ string, err error) {
|
||||||
|
|
||||||
// appendAuthorizedKeysToFile appends new SSH keys' content to authorized_keys file.
|
// appendAuthorizedKeysToFile appends new SSH keys' content to authorized_keys file.
|
||||||
func appendAuthorizedKeysToFile(keys ...*PublicKey) error {
|
func appendAuthorizedKeysToFile(keys ...*PublicKey) error {
|
||||||
|
// Don't need to rewrite this file if builtin SSH server is enabled.
|
||||||
|
if setting.SSH.StartBuiltinServer {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
sshOpLocker.Lock()
|
sshOpLocker.Lock()
|
||||||
defer sshOpLocker.Unlock()
|
defer sshOpLocker.Unlock()
|
||||||
|
|
||||||
|
|
@ -382,10 +387,6 @@ func addKey(e Engine, key *PublicKey) (err error) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't need to rewrite this file if builtin SSH server is enabled.
|
|
||||||
if setting.SSH.StartBuiltinServer {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return appendAuthorizedKeysToFile(key)
|
return appendAuthorizedKeysToFile(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -532,6 +533,11 @@ func DeletePublicKey(doer *User, id int64) (err error) {
|
||||||
// Note: x.Iterate does not get latest data after insert/delete, so we have to call this function
|
// Note: x.Iterate does not get latest data after insert/delete, so we have to call this function
|
||||||
// outside any session scope independently.
|
// outside any session scope independently.
|
||||||
func RewriteAllPublicKeys() error {
|
func RewriteAllPublicKeys() error {
|
||||||
|
//Don't rewrite key if internal server
|
||||||
|
if setting.SSH.StartBuiltinServer {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
sshOpLocker.Lock()
|
sshOpLocker.Lock()
|
||||||
defer sshOpLocker.Unlock()
|
defer sshOpLocker.Unlock()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -649,7 +649,7 @@ func NewGhostUser() *User {
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
reservedUsernames = []string{"assets", "css", "explore", "img", "js", "less", "plugins", "debug", "raw", "install", "api", "avatar", "user", "org", "help", "stars", "issues", "pulls", "commits", "repo", "template", "admin", "new", ".", ".."}
|
reservedUsernames = []string{"assets", "css", "explore", "img", "js", "less", "plugins", "debug", "raw", "install", "api", "avatars", "user", "org", "help", "stars", "issues", "pulls", "commits", "repo", "template", "admin", "new", ".", ".."}
|
||||||
reservedUserPatterns = []string{"*.keys"}
|
reservedUserPatterns = []string{"*.keys"}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,7 @@ Thiago Avelino <thiago AT avelino DOT xxx>
|
||||||
Thomas Fanninger <gogs DOT thomas AT fanninger DOT at>
|
Thomas Fanninger <gogs DOT thomas AT fanninger DOT at>
|
||||||
Tilmann Bach <tilmann AT outlook DOT com>
|
Tilmann Bach <tilmann AT outlook DOT com>
|
||||||
Toni Villena Jiménez <tonivj5 AT gmail DOT com>
|
Toni Villena Jiménez <tonivj5 AT gmail DOT com>
|
||||||
|
Viktor Sperl <viktike32 AT gmail DOT com>
|
||||||
Vladimir Jigulin mogaika AT yandex DOT ru
|
Vladimir Jigulin mogaika AT yandex DOT ru
|
||||||
Vladimir Vissoultchev <wqweto AT gmail DOT com>
|
Vladimir Vissoultchev <wqweto AT gmail DOT com>
|
||||||
YJSoft <yjsoft AT yjsoft DOT pe DOT kr>
|
YJSoft <yjsoft AT yjsoft DOT pe DOT kr>
|
||||||
|
|
|
||||||
|
|
@ -270,7 +270,7 @@ openid_been_used=OpenID-Adresse "%s" wurde bereits verwendet.
|
||||||
username_password_incorrect=Falscher Benutzername oder Passwort.
|
username_password_incorrect=Falscher Benutzername oder Passwort.
|
||||||
enterred_invalid_repo_name=Bitte achte darauf, dass der eingegebene Repository-Name korrekt ist.
|
enterred_invalid_repo_name=Bitte achte darauf, dass der eingegebene Repository-Name korrekt ist.
|
||||||
enterred_invalid_owner_name=Bitte achte darauf, dass der eingegebene Name des Besitzers korrekt ist.
|
enterred_invalid_owner_name=Bitte achte darauf, dass der eingegebene Name des Besitzers korrekt ist.
|
||||||
enterred_invalid_password=Bitte achte darauf, dass das eingegebene Passwort richtig ist.
|
enterred_invalid_password=Bitte achte darauf, dass das eingegebene Passwort korrekt ist.
|
||||||
user_not_exist=Dieser Benutzer ist nicht vorhanden.
|
user_not_exist=Dieser Benutzer ist nicht vorhanden.
|
||||||
last_org_owner=Entfernen des letzten Mitglieds aus einem Eigentümer-Team ist nicht zulässig, da es immer mindestens einen Eigentümer pro Organisation geben muss.
|
last_org_owner=Entfernen des letzten Mitglieds aus einem Eigentümer-Team ist nicht zulässig, da es immer mindestens einen Eigentümer pro Organisation geben muss.
|
||||||
cannot_add_org_to_team=Organisationen können nicht als Teammitglied hinzugefügt werden.
|
cannot_add_org_to_team=Organisationen können nicht als Teammitglied hinzugefügt werden.
|
||||||
|
|
@ -608,10 +608,10 @@ commits.signed_by=Signiert von
|
||||||
commits.gpg_key_id=GPG Schlüssel ID
|
commits.gpg_key_id=GPG Schlüssel ID
|
||||||
|
|
||||||
ext_issues=Externe Issues
|
ext_issues=Externe Issues
|
||||||
ext_issues.desc=Link zu einem Externen Issuetracker.
|
ext_issues.desc=Link zu einem externen Issuetracker.
|
||||||
|
|
||||||
issues.desc=Issues ist der Platz zum Verwalten der Aufgaben und Fehler.
|
issues.desc=Issues ist der Platz zum Verwalten der Aufgaben und Fehler.
|
||||||
issues.new=Neues Issue
|
issues.new=Neuer Issue
|
||||||
issues.new.labels=Label
|
issues.new.labels=Label
|
||||||
issues.new.no_label=Kein Label
|
issues.new.no_label=Kein Label
|
||||||
issues.new.clear_labels=Labels entfernen
|
issues.new.clear_labels=Labels entfernen
|
||||||
|
|
@ -848,7 +848,7 @@ activity.title.issues_n=%d Issues
|
||||||
activity.title.issues_closed_by=%s von %s geschlossen
|
activity.title.issues_closed_by=%s von %s geschlossen
|
||||||
activity.title.issues_created_by=%s von %s erstellt
|
activity.title.issues_created_by=%s von %s erstellt
|
||||||
activity.closed_issue_label=Geschlossen
|
activity.closed_issue_label=Geschlossen
|
||||||
activity.new_issues_count_1=Neues Issue
|
activity.new_issues_count_1=Neuer Issue
|
||||||
activity.new_issues_count_n=Neue Issues
|
activity.new_issues_count_n=Neue Issues
|
||||||
activity.new_issue_label=Geöffnet
|
activity.new_issue_label=Geöffnet
|
||||||
activity.title.unresolved_conv_1=%d offene Konversation
|
activity.title.unresolved_conv_1=%d offene Konversation
|
||||||
|
|
|
||||||
|
|
@ -270,7 +270,7 @@ openid_been_used = OpenID address '%s' already used.
|
||||||
username_password_incorrect = Incorrect username or password.
|
username_password_incorrect = Incorrect username or password.
|
||||||
enterred_invalid_repo_name = Please ensure that the repository name you entered is correct.
|
enterred_invalid_repo_name = Please ensure that the repository name you entered is correct.
|
||||||
enterred_invalid_owner_name = Please ensure that the owner name you entered is correct.
|
enterred_invalid_owner_name = Please ensure that the owner name you entered is correct.
|
||||||
enterred_invalid_password = Please ensure the that password you entered is correct.
|
enterred_invalid_password = Please ensure that the password you entered is correct.
|
||||||
user_not_exist = The user does not exist.
|
user_not_exist = The user does not exist.
|
||||||
last_org_owner = Removing the last user from the owner team is not allowed because there must always be at least one owner in any given organization.
|
last_org_owner = Removing the last user from the owner team is not allowed because there must always be at least one owner in any given organization.
|
||||||
cannot_add_org_to_team = Organization cannot be added as a team member.
|
cannot_add_org_to_team = Organization cannot be added as a team member.
|
||||||
|
|
|
||||||
|
|
@ -240,7 +240,6 @@ openid_been_used=La Dirección de OpenID '%s' ya esta en uso.
|
||||||
username_password_incorrect=Nombre de usuario o contraseña incorrectos.
|
username_password_incorrect=Nombre de usuario o contraseña incorrectos.
|
||||||
enterred_invalid_repo_name=Por favor, asegúrate de que has introducido el nombre correctamente.
|
enterred_invalid_repo_name=Por favor, asegúrate de que has introducido el nombre correctamente.
|
||||||
enterred_invalid_owner_name=Por favor, asegúrate de que el nombre del propietario introducido es correcto.
|
enterred_invalid_owner_name=Por favor, asegúrate de que el nombre del propietario introducido es correcto.
|
||||||
enterred_invalid_password=Por favor, asegúrate de que has introducido correctamente tu contraseña.
|
|
||||||
user_not_exist=Este usuario no existe.
|
user_not_exist=Este usuario no existe.
|
||||||
cannot_add_org_to_team=Organización no puede agregarse como un miembro del equipo.
|
cannot_add_org_to_team=Organización no puede agregarse como un miembro del equipo.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -269,7 +269,6 @@ openid_been_used=Adresse OpenID '%s' déjà utilisée.
|
||||||
username_password_incorrect=Nom d'utilisateur ou mot de passe incorrect.
|
username_password_incorrect=Nom d'utilisateur ou mot de passe incorrect.
|
||||||
enterred_invalid_repo_name=Veuillez vérifier que le nom saisi du dépôt soit correct.
|
enterred_invalid_repo_name=Veuillez vérifier que le nom saisi du dépôt soit correct.
|
||||||
enterred_invalid_owner_name=Veuillez vérifier que le nom du propriétaire saisi soit correct.
|
enterred_invalid_owner_name=Veuillez vérifier que le nom du propriétaire saisi soit correct.
|
||||||
enterred_invalid_password=Veuillez vérifier que le mot de passe saisi soit correct.
|
|
||||||
user_not_exist=Cet utilisateur n'existe pas.
|
user_not_exist=Cet utilisateur n'existe pas.
|
||||||
last_org_owner=L'utilisateur à exclure est le dernier membre de l'équipe propriétaire. Il doit y avoir un autre propriétaire.
|
last_org_owner=L'utilisateur à exclure est le dernier membre de l'équipe propriétaire. Il doit y avoir un autre propriétaire.
|
||||||
cannot_add_org_to_team=Une organisation ne peut être ajoutée comme membre d'une équipe.
|
cannot_add_org_to_team=Une organisation ne peut être ajoutée comme membre d'une équipe.
|
||||||
|
|
@ -517,7 +516,7 @@ copied=Copié
|
||||||
unwatch=Ne plus suivre
|
unwatch=Ne plus suivre
|
||||||
watch=Suivre
|
watch=Suivre
|
||||||
unstar=Retirer le vote
|
unstar=Retirer le vote
|
||||||
star=Voter
|
star=Favoriser
|
||||||
fork=Bifurcation
|
fork=Bifurcation
|
||||||
download_archive=Télécharger ce dépôt
|
download_archive=Télécharger ce dépôt
|
||||||
|
|
||||||
|
|
@ -1500,7 +1499,7 @@ reopen_issue=`tickets ré-ouverts <a href="%s/issues/%s">%s#%[2]s</a>`
|
||||||
create_pull_request=`pull request créée le <a href="%s/pulls/%s">%s#%[2]s</a>`
|
create_pull_request=`pull request créée le <a href="%s/pulls/%s">%s#%[2]s</a>`
|
||||||
close_pull_request=`pull request fermé <a href="%s/pulls/%s">%s#%[2]s</a>`
|
close_pull_request=`pull request fermé <a href="%s/pulls/%s">%s#%[2]s</a>`
|
||||||
reopen_pull_request=`pull request ré-ouverte <a href="%s/pulls/%s">%s#%[2]s</a>`
|
reopen_pull_request=`pull request ré-ouverte <a href="%s/pulls/%s">%s#%[2]s</a>`
|
||||||
comment_issue=`a commenté le problème <a href="%s/issues/%s">%s#%[2]s</a>`
|
comment_issue=`a commenté le ticket <a href="%s/issues/%s">%s#%[2]s</a>`
|
||||||
merge_pull_request=`demande d'ajout fusionnée le <a href="%s/pulls/%s">%s#%[2]s</a>`
|
merge_pull_request=`demande d'ajout fusionnée le <a href="%s/pulls/%s">%s#%[2]s</a>`
|
||||||
transfer_repo=a transféré le dépôt <code>%s</code> à <a href="%s">%s</a>
|
transfer_repo=a transféré le dépôt <code>%s</code> à <a href="%s">%s</a>
|
||||||
push_tag=a soumis le tag <a href="%s/src/%s">%[2]s</a> sur <a href="%[1]s">%[3]s</a>
|
push_tag=a soumis le tag <a href="%s/src/%s">%[2]s</a> sur <a href="%[1]s">%[3]s</a>
|
||||||
|
|
|
||||||
|
|
@ -270,7 +270,7 @@ openid_been_used=Az OpenID cím "%s" már használatban van.
|
||||||
username_password_incorrect=Helytelen felhasználónév vagy jelszó.
|
username_password_incorrect=Helytelen felhasználónév vagy jelszó.
|
||||||
enterred_invalid_repo_name=Ellenőrizze, hogy a tároló neve helyes.
|
enterred_invalid_repo_name=Ellenőrizze, hogy a tároló neve helyes.
|
||||||
enterred_invalid_owner_name=Kérlek ellenőrizd, hogy a beírt tulajdonos neve helyes.
|
enterred_invalid_owner_name=Kérlek ellenőrizd, hogy a beírt tulajdonos neve helyes.
|
||||||
enterred_invalid_password=Kérlek ellenőrizd, hogy a beírt jelszó helyes.
|
enterred_invalid_password=Ellenőrizze, hogy a beírt jelszó helyes.
|
||||||
user_not_exist=A fiók nem létezik.
|
user_not_exist=A fiók nem létezik.
|
||||||
last_org_owner=Az utolsó felhasználót nem lehet eltávolítani a tulajdonosi csapatból, mert legalább egy tulajdonosnak lennie kell minden szervezetben.
|
last_org_owner=Az utolsó felhasználót nem lehet eltávolítani a tulajdonosi csapatból, mert legalább egy tulajdonosnak lennie kell minden szervezetben.
|
||||||
cannot_add_org_to_team=Szervezet nem adható hozzá egy csoport tagjaként.
|
cannot_add_org_to_team=Szervezet nem adható hozzá egy csoport tagjaként.
|
||||||
|
|
|
||||||
|
|
@ -238,7 +238,6 @@ openid_been_used=OpenID 주소 '%s' 는 이미 사용중입니다.
|
||||||
username_password_incorrect=사용자 이름 또는 비밀번호가 잘못되었습니다
|
username_password_incorrect=사용자 이름 또는 비밀번호가 잘못되었습니다
|
||||||
enterred_invalid_repo_name=입력한 저장소 이름이 올바른지 확인하십시오.
|
enterred_invalid_repo_name=입력한 저장소 이름이 올바른지 확인하십시오.
|
||||||
enterred_invalid_owner_name=입력한 사용자 이름이 올바른지 확인하십시오.
|
enterred_invalid_owner_name=입력한 사용자 이름이 올바른지 확인하십시오.
|
||||||
enterred_invalid_password=입력한 비밀번호가 올바른지 확인하십시오.
|
|
||||||
user_not_exist=존재하지 않는 사용자입니다.
|
user_not_exist=존재하지 않는 사용자입니다.
|
||||||
last_org_owner=소유자 팀에서 마지막 사용자를 제거하는 것은 허용되지 않습니다. 최소한 한명의 소유자가 있어야 합니다.
|
last_org_owner=소유자 팀에서 마지막 사용자를 제거하는 것은 허용되지 않습니다. 최소한 한명의 소유자가 있어야 합니다.
|
||||||
cannot_add_org_to_team=조직은 팀 멤버로 추가할수 없습니다.
|
cannot_add_org_to_team=조직은 팀 멤버로 추가할수 없습니다.
|
||||||
|
|
|
||||||
|
|
@ -260,7 +260,6 @@ openid_been_used=OpenID adres '%s' reeds gebruikt.
|
||||||
username_password_incorrect=Onjuiste gebruikersnaam en/of wachtwoord.
|
username_password_incorrect=Onjuiste gebruikersnaam en/of wachtwoord.
|
||||||
enterred_invalid_repo_name=U heeft een onjuiste repository naam ingevoerd.
|
enterred_invalid_repo_name=U heeft een onjuiste repository naam ingevoerd.
|
||||||
enterred_invalid_owner_name=U heeft een onjuiste eigenaar ingevoerd.
|
enterred_invalid_owner_name=U heeft een onjuiste eigenaar ingevoerd.
|
||||||
enterred_invalid_password=U heeft een onjuist wachtwoord ingevoerd.
|
|
||||||
user_not_exist=De gebruiker bestaat niet.
|
user_not_exist=De gebruiker bestaat niet.
|
||||||
last_org_owner=De gebruiker die u probeert te verwijderen is het enige lid (eigenaar) van dit team. U moet eerst een nieuw lid (eigenaar) aanstellen.
|
last_org_owner=De gebruiker die u probeert te verwijderen is het enige lid (eigenaar) van dit team. U moet eerst een nieuw lid (eigenaar) aanstellen.
|
||||||
cannot_add_org_to_team=Organisatie kan niet worden toegevoegd als een teamlid.
|
cannot_add_org_to_team=Organisatie kan niet worden toegevoegd als een teamlid.
|
||||||
|
|
|
||||||
|
|
@ -138,6 +138,7 @@ invalid_repo_path=Ścieżka repozytoriów nie jest poprawna: %v
|
||||||
run_user_not_match=Użytkownik aplikacji nie jest aktualnym użytkownikiem: %s -> %s
|
run_user_not_match=Użytkownik aplikacji nie jest aktualnym użytkownikiem: %s -> %s
|
||||||
save_config_failed=Nie udało się zapisać konfiguracji: %v
|
save_config_failed=Nie udało się zapisać konfiguracji: %v
|
||||||
invalid_admin_setting=Nieprawidłowe ustawienia konta admina: %v
|
invalid_admin_setting=Nieprawidłowe ustawienia konta admina: %v
|
||||||
|
install_success=Witaj! Dziękujemy za wybranie Gitea. Miłej zabawy i trzymaj się!
|
||||||
invalid_log_root_path=Ścieżka dla logów jest niepoprawna: %v
|
invalid_log_root_path=Ścieżka dla logów jest niepoprawna: %v
|
||||||
default_keep_email_private=Domyślnie ukrywaj adresy e-mail
|
default_keep_email_private=Domyślnie ukrywaj adresy e-mail
|
||||||
default_keep_email_private_popup=To jest domyślne ustawienie widoczności adresu e-mail użytkowników. Włączone spowoduje, że adres e-mail wszystkich nowych użytkowników zostanie domyślnie ukryty.
|
default_keep_email_private_popup=To jest domyślne ustawienie widoczności adresu e-mail użytkowników. Włączone spowoduje, że adres e-mail wszystkich nowych użytkowników zostanie domyślnie ukryty.
|
||||||
|
|
@ -199,6 +200,8 @@ non_local_account=Nie lokalne konta nie mogą zmieniać haseł przez webowy inte
|
||||||
verify=Potwierdź
|
verify=Potwierdź
|
||||||
scratch_code=Kod jednorazowy
|
scratch_code=Kod jednorazowy
|
||||||
use_scratch_code=Użyj kodu jednorazowego
|
use_scratch_code=Użyj kodu jednorazowego
|
||||||
|
twofa_scratch_used=Użyłeś/aś swojego kodu jednorazowego. Przekierowano Cię do strony z ustawieniami autoryzacji dwuetapowej, gdzie możesz usunąć swoje urządzenie lub wygenerować nowy kod jednorazowy.
|
||||||
|
twofa_passcode_incorrect=Twój kod autoryzacji jest niepoprawny. Jeśli zapodziałeś/aś swoje urządzenie, użyj swojego kodu jednorazowego do zalogowania.
|
||||||
twofa_scratch_token_incorrect=Twój kod jednorazowy jest niepoprawny.
|
twofa_scratch_token_incorrect=Twój kod jednorazowy jest niepoprawny.
|
||||||
login_userpass=Użytkownik / Hasło
|
login_userpass=Użytkownik / Hasło
|
||||||
login_openid=OpenID
|
login_openid=OpenID
|
||||||
|
|
@ -266,7 +269,6 @@ openid_been_used=Adres OpenID '%s' jest już używany.
|
||||||
username_password_incorrect=Nieprawidłowa nazwa użytkownika lub hasło.
|
username_password_incorrect=Nieprawidłowa nazwa użytkownika lub hasło.
|
||||||
enterred_invalid_repo_name=Upewnij się, że wprowadzona nazwa repozytorium jest poprawna.
|
enterred_invalid_repo_name=Upewnij się, że wprowadzona nazwa repozytorium jest poprawna.
|
||||||
enterred_invalid_owner_name=Upewnij się, że nazwa właściciela repozytorium jest poprawna.
|
enterred_invalid_owner_name=Upewnij się, że nazwa właściciela repozytorium jest poprawna.
|
||||||
enterred_invalid_password=Proszę upewnij się, że wprowadzone hasło jest poprawne.
|
|
||||||
user_not_exist=Użytkownik nie istnieje.
|
user_not_exist=Użytkownik nie istnieje.
|
||||||
last_org_owner=Usuwany użytkownik jest ostatnim członkiem ekipy właścicieli. Musi być inny właściciel.
|
last_org_owner=Usuwany użytkownik jest ostatnim członkiem ekipy właścicieli. Musi być inny właściciel.
|
||||||
cannot_add_org_to_team=Organizacja nie może zostać dodana jako członek zespołu.
|
cannot_add_org_to_team=Organizacja nie może zostać dodana jako członek zespołu.
|
||||||
|
|
@ -401,6 +403,7 @@ key_state_desc=Ten klucz był użyty w ciągu ostatnich 7 dni
|
||||||
token_state_desc=Ten token był użyty w ciągu ostatnich 7 dni
|
token_state_desc=Ten token był użyty w ciągu ostatnich 7 dni
|
||||||
show_openid=Pokaż w profilu
|
show_openid=Pokaż w profilu
|
||||||
hide_openid=Ukryj w profilu
|
hide_openid=Ukryj w profilu
|
||||||
|
ssh_disabled=SSH jest wyłączony
|
||||||
|
|
||||||
manage_social=Zarządzaj powiązanymi kontami społecznościowymi
|
manage_social=Zarządzaj powiązanymi kontami społecznościowymi
|
||||||
social_desc=To lista powiązanych kont sieci społecznościowych. Ze względów bezpieczeństwa upewnij się, że rozpoznajesz je wszystkie jako, że można za ich pomocą logować się do Twojego konta.
|
social_desc=To lista powiązanych kont sieci społecznościowych. Ze względów bezpieczeństwa upewnij się, że rozpoznajesz je wszystkie jako, że można za ich pomocą logować się do Twojego konta.
|
||||||
|
|
@ -430,14 +433,17 @@ twofa_disable_note=W razie potrzeby można wyłączyć uwierzytelnianie dwuetapo
|
||||||
twofa_disable_desc=Wyłączenie dwuetapowej autoryzacji sprawi, że Twoje konto będzie mniej bezpieczne. Czy na pewno chcesz kontynuować?
|
twofa_disable_desc=Wyłączenie dwuetapowej autoryzacji sprawi, że Twoje konto będzie mniej bezpieczne. Czy na pewno chcesz kontynuować?
|
||||||
regenerate_scratch_token_desc=Jeśli zgubiłeś lub zużyłeś swój scratch token możesz go wygenerować tutaj.
|
regenerate_scratch_token_desc=Jeśli zgubiłeś lub zużyłeś swój scratch token możesz go wygenerować tutaj.
|
||||||
twofa_disabled=Dwuetapowa autoryzacja została wyłączona.
|
twofa_disabled=Dwuetapowa autoryzacja została wyłączona.
|
||||||
|
scan_this_image=Zeskanuj ten obraz za pomocą swojej aplikacji uwierzytelniającej:
|
||||||
or_enter_secret=Lub wprowadź sekret: %s
|
or_enter_secret=Lub wprowadź sekret: %s
|
||||||
then_enter_passcode=I podaj kod autoryzacji otrzymany z aplikacji:
|
then_enter_passcode=I podaj kod autoryzacji otrzymany z aplikacji:
|
||||||
passcode_invalid=Kod dostępu jest nieprawidłowy. Spróbuj ponownie.
|
passcode_invalid=Kod dostępu jest nieprawidłowy. Spróbuj ponownie.
|
||||||
|
twofa_enrolled=Twoje konto ma teraz włączoną autoryzację dwuetapową. Koniecznie zachowaj swój kod jednorazowy (%s), ponieważ zostanie pokazany tylko raz!
|
||||||
|
|
||||||
manage_account_links=Zarządzaj połączonymi kontami
|
manage_account_links=Zarządzaj połączonymi kontami
|
||||||
manage_account_links_desc=Zewnętrzne konta połączone z tym kontem
|
manage_account_links_desc=Zewnętrzne konta połączone z tym kontem
|
||||||
account_links_not_available=Obecnie nie ma żadnych zewnętrznych kont połączonych z tym kontem
|
account_links_not_available=Obecnie nie ma żadnych zewnętrznych kont połączonych z tym kontem
|
||||||
remove_account_link=Usuń powiązane konto
|
remove_account_link=Usuń powiązane konto
|
||||||
|
remove_account_link_desc=Usunięcie tego konta powiązanego spowoduje cofnięcie mu wszystkich dostępów. Na pewno chcesz kontynuować?
|
||||||
remove_account_link_success=Link do konta zostały pomyślnie usunięty!
|
remove_account_link_success=Link do konta zostały pomyślnie usunięty!
|
||||||
|
|
||||||
orgs_none=Nie jesteś członkiem żadnej organizacji.
|
orgs_none=Nie jesteś członkiem żadnej organizacji.
|
||||||
|
|
@ -454,6 +460,7 @@ owner=Właściciel
|
||||||
repo_name=Nazwa repozytorium
|
repo_name=Nazwa repozytorium
|
||||||
repo_name_helper=Dobra nazwa repozytorium jest utworzona z krótkich, łatwych do zapamiętania i unikalnych słów kluczowych.
|
repo_name_helper=Dobra nazwa repozytorium jest utworzona z krótkich, łatwych do zapamiętania i unikalnych słów kluczowych.
|
||||||
visibility=Widoczność
|
visibility=Widoczność
|
||||||
|
visiblity_helper=To repozytorium jest <span class="ui red text">prywatne</span>
|
||||||
visiblity_helper_forced=Administrator systemu wymaga, żeby wszystkie nowe repozytoria były <span class="ui red text">prywatne</span>
|
visiblity_helper_forced=Administrator systemu wymaga, żeby wszystkie nowe repozytoria były <span class="ui red text">prywatne</span>
|
||||||
visiblity_fork_helper=(Zmiana tej wartości wpłynie na wszystkie forki)
|
visiblity_fork_helper=(Zmiana tej wartości wpłynie na wszystkie forki)
|
||||||
clone_helper=Potrzebujesz pomocy z klonowaniem? Odwiedź <a target="_blank" rel="noopener" href="%s">Pomoc</a>!
|
clone_helper=Potrzebujesz pomocy z klonowaniem? Odwiedź <a target="_blank" rel="noopener" href="%s">Pomoc</a>!
|
||||||
|
|
@ -480,6 +487,8 @@ mirror_last_synced=Ostatnia synchronizacja
|
||||||
watchers=Obserwujący
|
watchers=Obserwujący
|
||||||
stargazers=Polubienia
|
stargazers=Polubienia
|
||||||
forks=Forki
|
forks=Forki
|
||||||
|
pick_reaction=Wybierz swoją reakcję
|
||||||
|
reactions_more=i %d więcej
|
||||||
|
|
||||||
form.reach_limit_of_creation=Osiągnąłeś limit %d repozytoriów.
|
form.reach_limit_of_creation=Osiągnąłeś limit %d repozytoriów.
|
||||||
form.name_reserved=Nazwa repozytorium „%s” jest zarezerwowana.
|
form.name_reserved=Nazwa repozytorium „%s” jest zarezerwowana.
|
||||||
|
|
@ -487,6 +496,7 @@ form.name_pattern_not_allowed=Wzorzec nazwy repozytorium „%s” jest niedozwol
|
||||||
|
|
||||||
need_auth=Wymaga autoryzacji
|
need_auth=Wymaga autoryzacji
|
||||||
migrate_type=Typ migracji
|
migrate_type=Typ migracji
|
||||||
|
migrate_type_helper=To repozytorium będzie <span class="text blue">kopią lustrzaną</span>
|
||||||
migrate_repo=Przenieś repozytorium
|
migrate_repo=Przenieś repozytorium
|
||||||
migrate.clone_address=Sklonuj adres
|
migrate.clone_address=Sklonuj adres
|
||||||
migrate.clone_address_desc=To może być adres HTTP/HTTPS/GIT lub ścieżka lokalna serwera.
|
migrate.clone_address_desc=To może być adres HTTP/HTTPS/GIT lub ścieżka lokalna serwera.
|
||||||
|
|
@ -513,6 +523,8 @@ no_desc=Brak opisu
|
||||||
quick_guide=Skrócona instrukcja
|
quick_guide=Skrócona instrukcja
|
||||||
clone_this_repo=Klonuj repozytorium
|
clone_this_repo=Klonuj repozytorium
|
||||||
create_new_repo_command=Tworzenie nowego repozytorium z linii poleceń
|
create_new_repo_command=Tworzenie nowego repozytorium z linii poleceń
|
||||||
|
push_exist_repo=Wypychanie istniejącego repozytorium z linii poleceń
|
||||||
|
bare_message=Repozytorium jest puste.
|
||||||
|
|
||||||
code=Kod
|
code=Kod
|
||||||
code.desc=Kod jest miejscem przechowywania kodu źródłowego
|
code.desc=Kod jest miejscem przechowywania kodu źródłowego
|
||||||
|
|
@ -526,6 +538,7 @@ pulls=Pull Requests
|
||||||
labels=Etykiety
|
labels=Etykiety
|
||||||
milestones=Kamienie milowe
|
milestones=Kamienie milowe
|
||||||
commits=Commity
|
commits=Commity
|
||||||
|
commit=Commit
|
||||||
releases=Wydania
|
releases=Wydania
|
||||||
file_raw=Czysty
|
file_raw=Czysty
|
||||||
file_history=Historia
|
file_history=Historia
|
||||||
|
|
@ -542,6 +555,7 @@ editor.edit_file=Edytuj plik
|
||||||
editor.preview_changes=Podgląd zmian
|
editor.preview_changes=Podgląd zmian
|
||||||
editor.cannot_edit_non_text_files=Nie można edytować plików binarnych przez interfejs webowy
|
editor.cannot_edit_non_text_files=Nie można edytować plików binarnych przez interfejs webowy
|
||||||
editor.edit_this_file=Edytuj ten plik
|
editor.edit_this_file=Edytuj ten plik
|
||||||
|
editor.must_be_on_a_branch=Musisz być na gałęzi, aby zgłosić lub zaproponować zmiany tego pliku
|
||||||
editor.fork_before_edit=Musisz sforkować to repozytorium przed edycją tego pliku
|
editor.fork_before_edit=Musisz sforkować to repozytorium przed edycją tego pliku
|
||||||
editor.delete_this_file=Usuń ten plik
|
editor.delete_this_file=Usuń ten plik
|
||||||
editor.must_have_write_access=Musisz mieć uprawnienia do zapisu, aby zgłosić lub zaproponować zmiany do tego pliku
|
editor.must_have_write_access=Musisz mieć uprawnienia do zapisu, aby zgłosić lub zaproponować zmiany do tego pliku
|
||||||
|
|
@ -566,6 +580,7 @@ editor.directory_is_a_file=Wpis '%s' w ścieżce nadrzędnej jest plikiem a nie
|
||||||
editor.file_is_a_symlink=Plik '%s' jest dowiązaniem symbolicznym które nie może być edytowane przez webowy interfejs
|
editor.file_is_a_symlink=Plik '%s' jest dowiązaniem symbolicznym które nie może być edytowane przez webowy interfejs
|
||||||
editor.filename_is_a_directory=Nazwa '%s' jest istniejącym katalogiem w tym repozytorium.
|
editor.filename_is_a_directory=Nazwa '%s' jest istniejącym katalogiem w tym repozytorium.
|
||||||
editor.file_editing_no_longer_exists=Plik '%s' który edytujesz nie istnieje już w tym repozytorium.
|
editor.file_editing_no_longer_exists=Plik '%s' który edytujesz nie istnieje już w tym repozytorium.
|
||||||
|
editor.file_changed_while_editing=Zawartość pliku została w międzyczasie zmieniona. <a target="_blank" href="%s">Kliknij tutaj</a>, aby zobaczyć co zostało zmienione lub <strong>ponownie naciśnij commit</strong>, aby nadpisać te zmiany.
|
||||||
editor.file_already_exists=Nazwa pliku '%s' już istnieje w tym repozytorium.
|
editor.file_already_exists=Nazwa pliku '%s' już istnieje w tym repozytorium.
|
||||||
editor.no_changes_to_show=Brak zmian do pokazania.
|
editor.no_changes_to_show=Brak zmian do pokazania.
|
||||||
editor.fail_to_update_file=Tworzenie/aktualizacja pliku '%s' nie powiodła się z błędem: %v
|
editor.fail_to_update_file=Tworzenie/aktualizacja pliku '%s' nie powiodła się z błędem: %v
|
||||||
|
|
@ -613,6 +628,8 @@ issues.label_templates.info=Nie ma jeszcze żadnych etykiet. Kliknij na przycisk
|
||||||
issues.label_templates.helper=Wybierz zestaw etykiet
|
issues.label_templates.helper=Wybierz zestaw etykiet
|
||||||
issues.label_templates.use=Użyj ten zestaw etykiet
|
issues.label_templates.use=Użyj ten zestaw etykiet
|
||||||
issues.label_templates.fail_to_load_file=Ładowanie pliku szablonu etykiety '%s' nie powiodło się: %v
|
issues.label_templates.fail_to_load_file=Ładowanie pliku szablonu etykiety '%s' nie powiodło się: %v
|
||||||
|
issues.add_label_at=dodano etykietę <div class="ui label" style="color: %s\; background-color: %s">%s</div> %s
|
||||||
|
issues.remove_label_at=usunięto etykietę <div class="ui label" style="color: %s\; background-color: %s">%s</div> %s
|
||||||
issues.change_milestone_at=`zmodyfikował kamień milowy z <b>%s</b> na <b>%s</b> %s`
|
issues.change_milestone_at=`zmodyfikował kamień milowy z <b>%s</b> na <b>%s</b> %s`
|
||||||
issues.deleted_milestone=`(usunięto)`
|
issues.deleted_milestone=`(usunięto)`
|
||||||
issues.self_assign_at=`samo przypisany do %s`
|
issues.self_assign_at=`samo przypisany do %s`
|
||||||
|
|
@ -764,6 +781,7 @@ milestones.filter_sort.most_issues=Najwięcej problemów
|
||||||
milestones.filter_sort.least_issues=Najmniej problemów
|
milestones.filter_sort.least_issues=Najmniej problemów
|
||||||
|
|
||||||
ext_wiki=Zewnętrzna Wiki
|
ext_wiki=Zewnętrzna Wiki
|
||||||
|
ext_wiki.desc=Zewn. wiki linkuje do zewnętrznego systemu wiki
|
||||||
|
|
||||||
wiki=Wiki
|
wiki=Wiki
|
||||||
wiki.welcome=Witamy w Wiki
|
wiki.welcome=Witamy w Wiki
|
||||||
|
|
@ -781,6 +799,7 @@ wiki.new_page_button=Nowa strona
|
||||||
wiki.delete_page_button=Usuń stronę
|
wiki.delete_page_button=Usuń stronę
|
||||||
wiki.delete_page_notice_1=Spowoduje to usunięcie strony <code>"%s:</code>. Upewnij się, że chcesz ja usunąć.
|
wiki.delete_page_notice_1=Spowoduje to usunięcie strony <code>"%s:</code>. Upewnij się, że chcesz ja usunąć.
|
||||||
wiki.page_already_exists=Strona Wiki o tej samej nazwie już istnieje.
|
wiki.page_already_exists=Strona Wiki o tej samej nazwie już istnieje.
|
||||||
|
wiki.reserved_page=Nazwa strony wiki "%s" jest zajęta. Proszę wybrać inną nazwę.
|
||||||
wiki.pages=Strony
|
wiki.pages=Strony
|
||||||
wiki.last_updated=Ostatnia aktualizacja %s
|
wiki.last_updated=Ostatnia aktualizacja %s
|
||||||
|
|
||||||
|
|
@ -818,6 +837,8 @@ activity.new_issues_count_1=Nowy problem
|
||||||
activity.new_issues_count_n=Nowe problemy
|
activity.new_issues_count_n=Nowe problemy
|
||||||
activity.new_issue_label=Otwarte
|
activity.new_issue_label=Otwarte
|
||||||
activity.title.unresolved_conv_1=%d nierozstrzygnięta dyskusja
|
activity.title.unresolved_conv_1=%d nierozstrzygnięta dyskusja
|
||||||
|
activity.title.unresolved_conv_n=Nierozstrzygniętych dyskusji: %d
|
||||||
|
activity.unresolved_conv_desc=Lista wszystkich starych zgłoszeń i żądań ściągnięcia, które zostały ostatnio zmienione, ale nie został jeszcze rozwiązane.
|
||||||
activity.unresolved_conv_label=Otwarte
|
activity.unresolved_conv_label=Otwarte
|
||||||
activity.title.releases_1=%d Wydanie
|
activity.title.releases_1=%d Wydanie
|
||||||
activity.title.releases_n=%d Wydań
|
activity.title.releases_n=%d Wydań
|
||||||
|
|
@ -826,6 +847,7 @@ activity.published_release_label=Opublikowane
|
||||||
|
|
||||||
search=Szukaj
|
search=Szukaj
|
||||||
search.search_repo=Szukaj repozytorium
|
search.search_repo=Szukaj repozytorium
|
||||||
|
search.results=Wyniki wyszukiwania dla "%s" w <a href="%s">%s</a>
|
||||||
|
|
||||||
settings=Ustawienia
|
settings=Ustawienia
|
||||||
settings.desc=Ustawienia to miejsce, w którym możesz zmieniać parametry repozytorium
|
settings.desc=Ustawienia to miejsce, w którym możesz zmieniać parametry repozytorium
|
||||||
|
|
@ -864,6 +886,7 @@ settings.tracker_url_format_desc=Symbole zastępcze <code>{user} {repo} {index}<
|
||||||
settings.enable_timetracker=Włącz śledzenie czasu
|
settings.enable_timetracker=Włącz śledzenie czasu
|
||||||
settings.allow_only_contributors_to_track_time=Pozwól jedynie współpracownikom na śledzenie czasu
|
settings.allow_only_contributors_to_track_time=Pozwól jedynie współpracownikom na śledzenie czasu
|
||||||
settings.pulls_desc=Włącz obsługę pull request, aby akceptować publiczny wkład
|
settings.pulls_desc=Włącz obsługę pull request, aby akceptować publiczny wkład
|
||||||
|
settings.pulls.allow_merge_commits=Zezwól na komentarze przy scalaniu
|
||||||
settings.danger_zone=Strefa niebezpieczeństwa
|
settings.danger_zone=Strefa niebezpieczeństwa
|
||||||
settings.new_owner_has_same_repo=Nowy właściciel już posiada repozytorium o tej samej nazwie.
|
settings.new_owner_has_same_repo=Nowy właściciel już posiada repozytorium o tej samej nazwie.
|
||||||
settings.convert=Konwersja na repozytorium regularne
|
settings.convert=Konwersja na repozytorium regularne
|
||||||
|
|
@ -883,6 +906,7 @@ settings.wiki_deletion_success=Dane wiki repozytorium zostały pomyślnie usuni
|
||||||
settings.delete=Usuń to repozytorium
|
settings.delete=Usuń to repozytorium
|
||||||
settings.delete_desc=Po usunięciu repozytorium nie ma odwrotu. Upewnij się, że tego chcesz.
|
settings.delete_desc=Po usunięciu repozytorium nie ma odwrotu. Upewnij się, że tego chcesz.
|
||||||
settings.delete_notices_1=- Ta operacja <strong>NIE MOŻE</strong> zostać cofnięta.
|
settings.delete_notices_1=- Ta operacja <strong>NIE MOŻE</strong> zostać cofnięta.
|
||||||
|
settings.delete_notices_2=- Ta operacja trwale usunie wszystko z repozytorium <strong>%s</strong>, w tym kod źródłowy, zagadnienia, komentarze, wiki i dostęp dla współpracowników.
|
||||||
settings.delete_notices_fork_1=- Wszystkie forki staną się niezależnymi repozytoriami po usunięciu.
|
settings.delete_notices_fork_1=- Wszystkie forki staną się niezależnymi repozytoriami po usunięciu.
|
||||||
settings.deletion_success=Repozytorium zostało usunięte.
|
settings.deletion_success=Repozytorium zostało usunięte.
|
||||||
settings.update_settings_success=Ustawienia repozytorium zostały zaktualizowane.
|
settings.update_settings_success=Ustawienia repozytorium zostały zaktualizowane.
|
||||||
|
|
@ -900,6 +924,7 @@ settings.search_user_placeholder=Szukaj użytkownika...
|
||||||
settings.org_not_allowed_to_be_collaborator=Organizacji nie można dodać jako współpracownika.
|
settings.org_not_allowed_to_be_collaborator=Organizacji nie można dodać jako współpracownika.
|
||||||
settings.user_is_org_member=Użytkownik jest członkiem organizacji, który nie może być dodany jako współpracownik.
|
settings.user_is_org_member=Użytkownik jest członkiem organizacji, który nie może być dodany jako współpracownik.
|
||||||
settings.add_webhook=Dodaj webhooka
|
settings.add_webhook=Dodaj webhooka
|
||||||
|
settings.hooks_desc=Webhooki działają jak proste wyzwalacze żądań HTTP POST. Jeśli cokolwiek zdarzy się w Gitea, wyślemy powiadomienie do wybranego hosta. Więcej informacji można znaleźć w <a target="_blank" rel="noopener" href="%s">przewodniku webhooków</a>.
|
||||||
settings.webhook_deletion=Usuń webhooka
|
settings.webhook_deletion=Usuń webhooka
|
||||||
settings.webhook_deletion_desc=Usunięcie tego webooka spowoduje usunięcie powiązanych informacji i wpisów w historii. Czy chcesz kontynuować?
|
settings.webhook_deletion_desc=Usunięcie tego webooka spowoduje usunięcie powiązanych informacji i wpisów w historii. Czy chcesz kontynuować?
|
||||||
settings.webhook_deletion_success=Webhook został pomyślnie usunięty!
|
settings.webhook_deletion_success=Webhook został pomyślnie usunięty!
|
||||||
|
|
@ -950,9 +975,11 @@ settings.slack_token=Token
|
||||||
settings.slack_domain=Domena
|
settings.slack_domain=Domena
|
||||||
settings.slack_channel=Kanał
|
settings.slack_channel=Kanał
|
||||||
settings.add_discord_hook_desc=Dodaj integrację z <a href="%s">Discordem</a> do swojego repozytorium.
|
settings.add_discord_hook_desc=Dodaj integrację z <a href="%s">Discordem</a> do swojego repozytorium.
|
||||||
|
settings.add_dingtalk_hook_desc=Dodaj integrację z <a href="%s">Dingtalk</a> do swojego repozytorium.
|
||||||
settings.deploy_keys=Klucze wdrożeniowe
|
settings.deploy_keys=Klucze wdrożeniowe
|
||||||
settings.add_deploy_key=Dodaj klucz wdrożenia
|
settings.add_deploy_key=Dodaj klucz wdrożenia
|
||||||
settings.deploy_key_desc=Klucze wdrożenia pozwalają na dostęp tylko do odczytu. To nie to samo co klucze SSH dla konta osobistego.
|
settings.deploy_key_desc=Klucze wdrożenia pozwalają na dostęp tylko do odczytu. To nie to samo co klucze SSH dla konta osobistego.
|
||||||
|
settings.is_writable=Przyznaj dostęp do zapisu
|
||||||
settings.no_deploy_keys=Nie dodałeś żadnego klucza wdrożenia.
|
settings.no_deploy_keys=Nie dodałeś żadnego klucza wdrożenia.
|
||||||
settings.title=Tytuł
|
settings.title=Tytuł
|
||||||
settings.deploy_key_content=Treść
|
settings.deploy_key_content=Treść
|
||||||
|
|
@ -969,6 +996,7 @@ settings.protected_branch_can_push_yes=Możesz wysyłać
|
||||||
settings.protected_branch_can_push_no=Nie możesz wysyłać
|
settings.protected_branch_can_push_no=Nie możesz wysyłać
|
||||||
settings.branch_protection=Ochrona gałęzi dla <b>%s</b>
|
settings.branch_protection=Ochrona gałęzi dla <b>%s</b>
|
||||||
settings.protect_this_branch=Chroń tą gałąź
|
settings.protect_this_branch=Chroń tą gałąź
|
||||||
|
settings.protect_this_branch_desc=Wyłącz wymuszone wypchnięcia i zabroń usuwania.
|
||||||
settings.protect_whitelist_committers=Użytkownicy, którzy mogą wypychać do tej gałęzi
|
settings.protect_whitelist_committers=Użytkownicy, którzy mogą wypychać do tej gałęzi
|
||||||
settings.protect_whitelist_committers_desc=Dodaj użytkowników lub zespoły do białej listy tej gałęzi. Użytkowników z białej listy nie dotyczą typowe ograniczenia wypchnięć.
|
settings.protect_whitelist_committers_desc=Dodaj użytkowników lub zespoły do białej listy tej gałęzi. Użytkowników z białej listy nie dotyczą typowe ograniczenia wypchnięć.
|
||||||
settings.protect_whitelist_users=Użytkownicy, którzy mogą wypychać do tej gałęzi
|
settings.protect_whitelist_users=Użytkownicy, którzy mogą wypychać do tej gałęzi
|
||||||
|
|
@ -981,6 +1009,7 @@ settings.update_protect_branch_success=Pomyślnie zmieniono ustawienia ochrony g
|
||||||
settings.remove_protected_branch_success=Pomyślnie usunięto ustawienia ochrony gałęzi %s
|
settings.remove_protected_branch_success=Pomyślnie usunięto ustawienia ochrony gałęzi %s
|
||||||
settings.protected_branch_deletion=W celu usunięcia chronionej gałęzi
|
settings.protected_branch_deletion=W celu usunięcia chronionej gałęzi
|
||||||
settings.protected_branch_deletion_desc=Każdy z prawami zapisu będzie w stanie wypychać zmiany bezpośrednio do tej gałęzi. Jesteś pewien/pewna?
|
settings.protected_branch_deletion_desc=Każdy z prawami zapisu będzie w stanie wypychać zmiany bezpośrednio do tej gałęzi. Jesteś pewien/pewna?
|
||||||
|
settings.default_branch_desc=Domyślna gałąź jest uznawana za "bazową". Dopóki nie ustawisz innej gałęzi, wszystkie pull requesty i commity będą automatycznie kierowane do bazowej.
|
||||||
settings.choose_branch=Wybierz gałąź...
|
settings.choose_branch=Wybierz gałąź...
|
||||||
settings.no_protected_branch=Nie ma chronionych gałęzi
|
settings.no_protected_branch=Nie ma chronionych gałęzi
|
||||||
|
|
||||||
|
|
@ -1160,11 +1189,16 @@ dashboard.delete_inactivate_accounts=Usuń wszystkie nieaktywne konta
|
||||||
dashboard.delete_inactivate_accounts_success=Wszystkie nieaktywne konta zostały usunięte.
|
dashboard.delete_inactivate_accounts_success=Wszystkie nieaktywne konta zostały usunięte.
|
||||||
dashboard.delete_repo_archives=Usuń wszystkie archiwa repozytoriów
|
dashboard.delete_repo_archives=Usuń wszystkie archiwa repozytoriów
|
||||||
dashboard.delete_repo_archives_success=Pomyślnie usunięto wszystkie archiwa repozytoriów.
|
dashboard.delete_repo_archives_success=Pomyślnie usunięto wszystkie archiwa repozytoriów.
|
||||||
|
dashboard.delete_missing_repos=Usuń wszystkie rekordy repozytoriów, które nie mają plików Git
|
||||||
dashboard.delete_missing_repos_success=Wszystkie repozytoria, które nie miały plików Git zostały usunięte.
|
dashboard.delete_missing_repos_success=Wszystkie repozytoria, które nie miały plików Git zostały usunięte.
|
||||||
dashboard.git_gc_repos=Uruchom usuwanie śmieci ze wszystkich repozytoriów
|
dashboard.git_gc_repos=Uruchom usuwanie śmieci ze wszystkich repozytoriów
|
||||||
dashboard.git_gc_repos_success=Wszystkie repozytoria zakończyły procedurę usuwania śmieci.
|
dashboard.git_gc_repos_success=Wszystkie repozytoria zakończyły procedurę usuwania śmieci.
|
||||||
dashboard.resync_all_sshkeys=Przepisz plik '.ssh/authorized_keys' (dla kluczy SSH Gitea). Nie ma potrzeby tego robić, jeśli używasz wbudowanego serwera SSH.
|
dashboard.resync_all_sshkeys=Przepisz plik '.ssh/authorized_keys' (dla kluczy SSH Gitea). Nie ma potrzeby tego robić, jeśli używasz wbudowanego serwera SSH.
|
||||||
dashboard.resync_all_sshkeys_success=Wszystkie klucze publiczne zarządzane przez Gitea zostały przepisane.
|
dashboard.resync_all_sshkeys_success=Wszystkie klucze publiczne zarządzane przez Gitea zostały przepisane.
|
||||||
|
dashboard.resync_all_hooks=Ponownie synchronizuj "hooki" "pre-receive", "update" i "post-receive" wszystkich repozytoriów.
|
||||||
|
dashboard.resync_all_hooks_success=Hooki" "pre-receive", "update" i "post-receive" wszystkich repozytoriów zostały ponownie zsynchronizowane.
|
||||||
|
dashboard.reinit_missing_repos=Ponownie zainicjalizuj wszystkie brakujące repozytoria Git, dla których istnieją rekordy
|
||||||
|
dashboard.reinit_missing_repos_success=Wszystkie brakujące repozytoria Git, dla których istnieją rekordy, zostały zainicjalizowane.
|
||||||
dashboard.sync_external_users=Synchronizuj zewnętrzne dane użytkownika
|
dashboard.sync_external_users=Synchronizuj zewnętrzne dane użytkownika
|
||||||
dashboard.sync_external_users_started=Synchronizacja zewnętrznych danych użytkownika rozpoczęta
|
dashboard.sync_external_users_started=Synchronizacja zewnętrznych danych użytkownika rozpoczęta
|
||||||
dashboard.server_uptime=Uptime serwera
|
dashboard.server_uptime=Uptime serwera
|
||||||
|
|
@ -1220,11 +1254,13 @@ users.max_repo_creation_desc=(Ustaw -1, aby użyć globalnego limitu)
|
||||||
users.is_activated=Konto aktywowane
|
users.is_activated=Konto aktywowane
|
||||||
users.prohibit_login=Logowanie wyłączone
|
users.prohibit_login=Logowanie wyłączone
|
||||||
users.is_admin=Uprawnienia administratora
|
users.is_admin=Uprawnienia administratora
|
||||||
|
users.allow_git_hook=Może tworzyć hooki Git
|
||||||
users.allow_import_local=Może importować lokalne repozytoria
|
users.allow_import_local=Może importować lokalne repozytoria
|
||||||
users.allow_create_organization=Może tworzyć organizacje
|
users.allow_create_organization=Może tworzyć organizacje
|
||||||
users.update_profile=Zaktualizuj profil konta
|
users.update_profile=Zaktualizuj profil konta
|
||||||
users.delete_account=Usuń konto
|
users.delete_account=Usuń konto
|
||||||
users.still_own_repo=Ten użytkownik wciąż posiada jedno lub więcej repozytoriów. Muszą one najpierw zostać usunięte lub przetransferowane.
|
users.still_own_repo=Ten użytkownik wciąż posiada jedno lub więcej repozytoriów. Muszą one najpierw zostać usunięte lub przetransferowane.
|
||||||
|
users.still_has_org=Ten użytkownik dalej posiada członkostwo w przynajmniej jednej organizacji. Musi ją najpierw opuścić lub usunąć.
|
||||||
users.deletion_success=Konto usunięte pomyślnie.
|
users.deletion_success=Konto usunięte pomyślnie.
|
||||||
|
|
||||||
orgs.org_manage_panel=Zarządzanie organizacją
|
orgs.org_manage_panel=Zarządzanie organizacją
|
||||||
|
|
@ -1255,7 +1291,9 @@ auths.security_protocol=Protokół zabezpieczeń
|
||||||
auths.domain=Domena
|
auths.domain=Domena
|
||||||
auths.host=Serwer
|
auths.host=Serwer
|
||||||
auths.port=Port
|
auths.port=Port
|
||||||
|
auths.bind_dn=DN powiązania
|
||||||
auths.bind_password=Hasło Bind
|
auths.bind_password=Hasło Bind
|
||||||
|
auths.bind_password_helper=Uwaga: To hasło jest przechowywane bez szyfrowania. Zdecydowanie zalecane jest użycie konta z uprawnieniami tylko do odczytu.
|
||||||
auths.user_base=Baza wyszukiwania
|
auths.user_base=Baza wyszukiwania
|
||||||
auths.user_dn=DN użytkownika
|
auths.user_dn=DN użytkownika
|
||||||
auths.attribute_username=Atrybut nazwy użytkownika
|
auths.attribute_username=Atrybut nazwy użytkownika
|
||||||
|
|
@ -1266,6 +1304,7 @@ auths.attribute_mail=Atrybut e-mail
|
||||||
auths.attributes_in_bind=Pobierz atrybuty w kontekście Bind DN
|
auths.attributes_in_bind=Pobierz atrybuty w kontekście Bind DN
|
||||||
auths.filter=Filtr użytkownika
|
auths.filter=Filtr użytkownika
|
||||||
auths.admin_filter=Filtr administratora
|
auths.admin_filter=Filtr administratora
|
||||||
|
auths.ms_ad_sa=Atrybuty wyszukiwania MS AD
|
||||||
auths.smtp_auth=Typ uwierzytelnienia SMTP
|
auths.smtp_auth=Typ uwierzytelnienia SMTP
|
||||||
auths.smtphost=Serwer SMTP
|
auths.smtphost=Serwer SMTP
|
||||||
auths.smtpport=Port SMTP
|
auths.smtpport=Port SMTP
|
||||||
|
|
@ -1276,6 +1315,10 @@ auths.skip_tls_verify=Pomiń weryfikację protokołu TLS
|
||||||
auths.pam_service_name=Nazwa usługi PAM
|
auths.pam_service_name=Nazwa usługi PAM
|
||||||
auths.oauth2_provider=Dostawca OAuth2
|
auths.oauth2_provider=Dostawca OAuth2
|
||||||
auths.oauth2_clientID=ID klienta (klucz)
|
auths.oauth2_clientID=ID klienta (klucz)
|
||||||
|
auths.oauth2_clientSecret=Sekretny Token
|
||||||
|
auths.openIdConnectAutoDiscoveryURL=OpenID Connect Auto Discovery URL
|
||||||
|
auths.oauth2_use_custom_url=Użyj niestandardowych adresów URL, zamiast domyślnych adresów URL
|
||||||
|
auths.oauth2_tokenURL=Adres URL tokena
|
||||||
auths.oauth2_authURL=URL autoryzacji
|
auths.oauth2_authURL=URL autoryzacji
|
||||||
auths.oauth2_profileURL=URL profilu
|
auths.oauth2_profileURL=URL profilu
|
||||||
auths.oauth2_emailURL=URL adresu e-mail
|
auths.oauth2_emailURL=URL adresu e-mail
|
||||||
|
|
@ -1284,13 +1327,16 @@ auths.tips=Wskazówki
|
||||||
auths.tips.oauth2.general=Uwierzytelnianie OAuth2
|
auths.tips.oauth2.general=Uwierzytelnianie OAuth2
|
||||||
auths.tips.oauth2.general.tip=Przy rejestracji nowego uwierzytelnienia OAuth2, URL zwrotny/przekierowań powinien mieć postać <serwer>/user/oauth2/<nazwa uwierzytelnienia>/callback
|
auths.tips.oauth2.general.tip=Przy rejestracji nowego uwierzytelnienia OAuth2, URL zwrotny/przekierowań powinien mieć postać <serwer>/user/oauth2/<nazwa uwierzytelnienia>/callback
|
||||||
auths.tip.oauth2_provider=Dostawca OAuth2
|
auths.tip.oauth2_provider=Dostawca OAuth2
|
||||||
|
auths.tip.bitbucket=Zarejestruj nowego konsumenta OAuth na https://bitbucket.org/account/user/<your username>/oauth-consumers/new i dodaj uprawnienie "Account"-"Read
|
||||||
auths.tip.dropbox=Stwórz nową aplikację na https://www.dropbox.com/developers/apps
|
auths.tip.dropbox=Stwórz nową aplikację na https://www.dropbox.com/developers/apps
|
||||||
auths.tip.facebook=Zarejestruj nową aplikację na https://developers.facebook.com/apps i dodaj produkt "Facebook Login
|
auths.tip.facebook=Zarejestruj nową aplikację na https://developers.facebook.com/apps i dodaj produkt "Facebook Login
|
||||||
auths.tip.github=Zarejestruj nową aplikację OAuth na https://github.com/settings/applications/new
|
auths.tip.github=Zarejestruj nową aplikację OAuth na https://github.com/settings/applications/new
|
||||||
auths.tip.gitlab=Zarejestruj nową aplikację na https://gitlab.com/profile/applications
|
auths.tip.gitlab=Zarejestruj nową aplikację na https://gitlab.com/profile/applications
|
||||||
|
auths.tip.google_plus=Uzyskaj dane uwierzytelniające klienta OAuth2 z konsoli Google API (https://console.developers.google.com/)
|
||||||
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.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.edit=Edytuj ustawienia uwierzytelniania
|
auths.edit=Edytuj ustawienia uwierzytelniania
|
||||||
auths.activated=To uwierzytelnienie zostało aktywowane
|
auths.activated=To uwierzytelnienie zostało aktywowane
|
||||||
|
auths.new_success=Uwierzytelnienie '%s' zostało dodane.
|
||||||
auths.update_success=Ustawienia uwierzytelniania zostały zaktualizowane.
|
auths.update_success=Ustawienia uwierzytelniania zostały zaktualizowane.
|
||||||
auths.update=Aktualizuj ustawienia uwierzytelniania
|
auths.update=Aktualizuj ustawienia uwierzytelniania
|
||||||
auths.delete=Usuń to źródło uwierzytelniania
|
auths.delete=Usuń to źródło uwierzytelniania
|
||||||
|
|
@ -1437,6 +1483,7 @@ notices.type=Typ
|
||||||
notices.type_1=Repozytorium
|
notices.type_1=Repozytorium
|
||||||
notices.desc=Opis
|
notices.desc=Opis
|
||||||
notices.op=Operacja
|
notices.op=Operacja
|
||||||
|
notices.delete_success=Powiadomienia systemu zostały usunięte.
|
||||||
|
|
||||||
[action]
|
[action]
|
||||||
create_repo=tworzy repozytorium <a href="%s">%s</a>
|
create_repo=tworzy repozytorium <a href="%s">%s</a>
|
||||||
|
|
@ -1453,6 +1500,7 @@ merge_pull_request=`scala pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
|
||||||
transfer_repo=przenosi repozytorium <code>%s</code> do <a href="%s">%s</a>
|
transfer_repo=przenosi repozytorium <code>%s</code> do <a href="%s">%s</a>
|
||||||
push_tag=taguje <a href="%s/src/%s">%[2]s</a> w <a href="%[1]s">%[3]s</a>
|
push_tag=taguje <a href="%s/src/%s">%[2]s</a> w <a href="%[1]s">%[3]s</a>
|
||||||
delete_tag=usunięto tag %[2]s z <a href="%[1]s">%[3]s</a>
|
delete_tag=usunięto tag %[2]s z <a href="%[1]s">%[3]s</a>
|
||||||
|
delete_branch=usunięto gałąź %[2]s z <a href="%[1]s">%[3]s</a>
|
||||||
compare_commits=Porównaj %d commitów
|
compare_commits=Porównaj %d commitów
|
||||||
|
|
||||||
[tool]
|
[tool]
|
||||||
|
|
@ -1492,11 +1540,17 @@ no_read=Nie masz żadnych przeczytanych powiadomień.
|
||||||
pin=Przypnij powiadomienie
|
pin=Przypnij powiadomienie
|
||||||
mark_as_read=Oznacz jako przeczytane
|
mark_as_read=Oznacz jako przeczytane
|
||||||
mark_as_unread=Oznacz jak nieprzeczytane
|
mark_as_unread=Oznacz jak nieprzeczytane
|
||||||
|
mark_all_as_read=Oznacz wszystkie jako przeczytane
|
||||||
|
|
||||||
[gpg]
|
[gpg]
|
||||||
error.extract_sign=Nie udało się wyłuskać podpisu
|
error.extract_sign=Nie udało się wyłuskać podpisu
|
||||||
error.generate_hash=Nie udało się wygenerować skrótu dla commitu
|
error.generate_hash=Nie udało się wygenerować skrótu dla commitu
|
||||||
|
error.no_committer_account=Brak konta powiązanego z e-mailem autora
|
||||||
error.no_gpg_keys_found=Nie znaleziono w bazie danych klucza dla tego podpisu
|
error.no_gpg_keys_found=Nie znaleziono w bazie danych klucza dla tego podpisu
|
||||||
|
error.not_signed_commit=Commit nie podpisany
|
||||||
|
error.failed_retrieval_gpg_keys=Nie udało się odzyskać żadnego klucza powiązanego z kontem autora
|
||||||
|
|
||||||
[units]
|
[units]
|
||||||
|
error.no_unit_allowed_repo=Nie można w tym repozytorium znaleźć żadnego modułu, do którego masz dostęp
|
||||||
|
error.unit_not_allowed=Nie masz uprawnień do przeglądania tego modułu repozytorium
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,7 @@ cancel=Cancelar
|
||||||
install=Instalação
|
install=Instalação
|
||||||
title=Configuração inicial
|
title=Configuração inicial
|
||||||
docker_helper=Se você está rodando o Gitea dentro do Docker, por favor leia as <a target="_blank" rel="noopener" href="%s">instruções</a> cuidadosamente antes de alterar qualquer coisa nesta página.
|
docker_helper=Se você está rodando o Gitea dentro do Docker, por favor leia as <a target="_blank" rel="noopener" href="%s">instruções</a> cuidadosamente antes de alterar qualquer coisa nesta página.
|
||||||
|
requite_db_desc=Gitea requer MySQL, MSSQL, PostgreSQL, SQLite3 ou TiDB.
|
||||||
db_title=Configurações de banco de dados
|
db_title=Configurações de banco de dados
|
||||||
db_type=Tipo de banco de dados
|
db_type=Tipo de banco de dados
|
||||||
host=Servidor
|
host=Servidor
|
||||||
|
|
@ -400,6 +401,8 @@ valid_until=Válido até
|
||||||
valid_forever=Válido para sempre
|
valid_forever=Válido para sempre
|
||||||
last_used=Última vez usado em
|
last_used=Última vez usado em
|
||||||
no_activity=Nenhuma atividade recente
|
no_activity=Nenhuma atividade recente
|
||||||
|
can_read_info=Leitura
|
||||||
|
can_write_info=Escrita
|
||||||
key_state_desc=Essa chave tem sido utilizada nos últimos 7 dias
|
key_state_desc=Essa chave tem sido utilizada nos últimos 7 dias
|
||||||
token_state_desc=Esse token tem sido utilizado nos últimos 7 dias
|
token_state_desc=Esse token tem sido utilizado nos últimos 7 dias
|
||||||
show_openid=Mostrar no perfil
|
show_openid=Mostrar no perfil
|
||||||
|
|
@ -754,7 +757,12 @@ pulls.is_checking=A verificação do conflito ainda está em progresso, por favo
|
||||||
pulls.can_auto_merge_desc=O merge deste pull request pode ser aplicado automaticamente.
|
pulls.can_auto_merge_desc=O merge deste pull request pode ser aplicado automaticamente.
|
||||||
pulls.cannot_auto_merge_desc=O merge deste pull request não pode ser aplicado automaticamente pois há conflitos.
|
pulls.cannot_auto_merge_desc=O merge deste pull request não pode ser aplicado automaticamente pois há conflitos.
|
||||||
pulls.cannot_auto_merge_helper=Por favor, aplique o merge manualmente para resolver os conflitos.
|
pulls.cannot_auto_merge_helper=Por favor, aplique o merge manualmente para resolver os conflitos.
|
||||||
|
pulls.no_merge_desc=O merge deste pull request não pode ser aplicado porque nenhuma opção de merge está habilitada.
|
||||||
|
pulls.no_merge_helper=Para aplicar o merge deste pull request, habilite pelo menos uma opção de mesclagem nas configurações do repositório ou aplique o merge do manualmente.
|
||||||
pulls.merge_pull_request=Aplicar merge de Pull Request
|
pulls.merge_pull_request=Aplicar merge de Pull Request
|
||||||
|
pulls.rebase_merge_pull_request=Aplicar Rebase e Merge
|
||||||
|
pulls.squash_merge_pull_request=Aplicar Squash e Merge
|
||||||
|
pulls.invalid_merge_option=Você não pode usar esta opção de merge neste pull request
|
||||||
pulls.open_unmerged_pull_exists=`Você não pode executar a operação de reabrir porque já existe um pull request aberto (#%d) do mesmo repositório com as mesmas informações de merge e está esperando pelo merge.`
|
pulls.open_unmerged_pull_exists=`Você não pode executar a operação de reabrir porque já existe um pull request aberto (#%d) do mesmo repositório com as mesmas informações de merge e está esperando pelo merge.`
|
||||||
|
|
||||||
milestones.new=Novo marco
|
milestones.new=Novo marco
|
||||||
|
|
@ -893,6 +901,10 @@ settings.tracker_url_format_desc=Você pode usar o espaço reservado <code>{user
|
||||||
settings.enable_timetracker=Habilitar contador de tempo
|
settings.enable_timetracker=Habilitar contador de tempo
|
||||||
settings.allow_only_contributors_to_track_time=Permitir apenas colaboradores controlar o contador de tempo
|
settings.allow_only_contributors_to_track_time=Permitir apenas colaboradores controlar o contador de tempo
|
||||||
settings.pulls_desc=Habilitar pull requests para aceitar contribuições públicas
|
settings.pulls_desc=Habilitar pull requests para aceitar contribuições públicas
|
||||||
|
settings.pulls.ignore_whitespace=Ignorar alterações com espaço em branco ao verificar conflitos
|
||||||
|
settings.pulls.allow_merge_commits=Permitir commits via merge
|
||||||
|
settings.pulls.allow_rebase_merge=Permitir rebase para commits via merge
|
||||||
|
settings.pulls.allow_squash_commits=Permitir aplicação do squash antes do merge
|
||||||
settings.danger_zone=Zona de perigo
|
settings.danger_zone=Zona de perigo
|
||||||
settings.new_owner_has_same_repo=O novo dono já tem um repositório com o mesmo nome. Por favor, escolha outro nome.
|
settings.new_owner_has_same_repo=O novo dono já tem um repositório com o mesmo nome. Por favor, escolha outro nome.
|
||||||
settings.convert=Converter para repositório tradicional
|
settings.convert=Converter para repositório tradicional
|
||||||
|
|
@ -985,6 +997,8 @@ settings.add_dingtalk_hook_desc=Adicionar integração com <a href="%s">Dingtalk
|
||||||
settings.deploy_keys=Chaves de Deploy
|
settings.deploy_keys=Chaves de Deploy
|
||||||
settings.add_deploy_key=Nova chave
|
settings.add_deploy_key=Nova chave
|
||||||
settings.deploy_key_desc=Chave de Deploy só tem acesso somente leitura. Não é igual as chaves SSH de conta pessoal.
|
settings.deploy_key_desc=Chave de Deploy só tem acesso somente leitura. Não é igual as chaves SSH de conta pessoal.
|
||||||
|
settings.is_writable=Permitir acesso de escrita
|
||||||
|
settings.is_writable_info=Essa chave pode ser usada para <strong>push</strong> neste repositório? As chaves de implantação sempre têm acesso de pull.
|
||||||
settings.no_deploy_keys=Você ainda não adicionou nenhuma chave de Deploy.
|
settings.no_deploy_keys=Você ainda não adicionou nenhuma chave de Deploy.
|
||||||
settings.title=Título
|
settings.title=Título
|
||||||
settings.deploy_key_content=Conteúdo da chave
|
settings.deploy_key_content=Conteúdo da chave
|
||||||
|
|
@ -1309,6 +1323,7 @@ auths.attribute_mail=Atributo e-mail
|
||||||
auths.attributes_in_bind=Buscar os atributos no contexto de Bind DN
|
auths.attributes_in_bind=Buscar os atributos no contexto de Bind DN
|
||||||
auths.filter=Filtro de usuário
|
auths.filter=Filtro de usuário
|
||||||
auths.admin_filter=Filtro de administrador
|
auths.admin_filter=Filtro de administrador
|
||||||
|
auths.ms_ad_sa=Atributos de pesquisa do MS AD
|
||||||
auths.smtp_auth=Tipo de autenticação SMTP
|
auths.smtp_auth=Tipo de autenticação SMTP
|
||||||
auths.smtphost=Host SMTP
|
auths.smtphost=Host SMTP
|
||||||
auths.smtpport=Porta SMTP
|
auths.smtpport=Porta SMTP
|
||||||
|
|
|
||||||
|
|
@ -270,7 +270,7 @@ openid_been_used=Адрес OpenID '%s' уже используется.
|
||||||
username_password_incorrect=Неверное имя пользователя или пароль.
|
username_password_incorrect=Неверное имя пользователя или пароль.
|
||||||
enterred_invalid_repo_name=Пожалуйста, убедитесь, что введено правильное имя репозитория.
|
enterred_invalid_repo_name=Пожалуйста, убедитесь, что введено правильное имя репозитория.
|
||||||
enterred_invalid_owner_name=Убедитесь, что введенное имя владельца верное.
|
enterred_invalid_owner_name=Убедитесь, что введенное имя владельца верное.
|
||||||
enterred_invalid_password=Убедитесь, что введенный пароль верен.
|
enterred_invalid_password=Убедитесь, что введённый пароль верен.
|
||||||
user_not_exist=Пользователь не существует.
|
user_not_exist=Пользователь не существует.
|
||||||
last_org_owner=Удаление последнего пользователя из команды владельцев не разрешается, поскольку всегда должен быть по крайней мере один владелец в любой организации.
|
last_org_owner=Удаление последнего пользователя из команды владельцев не разрешается, поскольку всегда должен быть по крайней мере один владелец в любой организации.
|
||||||
cannot_add_org_to_team=Организацию нельзя добавить в качестве члена команды.
|
cannot_add_org_to_team=Организацию нельзя добавить в качестве члена команды.
|
||||||
|
|
|
||||||
|
|
@ -252,7 +252,6 @@ email_been_used=E-postadress används redan.
|
||||||
openid_been_used=OpenID-adressen '%s' används redan.
|
openid_been_used=OpenID-adressen '%s' används redan.
|
||||||
username_password_incorrect=Felaktigt användarnamn eller lösenord.
|
username_password_incorrect=Felaktigt användarnamn eller lösenord.
|
||||||
enterred_invalid_owner_name=Kontrollera att ägarnamnet som du angav är rätt.
|
enterred_invalid_owner_name=Kontrollera att ägarnamnet som du angav är rätt.
|
||||||
enterred_invalid_password=Kontrollera att lösenordet som du angav är rätt.
|
|
||||||
user_not_exist=Användaren finns inte.
|
user_not_exist=Användaren finns inte.
|
||||||
last_org_owner=Att ta bort den sista användaren i ägare-teamet är inte tillåtet då det måste finnas minst en användare i ägare-teamet.
|
last_org_owner=Att ta bort den sista användaren i ägare-teamet är inte tillåtet då det måste finnas minst en användare i ägare-teamet.
|
||||||
cannot_add_org_to_team=En organisation kan inte läggas till som en gruppmedlem.
|
cannot_add_org_to_team=En organisation kan inte läggas till som en gruppmedlem.
|
||||||
|
|
|
||||||
|
|
@ -269,7 +269,6 @@ openid_been_used=OpenID 地址 '%s' 已被使用。
|
||||||
username_password_incorrect=用户名或密码错误
|
username_password_incorrect=用户名或密码错误
|
||||||
enterred_invalid_repo_name=请检查您输入的仓库名称是正确。
|
enterred_invalid_repo_name=请检查您输入的仓库名称是正确。
|
||||||
enterred_invalid_owner_name=请检查您输入的新所有者用户名是否正确。
|
enterred_invalid_owner_name=请检查您输入的新所有者用户名是否正确。
|
||||||
enterred_invalid_password=请检查您输入的密码是否正确。
|
|
||||||
user_not_exist=该用户名不存在
|
user_not_exist=该用户名不存在
|
||||||
last_org_owner=被移除用户为最后一位管理员。请添加一位新的管理员再进行移除成员操作!
|
last_org_owner=被移除用户为最后一位管理员。请添加一位新的管理员再进行移除成员操作!
|
||||||
cannot_add_org_to_team=组织不能被加入到团队中。
|
cannot_add_org_to_team=组织不能被加入到团队中。
|
||||||
|
|
|
||||||
|
|
@ -259,7 +259,6 @@ openid_been_used=OpenID 位址 '%s' 已被使用。
|
||||||
username_password_incorrect=帳戶名稱或密碼有誤
|
username_password_incorrect=帳戶名稱或密碼有誤
|
||||||
enterred_invalid_repo_name=請檢查您輸入的儲存庫名稱是否正確。
|
enterred_invalid_repo_name=請檢查您輸入的儲存庫名稱是否正確。
|
||||||
enterred_invalid_owner_name=請檢查您輸入的擁有者名稱是否正確。
|
enterred_invalid_owner_name=請檢查您輸入的擁有者名稱是否正確。
|
||||||
enterred_invalid_password=請檢查您輸入的密碼是否正確。
|
|
||||||
user_not_exist=該使用者名稱並不存在
|
user_not_exist=該使用者名稱並不存在
|
||||||
last_org_owner=無法移除群組內唯一的管理員
|
last_org_owner=無法移除群組內唯一的管理員
|
||||||
cannot_add_org_to_team=組織不能被新增為團隊成員。
|
cannot_add_org_to_team=組織不能被新增為團隊成員。
|
||||||
|
|
|
||||||
|
|
@ -269,7 +269,6 @@ openid_been_used=OpenID 位址 '%s' 已被使用。
|
||||||
username_password_incorrect=帳戶名稱或密碼有誤
|
username_password_incorrect=帳戶名稱或密碼有誤
|
||||||
enterred_invalid_repo_name=請檢查您輸入的儲存庫名稱是否正確。
|
enterred_invalid_repo_name=請檢查您輸入的儲存庫名稱是否正確。
|
||||||
enterred_invalid_owner_name=請檢查您輸入的擁有者名稱是否正確。
|
enterred_invalid_owner_name=請檢查您輸入的擁有者名稱是否正確。
|
||||||
enterred_invalid_password=請檢查您輸入的密碼是否正確。
|
|
||||||
user_not_exist=該用戶名不存在
|
user_not_exist=該用戶名不存在
|
||||||
last_org_owner=無法移除群組內唯一的管理員
|
last_org_owner=無法移除群組內唯一的管理員
|
||||||
cannot_add_org_to_team=組織不能被新增為團隊成員。
|
cannot_add_org_to_team=組織不能被新增為團隊成員。
|
||||||
|
|
|
||||||
|
|
@ -1683,7 +1683,10 @@ function showDeletePopup() {
|
||||||
filter += "#" + $this.attr("id")
|
filter += "#" + $this.attr("id")
|
||||||
}
|
}
|
||||||
|
|
||||||
$('.delete.modal' + filter).modal({
|
var dialog = $('.delete.modal' + filter);
|
||||||
|
dialog.find('.repo-name').text($this.data('repo-name'));
|
||||||
|
|
||||||
|
dialog.modal({
|
||||||
closable: false,
|
closable: false,
|
||||||
onApprove: function() {
|
onApprove: function() {
|
||||||
if ($this.data('type') == "form") {
|
if ($this.data('type') == "form") {
|
||||||
|
|
|
||||||
|
|
@ -463,9 +463,9 @@ func RegisterRoutes(m *macaron.Macaron) {
|
||||||
})
|
})
|
||||||
m.Group("/releases", func() {
|
m.Group("/releases", func() {
|
||||||
m.Combo("").Get(repo.ListReleases).
|
m.Combo("").Get(repo.ListReleases).
|
||||||
Post(reqToken(), reqRepoWriter(), bind(api.CreateReleaseOption{}), repo.CreateRelease)
|
Post(reqToken(), reqRepoWriter(), context.ReferencesGitRepo(), bind(api.CreateReleaseOption{}), repo.CreateRelease)
|
||||||
m.Combo("/:id").Get(repo.GetRelease).
|
m.Combo("/:id").Get(repo.GetRelease).
|
||||||
Patch(reqToken(), reqRepoWriter(), bind(api.EditReleaseOption{}), repo.EditRelease).
|
Patch(reqToken(), reqRepoWriter(), context.ReferencesGitRepo(), bind(api.EditReleaseOption{}), repo.EditRelease).
|
||||||
Delete(reqToken(), reqRepoWriter(), repo.DeleteRelease)
|
Delete(reqToken(), reqRepoWriter(), repo.DeleteRelease)
|
||||||
})
|
})
|
||||||
m.Post("/mirror-sync", reqToken(), reqRepoWriter(), repo.MirrorSync)
|
m.Post("/mirror-sync", reqToken(), reqRepoWriter(), repo.MirrorSync)
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ func ListReleases(ctx *context.APIContext) {
|
||||||
|
|
||||||
// CreateRelease create a release
|
// CreateRelease create a release
|
||||||
func CreateRelease(ctx *context.APIContext, form api.CreateReleaseOption) {
|
func CreateRelease(ctx *context.APIContext, form api.CreateReleaseOption) {
|
||||||
// swagger:operation GET /repos/{owner}/{repo}/releases repository repoCreateRelease
|
// swagger:operation POST /repos/{owner}/{repo}/releases repository repoCreateRelease
|
||||||
// ---
|
// ---
|
||||||
// summary: Create a release
|
// summary: Create a release
|
||||||
// consumes:
|
// consumes:
|
||||||
|
|
@ -146,6 +146,7 @@ func CreateRelease(ctx *context.APIContext, form api.CreateReleaseOption) {
|
||||||
IsDraft: form.IsDraft,
|
IsDraft: form.IsDraft,
|
||||||
IsPrerelease: form.IsPrerelease,
|
IsPrerelease: form.IsPrerelease,
|
||||||
IsTag: false,
|
IsTag: false,
|
||||||
|
Repo: ctx.Repo.Repository,
|
||||||
}
|
}
|
||||||
if err := models.CreateRelease(ctx.Repo.GitRepo, rel, nil); err != nil {
|
if err := models.CreateRelease(ctx.Repo.GitRepo, rel, nil); err != nil {
|
||||||
if models.IsErrReleaseAlreadyExist(err) {
|
if models.IsErrReleaseAlreadyExist(err) {
|
||||||
|
|
@ -167,6 +168,8 @@ func CreateRelease(ctx *context.APIContext, form api.CreateReleaseOption) {
|
||||||
rel.IsPrerelease = form.IsPrerelease
|
rel.IsPrerelease = form.IsPrerelease
|
||||||
rel.PublisherID = ctx.User.ID
|
rel.PublisherID = ctx.User.ID
|
||||||
rel.IsTag = false
|
rel.IsTag = false
|
||||||
|
rel.Repo = ctx.Repo.Repository
|
||||||
|
rel.Publisher = ctx.User
|
||||||
|
|
||||||
if err = models.UpdateRelease(ctx.Repo.GitRepo, rel, nil); err != nil {
|
if err = models.UpdateRelease(ctx.Repo.GitRepo, rel, nil); err != nil {
|
||||||
ctx.ServerError("UpdateRelease", err)
|
ctx.ServerError("UpdateRelease", err)
|
||||||
|
|
|
||||||
|
|
@ -253,40 +253,30 @@ func setMergeTarget(ctx *context.Context, pull *models.PullRequest) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// PrepareMergedViewPullInfo show meta information for a merged pull request view page
|
// PrepareMergedViewPullInfo show meta information for a merged pull request view page
|
||||||
func PrepareMergedViewPullInfo(ctx *context.Context, issue *models.Issue) {
|
func PrepareMergedViewPullInfo(ctx *context.Context, issue *models.Issue) *git.PullRequestInfo {
|
||||||
pull := issue.PullRequest
|
pull := issue.PullRequest
|
||||||
|
|
||||||
var err error
|
|
||||||
if err = pull.GetHeadRepo(); err != nil {
|
|
||||||
ctx.ServerError("GetHeadRepo", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
setMergeTarget(ctx, pull)
|
setMergeTarget(ctx, pull)
|
||||||
ctx.Data["HasMerged"] = true
|
ctx.Data["HasMerged"] = true
|
||||||
|
|
||||||
mergedCommit, err := ctx.Repo.GitRepo.GetCommit(pull.MergedCommitID)
|
prInfo, err := ctx.Repo.GitRepo.GetPullRequestInfo(ctx.Repo.Repository.RepoPath(),
|
||||||
if err != nil {
|
pull.MergeBase, pull.GetGitRefName())
|
||||||
ctx.ServerError("GetCommit", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// the ID of the last commit in the PR (not including the merge commit)
|
|
||||||
endCommitID, err := mergedCommit.ParentID(mergedCommit.ParentCount() - 1)
|
|
||||||
if err != nil {
|
|
||||||
ctx.ServerError("ParentID", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.Data["NumCommits"], err = ctx.Repo.GitRepo.CommitsCountBetween(pull.MergeBase, endCommitID.String())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.ServerError("Repo.GitRepo.CommitsCountBetween", err)
|
if strings.Contains(err.Error(), "fatal: Not a valid object name") {
|
||||||
return
|
ctx.Data["IsPullReuqestBroken"] = true
|
||||||
}
|
ctx.Data["BaseTarget"] = "deleted"
|
||||||
ctx.Data["NumFiles"], err = ctx.Repo.GitRepo.FilesCountBetween(pull.MergeBase, endCommitID.String())
|
ctx.Data["NumCommits"] = 0
|
||||||
if err != nil {
|
ctx.Data["NumFiles"] = 0
|
||||||
ctx.ServerError("Repo.GitRepo.FilesCountBetween", err)
|
return nil
|
||||||
return
|
}
|
||||||
|
|
||||||
|
ctx.ServerError("GetPullRequestInfo", err)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
ctx.Data["NumCommits"] = prInfo.Commits.Len()
|
||||||
|
ctx.Data["NumFiles"] = prInfo.NumFiles
|
||||||
|
return prInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
// PrepareViewPullInfo show meta information for a pull request preview page
|
// PrepareViewPullInfo show meta information for a pull request preview page
|
||||||
|
|
@ -351,28 +341,16 @@ func ViewPullCommits(ctx *context.Context) {
|
||||||
|
|
||||||
var commits *list.List
|
var commits *list.List
|
||||||
if pull.HasMerged {
|
if pull.HasMerged {
|
||||||
PrepareMergedViewPullInfo(ctx, issue)
|
prInfo := PrepareMergedViewPullInfo(ctx, issue)
|
||||||
if ctx.Written() {
|
if ctx.Written() {
|
||||||
return
|
return
|
||||||
|
} else if prInfo == nil {
|
||||||
|
ctx.NotFound("ViewPullCommits", nil)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
ctx.Data["Username"] = ctx.Repo.Owner.Name
|
ctx.Data["Username"] = ctx.Repo.Owner.Name
|
||||||
ctx.Data["Reponame"] = ctx.Repo.Repository.Name
|
ctx.Data["Reponame"] = ctx.Repo.Repository.Name
|
||||||
|
commits = prInfo.Commits
|
||||||
mergedCommit, err := ctx.Repo.GitRepo.GetCommit(pull.MergedCommitID)
|
|
||||||
if err != nil {
|
|
||||||
ctx.ServerError("Repo.GitRepo.GetCommit", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
endCommitID, err := mergedCommit.ParentID(mergedCommit.ParentCount() - 1)
|
|
||||||
if err != nil {
|
|
||||||
ctx.ServerError("ParentID", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
commits, err = ctx.Repo.GitRepo.CommitsBetweenIDs(endCommitID.String(), pull.MergeBase)
|
|
||||||
if err != nil {
|
|
||||||
ctx.ServerError("Repo.GitRepo.CommitsBetweenIDs", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
prInfo := PrepareViewPullInfo(ctx, issue)
|
prInfo := PrepareViewPullInfo(ctx, issue)
|
||||||
if ctx.Written() {
|
if ctx.Written() {
|
||||||
|
|
@ -415,26 +393,26 @@ func ViewPullFiles(ctx *context.Context) {
|
||||||
|
|
||||||
var headTarget string
|
var headTarget string
|
||||||
if pull.HasMerged {
|
if pull.HasMerged {
|
||||||
PrepareMergedViewPullInfo(ctx, issue)
|
prInfo := PrepareMergedViewPullInfo(ctx, issue)
|
||||||
if ctx.Written() {
|
if ctx.Written() {
|
||||||
return
|
return
|
||||||
|
} else if prInfo == nil {
|
||||||
|
ctx.NotFound("ViewPullFiles", nil)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
diffRepoPath = ctx.Repo.GitRepo.Path
|
diffRepoPath = ctx.Repo.GitRepo.Path
|
||||||
startCommitID = pull.MergeBase
|
|
||||||
mergedCommit, err := ctx.Repo.GitRepo.GetCommit(pull.MergedCommitID)
|
|
||||||
if err != nil {
|
|
||||||
ctx.ServerError("GetCommit", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
endCommitSha, err := mergedCommit.ParentID(mergedCommit.ParentCount() - 1)
|
|
||||||
if err != nil {
|
|
||||||
ctx.ServerError("ParentID", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
endCommitID = endCommitSha.String()
|
|
||||||
gitRepo = ctx.Repo.GitRepo
|
gitRepo = ctx.Repo.GitRepo
|
||||||
|
|
||||||
|
headCommitID, err := gitRepo.GetRefCommitID(pull.GetGitRefName())
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("GetRefCommitID", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
startCommitID = prInfo.MergeBase
|
||||||
|
endCommitID = headCommitID
|
||||||
|
|
||||||
headTarget = path.Join(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name)
|
headTarget = path.Join(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name)
|
||||||
ctx.Data["Username"] = ctx.Repo.Owner.Name
|
ctx.Data["Username"] = ctx.Repo.Owner.Name
|
||||||
ctx.Data["Reponame"] = ctx.Repo.Repository.Name
|
ctx.Data["Reponame"] = ctx.Repo.Repository.Name
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@
|
||||||
<td>{{.NumIssues}}</td>
|
<td>{{.NumIssues}}</td>
|
||||||
<td>{{SizeFmt .Size}}</td>
|
<td>{{SizeFmt .Size}}</td>
|
||||||
<td><span title="{{.CreatedUnix.FormatLong}}">{{.CreatedUnix.FormatShort}}</span></td>
|
<td><span title="{{.CreatedUnix.FormatLong}}">{{.CreatedUnix.FormatShort}}</span></td>
|
||||||
<td><a class="delete-button" href="" data-url="{{$.Link}}/delete?page={{$.Page.Current}}" data-id="{{.ID}}"><i class="trash icon text red"></i></a></td>
|
<td><a class="delete-button" href="" data-url="{{$.Link}}/delete?page={{$.Page.Current}}" data-id="{{.ID}}" data-repo-name="{{.Name}}"><i class="trash icon text red"></i></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
{{end}}
|
{{end}}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
@ -55,7 +55,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<p>{{.i18n.Tr "repo.settings.delete_desc"}}</p>
|
<p>{{.i18n.Tr "repo.settings.delete_desc"}}</p>
|
||||||
{{.i18n.Tr "repo.settings.delete_notices_2"}}<br>
|
{{.i18n.Tr "repo.settings.delete_notices_2" `<span class="repo-name"></span>` | Safe}}<br>
|
||||||
{{.i18n.Tr "repo.settings.delete_notices_fork_1"}}<br>
|
{{.i18n.Tr "repo.settings.delete_notices_fork_1"}}<br>
|
||||||
</div>
|
</div>
|
||||||
{{template "base/delete_modal_actions" .}}
|
{{template "base/delete_modal_actions" .}}
|
||||||
|
|
|
||||||
8
vendor/code.gitea.io/git/repo_commit.go
generated
vendored
8
vendor/code.gitea.io/git/repo_commit.go
generated
vendored
|
|
@ -11,8 +11,8 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// getRefCommitID returns the last commit ID string of given reference (branch or tag).
|
// GetRefCommitID returns the last commit ID string of given reference (branch or tag).
|
||||||
func (repo *Repository) getRefCommitID(name string) (string, error) {
|
func (repo *Repository) GetRefCommitID(name string) (string, error) {
|
||||||
stdout, err := NewCommand("show-ref", "--verify", name).RunInDir(repo.Path)
|
stdout, err := NewCommand("show-ref", "--verify", name).RunInDir(repo.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if strings.Contains(err.Error(), "not a valid ref") {
|
if strings.Contains(err.Error(), "not a valid ref") {
|
||||||
|
|
@ -25,12 +25,12 @@ func (repo *Repository) getRefCommitID(name string) (string, error) {
|
||||||
|
|
||||||
// GetBranchCommitID returns last commit ID string of given branch.
|
// GetBranchCommitID returns last commit ID string of given branch.
|
||||||
func (repo *Repository) GetBranchCommitID(name string) (string, error) {
|
func (repo *Repository) GetBranchCommitID(name string) (string, error) {
|
||||||
return repo.getRefCommitID(BranchPrefix + name)
|
return repo.GetRefCommitID(BranchPrefix + name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetTagCommitID returns last commit ID string of given tag.
|
// GetTagCommitID returns last commit ID string of given tag.
|
||||||
func (repo *Repository) GetTagCommitID(name string) (string, error) {
|
func (repo *Repository) GetTagCommitID(name string) (string, error) {
|
||||||
return repo.getRefCommitID(TagPrefix + name)
|
return repo.GetRefCommitID(TagPrefix + name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// parseCommitData parses commit information from the (uncompressed) raw
|
// parseCommitData parses commit information from the (uncompressed) raw
|
||||||
|
|
|
||||||
6
vendor/vendor.json
vendored
6
vendor/vendor.json
vendored
|
|
@ -3,10 +3,10 @@
|
||||||
"ignore": "test appengine",
|
"ignore": "test appengine",
|
||||||
"package": [
|
"package": [
|
||||||
{
|
{
|
||||||
"checksumSHA1": "1WHdGmDRsFRTD5N69l+MEbZr+nM=",
|
"checksumSHA1": "Gz+a5Qo4PCiB/Gf2f02v8HEAxDM=",
|
||||||
"path": "code.gitea.io/git",
|
"path": "code.gitea.io/git",
|
||||||
"revision": "f4a91053671bee69f1995e456c1541668717c19d",
|
"revision": "6798d0f202cdc7187c00a467b586a4bdee27e8c9",
|
||||||
"revisionTime": "2018-01-07T06:11:05Z"
|
"revisionTime": "2018-01-14T14:37:32Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "Qtq0kW+BnpYMOriaoCjMa86WGG8=",
|
"checksumSHA1": "Qtq0kW+BnpYMOriaoCjMa86WGG8=",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user