1
1
mirror of https://github.com/go-gitea/gitea synced 2025-12-07 13:28:25 +00:00

Merge branch 'main' into bugfix/make-git-user-configurable

This commit is contained in:
stuartbirrell
2024-02-22 18:34:22 +00:00
committed by GitHub
210 changed files with 1524 additions and 821 deletions
+3 -3
View File
@@ -296,7 +296,7 @@ rules:
jquery/no-delegate: [2]
jquery/no-each: [0]
jquery/no-extend: [2]
jquery/no-fade: [0]
jquery/no-fade: [2]
jquery/no-filter: [0]
jquery/no-find: [0]
jquery/no-global-eval: [2]
@@ -309,7 +309,7 @@ rules:
jquery/no-is-function: [2]
jquery/no-is: [0]
jquery/no-load: [2]
jquery/no-map: [0]
jquery/no-map: [2]
jquery/no-merge: [2]
jquery/no-param: [2]
jquery/no-parent: [0]
@@ -451,7 +451,7 @@ rules:
no-jquery/no-load: [2]
no-jquery/no-map-collection: [0]
no-jquery/no-map-util: [2]
no-jquery/no-map: [0]
no-jquery/no-map: [2]
no-jquery/no-merge: [2]
no-jquery/no-node-name: [2]
no-jquery/no-noop: [2]
+1 -2
View File
@@ -602,8 +602,7 @@ test-mssql\#%: integrations.mssql.test generate-ini-mssql
test-mssql-migration: migrations.mssql.test migrations.individual.mssql.test
.PHONY: playwright
playwright: $(PLAYWRIGHT_DIR)
npm install --no-save @playwright/test
playwright: deps-frontend
npx playwright install $(PLAYWRIGHT_FLAGS)
.PHONY: test-e2e%
+1 -1
View File
@@ -71,7 +71,7 @@ func runKeys(c *cli.Context) error {
ctx, cancel := installSignals()
defer cancel()
setup(ctx, false)
setup(ctx, c.Bool("debug"))
authorizedString, extra := private.AuthorizedPublicKeyByContent(ctx, content)
// do not use handleCliResponseExtra or cli.NewExitError, if it exists immediately, it breaks some tests like Test_CmdKeys
+1 -12
View File
@@ -63,21 +63,10 @@ func setup(ctx context.Context, debug bool) {
setupConsoleLogger(log.FATAL, false, os.Stderr)
}
setting.MustInstalled()
if debug {
setting.RunMode = "dev"
}
// Check if setting.RepoRootPath exists. It could be the case that it doesn't exist, this can happen when
// `[repository]` `ROOT` is a relative path and $GITEA_WORK_DIR isn't passed to the SSH connection.
if _, err := os.Stat(setting.RepoRootPath); err != nil {
if os.IsNotExist(err) {
_ = fail(ctx, "Incorrect configuration, no repository directory.", "Directory `[repository].ROOT` %q was not found, please check if $GITEA_WORK_DIR is passed to the SSH connection or make `[repository].ROOT` an absolute value.", setting.RepoRootPath)
} else {
_ = fail(ctx, "Incorrect configuration, repository directory is inaccessible", "Directory `[repository].ROOT` %q is inaccessible. err: %v", setting.RepoRootPath, err)
}
_ = fail(ctx, "Unable to access repository path", "Unable to access repository path %q, err: %v", setting.RepoRootPath, err)
return
}
if err := git.InitSimple(context.Background()); err != nil {
_ = fail(ctx, "Failed to init git", "Failed to init git, err: %v", err)
}
@@ -19,9 +19,10 @@ menu:
Some projects have a standard list of questions that users need to answer
when creating an issue or pull request. Gitea supports adding templates to the
main branch of the repository so that they can autopopulate the form when users are
**default branch of the repository** so that they can autopopulate the form when users are
creating issues and pull requests. This will cut down on the initial back and forth
of getting some clarifying details.
It is currently not possible to provide generic issue/pull-request templates globally.
Additionally, the New Issue page URL can be suffixed with `?title=Issue+Title&body=Issue+Text` and the form will be populated with those strings. Those strings will be used instead of the template if there is one.
+44
View File
@@ -25,6 +25,45 @@ const (
GithubEventSchedule = "schedule"
)
// IsDefaultBranchWorkflow returns true if the event only triggers workflows on the default branch
func IsDefaultBranchWorkflow(triggedEvent webhook_module.HookEventType) bool {
switch triggedEvent {
case webhook_module.HookEventDelete:
// GitHub "delete" event
// https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#delete
return true
case webhook_module.HookEventFork:
// GitHub "fork" event
// https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#fork
return true
case webhook_module.HookEventIssueComment:
// GitHub "issue_comment" event
// https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#issue_comment
return true
case webhook_module.HookEventPullRequestComment:
// GitHub "pull_request_comment" event
// https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_comment-use-issue_comment
return true
case webhook_module.HookEventWiki:
// GitHub "gollum" event
// https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#gollum
return true
case webhook_module.HookEventSchedule:
// GitHub "schedule" event
// https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule
return true
case webhook_module.HookEventIssues,
webhook_module.HookEventIssueAssign,
webhook_module.HookEventIssueLabel,
webhook_module.HookEventIssueMilestone:
// Github "issues" event
// https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#issues
return true
}
return false
}
// canGithubEventMatch check if the input Github event can match any Gitea event.
func canGithubEventMatch(eventName string, triggedEvent webhook_module.HookEventType) bool {
switch eventName {
@@ -75,6 +114,11 @@ func canGithubEventMatch(eventName string, triggedEvent webhook_module.HookEvent
case GithubEventSchedule:
return triggedEvent == webhook_module.HookEventSchedule
case GithubEventIssueComment:
// https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_comment-use-issue_comment
return triggedEvent == webhook_module.HookEventIssueComment ||
triggedEvent == webhook_module.HookEventPullRequestComment
default:
return eventName == string(triggedEvent)
}
+6
View File
@@ -103,6 +103,12 @@ func TestCanGithubEventMatch(t *testing.T) {
webhook_module.HookEventCreate,
true,
},
{
"create pull request comment",
GithubEventIssueComment,
webhook_module.HookEventPullRequestComment,
true,
},
}
for _, tc := range testCases {
+20 -20
View File
@@ -203,16 +203,7 @@ headerLoop:
}
// Discard the rest of the tag
discard := size - n + 1
for discard > math.MaxInt32 {
_, err := rd.Discard(math.MaxInt32)
if err != nil {
return id, err
}
discard -= math.MaxInt32
}
_, err := rd.Discard(int(discard))
return id, err
return id, DiscardFull(rd, size-n+1)
}
// ReadTreeID reads a tree ID from a cat-file --batch stream, throwing away the rest of the stream.
@@ -238,16 +229,7 @@ headerLoop:
}
// Discard the rest of the commit
discard := size - n + 1
for discard > math.MaxInt32 {
_, err := rd.Discard(math.MaxInt32)
if err != nil {
return id, err
}
discard -= math.MaxInt32
}
_, err := rd.Discard(int(discard))
return id, err
return id, DiscardFull(rd, size-n+1)
}
// git tree files are a list:
@@ -345,3 +327,21 @@ func init() {
_, filename, _, _ := runtime.Caller(0)
callerPrefix = strings.TrimSuffix(filename, "modules/git/batch_reader.go")
}
func DiscardFull(rd *bufio.Reader, discard int64) error {
if discard > math.MaxInt32 {
n, err := rd.Discard(math.MaxInt32)
discard -= int64(n)
if err != nil {
return err
}
}
for discard > 0 {
n, err := rd.Discard(int(discard))
discard -= int64(n)
if err != nil {
return err
}
}
return nil
}
+2 -22
View File
@@ -9,7 +9,6 @@ import (
"bufio"
"bytes"
"io"
"math"
"code.gitea.io/gitea/modules/log"
)
@@ -104,25 +103,6 @@ func (b *blobReader) Read(p []byte) (n int, err error) {
// Close implements io.Closer
func (b *blobReader) Close() error {
defer b.cancel()
if b.n > 0 {
for b.n > math.MaxInt32 {
n, err := b.rd.Discard(math.MaxInt32)
b.n -= int64(n)
if err != nil {
return err
}
b.n -= math.MaxInt32
}
n, err := b.rd.Discard(int(b.n))
b.n -= int64(n)
if err != nil {
return err
}
}
if b.n == 0 {
_, err := b.rd.Discard(1)
b.n--
return err
}
return nil
return DiscardFull(b.rd, b.n+1)
}
+3
View File
@@ -151,6 +151,9 @@ func GetLastCommitForPaths(ctx context.Context, commit *Commit, treePath string,
return nil, err
}
if typ != "commit" {
if err := DiscardFull(batchReader, size+1); err != nil {
return nil, err
}
return nil, fmt.Errorf("unexpected type: %s for commit id: %s", typ, commitID)
}
c, err = CommitFromReader(commit.repo, MustIDFromString(commitID), io.LimitReader(batchReader, size))
+4
View File
@@ -169,6 +169,10 @@ func FindLFSFile(repo *git.Repository, objectID git.ObjectID) ([]*LFSResult, err
} else {
break commitReadingLoop
}
default:
if err := git.DiscardFull(batchReader, size+1); err != nil {
return nil, err
}
}
}
}
+15 -6
View File
@@ -27,10 +27,12 @@ type Repository struct {
gpgSettings *GPGSettings
batchInUse bool
batchCancel context.CancelFunc
batchReader *bufio.Reader
batchWriter WriteCloserError
checkInUse bool
checkCancel context.CancelFunc
checkReader *bufio.Reader
checkWriter WriteCloserError
@@ -79,23 +81,28 @@ func OpenRepository(ctx context.Context, repoPath string) (*Repository, error) {
// CatFileBatch obtains a CatFileBatch for this repository
func (repo *Repository) CatFileBatch(ctx context.Context) (WriteCloserError, *bufio.Reader, func()) {
if repo.batchCancel == nil || repo.batchReader.Buffered() > 0 {
if repo.batchCancel == nil || repo.batchInUse {
log.Debug("Opening temporary cat file batch for: %s", repo.Path)
return CatFileBatch(ctx, repo.Path)
}
return repo.batchWriter, repo.batchReader, func() {}
repo.batchInUse = true
return repo.batchWriter, repo.batchReader, func() {
repo.batchInUse = false
}
}
// CatFileBatchCheck obtains a CatFileBatchCheck for this repository
func (repo *Repository) CatFileBatchCheck(ctx context.Context) (WriteCloserError, *bufio.Reader, func()) {
if repo.checkCancel == nil || repo.checkReader.Buffered() > 0 {
log.Debug("Opening temporary cat file batch-check: %s", repo.Path)
if repo.checkCancel == nil || repo.checkInUse {
log.Debug("Opening temporary cat file batch-check for: %s", repo.Path)
return CatFileBatchCheck(ctx, repo.Path)
}
return repo.checkWriter, repo.checkReader, func() {}
repo.checkInUse = true
return repo.checkWriter, repo.checkReader, func() {
repo.checkInUse = false
}
}
// Close this repository, in particular close the underlying gogitStorage if this is not nil
func (repo *Repository) Close() (err error) {
if repo == nil {
return nil
@@ -105,12 +112,14 @@ func (repo *Repository) Close() (err error) {
repo.batchReader = nil
repo.batchWriter = nil
repo.batchCancel = nil
repo.batchInUse = false
}
if repo.checkCancel != nil {
repo.checkCancel()
repo.checkCancel = nil
repo.checkReader = nil
repo.checkWriter = nil
repo.checkInUse = false
}
repo.LastCommitCache = nil
repo.tagCache = nil
+1 -2
View File
@@ -121,8 +121,7 @@ func (repo *Repository) getCommitFromBatchReader(rd *bufio.Reader, id ObjectID)
return commit, nil
default:
log.Debug("Unknown typ: %s", typ)
_, err = rd.Discard(int(size) + 1)
if err != nil {
if err := DiscardFull(rd, size+1); err != nil {
return nil, err
}
return nil, ErrNotExist{
+1 -22
View File
@@ -6,10 +6,8 @@
package git
import (
"bufio"
"bytes"
"io"
"math"
"strings"
"code.gitea.io/gitea/modules/analyze"
@@ -168,8 +166,7 @@ func (repo *Repository) GetLanguageStats(commitID string) (map[string]int64, err
return nil, err
}
content = contentBuf.Bytes()
err = discardFull(batchReader, discard)
if err != nil {
if err := DiscardFull(batchReader, discard); err != nil {
return nil, err
}
}
@@ -212,21 +209,3 @@ func (repo *Repository) GetLanguageStats(commitID string) (map[string]int64, err
return mergeLanguageStats(sizes), nil
}
func discardFull(rd *bufio.Reader, discard int64) error {
if discard > math.MaxInt32 {
n, err := rd.Discard(math.MaxInt32)
discard -= int64(n)
if err != nil {
return err
}
}
for discard > 0 {
n, err := rd.Discard(int(discard))
discard -= int64(n)
if err != nil {
return err
}
}
return nil
}
+3
View File
@@ -103,6 +103,9 @@ func (repo *Repository) getTag(tagID ObjectID, name string) (*Tag, error) {
return nil, err
}
if typ != "tag" {
if err := DiscardFull(rd, size+1); err != nil {
return nil, err
}
return nil, ErrNotExist{ID: tagID.String()}
}
+3
View File
@@ -58,6 +58,9 @@ func (repo *Repository) getTree(id ObjectID) (*Tree, error) {
tree.entriesParsed = true
return tree, nil
default:
if err := DiscardFull(rd, size+1); err != nil {
return nil, err
}
return nil, ErrNotExist{
ID: id.String(),
}
+2 -14
View File
@@ -7,7 +7,6 @@ package git
import (
"io"
"math"
"strings"
)
@@ -63,19 +62,8 @@ func (t *Tree) ListEntries() (Entries, error) {
}
// Not a tree just use ls-tree instead
for sz > math.MaxInt32 {
discarded, err := rd.Discard(math.MaxInt32)
sz -= int64(discarded)
if err != nil {
return nil, err
}
}
for sz > 0 {
discarded, err := rd.Discard(int(sz))
sz -= int64(discarded)
if err != nil {
return nil, err
}
if err := DiscardFull(rd, sz+1); err != nil {
return nil, err
}
}
+27
View File
@@ -0,0 +1,27 @@
// Copyright 2024 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package git
import (
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
)
func TestSubTree_Issue29101(t *testing.T) {
repo, err := openRepositoryWithDefaultContext(filepath.Join(testReposDir, "repo1_bare"))
assert.NoError(t, err)
defer repo.Close()
commit, err := repo.GetCommit("ce064814f4a0d337b333e646ece456cd39fab612")
assert.NoError(t, err)
// old code could produce a different error if called multiple times
for i := 0; i < 10; i++ {
_, err = commit.SubTree("file1.txt")
assert.Error(t, err)
assert.True(t, IsErrNotExist(err))
}
}
+17 -17
View File
@@ -53,38 +53,38 @@ var (
// shortLinkPattern matches short but difficult to parse [[name|link|arg=test]] syntax
shortLinkPattern = regexp.MustCompile(`\[\[(.*?)\]\](\w*)`)
// anySHA1Pattern splits url containing SHA into parts
// anyHashPattern splits url containing SHA into parts
anyHashPattern = regexp.MustCompile(`https?://(?:\S+/){4,5}([0-9a-f]{40,64})(/[-+~_%.a-zA-Z0-9/]+)?(#[-+~_%.a-zA-Z0-9]+)?`)
// comparePattern matches "http://domain/org/repo/compare/COMMIT1...COMMIT2#hash"
comparePattern = regexp.MustCompile(`https?://(?:\S+/){4,5}([0-9a-f]{7,64})(\.\.\.?)([0-9a-f]{7,64})?(#[-+~_%.a-zA-Z0-9]+)?`)
validLinksPattern = regexp.MustCompile(`^[a-z][\w-]+://`)
// fullURLPattern matches full URL like "mailto:...", "https://..." and "ssh+git://..."
fullURLPattern = regexp.MustCompile(`^[a-z][-+\w]+:`)
// While this email regex is definitely not perfect and I'm sure you can come up
// with edge cases, it is still accepted by the CommonMark specification, as
// well as the HTML5 spec:
// emailRegex is definitely not perfect with edge cases,
// it is still accepted by the CommonMark specification, as well as the HTML5 spec:
// http://spec.commonmark.org/0.28/#email-address
// https://html.spec.whatwg.org/multipage/input.html#e-mail-state-(type%3Demail)
emailRegex = regexp.MustCompile("(?:\\s|^|\\(|\\[)([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9]{2,}(?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+)(?:\\s|$|\\)|\\]|;|,|\\?|!|\\.(\\s|$))")
// blackfriday extensions create IDs like fn:user-content-footnote
// blackfridayExtRegex is for blackfriday extensions create IDs like fn:user-content-footnote
blackfridayExtRegex = regexp.MustCompile(`[^:]*:user-content-`)
// EmojiShortCodeRegex find emoji by alias like :smile:
EmojiShortCodeRegex = regexp.MustCompile(`:[-+\w]+:`)
// emojiShortCodeRegex find emoji by alias like :smile:
emojiShortCodeRegex = regexp.MustCompile(`:[-+\w]+:`)
)
// CSS class for action keywords (e.g. "closes: #1")
const keywordClass = "issue-keyword"
// IsLink reports whether link fits valid format.
func IsLink(link []byte) bool {
return validLinksPattern.Match(link)
// IsFullURLBytes reports whether link fits valid format.
func IsFullURLBytes(link []byte) bool {
return fullURLPattern.Match(link)
}
func IsLinkStr(link string) bool {
return validLinksPattern.MatchString(link)
func IsFullURLString(link string) bool {
return fullURLPattern.MatchString(link)
}
// regexp for full links to issues/pulls
@@ -399,7 +399,7 @@ func visitNode(ctx *RenderContext, procs []processor, node *html.Node) {
if attr.Key != "src" {
continue
}
if len(attr.Val) > 0 && !IsLinkStr(attr.Val) && !strings.HasPrefix(attr.Val, "data:image/") {
if len(attr.Val) > 0 && !IsFullURLString(attr.Val) && !strings.HasPrefix(attr.Val, "data:image/") {
attr.Val = util.URLJoin(ctx.Links.ResolveMediaLink(ctx.IsWiki), attr.Val)
}
attr.Val = camoHandleLink(attr.Val)
@@ -650,7 +650,7 @@ func shortLinkProcessor(ctx *RenderContext, node *html.Node) {
if equalPos := strings.IndexByte(v, '='); equalPos == -1 {
// There is no equal in this argument; this is a mandatory arg
if props["name"] == "" {
if IsLinkStr(v) {
if IsFullURLString(v) {
// If we clearly see it is a link, we save it so
// But first we need to ensure, that if both mandatory args provided
@@ -725,7 +725,7 @@ func shortLinkProcessor(ctx *RenderContext, node *html.Node) {
DataAtom: atom.A,
}
childNode.Parent = linkNode
absoluteLink := IsLinkStr(link)
absoluteLink := IsFullURLString(link)
if !absoluteLink {
if image {
link = strings.ReplaceAll(link, " ", "+")
@@ -1059,7 +1059,7 @@ func emojiShortCodeProcessor(ctx *RenderContext, node *html.Node) {
start := 0
next := node.NextSibling
for node != nil && node != next && start < len(node.Data) {
m := EmojiShortCodeRegex.FindStringSubmatchIndex(node.Data[start:])
m := emojiShortCodeRegex.FindStringSubmatchIndex(node.Data[start:])
if m == nil {
return
}
+15
View File
@@ -204,6 +204,15 @@ func TestRender_links(t *testing.T) {
test(
"magnet:?xt=urn:btih:5dee65101db281ac9c46344cd6b175cdcadabcde&dn=download",
`<p><a href="magnet:?xt=urn:btih:5dee65101db281ac9c46344cd6b175cdcadabcde&amp;dn=download" rel="nofollow">magnet:?xt=urn:btih:5dee65101db281ac9c46344cd6b175cdcadabcde&amp;dn=download</a></p>`)
test(
`[link](https://example.com)`,
`<p><a href="https://example.com" rel="nofollow">link</a></p>`)
test(
`[link](mailto:test@example.com)`,
`<p><a href="mailto:test@example.com" rel="nofollow">link</a></p>`)
test(
`[link](javascript:xss)`,
`<p>link</p>`)
// Test that should *not* be turned into URL
test(
@@ -673,3 +682,9 @@ func TestIssue18471(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, "<a href=\"http://domain/org/repo/compare/783b039...da951ce\" class=\"compare\"><code class=\"nohighlight\">783b039...da951ce</code></a>", res.String())
}
func TestIsFullURL(t *testing.T) {
assert.True(t, markup.IsFullURLString("https://example.com"))
assert.True(t, markup.IsFullURLString("mailto:test@example.com"))
assert.False(t, markup.IsFullURLString("/foo:bar"))
}
+5 -13
View File
@@ -26,8 +26,6 @@ import (
"github.com/yuin/goldmark/util"
)
var byteMailto = []byte("mailto:")
// ASTTransformer is a default transformer of the goldmark tree.
type ASTTransformer struct{}
@@ -84,7 +82,7 @@ func (g *ASTTransformer) Transform(node *ast.Document, reader text.Reader, pc pa
// 2. If they're not wrapped with a link they need a link wrapper
// Check if the destination is a real link
if len(v.Destination) > 0 && !markup.IsLink(v.Destination) {
if len(v.Destination) > 0 && !markup.IsFullURLBytes(v.Destination) {
v.Destination = []byte(giteautil.URLJoin(
ctx.Links.ResolveMediaLink(ctx.IsWiki),
strings.TrimLeft(string(v.Destination), "/"),
@@ -130,23 +128,17 @@ func (g *ASTTransformer) Transform(node *ast.Document, reader text.Reader, pc pa
case *ast.Link:
// Links need their href to munged to be a real value
link := v.Destination
if len(link) > 0 && !markup.IsLink(link) &&
link[0] != '#' && !bytes.HasPrefix(link, byteMailto) {
// special case: this is not a link, a hash link or a mailto:, so it's a
// relative URL
var base string
isAnchorFragment := len(link) > 0 && link[0] == '#'
if !isAnchorFragment && !markup.IsFullURLBytes(link) {
base := ctx.Links.Base
if ctx.IsWiki {
base = ctx.Links.WikiLink()
} else if ctx.Links.HasBranchInfo() {
base = ctx.Links.SrcLink()
} else {
base = ctx.Links.Base
}
link = []byte(giteautil.URLJoin(base, string(link)))
}
if len(link) > 0 && link[0] == '#' {
if isAnchorFragment {
link = []byte("#user-content-" + string(link)[1:])
}
v.Destination = link
+1 -2
View File
@@ -136,8 +136,7 @@ type Writer struct {
func (r *Writer) resolveLink(kind, link string) string {
link = strings.TrimPrefix(link, "file:")
if !strings.HasPrefix(link, "#") && // not a URL fragment
!markup.IsLinkStr(link) && // not an absolute URL
!strings.HasPrefix(link, "mailto:") {
!markup.IsFullURLString(link) {
if kind == "regular" {
// orgmode reports the link kind as "regular" for "[[ImageLink.svg][The Image Desc]]"
// so we need to try to guess the link kind again here
+5 -7
View File
@@ -9,7 +9,6 @@ import (
"path/filepath"
"runtime"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
)
@@ -94,15 +93,14 @@ done
`, setting.ScriptType, util.ShellEscape(setting.AppPath), util.ShellEscape(setting.CustomConf)),
}
if git.SupportProcReceive {
hookNames = append(hookNames, "proc-receive")
hookTpls = append(hookTpls,
fmt.Sprintf(`#!/usr/bin/env %s
// although only new git (>=2.29) supports proc-receive, it's still good to create its hook, in case the user upgrades git
hookNames = append(hookNames, "proc-receive")
hookTpls = append(hookTpls,
fmt.Sprintf(`#!/usr/bin/env %s
# AUTO GENERATED BY GITEA, DO NOT MODIFY
%s hook --config=%s proc-receive
`, setting.ScriptType, util.ShellEscape(setting.AppPath), util.ShellEscape(setting.CustomConf)))
giteaHookTpls = append(giteaHookTpls, "")
}
giteaHookTpls = append(giteaHookTpls, "")
return hookNames, hookTpls, giteaHookTpls
}
+3 -1
View File
@@ -352,7 +352,9 @@ func SyncReleasesWithTags(ctx context.Context, repo *repo_model.Repository, gitR
}
if err := PushUpdateAddTag(ctx, repo, gitRepo, tagName, sha1, refname); err != nil {
return fmt.Errorf("unable to PushUpdateAddTag: %q to Repo[%d:%s/%s]: %w", tagName, repo.ID, repo.OwnerName, repo.Name, err)
// sometimes, some tags will be sync failed. i.e. https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tag/?h=v2.6.11
// this is a tree object, not a tag object which created before git
log.Error("unable to PushUpdateAddTag: %q to Repo[%d:%s/%s]: %v", tagName, repo.ID, repo.OwnerName, repo.Name, err)
}
return nil
+8 -3
View File
@@ -588,6 +588,7 @@ org_still_own_packages=Organizace stále vlastní jeden nebo více balíčků. N
target_branch_not_exist=Cílová větev neexistuje.
[user]
change_avatar=Změnit váš avatar…
joined_on=Přidal/a se %s
@@ -1954,6 +1955,8 @@ activity.git_stats_and_deletions=a
activity.git_stats_deletion_1=%d odebrání
activity.git_stats_deletion_n=%d odebrání
contributors.contribution_type.commits=Commity
search=Vyhledat
search.search_repo=Hledat repozitář
search.type.tooltip=Druh vyhledávání
@@ -2541,6 +2544,8 @@ error.csv.too_large=Tento soubor nelze vykreslit, protože je příliš velký.
error.csv.unexpected=Tento soubor nelze vykreslit, protože obsahuje neočekávaný znak na řádku %d ve sloupci %d.
error.csv.invalid_field_count=Soubor nelze vykreslit, protože má nesprávný počet polí na řádku %d.
[graphs]
[org]
org_name_holder=Název organizace
org_full_name_holder=Celý název organizace
@@ -3179,6 +3184,7 @@ notices.desc=Popis
notices.op=Akce
notices.delete_success=Systémové upozornění bylo smazáno.
[action]
create_repo=vytvořil/a repozitář <a href="%s">%s</a>
rename_repo=přejmenoval/a repozitář z <code>%[1]s</code> na <a href="%[2]s">%[3]s</a>
@@ -3363,6 +3369,8 @@ rpm.registry=Nastavte tento registr z příkazového řádku:
rpm.distros.redhat=na distribuce založené na RedHat
rpm.distros.suse=na distribuce založené na SUSE
rpm.install=Pro instalaci balíčku spusťte následující příkaz:
rpm.repository=Informace o repozitáři
rpm.repository.architectures=Architektury
rubygems.install=Pro instalaci balíčku pomocí gem spusťte následující příkaz:
rubygems.install2=nebo ho přidejte do Gemfie:
rubygems.dependencies.runtime=Běhové závislosti
@@ -3490,8 +3498,6 @@ runs.actors_no_select=Všichni aktéři
runs.status_no_select=Všechny stavy
runs.no_results=Nebyly nalezeny žádné výsledky.
runs.no_workflows=Zatím neexistují žádné pracovní postupy.
runs.no_workflows.quick_start=Nevíte jak začít s Gitea Action? Podívejte se na <a target="_blank" rel="noopener noreferrer" href="%s">průvodce rychlým startem</a>.
runs.no_workflows.documentation=Další informace o Gitea Action, viz <a target="_blank" rel="noopener noreferrer" href="%s">dokumentace</a>.
runs.no_runs=Pracovní postup zatím nebyl spuštěn.
runs.empty_commit_message=(prázdná zpráva commitu)
@@ -3509,7 +3515,6 @@ variables.none=Zatím nejsou žádné proměnné.
variables.deletion=Odstranit proměnnou
variables.deletion.description=Odstranění proměnné je trvalé a nelze jej vrátit zpět. Pokračovat?
variables.description=Proměnné budou předány určitým akcím a nelze je přečíst jinak.
variables.id_not_exist=Proměnná s id %d neexistuje.
variables.edit=Upravit proměnnou
variables.deletion.failed=Nepodařilo se odstranit proměnnou.
variables.deletion.success=Proměnná byla odstraněna.
+8 -1
View File
@@ -585,6 +585,7 @@ org_still_own_packages=Diese Organisation besitzt noch ein oder mehrere Pakete,
target_branch_not_exist=Der Ziel-Branch existiert nicht.
[user]
change_avatar=Profilbild ändern…
joined_on=Beigetreten am %s
@@ -1952,6 +1953,8 @@ activity.git_stats_and_deletions=und
activity.git_stats_deletion_1=%d Löschung
activity.git_stats_deletion_n=%d Löschungen
contributors.contribution_type.commits=Commits
search=Suchen
search.search_repo=Repository durchsuchen
search.type.tooltip=Suchmodus
@@ -2550,6 +2553,8 @@ error.csv.too_large=Diese Datei kann nicht gerendert werden, da sie zu groß ist
error.csv.unexpected=Diese Datei kann nicht gerendert werden, da sie ein unerwartetes Zeichen in Zeile %d und Spalte %d enthält.
error.csv.invalid_field_count=Diese Datei kann nicht gerendert werden, da sie eine falsche Anzahl an Feldern in Zeile %d hat.
[graphs]
[org]
org_name_holder=Name der Organisation
org_full_name_holder=Vollständiger Name der Organisation
@@ -3199,6 +3204,7 @@ notices.desc=Beschreibung
notices.op=Aktion
notices.delete_success=Diese Systemmeldung wurde gelöscht.
[action]
create_repo=hat das Repository <a href="%s">%s</a> erstellt
rename_repo=hat das Repository von <code>%[1]s</code> zu <a href="%[2]s">%[3]s</a> umbenannt
@@ -3383,6 +3389,8 @@ rpm.registry=Diese Registry über die Kommandozeile einrichten:
rpm.distros.redhat=auf RedHat-basierten Distributionen
rpm.distros.suse=auf SUSE-basierten Distributionen
rpm.install=Nutze folgenden Befehl, um das Paket zu installieren:
rpm.repository=Repository-Informationen
rpm.repository.architectures=Architekturen
rubygems.install=Um das Paket mit gem zu installieren, führe den folgenden Befehl aus:
rubygems.install2=oder füg es zum Gemfile hinzu:
rubygems.dependencies.runtime=Laufzeitabhängigkeiten
@@ -3530,7 +3538,6 @@ variables.none=Es gibt noch keine Variablen.
variables.deletion=Variable entfernen
variables.deletion.description=Das Entfernen einer Variable ist dauerhaft und kann nicht rückgängig gemacht werden. Fortfahren?
variables.description=Variablen werden an bestimmte Aktionen übergeben und können nicht anderweitig gelesen werden.
variables.id_not_exist=Variable mit ID %d existiert nicht.
variables.edit=Variable bearbeiten
variables.deletion.failed=Fehler beim Entfernen der Variable.
variables.deletion.success=Die Variable wurde entfernt.
+8 -3
View File
@@ -588,6 +588,7 @@ org_still_own_packages=Αυτός ο οργανισμός κατέχει ακό
target_branch_not_exist=Ο κλάδος προορισμού δεν υπάρχει.
[user]
change_avatar=Αλλαγή του avatar σας…
joined_on=Εγγράφηκε την %s
@@ -1966,6 +1967,8 @@ activity.git_stats_and_deletions=και
activity.git_stats_deletion_1=%d διαγραφή
activity.git_stats_deletion_n=%d διαγραφές
contributors.contribution_type.commits=Υποβολές
search=Αναζήτηση
search.search_repo=Αναζήτηση αποθετηρίου
search.type.tooltip=Τύπος αναζήτησης
@@ -2565,6 +2568,8 @@ error.csv.too_large=Δεν είναι δυνατή η απόδοση αυτού
error.csv.unexpected=Δεν είναι δυνατή η απόδοση αυτού του αρχείου, επειδή περιέχει έναν μη αναμενόμενο χαρακτήρα στη γραμμή %d και στη στήλη %d.
error.csv.invalid_field_count=Δεν είναι δυνατή η απόδοση αυτού του αρχείου, επειδή έχει λάθος αριθμό πεδίων στη γραμμή %d.
[graphs]
[org]
org_name_holder=Όνομα Οργανισμού
org_full_name_holder=Πλήρες Όνομα Οργανισμού
@@ -3216,6 +3221,7 @@ notices.desc=Περιγραφή
notices.op=Λειτ.
notices.delete_success=Οι ειδοποιήσεις του συστήματος έχουν διαγραφεί.
[action]
create_repo=δημιούργησε το αποθετήριο <a href="%s">%s</a>
rename_repo=μετονόμασε το αποθετήριο από <code>%[1]s</code> σε <a href="%[2]s">%[3]s</a>
@@ -3400,6 +3406,8 @@ rpm.registry=Ρυθμίστε αυτό το μητρώο από τη γραμμ
rpm.distros.redhat=σε διανομές βασισμένες στο RedHat
rpm.distros.suse=σε διανομές με βάση το SUSE
rpm.install=Για να εγκαταστήσετε το πακέτο, εκτελέστε την ακόλουθη εντολή:
rpm.repository=Πληροφορίες Αποθετηρίου
rpm.repository.architectures=Αρχιτεκτονικές
rubygems.install=Για να εγκαταστήσετε το πακέτο χρησιμοποιώντας το gem, εκτελέστε την ακόλουθη εντολή:
rubygems.install2=ή προσθέστε το στο Gemfile:
rubygems.dependencies.runtime=Εξαρτήσεις Εκτέλεσης
@@ -3532,8 +3540,6 @@ runs.actors_no_select=Όλοι οι φορείς
runs.status_no_select=Όλες οι καταστάσεις
runs.no_results=Δεν βρέθηκαν αποτελέσματα.
runs.no_workflows=Δεν υπάρχουν ροές εργασίας ακόμα.
runs.no_workflows.quick_start=Δεν ξέρετε πώς να ξεκινήσετε με τις Δράσεις Gitea; Συμβουλευτείτε <a target="_blank" rel="noopener noreferrer" href="%s">τον οδηγό για γρήγορη αρχή</a>.
runs.no_workflows.documentation=Για περισσότερες πληροφορίες σχετικά με τη Δράση Gitea, ανατρέξτε <a target="_blank" rel="noopener noreferrer" href="%s">στην τεκμηρίωση</a>.
runs.no_runs=Η ροή εργασίας δεν έχει τρέξει ακόμα.
runs.empty_commit_message=(κενό μήνυμα υποβολής)
@@ -3552,7 +3558,6 @@ variables.none=Δεν υπάρχουν μεταβλητές ακόμα.
variables.deletion=Αφαίρεση μεταβλητής
variables.deletion.description=Η αφαίρεση μιας μεταβλητής είναι μόνιμη και δεν μπορεί να αναιρεθεί. Συνέχεια;
variables.description=Η μεταβλητές θα δίνονται σε ορισμένες δράσεις και δεν μπορούν να διαβαστούν αλλιώς.
variables.id_not_exist=Η μεταβλητή με id %d δεν υπάρχει.
variables.edit=Επεξεργασία Μεταβλητής
variables.deletion.failed=Αποτυχία αφαίρεσης της μεταβλητής.
variables.deletion.success=Η μεταβλητή έχει αφαιρεθεί.
+8 -1
View File
@@ -585,6 +585,7 @@ org_still_own_packages=Esta organización todavía posee uno o más paquetes, el
target_branch_not_exist=La rama de destino no existe
[user]
change_avatar=Cambiar su avatar…
joined_on=Se unió el %s
@@ -1952,6 +1953,8 @@ activity.git_stats_and_deletions=y
activity.git_stats_deletion_1=%d eliminación
activity.git_stats_deletion_n=%d eliminaciones
contributors.contribution_type.commits=Commits
search=Buscar
search.search_repo=Buscar repositorio
search.type.tooltip=Tipo de búsqueda
@@ -2550,6 +2553,8 @@ error.csv.too_large=No se puede renderizar este archivo porque es demasiado gran
error.csv.unexpected=No se puede procesar este archivo porque contiene un carácter inesperado en la línea %d y la columna %d.
error.csv.invalid_field_count=No se puede procesar este archivo porque tiene un número incorrecto de campos en la línea %d.
[graphs]
[org]
org_name_holder=Nombre de la organización
org_full_name_holder=Nombre completo de la organización
@@ -3199,6 +3204,7 @@ notices.desc=Descripción
notices.op=Operación
notices.delete_success=Los avisos del sistema se han eliminado.
[action]
create_repo=creó el repositorio <a href="%s">%s</a>
rename_repo=repositorio renombrado de <code>%[1]s</code> a <a href="%[2]s">%[3]s</a>
@@ -3383,6 +3389,8 @@ rpm.registry=Configurar este registro desde la línea de comandos:
rpm.distros.redhat=en distribuciones basadas en RedHat
rpm.distros.suse=en distribuciones basadas en SUSE
rpm.install=Para instalar el paquete, ejecute el siguiente comando:
rpm.repository=Información del repositorio
rpm.repository.architectures=Arquitecturas
rubygems.install=Para instalar el paquete usando gem, ejecute el siguiente comando:
rubygems.install2=o añádelo al archivo Gemfile:
rubygems.dependencies.runtime=Dependencias en tiempo de ejecución
@@ -3530,7 +3538,6 @@ variables.none=Aún no hay variables.
variables.deletion=Eliminar variable
variables.deletion.description=Eliminar una variable es permanente y no se puede deshacer. ¿Continuar?
variables.description=Las variables se pasarán a ciertas acciones y no se podrán leer de otro modo.
variables.id_not_exist=Variable con id %d no existe.
variables.edit=Editar variable
variables.deletion.failed=No se pudo eliminar la variable.
variables.deletion.success=La variable ha sido eliminada.
+6
View File
@@ -463,6 +463,7 @@ auth_failed=تشخیص هویت ناموفق: %v
target_branch_not_exist=شاخه مورد نظر وجود ندارد.
[user]
change_avatar=تغییر آواتار…
repositories=مخازن
@@ -1498,6 +1499,8 @@ activity.git_stats_and_deletions=و
activity.git_stats_deletion_1=%d مذحوف
activity.git_stats_deletion_n=%d مذحوف
contributors.contribution_type.commits=کامیت‌ها
search=جستجو
search.search_repo=جستجوی مخزن
search.fuzzy=درهم
@@ -1951,6 +1954,8 @@ error.csv.too_large=نمی توان این فایل را رندر کرد زیر
error.csv.unexpected=نمی توان این فایل را رندر کرد زیرا حاوی یک کاراکتر غیرمنتظره در خط %d و ستون %d است.
error.csv.invalid_field_count=نمی توان این فایل را رندر کرد زیرا تعداد فیلدهای آن در خط %d اشتباه است.
[graphs]
[org]
org_name_holder=نام سازمان
org_full_name_holder=نام کامل سازمان
@@ -2501,6 +2506,7 @@ notices.desc=توضیحات
notices.op=عملیات.
notices.delete_success=گزارش سیستم حذف شده است.
[action]
create_repo=مخزن ایجاد شده <a href="%s"> %s</a>
rename_repo=مخزن تغییر نام داد از <code>%[1]s</code> به <a href="%[2]s">%[3]s</a>
+6
View File
@@ -425,6 +425,7 @@ auth_failed=Todennus epäonnistui: %v
target_branch_not_exist=Kohde branchia ei ole olemassa.
[user]
change_avatar=Vaihda profiilikuvasi…
repositories=Repot
@@ -1074,6 +1075,8 @@ activity.git_stats_and_deletions=ja
activity.git_stats_deletion_1=%d poisto
activity.git_stats_deletion_n=%d poistoa
contributors.contribution_type.commits=Commitit
search=Haku
search.match=Osuma
search.code_no_results=Hakuehtoasi vastaavaa lähdekoodia ei löytynyt.
@@ -1314,6 +1317,8 @@ topic.done=Valmis
[graphs]
[org]
org_name_holder=Organisaatio
org_full_name_holder=Organisaation täydellinen nimi
@@ -1659,6 +1664,7 @@ notices.type_1=Repo
notices.desc=Kuvaus
notices.op=Toiminta
[action]
create_repo=luotu repo <a href="%s">%s</a>
rename_repo=uudelleennimetty repo <code>%[1]s</code> nimelle <a href="%[2]s">%[3]s</a>
+8 -3
View File
@@ -587,6 +587,7 @@ org_still_own_packages=Cette organisation possède encore un ou plusieurs paquet
target_branch_not_exist=La branche cible n'existe pas.
[user]
change_avatar=Changer votre avatar…
joined_on=Inscrit le %s
@@ -1965,6 +1966,8 @@ activity.git_stats_and_deletions=et
activity.git_stats_deletion_1=%d suppression
activity.git_stats_deletion_n=%d suppressions
contributors.contribution_type.commits=Révisions
search=Chercher
search.search_repo=Rechercher dans le dépôt
search.type.tooltip=Type de recherche
@@ -2564,6 +2567,8 @@ error.csv.too_large=Impossible de visualiser le fichier car il est trop volumine
error.csv.unexpected=Impossible de visualiser ce fichier car il contient un caractère inattendu ligne %d, colonne %d.
error.csv.invalid_field_count=Impossible de visualiser ce fichier car il contient un nombre de champs incorrect à la ligne %d.
[graphs]
[org]
org_name_holder=Nom de l'organisation
org_full_name_holder=Nom complet de l'organisation
@@ -3215,6 +3220,7 @@ notices.desc=Description
notices.op=Opération
notices.delete_success=Les informations systèmes ont été supprimées.
[action]
create_repo=a créé le dépôt <a href="%s">%s</a>
rename_repo=a rebaptisé le dépôt <s><code>%[1]s</code></s> en <a href="%[2]s">%[3]s</a>
@@ -3399,6 +3405,8 @@ rpm.registry=Configurez ce registre à partir d'un terminal :
rpm.distros.redhat=sur les distributions basées sur RedHat
rpm.distros.suse=sur les distributions basées sur SUSE
rpm.install=Pour installer le paquet, exécutez la commande suivante :
rpm.repository=Informations sur le Dépôt
rpm.repository.architectures=Architectures
rubygems.install=Pour installer le paquet en utilisant gem, exécutez la commande suivante :
rubygems.install2=ou ajoutez-le au Gemfile :
rubygems.dependencies.runtime=Dépendances d'exécution
@@ -3531,8 +3539,6 @@ runs.actors_no_select=Tous les acteurs
runs.status_no_select=Touts les statuts
runs.no_results=Aucun résultat correspondant.
runs.no_workflows=Il n'y a pas encore de workflows.
runs.no_workflows.quick_start=Vous ne savez pas comment commencer avec Gitea Action ? Consultez <a target="_blank" rel="noopener noreferrer" href="%s">le guide de démarrage rapide</a>.
runs.no_workflows.documentation=Pour plus dinformations sur les Actions Gitea, voir <a target="_blank" rel="noopener noreferrer" href="%s">la documentation</a>.
runs.no_runs=Le flux de travail n'a pas encore d'exécution.
runs.empty_commit_message=(message de révision vide)
@@ -3551,7 +3557,6 @@ variables.none=Il n'y a pas encore de variables.
variables.deletion=Retirer la variable
variables.deletion.description=La suppression dune variable est permanente et ne peut être défaite. Continuer ?
variables.description=Les variables sont passées aux actions et ne peuvent être lues autrement.
variables.id_not_exist=La variable numéro %d nexiste pas.
variables.edit=Modifier la variable
variables.deletion.failed=Impossible de retirer la variable.
variables.deletion.success=La variable a bien été retirée.
+6
View File
@@ -369,6 +369,7 @@ auth_failed=A hitelesítés sikertelen: %v
target_branch_not_exist=Cél ág nem létezik.
[user]
change_avatar=Profilkép megváltoztatása…
repositories=Tárolók
@@ -1053,6 +1054,8 @@ activity.git_stats_and_deletions=és
activity.git_stats_deletion_1=%d törlés
activity.git_stats_deletion_n=%d törlés
contributors.contribution_type.commits=Commit-ok
search=Keresés
search.search_repo=Tároló keresés
search.results=`"%s" találatok keresése itt: <a href="%s">%s</a>`
@@ -1168,6 +1171,8 @@ topic.done=Kész
[graphs]
[org]
org_name_holder=Szervezet neve
org_full_name_holder=Szervezet teljes neve
@@ -1572,6 +1577,7 @@ notices.desc=Leírás
notices.op=Op.
notices.delete_success=A rendszer-értesítések törölve lettek.
[action]
create_repo=létrehozott tárolót: <a href="%s"> %s</a>
rename_repo=átnevezte a(z) <code>%[1]s</code> tárolót <a href="%[2]s">%[3]s</a>-ra/re
+6
View File
@@ -293,6 +293,7 @@ auth_failed=Otentikasi gagal: %v
target_branch_not_exist=Target cabang tidak ada.
[user]
change_avatar=Ganti avatar anda…
repositories=Repositori
@@ -838,6 +839,8 @@ activity.title.releases_n=%d Rilis
activity.title.releases_published_by=%s dikeluarkan oleh %s
activity.published_release_label=Dikeluarkan
contributors.contribution_type.commits=Melakukan
search=Cari
search.search_repo=Cari repositori
search.results=Cari hasil untuk "%s" dalam <a href="%s">%s</a>
@@ -953,6 +956,8 @@ branch.deleted_by=Dihapus oleh %s
[graphs]
[org]
org_name_holder=Nama Organisasi
org_full_name_holder=Organisasi Nama Lengkap
@@ -1262,6 +1267,7 @@ notices.desc=Deskripsi
notices.op=Op.
notices.delete_success=Laporan sistem telah dihapus.
[action]
create_repo=repositori dibuat <a href="%s">%s</a>
rename_repo=ganti nama gudang penyimpanan dari <code>%[1]s</code> ke <a href="%[2]s">%[3]s</a>
+6
View File
@@ -401,6 +401,7 @@ team_not_exist=Liðið er ekki til.
[user]
change_avatar=Breyttu notandamyndinni þinni…
repositories=Hugbúnaðarsöfn
@@ -989,6 +990,8 @@ activity.git_stats_and_deletions=og
activity.git_stats_deletion_1=%d eyðing
activity.git_stats_deletion_n=%d eyðingar
contributors.contribution_type.commits=Framlög
search=Leita
search.fuzzy=Óljóst
search.code_no_results=Enginn samsvarandi frumkóði fannst eftur þínum leitarorðum.
@@ -1112,6 +1115,8 @@ topic.done=Í lagi
[graphs]
[org]
repo_updated=Uppfært
members=Meðlimar
@@ -1278,6 +1283,7 @@ notices.type_1=Hugbúnaðarsafn
notices.type_2=Verkefni
notices.desc=Lýsing
[action]
create_issue=`opnaði vandamál <a href="%[1]s">%[3]s#%[2]s</a>`
reopen_issue=`enduropnaði vandamál <a href="%[1]s">%[3]s#%[2]s</a>`
+6
View File
@@ -490,6 +490,7 @@ auth_failed=Autenticazione non riuscita: %v
target_branch_not_exist=Il ramo (branch) di destinazione non esiste.
[user]
change_avatar=Modifica il tuo avatar…
repositories=Repository
@@ -1623,6 +1624,8 @@ activity.git_stats_and_deletions=e
activity.git_stats_deletion_1=%d cancellazione
activity.git_stats_deletion_n=%d cancellazioni
contributors.contribution_type.commits=Commit
search=Ricerca
search.search_repo=Ricerca repository
search.fuzzy=Fuzzy
@@ -2117,6 +2120,8 @@ error.csv.too_large=Impossibile visualizzare questo file perché è troppo grand
error.csv.unexpected=Impossibile visualizzare questo file perché contiene un carattere inatteso alla riga %d e alla colonna %d.
error.csv.invalid_field_count=Impossibile visualizzare questo file perché ha un numero errato di campi alla riga %d.
[graphs]
[org]
org_name_holder=Nome dell'Organizzazione
org_full_name_holder=Nome completo dell'organizzazione
@@ -2703,6 +2708,7 @@ notices.desc=Descrizione
notices.op=Op.
notices.delete_success=Gli avvisi di sistema sono stati eliminati.
[action]
create_repo=ha creato il repository <a href="%s">%s</a>
rename_repo=repository rinominato da <code>%[1]s</code> a <a href="%[2]s">[3]s</a>
+8 -3
View File
@@ -588,6 +588,7 @@ org_still_own_packages=組織はまだ1つ以上のパッケージを所有し
target_branch_not_exist=ターゲットのブランチが存在していません。
[user]
change_avatar=アバターを変更…
joined_on=%sに登録
@@ -1966,6 +1967,8 @@ activity.git_stats_and_deletions=、
activity.git_stats_deletion_1=%d行削除
activity.git_stats_deletion_n=%d行削除
contributors.contribution_type.commits=コミット
search=検索
search.search_repo=リポジトリを検索
search.type.tooltip=検索タイプ
@@ -2565,6 +2568,8 @@ error.csv.too_large=このファイルは大きすぎるため表示できませ
error.csv.unexpected=このファイルは %d 行目の %d 文字目に予期しない文字が含まれているため表示できません。
error.csv.invalid_field_count=このファイルは %d 行目のフィールドの数が正しくないため表示できません。
[graphs]
[org]
org_name_holder=組織名
org_full_name_holder=組織のフルネーム
@@ -3216,6 +3221,7 @@ notices.desc=説明
notices.op=操作
notices.delete_success=システム通知を削除しました。
[action]
create_repo=がリポジトリ <a href="%s">%s</a> を作成しました
rename_repo=がリポジトリ名を <code>%[1]s</code> から <a href="%[2]s">%[3]s</a> へ変更しました
@@ -3400,6 +3406,8 @@ rpm.registry=このレジストリをコマンドラインからセットアッ
rpm.distros.redhat=RedHat系ディストリビューションの場合
rpm.distros.suse=SUSE系ディストリビューションの場合
rpm.install=パッケージをインストールするには、次のコマンドを実行します:
rpm.repository=リポジトリ情報
rpm.repository.architectures=Architectures
rubygems.install=gem を使用してパッケージをインストールするには、次のコマンドを実行します:
rubygems.install2=または Gemfile に追加します:
rubygems.dependencies.runtime=実行用依存関係
@@ -3532,8 +3540,6 @@ runs.actors_no_select=すべてのアクター
runs.status_no_select=すべてのステータス
runs.no_results=一致する結果はありません。
runs.no_workflows=ワークフローはまだありません。
runs.no_workflows.quick_start=Gitea Action の始め方がわからない? <a target="_blank" rel="noopener noreferrer" href="%s">クイックスタートガイド</a>をご覧ください。
runs.no_workflows.documentation=Gitea Action の詳細については、<a target="_blank" rel="noopener noreferrer" href="%s">ドキュメント</a>を参照してください。
runs.no_runs=ワークフローはまだ実行されていません。
runs.empty_commit_message=(空のコミットメッセージ)
@@ -3552,7 +3558,6 @@ variables.none=変数はまだありません。
variables.deletion=変数を削除
variables.deletion.description=変数の削除は恒久的で元に戻すことはできません。 続行しますか?
variables.description=変数は特定のActionsに渡されます。 それ以外で読み出されることはありません。
variables.id_not_exist=idが%dの変数は存在しません。
variables.edit=変数の編集
variables.deletion.failed=変数を削除できませんでした。
variables.deletion.success=変数を削除しました。
+6
View File
@@ -349,6 +349,7 @@ auth_failed=인증 실패: %v
target_branch_not_exist=대상 브랜치가 존재하지 않습니다.
[user]
change_avatar=아바타 변경
repositories=저장소
@@ -949,6 +950,8 @@ activity.title.releases_n=%d 개의 릴리즈
activity.title.releases_published_by=%s 가 %s 에 의하여 배포되었습니다.
activity.published_release_label=배포됨
contributors.contribution_type.commits=커밋
search=검색
search.search_repo=저장소 검색
search.results="<a href=\"%s\">%s</a> 에서 \"%s\" 에 대한 검색 결과"
@@ -1161,6 +1164,8 @@ topic.count_prompt=25개 이상의 토픽을 선택하실 수 없습니다.
[graphs]
[org]
org_name_holder=조직 이름
org_full_name_holder=조직 전체 이름
@@ -1521,6 +1526,7 @@ notices.desc=설명
notices.op=일.
notices.delete_success=시스템 알림이 삭제되었습니다.
[action]
create_repo=저장소를 만들었습니다. <a href="%s">%s</a>
rename_repo=<code>%[1]s에서</code>에서 <a href="%[2]s"> %[3]s</a>으로 저장소 이름을 바꾸었습니다.
File diff suppressed because it is too large Load Diff
+6
View File
@@ -489,6 +489,7 @@ auth_failed=Verificatie mislukt: %v
target_branch_not_exist=Doel branch bestaat niet
[user]
change_avatar=Wijzig je profielfoto…
repositories=repositories
@@ -1618,6 +1619,8 @@ activity.git_stats_and_deletions=en
activity.git_stats_deletion_1=%d verwijdering
activity.git_stats_deletion_n=%d verwijderingen
contributors.contribution_type.commits=Commits
search=Zoek
search.search_repo=Zoek repository
search.fuzzy=Vergelijkbaar
@@ -2031,6 +2034,8 @@ topic.count_prompt=Je kunt niet meer dan 25 onderwerpen selecteren
[graphs]
[org]
org_name_holder=Organisatienaam
org_full_name_holder=Volledige naam organisatie
@@ -2537,6 +2542,7 @@ notices.desc=Beschrijving
notices.op=Op.
notices.delete_success=De systeemmeldingen zijn verwijderd.
[action]
create_repo=repository aangemaakt in <a href="%s">%s</a>
rename_repo=hernoemde repository van <code>%[1]s</code> naar <a href="%[2]s">%[3]s</a>
+6
View File
@@ -474,6 +474,7 @@ auth_failed=Uwierzytelnienie się nie powiodło: %v
target_branch_not_exist=Gałąź docelowa nie istnieje.
[user]
change_avatar=Zmień swój awatar…
repositories=Repozytoria
@@ -1467,6 +1468,8 @@ activity.git_stats_and_deletions=i
activity.git_stats_deletion_1=%d usunięcie
activity.git_stats_deletion_n=%d usunięć
contributors.contribution_type.commits=Commity
search=Szukaj
search.search_repo=Przeszukaj repozytorium
search.fuzzy=Fuzzy
@@ -1899,6 +1902,8 @@ error.csv.too_large=Nie można wyświetlić tego pliku, ponieważ jest on zbyt d
error.csv.unexpected=Nie można renderować tego pliku, ponieważ zawiera nieoczekiwany znak w wierszu %d i kolumnie %d.
error.csv.invalid_field_count=Nie można renderować tego pliku, ponieważ ma nieprawidłową liczbę pól w wierszu %d.
[graphs]
[org]
org_name_holder=Nazwa organizacji
org_full_name_holder=Pełna nazwa organizacji
@@ -2425,6 +2430,7 @@ notices.desc=Opis
notices.op=Operacja
notices.delete_success=Powiadomienia systemu zostały usunięte.
[action]
create_repo=tworzy repozytorium <a href="%s">%s</a>
rename_repo=zmienia nazwę repozytorium <code>%[1]s</code> na <a href="%[2]s">%[3]s</a>
+8
View File
@@ -582,6 +582,7 @@ org_still_own_packages=Esta organização ainda possui pacotes, exclua-os primei
target_branch_not_exist=O branch de destino não existe.
[user]
change_avatar=Altere seu avatar...
joined_on=Inscreveu-se em %s
@@ -1927,6 +1928,8 @@ activity.git_stats_and_deletions=e
activity.git_stats_deletion_1=%d exclusão
activity.git_stats_deletion_n=%d exclusões
contributors.contribution_type.commits=Commits
search=Pesquisar
search.search_repo=Pesquisar no repositório...
search.type.tooltip=Tipo de pesquisa
@@ -2484,6 +2487,8 @@ error.csv.too_large=Não é possível renderizar este arquivo porque ele é muit
error.csv.unexpected=Não é possível renderizar este arquivo porque ele contém um caractere inesperado na linha %d e coluna %d.
error.csv.invalid_field_count=Não é possível renderizar este arquivo porque ele tem um número errado de campos na linha %d.
[graphs]
[org]
org_name_holder=Nome da organização
org_full_name_holder=Nome completo da organização
@@ -3110,6 +3115,7 @@ notices.desc=Descrição
notices.op=Op.
notices.delete_success=Os avisos do sistema foram excluídos.
[action]
create_repo=criou o repositório <a href="%s">%s</a>
rename_repo=renomeou o repositório <code>%[1]s</code> para <a href="%[2]s">%[3]s</a>
@@ -3293,6 +3299,8 @@ rpm.registry=Configure este registro pela linha de comando:
rpm.distros.redhat=em distribuições baseadas no RedHat
rpm.distros.suse=em distribuições baseadas no SUSE
rpm.install=Para instalar o pacote, execute o seguinte comando:
rpm.repository=Informações do repositório
rpm.repository.architectures=Arquiteturas
rubygems.install=Para instalar o pacote usando gem, execute o seguinte comando:
rubygems.install2=ou adicione-o ao Gemfile:
rubygems.dependencies.runtime=Dependências de Execução
+46 -3
View File
@@ -123,6 +123,7 @@ pin=Fixar
unpin=Desafixar
artifacts=Artefactos
confirm_delete_artifact=Tem a certeza que quer eliminar este artefacto "%s"?
archived=Arquivado
@@ -423,6 +424,7 @@ authorization_failed_desc=A autorização falhou porque encontrámos um pedido i
sspi_auth_failed=Falhou a autenticação SSPI
password_pwned=A senha utilizada está numa <a target="_blank" rel="noopener noreferrer" href="https://haveibeenpwned.com/Passwords">lista de senhas roubadas</a> anteriormente expostas em fugas de dados públicas. Tente novamente com uma senha diferente e considere também mudar esta senha nos outros sítios.
password_pwned_err=Não foi possível completar o pedido ao HaveIBeenPwned
last_admin=Não pode remover o último administrador. Tem que existir pelo menos um administrador.
[mail]
view_it_on=Ver em %s
@@ -588,6 +590,8 @@ org_still_own_packages=Esta organização ainda possui um ou mais pacotes, elimi
target_branch_not_exist=O ramo de destino não existe.
admin_cannot_delete_self=Não se pode auto-remover quando tem privilégios de administração. Remova esses privilégios primeiro.
[user]
change_avatar=Mude o seu avatar…
joined_on=Inscreveu-se em %s
@@ -967,6 +971,8 @@ issue_labels_helper=Escolha um conjunto de rótulos para as questões.
license=Licença
license_helper=Escolha um ficheiro de licença.
license_helper_desc=Uma licença rege o que os outros podem, ou não, fazer com o seu código fonte. Não tem a certeza sobre qual a mais indicada para o seu trabalho? Veja: <a target="_blank" rel="noopener noreferrer" href="%s">Escolher uma licença.</a>
object_format=Formato dos elementos
object_format_helper=Formato dos elementos do repositório. Não poderá ser alterado mais tarde. SHA1 é o mais compatível.
readme=README
readme_helper=Escolha um modelo de ficheiro README.
readme_helper_desc=Este é o sítio onde pode escrever uma descrição completa do seu trabalho.
@@ -984,6 +990,7 @@ mirror_prune=Podar
mirror_prune_desc=Remover referências obsoletas de seguimento remoto
mirror_interval=Intervalo entre sincronizações (as unidades de tempo válidas são 'h', 'm' e 's'). O valor zero desabilita a sincronização periódica. (Intervalo mínimo: %s)
mirror_interval_invalid=O intervalo entre sincronizações não é válido.
mirror_sync=sincronizado
mirror_sync_on_commit=Sincronizar quando forem enviados cometimentos
mirror_address=Clonar a partir do URL
mirror_address_desc=Coloque, na secção de autorização, as credenciais que, eventualmente, sejam necessárias.
@@ -1034,6 +1041,7 @@ desc.public=Público
desc.template=Modelo
desc.internal=Interno
desc.archived=Arquivado
desc.sha256=SHA256
template.items=Itens do modelo
template.git_content=Conteúdo Git (ramo principal)
@@ -1184,6 +1192,8 @@ audio_not_supported_in_browser=O seu navegador não suporta a etiqueta 'audio' d
stored_lfs=Armazenado com Git LFS
symbolic_link=Ligação simbólica
executable_file=Ficheiro executável
vendored=Externo
generated=Gerado
commit_graph=Gráfico de cometimentos
commit_graph.select=Escolher ramos
commit_graph.hide_pr_refs=Ocultar pedidos de integração
@@ -1707,6 +1717,7 @@ pulls.select_commit_hold_shift_for_range=Escolha o comentimento. Mantenha premid
pulls.review_only_possible_for_full_diff=A revisão só é possível ao visualizar o diff completo
pulls.filter_changes_by_commit=Filtrar por cometimento
pulls.nothing_to_compare=Estes ramos são iguais. Não há necessidade de criar um pedido de integração.
pulls.nothing_to_compare_have_tag=O ramo/etiqueta escolhidos são iguais.
pulls.nothing_to_compare_and_allow_empty_pr=Estes ramos são iguais. Este pedido de integração ficará vazio.
pulls.has_pull_request=`Já existe um pedido de integração entre estes ramos: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create=Criar um pedido de integração
@@ -1765,6 +1776,7 @@ pulls.merge_pull_request=Criar um cometimento de integração
pulls.rebase_merge_pull_request=Mudar a base e avançar rapidamente
pulls.rebase_merge_commit_pull_request=Mudar a base e criar um cometimento de integração
pulls.squash_merge_pull_request=Criar cometimento de compactação
pulls.fast_forward_only_merge_pull_request=Avançar rapidamente apenas
pulls.merge_manually=Integrado manualmente
pulls.merge_commit_id=O ID de cometimento da integração
pulls.require_signed_wont_sign=O ramo requer que os cometimentos sejam assinados mas esta integração não vai ser assinada
@@ -1901,6 +1913,8 @@ wiki.page_name_desc=Insira um nome para esta página Wiki. Alguns dos nomes espe
wiki.original_git_entry_tooltip=Ver o ficheiro Git original, ao invés de usar uma ligação amigável.
activity=Trabalho
activity.navbar.pulse=Pulso
activity.navbar.contributors=Contribuidores
activity.period.filter_label=Período:
activity.period.daily=1 dia
activity.period.halfweekly=3 dias
@@ -1966,6 +1980,11 @@ activity.git_stats_and_deletions=e
activity.git_stats_deletion_1=%d eliminação
activity.git_stats_deletion_n=%d eliminações
contributors.contribution_type.filter_label=Tipo de contribuição:
contributors.contribution_type.commits=Cometimentos
contributors.contribution_type.additions=Adições
contributors.contribution_type.deletions=Eliminações
search=Procurar
search.search_repo=Procurar repositório
search.type.tooltip=Tipo de pesquisa
@@ -2003,6 +2022,7 @@ settings.mirror_settings.docs.doc_link_title=Como é que eu replico repositório
settings.mirror_settings.docs.doc_link_pull_section=a parte "Puxar de um repositório remoto" da documentação.
settings.mirror_settings.docs.pulling_remote_title=Puxando a partir de um repositório remoto
settings.mirror_settings.mirrored_repository=Repositório replicado
settings.mirror_settings.pushed_repository=Repositório enviado
settings.mirror_settings.direction=Sentido
settings.mirror_settings.direction.pull=Puxada
settings.mirror_settings.direction.push=Envio
@@ -2312,6 +2332,8 @@ settings.protect_approvals_whitelist_users=Revisores com permissão:
settings.protect_approvals_whitelist_teams=Equipas com permissão para rever:
settings.dismiss_stale_approvals=Descartar aprovações obsoletas
settings.dismiss_stale_approvals_desc=Quando novos cometimentos que mudam o conteúdo do pedido de integração forem enviados para o ramo, as aprovações antigas serão descartadas.
settings.ignore_stale_approvals=Ignorar aprovações obsoletas
settings.ignore_stale_approvals_desc=Não contar as aprovações feitas em cometimentos mais antigos (revisões obsoletas) para o número de aprovações do pedido de integração. É irrelevante se as revisões obsoletas já forem descartadas.
settings.require_signed_commits=Exigir cometimentos assinados
settings.require_signed_commits_desc=Rejeitar envios para este ramo que não estejam assinados ou que não sejam validáveis.
settings.protect_branch_name_pattern=Padrão do nome do ramo protegido
@@ -2367,6 +2389,7 @@ settings.archive.error=Ocorreu um erro enquanto decorria o processo de arquivo d
settings.archive.error_ismirror=Não pode arquivar um repositório que tenha sido replicado.
settings.archive.branchsettings_unavailable=As configurações dos ramos não estão disponíveis quando o repositório está arquivado.
settings.archive.tagsettings_unavailable=As configurações sobre etiquetas não estão disponíveis quando o repositório está arquivado.
settings.archive.mirrors_unavailable=As réplicas não estão disponíveis se o repositório estiver arquivado.
settings.unarchive.button=Desarquivar repositório
settings.unarchive.header=Desarquivar este repositório
settings.unarchive.text=Desarquivar o repositório irá restaurar a capacidade de receber cometimentos e envios, assim como novas questões e pedidos de integração.
@@ -2565,6 +2588,13 @@ error.csv.too_large=Não é possível apresentar este ficheiro por ser demasiado
error.csv.unexpected=Não é possível apresentar este ficheiro porque contém um caractere inesperado na linha %d e coluna %d.
error.csv.invalid_field_count=Não é possível apresentar este ficheiro porque tem um número errado de campos na linha %d.
[graphs]
component_loading=A carregar %s...
component_loading_failed=Não foi possível carregar %s
component_loading_info=Isto pode demorar um pouco…
component_failed_to_load=Ocorreu um erro inesperado.
contributors.what=contribuições
[org]
org_name_holder=Nome da organização
org_full_name_holder=Nome completo da organização
@@ -2691,6 +2721,7 @@ teams.invite.description=Clique no botão abaixo para se juntar à equipa.
[admin]
dashboard=Painel de controlo
self_check=Auto-verificação
identity_access=Identidade e acesso
users=Contas de utilizador
organizations=Organizações
@@ -2736,6 +2767,7 @@ dashboard.delete_missing_repos=Eliminar todos os repositórios que não tenham o
dashboard.delete_missing_repos.started=Foi iniciada a tarefa de eliminação de todos os repositórios que não têm ficheiros git.
dashboard.delete_generated_repository_avatars=Eliminar avatares gerados do repositório
dashboard.sync_repo_branches=Sincronizar ramos perdidos de dados do git para bases de dados
dashboard.sync_repo_tags=Sincronizar etiquetas dos dados do git para a base de dados
dashboard.update_mirrors=Sincronizar réplicas
dashboard.repo_health_check=Verificar a saúde de todos os repositórios
dashboard.check_repo_stats=Verificar as estatísticas de todos os repositórios
@@ -2790,6 +2822,7 @@ dashboard.stop_endless_tasks=Parar tarefas intermináveis
dashboard.cancel_abandoned_jobs=Cancelar trabalhos abandonados
dashboard.start_schedule_tasks=Iniciar tarefas de agendamento
dashboard.sync_branch.started=Sincronização de ramos iniciada
dashboard.sync_tag.started=Sincronização de etiquetas iniciada
dashboard.rebuild_issue_indexer=Reconstruir indexador de questões
users.user_manage_panel=Gestão das contas de utilizadores
@@ -3216,6 +3249,13 @@ notices.desc=Descrição
notices.op=Op.
notices.delete_success=As notificações do sistema foram eliminadas.
self_check.no_problem_found=Nenhum problema encontrado até agora.
self_check.database_collation_mismatch=Supor que a base de dados usa a colação: %s
self_check.database_collation_case_insensitive=A base de dados está a usar a colação %s, que é insensível à diferença entre maiúsculas e minúsculas. Embora o Gitea possa trabalhar com ela, pode haver alguns casos raros que não funcionem como esperado.
self_check.database_inconsistent_collation_columns=A base de dados está a usar a colação %s, mas estas colunas estão a usar colações diferentes. Isso poderá causar alguns problemas inesperados.
self_check.database_fix_mysql=Para utilizadores do MySQL/MariaDB, pode usar o comando "gitea doctor convert" para resolver os problemas de colação. Também pode resolver o problema com comandos SQL "ALTER ... COLLATE ..." aplicados manualmente.
self_check.database_fix_mssql=Para utilizadores do MSSQL só pode resolver o problema aplicando comandos SQL "ALTER ... COLLATE ..." manualmente, por enquanto.
[action]
create_repo=criou o repositório <a href="%s">%s</a>
rename_repo=renomeou o repositório de <code>%[1]s</code> para <a href="%[2]s">%[3]s</a>
@@ -3400,6 +3440,9 @@ rpm.registry=Configurar este registo usando a linha de comandos:
rpm.distros.redhat=em distribuições baseadas no RedHat
rpm.distros.suse=em distribuições baseadas no SUSE
rpm.install=Para instalar o pacote, execute o seguinte comando:
rpm.repository=Informação do repositório
rpm.repository.architectures=Arquitecturas
rpm.repository.multiple_groups=Este pacote está disponível em vários grupos.
rubygems.install=Para instalar o pacote usando o gem, execute o seguinte comando:
rubygems.install2=ou adicione-o ao ficheiro <code>Gemfile</code>:
rubygems.dependencies.runtime=Dependências do tempo de execução (runtime)
@@ -3532,8 +3575,8 @@ runs.actors_no_select=Todos os intervenientes
runs.status_no_select=Todos os estados
runs.no_results=Nenhum resultado obtido.
runs.no_workflows=Ainda não há sequências de trabalho.
runs.no_workflows.quick_start=Não sabe como começar com o Gitea Action? Veja o <a target="_blank" rel="noopener noreferrer" href="%s">guia de iniciação rápida</a>.
runs.no_workflows.documentation=Para mais informação sobre o Gitea Action, veja <a target="_blank" rel="noopener noreferrer" href="%s">a documentação</a>.
runs.no_workflows.quick_start=Não sabe como começar com o Gitea Actions? Veja o <a target="_blank" rel="noopener noreferrer" href="%s">guia de inicio rápido</a>.
runs.no_workflows.documentation=Para mais informação sobre o Gitea Actions veja <a target="_blank" rel="noopener noreferrer" href="%s">a documentação</a>.
runs.no_runs=A sequência de trabalho ainda não foi executada.
runs.empty_commit_message=(mensagem de cometimento vazia)
@@ -3552,7 +3595,7 @@ variables.none=Ainda não há variáveis.
variables.deletion=Remover variável
variables.deletion.description=Remover uma variável é permanente e não pode ser revertido. Quer continuar?
variables.description=As variáveis serão transmitidas a certas operações e não poderão ser lidas de outra forma.
variables.id_not_exist=A variável com o id %d não existe.
variables.id_not_exist=A variável com o ID %d não existe.
variables.edit=Editar variável
variables.deletion.failed=Falha ao remover a variável.
variables.deletion.success=A variável foi removida.
+8 -3
View File
@@ -586,6 +586,7 @@ org_still_own_packages=Эта организация всё ещё владее
target_branch_not_exist=Целевая ветка не существует.
[user]
change_avatar=Изменить свой аватар…
joined_on=Присоединил(ся/ась) %s
@@ -1926,6 +1927,8 @@ activity.git_stats_and_deletions=и
activity.git_stats_deletion_1=%d удаление
activity.git_stats_deletion_n=%d удалений
contributors.contribution_type.commits=коммитов
search=Поиск
search.search_repo=Поиск по репозиторию
search.type.tooltip=Тип поиска
@@ -2515,6 +2518,8 @@ error.csv.too_large=Не удается отобразить этот файл,
error.csv.unexpected=Не удается отобразить этот файл, потому что он содержит неожиданный символ в строке %d и столбце %d.
error.csv.invalid_field_count=Не удается отобразить этот файл, потому что он имеет неправильное количество полей в строке %d.
[graphs]
[org]
org_name_holder=Название организации
org_full_name_holder=Полное название организации
@@ -3153,6 +3158,7 @@ notices.desc=Описание
notices.op=Oп.
notices.delete_success=Уведомления системы были удалены.
[action]
create_repo=создал(а) репозиторий <a href="%s"> %s</a>
rename_repo=переименовал(а) репозиторий из <code>%[1]s</code> на <a href="%[2]s">%[3]s</a>
@@ -3337,6 +3343,8 @@ rpm.registry=Настроить реестр из командной строк
rpm.distros.redhat=на дистрибутивах семейства RedHat
rpm.distros.suse=на дистрибутивах семейства SUSE
rpm.install=Чтобы установить пакет, выполните следующую команду:
rpm.repository=О репозитории
rpm.repository.architectures=Архитектуры
rubygems.install=Чтобы установить пакет с помощью gem, выполните следующую команду:
rubygems.install2=или добавьте его в Gemfile:
rubygems.dependencies.runtime=Зависимости времени выполнения
@@ -3464,8 +3472,6 @@ runs.status=Статус
runs.actors_no_select=Все акторы
runs.no_results=Ничего не найдено.
runs.no_workflows=Пока нет рабочих процессов.
runs.no_workflows.quick_start=Не знаете, как начать использовать Действия Gitea? Читайте <a target="_blank" rel="noopener noreferrer" href="%s">руководство по быстрому старту</a>.
runs.no_workflows.documentation=Чтобы узнать больше о Действиях Gitea, читайте <a target="_blank" rel="noopener noreferrer" href="%s">документацию</a>.
runs.no_runs=Рабочий поток ещё не запускался.
runs.empty_commit_message=(пустое сообщение коммита)
@@ -3484,7 +3490,6 @@ variables.none=Переменных пока нет.
variables.deletion=Удалить переменную
variables.deletion.description=Удаление переменной необратимо, его нельзя отменить. Продолжить?
variables.description=Переменные будут передаваться определенным действиям и не могут быть прочитаны иначе.
variables.id_not_exist=Переменная с идентификатором %d не существует.
variables.edit=Изменить переменную
variables.deletion.failed=Не удалось удалить переменную.
variables.deletion.success=Переменная удалена.
+6
View File
@@ -450,6 +450,7 @@ auth_failed=සත්යාපන අසමත් විය: %v
target_branch_not_exist=ඉලක්කගත ශාඛාව නොපවතී.
[user]
change_avatar=ඔබගේ අවතාරය වෙනස් කරන්න…
repositories=කෝෂ්ඨ
@@ -1459,6 +1460,8 @@ activity.git_stats_and_deletions=සහ
activity.git_stats_deletion_1=%d මකාදැමීම
activity.git_stats_deletion_n=%d මකාදැමීම්
contributors.contribution_type.commits=විවරයන්
search=සොයන්න
search.search_repo=කෝෂ්ඨය සොයන්න
search.fuzzy=සිනිඳු
@@ -1910,6 +1913,8 @@ error.csv.too_large=එය ඉතා විශාල නිසා මෙම ග
error.csv.unexpected=%d පේළියේ සහ %dතීරුවේ අනපේක්ෂිත චරිතයක් අඩංගු බැවින් මෙම ගොනුව විදැහුම්කරණය කළ නොහැක.
error.csv.invalid_field_count=මෙම ගොනුව රේඛාවේ වැරදි ක්ෂේත්ර සංඛ්යාවක් ඇති බැවින් එය විදැහුම්කරණය කළ නොහැක %d.
[graphs]
[org]
org_name_holder=සංවිධානයේ නම
org_full_name_holder=සංවිධානයේ සම්පූර්ණ නම
@@ -2456,6 +2461,7 @@ notices.desc=සවිස්තරය
notices.op=ඔප්.
notices.delete_success=පද්ධති දැන්වීම් මකා දමා ඇත.
[action]
create_repo=නිර්මිත ගබඩාව <a href="%s">%s</a>
rename_repo=<code>%[1]s</code> සිට <a href="%[2]s">%[3]s</a>දක්වා නම් කරන ලද ගබඩාව
+6
View File
@@ -563,6 +563,7 @@ auth_failed=Overenie zlyhalo: %v
target_branch_not_exist=Cieľová vetva neexistuje.
[user]
change_avatar=Zmeniť svoj avatar…
joined_on=Pripojil/a sa %s
@@ -1144,6 +1145,8 @@ activity.unresolved_conv_label=Otvoriť
activity.git_stats_commit_1=%d commit
activity.git_stats_commit_n=%d commity
contributors.contribution_type.commits=Commitov
search=Hľadať
search.type.tooltip=Typ vyhľadávania
search.fuzzy=Fuzzy
@@ -1246,6 +1249,8 @@ release.cancel=Zrušiť
[graphs]
[org]
code=Kód
lower_repositories=repozitáre
@@ -1328,6 +1333,7 @@ monitor.process.cancel=Zrušiť proces
[action]
compare_commits=Porovnať %d commitov
compare_commits_general=Porovnať commity
+6
View File
@@ -390,6 +390,7 @@ auth_failed=Autentisering misslyckades: %v
target_branch_not_exist=Målgrenen finns inte.
[user]
change_avatar=Byt din avatar…
repositories=Utvecklingskataloger
@@ -1227,6 +1228,8 @@ activity.git_stats_and_deletions=och
activity.git_stats_deletion_1=%d borttagen
activity.git_stats_deletion_n=%d borttagningar
contributors.contribution_type.commits=Incheckningar
search=Sök
search.search_repo=Sök utvecklingskatalog
search.results=Sökresultat för ”%s” i <a href="%s"> %s</a>
@@ -1535,6 +1538,8 @@ topic.count_prompt=Du kan inte välja fler än 25 ämnen
[graphs]
[org]
org_name_holder=Organisationsnamn
org_full_name_holder=Organisationens Fullständiga Namn
@@ -1971,6 +1976,7 @@ notices.desc=Beskrivning
notices.op=Op.
notices.delete_success=Systemnotifikationer har blivit raderade.
[action]
create_repo=skapade utvecklingskatalog <a href="%s"> %s</a>
rename_repo=döpte om utvecklingskalatogen från <code>%[1]s</code> till <a href="%[2]s">%[3]s</a>
+8 -3
View File
@@ -588,6 +588,7 @@ org_still_own_packages=Bu organizasyon hala bir veya daha fazla pakete sahip, ö
target_branch_not_exist=Hedef dal mevcut değil.
[user]
change_avatar=Profil resmini değiştir…
joined_on=%s tarihinde katıldı
@@ -1966,6 +1967,8 @@ activity.git_stats_and_deletions=ve
activity.git_stats_deletion_1=%d silme oldu
activity.git_stats_deletion_n=%d silme oldu
contributors.contribution_type.commits=İşleme
search=Ara
search.search_repo=Depo ara
search.type.tooltip=Arama türü
@@ -2565,6 +2568,8 @@ error.csv.too_large=Bu dosya çok büyük olduğu için işlenemiyor.
error.csv.unexpected=%d satırı ve %d sütununda beklenmeyen bir karakter içerdiğinden bu dosya işlenemiyor.
error.csv.invalid_field_count=%d satırında yanlış sayıda alan olduğundan bu dosya işlenemiyor.
[graphs]
[org]
org_name_holder=Organizasyon Adı
org_full_name_holder=Organizasyon Tam Adı
@@ -3216,6 +3221,7 @@ notices.desc=Açıklama
notices.op=İşlem
notices.delete_success=Sistem bildirimleri silindi.
[action]
create_repo=depo <a href="%s">%s</a> oluşturuldu
rename_repo=<code>%[1]s</code> olan depo adını <a href="%[2]s">%[3]s</a> buna çevirdi
@@ -3400,6 +3406,8 @@ rpm.registry=Bu kütüğü komut satırını kullanarak kurun:
rpm.distros.redhat=RedHat tabanlı dağıtımlarda
rpm.distros.suse=SUSE tabanlı dağıtımlarda
rpm.install=Paketi kurmak için, aşağıdaki komutu çalıştırın:
rpm.repository=Depo Bilgisi
rpm.repository.architectures=Mimariler
rubygems.install=Paketi gem ile kurmak için, şu komutu çalıştırın:
rubygems.install2=veya paketi Gemfile dosyasına ekleyin:
rubygems.dependencies.runtime=Çalışma Zamanı Bağımlılıkları
@@ -3532,8 +3540,6 @@ runs.actors_no_select=Tüm aktörler
runs.status_no_select=Tüm durumlar
runs.no_results=Eşleşen sonuç yok.
runs.no_workflows=Henüz hiç bir iş akışı yok.
runs.no_workflows.quick_start=Gitea İşlem'i nasıl başlatacağınızı bilmiyor musunuz? <a target="_blank" rel="noopener noreferrer" href="%s">Hızlı başlangıç rehberine</a> bakabilirsiniz.
runs.no_workflows.documentation=Gitea İşlem'i hakkında daha fazla bilgi için, <a target="_blank" rel="noopener noreferrer" href="%s">belgeye</a> bakabilirsiniz.
runs.no_runs=İş akışı henüz hiç çalıştırılmadı.
runs.empty_commit_message=(boş işleme iletisi)
@@ -3552,7 +3558,6 @@ variables.none=Henüz hiçbir değişken yok.
variables.deletion=Değişkeni kaldır
variables.deletion.description=Bir değişkeni kaldırma kalıcıdır ve geri alınamaz. Devam edilsin mi?
variables.description=Değişkenler belirli işlemlere aktarılacaktır, bunun dışında okunamaz.
variables.id_not_exist=%d kimlikli değişken mevcut değil.
variables.edit=Değişkeni Düzenle
variables.deletion.failed=Değişken kaldırılamadı.
variables.deletion.success=Değişken kaldırıldı.
+6
View File
@@ -466,6 +466,7 @@ auth_failed=Помилка автентифікації: %v
target_branch_not_exist=Цільової гілки не існує.
[user]
change_avatar=Змінити свій аватар…
repositories=Репозиторії
@@ -1508,6 +1509,8 @@ activity.git_stats_and_deletions=та
activity.git_stats_deletion_1=%d видалений
activity.git_stats_deletion_n=%d видалені
contributors.contribution_type.commits=Коміти
search=Пошук
search.search_repo=Пошук репозиторію
search.fuzzy=Неточний
@@ -1961,6 +1964,8 @@ error.csv.too_large=Не вдається відобразити цей файл
error.csv.unexpected=Не вдається відобразити цей файл, тому що він містить неочікуваний символ в рядку %d і стовпці %d.
error.csv.invalid_field_count=Не вдається відобразити цей файл, тому що він має неправильну кількість полів у рядку %d.
[graphs]
[org]
org_name_holder=Назва організації
org_full_name_holder=Повна назва організації
@@ -2510,6 +2515,7 @@ notices.desc=Опис
notices.op=Оп.
notices.delete_success=Сповіщення системи були видалені.
[action]
create_repo=створив(ла) репозиторій <a href="%s">%s</a>
rename_repo=репозиторій перейменовано з <code>%[1]s</code> на <a href="%[2]s">%[3]s</a>
+42 -3
View File
@@ -123,6 +123,7 @@ pin=固定
unpin=取消置顶
artifacts=制品
confirm_delete_artifact=您确定要删除制品'%s'吗?
archived=已归档
@@ -423,6 +424,7 @@ authorization_failed_desc=因为检测到无效请求,授权失败。请尝试
sspi_auth_failed=SSPI 认证失败
password_pwned=此密码出现在 <a target="_blank" rel="noopener noreferrer" href="https://haveibeenpwned.com/Passwords">被盗密码</a> 列表上并且曾经被公开。 请使用另一个密码再试一次。
password_pwned_err=无法完成对 HaveIBeenPwned 的请求
last_admin=您不能删除最后一个管理员。必须至少保留一个管理员。
[mail]
view_it_on=在 %s 上查看
@@ -588,6 +590,8 @@ org_still_own_packages=该组织仍然是一个或多个软件包的拥有者,
target_branch_not_exist=目标分支不存在。
admin_cannot_delete_self=当您是管理员时,您不能删除自己。请先移除您的管理员权限
[user]
change_avatar=修改头像
joined_on=加入于 %s
@@ -967,6 +971,8 @@ issue_labels_helper=选择一个工单标签集
license=授权许可
license_helper=选择授权许可文件。
license_helper_desc=许可证说明了其他人可以和不可以用您的代码做什么。不确定哪一个适合你的项目?见 <a target="_blank" rel="noopener noreferrer" href="%s">选择一个许可证</a>
object_format=对象格式
object_format_helper=仓库的对象格式。之后无法更改。SHA1 是最兼容的。
readme=自述
readme_helper=选择自述文件模板。
readme_helper_desc=这是您可以为您的项目撰写完整描述的地方。
@@ -984,6 +990,7 @@ mirror_prune=修剪
mirror_prune_desc=删除过时的远程跟踪引用
mirror_interval=镜像间隔 (有效的时间单位是 'h', 'm', 's')。0 禁用自动定期同步 (最短间隔: %s)
mirror_interval_invalid=镜像间隔无效。
mirror_sync=已同步
mirror_sync_on_commit=推送提交时同步
mirror_address=从 URL 克隆
mirror_address_desc=在授权框中输入必要的凭据。
@@ -1034,6 +1041,7 @@ desc.public=公开
desc.template=模板
desc.internal=内部
desc.archived=已存档
desc.sha256=SHA256
template.items=模板选项
template.git_content=Git数据(默认分支)
@@ -1184,6 +1192,8 @@ audio_not_supported_in_browser=您的浏览器不支持使用 HTML5 'video' 标
stored_lfs=存储到Git LFS
symbolic_link=符号链接
executable_file=可执行文件
vendored=被供应的
generated=已生成的
commit_graph=提交图
commit_graph.select=选择分支
commit_graph.hide_pr_refs=隐藏合并请求
@@ -1707,6 +1717,7 @@ pulls.select_commit_hold_shift_for_range=选择提交。按住 Shift + 单击选
pulls.review_only_possible_for_full_diff=只有在查看全部差异时才能进行审核
pulls.filter_changes_by_commit=按提交筛选
pulls.nothing_to_compare=分支内容相同,无需创建合并请求。
pulls.nothing_to_compare_have_tag=所选分支/标签相同。
pulls.nothing_to_compare_and_allow_empty_pr=这些分支是相等的,此合并请求将为空。
pulls.has_pull_request=这些分支之间的合并请求已存在: <a href="%[1]s">%[2]s#%[3]d</a>
pulls.create=创建合并请求
@@ -1901,6 +1912,7 @@ wiki.page_name_desc=输入此 Wiki 页面的名称。特殊名称有:'Home', '
wiki.original_git_entry_tooltip=查看原始的 Git 文件而不是使用友好链接。
activity=动态
activity.navbar.contributors=贡献者
activity.period.filter_label=周期:
activity.period.daily=1 天
activity.period.halfweekly=3 天
@@ -1966,6 +1978,11 @@ activity.git_stats_and_deletions=和
activity.git_stats_deletion_1=删除 %d 行
activity.git_stats_deletion_n=删除 %d 行
contributors.contribution_type.filter_label=贡献类型:
contributors.contribution_type.commits=提交
contributors.contribution_type.additions=更多
contributors.contribution_type.deletions=删除
search=搜索
search.search_repo=搜索仓库...
search.type.tooltip=搜索类型
@@ -2003,6 +2020,7 @@ settings.mirror_settings.docs.doc_link_title=如何镜像仓库?
settings.mirror_settings.docs.doc_link_pull_section=文档中的 “从远程仓库拉取” 部分。
settings.mirror_settings.docs.pulling_remote_title=从远程仓库拉取代码
settings.mirror_settings.mirrored_repository=镜像库
settings.mirror_settings.pushed_repository=推送仓库
settings.mirror_settings.direction=方向
settings.mirror_settings.direction.pull=拉取
settings.mirror_settings.direction.push=推送
@@ -2312,6 +2330,8 @@ settings.protect_approvals_whitelist_users=审查者白名单:
settings.protect_approvals_whitelist_teams=审查团队白名单:
settings.dismiss_stale_approvals=取消过时的批准
settings.dismiss_stale_approvals_desc=当新的提交更改合并请求内容被推送到分支时,旧的批准将被撤销。
settings.ignore_stale_approvals=忽略过期批准
settings.ignore_stale_approvals_desc=对旧提交(过期审核)的批准将不计入 PR 的批准数。如果过期审查已被驳回,则与此无关。
settings.require_signed_commits=需要签名提交
settings.require_signed_commits_desc=拒绝推送未签名或无法验证的提交到分支
settings.protect_branch_name_pattern=受保护的分支名称模式
@@ -2367,6 +2387,7 @@ settings.archive.error=仓库在归档时出现异常。请通过日志获取详
settings.archive.error_ismirror=请不要对镜像仓库归档,谢谢!
settings.archive.branchsettings_unavailable=已归档仓库无法进行分支设置。
settings.archive.tagsettings_unavailable=已归档仓库的Git标签设置不可用。
settings.archive.mirrors_unavailable=如果仓库已被归档,镜像将不可用。
settings.unarchive.button=撤销仓库归档
settings.unarchive.header=撤销此仓库归档
settings.unarchive.text=撤销归档将恢复仓库接收提交、推送,以及新工单和合并请求的能力。
@@ -2565,6 +2586,13 @@ error.csv.too_large=无法渲染此文件,因为它太大了。
error.csv.unexpected=无法渲染此文件,因为它包含了意外字符,其位于第 %d 行和第 %d 列。
error.csv.invalid_field_count=无法渲染此文件,因为它在第 %d 行中的字段数有误。
[graphs]
component_loading=正在加载 %s...
component_loading_failed=无法加载 %s
component_loading_info=这可能需要一点…
component_failed_to_load=意外的错误发生了。
contributors.what=贡献
[org]
org_name_holder=组织名称
org_full_name_holder=组织全名
@@ -2691,6 +2719,7 @@ teams.invite.description=请点击下面的按钮加入团队。
[admin]
dashboard=管理面板
self_check=自我检查
identity_access=身份及认证
users=帐户管理
organizations=组织管理
@@ -2736,6 +2765,7 @@ dashboard.delete_missing_repos=删除所有丢失 Git 文件的仓库
dashboard.delete_missing_repos.started=删除所有丢失 Git 文件的仓库任务已启动。
dashboard.delete_generated_repository_avatars=删除生成的仓库头像
dashboard.sync_repo_branches=将缺少的分支从 git 数据同步到数据库
dashboard.sync_repo_tags=从 git 数据同步标签到数据库
dashboard.update_mirrors=更新镜像仓库
dashboard.repo_health_check=健康检查所有仓库
dashboard.check_repo_stats=检查所有仓库统计
@@ -2790,6 +2820,7 @@ dashboard.stop_endless_tasks=停止永不停止的任务
dashboard.cancel_abandoned_jobs=取消丢弃的任务
dashboard.start_schedule_tasks=开始调度任务
dashboard.sync_branch.started=分支同步已开始
dashboard.sync_tag.started=标签同步已开始
dashboard.rebuild_issue_indexer=重建工单索引
users.user_manage_panel=用户帐户管理
@@ -3216,6 +3247,11 @@ notices.desc=提示描述
notices.op=操作
notices.delete_success=系统通知已被删除。
self_check.no_problem_found=尚未发现问题。
self_check.database_collation_mismatch=期望数据库使用的校验方式:%s
self_check.database_collation_case_insensitive=数据库正在使用一个校验 %s, 这是一个不敏感的校验. 虽然Gitea可以与它合作,但可能有一些罕见的情况不如预期的那样起作用。
self_check.database_fix_mysql=对于MySQL/MariaDB用户,您可以使用“gitea doctor convert”命令来解决校验问题。 或者您也可以通过 "ALTER ... COLLATE ..." 这样的SQL 来手动解决这个问题。
[action]
create_repo=创建了仓库 <a href="%s">%s</a>
rename_repo=重命名仓库 <code>%[1]s</code> 为 <a href="%[2]s">%[3]s</a>
@@ -3400,6 +3436,9 @@ rpm.registry=从命令行设置此注册中心:
rpm.distros.redhat=在基于 RedHat 的发行版
rpm.distros.suse=在基于 SUSE 的发行版
rpm.install=要安装包,请运行以下命令:
rpm.repository=仓库信息
rpm.repository.architectures=架构
rpm.repository.multiple_groups=此软件包可在多个组中使用。
rubygems.install=要使用 gem 安装软件包,请运行以下命令:
rubygems.install2=或将它添加到 Gemfile
rubygems.dependencies.runtime=运行时依赖
@@ -3532,8 +3571,8 @@ runs.actors_no_select=所有操作者
runs.status_no_select=所有状态
runs.no_results=没有匹配的结果。
runs.no_workflows=目前还没有工作流。
runs.no_workflows.quick_start=不知道如何启动Gitea Action?请参阅 <a target="_blank" rel="noopener noreferrer" href="%s">快速启动指南</a>
runs.no_workflows.documentation=更多有关 Gitea Action信息,请访问 <a target="_blank" rel="noopener noreferrer" href="%s">文档</a>。
runs.no_workflows.quick_start=不知道如何使用 Gitea Actions吗?请查看 <a target="_blank" rel="noopener noreferrer" href="%s">快速启动指南</a>
runs.no_workflows.documentation=关于Gitea Actions的更多信息,请参阅 <a target="_blank" rel="noopener noreferrer" href="%s">文档</a>。
runs.no_runs=工作流尚未运行过。
runs.empty_commit_message=(空白的提交消息)
@@ -3552,7 +3591,7 @@ variables.none=目前还没有变量。
variables.deletion=删除变量
variables.deletion.description=删除变量是永久性的,无法撤消。继续吗?
variables.description=变量将被传给特定的 Actions,其它情况将不能读取
variables.id_not_exist=ID %d 变量不存在。
variables.id_not_exist=ID %d 变量不存在。
variables.edit=编辑变量
variables.deletion.failed=删除变量失败。
variables.deletion.success=变量已被删除。
+6
View File
@@ -195,6 +195,7 @@ auth_failed=授權驗證失敗:%v
target_branch_not_exist=目標分支不存在
[user]
repositories=儲存庫列表
activity=公開活動
@@ -537,6 +538,8 @@ activity.merged_prs_label=已合併
activity.closed_issue_label=已關閉
activity.new_issues_count_1=建立問題
contributors.contribution_type.commits=提交歷史
search=搜尋
settings=儲存庫設定
@@ -639,6 +642,8 @@ release.downloads=下載附件
[graphs]
[org]
org_name_holder=組織名稱
org_full_name_holder=組織全名
@@ -915,6 +920,7 @@ notices.desc=描述
notices.op=操作
notices.delete_success=已刪除系統提示。
[action]
create_repo=建立了儲存庫 <a href="%s">%s</a>
rename_repo=重新命名儲存庫 <code>%[1]s</code> 為 <a href="%[2]s">%[3]s</a>
+8
View File
@@ -555,6 +555,7 @@ org_still_own_packages=此組織仍然擁有一個以上的套件,請先刪除
target_branch_not_exist=目標分支不存在
[user]
change_avatar=更改大頭貼...
repositories=儲存庫
@@ -1776,6 +1777,8 @@ activity.git_stats_and_deletions=和
activity.git_stats_deletion_1=刪除 %d 行
activity.git_stats_deletion_n=刪除 %d 行
contributors.contribution_type.commits=提交歷史
search=搜尋
search.search_repo=搜尋儲存庫
search.type.tooltip=搜尋類型
@@ -2321,6 +2324,8 @@ error.csv.too_large=無法渲染此檔案,因為它太大了。
error.csv.unexpected=無法渲染此檔案,因為它包含了未預期的字元,於第 %d 行第 %d 列。
error.csv.invalid_field_count=無法渲染此檔案,因為它第 %d 行的欄位數量有誤。
[graphs]
[org]
org_name_holder=組織名稱
org_full_name_holder=組織全名
@@ -2933,6 +2938,7 @@ notices.desc=描述
notices.op=操作
notices.delete_success=已刪除系統提示。
[action]
create_repo=建立了儲存庫 <a href="%s">%s</a>
rename_repo=重新命名儲存庫 <code>%[1]s</code> 為 <a href="%[2]s">%[3]s</a>
@@ -3109,6 +3115,8 @@ pypi.requires=需要 Python
pypi.install=執行下列命令以使用 pip 安裝此套件:
rpm.registry=透過下列命令設定此註冊中心:
rpm.install=執行下列命令安裝此套件:
rpm.repository=儲存庫資訊
rpm.repository.architectures=架構
rubygems.install=執行下列命令以使用 gem 安裝此套件:
rubygems.install2=或將它加到 Gemfile:
rubygems.dependencies.runtime=執行階段相依性
+1 -1
View File
@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" class="gitea-discord__svg gitea-discord__gitea-discord svg gitea-discord" preserveAspectRatio="xMidYMid" viewBox="0 0 256 293" width="16" height="16"><path fill="#7289DA" d="M226.011 0H29.99C13.459 0 0 13.458 0 30.135v197.778c0 16.677 13.458 30.135 29.989 30.135h165.888l-7.754-27.063 18.725 17.408 17.7 16.384L256 292.571V30.135C256 13.458 242.542 0 226.011 0m-56.466 191.05s-5.266-6.291-9.655-11.85c19.164-5.413 26.478-17.408 26.478-17.408-5.998 3.95-11.703 6.73-16.823 8.63-7.314 3.073-14.336 5.12-21.211 6.291-14.044 2.633-26.917 1.902-37.888-.146-8.339-1.61-15.507-3.95-21.504-6.29-3.365-1.317-7.022-2.926-10.68-4.974-.438-.293-.877-.439-1.316-.732a2 2 0 0 1-.585-.438c-2.633-1.463-4.096-2.487-4.096-2.487s7.022 11.703 25.6 17.261c-4.388 5.56-9.801 12.142-9.801 12.142-32.33-1.024-44.617-22.235-44.617-22.235 0-47.104 21.065-85.285 21.065-85.285 21.065-15.799 41.106-15.36 41.106-15.36l1.463 1.756C80.75 77.53 68.608 89.088 68.608 89.088s3.218-1.755 8.63-4.242c15.653-6.876 28.088-8.777 33.208-9.216.877-.147 1.609-.293 2.487-.293a123.8 123.8 0 0 1 29.55-.292c13.896 1.609 28.818 5.705 44.031 14.043 0 0-11.556-10.971-36.425-18.578l2.048-2.34s20.041-.44 41.106 15.36c0 0 21.066 38.18 21.066 85.284 0 0-12.435 21.211-44.764 22.235zm-68.023-68.316c-8.338 0-14.92 7.314-14.92 16.237 0 8.924 6.728 16.238 14.92 16.238 8.339 0 14.921-7.314 14.921-16.238.147-8.923-6.582-16.237-14.92-16.237m53.394 0c-8.339 0-14.922 7.314-14.922 16.237 0 8.924 6.73 16.238 14.922 16.238 8.338 0 14.92-7.314 14.92-16.238s-6.582-16.237-14.92-16.237"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 127.14 96.36" class="svg gitea-discord" width="16" height="16" aria-hidden="true"><path fill="#5865f2" d="M107.7 8.07A105.2 105.2 0 0 0 81.47 0a72 72 0 0 0-3.36 6.83 97.7 97.7 0 0 0-29.11 0A72 72 0 0 0 45.64 0a106 106 0 0 0-26.25 8.09C2.79 32.65-1.71 56.6.54 80.21a105.7 105.7 0 0 0 32.17 16.15 77.7 77.7 0 0 0 6.89-11.11 68.4 68.4 0 0 1-10.85-5.18c.91-.66 1.8-1.34 2.66-2a75.57 75.57 0 0 0 64.32 0c.87.71 1.76 1.39 2.66 2a68.7 68.7 0 0 1-10.87 5.19 77 77 0 0 0 6.89 11.1 105.3 105.3 0 0 0 32.19-16.14c2.64-27.38-4.51-51.11-18.9-72.15M42.45 65.69C36.18 65.69 31 60 31 53s5-12.74 11.43-12.74S54 46 53.89 53s-5.05 12.69-11.44 12.69m42.24 0C78.41 65.69 73.25 60 73.25 53s5-12.74 11.44-12.74S96.23 46 96.12 53s-5.04 12.69-11.43 12.69"/></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 791 B

+4 -3
View File
@@ -9,6 +9,7 @@ import (
"errors"
"fmt"
"html"
"html/template"
"io"
"net/http"
"net/url"
@@ -499,11 +500,11 @@ func AuthorizeOAuth(ctx *context.Context) {
ctx.Data["Scope"] = form.Scope
ctx.Data["Nonce"] = form.Nonce
if user != nil {
ctx.Data["ApplicationCreatorLinkHTML"] = fmt.Sprintf(`<a href="%s">@%s</a>`, html.EscapeString(user.HomeLink()), html.EscapeString(user.Name))
ctx.Data["ApplicationCreatorLinkHTML"] = template.HTML(fmt.Sprintf(`<a href="%s">@%s</a>`, html.EscapeString(user.HomeLink()), html.EscapeString(user.Name)))
} else {
ctx.Data["ApplicationCreatorLinkHTML"] = fmt.Sprintf(`<a href="%s">%s</a>`, html.EscapeString(setting.AppSubURL+"/"), html.EscapeString(setting.AppName))
ctx.Data["ApplicationCreatorLinkHTML"] = template.HTML(fmt.Sprintf(`<a href="%s">%s</a>`, html.EscapeString(setting.AppSubURL+"/"), html.EscapeString(setting.AppName)))
}
ctx.Data["ApplicationRedirectDomainHTML"] = "<strong>" + html.EscapeString(form.RedirectURI) + "</strong>"
ctx.Data["ApplicationRedirectDomainHTML"] = template.HTML("<strong>" + html.EscapeString(form.RedirectURI) + "</strong>")
// TODO document SESSION <=> FORM
err = ctx.Session.Set("client_id", app.ClientID)
if err != nil {
+1 -1
View File
@@ -204,7 +204,7 @@ func ResetPasswdPost(ctx *context.Context) {
Password: optional.Some(ctx.FormString("password")),
MustChangePassword: optional.Some(false),
}
if err := user_service.UpdateAuth(ctx, ctx.Doer, opts); err != nil {
if err := user_service.UpdateAuth(ctx, u, opts); err != nil {
ctx.Data["IsResetForm"] = true
ctx.Data["Err_Password"] = true
switch {
+4 -4
View File
@@ -1283,19 +1283,19 @@ func MergePullRequest(ctx *context.Context) {
return
}
ctx.Flash.Error(flashError)
ctx.Redirect(issue.Link())
ctx.JSONRedirect(issue.Link())
} else if models.IsErrMergeUnrelatedHistories(err) {
log.Debug("MergeUnrelatedHistories error: %v", err)
ctx.Flash.Error(ctx.Tr("repo.pulls.unrelated_histories"))
ctx.Redirect(issue.Link())
ctx.JSONRedirect(issue.Link())
} else if git.IsErrPushOutOfDate(err) {
log.Debug("MergePushOutOfDate error: %v", err)
ctx.Flash.Error(ctx.Tr("repo.pulls.merge_out_of_date"))
ctx.Redirect(issue.Link())
ctx.JSONRedirect(issue.Link())
} else if models.IsErrSHADoesNotMatch(err) {
log.Debug("MergeHeadOutOfDate error: %v", err)
ctx.Flash.Error(ctx.Tr("repo.pulls.head_out_of_date"))
ctx.Redirect(issue.Link())
ctx.JSONRedirect(issue.Link())
} else if git.IsErrPushRejected(err) {
log.Debug("MergePushRejected error: %v", err)
pushrejErr := err.(*git.ErrPushRejected)
+73 -23
View File
@@ -224,37 +224,88 @@ func (n *actionsNotifier) CreateIssueComment(ctx context.Context, doer *user_mod
) {
ctx = withMethod(ctx, "CreateIssueComment")
permission, _ := access_model.GetUserRepoPermission(ctx, repo, doer)
if issue.IsPull {
if err := issue.LoadPullRequest(ctx); err != nil {
notifyIssueCommentChange(ctx, doer, comment, "", webhook_module.HookEventPullRequestComment, api.HookIssueCommentCreated)
return
}
notifyIssueCommentChange(ctx, doer, comment, "", webhook_module.HookEventIssueComment, api.HookIssueCommentCreated)
}
func (n *actionsNotifier) UpdateComment(ctx context.Context, doer *user_model.User, c *issues_model.Comment, oldContent string) {
ctx = withMethod(ctx, "UpdateComment")
if err := c.LoadIssue(ctx); err != nil {
log.Error("LoadIssue: %v", err)
return
}
if c.Issue.IsPull {
notifyIssueCommentChange(ctx, doer, c, oldContent, webhook_module.HookEventPullRequestComment, api.HookIssueCommentEdited)
return
}
notifyIssueCommentChange(ctx, doer, c, oldContent, webhook_module.HookEventIssueComment, api.HookIssueCommentEdited)
}
func (n *actionsNotifier) DeleteComment(ctx context.Context, doer *user_model.User, comment *issues_model.Comment) {
ctx = withMethod(ctx, "DeleteComment")
if err := comment.LoadIssue(ctx); err != nil {
log.Error("LoadIssue: %v", err)
return
}
if comment.Issue.IsPull {
notifyIssueCommentChange(ctx, doer, comment, "", webhook_module.HookEventPullRequestComment, api.HookIssueCommentDeleted)
return
}
notifyIssueCommentChange(ctx, doer, comment, "", webhook_module.HookEventIssueComment, api.HookIssueCommentDeleted)
}
func notifyIssueCommentChange(ctx context.Context, doer *user_model.User, comment *issues_model.Comment, oldContent string, event webhook_module.HookEventType, action api.HookIssueCommentAction) {
if err := comment.LoadIssue(ctx); err != nil {
log.Error("LoadIssue: %v", err)
return
}
if err := comment.Issue.LoadAttributes(ctx); err != nil {
log.Error("LoadAttributes: %v", err)
return
}
permission, _ := access_model.GetUserRepoPermission(ctx, comment.Issue.Repo, doer)
payload := &api.IssueCommentPayload{
Action: action,
Issue: convert.ToAPIIssue(ctx, comment.Issue),
Comment: convert.ToAPIComment(ctx, comment.Issue.Repo, comment),
Repository: convert.ToRepo(ctx, comment.Issue.Repo, permission),
Sender: convert.ToUser(ctx, doer, nil),
IsPull: comment.Issue.IsPull,
}
if action == api.HookIssueCommentEdited {
payload.Changes = &api.ChangesPayload{
Body: &api.ChangesFromPayload{
From: oldContent,
},
}
}
if comment.Issue.IsPull {
if err := comment.Issue.LoadPullRequest(ctx); err != nil {
log.Error("LoadPullRequest: %v", err)
return
}
newNotifyInputFromIssue(issue, webhook_module.HookEventPullRequestComment).
newNotifyInputFromIssue(comment.Issue, event).
WithDoer(doer).
WithPayload(&api.IssueCommentPayload{
Action: api.HookIssueCommentCreated,
Issue: convert.ToAPIIssue(ctx, issue),
Comment: convert.ToAPIComment(ctx, repo, comment),
Repository: convert.ToRepo(ctx, repo, permission),
Sender: convert.ToUser(ctx, doer, nil),
IsPull: true,
}).
WithPullRequest(issue.PullRequest).
WithPayload(payload).
WithPullRequest(comment.Issue.PullRequest).
Notify(ctx)
return
}
newNotifyInputFromIssue(issue, webhook_module.HookEventIssueComment).
newNotifyInputFromIssue(comment.Issue, event).
WithDoer(doer).
WithPayload(&api.IssueCommentPayload{
Action: api.HookIssueCommentCreated,
Issue: convert.ToAPIIssue(ctx, issue),
Comment: convert.ToAPIComment(ctx, repo, comment),
Repository: convert.ToRepo(ctx, repo, permission),
Sender: convert.ToUser(ctx, doer, nil),
IsPull: false,
}).
WithPayload(payload).
Notify(ctx)
}
@@ -496,7 +547,6 @@ func (n *actionsNotifier) DeleteRef(ctx context.Context, pusher *user_model.User
apiRepo := convert.ToRepo(ctx, repo, access_model.Permission{AccessMode: perm_model.AccessModeNone})
newNotifyInput(repo, pusher, webhook_module.HookEventDelete).
WithRef(refFullName.ShortName()). // FIXME: should we use a full ref name
WithPayload(&api.DeletePayload{
Ref: refFullName.ShortName(),
RefType: refFullName.RefType(),
+7 -4
View File
@@ -136,12 +136,15 @@ func notify(ctx context.Context, input *notifyInput) error {
defer gitRepo.Close()
ref := input.Ref
if input.Event == webhook_module.HookEventDelete {
// The event is deleting a reference, so it will fail to get the commit for a deleted reference.
// Set ref to empty string to fall back to the default branch.
ref = ""
if ref != input.Repo.DefaultBranch && actions_module.IsDefaultBranchWorkflow(input.Event) {
if ref != "" {
log.Warn("Event %q should only trigger workflows on the default branch, but its ref is %q. Will fall back to the default branch",
input.Event, ref)
}
ref = input.Repo.DefaultBranch
}
if ref == "" {
log.Warn("Ref of event %q is empty, will fall back to the default branch", input.Event)
ref = input.Repo.DefaultBranch
}
+5 -5
View File
@@ -38,6 +38,11 @@ func ProcReceive(ctx context.Context, repo *repo_model.Repository, gitRepo *git.
_, forcePush = opts.GitPushOptions["force-push"]
objectFormat, _ := gitRepo.GetObjectFormat()
pusher, err := user_model.GetUserByID(ctx, opts.UserID)
if err != nil {
return nil, fmt.Errorf("Failed to get user. Error: %w", err)
}
for i := range opts.OldCommitIDs {
if opts.NewCommitIDs[i] == objectFormat.EmptyObjectID().String() {
results = append(results, private.HookProcReceiveRefResult{
@@ -116,11 +121,6 @@ func ProcReceive(ctx context.Context, repo *repo_model.Repository, gitRepo *git.
description = opts.GitPushOptions["description"]
}
pusher, err := user_model.GetUserByID(ctx, opts.UserID)
if err != nil {
return nil, fmt.Errorf("Failed to get user. Error: %w", err)
}
prIssue := &issues_model.Issue{
RepoID: repo.ID,
Title: title,
+2
View File
@@ -487,6 +487,8 @@ func (g *GiteaLocalUploader) CreateComments(comments ...*base.Comment) error {
if comment.Meta["NewTitle"] != nil {
cm.NewTitle = fmt.Sprintf("%s", comment.Meta["NewTitle"])
}
case issues_model.CommentTypePRScheduledToAutoMerge, issues_model.CommentTypePRUnScheduledToAutoMerge:
cm.Content = ""
default:
}
+26 -24
View File
@@ -14,6 +14,7 @@ import (
"strings"
"time"
issues_model "code.gitea.io/gitea/models/issues"
"code.gitea.io/gitea/modules/container"
"code.gitea.io/gitea/modules/log"
base "code.gitea.io/gitea/modules/migration"
@@ -506,30 +507,8 @@ func (g *GitlabDownloader) GetComments(commentable base.Commentable) ([]*base.Co
return nil, false, fmt.Errorf("error while listing comments: %v %w", g.repoID, err)
}
for _, comment := range comments {
// Flatten comment threads
if !comment.IndividualNote {
for _, note := range comment.Notes {
allComments = append(allComments, &base.Comment{
IssueIndex: commentable.GetLocalIndex(),
Index: int64(note.ID),
PosterID: int64(note.Author.ID),
PosterName: note.Author.Username,
PosterEmail: note.Author.Email,
Content: note.Body,
Created: *note.CreatedAt,
})
}
} else {
c := comment.Notes[0]
allComments = append(allComments, &base.Comment{
IssueIndex: commentable.GetLocalIndex(),
Index: int64(c.ID),
PosterID: int64(c.Author.ID),
PosterName: c.Author.Username,
PosterEmail: c.Author.Email,
Content: c.Body,
Created: *c.CreatedAt,
})
for _, note := range comment.Notes {
allComments = append(allComments, g.convertNoteToComment(commentable.GetLocalIndex(), note))
}
}
if resp.NextPage == 0 {
@@ -540,6 +519,29 @@ func (g *GitlabDownloader) GetComments(commentable base.Commentable) ([]*base.Co
return allComments, true, nil
}
func (g *GitlabDownloader) convertNoteToComment(localIndex int64, note *gitlab.Note) *base.Comment {
comment := &base.Comment{
IssueIndex: localIndex,
Index: int64(note.ID),
PosterID: int64(note.Author.ID),
PosterName: note.Author.Username,
PosterEmail: note.Author.Email,
Content: note.Body,
Created: *note.CreatedAt,
}
// Try to find the underlying event of system notes.
if note.System {
if strings.HasPrefix(note.Body, "enabled an automatic merge") {
comment.CommentType = issues_model.CommentTypePRScheduledToAutoMerge.String()
} else if note.Body == "canceled the automatic merge" {
comment.CommentType = issues_model.CommentTypePRUnScheduledToAutoMerge.String()
}
}
return comment
}
// GetPullRequests returns pull requests according page and perPage
func (g *GitlabDownloader) GetPullRequests(page, perPage int) ([]*base.PullRequest, bool, error) {
if perPage > g.maxPerPage {
+65
View File
@@ -517,6 +517,71 @@ func TestAwardsToReactions(t *testing.T) {
}, reactions)
}
func TestNoteToComment(t *testing.T) {
downloader := &GitlabDownloader{}
now := time.Now()
makeTestNote := func(id int, body string, system bool) gitlab.Note {
return gitlab.Note{
ID: id,
Author: struct {
ID int `json:"id"`
Username string `json:"username"`
Email string `json:"email"`
Name string `json:"name"`
State string `json:"state"`
AvatarURL string `json:"avatar_url"`
WebURL string `json:"web_url"`
}{
ID: 72,
Email: "test@example.com",
Username: "test",
},
Body: body,
CreatedAt: &now,
System: system,
}
}
notes := []gitlab.Note{
makeTestNote(1, "This is a regular comment", false),
makeTestNote(2, "enabled an automatic merge for abcd1234", true),
makeTestNote(3, "canceled the automatic merge", true),
}
comments := []base.Comment{{
IssueIndex: 17,
Index: 1,
PosterID: 72,
PosterName: "test",
PosterEmail: "test@example.com",
CommentType: "",
Content: "This is a regular comment",
Created: now,
}, {
IssueIndex: 17,
Index: 2,
PosterID: 72,
PosterName: "test",
PosterEmail: "test@example.com",
CommentType: "pull_scheduled_merge",
Content: "enabled an automatic merge for abcd1234",
Created: now,
}, {
IssueIndex: 17,
Index: 3,
PosterID: 72,
PosterName: "test",
PosterEmail: "test@example.com",
CommentType: "pull_cancel_scheduled_merge",
Content: "canceled the automatic merge",
Created: now,
}}
for i, note := range notes {
actualComment := *downloader.convertNoteToComment(17, &note)
assert.EqualValues(t, actualComment, comments[i])
}
}
func TestGitlabIIDResolver(t *testing.T) {
r := gitlabIIDResolver{}
r.recordIssueIID(1)
+1 -1
View File
@@ -2,7 +2,7 @@
<div class="admin-setting-content">
{{if .NeedUpdate}}
<div class="ui negative message flash-error">
<p>{{(ctx.Locale.Tr "admin.dashboard.new_version_hint" .RemoteVersion AppVer) | Str2html}}</p>
<p>{{ctx.Locale.Tr "admin.dashboard.new_version_hint" .RemoteVersion AppVer}}</p>
</div>
{{end}}
<h4 class="ui top attached header">
+1 -1
View File
@@ -7,7 +7,7 @@
</div>
{{else if .SearchResults}}
<h3>
{{ctx.Locale.Tr "explore.code_search_results" (.Keyword|Escape) | Str2html}}
{{ctx.Locale.Tr "explore.code_search_results" (.Keyword|Escape)}}
</h3>
{{template "code/searchresults" .}}
{{else if .Keyword}}
+1 -1
View File
@@ -36,7 +36,7 @@
</div>
{{if and .PageIsExploreRepositories .OnlyShowRelevant}}
<div class="ui message explore-relevancy-note">
<span data-tooltip-content="{{ctx.Locale.Tr "explore.relevant_repositories_tooltip"}}">{{ctx.Locale.Tr "explore.relevant_repositories" ((printf "?only_show_relevant=0&sort=%s&q=%s&language=%s" $.SortType (QueryEscape $.Keyword) (QueryEscape $.Language))|Escape) | Safe}}</span>
<span data-tooltip-content="{{ctx.Locale.Tr "explore.relevant_repositories_tooltip"}}">{{ctx.Locale.Tr "explore.relevant_repositories" ((printf "?only_show_relevant=0&sort=%s&q=%s&language=%s" $.SortType (QueryEscape $.Keyword) (QueryEscape $.Language))|Escape)}}</span>
</div>
{{end}}
<div class="divider"></div>
+1 -1
View File
@@ -21,7 +21,7 @@
<a href="mailto:{{.Email}}">{{.Email}}</a>
</span>
{{end}}
<span class="flex-text-inline">{{svg "octicon-calendar"}}{{ctx.Locale.Tr "user.joined_on" (DateTime "short" .CreatedUnix) | Safe}}</span>
<span class="flex-text-inline">{{svg "octicon-calendar"}}{{ctx.Locale.Tr "user.joined_on" (DateTime "short" .CreatedUnix)}}</span>
</div>
</div>
</div>
+4 -4
View File
@@ -17,7 +17,7 @@
{{svg "octicon-flame"}} {{ctx.Locale.Tr "startpage.install"}}
</h1>
<p class="large">
{{ctx.Locale.Tr "startpage.install_desc" | Str2html}}
{{ctx.Locale.Tr "startpage.install_desc"}}
</p>
</div>
<div class="eight wide center column">
@@ -25,7 +25,7 @@
{{svg "octicon-device-desktop"}} {{ctx.Locale.Tr "startpage.platform"}}
</h1>
<p class="large">
{{ctx.Locale.Tr "startpage.platform_desc" | Str2html}}
{{ctx.Locale.Tr "startpage.platform_desc"}}
</p>
</div>
</div>
@@ -35,7 +35,7 @@
{{svg "octicon-rocket"}} {{ctx.Locale.Tr "startpage.lightweight"}}
</h1>
<p class="large">
{{ctx.Locale.Tr "startpage.lightweight_desc" | Str2html}}
{{ctx.Locale.Tr "startpage.lightweight_desc"}}
</p>
</div>
<div class="eight wide center column">
@@ -43,7 +43,7 @@
{{svg "octicon-code"}} {{ctx.Locale.Tr "startpage.license"}}
</h1>
<p class="large">
{{ctx.Locale.Tr "startpage.license_desc" | Str2html}}
{{ctx.Locale.Tr "startpage.license_desc"}}
</p>
</div>
</div>
+2 -2
View File
@@ -8,7 +8,7 @@
<div class="ui attached segment">
{{template "base/alert" .}}
<p>{{ctx.Locale.Tr "install.docker_helper" "https://docs.gitea.com/installation/install-with-docker" | Safe}}</p>
<p>{{ctx.Locale.Tr "install.docker_helper" "https://docs.gitea.com/installation/install-with-docker"}}</p>
<form class="ui form" action="{{AppSubUrl}}/" method="post">
<!-- Database Settings -->
@@ -72,7 +72,7 @@
<div class="inline required field {{if or .Err_DbPath .Err_DbSetting}}error{{end}}">
<label for="db_path">{{ctx.Locale.Tr "install.path"}}</label>
<input id="db_path" name="db_path" value="{{.db_path}}">
<span class="help">{{ctx.Locale.Tr "install.sqlite_helper" | Safe}}</span>
<span class="help">{{ctx.Locale.Tr "install.sqlite_helper"}}</span>
</div>
</div>
+2 -2
View File
@@ -8,8 +8,8 @@
{{$activate_url := printf "%suser/activate?code=%s" AppUrl (QueryEscape .Code)}}
<body>
<p>{{.locale.Tr "mail.activate_account.text_1" (.DisplayName|DotEscape) AppName | Str2html}}</p><br>
<p>{{.locale.Tr "mail.activate_account.text_2" .ActiveCodeLives | Str2html}}</p><p><a href="{{$activate_url}}">{{$activate_url}}</a></p><br>
<p>{{.locale.Tr "mail.activate_account.text_1" (.DisplayName|DotEscape) AppName}}</p><br>
<p>{{.locale.Tr "mail.activate_account.text_2" .ActiveCodeLives}}</p><p><a href="{{$activate_url}}">{{$activate_url}}</a></p><br>
<p>{{.locale.Tr "mail.link_not_working_do_paste"}}</p>
<p>© <a target="_blank" rel="noopener noreferrer" href="{{AppUrl}}">{{AppName}}</a></p>
+2 -2
View File
@@ -8,8 +8,8 @@
{{$activate_url := printf "%suser/activate_email?code=%s&email=%s" AppUrl (QueryEscape .Code) (QueryEscape .Email)}}
<body>
<p>{{.locale.Tr "mail.hi_user_x" (.DisplayName|DotEscape) | Str2html}}</p><br>
<p>{{.locale.Tr "mail.activate_email.text" .ActiveCodeLives | Str2html}}</p><p><a href="{{$activate_url}}">{{$activate_url}}</a></p><br>
<p>{{.locale.Tr "mail.hi_user_x" (.DisplayName|DotEscape)}}</p><br>
<p>{{.locale.Tr "mail.activate_email.text" .ActiveCodeLives}}</p><p><a href="{{$activate_url}}">{{$activate_url}}</a></p><br>
<p>{{.locale.Tr "mail.link_not_working_do_paste"}}</p>
<p>© <a target="_blank" rel="noopener noreferrer" href="{{AppUrl}}">{{AppName}}</a></p>
+2 -2
View File
@@ -8,10 +8,10 @@
{{$set_pwd_url := printf "%[1]suser/forgot_password" AppUrl}}
<body>
<p>{{.locale.Tr "mail.hi_user_x" (.DisplayName|DotEscape) | Str2html}}</p><br>
<p>{{.locale.Tr "mail.hi_user_x" (.DisplayName|DotEscape)}}</p><br>
<p>{{.locale.Tr "mail.register_notify.text_1" AppName}}</p><br>
<p>{{.locale.Tr "mail.register_notify.text_2" .Username}}</p><p><a href="{{AppUrl}}user/login">{{AppUrl}}user/login</a></p><br>
<p>{{.locale.Tr "mail.register_notify.text_3" ($set_pwd_url | Escape) | Str2html}}</p><br>
<p>{{.locale.Tr "mail.register_notify.text_3" ($set_pwd_url | Escape)}}</p><br>
<p>© <a target="_blank" rel="noopener noreferrer" href="{{AppUrl}}">{{AppName}}</a></p>
</body>
+2 -2
View File
@@ -8,8 +8,8 @@
{{$recover_url := printf "%suser/recover_account?code=%s" AppUrl (QueryEscape .Code)}}
<body>
<p>{{.locale.Tr "mail.hi_user_x" (.DisplayName|DotEscape) | Str2html}}</p><br>
<p>{{.locale.Tr "mail.reset_password.text" .ResetPwdCodeLives | Str2html}}</p><p><a href="{{$recover_url}}">{{$recover_url}}</a></p><br>
<p>{{.locale.Tr "mail.hi_user_x" (.DisplayName|DotEscape)}}</p><br>
<p>{{.locale.Tr "mail.reset_password.text" .ResetPwdCodeLives}}</p><p><a href="{{$recover_url}}">{{$recover_url}}</a></p><br>
<p>{{.locale.Tr "mail.link_not_working_do_paste"}}</p>
<p>© <a target="_blank" rel="noopener noreferrer" href="{{AppUrl}}">{{AppName}}</a></p>
+11 -11
View File
@@ -16,7 +16,7 @@
</head>
<body>
{{if .IsMention}}<p>{{.locale.Tr "mail.issue.x_mentioned_you" .Doer.Name | Str2html}}</p>{{end}}
{{if .IsMention}}<p>{{.locale.Tr "mail.issue.x_mentioned_you" .Doer.Name}}</p>{{end}}
{{if eq .ActionName "push"}}
<p>
{{if .Comment.IsForcePush}}
@@ -30,32 +30,32 @@
{{.locale.Tr "mail.issue.action.force_push" .Doer.Name .Comment.Issue.PullRequest.HeadBranch ($oldCommitLink|Safe) ($newCommitLink|Safe)}}
{{else}}
{{.locale.TrN (len .Comment.Commits) "mail.issue.action.push_1" "mail.issue.action.push_n" .Doer.Name .Comment.Issue.PullRequest.HeadBranch (len .Comment.Commits) | Str2html}}
{{.locale.TrN (len .Comment.Commits) "mail.issue.action.push_1" "mail.issue.action.push_n" .Doer.Name .Comment.Issue.PullRequest.HeadBranch (len .Comment.Commits)}}
{{end}}
</p>
{{end}}
<p>
{{if eq .ActionName "close"}}
{{.locale.Tr "mail.issue.action.close" (Escape .Doer.Name) .Issue.Index | Str2html}}
{{.locale.Tr "mail.issue.action.close" (Escape .Doer.Name) .Issue.Index}}
{{else if eq .ActionName "reopen"}}
{{.locale.Tr "mail.issue.action.reopen" (Escape .Doer.Name) .Issue.Index | Str2html}}
{{.locale.Tr "mail.issue.action.reopen" (Escape .Doer.Name) .Issue.Index}}
{{else if eq .ActionName "merge"}}
{{.locale.Tr "mail.issue.action.merge" (Escape .Doer.Name) .Issue.Index (Escape .Issue.PullRequest.BaseBranch) | Str2html}}
{{.locale.Tr "mail.issue.action.merge" (Escape .Doer.Name) .Issue.Index (Escape .Issue.PullRequest.BaseBranch)}}
{{else if eq .ActionName "approve"}}
{{.locale.Tr "mail.issue.action.approve" (Escape .Doer.Name) | Str2html}}
{{.locale.Tr "mail.issue.action.approve" (Escape .Doer.Name)}}
{{else if eq .ActionName "reject"}}
{{.locale.Tr "mail.issue.action.reject" (Escape .Doer.Name) | Str2html}}
{{.locale.Tr "mail.issue.action.reject" (Escape .Doer.Name)}}
{{else if eq .ActionName "review"}}
{{.locale.Tr "mail.issue.action.review" (Escape .Doer.Name) | Str2html}}
{{.locale.Tr "mail.issue.action.review" (Escape .Doer.Name)}}
{{else if eq .ActionName "review_dismissed"}}
{{.locale.Tr "mail.issue.action.review_dismissed" (Escape .Doer.Name) (Escape .Comment.Review.Reviewer.Name) | Str2html}}
{{.locale.Tr "mail.issue.action.review_dismissed" (Escape .Doer.Name) (Escape .Comment.Review.Reviewer.Name)}}
{{else if eq .ActionName "ready_for_review"}}
{{.locale.Tr "mail.issue.action.ready_for_review" (Escape .Doer.Name) | Str2html}}
{{.locale.Tr "mail.issue.action.ready_for_review" (Escape .Doer.Name)}}
{{end}}
{{- if eq .Body ""}}
{{if eq .ActionName "new"}}
{{.locale.Tr "mail.issue.action.new" (Escape .Doer.Name) .Issue.Index | Str2html}}
{{.locale.Tr "mail.issue.action.new" (Escape .Doer.Name) .Issue.Index}}
{{end}}
{{else}}
{{.Body | Str2html}}
+1 -1
View File
@@ -5,7 +5,7 @@
<meta name="format-detection" content="telephone=no,date=no,address=no,email=no,url=no">
</head>
<body>
<p>{{.locale.Tr "mail.team_invite.text_1" (DotEscape .Inviter.DisplayName) (DotEscape .Team.Name) (DotEscape .Organization.DisplayName) | Str2html}}</p>
<p>{{.locale.Tr "mail.team_invite.text_1" (DotEscape .Inviter.DisplayName) (DotEscape .Team.Name) (DotEscape .Organization.DisplayName)}}</p>
<p>{{.locale.Tr "mail.team_invite.text_2"}}</p><p><a href="{{.InviteURL}}">{{.InviteURL}}</a></p>
<p>{{.locale.Tr "mail.link_not_working_do_paste"}}</p>
<p>{{.locale.Tr "mail.team_invite.text_3" .Invite.Email}}</p>
+1 -1
View File
@@ -6,7 +6,7 @@
</h4>
<div class="ui attached error segment">
<div class="ui red message">
<p class="text left">{{svg "octicon-alert"}} {{ctx.Locale.Tr "org.settings.delete_prompt" | Str2html}}</p>
<p class="text left">{{svg "octicon-alert"}} {{ctx.Locale.Tr "org.settings.delete_prompt"}}</p>
</div>
<form class="ui form ignore-dirty" id="delete-form" action="{{.Link}}" method="post">
{{.CsrfTokenHtml}}
+1 -1
View File
@@ -2,7 +2,7 @@
<div class="org-setting-content">
<div class="gt-df gt-ac">
<div class="gt-f1">
{{ctx.Locale.Tr "org.settings.labels_desc" | Str2html}}
{{ctx.Locale.Tr "org.settings.labels_desc"}}
</div>
<button class="ui small primary new-label button">{{ctx.Locale.Tr "repo.issues.new_label"}}</button>
</div>
+1 -1
View File
@@ -7,7 +7,7 @@
{{ctx.AvatarUtils.Avatar .Organization 140}}
</div>
<div class="content">
<div class="header">{{ctx.Locale.Tr "org.teams.invite.title" .Team.Name .Organization.Name | Str2html}}</div>
<div class="header">{{ctx.Locale.Tr "org.teams.invite.title" .Team.Name .Organization.Name}}</div>
<div class="meta">{{ctx.Locale.Tr "org.teams.invite.by" .Inviter.Name}}</div>
<div class="description">{{ctx.Locale.Tr "org.teams.invite.description"}}</div>
</div>
+2 -2
View File
@@ -32,14 +32,14 @@
<div class="ui radio checkbox">
<input type="radio" name="repo_access" value="specific" {{if not .Team.IncludesAllRepositories}}checked{{end}}>
<label>{{ctx.Locale.Tr "org.teams.specific_repositories"}}</label>
<span class="help">{{ctx.Locale.Tr "org.teams.specific_repositories_helper" | Str2html}}</span>
<span class="help">{{ctx.Locale.Tr "org.teams.specific_repositories_helper"}}</span>
</div>
</div>
<div class="field">
<div class="ui radio checkbox">
<input type="radio" name="repo_access" value="all" {{if .Team.IncludesAllRepositories}}checked{{end}}>
<label>{{ctx.Locale.Tr "org.teams.all_repositories"}}</label>
<span class="help">{{ctx.Locale.Tr "org.teams.all_repositories_helper" | Str2html}}</span>
<span class="help">{{ctx.Locale.Tr "org.teams.all_repositories_helper"}}</span>
</div>
</div>
+5 -5
View File
@@ -27,16 +27,16 @@
</div>
{{if eq .Team.LowerName "owners"}}
<div class="item">
{{ctx.Locale.Tr "org.teams.owners_permission_desc" | Str2html}}
{{ctx.Locale.Tr "org.teams.owners_permission_desc"}}
</div>
{{else}}
<div class="item">
<h3>{{ctx.Locale.Tr "org.team_access_desc"}}</h3>
<ul>
{{if .Team.IncludesAllRepositories}}
<li>{{ctx.Locale.Tr "org.teams.all_repositories" | Str2html}}</li>
<li>{{ctx.Locale.Tr "org.teams.all_repositories"}}</li>
{{else}}
<li>{{ctx.Locale.Tr "org.teams.specific_repositories" | Str2html}}</li>
<li>{{ctx.Locale.Tr "org.teams.specific_repositories"}}</li>
{{end}}
{{if .Team.CanCreateOrgRepo}}
<li>{{ctx.Locale.Tr "org.teams.can_create_org_repo"}}</li>
@@ -44,10 +44,10 @@
</ul>
{{if (eq .Team.AccessMode 2)}}
<h3>{{ctx.Locale.Tr "org.settings.permission"}}</h3>
{{ctx.Locale.Tr "org.teams.write_permission_desc" | Str2html}}
{{ctx.Locale.Tr "org.teams.write_permission_desc"}}
{{else if (eq .Team.AccessMode 3)}}
<h3>{{ctx.Locale.Tr "org.settings.permission"}}</h3>
{{ctx.Locale.Tr "org.teams.admin_permission_desc" | Str2html}}
{{ctx.Locale.Tr "org.teams.admin_permission_desc"}}
{{else}}
<table class="ui table">
<thead>
+4 -4
View File
@@ -3,12 +3,12 @@
<div class="ui attached segment">
<div class="ui form">
<div class="field">
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.alpine.registry" | Safe}}</label>
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.alpine.registry"}}</label>
<div class="markup"><pre class="code-block"><code><gitea-origin-url data-url="{{AppSubUrl}}/api/packages/{{$.PackageDescriptor.Owner.Name}}/alpine"></gitea-origin-url>/$branch/$repository</code></pre></div>
<p>{{ctx.Locale.Tr "packages.alpine.registry.info" | Safe}}</p>
<p>{{ctx.Locale.Tr "packages.alpine.registry.info"}}</p>
</div>
<div class="field">
<label>{{svg "octicon-terminal"}} {{ctx.Locale.Tr "packages.alpine.registry.key" | Safe}}</label>
<label>{{svg "octicon-terminal"}} {{ctx.Locale.Tr "packages.alpine.registry.key"}}</label>
<div class="markup"><pre class="code-block"><code>curl -JO <gitea-origin-url data-url="{{AppSubUrl}}/api/packages/{{$.PackageDescriptor.Owner.Name}}/alpine/key"></gitea-origin-url></code></pre></div>
</div>
<div class="field">
@@ -18,7 +18,7 @@
</div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Alpine" "https://docs.gitea.com/usage/packages/alpine/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Alpine" "https://docs.gitea.com/usage/packages/alpine/"}}</label>
</div>
</div>
</div>
+2 -2
View File
@@ -3,7 +3,7 @@
<div class="ui attached segment">
<div class="ui form">
<div class="field">
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.cargo.registry" | Safe}}</label>
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.cargo.registry"}}</label>
<div class="markup"><pre class="code-block"><code>[registry]
default = "gitea"
@@ -19,7 +19,7 @@ git-fetch-with-cli = true</code></pre></div>
<div class="markup"><pre class="code-block"><code>cargo add {{.PackageDescriptor.Package.Name}}@{{.PackageDescriptor.Version.Version}}</code></pre></div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Cargo" "https://docs.gitea.com/usage/packages/cargo/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Cargo" "https://docs.gitea.com/usage/packages/cargo/"}}</label>
</div>
</div>
</div>
+2 -2
View File
@@ -3,7 +3,7 @@
<div class="ui attached segment">
<div class="ui form">
<div class="field">
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.chef.registry" | Safe}}</label>
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.chef.registry"}}</label>
<div class="markup"><pre class="code-block"><code>knife[:supermarket_site] = '<gitea-origin-url data-url="{{AppSubUrl}}/api/packages/{{.PackageDescriptor.Owner.Name}}/chef"></gitea-origin-url>'</code></pre></div>
</div>
<div class="field">
@@ -11,7 +11,7 @@
<div class="markup"><pre class="code-block"><code>knife supermarket install {{.PackageDescriptor.Package.Name}} {{.PackageDescriptor.Version.Version}}</code></pre></div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Chef" "https://docs.gitea.com/usage/packages/chef/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Chef" "https://docs.gitea.com/usage/packages/chef/"}}</label>
</div>
</div>
</div>
+2 -2
View File
@@ -3,7 +3,7 @@
<div class="ui attached segment">
<div class="ui form">
<div class="field">
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.composer.registry" | Safe}}</label>
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.composer.registry"}}</label>
<div class="markup"><pre class="code-block"><code>{
"repositories": [{
"type": "composer",
@@ -17,7 +17,7 @@
<div class="markup"><pre class="code-block"><code>composer require {{.PackageDescriptor.Package.Name}}:{{.PackageDescriptor.Version.Version}}</code></pre></div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Composer" "https://docs.gitea.com/usage/packages/composer/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Composer" "https://docs.gitea.com/usage/packages/composer/"}}</label>
</div>
</div>
</div>
+1 -1
View File
@@ -11,7 +11,7 @@
<div class="markup"><pre class="code-block"><code>conan install --remote=gitea {{.PackageDescriptor.Package.Name}}/{{.PackageDescriptor.Version.Version}}</code></pre></div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Conan" "https://docs.gitea.com/usage/packages/conan/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Conan" "https://docs.gitea.com/usage/packages/conan/"}}</label>
</div>
</div>
</div>
+2 -2
View File
@@ -3,7 +3,7 @@
<div class="ui attached segment">
<div class="ui form">
<div class="field">
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.conda.registry" | Safe}}</label>
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.conda.registry"}}</label>
<div class="markup"><pre class="code-block"><code>channel_alias: <gitea-origin-url data-url="{{AppSubUrl}}/api/packages/{{.PackageDescriptor.Owner.Name}}/conda"></gitea-origin-url>
channels:
&#32;&#32;- <gitea-origin-url data-url="{{AppSubUrl}}/api/packages/{{.PackageDescriptor.Owner.Name}}/conda"></gitea-origin-url>
@@ -16,7 +16,7 @@ default_channels:
<div class="markup"><pre class="code-block"><code>conda install{{if $channel}} -c {{$channel}}{{end}} {{.PackageDescriptor.PackageProperties.GetByName "conda.name"}}={{.PackageDescriptor.Version.Version}}</code></pre></div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Conda" "https://docs.gitea.com/usage/packages/conda/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Conda" "https://docs.gitea.com/usage/packages/conda/"}}</label>
</div>
</div>
</div>
+1 -1
View File
@@ -19,7 +19,7 @@
<div class="markup"><pre class="code-block"><code>{{range .PackageDescriptor.Files}}{{if eq .File.LowerName "manifest.json"}}{{.Properties.GetByName "container.digest"}}{{end}}{{end}}</code></pre></div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Container" "https://docs.gitea.com/usage/packages/container/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Container" "https://docs.gitea.com/usage/packages/container/"}}</label>
</div>
</div>
</div>
+2 -2
View File
@@ -3,7 +3,7 @@
<div class="ui attached segment">
<div class="ui form">
<div class="field">
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.cran.registry" | Safe}}</label>
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.cran.registry"}}</label>
<div class="markup"><pre class="code-block"><code>options("repos" = c(getOption("repos"), c(gitea="<gitea-origin-url data-url="{{AppSubUrl}}/api/packages/{{.PackageDescriptor.Owner.Name}}/cran"></gitea-origin-url>")))</code></pre></div>
</div>
<div class="field">
@@ -11,7 +11,7 @@
<div class="markup"><pre class="code-block"><code>install.packages("{{.PackageDescriptor.Package.Name}}")</code></pre></div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "CRAN" "https://docs.gitea.com/usage/packages/cran/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "CRAN" "https://docs.gitea.com/usage/packages/cran/"}}</label>
</div>
</div>
</div>
+2 -2
View File
@@ -7,7 +7,7 @@
<div class="markup"><pre class="code-block"><code>sudo curl <gitea-origin-url data-url="{{AppSubUrl}}/api/packages/{{$.PackageDescriptor.Owner.Name}}/debian/repository.key"></gitea-origin-url> -o /etc/apt/keyrings/gitea-{{$.PackageDescriptor.Owner.Name}}.asc
echo "deb [signed-by=/etc/apt/keyrings/gitea-{{$.PackageDescriptor.Owner.Name}}.asc] <gitea-origin-url data-url="{{AppSubUrl}}/api/packages/{{$.PackageDescriptor.Owner.Name}}/debian"></gitea-origin-url> $distribution $component" | sudo tee -a /etc/apt/sources.list.d/gitea.list
sudo apt update</code></pre></div>
<p>{{ctx.Locale.Tr "packages.debian.registry.info" | Safe}}</p>
<p>{{ctx.Locale.Tr "packages.debian.registry.info"}}</p>
</div>
<div class="field">
<label>{{svg "octicon-terminal"}} {{ctx.Locale.Tr "packages.debian.install"}}</label>
@@ -16,7 +16,7 @@ sudo apt update</code></pre></div>
</div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Debian" "https://docs.gitea.com/usage/packages/debian/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Debian" "https://docs.gitea.com/usage/packages/debian/"}}</label>
</div>
</div>
</div>
+1 -1
View File
@@ -11,7 +11,7 @@ curl -OJ <gitea-origin-url data-url="{{AppSubUrl}}/api/packages/{{$.PackageDescr
</code></pre></div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Generic" "https://docs.gitea.com/usage/packages/generic" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Generic" "https://docs.gitea.com/usage/packages/generic"}}</label>
</div>
</div>
</div>
+1 -1
View File
@@ -7,7 +7,7 @@
<div class="markup"><pre class="code-block"><code>GOPROXY=<gitea-origin-url data-url="{{AppSubUrl}}/api/packages/{{$.PackageDescriptor.Owner.Name}}/go"></gitea-origin-url> go install {{$.PackageDescriptor.Package.Name}}@{{$.PackageDescriptor.Version.Version}}</code></pre></div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Go" "https://docs.gitea.com/usage/packages/go" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Go" "https://docs.gitea.com/usage/packages/go"}}</label>
</div>
</div>
</div>
+1 -1
View File
@@ -12,7 +12,7 @@ helm repo update</code></pre></div>
<div class="markup"><pre class="code-block"><code>helm install {{.PackageDescriptor.Package.Name}} {{AppDomain}}/{{.PackageDescriptor.Package.Name}}</code></pre></div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Helm" "https://docs.gitea.com/usage/packages/helm/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Helm" "https://docs.gitea.com/usage/packages/helm/"}}</label>
</div>
</div>
</div>
+3 -3
View File
@@ -3,7 +3,7 @@
<div class="ui attached segment">
<div class="ui form">
<div class="field">
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.maven.registry" | Safe}}</label>
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.maven.registry"}}</label>
<div class="markup"><pre class="code-block"><code>&lt;repositories&gt;
&lt;repository&gt;
&lt;id&gt;gitea&lt;/id&gt;
@@ -24,7 +24,7 @@
&lt;/distributionManagement&gt;</code></pre></div>
</div>
<div class="field">
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.maven.install" | Safe}}</label>
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.maven.install"}}</label>
<div class="markup"><pre class="code-block"><code>&lt;dependency&gt;
&lt;groupId&gt;{{.PackageDescriptor.Metadata.GroupID}}&lt;/groupId&gt;
&lt;artifactId&gt;{{.PackageDescriptor.Metadata.ArtifactID}}&lt;/artifactId&gt;
@@ -40,7 +40,7 @@
<div class="markup"><pre class="code-block"><code>mvn dependency:get -DremoteRepositories=<gitea-origin-url data-url="{{AppSubUrl}}/api/packages/{{.PackageDescriptor.Owner.Name}}/maven"></gitea-origin-url> -Dartifact={{.PackageDescriptor.Metadata.GroupID}}:{{.PackageDescriptor.Metadata.ArtifactID}}:{{.PackageDescriptor.Version.Version}}</code></pre></div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Maven" "https://docs.gitea.com/usage/packages/maven/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Maven" "https://docs.gitea.com/usage/packages/maven/"}}</label>
</div>
</div>
</div>
+2 -2
View File
@@ -3,7 +3,7 @@
<div class="ui attached segment">
<div class="ui form">
<div class="field">
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.npm.registry" | Safe}}</label>
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.npm.registry"}}</label>
<div class="markup"><pre class="code-block"><code>{{if .PackageDescriptor.Metadata.Scope}}{{.PackageDescriptor.Metadata.Scope}}:{{end}}registry=<gitea-origin-url data-url="{{AppSubUrl}}/api/packages/{{.PackageDescriptor.Owner.Name}}/npm/"></gitea-origin-url></code></pre></div>
</div>
<div class="field">
@@ -15,7 +15,7 @@
<div class="markup"><pre class="code-block"><code>&quot;{{.PackageDescriptor.Package.Name}}&quot;: &quot;{{.PackageDescriptor.Version.Version}}&quot;</code></pre></div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "npm" "https://docs.gitea.com/usage/packages/npm/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "npm" "https://docs.gitea.com/usage/packages/npm/"}}</label>
</div>
</div>
</div>
+1 -1
View File
@@ -11,7 +11,7 @@
<div class="markup"><pre class="code-block"><code>dotnet add package --source {{.PackageDescriptor.Owner.Name}} --version {{.PackageDescriptor.Version.Version}} {{.PackageDescriptor.Package.Name}}</code></pre></div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "NuGet" "https://docs.gitea.com/usage/packages/nuget/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "NuGet" "https://docs.gitea.com/usage/packages/nuget/"}}</label>
</div>
</div>
</div>
+1 -1
View File
@@ -7,7 +7,7 @@
<div class="markup"><pre class="code-block"><code>dart pub add {{.PackageDescriptor.Package.Name}}:{{.PackageDescriptor.Version.Version}} --hosted-url=<gitea-origin-url data-url="{{AppSubUrl}}/api/packages/{{.PackageDescriptor.Owner.Name}}/pub/"></gitea-origin-url></code></pre></div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Pub" "https://docs.gitea.com/usage/packages/pub/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Pub" "https://docs.gitea.com/usage/packages/pub/"}}</label>
</div>
</div>
</div>
+1 -1
View File
@@ -7,7 +7,7 @@
<div class="markup"><pre class="code-block"><code>pip install --index-url <gitea-origin-url data-url="{{AppSubUrl}}/api/packages/{{.PackageDescriptor.Owner.Name}}/pypi/simple/"></gitea-origin-url> {{.PackageDescriptor.Package.Name}}</code></pre></div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "PyPI" "https://docs.gitea.com/usage/packages/pypi/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "PyPI" "https://docs.gitea.com/usage/packages/pypi/"}}</label>
</div>
</div>
</div>
+1 -1
View File
@@ -31,7 +31,7 @@ zypper install {{$.PackageDescriptor.Package.Name}}</code></pre>
</div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "RPM" "https://docs.gitea.com/usage/packages/rpm/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "RPM" "https://docs.gitea.com/usage/packages/rpm/"}}</label>
</div>
</div>
</div>
+2 -2
View File
@@ -3,7 +3,7 @@
<div class="ui attached segment">
<div class="ui form">
<div class="field">
<label>{{svg "octicon-terminal"}} {{ctx.Locale.Tr "packages.rubygems.install" | Safe}}:</label>
<label>{{svg "octicon-terminal"}} {{ctx.Locale.Tr "packages.rubygems.install"}}:</label>
<div class="markup"><pre class="code-block"><code>gem install {{.PackageDescriptor.Package.Name}} --version &quot;{{.PackageDescriptor.Version.Version}}&quot; --source &quot;<gitea-origin-url data-url="{{AppSubUrl}}/api/packages/{{.PackageDescriptor.Owner.Name}}/rubygems"></gitea-origin-url>&quot;</code></pre></div>
</div>
<div class="field">
@@ -13,7 +13,7 @@
end</code></pre></div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "RubyGems" "https://docs.gitea.com/usage/packages/rubygems/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "RubyGems" "https://docs.gitea.com/usage/packages/rubygems/"}}</label>
</div>
</div>
</div>
+2 -2
View File
@@ -7,7 +7,7 @@
<div class="markup"><pre class="code-block"><code>swift package-registry set <gitea-origin-url data-url="{{AppSubUrl}}/api/packages/{{.PackageDescriptor.Owner.Name}}/swift"></gitea-origin-url></code></pre></div>
</div>
<div class="field">
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.swift.install" | Safe}}</label>
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.swift.install"}}</label>
<div class="markup"><pre class="code-block"><code>dependencies: [
.package(id: "{{.PackageDescriptor.Package.Name}}", from:"{{.PackageDescriptor.Version.Version}}")
]</code></pre></div>
@@ -17,7 +17,7 @@
<div class="markup"><pre class="code-block"><code>swift package resolve</code></pre></div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Swift" "https://docs.gitea.com/usage/packages/swift/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Swift" "https://docs.gitea.com/usage/packages/swift/"}}</label>
</div>
</div>
</div>
+1 -1
View File
@@ -7,7 +7,7 @@
<div class="markup"><pre class="code-block"><code>vagrant box add --box-version {{.PackageDescriptor.Version.Version}} "<gitea-origin-url data-url="{{AppSubUrl}}/api/packages/{{.PackageDescriptor.Owner.Name}}/vagrant/{{.PackageDescriptor.Package.Name}}"></gitea-origin-url>"</code></pre></div>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Vagrant" "https://docs.gitea.com/usage/packages/vagrant/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Vagrant" "https://docs.gitea.com/usage/packages/vagrant/"}}</label>
</div>
</div>
</div>
+1 -1
View File
@@ -18,7 +18,7 @@
<button class="ui primary button">{{ctx.Locale.Tr "packages.owner.settings.cargo.rebuild"}}</button>
</form>
<div class="field">
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Cargo" "https://docs.gitea.com/usage/packages/cargo/" | Safe}}</label>
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Cargo" "https://docs.gitea.com/usage/packages/cargo/"}}</label>
</div>
</div>
</div>

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