Compare commits
1 commit
forgejo
...
renovate/e
Author | SHA1 | Date | |
---|---|---|---|
c295b1a5bc |
|
@ -24,6 +24,3 @@ exclude_dir = [
|
||||||
]
|
]
|
||||||
exclude_regex = ["_test.go$", "_gen.go$"]
|
exclude_regex = ["_test.go$", "_gen.go$"]
|
||||||
stop_on_error = true
|
stop_on_error = true
|
||||||
|
|
||||||
[log]
|
|
||||||
main_only = true
|
|
||||||
|
|
|
@ -87,6 +87,7 @@ code.gitea.io/gitea/models/repo
|
||||||
releaseSorter.Swap
|
releaseSorter.Swap
|
||||||
SortReleases
|
SortReleases
|
||||||
FindReposMapByIDs
|
FindReposMapByIDs
|
||||||
|
SearchOrderBy.String
|
||||||
IsErrTopicNotExist
|
IsErrTopicNotExist
|
||||||
ErrTopicNotExist.Error
|
ErrTopicNotExist.Error
|
||||||
ErrTopicNotExist.Unwrap
|
ErrTopicNotExist.Unwrap
|
||||||
|
@ -210,6 +211,7 @@ code.gitea.io/gitea/modules/json
|
||||||
StdJSON.Indent
|
StdJSON.Indent
|
||||||
|
|
||||||
code.gitea.io/gitea/modules/markup
|
code.gitea.io/gitea/modules/markup
|
||||||
|
IsSameDomain
|
||||||
GetRendererByType
|
GetRendererByType
|
||||||
RenderString
|
RenderString
|
||||||
IsMarkupFile
|
IsMarkupFile
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
"ghcr.io/devcontainers/features/node:1": {
|
"ghcr.io/devcontainers/features/node:1": {
|
||||||
"version": "20"
|
"version": "20"
|
||||||
},
|
},
|
||||||
"ghcr.io/devcontainers/features/git-lfs:1.2.1": {},
|
"ghcr.io/devcontainers/features/git-lfs:1.2.0": {},
|
||||||
"ghcr.io/devcontainers-contrib/features/poetry:2": {},
|
"ghcr.io/devcontainers-contrib/features/poetry:2": {},
|
||||||
"ghcr.io/devcontainers/features/python:1": {
|
"ghcr.io/devcontainers/features/python:1": {
|
||||||
"version": "3.12"
|
"version": "3.12"
|
||||||
|
|
|
@ -22,7 +22,7 @@ jobs:
|
||||||
|
|
||||||
runs-on: docker
|
runs-on: docker
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/visualon/renovate:37.414.1
|
image: ghcr.io/visualon/renovate:37.409.1
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Load renovate repo cache
|
- name: Load renovate repo cache
|
||||||
|
|
|
@ -36,7 +36,7 @@ jobs:
|
||||||
- run: make deps-frontend
|
- run: make deps-frontend
|
||||||
- run: make lint-frontend
|
- run: make lint-frontend
|
||||||
- run: make checks-frontend
|
- run: make checks-frontend
|
||||||
- run: make test-frontend-coverage
|
- run: make test-frontend
|
||||||
- run: make frontend
|
- run: make frontend
|
||||||
test-unit:
|
test-unit:
|
||||||
if: ${{ !startsWith(vars.ROLE, 'forgejo-') }}
|
if: ${{ !startsWith(vars.ROLE, 'forgejo-') }}
|
||||||
|
@ -57,6 +57,8 @@ jobs:
|
||||||
MINIO_DOMAIN: minio
|
MINIO_DOMAIN: minio
|
||||||
MINIO_ROOT_USER: 123456
|
MINIO_ROOT_USER: 123456
|
||||||
MINIO_ROOT_PASSWORD: 12345678
|
MINIO_ROOT_PASSWORD: 12345678
|
||||||
|
redis:
|
||||||
|
image: redis:7.2
|
||||||
steps:
|
steps:
|
||||||
- uses: https://code.forgejo.org/actions/checkout@v3
|
- uses: https://code.forgejo.org/actions/checkout@v3
|
||||||
- uses: https://code.forgejo.org/actions/setup-go@v4
|
- uses: https://code.forgejo.org/actions/setup-go@v4
|
||||||
|
@ -86,59 +88,8 @@ jobs:
|
||||||
env:
|
env:
|
||||||
RACE_ENABLED: 'true'
|
RACE_ENABLED: 'true'
|
||||||
TAGS: bindata
|
TAGS: bindata
|
||||||
|
TEST_REDIS_SERVER: redis:6379
|
||||||
TEST_ELASTICSEARCH_URL: http://elasticsearch:9200
|
TEST_ELASTICSEARCH_URL: http://elasticsearch:9200
|
||||||
test-remote-cacher:
|
|
||||||
if: ${{ !startsWith(vars.ROLE, 'forgejo-') }}
|
|
||||||
runs-on: docker
|
|
||||||
needs: [backend-checks, frontend-checks]
|
|
||||||
container:
|
|
||||||
image: 'docker.io/node:20-bookworm'
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
cacher:
|
|
||||||
# redis
|
|
||||||
- image: redis:7.2
|
|
||||||
port: 6379
|
|
||||||
# redict
|
|
||||||
- image: registry.redict.io/redict:7.3.0-scratch
|
|
||||||
port: 6379
|
|
||||||
# garnet
|
|
||||||
- image: ghcr.io/microsoft/garnet-alpine:1.0.14
|
|
||||||
port: 6379
|
|
||||||
services:
|
|
||||||
cacher:
|
|
||||||
image: ${{ matrix.cacher.image }}
|
|
||||||
options: ${{ matrix.cacher.options }}
|
|
||||||
steps:
|
|
||||||
- uses: https://code.forgejo.org/actions/checkout@v3
|
|
||||||
- uses: https://code.forgejo.org/actions/setup-go@v4
|
|
||||||
with:
|
|
||||||
go-version: "1.22"
|
|
||||||
- run: |
|
|
||||||
git config --add safe.directory '*'
|
|
||||||
adduser --quiet --comment forgejo --disabled-password forgejo
|
|
||||||
chown -R forgejo:forgejo .
|
|
||||||
- name: install git >= 2.42
|
|
||||||
run: |
|
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
|
||||||
echo deb http://deb.debian.org/debian/ testing main > /etc/apt/sources.list.d/testing.list
|
|
||||||
apt-get update -qq
|
|
||||||
apt-get -q install -qq -y git
|
|
||||||
rm /etc/apt/sources.list.d/testing.list
|
|
||||||
apt-get update -qq
|
|
||||||
- run: |
|
|
||||||
su forgejo -c 'make deps-backend'
|
|
||||||
- run: |
|
|
||||||
su forgejo -c 'make backend'
|
|
||||||
env:
|
|
||||||
TAGS: bindata
|
|
||||||
- run: |
|
|
||||||
su forgejo -c 'make test-remote-cacher test-check'
|
|
||||||
timeout-minutes: 50
|
|
||||||
env:
|
|
||||||
RACE_ENABLED: 'true'
|
|
||||||
TAGS: bindata
|
|
||||||
TEST_REDIS_SERVER: cacher:${{ matrix.cacher.port }}
|
|
||||||
test-mysql:
|
test-mysql:
|
||||||
if: ${{ !startsWith(vars.ROLE, 'forgejo-') }}
|
if: ${{ !startsWith(vars.ROLE, 'forgejo-') }}
|
||||||
runs-on: docker
|
runs-on: docker
|
||||||
|
|
|
@ -22,7 +22,6 @@ linters:
|
||||||
- typecheck
|
- typecheck
|
||||||
- unconvert
|
- unconvert
|
||||||
- unused
|
- unused
|
||||||
- unparam
|
|
||||||
- wastedassign
|
- wastedassign
|
||||||
|
|
||||||
run:
|
run:
|
||||||
|
|
|
@ -3,11 +3,11 @@ FROM --platform=$BUILDPLATFORM docker.io/tonistiigi/xx AS xx
|
||||||
FROM --platform=$BUILDPLATFORM code.forgejo.org/oci/golang:1.22-alpine3.20 as build-env
|
FROM --platform=$BUILDPLATFORM code.forgejo.org/oci/golang:1.22-alpine3.20 as build-env
|
||||||
|
|
||||||
ARG GOPROXY
|
ARG GOPROXY
|
||||||
ENV GOPROXY=${GOPROXY:-direct}
|
ENV GOPROXY ${GOPROXY:-direct}
|
||||||
|
|
||||||
ARG RELEASE_VERSION
|
ARG RELEASE_VERSION
|
||||||
ARG TAGS="sqlite sqlite_unlock_notify"
|
ARG TAGS="sqlite sqlite_unlock_notify"
|
||||||
ENV TAGS="bindata timetzdata $TAGS"
|
ENV TAGS "bindata timetzdata $TAGS"
|
||||||
ARG CGO_EXTRA_CFLAGS
|
ARG CGO_EXTRA_CFLAGS
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -92,8 +92,8 @@ RUN addgroup \
|
||||||
git && \
|
git && \
|
||||||
echo "git:*" | chpasswd -e
|
echo "git:*" | chpasswd -e
|
||||||
|
|
||||||
ENV USER=git
|
ENV USER git
|
||||||
ENV GITEA_CUSTOM=/data/gitea
|
ENV GITEA_CUSTOM /data/gitea
|
||||||
|
|
||||||
VOLUME ["/data"]
|
VOLUME ["/data"]
|
||||||
|
|
||||||
|
|
|
@ -3,11 +3,11 @@ FROM --platform=$BUILDPLATFORM docker.io/tonistiigi/xx AS xx
|
||||||
FROM --platform=$BUILDPLATFORM code.forgejo.org/oci/golang:1.22-alpine3.20 as build-env
|
FROM --platform=$BUILDPLATFORM code.forgejo.org/oci/golang:1.22-alpine3.20 as build-env
|
||||||
|
|
||||||
ARG GOPROXY
|
ARG GOPROXY
|
||||||
ENV GOPROXY=${GOPROXY:-direct}
|
ENV GOPROXY ${GOPROXY:-direct}
|
||||||
|
|
||||||
ARG RELEASE_VERSION
|
ARG RELEASE_VERSION
|
||||||
ARG TAGS="sqlite sqlite_unlock_notify"
|
ARG TAGS="sqlite sqlite_unlock_notify"
|
||||||
ENV TAGS="bindata timetzdata $TAGS"
|
ENV TAGS "bindata timetzdata $TAGS"
|
||||||
ARG CGO_EXTRA_CFLAGS
|
ARG CGO_EXTRA_CFLAGS
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -95,17 +95,17 @@ COPY --from=build-env /go/src/code.gitea.io/gitea/contrib/autocompletion/bash_au
|
||||||
|
|
||||||
#git:git
|
#git:git
|
||||||
USER 1000:1000
|
USER 1000:1000
|
||||||
ENV GITEA_WORK_DIR=/var/lib/gitea
|
ENV GITEA_WORK_DIR /var/lib/gitea
|
||||||
ENV GITEA_CUSTOM=/var/lib/gitea/custom
|
ENV GITEA_CUSTOM /var/lib/gitea/custom
|
||||||
ENV GITEA_TEMP=/tmp/gitea
|
ENV GITEA_TEMP /tmp/gitea
|
||||||
ENV TMPDIR=/tmp/gitea
|
ENV TMPDIR /tmp/gitea
|
||||||
|
|
||||||
# Legacy config file for backwards compatibility
|
# Legacy config file for backwards compatibility
|
||||||
# TODO: remove on next major version release
|
# TODO: remove on next major version release
|
||||||
ENV GITEA_APP_INI_LEGACY=/etc/gitea/app.ini
|
ENV GITEA_APP_INI_LEGACY /etc/gitea/app.ini
|
||||||
|
|
||||||
ENV GITEA_APP_INI=${GITEA_CUSTOM}/conf/app.ini
|
ENV GITEA_APP_INI ${GITEA_CUSTOM}/conf/app.ini
|
||||||
ENV HOME="/var/lib/gitea/git"
|
ENV HOME "/var/lib/gitea/git"
|
||||||
VOLUME ["/var/lib/gitea", "/etc/gitea"]
|
VOLUME ["/var/lib/gitea", "/etc/gitea"]
|
||||||
WORKDIR /var/lib/gitea
|
WORKDIR /var/lib/gitea
|
||||||
|
|
||||||
|
|
23
Makefile
23
Makefile
|
@ -39,7 +39,6 @@ GOVULNCHECK_PACKAGE ?= golang.org/x/vuln/cmd/govulncheck@v1 # renovate: datasour
|
||||||
DEADCODE_PACKAGE ?= golang.org/x/tools/cmd/deadcode@v0.22.0 # renovate: datasource=go
|
DEADCODE_PACKAGE ?= golang.org/x/tools/cmd/deadcode@v0.22.0 # renovate: datasource=go
|
||||||
GOMOCK_PACKAGE ?= go.uber.org/mock/mockgen@v0.4.0 # renovate: datasource=go
|
GOMOCK_PACKAGE ?= go.uber.org/mock/mockgen@v0.4.0 # renovate: datasource=go
|
||||||
GOPLS_PACKAGE ?= golang.org/x/tools/gopls@v0.15.3 # renovate: datasource=go
|
GOPLS_PACKAGE ?= golang.org/x/tools/gopls@v0.15.3 # renovate: datasource=go
|
||||||
RENOVATE_NPM_PACKAGE ?= renovate@37.414.1 # renovate: datasource=docker packageName=ghcr.io/visualon/renovate
|
|
||||||
|
|
||||||
DOCKER_IMAGE ?= gitea/gitea
|
DOCKER_IMAGE ?= gitea/gitea
|
||||||
DOCKER_TAG ?= latest
|
DOCKER_TAG ?= latest
|
||||||
|
@ -125,8 +124,6 @@ LINUX_ARCHS ?= linux/amd64,linux/386,linux/arm-5,linux/arm-6,linux/arm64
|
||||||
ifeq ($(HAS_GO), yes)
|
ifeq ($(HAS_GO), yes)
|
||||||
GO_TEST_PACKAGES ?= $(filter-out $(shell $(GO) list code.gitea.io/gitea/models/migrations/...) $(shell $(GO) list code.gitea.io/gitea/models/forgejo_migrations/...) code.gitea.io/gitea/tests/integration/migration-test code.gitea.io/gitea/tests code.gitea.io/gitea/tests/integration code.gitea.io/gitea/tests/e2e,$(shell $(GO) list ./... | grep -v /vendor/))
|
GO_TEST_PACKAGES ?= $(filter-out $(shell $(GO) list code.gitea.io/gitea/models/migrations/...) $(shell $(GO) list code.gitea.io/gitea/models/forgejo_migrations/...) code.gitea.io/gitea/tests/integration/migration-test code.gitea.io/gitea/tests code.gitea.io/gitea/tests/integration code.gitea.io/gitea/tests/e2e,$(shell $(GO) list ./... | grep -v /vendor/))
|
||||||
endif
|
endif
|
||||||
REMOTE_CACHER_MODULES ?= cache nosql session queue
|
|
||||||
GO_TEST_REMOTE_CACHER_PACKAGES ?= $(addprefix code.gitea.io/gitea/modules/,$(REMOTE_CACHER_MODULES))
|
|
||||||
|
|
||||||
FOMANTIC_WORK_DIR := web_src/fomantic
|
FOMANTIC_WORK_DIR := web_src/fomantic
|
||||||
|
|
||||||
|
@ -240,7 +237,6 @@ help:
|
||||||
@echo " - lint-md lint markdown files"
|
@echo " - lint-md lint markdown files"
|
||||||
@echo " - lint-swagger lint swagger files"
|
@echo " - lint-swagger lint swagger files"
|
||||||
@echo " - lint-templates lint template files"
|
@echo " - lint-templates lint template files"
|
||||||
@echo " - lint-renovate lint renovate files"
|
|
||||||
@echo " - lint-yaml lint yaml files"
|
@echo " - lint-yaml lint yaml files"
|
||||||
@echo " - lint-spell lint spelling"
|
@echo " - lint-spell lint spelling"
|
||||||
@echo " - lint-spell-fix lint spelling and fix issues"
|
@echo " - lint-spell-fix lint spelling and fix issues"
|
||||||
|
@ -251,9 +247,7 @@ help:
|
||||||
@echo " - show-version-full show the same version as the API endpoint"
|
@echo " - show-version-full show the same version as the API endpoint"
|
||||||
@echo " - show-version-major show major release number only"
|
@echo " - show-version-major show major release number only"
|
||||||
@echo " - test-frontend test frontend files"
|
@echo " - test-frontend test frontend files"
|
||||||
@echo " - test-frontend-coverage test frontend files and display code coverage"
|
|
||||||
@echo " - test-backend test backend files"
|
@echo " - test-backend test backend files"
|
||||||
@echo " - test-remote-cacher test backend files that use a remote cache"
|
|
||||||
@echo " - test-e2e-sqlite[\#name.test.e2e] test end to end using playwright and sqlite"
|
@echo " - test-e2e-sqlite[\#name.test.e2e] test end to end using playwright and sqlite"
|
||||||
@echo " - webpack build webpack files"
|
@echo " - webpack build webpack files"
|
||||||
@echo " - svg build svg files"
|
@echo " - svg build svg files"
|
||||||
|
@ -401,7 +395,7 @@ lint-frontend: lint-js lint-css
|
||||||
lint-frontend-fix: lint-js-fix lint-css-fix
|
lint-frontend-fix: lint-js-fix lint-css-fix
|
||||||
|
|
||||||
.PHONY: lint-backend
|
.PHONY: lint-backend
|
||||||
lint-backend: lint-go lint-go-vet lint-editorconfig lint-renovate
|
lint-backend: lint-go lint-go-vet lint-editorconfig
|
||||||
|
|
||||||
.PHONY: lint-backend-fix
|
.PHONY: lint-backend-fix
|
||||||
lint-backend-fix: lint-go-fix lint-go-vet lint-editorconfig
|
lint-backend-fix: lint-go-fix lint-go-vet lint-editorconfig
|
||||||
|
@ -438,12 +432,6 @@ lint-css-fix: node_modules
|
||||||
lint-swagger: node_modules
|
lint-swagger: node_modules
|
||||||
npx spectral lint -q -F hint $(SWAGGER_SPEC)
|
npx spectral lint -q -F hint $(SWAGGER_SPEC)
|
||||||
|
|
||||||
.PHONY: lint-renovate
|
|
||||||
lint-renovate: node_modules
|
|
||||||
npx --yes --package $(RENOVATE_NPM_PACKAGE) -- renovate-config-validator --strict > .lint-renovate 2>&1 || true
|
|
||||||
@if grep --quiet --extended-regexp -e '^( WARN:|ERROR:)' .lint-renovate ; then cat .lint-renovate ; rm .lint-renovate ; exit 1 ; fi
|
|
||||||
@rm .lint-renovate
|
|
||||||
|
|
||||||
.PHONY: lint-md
|
.PHONY: lint-md
|
||||||
lint-md: node_modules
|
lint-md: node_modules
|
||||||
npx markdownlint docs *.md
|
npx markdownlint docs *.md
|
||||||
|
@ -521,19 +509,10 @@ test-backend:
|
||||||
@echo "Running go test with $(GOTESTFLAGS) -tags '$(TEST_TAGS)'..."
|
@echo "Running go test with $(GOTESTFLAGS) -tags '$(TEST_TAGS)'..."
|
||||||
@$(GO) test $(GOTESTFLAGS) -tags='$(TEST_TAGS)' $(GO_TEST_PACKAGES)
|
@$(GO) test $(GOTESTFLAGS) -tags='$(TEST_TAGS)' $(GO_TEST_PACKAGES)
|
||||||
|
|
||||||
.PHONY: test-remote-cacher
|
|
||||||
test-remote-cacher:
|
|
||||||
@echo "Running go test with $(GOTESTFLAGS) -tags '$(TEST_TAGS)'..."
|
|
||||||
@$(GO) test $(GOTESTFLAGS) -tags='$(TEST_TAGS)' $(GO_TEST_REMOTE_CACHER_PACKAGES)
|
|
||||||
|
|
||||||
.PHONY: test-frontend
|
.PHONY: test-frontend
|
||||||
test-frontend: node_modules
|
test-frontend: node_modules
|
||||||
npx vitest
|
npx vitest
|
||||||
|
|
||||||
.PHONY: test-frontend-coverage
|
|
||||||
test-frontend-coverage: node_modules
|
|
||||||
npx vitest --coverage --coverage.include 'web_src/**'
|
|
||||||
|
|
||||||
.PHONY: test-check
|
.PHONY: test-check
|
||||||
test-check:
|
test-check:
|
||||||
@echo "Running test-check...";
|
@echo "Running test-check...";
|
||||||
|
|
15
assets/go-licenses.json
generated
15
assets/go-licenses.json
generated
File diff suppressed because one or more lines are too long
|
@ -20,11 +20,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1717974879,
|
"lastModified": 1715534503,
|
||||||
"narHash": "sha256-GTO3C88+5DX171F/gVS3Qga/hOs/eRMxPFpiHq2t+D8=",
|
"narHash": "sha256-5ZSVkFadZbFP1THataCaSf0JH2cAH3S29hU9rrxTEqk=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "c7b821ba2e1e635ba5a76d299af62821cbcb09f3",
|
"rev": "2057814051972fa1453ddfb0d98badbea9b83c06",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
15
go.mod
15
go.mod
|
@ -5,7 +5,7 @@ go 1.22.0
|
||||||
toolchain go1.22.4
|
toolchain go1.22.4
|
||||||
|
|
||||||
require (
|
require (
|
||||||
code.forgejo.org/f3/gof3/v3 v3.4.0
|
code.forgejo.org/f3/gof3/v3 v3.3.1
|
||||||
code.forgejo.org/forgejo/reply v1.0.2
|
code.forgejo.org/forgejo/reply v1.0.2
|
||||||
code.gitea.io/actions-proto-go v0.4.0
|
code.gitea.io/actions-proto-go v0.4.0
|
||||||
code.gitea.io/gitea-vet v0.2.3
|
code.gitea.io/gitea-vet v0.2.3
|
||||||
|
@ -39,7 +39,7 @@ require (
|
||||||
github.com/gliderlabs/ssh v0.3.7
|
github.com/gliderlabs/ssh v0.3.7
|
||||||
github.com/go-ap/activitypub v0.0.0-20231114162308-e219254dc5c9
|
github.com/go-ap/activitypub v0.0.0-20231114162308-e219254dc5c9
|
||||||
github.com/go-ap/jsonld v0.0.0-20221030091449-f2a191312c73
|
github.com/go-ap/jsonld v0.0.0-20221030091449-f2a191312c73
|
||||||
github.com/go-chi/chi/v5 v5.0.14
|
github.com/go-chi/chi/v5 v5.0.11
|
||||||
github.com/go-chi/cors v1.2.1
|
github.com/go-chi/cors v1.2.1
|
||||||
github.com/go-co-op/gocron v1.37.0
|
github.com/go-co-op/gocron v1.37.0
|
||||||
github.com/go-enry/go-enry/v2 v2.8.8
|
github.com/go-enry/go-enry/v2 v2.8.8
|
||||||
|
@ -58,7 +58,7 @@ require (
|
||||||
github.com/google/go-github/v57 v57.0.0
|
github.com/google/go-github/v57 v57.0.0
|
||||||
github.com/google/pprof v0.0.0-20240528025155-186aa0362fba
|
github.com/google/pprof v0.0.0-20240528025155-186aa0362fba
|
||||||
github.com/google/uuid v1.6.0
|
github.com/google/uuid v1.6.0
|
||||||
github.com/gorilla/feeds v1.2.0
|
github.com/gorilla/feeds v1.1.2
|
||||||
github.com/gorilla/sessions v1.2.2
|
github.com/gorilla/sessions v1.2.2
|
||||||
github.com/h2non/gock v1.2.0
|
github.com/h2non/gock v1.2.0
|
||||||
github.com/hashicorp/go-version v1.6.0
|
github.com/hashicorp/go-version v1.6.0
|
||||||
|
@ -101,12 +101,12 @@ require (
|
||||||
github.com/valyala/fastjson v1.6.4
|
github.com/valyala/fastjson v1.6.4
|
||||||
github.com/xanzy/go-gitlab v0.96.0
|
github.com/xanzy/go-gitlab v0.96.0
|
||||||
github.com/yohcop/openid-go v1.0.1
|
github.com/yohcop/openid-go v1.0.1
|
||||||
github.com/yuin/goldmark v1.7.4
|
github.com/yuin/goldmark v1.7.2
|
||||||
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc
|
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc
|
||||||
github.com/yuin/goldmark-meta v1.1.0
|
github.com/yuin/goldmark-meta v1.1.0
|
||||||
go.uber.org/mock v0.4.0
|
go.uber.org/mock v0.4.0
|
||||||
golang.org/x/crypto v0.24.0
|
golang.org/x/crypto v0.24.0
|
||||||
golang.org/x/image v0.18.0
|
golang.org/x/image v0.17.0
|
||||||
golang.org/x/net v0.26.0
|
golang.org/x/net v0.26.0
|
||||||
golang.org/x/oauth2 v0.21.0
|
golang.org/x/oauth2 v0.21.0
|
||||||
golang.org/x/sys v0.21.0
|
golang.org/x/sys v0.21.0
|
||||||
|
@ -213,7 +213,7 @@ require (
|
||||||
github.com/gorilla/securecookie v1.1.2 // indirect
|
github.com/gorilla/securecookie v1.1.2 // indirect
|
||||||
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 // indirect
|
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 // indirect
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
||||||
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
|
github.com/hashicorp/go-retryablehttp v0.7.5 // indirect
|
||||||
github.com/hashicorp/hcl v1.0.0 // indirect
|
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||||
github.com/imdario/mergo v0.3.16 // indirect
|
github.com/imdario/mergo v0.3.16 // indirect
|
||||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
|
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
|
||||||
|
@ -259,7 +259,6 @@ require (
|
||||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||||
github.com/sagikazarmark/locafero v0.4.0 // indirect
|
github.com/sagikazarmark/locafero v0.4.0 // indirect
|
||||||
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
|
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
|
||||||
github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 // indirect
|
|
||||||
github.com/segmentio/asm v1.2.0 // indirect
|
github.com/segmentio/asm v1.2.0 // indirect
|
||||||
github.com/shopspring/decimal v1.4.0 // indirect
|
github.com/shopspring/decimal v1.4.0 // indirect
|
||||||
github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c // indirect
|
github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c // indirect
|
||||||
|
@ -304,6 +303,8 @@ replace github.com/shurcooL/vfsgen => github.com/lunny/vfsgen v0.0.0-20220105142
|
||||||
|
|
||||||
replace github.com/nektos/act => gitea.com/gitea/act v0.261.1
|
replace github.com/nektos/act => gitea.com/gitea/act v0.261.1
|
||||||
|
|
||||||
|
replace github.com/gorilla/feeds => github.com/yardenshoham/feeds v0.0.0-20240110072658-f3d0c21c0bd5
|
||||||
|
|
||||||
exclude github.com/gofrs/uuid v3.2.0+incompatible
|
exclude github.com/gofrs/uuid v3.2.0+incompatible
|
||||||
|
|
||||||
exclude github.com/gofrs/uuid v4.0.0+incompatible
|
exclude github.com/gofrs/uuid v4.0.0+incompatible
|
||||||
|
|
31
go.sum
31
go.sum
|
@ -1,7 +1,7 @@
|
||||||
cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc=
|
cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc=
|
||||||
cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
|
cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
|
||||||
code.forgejo.org/f3/gof3/v3 v3.4.0 h1:60LOo47tAKvr9nVu2qqNjbgRnCKeKx68mRMRBo/hIuA=
|
code.forgejo.org/f3/gof3/v3 v3.3.1 h1:lG7vT1Y/OIJDcZJE+mm5uycLyOQm0nVwGxnIWcBQ5XY=
|
||||||
code.forgejo.org/f3/gof3/v3 v3.4.0/go.mod h1:9v7foN46KlEr5gywOSQPn1k5BVpPeuBozsLKlgOQ3YM=
|
code.forgejo.org/f3/gof3/v3 v3.3.1/go.mod h1:Wk0xt06c72MPbEplc3TZYYOTTHDlCR15YpgFG0ggci8=
|
||||||
code.forgejo.org/forgejo/archiver/v3 v3.5.1 h1:UmmbA7D5550uf71SQjarmrn6yKwOGxtEjb3jaYYtmSE=
|
code.forgejo.org/forgejo/archiver/v3 v3.5.1 h1:UmmbA7D5550uf71SQjarmrn6yKwOGxtEjb3jaYYtmSE=
|
||||||
code.forgejo.org/forgejo/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4=
|
code.forgejo.org/forgejo/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4=
|
||||||
code.forgejo.org/forgejo/reply v1.0.2 h1:dMhQCHV6/O3L5CLWNTol+dNzDAuyCK88z4J/lCdgFuQ=
|
code.forgejo.org/forgejo/reply v1.0.2 h1:dMhQCHV6/O3L5CLWNTol+dNzDAuyCK88z4J/lCdgFuQ=
|
||||||
|
@ -243,8 +243,8 @@ github.com/go-ap/jsonld v0.0.0-20221030091449-f2a191312c73/go.mod h1:jyveZeGw5La
|
||||||
github.com/go-asn1-ber/asn1-ber v1.5.5 h1:MNHlNMBDgEKD4TcKr36vQN68BA00aDfjIt3/bD50WnA=
|
github.com/go-asn1-ber/asn1-ber v1.5.5 h1:MNHlNMBDgEKD4TcKr36vQN68BA00aDfjIt3/bD50WnA=
|
||||||
github.com/go-asn1-ber/asn1-ber v1.5.5/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
|
github.com/go-asn1-ber/asn1-ber v1.5.5/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
|
||||||
github.com/go-chi/chi/v5 v5.0.1/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
|
github.com/go-chi/chi/v5 v5.0.1/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
|
||||||
github.com/go-chi/chi/v5 v5.0.14 h1:PyEwo2Vudraa0x/Wl6eDRRW2NXBvekgfxyydcM0WGE0=
|
github.com/go-chi/chi/v5 v5.0.11 h1:BnpYbFZ3T3S1WMpD79r7R5ThWX40TaFB7L31Y8xqSwA=
|
||||||
github.com/go-chi/chi/v5 v5.0.14/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
|
github.com/go-chi/chi/v5 v5.0.11/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
|
||||||
github.com/go-chi/cors v1.2.1 h1:xEC8UT3Rlp2QuWNEr4Fs/c2EAGVKBwy/1vHx3bppil4=
|
github.com/go-chi/cors v1.2.1 h1:xEC8UT3Rlp2QuWNEr4Fs/c2EAGVKBwy/1vHx3bppil4=
|
||||||
github.com/go-chi/cors v1.2.1/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58=
|
github.com/go-chi/cors v1.2.1/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58=
|
||||||
github.com/go-co-op/gocron v1.37.0 h1:ZYDJGtQ4OMhTLKOKMIch+/CY70Brbb1dGdooLEhh7b0=
|
github.com/go-co-op/gocron v1.37.0 h1:ZYDJGtQ4OMhTLKOKMIch+/CY70Brbb1dGdooLEhh7b0=
|
||||||
|
@ -381,8 +381,6 @@ github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8
|
||||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
||||||
github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
|
github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
|
||||||
github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0=
|
github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0=
|
||||||
github.com/gorilla/feeds v1.2.0 h1:O6pBiXJ5JHhPvqy53NsjKOThq+dNFm8+DFrxBEdzSCc=
|
|
||||||
github.com/gorilla/feeds v1.2.0/go.mod h1:WMib8uJP3BbY+X8Szd1rA5Pzhdfh+HCCAYT2z7Fza6Y=
|
|
||||||
github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE=
|
github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE=
|
||||||
github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w=
|
github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w=
|
||||||
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
|
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
|
||||||
|
@ -401,10 +399,11 @@ github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslC
|
||||||
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI=
|
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI=
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
|
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
|
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
|
||||||
github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
|
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
|
||||||
github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
|
github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c=
|
||||||
github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU=
|
github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
|
||||||
github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk=
|
github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M=
|
||||||
|
github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8=
|
||||||
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
|
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
|
||||||
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
|
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
|
||||||
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||||
|
@ -634,8 +633,6 @@ github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6g
|
||||||
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
|
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
|
||||||
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4=
|
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4=
|
||||||
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY=
|
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY=
|
||||||
github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 h1:PKK9DyHxif4LZo+uQSgXNqs0jj5+xZwwfKHgph2lxBw=
|
|
||||||
github.com/santhosh-tekuri/jsonschema/v6 v6.0.1/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU=
|
|
||||||
github.com/sassoftware/go-rpmutils v0.2.1-0.20240124161140-277b154961dd h1:KpbqRPDwcAQTyaP+L+YudTRb3CnJlQ64Hfn1SF/zHBA=
|
github.com/sassoftware/go-rpmutils v0.2.1-0.20240124161140-277b154961dd h1:KpbqRPDwcAQTyaP+L+YudTRb3CnJlQ64Hfn1SF/zHBA=
|
||||||
github.com/sassoftware/go-rpmutils v0.2.1-0.20240124161140-277b154961dd/go.mod h1:TJJQYtLe/BeEmEjelI3b7xNZjzAukEkeWKmoakvaOoI=
|
github.com/sassoftware/go-rpmutils v0.2.1-0.20240124161140-277b154961dd/go.mod h1:TJJQYtLe/BeEmEjelI3b7xNZjzAukEkeWKmoakvaOoI=
|
||||||
github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys=
|
github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys=
|
||||||
|
@ -732,6 +729,8 @@ github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofm
|
||||||
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
|
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
|
||||||
github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 h1:+qGGcbkzsfDQNPPe9UDgpxAWQrhbbBXOYJFQDq/dtJw=
|
github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 h1:+qGGcbkzsfDQNPPe9UDgpxAWQrhbbBXOYJFQDq/dtJw=
|
||||||
github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913/go.mod h1:4aEEwZQutDLsQv2Deui4iYQ6DWTxR14g6m8Wv88+Xqk=
|
github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913/go.mod h1:4aEEwZQutDLsQv2Deui4iYQ6DWTxR14g6m8Wv88+Xqk=
|
||||||
|
github.com/yardenshoham/feeds v0.0.0-20240110072658-f3d0c21c0bd5 h1:3seWKGVhGoc66Ht5QlhQsr4xT2caDnFegsnh2NqvENU=
|
||||||
|
github.com/yardenshoham/feeds v0.0.0-20240110072658-f3d0c21c0bd5/go.mod h1:WMib8uJP3BbY+X8Szd1rA5Pzhdfh+HCCAYT2z7Fza6Y=
|
||||||
github.com/yohcop/openid-go v1.0.1 h1:DPRd3iPO5F6O5zX2e62XpVAbPT6wV51cuucH0z9g3js=
|
github.com/yohcop/openid-go v1.0.1 h1:DPRd3iPO5F6O5zX2e62XpVAbPT6wV51cuucH0z9g3js=
|
||||||
github.com/yohcop/openid-go v1.0.1/go.mod h1:b/AvD03P0KHj4yuihb+VtLD6bYYgsy0zqBzPCRjkCNs=
|
github.com/yohcop/openid-go v1.0.1/go.mod h1:b/AvD03P0KHj4yuihb+VtLD6bYYgsy0zqBzPCRjkCNs=
|
||||||
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
|
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
|
||||||
|
@ -740,8 +739,8 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
|
||||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
github.com/yuin/goldmark v1.4.15/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
github.com/yuin/goldmark v1.4.15/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
github.com/yuin/goldmark v1.7.4 h1:BDXOHExt+A7gwPCJgPIIq7ENvceR7we7rOS9TNoLZeg=
|
github.com/yuin/goldmark v1.7.2 h1:NjGd7lO7zrUn/A7eKwn5PEOt4ONYGqpxSEeZuduvgxc=
|
||||||
github.com/yuin/goldmark v1.7.4/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
|
github.com/yuin/goldmark v1.7.2/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
|
||||||
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc h1:+IAOyRda+RLrxa1WC7umKOZRsGq4QrFFMYApOeHzQwQ=
|
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc h1:+IAOyRda+RLrxa1WC7umKOZRsGq4QrFFMYApOeHzQwQ=
|
||||||
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc/go.mod h1:ovIvrum6DQJA4QsJSovrkC4saKHQVs7TvcaeO8AIl5I=
|
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc/go.mod h1:ovIvrum6DQJA4QsJSovrkC4saKHQVs7TvcaeO8AIl5I=
|
||||||
github.com/yuin/goldmark-meta v1.1.0 h1:pWw+JLHGZe8Rk0EGsMVssiNb/AaPMHfSRszZeUeiOUc=
|
github.com/yuin/goldmark-meta v1.1.0 h1:pWw+JLHGZe8Rk0EGsMVssiNb/AaPMHfSRszZeUeiOUc=
|
||||||
|
@ -791,8 +790,8 @@ golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI=
|
||||||
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
|
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
|
||||||
golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA=
|
golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA=
|
||||||
golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
|
golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
|
||||||
golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ=
|
golang.org/x/image v0.17.0 h1:nTRVVdajgB8zCMZVsViyzhnMKPwYeroEERRC64JuLco=
|
||||||
golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E=
|
golang.org/x/image v0.17.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E=
|
||||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
|
|
|
@ -18,6 +18,12 @@ const (
|
||||||
SearchOrderByRecentUpdated SearchOrderBy = "updated_unix DESC"
|
SearchOrderByRecentUpdated SearchOrderBy = "updated_unix DESC"
|
||||||
SearchOrderByOldest SearchOrderBy = "created_unix ASC"
|
SearchOrderByOldest SearchOrderBy = "created_unix ASC"
|
||||||
SearchOrderByNewest SearchOrderBy = "created_unix DESC"
|
SearchOrderByNewest SearchOrderBy = "created_unix DESC"
|
||||||
|
SearchOrderBySize SearchOrderBy = "size ASC"
|
||||||
|
SearchOrderBySizeReverse SearchOrderBy = "size DESC"
|
||||||
|
SearchOrderByGitSize SearchOrderBy = "git_size ASC"
|
||||||
|
SearchOrderByGitSizeReverse SearchOrderBy = "git_size DESC"
|
||||||
|
SearchOrderByLFSSize SearchOrderBy = "lfs_size ASC"
|
||||||
|
SearchOrderByLFSSizeReverse SearchOrderBy = "lfs_size DESC"
|
||||||
SearchOrderByID SearchOrderBy = "id ASC"
|
SearchOrderByID SearchOrderBy = "id ASC"
|
||||||
SearchOrderByIDReverse SearchOrderBy = "id DESC"
|
SearchOrderByIDReverse SearchOrderBy = "id DESC"
|
||||||
SearchOrderByStars SearchOrderBy = "num_stars ASC"
|
SearchOrderByStars SearchOrderBy = "num_stars ASC"
|
||||||
|
|
|
@ -215,15 +215,16 @@ func fileTimestampToTime(timestamp int64) time.Time {
|
||||||
return time.UnixMicro(timestamp)
|
return time.UnixMicro(timestamp)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *file) loadMetaByPath() error {
|
func (f *file) loadMetaByPath() (*dbfsMeta, error) {
|
||||||
var fileMeta dbfsMeta
|
var fileMeta dbfsMeta
|
||||||
if ok, err := db.GetEngine(f.ctx).Where("full_path = ?", f.fullPath).Get(&fileMeta); err != nil {
|
if ok, err := db.GetEngine(f.ctx).Where("full_path = ?", f.fullPath).Get(&fileMeta); err != nil {
|
||||||
return err
|
return nil, err
|
||||||
} else if ok {
|
} else if ok {
|
||||||
f.metaID = fileMeta.ID
|
f.metaID = fileMeta.ID
|
||||||
f.blockSize = fileMeta.BlockSize
|
f.blockSize = fileMeta.BlockSize
|
||||||
|
return &fileMeta, nil
|
||||||
}
|
}
|
||||||
return nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *file) open(flag int) (err error) {
|
func (f *file) open(flag int) (err error) {
|
||||||
|
@ -287,7 +288,10 @@ func (f *file) createEmpty() error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return f.loadMetaByPath()
|
if _, err = f.loadMetaByPath(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *file) truncate() error {
|
func (f *file) truncate() error {
|
||||||
|
@ -364,5 +368,8 @@ func buildPath(path string) string {
|
||||||
func newDbFile(ctx context.Context, path string) (*file, error) {
|
func newDbFile(ctx context.Context, path string) (*file, error) {
|
||||||
path = buildPath(path)
|
path = buildPath(path)
|
||||||
f := &file{ctx: ctx, fullPath: path, blockSize: defaultFileBlockSize}
|
f := &file{ctx: ctx, fullPath: path, blockSize: defaultFileBlockSize}
|
||||||
return f, f.loadMetaByPath()
|
if _, err := f.loadMetaByPath(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return f, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -110,19 +110,6 @@ func GetProtectedTagByID(ctx context.Context, id int64) (*ProtectedTag, error) {
|
||||||
return tag, nil
|
return tag, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetProtectedTagByNamePattern gets protected tag by name_pattern
|
|
||||||
func GetProtectedTagByNamePattern(ctx context.Context, repoID int64, pattern string) (*ProtectedTag, error) {
|
|
||||||
tag := &ProtectedTag{NamePattern: pattern, RepoID: repoID}
|
|
||||||
has, err := db.GetEngine(ctx).Get(tag)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if !has {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
return tag, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsUserAllowedToControlTag checks if a user can control the specific tag.
|
// IsUserAllowedToControlTag checks if a user can control the specific tag.
|
||||||
// It returns true if the tag name is not protected or the user is allowed to control it.
|
// It returns true if the tag name is not protected or the user is allowed to control it.
|
||||||
func IsUserAllowedToControlTag(ctx context.Context, tags []*ProtectedTag, tagName string, userID int64) (bool, error) {
|
func IsUserAllowedToControlTag(ctx context.Context, tags []*ProtectedTag, tagName string, userID int64) (bool, error) {
|
||||||
|
|
|
@ -99,9 +99,9 @@ func applySorts(sess *xorm.Session, sortType string, priorityRepoID int64) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyLimit(sess *xorm.Session, opts *IssuesOptions) {
|
func applyLimit(sess *xorm.Session, opts *IssuesOptions) *xorm.Session {
|
||||||
if opts.Paginator == nil || opts.Paginator.IsListAll() {
|
if opts.Paginator == nil || opts.Paginator.IsListAll() {
|
||||||
return
|
return sess
|
||||||
}
|
}
|
||||||
|
|
||||||
start := 0
|
start := 0
|
||||||
|
@ -109,9 +109,11 @@ func applyLimit(sess *xorm.Session, opts *IssuesOptions) {
|
||||||
start = (opts.Paginator.Page - 1) * opts.Paginator.PageSize
|
start = (opts.Paginator.Page - 1) * opts.Paginator.PageSize
|
||||||
}
|
}
|
||||||
sess.Limit(opts.Paginator.PageSize, start)
|
sess.Limit(opts.Paginator.PageSize, start)
|
||||||
|
|
||||||
|
return sess
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyLabelsCondition(sess *xorm.Session, opts *IssuesOptions) {
|
func applyLabelsCondition(sess *xorm.Session, opts *IssuesOptions) *xorm.Session {
|
||||||
if len(opts.LabelIDs) > 0 {
|
if len(opts.LabelIDs) > 0 {
|
||||||
if opts.LabelIDs[0] == 0 {
|
if opts.LabelIDs[0] == 0 {
|
||||||
sess.Where("issue.id NOT IN (SELECT issue_id FROM issue_label)")
|
sess.Where("issue.id NOT IN (SELECT issue_id FROM issue_label)")
|
||||||
|
@ -134,9 +136,11 @@ func applyLabelsCondition(sess *xorm.Session, opts *IssuesOptions) {
|
||||||
if len(opts.ExcludedLabelNames) > 0 {
|
if len(opts.ExcludedLabelNames) > 0 {
|
||||||
sess.And(builder.NotIn("issue.id", BuildLabelNamesIssueIDsCondition(opts.ExcludedLabelNames)))
|
sess.And(builder.NotIn("issue.id", BuildLabelNamesIssueIDsCondition(opts.ExcludedLabelNames)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return sess
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyMilestoneCondition(sess *xorm.Session, opts *IssuesOptions) {
|
func applyMilestoneCondition(sess *xorm.Session, opts *IssuesOptions) *xorm.Session {
|
||||||
if len(opts.MilestoneIDs) == 1 && opts.MilestoneIDs[0] == db.NoConditionID {
|
if len(opts.MilestoneIDs) == 1 && opts.MilestoneIDs[0] == db.NoConditionID {
|
||||||
sess.And("issue.milestone_id = 0")
|
sess.And("issue.milestone_id = 0")
|
||||||
} else if len(opts.MilestoneIDs) > 0 {
|
} else if len(opts.MilestoneIDs) > 0 {
|
||||||
|
@ -149,9 +153,11 @@ func applyMilestoneCondition(sess *xorm.Session, opts *IssuesOptions) {
|
||||||
From("milestone").
|
From("milestone").
|
||||||
Where(builder.In("name", opts.IncludeMilestones)))
|
Where(builder.In("name", opts.IncludeMilestones)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return sess
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyProjectCondition(sess *xorm.Session, opts *IssuesOptions) {
|
func applyProjectCondition(sess *xorm.Session, opts *IssuesOptions) *xorm.Session {
|
||||||
if opts.ProjectID > 0 { // specific project
|
if opts.ProjectID > 0 { // specific project
|
||||||
sess.Join("INNER", "project_issue", "issue.id = project_issue.issue_id").
|
sess.Join("INNER", "project_issue", "issue.id = project_issue.issue_id").
|
||||||
And("project_issue.project_id=?", opts.ProjectID)
|
And("project_issue.project_id=?", opts.ProjectID)
|
||||||
|
@ -160,9 +166,10 @@ func applyProjectCondition(sess *xorm.Session, opts *IssuesOptions) {
|
||||||
}
|
}
|
||||||
// opts.ProjectID == 0 means all projects,
|
// opts.ProjectID == 0 means all projects,
|
||||||
// do not need to apply any condition
|
// do not need to apply any condition
|
||||||
|
return sess
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyProjectColumnCondition(sess *xorm.Session, opts *IssuesOptions) {
|
func applyProjectColumnCondition(sess *xorm.Session, opts *IssuesOptions) *xorm.Session {
|
||||||
// opts.ProjectColumnID == 0 means all project columns,
|
// opts.ProjectColumnID == 0 means all project columns,
|
||||||
// do not need to apply any condition
|
// do not need to apply any condition
|
||||||
if opts.ProjectColumnID > 0 {
|
if opts.ProjectColumnID > 0 {
|
||||||
|
@ -170,9 +177,10 @@ func applyProjectColumnCondition(sess *xorm.Session, opts *IssuesOptions) {
|
||||||
} else if opts.ProjectColumnID == db.NoConditionID {
|
} else if opts.ProjectColumnID == db.NoConditionID {
|
||||||
sess.In("issue.id", builder.Select("issue_id").From("project_issue").Where(builder.Eq{"project_board_id": 0}))
|
sess.In("issue.id", builder.Select("issue_id").From("project_issue").Where(builder.Eq{"project_board_id": 0}))
|
||||||
}
|
}
|
||||||
|
return sess
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyRepoConditions(sess *xorm.Session, opts *IssuesOptions) {
|
func applyRepoConditions(sess *xorm.Session, opts *IssuesOptions) *xorm.Session {
|
||||||
if len(opts.RepoIDs) == 1 {
|
if len(opts.RepoIDs) == 1 {
|
||||||
opts.RepoCond = builder.Eq{"issue.repo_id": opts.RepoIDs[0]}
|
opts.RepoCond = builder.Eq{"issue.repo_id": opts.RepoIDs[0]}
|
||||||
} else if len(opts.RepoIDs) > 1 {
|
} else if len(opts.RepoIDs) > 1 {
|
||||||
|
@ -187,9 +195,10 @@ func applyRepoConditions(sess *xorm.Session, opts *IssuesOptions) {
|
||||||
if opts.RepoCond != nil {
|
if opts.RepoCond != nil {
|
||||||
sess.And(opts.RepoCond)
|
sess.And(opts.RepoCond)
|
||||||
}
|
}
|
||||||
|
return sess
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyConditions(sess *xorm.Session, opts *IssuesOptions) {
|
func applyConditions(sess *xorm.Session, opts *IssuesOptions) *xorm.Session {
|
||||||
if len(opts.IssueIDs) > 0 {
|
if len(opts.IssueIDs) > 0 {
|
||||||
sess.In("issue.id", opts.IssueIDs)
|
sess.In("issue.id", opts.IssueIDs)
|
||||||
}
|
}
|
||||||
|
@ -252,6 +261,8 @@ func applyConditions(sess *xorm.Session, opts *IssuesOptions) {
|
||||||
if opts.User != nil {
|
if opts.User != nil {
|
||||||
sess.And(issuePullAccessibleRepoCond("issue.repo_id", opts.User.ID, opts.Org, opts.Team, opts.IsPull.Value()))
|
sess.And(issuePullAccessibleRepoCond("issue.repo_id", opts.User.ID, opts.Org, opts.Team, opts.IsPull.Value()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return sess
|
||||||
}
|
}
|
||||||
|
|
||||||
// teamUnitsRepoCond returns query condition for those repo id in the special org team with special units access
|
// teamUnitsRepoCond returns query condition for those repo id in the special org team with special units access
|
||||||
|
@ -328,22 +339,22 @@ func issuePullAccessibleRepoCond(repoIDstr string, userID int64, org *organizati
|
||||||
return cond
|
return cond
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyAssigneeCondition(sess *xorm.Session, assigneeID int64) {
|
func applyAssigneeCondition(sess *xorm.Session, assigneeID int64) *xorm.Session {
|
||||||
sess.Join("INNER", "issue_assignees", "issue.id = issue_assignees.issue_id").
|
return sess.Join("INNER", "issue_assignees", "issue.id = issue_assignees.issue_id").
|
||||||
And("issue_assignees.assignee_id = ?", assigneeID)
|
And("issue_assignees.assignee_id = ?", assigneeID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyPosterCondition(sess *xorm.Session, posterID int64) {
|
func applyPosterCondition(sess *xorm.Session, posterID int64) *xorm.Session {
|
||||||
sess.And("issue.poster_id=?", posterID)
|
return sess.And("issue.poster_id=?", posterID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyMentionedCondition(sess *xorm.Session, mentionedID int64) {
|
func applyMentionedCondition(sess *xorm.Session, mentionedID int64) *xorm.Session {
|
||||||
sess.Join("INNER", "issue_user", "issue.id = issue_user.issue_id").
|
return sess.Join("INNER", "issue_user", "issue.id = issue_user.issue_id").
|
||||||
And("issue_user.is_mentioned = ?", true).
|
And("issue_user.is_mentioned = ?", true).
|
||||||
And("issue_user.uid = ?", mentionedID)
|
And("issue_user.uid = ?", mentionedID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyReviewRequestedCondition(sess *xorm.Session, reviewRequestedID int64) {
|
func applyReviewRequestedCondition(sess *xorm.Session, reviewRequestedID int64) *xorm.Session {
|
||||||
existInTeamQuery := builder.Select("team_user.team_id").
|
existInTeamQuery := builder.Select("team_user.team_id").
|
||||||
From("team_user").
|
From("team_user").
|
||||||
Where(builder.Eq{"team_user.uid": reviewRequestedID})
|
Where(builder.Eq{"team_user.uid": reviewRequestedID})
|
||||||
|
@ -364,11 +375,11 @@ func applyReviewRequestedCondition(sess *xorm.Session, reviewRequestedID int64)
|
||||||
),
|
),
|
||||||
builder.In("review.id", maxReview),
|
builder.In("review.id", maxReview),
|
||||||
))
|
))
|
||||||
sess.Where("issue.poster_id <> ?", reviewRequestedID).
|
return sess.Where("issue.poster_id <> ?", reviewRequestedID).
|
||||||
And(builder.In("issue.id", subQuery))
|
And(builder.In("issue.id", subQuery))
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyReviewedCondition(sess *xorm.Session, reviewedID int64) {
|
func applyReviewedCondition(sess *xorm.Session, reviewedID int64) *xorm.Session {
|
||||||
// Query for pull requests where you are a reviewer or commenter, excluding
|
// Query for pull requests where you are a reviewer or commenter, excluding
|
||||||
// any pull requests already returned by the review requested filter.
|
// any pull requests already returned by the review requested filter.
|
||||||
notPoster := builder.Neq{"issue.poster_id": reviewedID}
|
notPoster := builder.Neq{"issue.poster_id": reviewedID}
|
||||||
|
@ -395,11 +406,11 @@ func applyReviewedCondition(sess *xorm.Session, reviewedID int64) {
|
||||||
builder.In("type", CommentTypeComment, CommentTypeCode, CommentTypeReview),
|
builder.In("type", CommentTypeComment, CommentTypeCode, CommentTypeReview),
|
||||||
)),
|
)),
|
||||||
)
|
)
|
||||||
sess.And(notPoster, builder.Or(reviewed, commented))
|
return sess.And(notPoster, builder.Or(reviewed, commented))
|
||||||
}
|
}
|
||||||
|
|
||||||
func applySubscribedCondition(sess *xorm.Session, subscriberID int64) {
|
func applySubscribedCondition(sess *xorm.Session, subscriberID int64) *xorm.Session {
|
||||||
sess.And(
|
return sess.And(
|
||||||
builder.
|
builder.
|
||||||
NotIn("issue.id",
|
NotIn("issue.id",
|
||||||
builder.Select("issue_id").
|
builder.Select("issue_id").
|
||||||
|
|
|
@ -28,7 +28,7 @@ type PullRequestsOptions struct {
|
||||||
MilestoneID int64
|
MilestoneID int64
|
||||||
}
|
}
|
||||||
|
|
||||||
func listPullRequestStatement(ctx context.Context, baseRepoID int64, opts *PullRequestsOptions) *xorm.Session {
|
func listPullRequestStatement(ctx context.Context, baseRepoID int64, opts *PullRequestsOptions) (*xorm.Session, error) {
|
||||||
sess := db.GetEngine(ctx).Where("pull_request.base_repo_id=?", baseRepoID)
|
sess := db.GetEngine(ctx).Where("pull_request.base_repo_id=?", baseRepoID)
|
||||||
|
|
||||||
sess.Join("INNER", "issue", "pull_request.issue_id = issue.id")
|
sess.Join("INNER", "issue", "pull_request.issue_id = issue.id")
|
||||||
|
@ -46,7 +46,7 @@ func listPullRequestStatement(ctx context.Context, baseRepoID int64, opts *PullR
|
||||||
sess.And("issue.milestone_id=?", opts.MilestoneID)
|
sess.And("issue.milestone_id=?", opts.MilestoneID)
|
||||||
}
|
}
|
||||||
|
|
||||||
return sess
|
return sess, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetUnmergedPullRequestsByHeadInfoMax(ctx context.Context, repoID, olderThan int64, branch string) ([]*PullRequest, error) {
|
func GetUnmergedPullRequestsByHeadInfoMax(ctx context.Context, repoID, olderThan int64, branch string) ([]*PullRequest, error) {
|
||||||
|
@ -136,15 +136,23 @@ func PullRequests(ctx context.Context, baseRepoID int64, opts *PullRequestsOptio
|
||||||
opts.Page = 1
|
opts.Page = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
countSession := listPullRequestStatement(ctx, baseRepoID, opts)
|
countSession, err := listPullRequestStatement(ctx, baseRepoID, opts)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("listPullRequestStatement: %v", err)
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
maxResults, err := countSession.Count(new(PullRequest))
|
maxResults, err := countSession.Count(new(PullRequest))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("Count PRs: %v", err)
|
log.Error("Count PRs: %v", err)
|
||||||
return nil, maxResults, err
|
return nil, maxResults, err
|
||||||
}
|
}
|
||||||
|
|
||||||
findSession := listPullRequestStatement(ctx, baseRepoID, opts)
|
findSession, err := listPullRequestStatement(ctx, baseRepoID, opts)
|
||||||
applySorts(findSession, opts.SortType, 0)
|
applySorts(findSession, opts.SortType, 0)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("listPullRequestStatement: %v", err)
|
||||||
|
return nil, maxResults, err
|
||||||
|
}
|
||||||
findSession = db.SetSessionPagination(findSession, opts)
|
findSession = db.SetSessionPagination(findSession, opts)
|
||||||
prs := make([]*PullRequest, 0, opts.PageSize)
|
prs := make([]*PullRequest, 0, opts.PageSize)
|
||||||
return prs, maxResults, findSession.Find(&prs)
|
return prs, maxResults, findSession.Find(&prs)
|
||||||
|
@ -198,10 +206,8 @@ func (prs PullRequestList) LoadIssues(ctx context.Context) (IssueList, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load issues which are not loaded
|
// Load issues.
|
||||||
issueIDs := container.FilterSlice(prs, func(pr *PullRequest) (int64, bool) {
|
issueIDs := prs.GetIssueIDs()
|
||||||
return pr.IssueID, pr.Issue == nil && pr.IssueID > 0
|
|
||||||
})
|
|
||||||
issues := make(map[int64]*Issue, len(issueIDs))
|
issues := make(map[int64]*Issue, len(issueIDs))
|
||||||
if err := db.GetEngine(ctx).
|
if err := db.GetEngine(ctx).
|
||||||
In("id", issueIDs).
|
In("id", issueIDs).
|
||||||
|
@ -237,7 +243,10 @@ func (prs PullRequestList) LoadIssues(ctx context.Context) (IssueList, error) {
|
||||||
// GetIssueIDs returns all issue ids
|
// GetIssueIDs returns all issue ids
|
||||||
func (prs PullRequestList) GetIssueIDs() []int64 {
|
func (prs PullRequestList) GetIssueIDs() []int64 {
|
||||||
return container.FilterSlice(prs, func(pr *PullRequest) (int64, bool) {
|
return container.FilterSlice(prs, func(pr *PullRequest) (int64, bool) {
|
||||||
|
if pr.Issue == nil {
|
||||||
return pr.IssueID, pr.IssueID > 0
|
return pr.IssueID, pr.IssueID > 0
|
||||||
|
}
|
||||||
|
return 0, false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -205,6 +205,31 @@ type SearchRepoOptions struct {
|
||||||
OnlyShowRelevant bool
|
OnlyShowRelevant bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SearchOrderBy is used to sort the result
|
||||||
|
type SearchOrderBy string
|
||||||
|
|
||||||
|
func (s SearchOrderBy) String() string {
|
||||||
|
return string(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Strings for sorting result
|
||||||
|
const (
|
||||||
|
SearchOrderByAlphabetically SearchOrderBy = "name ASC"
|
||||||
|
SearchOrderByAlphabeticallyReverse SearchOrderBy = "name DESC"
|
||||||
|
SearchOrderByLeastUpdated SearchOrderBy = "updated_unix ASC"
|
||||||
|
SearchOrderByRecentUpdated SearchOrderBy = "updated_unix DESC"
|
||||||
|
SearchOrderByOldest SearchOrderBy = "created_unix ASC"
|
||||||
|
SearchOrderByNewest SearchOrderBy = "created_unix DESC"
|
||||||
|
SearchOrderBySize SearchOrderBy = "size ASC"
|
||||||
|
SearchOrderBySizeReverse SearchOrderBy = "size DESC"
|
||||||
|
SearchOrderByID SearchOrderBy = "id ASC"
|
||||||
|
SearchOrderByIDReverse SearchOrderBy = "id DESC"
|
||||||
|
SearchOrderByStars SearchOrderBy = "num_stars ASC"
|
||||||
|
SearchOrderByStarsReverse SearchOrderBy = "num_stars DESC"
|
||||||
|
SearchOrderByForks SearchOrderBy = "num_forks ASC"
|
||||||
|
SearchOrderByForksReverse SearchOrderBy = "num_forks DESC"
|
||||||
|
)
|
||||||
|
|
||||||
// UserOwnedRepoCond returns user ownered repositories
|
// UserOwnedRepoCond returns user ownered repositories
|
||||||
func UserOwnedRepoCond(userID int64) builder.Cond {
|
func UserOwnedRepoCond(userID int64) builder.Cond {
|
||||||
return builder.Eq{
|
return builder.Eq{
|
||||||
|
|
|
@ -5,48 +5,20 @@ package repo
|
||||||
|
|
||||||
import "code.gitea.io/gitea/models/db"
|
import "code.gitea.io/gitea/models/db"
|
||||||
|
|
||||||
// OrderByMap represents all possible search order
|
// SearchOrderByMap represents all possible search order
|
||||||
var OrderByMap = map[string]map[string]db.SearchOrderBy{
|
var SearchOrderByMap = map[string]map[string]db.SearchOrderBy{
|
||||||
"asc": {
|
"asc": {
|
||||||
"alpha": "owner_name ASC, name ASC",
|
"alpha": "owner_name ASC, name ASC",
|
||||||
"created": db.SearchOrderByOldest,
|
"created": db.SearchOrderByOldest,
|
||||||
"updated": db.SearchOrderByLeastUpdated,
|
"updated": db.SearchOrderByLeastUpdated,
|
||||||
"size": "size ASC",
|
"size": db.SearchOrderBySize,
|
||||||
"git_size": "git_size ASC",
|
|
||||||
"lfs_size": "lfs_size ASC",
|
|
||||||
"id": db.SearchOrderByID,
|
"id": db.SearchOrderByID,
|
||||||
"stars": db.SearchOrderByStars,
|
|
||||||
"forks": db.SearchOrderByForks,
|
|
||||||
},
|
},
|
||||||
"desc": {
|
"desc": {
|
||||||
"alpha": "owner_name DESC, name DESC",
|
"alpha": "owner_name DESC, name DESC",
|
||||||
"created": db.SearchOrderByNewest,
|
"created": db.SearchOrderByNewest,
|
||||||
"updated": db.SearchOrderByRecentUpdated,
|
"updated": db.SearchOrderByRecentUpdated,
|
||||||
"size": "size DESC",
|
"size": db.SearchOrderBySizeReverse,
|
||||||
"git_size": "git_size DESC",
|
|
||||||
"lfs_size": "lfs_size DESC",
|
|
||||||
"id": db.SearchOrderByIDReverse,
|
"id": db.SearchOrderByIDReverse,
|
||||||
"stars": db.SearchOrderByStarsReverse,
|
|
||||||
"forks": db.SearchOrderByForksReverse,
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// OrderByFlatMap is similar to OrderByMap but use human language keywords
|
|
||||||
// to decide between asc and desc
|
|
||||||
var OrderByFlatMap = map[string]db.SearchOrderBy{
|
|
||||||
"newest": OrderByMap["desc"]["created"],
|
|
||||||
"oldest": OrderByMap["asc"]["created"],
|
|
||||||
"leastupdate": OrderByMap["asc"]["updated"],
|
|
||||||
"reversealphabetically": OrderByMap["desc"]["alpha"],
|
|
||||||
"alphabetically": OrderByMap["asc"]["alpha"],
|
|
||||||
"reversesize": OrderByMap["desc"]["size"],
|
|
||||||
"size": OrderByMap["asc"]["size"],
|
|
||||||
"reversegitsize": OrderByMap["desc"]["git_size"],
|
|
||||||
"gitsize": OrderByMap["asc"]["git_size"],
|
|
||||||
"reverselfssize": OrderByMap["desc"]["lfs_size"],
|
|
||||||
"lfssize": OrderByMap["asc"]["lfs_size"],
|
|
||||||
"moststars": OrderByMap["desc"]["stars"],
|
|
||||||
"feweststars": OrderByMap["asc"]["stars"],
|
|
||||||
"mostforks": OrderByMap["desc"]["forks"],
|
|
||||||
"fewestforks": OrderByMap["asc"]["forks"],
|
|
||||||
}
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ func parseIntParam(value, param, algorithmName, config string, previousErr error
|
||||||
return parsed, previousErr // <- Keep the previous error as this function should still return an error once everything has been checked if any call failed
|
return parsed, previousErr // <- Keep the previous error as this function should still return an error once everything has been checked if any call failed
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseUIntParam(value, param, algorithmName, config string, previousErr error) (uint64, error) { //nolint:unparam
|
func parseUIntParam(value, param, algorithmName, config string, previousErr error) (uint64, error) {
|
||||||
parsed, err := strconv.ParseUint(value, 10, 64)
|
parsed, err := strconv.ParseUint(value, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("invalid integer for %s representation in %s hash spec %s", param, algorithmName, config)
|
log.Error("invalid integer for %s representation in %s hash spec %s", param, algorithmName, config)
|
||||||
|
|
32
modules/cache/cache.go
vendored
32
modules/cache/cache.go
vendored
|
@ -6,7 +6,6 @@ package cache
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
|
||||||
|
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
|
||||||
|
@ -41,37 +40,6 @@ func Init() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
|
||||||
testCacheKey = "DefaultCache.TestKey"
|
|
||||||
SlowCacheThreshold = 100 * time.Microsecond
|
|
||||||
)
|
|
||||||
|
|
||||||
func Test() (time.Duration, error) {
|
|
||||||
if conn == nil {
|
|
||||||
return 0, fmt.Errorf("default cache not initialized")
|
|
||||||
}
|
|
||||||
|
|
||||||
testData := fmt.Sprintf("%x", make([]byte, 500))
|
|
||||||
|
|
||||||
start := time.Now()
|
|
||||||
|
|
||||||
if err := conn.Delete(testCacheKey); err != nil {
|
|
||||||
return 0, fmt.Errorf("expect cache to delete data based on key if exist but got: %w", err)
|
|
||||||
}
|
|
||||||
if err := conn.Put(testCacheKey, testData, 10); err != nil {
|
|
||||||
return 0, fmt.Errorf("expect cache to store data but got: %w", err)
|
|
||||||
}
|
|
||||||
testVal := conn.Get(testCacheKey)
|
|
||||||
if testVal == nil {
|
|
||||||
return 0, fmt.Errorf("expect cache hit but got none")
|
|
||||||
}
|
|
||||||
if testVal != testData {
|
|
||||||
return 0, fmt.Errorf("expect cache to return same value as stored but got other")
|
|
||||||
}
|
|
||||||
|
|
||||||
return time.Since(start), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetCache returns the currently configured cache
|
// GetCache returns the currently configured cache
|
||||||
func GetCache() mc.Cache {
|
func GetCache() mc.Cache {
|
||||||
return conn
|
return conn
|
||||||
|
|
13
modules/cache/cache_test.go
vendored
13
modules/cache/cache_test.go
vendored
|
@ -9,7 +9,6 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
"code.gitea.io/gitea/modules/test"
|
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
@ -35,18 +34,6 @@ func TestNewContext(t *testing.T) {
|
||||||
assert.Nil(t, con)
|
assert.Nil(t, con)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestTest(t *testing.T) {
|
|
||||||
defer test.MockVariableValue(&conn, nil)()
|
|
||||||
_, err := Test()
|
|
||||||
assert.Error(t, err)
|
|
||||||
|
|
||||||
createTestCache()
|
|
||||||
elapsed, err := Test()
|
|
||||||
assert.NoError(t, err)
|
|
||||||
// mem cache should take from 300ns up to 1ms on modern hardware ...
|
|
||||||
assert.Less(t, elapsed, SlowCacheThreshold)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestGetCache(t *testing.T) {
|
func TestGetCache(t *testing.T) {
|
||||||
createTestCache()
|
createTestCache()
|
||||||
|
|
||||||
|
|
|
@ -42,19 +42,20 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
// loadGitVersion returns current Git version from shell. Internal usage only.
|
// loadGitVersion returns current Git version from shell. Internal usage only.
|
||||||
func loadGitVersion() error {
|
func loadGitVersion() (*version.Version, error) {
|
||||||
// doesn't need RWMutex because it's executed by Init()
|
// doesn't need RWMutex because it's executed by Init()
|
||||||
if gitVersion != nil {
|
if gitVersion != nil {
|
||||||
return nil
|
return gitVersion, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
stdout, _, runErr := NewCommand(DefaultContext, "version").RunStdString(nil)
|
stdout, _, runErr := NewCommand(DefaultContext, "version").RunStdString(nil)
|
||||||
if runErr != nil {
|
if runErr != nil {
|
||||||
return runErr
|
return nil, runErr
|
||||||
}
|
}
|
||||||
|
|
||||||
fields := strings.Fields(stdout)
|
fields := strings.Fields(stdout)
|
||||||
if len(fields) < 3 {
|
if len(fields) < 3 {
|
||||||
return fmt.Errorf("invalid git version output: %s", stdout)
|
return nil, fmt.Errorf("invalid git version output: %s", stdout)
|
||||||
}
|
}
|
||||||
|
|
||||||
var versionString string
|
var versionString string
|
||||||
|
@ -69,7 +70,7 @@ func loadGitVersion() error {
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
gitVersion, err = version.NewVersion(versionString)
|
gitVersion, err = version.NewVersion(versionString)
|
||||||
return err
|
return gitVersion, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetExecutablePath changes the path of git executable and checks the file permission and version.
|
// SetExecutablePath changes the path of git executable and checks the file permission and version.
|
||||||
|
@ -84,7 +85,7 @@ func SetExecutablePath(path string) error {
|
||||||
}
|
}
|
||||||
GitExecutable = absPath
|
GitExecutable = absPath
|
||||||
|
|
||||||
err = loadGitVersion()
|
_, err = loadGitVersion()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("unable to load git version: %w", err)
|
return fmt.Errorf("unable to load git version: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -311,7 +312,7 @@ func syncGitConfig() (err error) {
|
||||||
|
|
||||||
// CheckGitVersionAtLeast check git version is at least the constraint version
|
// CheckGitVersionAtLeast check git version is at least the constraint version
|
||||||
func CheckGitVersionAtLeast(atLeast string) error {
|
func CheckGitVersionAtLeast(atLeast string) error {
|
||||||
if err := loadGitVersion(); err != nil {
|
if _, err := loadGitVersion(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
atLeastVersion, err := version.NewVersion(atLeast)
|
atLeastVersion, err := version.NewVersion(atLeast)
|
||||||
|
@ -326,7 +327,7 @@ func CheckGitVersionAtLeast(atLeast string) error {
|
||||||
|
|
||||||
// CheckGitVersionEqual checks if the git version is equal to the constraint version.
|
// CheckGitVersionEqual checks if the git version is equal to the constraint version.
|
||||||
func CheckGitVersionEqual(equal string) error {
|
func CheckGitVersionEqual(equal string) error {
|
||||||
if err := loadGitVersion(); err != nil {
|
if _, err := loadGitVersion(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
atLeastVersion, err := version.NewVersion(equal)
|
atLeastVersion, err := version.NewVersion(equal)
|
||||||
|
|
|
@ -34,13 +34,13 @@ type ObjectFormat interface {
|
||||||
ComputeHash(t ObjectType, content []byte) ObjectID
|
ComputeHash(t ObjectType, content []byte) ObjectID
|
||||||
}
|
}
|
||||||
|
|
||||||
func computeHash(dst []byte, hasher hash.Hash, t ObjectType, content []byte) {
|
func computeHash(dst []byte, hasher hash.Hash, t ObjectType, content []byte) []byte {
|
||||||
_, _ = hasher.Write(t.Bytes())
|
_, _ = hasher.Write(t.Bytes())
|
||||||
_, _ = hasher.Write([]byte(" "))
|
_, _ = hasher.Write([]byte(" "))
|
||||||
_, _ = hasher.Write([]byte(strconv.Itoa(len(content))))
|
_, _ = hasher.Write([]byte(strconv.Itoa(len(content))))
|
||||||
_, _ = hasher.Write([]byte{0})
|
_, _ = hasher.Write([]byte{0})
|
||||||
_, _ = hasher.Write(content)
|
_, _ = hasher.Write(content)
|
||||||
hasher.Sum(dst)
|
return hasher.Sum(dst)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SHA1 Type */
|
/* SHA1 Type */
|
||||||
|
|
|
@ -38,12 +38,6 @@ func ToSearchOptions(keyword string, opts *issues_model.IssuesOptions) *SearchOp
|
||||||
searchOpt.MilestoneIDs = opts.MilestoneIDs
|
searchOpt.MilestoneIDs = opts.MilestoneIDs
|
||||||
}
|
}
|
||||||
|
|
||||||
if opts.ProjectID > 0 {
|
|
||||||
searchOpt.ProjectID = optional.Some(opts.ProjectID)
|
|
||||||
} else if opts.ProjectID == -1 { // FIXME: this is inconsistent from other places
|
|
||||||
searchOpt.ProjectID = optional.Some[int64](0) // Those issues with no project(projectid==0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// See the comment of issues_model.SearchOptions for the reason why we need to convert
|
// See the comment of issues_model.SearchOptions for the reason why we need to convert
|
||||||
convertID := func(id int64) optional.Option[int64] {
|
convertID := func(id int64) optional.Option[int64] {
|
||||||
if id > 0 {
|
if id > 0 {
|
||||||
|
@ -55,6 +49,7 @@ func ToSearchOptions(keyword string, opts *issues_model.IssuesOptions) *SearchOp
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
searchOpt.ProjectID = convertID(opts.ProjectID)
|
||||||
searchOpt.ProjectColumnID = convertID(opts.ProjectColumnID)
|
searchOpt.ProjectColumnID = convertID(opts.ProjectColumnID)
|
||||||
searchOpt.PosterID = convertID(opts.PosterID)
|
searchOpt.PosterID = convertID(opts.PosterID)
|
||||||
searchOpt.AssigneeID = convertID(opts.AssigneeID)
|
searchOpt.AssigneeID = convertID(opts.AssigneeID)
|
||||||
|
|
|
@ -211,7 +211,7 @@ func createRequest(ctx context.Context, method, url string, headers map[string]s
|
||||||
for key, value := range headers {
|
for key, value := range headers {
|
||||||
req.Header.Set(key, value)
|
req.Header.Set(key, value)
|
||||||
}
|
}
|
||||||
req.Header.Set("Accept", AcceptHeader)
|
req.Header.Set("Accept", MediaType)
|
||||||
|
|
||||||
return req, nil
|
return req, nil
|
||||||
}
|
}
|
||||||
|
@ -251,6 +251,6 @@ func handleErrorResponse(resp *http.Response) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Trace("ErrorResponse(%v): %v", resp.Status, er)
|
log.Trace("ErrorResponse: %v", er)
|
||||||
return errors.New(er.Message)
|
return errors.New(er.Message)
|
||||||
}
|
}
|
||||||
|
|
|
@ -155,7 +155,7 @@ func TestHTTPClientDownload(t *testing.T) {
|
||||||
hc := &http.Client{Transport: RoundTripFunc(func(req *http.Request) *http.Response {
|
hc := &http.Client{Transport: RoundTripFunc(func(req *http.Request) *http.Response {
|
||||||
assert.Equal(t, "POST", req.Method)
|
assert.Equal(t, "POST", req.Method)
|
||||||
assert.Equal(t, MediaType, req.Header.Get("Content-type"))
|
assert.Equal(t, MediaType, req.Header.Get("Content-type"))
|
||||||
assert.Equal(t, AcceptHeader, req.Header.Get("Accept"))
|
assert.Equal(t, MediaType, req.Header.Get("Accept"))
|
||||||
|
|
||||||
var batchRequest BatchRequest
|
var batchRequest BatchRequest
|
||||||
err := json.NewDecoder(req.Body).Decode(&batchRequest)
|
err := json.NewDecoder(req.Body).Decode(&batchRequest)
|
||||||
|
@ -263,7 +263,7 @@ func TestHTTPClientUpload(t *testing.T) {
|
||||||
hc := &http.Client{Transport: RoundTripFunc(func(req *http.Request) *http.Response {
|
hc := &http.Client{Transport: RoundTripFunc(func(req *http.Request) *http.Response {
|
||||||
assert.Equal(t, "POST", req.Method)
|
assert.Equal(t, "POST", req.Method)
|
||||||
assert.Equal(t, MediaType, req.Header.Get("Content-type"))
|
assert.Equal(t, MediaType, req.Header.Get("Content-type"))
|
||||||
assert.Equal(t, AcceptHeader, req.Header.Get("Accept"))
|
assert.Equal(t, MediaType, req.Header.Get("Accept"))
|
||||||
|
|
||||||
var batchRequest BatchRequest
|
var batchRequest BatchRequest
|
||||||
err := json.NewDecoder(req.Body).Decode(&batchRequest)
|
err := json.NewDecoder(req.Body).Decode(&batchRequest)
|
||||||
|
|
|
@ -10,8 +10,6 @@ import (
|
||||||
const (
|
const (
|
||||||
// MediaType contains the media type for LFS server requests
|
// MediaType contains the media type for LFS server requests
|
||||||
MediaType = "application/vnd.git-lfs+json"
|
MediaType = "application/vnd.git-lfs+json"
|
||||||
// Some LFS servers offer content with other types, so fallback to '*/*' if application/vnd.git-lfs+json cannot be served
|
|
||||||
AcceptHeader = "application/vnd.git-lfs+json;q=0.9, */*;q=0.8"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// BatchRequest contains multiple requests processed in one batch operation.
|
// BatchRequest contains multiple requests processed in one batch operation.
|
||||||
|
|
|
@ -37,7 +37,6 @@ func (a *BasicTransferAdapter) Download(ctx context.Context, l *Link) (io.ReadCl
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
log.Debug("Download Request: %+v", req)
|
|
||||||
resp, err := performRequest(ctx, a.client, req)
|
resp, err := performRequest(ctx, a.client, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -26,7 +26,7 @@ func TestBasicTransferAdapter(t *testing.T) {
|
||||||
p := Pointer{Oid: "b5a2c96250612366ea272ffac6d9744aaf4b45aacd96aa7cfcb931ee3b558259", Size: 5}
|
p := Pointer{Oid: "b5a2c96250612366ea272ffac6d9744aaf4b45aacd96aa7cfcb931ee3b558259", Size: 5}
|
||||||
|
|
||||||
roundTripHandler := func(req *http.Request) *http.Response {
|
roundTripHandler := func(req *http.Request) *http.Response {
|
||||||
assert.Equal(t, AcceptHeader, req.Header.Get("Accept"))
|
assert.Equal(t, MediaType, req.Header.Get("Accept"))
|
||||||
assert.Equal(t, "test-value", req.Header.Get("test-header"))
|
assert.Equal(t, "test-value", req.Header.Get("test-header"))
|
||||||
|
|
||||||
url := req.URL.String()
|
url := req.URL.String()
|
||||||
|
|
|
@ -48,7 +48,7 @@ var (
|
||||||
// hashCurrentPattern matches string that represents a commit SHA, e.g. d8a994ef243349f321568f9e36d5c3f444b99cae
|
// hashCurrentPattern matches string that represents a commit SHA, e.g. d8a994ef243349f321568f9e36d5c3f444b99cae
|
||||||
// Although SHA1 hashes are 40 chars long, SHA256 are 64, the regex matches the hash from 7 to 64 chars in length
|
// Although SHA1 hashes are 40 chars long, SHA256 are 64, the regex matches the hash from 7 to 64 chars in length
|
||||||
// so that abbreviated hash links can be used as well. This matches git and GitHub usability.
|
// so that abbreviated hash links can be used as well. This matches git and GitHub usability.
|
||||||
hashCurrentPattern = regexp.MustCompile(`(?:\s|^|\(|\[)([0-9a-f]{7,64})(?:\s|$|\)|\]|[.,:](\s|$))`)
|
hashCurrentPattern = regexp.MustCompile(`(?:\s|^|\(|\[)([0-9a-f]{7,64})(?:\s|$|\)|\]|[.,](\s|$))`)
|
||||||
|
|
||||||
// shortLinkPattern matches short but difficult to parse [[name|link|arg=test]] syntax
|
// shortLinkPattern matches short but difficult to parse [[name|link|arg=test]] syntax
|
||||||
shortLinkPattern = regexp.MustCompile(`\[\[(.*?)\]\](\w*)`)
|
shortLinkPattern = regexp.MustCompile(`\[\[(.*?)\]\](\w*)`)
|
||||||
|
@ -143,6 +143,20 @@ func CustomLinkURLSchemes(schemes []string) {
|
||||||
common.LinkRegex, _ = xurls.StrictMatchingScheme(strings.Join(withAuth, "|"))
|
common.LinkRegex, _ = xurls.StrictMatchingScheme(strings.Join(withAuth, "|"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsSameDomain checks if given url string has the same hostname as current Gitea instance
|
||||||
|
func IsSameDomain(s string) bool {
|
||||||
|
if strings.HasPrefix(s, "/") {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if uapp, err := url.Parse(setting.AppURL); err == nil {
|
||||||
|
if u, err := url.Parse(s); err == nil {
|
||||||
|
return u.Host == uapp.Host
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
type postProcessError struct {
|
type postProcessError struct {
|
||||||
context string
|
context string
|
||||||
err error
|
err error
|
||||||
|
@ -379,7 +393,7 @@ func visitNode(ctx *RenderContext, procs []processor, node *html.Node) {
|
||||||
// We ignore code and pre.
|
// We ignore code and pre.
|
||||||
switch node.Type {
|
switch node.Type {
|
||||||
case html.TextNode:
|
case html.TextNode:
|
||||||
processTextNodes(ctx, procs, node)
|
textNode(ctx, procs, node)
|
||||||
case html.ElementNode:
|
case html.ElementNode:
|
||||||
if node.Data == "img" {
|
if node.Data == "img" {
|
||||||
for i, attr := range node.Attr {
|
for i, attr := range node.Attr {
|
||||||
|
@ -422,16 +436,15 @@ func visitNode(ctx *RenderContext, procs []processor, node *html.Node) {
|
||||||
for n := node.FirstChild; n != nil; n = n.NextSibling {
|
for n := node.FirstChild; n != nil; n = n.NextSibling {
|
||||||
visitNode(ctx, procs, n)
|
visitNode(ctx, procs, n)
|
||||||
}
|
}
|
||||||
default:
|
|
||||||
}
|
}
|
||||||
// ignore everything else
|
// ignore everything else
|
||||||
}
|
}
|
||||||
|
|
||||||
// processTextNodes runs the passed node through various processors, in order to handle
|
// textNode runs the passed node through various processors, in order to handle
|
||||||
// all kinds of special links handled by the post-processing.
|
// all kinds of special links handled by the post-processing.
|
||||||
func processTextNodes(ctx *RenderContext, procs []processor, node *html.Node) {
|
func textNode(ctx *RenderContext, procs []processor, node *html.Node) {
|
||||||
for _, p := range procs {
|
for _, processor := range procs {
|
||||||
p(ctx, node)
|
processor(ctx, node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -381,7 +381,6 @@ func TestRegExp_sha1CurrentPattern(t *testing.T) {
|
||||||
"(abcdefabcdefabcdefabcdefabcdefabcdefabcd)",
|
"(abcdefabcdefabcdefabcdefabcdefabcdefabcd)",
|
||||||
"[abcdefabcdefabcdefabcdefabcdefabcdefabcd]",
|
"[abcdefabcdefabcdefabcdefabcdefabcdefabcd]",
|
||||||
"abcdefabcdefabcdefabcdefabcdefabcdefabcd.",
|
"abcdefabcdefabcdefabcdefabcdefabcdefabcd.",
|
||||||
"abcdefabcdefabcdefabcdefabcdefabcdefabcd:",
|
|
||||||
}
|
}
|
||||||
falseTestCases := []string{
|
falseTestCases := []string{
|
||||||
"test",
|
"test",
|
||||||
|
|
|
@ -135,6 +135,17 @@ func TestRender_CrossReferences(t *testing.T) {
|
||||||
`<p><a href="`+urlWithQuery+`" rel="nofollow"><code>`+sha[:10]+`/README.md (L1-L5)</code></a></p>`)
|
`<p><a href="`+urlWithQuery+`" rel="nofollow"><code>`+sha[:10]+`/README.md (L1-L5)</code></a></p>`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMisc_IsSameDomain(t *testing.T) {
|
||||||
|
setting.AppURL = markup.TestAppURL
|
||||||
|
|
||||||
|
sha := "b6dd6210eaebc915fd5be5579c58cce4da2e2579"
|
||||||
|
commit := util.URLJoin(markup.TestRepoURL, "commit", sha)
|
||||||
|
|
||||||
|
assert.True(t, markup.IsSameDomain(commit))
|
||||||
|
assert.False(t, markup.IsSameDomain("http://google.com/ncr"))
|
||||||
|
assert.False(t, markup.IsSameDomain("favicon.ico"))
|
||||||
|
}
|
||||||
|
|
||||||
func TestRender_links(t *testing.T) {
|
func TestRender_links(t *testing.T) {
|
||||||
setting.AppURL = markup.TestAppURL
|
setting.AppURL = markup.TestAppURL
|
||||||
|
|
||||||
|
|
|
@ -548,10 +548,6 @@ func TestMathBlock(t *testing.T) {
|
||||||
`$$a`,
|
`$$a`,
|
||||||
`<p>$$a</p>` + nl,
|
`<p>$$a</p>` + nl,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"$a$ ($b$) [$c$] {$d$}",
|
|
||||||
`<p><code class="language-math is-loading">a</code> (<code class="language-math is-loading">b</code>) [$c$] {$d$}</p>` + nl,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range testcases {
|
for _, test := range testcases {
|
||||||
|
|
|
@ -45,10 +45,6 @@ func isPunctuation(b byte) bool {
|
||||||
return b == '.' || b == '!' || b == '?' || b == ',' || b == ';' || b == ':'
|
return b == '.' || b == '!' || b == '?' || b == ',' || b == ';' || b == ':'
|
||||||
}
|
}
|
||||||
|
|
||||||
func isBracket(b byte) bool {
|
|
||||||
return b == ')'
|
|
||||||
}
|
|
||||||
|
|
||||||
func isAlphanumeric(b byte) bool {
|
func isAlphanumeric(b byte) bool {
|
||||||
return (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || (b >= '0' && b <= '9')
|
return (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || (b >= '0' && b <= '9')
|
||||||
}
|
}
|
||||||
|
@ -88,7 +84,7 @@ func (parser *inlineParser) Parse(parent ast.Node, block text.Reader, pc parser.
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
suceedingCharacter := line[pos]
|
suceedingCharacter := line[pos]
|
||||||
if !isPunctuation(suceedingCharacter) && !(suceedingCharacter == ' ') && !isBracket(suceedingCharacter) {
|
if !isPunctuation(suceedingCharacter) && !(suceedingCharacter == ' ') {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if line[ender-1] != '\\' {
|
if line[ender-1] != '\\' {
|
||||||
|
|
|
@ -9,9 +9,9 @@ import (
|
||||||
|
|
||||||
"code.gitea.io/gitea/modules/container"
|
"code.gitea.io/gitea/modules/container"
|
||||||
"code.gitea.io/gitea/modules/markup/common"
|
"code.gitea.io/gitea/modules/markup/common"
|
||||||
"code.gitea.io/gitea/modules/util"
|
|
||||||
|
|
||||||
"github.com/yuin/goldmark/ast"
|
"github.com/yuin/goldmark/ast"
|
||||||
|
"github.com/yuin/goldmark/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
type prefixedIDs struct {
|
type prefixedIDs struct {
|
||||||
|
@ -36,7 +36,7 @@ func (p *prefixedIDs) GenerateWithDefault(value, dft []byte) []byte {
|
||||||
if !bytes.HasPrefix(result, []byte("user-content-")) {
|
if !bytes.HasPrefix(result, []byte("user-content-")) {
|
||||||
result = append([]byte("user-content-"), result...)
|
result = append([]byte("user-content-"), result...)
|
||||||
}
|
}
|
||||||
if p.values.Add(util.UnsafeBytesToString(result)) {
|
if p.values.Add(util.BytesToReadOnlyString(result)) {
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
for i := 1; ; i++ {
|
for i := 1; ; i++ {
|
||||||
|
@ -49,7 +49,7 @@ func (p *prefixedIDs) GenerateWithDefault(value, dft []byte) []byte {
|
||||||
|
|
||||||
// Put puts a given element id to the used ids table.
|
// Put puts a given element id to the used ids table.
|
||||||
func (p *prefixedIDs) Put(value []byte) {
|
func (p *prefixedIDs) Put(value []byte) {
|
||||||
p.values.Add(util.UnsafeBytesToString(value))
|
p.values.Add(util.BytesToReadOnlyString(value))
|
||||||
}
|
}
|
||||||
|
|
||||||
func newPrefixedIDs() *prefixedIDs {
|
func newPrefixedIDs() *prefixedIDs {
|
||||||
|
|
|
@ -48,7 +48,7 @@ func (r *HTMLRenderer) renderCodeSpan(w util.BufWriter, source []byte, n ast.Nod
|
||||||
return ast.WalkContinue, nil
|
return ast.WalkContinue, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *ASTTransformer) transformCodeSpan(_ *markup.RenderContext, v *ast.CodeSpan, reader text.Reader) {
|
func (g *ASTTransformer) transformCodeSpan(ctx *markup.RenderContext, v *ast.CodeSpan, reader text.Reader) {
|
||||||
colorContent := v.Text(reader.Source())
|
colorContent := v.Text(reader.Source())
|
||||||
if matchColor(strings.ToLower(string(colorContent))) {
|
if matchColor(strings.ToLower(string(colorContent))) {
|
||||||
v.AppendChild(v, NewColorPreview(colorContent))
|
v.AppendChild(v, NewColorPreview(colorContent))
|
||||||
|
|
|
@ -7,10 +7,10 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"code.gitea.io/gitea/modules/markup"
|
"code.gitea.io/gitea/modules/markup"
|
||||||
"code.gitea.io/gitea/modules/util"
|
|
||||||
|
|
||||||
"github.com/yuin/goldmark/ast"
|
"github.com/yuin/goldmark/ast"
|
||||||
"github.com/yuin/goldmark/text"
|
"github.com/yuin/goldmark/text"
|
||||||
|
"github.com/yuin/goldmark/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (g *ASTTransformer) transformHeading(_ *markup.RenderContext, v *ast.Heading, reader text.Reader, tocList *[]markup.Header) {
|
func (g *ASTTransformer) transformHeading(_ *markup.RenderContext, v *ast.Heading, reader text.Reader, tocList *[]markup.Header) {
|
||||||
|
@ -21,11 +21,11 @@ func (g *ASTTransformer) transformHeading(_ *markup.RenderContext, v *ast.Headin
|
||||||
}
|
}
|
||||||
txt := v.Text(reader.Source())
|
txt := v.Text(reader.Source())
|
||||||
header := markup.Header{
|
header := markup.Header{
|
||||||
Text: util.UnsafeBytesToString(txt),
|
Text: util.BytesToReadOnlyString(txt),
|
||||||
Level: v.Level,
|
Level: v.Level,
|
||||||
}
|
}
|
||||||
if id, found := v.AttributeString("id"); found {
|
if id, found := v.AttributeString("id"); found {
|
||||||
header.ID = util.UnsafeBytesToString(id.([]byte))
|
header.ID = util.BytesToReadOnlyString(id.([]byte))
|
||||||
}
|
}
|
||||||
*tocList = append(*tocList, header)
|
*tocList = append(*tocList, header)
|
||||||
g.applyElementDir(v)
|
g.applyElementDir(v)
|
||||||
|
|
|
@ -6,7 +6,6 @@ package composer
|
||||||
import (
|
import (
|
||||||
"archive/zip"
|
"archive/zip"
|
||||||
"io"
|
"io"
|
||||||
"path"
|
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
@ -37,14 +36,10 @@ type Package struct {
|
||||||
Metadata *Metadata
|
Metadata *Metadata
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://getcomposer.org/doc/04-schema.md
|
|
||||||
|
|
||||||
// Metadata represents the metadata of a Composer package
|
// Metadata represents the metadata of a Composer package
|
||||||
type Metadata struct {
|
type Metadata struct {
|
||||||
Description string `json:"description,omitempty"`
|
Description string `json:"description,omitempty"`
|
||||||
Readme string `json:"readme,omitempty"`
|
|
||||||
Keywords []string `json:"keywords,omitempty"`
|
Keywords []string `json:"keywords,omitempty"`
|
||||||
Comments Comments `json:"_comments,omitempty"`
|
|
||||||
Homepage string `json:"homepage,omitempty"`
|
Homepage string `json:"homepage,omitempty"`
|
||||||
License Licenses `json:"license,omitempty"`
|
License Licenses `json:"license,omitempty"`
|
||||||
Authors []Author `json:"authors,omitempty"`
|
Authors []Author `json:"authors,omitempty"`
|
||||||
|
@ -79,28 +74,6 @@ func (l *Licenses) UnmarshalJSON(data []byte) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Comments represents the comments of a Composer package
|
|
||||||
type Comments []string
|
|
||||||
|
|
||||||
// UnmarshalJSON reads from a string or array
|
|
||||||
func (c *Comments) UnmarshalJSON(data []byte) error {
|
|
||||||
switch data[0] {
|
|
||||||
case '"':
|
|
||||||
var value string
|
|
||||||
if err := json.Unmarshal(data, &value); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
*c = Comments{value}
|
|
||||||
case '[':
|
|
||||||
values := make([]string, 0, 5)
|
|
||||||
if err := json.Unmarshal(data, &values); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
*c = Comments(values)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Author represents an author
|
// Author represents an author
|
||||||
type Author struct {
|
type Author struct {
|
||||||
Name string `json:"name,omitempty"`
|
Name string `json:"name,omitempty"`
|
||||||
|
@ -128,14 +101,14 @@ func ParsePackage(r io.ReaderAt, size int64) (*Package, error) {
|
||||||
}
|
}
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
return ParseComposerFile(archive, path.Dir(file.Name), f)
|
return ParseComposerFile(f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil, ErrMissingComposerFile
|
return nil, ErrMissingComposerFile
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseComposerFile parses a composer.json file to retrieve the metadata of a Composer package
|
// ParseComposerFile parses a composer.json file to retrieve the metadata of a Composer package
|
||||||
func ParseComposerFile(archive *zip.Reader, pathPrefix string, r io.Reader) (*Package, error) {
|
func ParseComposerFile(r io.Reader) (*Package, error) {
|
||||||
var cj struct {
|
var cj struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Version string `json:"version"`
|
Version string `json:"version"`
|
||||||
|
@ -164,19 +137,6 @@ func ParseComposerFile(archive *zip.Reader, pathPrefix string, r io.Reader) (*Pa
|
||||||
cj.Type = "library"
|
cj.Type = "library"
|
||||||
}
|
}
|
||||||
|
|
||||||
if cj.Readme == "" {
|
|
||||||
cj.Readme = "README.md"
|
|
||||||
}
|
|
||||||
f, err := archive.Open(path.Join(pathPrefix, cj.Readme))
|
|
||||||
if err == nil {
|
|
||||||
// 10kb limit for readme content
|
|
||||||
buf, _ := io.ReadAll(io.LimitReader(f, 10*1024))
|
|
||||||
cj.Readme = string(buf)
|
|
||||||
_ = f.Close()
|
|
||||||
} else {
|
|
||||||
cj.Readme = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
return &Package{
|
return &Package{
|
||||||
Name: cj.Name,
|
Name: cj.Name,
|
||||||
Version: cj.Version,
|
Version: cj.Version,
|
||||||
|
|
|
@ -17,8 +17,6 @@ import (
|
||||||
const (
|
const (
|
||||||
name = "gitea/composer-package"
|
name = "gitea/composer-package"
|
||||||
description = "Package Description"
|
description = "Package Description"
|
||||||
readme = "Package Readme"
|
|
||||||
comments = "Package Comment"
|
|
||||||
packageType = "composer-plugin"
|
packageType = "composer-plugin"
|
||||||
author = "Gitea Authors"
|
author = "Gitea Authors"
|
||||||
email = "no.reply@gitea.io"
|
email = "no.reply@gitea.io"
|
||||||
|
@ -43,8 +41,7 @@ const composerContent = `{
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2 || ^8.0"
|
"php": ">=7.2 || ^8.0"
|
||||||
},
|
}
|
||||||
"_comments": "` + comments + `"
|
|
||||||
}`
|
}`
|
||||||
|
|
||||||
func TestLicenseUnmarshal(t *testing.T) {
|
func TestLicenseUnmarshal(t *testing.T) {
|
||||||
|
@ -57,30 +54,18 @@ func TestLicenseUnmarshal(t *testing.T) {
|
||||||
assert.Equal(t, "MIT", l[0])
|
assert.Equal(t, "MIT", l[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCommentsUnmarshal(t *testing.T) {
|
|
||||||
var c Comments
|
|
||||||
assert.NoError(t, json.NewDecoder(strings.NewReader(`["comment"]`)).Decode(&c))
|
|
||||||
assert.Len(t, c, 1)
|
|
||||||
assert.Equal(t, "comment", c[0])
|
|
||||||
assert.NoError(t, json.NewDecoder(strings.NewReader(`"comment"`)).Decode(&c))
|
|
||||||
assert.Len(t, c, 1)
|
|
||||||
assert.Equal(t, "comment", c[0])
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestParsePackage(t *testing.T) {
|
func TestParsePackage(t *testing.T) {
|
||||||
createArchive := func(files map[string]string) []byte {
|
createArchive := func(name, content string) []byte {
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
archive := zip.NewWriter(&buf)
|
archive := zip.NewWriter(&buf)
|
||||||
for name, content := range files {
|
|
||||||
w, _ := archive.Create(name)
|
w, _ := archive.Create(name)
|
||||||
w.Write([]byte(content))
|
w.Write([]byte(content))
|
||||||
}
|
|
||||||
archive.Close()
|
archive.Close()
|
||||||
return buf.Bytes()
|
return buf.Bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Run("MissingComposerFile", func(t *testing.T) {
|
t.Run("MissingComposerFile", func(t *testing.T) {
|
||||||
data := createArchive(map[string]string{"dummy.txt": ""})
|
data := createArchive("dummy.txt", "")
|
||||||
|
|
||||||
cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
|
cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
|
||||||
assert.Nil(t, cp)
|
assert.Nil(t, cp)
|
||||||
|
@ -88,7 +73,7 @@ func TestParsePackage(t *testing.T) {
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("MissingComposerFileInRoot", func(t *testing.T) {
|
t.Run("MissingComposerFileInRoot", func(t *testing.T) {
|
||||||
data := createArchive(map[string]string{"sub/sub/composer.json": ""})
|
data := createArchive("sub/sub/composer.json", "")
|
||||||
|
|
||||||
cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
|
cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
|
||||||
assert.Nil(t, cp)
|
assert.Nil(t, cp)
|
||||||
|
@ -96,52 +81,43 @@ func TestParsePackage(t *testing.T) {
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("InvalidComposerFile", func(t *testing.T) {
|
t.Run("InvalidComposerFile", func(t *testing.T) {
|
||||||
data := createArchive(map[string]string{"composer.json": ""})
|
data := createArchive("composer.json", "")
|
||||||
|
|
||||||
cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
|
cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
|
||||||
assert.Nil(t, cp)
|
assert.Nil(t, cp)
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("InvalidPackageName", func(t *testing.T) {
|
t.Run("Valid", func(t *testing.T) {
|
||||||
data := createArchive(map[string]string{"composer.json": "{}"})
|
data := createArchive("composer.json", composerContent)
|
||||||
|
|
||||||
cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
|
cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.NotNil(t, cp)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestParseComposerFile(t *testing.T) {
|
||||||
|
t.Run("InvalidPackageName", func(t *testing.T) {
|
||||||
|
cp, err := ParseComposerFile(strings.NewReader(`{}`))
|
||||||
assert.Nil(t, cp)
|
assert.Nil(t, cp)
|
||||||
assert.ErrorIs(t, err, ErrInvalidName)
|
assert.ErrorIs(t, err, ErrInvalidName)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("InvalidPackageVersion", func(t *testing.T) {
|
t.Run("InvalidPackageVersion", func(t *testing.T) {
|
||||||
data := createArchive(map[string]string{"composer.json": `{"name": "gitea/composer-package", "version": "1.a.3"}`})
|
cp, err := ParseComposerFile(strings.NewReader(`{"name": "gitea/composer-package", "version": "1.a.3"}`))
|
||||||
|
|
||||||
cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
|
|
||||||
assert.Nil(t, cp)
|
assert.Nil(t, cp)
|
||||||
assert.ErrorIs(t, err, ErrInvalidVersion)
|
assert.ErrorIs(t, err, ErrInvalidVersion)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("InvalidReadmePath", func(t *testing.T) {
|
|
||||||
data := createArchive(map[string]string{"composer.json": `{"name": "gitea/composer-package", "readme": "sub/README.md"}`})
|
|
||||||
|
|
||||||
cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.NotNil(t, cp)
|
|
||||||
|
|
||||||
assert.Empty(t, cp.Metadata.Readme)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("Valid", func(t *testing.T) {
|
t.Run("Valid", func(t *testing.T) {
|
||||||
data := createArchive(map[string]string{"composer.json": composerContent, "README.md": readme})
|
cp, err := ParseComposerFile(strings.NewReader(composerContent))
|
||||||
|
|
||||||
cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
|
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.NotNil(t, cp)
|
assert.NotNil(t, cp)
|
||||||
|
|
||||||
assert.Equal(t, name, cp.Name)
|
assert.Equal(t, name, cp.Name)
|
||||||
assert.Empty(t, cp.Version)
|
assert.Empty(t, cp.Version)
|
||||||
assert.Equal(t, description, cp.Metadata.Description)
|
assert.Equal(t, description, cp.Metadata.Description)
|
||||||
assert.Equal(t, readme, cp.Metadata.Readme)
|
|
||||||
assert.Len(t, cp.Metadata.Comments, 1)
|
|
||||||
assert.Equal(t, comments, cp.Metadata.Comments[0])
|
|
||||||
assert.Len(t, cp.Metadata.Authors, 1)
|
assert.Len(t, cp.Metadata.Authors, 1)
|
||||||
assert.Equal(t, author, cp.Metadata.Authors[0].Name)
|
assert.Equal(t, author, cp.Metadata.Authors[0].Name)
|
||||||
assert.Equal(t, email, cp.Metadata.Authors[0].Email)
|
assert.Equal(t, email, cp.Metadata.Authors[0].Email)
|
||||||
|
|
|
@ -185,6 +185,8 @@ func ParseDescription(r io.Reader) (*Package, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func setField(p *Package, data string) error {
|
func setField(p *Package, data string) error {
|
||||||
|
const listDelimiter = ", "
|
||||||
|
|
||||||
if data == "" {
|
if data == "" {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -213,19 +215,19 @@ func setField(p *Package, data string) error {
|
||||||
case "Description":
|
case "Description":
|
||||||
p.Metadata.Description = value
|
p.Metadata.Description = value
|
||||||
case "URL":
|
case "URL":
|
||||||
p.Metadata.ProjectURL = splitAndTrim(value)
|
p.Metadata.ProjectURL = splitAndTrim(value, listDelimiter)
|
||||||
case "License":
|
case "License":
|
||||||
p.Metadata.License = value
|
p.Metadata.License = value
|
||||||
case "Author":
|
case "Author":
|
||||||
p.Metadata.Authors = splitAndTrim(authorReplacePattern.ReplaceAllString(value, ""))
|
p.Metadata.Authors = splitAndTrim(authorReplacePattern.ReplaceAllString(value, ""), listDelimiter)
|
||||||
case "Depends":
|
case "Depends":
|
||||||
p.Metadata.Depends = splitAndTrim(value)
|
p.Metadata.Depends = splitAndTrim(value, listDelimiter)
|
||||||
case "Imports":
|
case "Imports":
|
||||||
p.Metadata.Imports = splitAndTrim(value)
|
p.Metadata.Imports = splitAndTrim(value, listDelimiter)
|
||||||
case "Suggests":
|
case "Suggests":
|
||||||
p.Metadata.Suggests = splitAndTrim(value)
|
p.Metadata.Suggests = splitAndTrim(value, listDelimiter)
|
||||||
case "LinkingTo":
|
case "LinkingTo":
|
||||||
p.Metadata.LinkingTo = splitAndTrim(value)
|
p.Metadata.LinkingTo = splitAndTrim(value, listDelimiter)
|
||||||
case "NeedsCompilation":
|
case "NeedsCompilation":
|
||||||
p.Metadata.NeedsCompilation = value == "yes"
|
p.Metadata.NeedsCompilation = value == "yes"
|
||||||
}
|
}
|
||||||
|
@ -233,8 +235,8 @@ func setField(p *Package, data string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func splitAndTrim(s string) []string {
|
func splitAndTrim(s, sep string) []string {
|
||||||
items := strings.Split(s, ", ")
|
items := strings.Split(s, sep)
|
||||||
for i := range items {
|
for i := range items {
|
||||||
items[i] = strings.TrimSpace(items[i])
|
items[i] = strings.TrimSpace(items[i])
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,8 @@ import (
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/markup/mdstripper"
|
"code.gitea.io/gitea/modules/markup/mdstripper"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
"code.gitea.io/gitea/modules/util"
|
|
||||||
|
"github.com/yuin/goldmark/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -340,7 +341,7 @@ func FindRenderizableReferenceNumeric(content string, prOnly, crossLinkOnly bool
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
r := getCrossReference(util.UnsafeStringToBytes(content), match[2], match[3], false, prOnly)
|
r := getCrossReference(util.StringToReadOnlyBytes(content), match[2], match[3], false, prOnly)
|
||||||
if r == nil {
|
if r == nil {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,7 +97,7 @@ func decodeEnvSectionKey(encoded string) (ok bool, section, key string) {
|
||||||
|
|
||||||
// decodeEnvironmentKey decode the environment key to section and key
|
// decodeEnvironmentKey decode the environment key to section and key
|
||||||
// The environment key is in the form of GITEA__SECTION__KEY or GITEA__SECTION__KEY__FILE
|
// The environment key is in the form of GITEA__SECTION__KEY or GITEA__SECTION__KEY__FILE
|
||||||
func decodeEnvironmentKey(prefixRegexp *regexp.Regexp, suffixFile, envKey string) (ok bool, section, key string, useFileValue bool) { //nolint:unparam
|
func decodeEnvironmentKey(prefixRegexp *regexp.Regexp, suffixFile, envKey string) (ok bool, section, key string, useFileValue bool) {
|
||||||
if strings.HasSuffix(envKey, suffixFile) {
|
if strings.HasSuffix(envKey, suffixFile) {
|
||||||
useFileValue = true
|
useFileValue = true
|
||||||
envKey = envKey[:len(envKey)-len(suffixFile)]
|
envKey = envKey[:len(envKey)-len(suffixFile)]
|
||||||
|
|
|
@ -122,7 +122,7 @@ const (
|
||||||
targetSecIsSec // target section is from the name seciont [name]
|
targetSecIsSec // target section is from the name seciont [name]
|
||||||
)
|
)
|
||||||
|
|
||||||
func getStorageSectionByType(rootCfg ConfigProvider, typ string) (ConfigSection, targetSecType, error) { //nolint:unparam
|
func getStorageSectionByType(rootCfg ConfigProvider, typ string) (ConfigSection, targetSecType, error) {
|
||||||
targetSec, err := rootCfg.GetSection(storageSectionName + "." + typ)
|
targetSec, err := rootCfg.GetSection(storageSectionName + "." + typ)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !IsValidStorageType(StorageType(typ)) {
|
if !IsValidStorageType(StorageType(typ)) {
|
||||||
|
|
|
@ -24,7 +24,7 @@ type Team struct {
|
||||||
// CreateTeamOption options for creating a team
|
// CreateTeamOption options for creating a team
|
||||||
type CreateTeamOption struct {
|
type CreateTeamOption struct {
|
||||||
// required: true
|
// required: true
|
||||||
Name string `json:"name" binding:"Required;AlphaDashDot;MaxSize(255)"`
|
Name string `json:"name" binding:"Required;AlphaDashDot;MaxSize(30)"`
|
||||||
Description string `json:"description" binding:"MaxSize(255)"`
|
Description string `json:"description" binding:"MaxSize(255)"`
|
||||||
IncludesAllRepositories bool `json:"includes_all_repositories"`
|
IncludesAllRepositories bool `json:"includes_all_repositories"`
|
||||||
// enum: read,write,admin
|
// enum: read,write,admin
|
||||||
|
@ -40,7 +40,7 @@ type CreateTeamOption struct {
|
||||||
// EditTeamOption options for editing a team
|
// EditTeamOption options for editing a team
|
||||||
type EditTeamOption struct {
|
type EditTeamOption struct {
|
||||||
// required: true
|
// required: true
|
||||||
Name string `json:"name" binding:"AlphaDashDot;MaxSize(255)"`
|
Name string `json:"name" binding:"AlphaDashDot;MaxSize(30)"`
|
||||||
Description *string `json:"description" binding:"MaxSize(255)"`
|
Description *string `json:"description" binding:"MaxSize(255)"`
|
||||||
IncludesAllRepositories *bool `json:"includes_all_repositories"`
|
IncludesAllRepositories *bool `json:"includes_all_repositories"`
|
||||||
// enum: read,write,admin
|
// enum: read,write,admin
|
||||||
|
|
|
@ -3,8 +3,6 @@
|
||||||
|
|
||||||
package structs
|
package structs
|
||||||
|
|
||||||
import "time"
|
|
||||||
|
|
||||||
// Tag represents a repository tag
|
// Tag represents a repository tag
|
||||||
type Tag struct {
|
type Tag struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
|
@ -48,29 +46,3 @@ type TagArchiveDownloadCount struct {
|
||||||
Zip int64 `json:"zip"`
|
Zip int64 `json:"zip"`
|
||||||
TarGz int64 `json:"tar_gz"`
|
TarGz int64 `json:"tar_gz"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// TagProtection represents a tag protection
|
|
||||||
type TagProtection struct {
|
|
||||||
ID int64 `json:"id"`
|
|
||||||
NamePattern string `json:"name_pattern"`
|
|
||||||
WhitelistUsernames []string `json:"whitelist_usernames"`
|
|
||||||
WhitelistTeams []string `json:"whitelist_teams"`
|
|
||||||
// swagger:strfmt date-time
|
|
||||||
Created time.Time `json:"created_at"`
|
|
||||||
// swagger:strfmt date-time
|
|
||||||
Updated time.Time `json:"updated_at"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// CreateTagProtectionOption options for creating a tag protection
|
|
||||||
type CreateTagProtectionOption struct {
|
|
||||||
NamePattern string `json:"name_pattern"`
|
|
||||||
WhitelistUsernames []string `json:"whitelist_usernames"`
|
|
||||||
WhitelistTeams []string `json:"whitelist_teams"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// EditTagProtectionOption options for editing a tag protection
|
|
||||||
type EditTagProtectionOption struct {
|
|
||||||
NamePattern *string `json:"name_pattern"`
|
|
||||||
WhitelistUsernames []string `json:"whitelist_usernames"`
|
|
||||||
WhitelistTeams []string `json:"whitelist_teams"`
|
|
||||||
}
|
|
||||||
|
|
|
@ -8,7 +8,8 @@ import (
|
||||||
|
|
||||||
"code.gitea.io/gitea/models/system"
|
"code.gitea.io/gitea/models/system"
|
||||||
"code.gitea.io/gitea/modules/json"
|
"code.gitea.io/gitea/modules/json"
|
||||||
"code.gitea.io/gitea/modules/util"
|
|
||||||
|
"github.com/yuin/goldmark/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DBStore can be used to store app state items in local filesystem
|
// DBStore can be used to store app state items in local filesystem
|
||||||
|
@ -23,7 +24,7 @@ func (f *DBStore) Get(ctx context.Context, item StateItem) error {
|
||||||
if content == "" {
|
if content == "" {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return json.Unmarshal(util.UnsafeStringToBytes(content), item)
|
return json.Unmarshal(util.StringToReadOnlyBytes(content), item)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set saves the state item
|
// Set saves the state item
|
||||||
|
@ -32,5 +33,5 @@ func (f *DBStore) Set(ctx context.Context, item StateItem) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return system.SaveAppStateContent(ctx, item.Name(), util.UnsafeBytesToString(b))
|
return system.SaveAppStateContent(ctx, item.Name(), util.BytesToReadOnlyString(b))
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,10 @@ import (
|
||||||
// GenerateKeyPair generates a public and private keypair
|
// GenerateKeyPair generates a public and private keypair
|
||||||
func GenerateKeyPair(bits int) (string, string, error) {
|
func GenerateKeyPair(bits int) (string, string, error) {
|
||||||
priv, _ := rsa.GenerateKey(rand.Reader, bits)
|
priv, _ := rsa.GenerateKey(rand.Reader, bits)
|
||||||
privPem := pemBlockForPriv(priv)
|
privPem, err := pemBlockForPriv(priv)
|
||||||
|
if err != nil {
|
||||||
|
return "", "", err
|
||||||
|
}
|
||||||
pubPem, err := pemBlockForPub(&priv.PublicKey)
|
pubPem, err := pemBlockForPub(&priv.PublicKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", err
|
return "", "", err
|
||||||
|
@ -23,12 +26,12 @@ func GenerateKeyPair(bits int) (string, string, error) {
|
||||||
return privPem, pubPem, nil
|
return privPem, pubPem, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func pemBlockForPriv(priv *rsa.PrivateKey) string {
|
func pemBlockForPriv(priv *rsa.PrivateKey) (string, error) {
|
||||||
privBytes := pem.EncodeToMemory(&pem.Block{
|
privBytes := pem.EncodeToMemory(&pem.Block{
|
||||||
Type: "RSA PRIVATE KEY",
|
Type: "RSA PRIVATE KEY",
|
||||||
Bytes: x509.MarshalPKCS1PrivateKey(priv),
|
Bytes: x509.MarshalPKCS1PrivateKey(priv),
|
||||||
})
|
})
|
||||||
return string(privBytes)
|
return string(privBytes), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func pemBlockForPub(pub *rsa.PublicKey) (string, error) {
|
func pemBlockForPub(pub *rsa.PublicKey) (string, error) {
|
||||||
|
|
|
@ -6,6 +6,8 @@ package util
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"unicode"
|
"unicode"
|
||||||
|
|
||||||
|
"github.com/yuin/goldmark/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
type sanitizedError struct {
|
type sanitizedError struct {
|
||||||
|
@ -31,7 +33,7 @@ var schemeSep = []byte("://")
|
||||||
|
|
||||||
// SanitizeCredentialURLs remove all credentials in URLs (starting with "scheme://") for the input string: "https://user:pass@domain.com" => "https://sanitized-credential@domain.com"
|
// SanitizeCredentialURLs remove all credentials in URLs (starting with "scheme://") for the input string: "https://user:pass@domain.com" => "https://sanitized-credential@domain.com"
|
||||||
func SanitizeCredentialURLs(s string) string {
|
func SanitizeCredentialURLs(s string) string {
|
||||||
bs := UnsafeStringToBytes(s)
|
bs := util.StringToReadOnlyBytes(s)
|
||||||
schemeSepPos := bytes.Index(bs, schemeSep)
|
schemeSepPos := bytes.Index(bs, schemeSep)
|
||||||
if schemeSepPos == -1 || bytes.IndexByte(bs[schemeSepPos:], '@') == -1 {
|
if schemeSepPos == -1 || bytes.IndexByte(bs[schemeSepPos:], '@') == -1 {
|
||||||
return s // fast return if there is no URL scheme or no userinfo
|
return s // fast return if there is no URL scheme or no userinfo
|
||||||
|
@ -68,5 +70,5 @@ func SanitizeCredentialURLs(s string) string {
|
||||||
schemeSepPos = bytes.Index(bs, schemeSep)
|
schemeSepPos = bytes.Index(bs, schemeSep)
|
||||||
}
|
}
|
||||||
out = append(out, bs...)
|
out = append(out, bs...)
|
||||||
return UnsafeBytesToString(out)
|
return util.BytesToReadOnlyString(out)
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,11 +87,11 @@ func ToSnakeCase(input string) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnsafeBytesToString uses Go's unsafe package to convert a byte slice to a string.
|
// UnsafeBytesToString uses Go's unsafe package to convert a byte slice to a string.
|
||||||
|
// TODO: replace all "goldmark/util.BytesToReadOnlyString" with this official approach
|
||||||
func UnsafeBytesToString(b []byte) string {
|
func UnsafeBytesToString(b []byte) string {
|
||||||
return unsafe.String(unsafe.SliceData(b), len(b))
|
return unsafe.String(unsafe.SliceData(b), len(b))
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnsafeStringToBytes uses Go's unsafe package to convert a string to a byte slice.
|
|
||||||
func UnsafeStringToBytes(s string) []byte {
|
func UnsafeStringToBytes(s string) []byte {
|
||||||
return unsafe.Slice(unsafe.StringData(s), len(s))
|
return unsafe.Slice(unsafe.StringData(s), len(s))
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,10 +35,6 @@ func GetSiteCookie(req *http.Request, name string) string {
|
||||||
|
|
||||||
// SetSiteCookie returns given cookie value from request header.
|
// SetSiteCookie returns given cookie value from request header.
|
||||||
func SetSiteCookie(resp http.ResponseWriter, name, value string, maxAge int) {
|
func SetSiteCookie(resp http.ResponseWriter, name, value string, maxAge int) {
|
||||||
// Previous versions would use a cookie path with a trailing /.
|
|
||||||
// These are more specific than cookies without a trailing /, so
|
|
||||||
// we need to delete these if they exist.
|
|
||||||
deleteLegacySiteCookie(resp, name)
|
|
||||||
cookie := &http.Cookie{
|
cookie := &http.Cookie{
|
||||||
Name: name,
|
Name: name,
|
||||||
Value: url.QueryEscape(value),
|
Value: url.QueryEscape(value),
|
||||||
|
@ -50,6 +46,10 @@ func SetSiteCookie(resp http.ResponseWriter, name, value string, maxAge int) {
|
||||||
SameSite: setting.SessionConfig.SameSite,
|
SameSite: setting.SessionConfig.SameSite,
|
||||||
}
|
}
|
||||||
resp.Header().Add("Set-Cookie", cookie.String())
|
resp.Header().Add("Set-Cookie", cookie.String())
|
||||||
|
// Previous versions would use a cookie path with a trailing /.
|
||||||
|
// These are more specific than cookies without a trailing /, so
|
||||||
|
// we need to delete these if they exist.
|
||||||
|
deleteLegacySiteCookie(resp, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// deleteLegacySiteCookie deletes the cookie with the given name at the cookie
|
// deleteLegacySiteCookie deletes the cookie with the given name at the cookie
|
||||||
|
|
|
@ -1,47 +0,0 @@
|
||||||
# Compiled binaries
|
|
||||||
*.o
|
|
||||||
*.bin
|
|
||||||
*.elf
|
|
||||||
*.hex
|
|
||||||
*.map
|
|
||||||
*.out
|
|
||||||
*.obj
|
|
||||||
|
|
||||||
# Trash
|
|
||||||
*.bak
|
|
||||||
thumbs.db
|
|
||||||
*.~*
|
|
||||||
|
|
||||||
# IAR Settings
|
|
||||||
**/settings/*.crun
|
|
||||||
**/settings/*.dbgdt
|
|
||||||
**/settings/*.cspy
|
|
||||||
**/settings/*.cspy.*
|
|
||||||
**/settings/*.xcl
|
|
||||||
**/settings/*.dni
|
|
||||||
**/settings/*.wsdt
|
|
||||||
**/settings/*.wspos
|
|
||||||
|
|
||||||
# IAR Debug Exe
|
|
||||||
**/Exe/*.sim
|
|
||||||
|
|
||||||
# IAR Debug Obj
|
|
||||||
**/Obj/*.pbd
|
|
||||||
**/Obj/*.pbd.*
|
|
||||||
**/Obj/*.pbi
|
|
||||||
**/Obj/*.pbi.*
|
|
||||||
|
|
||||||
# IAR project "Debug" directory
|
|
||||||
Debug/
|
|
||||||
|
|
||||||
# IAR project "Release" directory
|
|
||||||
Release/
|
|
||||||
|
|
||||||
# IAR project settings directory
|
|
||||||
settings/
|
|
||||||
|
|
||||||
# IAR backup files
|
|
||||||
Backup*
|
|
||||||
|
|
||||||
# IAR .dep files
|
|
||||||
*.dep
|
|
|
@ -42,3 +42,10 @@ fastlane/report.xml
|
||||||
fastlane/Preview.html
|
fastlane/Preview.html
|
||||||
fastlane/screenshots/**/*.png
|
fastlane/screenshots/**/*.png
|
||||||
fastlane/test_output
|
fastlane/test_output
|
||||||
|
|
||||||
|
# Code Injection
|
||||||
|
#
|
||||||
|
# After new code Injection tools there's a generated folder /iOSInjectionProject
|
||||||
|
# https://github.com/johnno1962/injectionforxcode
|
||||||
|
|
||||||
|
iOSInjectionProject/
|
||||||
|
|
|
@ -35,3 +35,6 @@ override.tf.json
|
||||||
# Ignore CLI configuration files
|
# Ignore CLI configuration files
|
||||||
.terraformrc
|
.terraformrc
|
||||||
terraform.rc
|
terraform.rc
|
||||||
|
|
||||||
|
# Ignore hcl file
|
||||||
|
.terraform.lock.hcl
|
||||||
|
|
|
@ -164,7 +164,7 @@ copy_generic = Kopírovat do schránky
|
||||||
[aria]
|
[aria]
|
||||||
navbar=Navigační lišta
|
navbar=Navigační lišta
|
||||||
footer=Zápatí
|
footer=Zápatí
|
||||||
footer.software=O tomto softwaru
|
footer.software=O softwaru
|
||||||
footer.links=Odkazy
|
footer.links=Odkazy
|
||||||
|
|
||||||
[heatmap]
|
[heatmap]
|
||||||
|
@ -247,7 +247,7 @@ err_admin_name_is_invalid=Uživatelské jméno administrátora není platné
|
||||||
|
|
||||||
general_title=Obecná nastavení
|
general_title=Obecná nastavení
|
||||||
app_name=Název instance
|
app_name=Název instance
|
||||||
app_name_helper=Sem zadejte název vaší instance. Bude zobrazen na každé stránce.
|
app_name_helper=Sem můžete zadat název vaší společnosti.
|
||||||
repo_path=Kořenový adresář repozitářů
|
repo_path=Kořenový adresář repozitářů
|
||||||
repo_path_helper=Všechny vzdálené repozitáře Gitu budou uloženy do tohoto adresáře.
|
repo_path_helper=Všechny vzdálené repozitáře Gitu budou uloženy do tohoto adresáře.
|
||||||
lfs_path=Kořenový adresář Git LFS
|
lfs_path=Kořenový adresář Git LFS
|
||||||
|
@ -671,23 +671,15 @@ form.name_reserved=Uživatelské jméno „%s“ je rezervováno.
|
||||||
form.name_pattern_not_allowed=Vzor „%s“ není povolen v uživatelském jméně.
|
form.name_pattern_not_allowed=Vzor „%s“ není povolen v uživatelském jméně.
|
||||||
form.name_chars_not_allowed=Uživatelské jméno „%s“ obsahuje neplatné znaky.
|
form.name_chars_not_allowed=Uživatelské jméno „%s“ obsahuje neplatné znaky.
|
||||||
block_user = Zablokovat uživatele
|
block_user = Zablokovat uživatele
|
||||||
block_user.detail = Při zablokování tohoto uživatele budou provedeny i další akce, například:
|
block_user.detail = Pokud zablokujete tohoto uživatele, budou provedeny i další akce. Například:
|
||||||
block_user.detail_1 = Přestanete se navzájem sledovat a nebudete se moci znovu začít sledovat.
|
block_user.detail_1 = Tento uživatel vás nebude moci sledovat.
|
||||||
block_user.detail_2 = Tento uživatel nebude moci interagovat s vašimi repozitáři ani s vašimi problémy a komentáři.
|
block_user.detail_2 = Tento uživatel nebude moci interagovat s vašimi repozitáři, vytvářet problémy a komentáře.
|
||||||
block_user.detail_3 = Nebudete si moci každý druhého přidat jako spolupracovníky v repozitářích.
|
block_user.detail_3 = Tento uživatel vás nebude moci přidat jako spolupracovníka a naopak.
|
||||||
follow_blocked_user = Tohoto uživatele nemůžete sledovat, protože jste si jej zablokovali nebo si on zablokoval vás.
|
follow_blocked_user = Tohoto uživatele nemůžete sledovat, protože jste si jej zablokovali nebo si on zablokoval vás.
|
||||||
block = Zablokovat
|
block = Zablokovat
|
||||||
unblock = Odblokovat
|
unblock = Odblokovat
|
||||||
followers_one = %d sledující
|
followers_one = %d sledující
|
||||||
following_one = %d následuje
|
following_one = %d následuje
|
||||||
followers.title.one = Sledující
|
|
||||||
followers.title.few = Sledující
|
|
||||||
following.title.one = Sleduje
|
|
||||||
following.title.few = Sleudje
|
|
||||||
public_activity.visibility_hint.self_private = Vaše aktivita je viditelná pouze vám a správcům instance. <a href="%s">Nastavení</a>.
|
|
||||||
public_activity.visibility_hint.admin_private = Tato aktivita je pro vás viditelná, protože jste administrátor, ale uživatel chce, aby zůstala soukromá.
|
|
||||||
public_activity.visibility_hint.self_public = Vaše aktivita je viditelná všem, mimo interakcí v soukromých prostorech. <a href="%s">Nastavení</a>.
|
|
||||||
public_activity.visibility_hint.admin_public = Tato aktivita je viditelná všem, ale jako administrátor také můžete vidět interakce v soukromých prostorech.
|
|
||||||
|
|
||||||
[settings]
|
[settings]
|
||||||
profile=Profil
|
profile=Profil
|
||||||
|
@ -1077,7 +1069,7 @@ mirror_prune=Vyčistit
|
||||||
mirror_prune_desc=Odstranit zastaralé reference na vzdálené sledování
|
mirror_prune_desc=Odstranit zastaralé reference na vzdálené sledování
|
||||||
mirror_interval=Interval zrcadlení (platné časové jednotky jsou „h“, „m“ a „s“). Nastavením na 0 zakážete periodickou synchronizaci. (Minimální interval: %s)
|
mirror_interval=Interval zrcadlení (platné časové jednotky jsou „h“, „m“ a „s“). Nastavením na 0 zakážete periodickou synchronizaci. (Minimální interval: %s)
|
||||||
mirror_interval_invalid=Interval zrcadlení není platný.
|
mirror_interval_invalid=Interval zrcadlení není platný.
|
||||||
mirror_sync_on_commit=Synchronizovat při nahrávání commitů
|
mirror_sync_on_commit=Synchronizovat při nahrávání revizí
|
||||||
mirror_address=Klonovat z URL
|
mirror_address=Klonovat z URL
|
||||||
mirror_address_desc=Zadejte požadované přístupové údaje do sekce Ověření.
|
mirror_address_desc=Zadejte požadované přístupové údaje do sekce Ověření.
|
||||||
mirror_address_url_invalid=Poskytnutá URL je neplatná. Všechny části musíte správně nahradit escape sekvencí.
|
mirror_address_url_invalid=Poskytnutá URL je neplatná. Všechny části musíte správně nahradit escape sekvencí.
|
||||||
|
@ -1564,7 +1556,7 @@ issues.closed_title=Uzavřeno
|
||||||
issues.draft_title=Koncept
|
issues.draft_title=Koncept
|
||||||
issues.num_comments_1=%d komentář
|
issues.num_comments_1=%d komentář
|
||||||
issues.num_comments=%d komentářů
|
issues.num_comments=%d komentářů
|
||||||
issues.commented_at=`okomentoval/a <a href="#%s">%s</a>`
|
issues.commented_at=`okomentoval <a href="#%s">%s</a>`
|
||||||
issues.delete_comment_confirm=Jste si jist, že chcete smazat tento komentář?
|
issues.delete_comment_confirm=Jste si jist, že chcete smazat tento komentář?
|
||||||
issues.context.copy_link=Kopírovat odkaz
|
issues.context.copy_link=Kopírovat odkaz
|
||||||
issues.context.quote_reply=Citovat odpověď
|
issues.context.quote_reply=Citovat odpověď
|
||||||
|
@ -2462,7 +2454,7 @@ settings.lfs=LFS
|
||||||
settings.lfs_filelist=LFS soubory uložené v tomto repozitáři
|
settings.lfs_filelist=LFS soubory uložené v tomto repozitáři
|
||||||
settings.lfs_no_lfs_files=V tomto repozitáři nejsou uloženy žádné LFS soubory
|
settings.lfs_no_lfs_files=V tomto repozitáři nejsou uloženy žádné LFS soubory
|
||||||
settings.lfs_findcommits=Najít revize
|
settings.lfs_findcommits=Najít revize
|
||||||
settings.lfs_lfs_file_no_commits=Pro tento soubor LFS nebyly nalezeny žádné commity
|
settings.lfs_lfs_file_no_commits=Pro tento LFS soubor nebyly nalezeny žádné revize
|
||||||
settings.lfs_noattribute=Tato cesta nemá uzamykatelný atribut ve výchozí větvi
|
settings.lfs_noattribute=Tato cesta nemá uzamykatelný atribut ve výchozí větvi
|
||||||
settings.lfs_delete=Odstranit LFS soubor s OID %s
|
settings.lfs_delete=Odstranit LFS soubor s OID %s
|
||||||
settings.lfs_delete_warning=Odstranění souboru LFS může při kontrole způsobit chybu „objekt neexistuje“. Jste si jisti?
|
settings.lfs_delete_warning=Odstranění souboru LFS může při kontrole způsobit chybu „objekt neexistuje“. Jste si jisti?
|
||||||
|
@ -2477,7 +2469,7 @@ settings.lfs_locks_no_locks=Žádné zámky
|
||||||
settings.lfs_lock_file_no_exist=Uzamčený soubor neexistuje ve výchozí větvi
|
settings.lfs_lock_file_no_exist=Uzamčený soubor neexistuje ve výchozí větvi
|
||||||
settings.lfs_force_unlock=Vynutit odemknutí
|
settings.lfs_force_unlock=Vynutit odemknutí
|
||||||
settings.lfs_pointers.found=Nalezeno %d blob ukazatel(ů) - %d přiřazeno, %d není přiřazeno (%d chybí v úložišti)
|
settings.lfs_pointers.found=Nalezeno %d blob ukazatel(ů) - %d přiřazeno, %d není přiřazeno (%d chybí v úložišti)
|
||||||
settings.lfs_pointers.sha=Hash blobu
|
settings.lfs_pointers.sha=Blob SHA
|
||||||
settings.lfs_pointers.oid=OID
|
settings.lfs_pointers.oid=OID
|
||||||
settings.lfs_pointers.inRepo=V repozitáři
|
settings.lfs_pointers.inRepo=V repozitáři
|
||||||
settings.lfs_pointers.exists=Existuje v úložišti
|
settings.lfs_pointers.exists=Existuje v úložišti
|
||||||
|
@ -2781,8 +2773,6 @@ project = Projekty
|
||||||
issues.edit.already_changed = Nepodařilo se uložit změny v problému. Obsah byl nejspíše již změněn jiným uživatelem. Obnovte prosím stránku a zkuste jej znovu upravit, abyste zabránili přepsání změn uživatele
|
issues.edit.already_changed = Nepodařilo se uložit změny v problému. Obsah byl nejspíše již změněn jiným uživatelem. Obnovte prosím stránku a zkuste jej znovu upravit, abyste zabránili přepsání změn uživatele
|
||||||
pulls.edit.already_changed = Nepodařilo se uložit změny v žádosti o sloučení. Obsah byl nejspíše již změněn jiným uživatelem. Obnovte prosím stránku a zkuste jej znovu upravit, abyste zabránili přepsání změn uživatele
|
pulls.edit.already_changed = Nepodařilo se uložit změny v žádosti o sloučení. Obsah byl nejspíše již změněn jiným uživatelem. Obnovte prosím stránku a zkuste jej znovu upravit, abyste zabránili přepsání změn uživatele
|
||||||
comments.edit.already_changed = Nepodařilo se uložit změny v komentáři. Obsah byl nejspíše již změněn jiným uživatelem. Obnovte prosím stránku a zkuste jej znovu upravit, abyste zabránili přepsání změn uživatele
|
comments.edit.already_changed = Nepodařilo se uložit změny v komentáři. Obsah byl nejspíše již změněn jiným uživatelem. Obnovte prosím stránku a zkuste jej znovu upravit, abyste zabránili přepsání změn uživatele
|
||||||
subscribe.issue.guest.tooltip = Přihlaste se pro odebírání tohoto problému.
|
|
||||||
subscribe.pull.guest.tooltip = Přihlaste se pro odebírání této žádosti o sloučení.
|
|
||||||
|
|
||||||
[graphs]
|
[graphs]
|
||||||
component_loading_info = Tohle může chvíli trvat…
|
component_loading_info = Tohle může chvíli trvat…
|
||||||
|
@ -2916,7 +2906,7 @@ teams.all_repositories_admin_permission_desc=Tomuto týmu je udělen <strong>Adm
|
||||||
teams.invite.title=Byli jste pozváni do týmu <strong>%s</strong> v organizaci <strong>%s</strong>.
|
teams.invite.title=Byli jste pozváni do týmu <strong>%s</strong> v organizaci <strong>%s</strong>.
|
||||||
teams.invite.by=Pozvání od %s
|
teams.invite.by=Pozvání od %s
|
||||||
teams.invite.description=Pro připojení k týmu klikněte na tlačítko níže.
|
teams.invite.description=Pro připojení k týmu klikněte na tlačítko níže.
|
||||||
follow_blocked_user = Tuto organizaci nemůžete sledovat, protože jste v ní zablokováni.
|
follow_blocked_user = Tuto organizaci nemůžete sledovat, protože jste v ní zablokovaní.
|
||||||
open_dashboard = Otevřít nástěnku
|
open_dashboard = Otevřít nástěnku
|
||||||
|
|
||||||
[admin]
|
[admin]
|
||||||
|
@ -3483,7 +3473,7 @@ create_pull_request=`vytvořil/a požadavek na natažení <a href="%[1]s">%[3]s#
|
||||||
close_pull_request=`uzavřel/a požadavek na natažení <a href="%[1]s">%[3]s#%[2]s</a>`
|
close_pull_request=`uzavřel/a požadavek na natažení <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||||
reopen_pull_request=`znovuotevřel/a požadavek na natažení <a href="%[1]s">%[3]s#%[2]s</a>`
|
reopen_pull_request=`znovuotevřel/a požadavek na natažení <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||||
comment_issue=`okomentoval/a problém <a href="%[1]s">%[3]s#%[2]s</a>`
|
comment_issue=`okomentoval/a problém <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||||
comment_pull=`okomentoval/a žádost o sloučení <a href="%[1]s">%[3]s#%[2]s</a>`
|
comment_pull=`okomentoval/a požadavek na natažení <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||||
merge_pull_request=`sloučil/a požadavek na natažení <a href="%[1]s">%[3]s#%[2]s</a>`
|
merge_pull_request=`sloučil/a požadavek na natažení <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||||
auto_merge_pull_request=`automaticky sloučen požadavek na natažení <a href="%[1]s">%[3]s#%[2]s</a>`
|
auto_merge_pull_request=`automaticky sloučen požadavek na natažení <a href="%[1]s">%[3]s#%[2]s</a>`
|
||||||
transfer_repo=předal/a repozitář <code>%s</code> uživateli/organizaci <a href="%s">%s</a>
|
transfer_repo=předal/a repozitář <code>%s</code> uživateli/organizaci <a href="%s">%s</a>
|
||||||
|
@ -3866,10 +3856,6 @@ fuzzy_tooltip = Zahrnout také výsledky, které úzce odpovídají hledanému v
|
||||||
search = Hledat...
|
search = Hledat...
|
||||||
keyword_search_unavailable = Hledání pomocí klíčových slov momentálně není dostupné. Kontaktujte prosím administrátora webu.
|
keyword_search_unavailable = Hledání pomocí klíčových slov momentálně není dostupné. Kontaktujte prosím administrátora webu.
|
||||||
code_search_by_git_grep = Aktuální výsledky vyhledávání kódu jsou poskytovány službou „git grep“. Lepší výsledky dostanete, když administrátor webu povolí indexování kódu.
|
code_search_by_git_grep = Aktuální výsledky vyhledávání kódu jsou poskytovány službou „git grep“. Lepší výsledky dostanete, když administrátor webu povolí indexování kódu.
|
||||||
exact = Přesné
|
|
||||||
exact_tooltip = Zahrnout pouze výsledky, které přesně odpovídají hledanému výrazu
|
|
||||||
issue_kind = Hledat problémy...
|
|
||||||
pull_kind = Hledat pully...
|
|
||||||
|
|
||||||
[markup]
|
[markup]
|
||||||
filepreview.lines = Řádky %[1]d až %[2]d v souboru %[3]s
|
filepreview.lines = Řádky %[1]d až %[2]d v souboru %[3]s
|
||||||
|
|
|
@ -245,7 +245,7 @@ err_admin_name_is_invalid=Administratornutzername ist ungültig
|
||||||
|
|
||||||
general_title=Allgemeine Einstellungen
|
general_title=Allgemeine Einstellungen
|
||||||
app_name=Instanztitel
|
app_name=Instanztitel
|
||||||
app_name_helper=Hier Ihren Instanznamen eingeben. Er wird auf jeder Seite angezeigt.
|
app_name_helper=Du kannst hier den Namen deines Unternehmens eingeben.
|
||||||
repo_path=Repository-Verzeichnis
|
repo_path=Repository-Verzeichnis
|
||||||
repo_path_helper=Remote-Git-Repositorys werden in diesem Verzeichnis gespeichert.
|
repo_path_helper=Remote-Git-Repositorys werden in diesem Verzeichnis gespeichert.
|
||||||
lfs_path=Git-LFS-Wurzelpfad
|
lfs_path=Git-LFS-Wurzelpfad
|
||||||
|
@ -677,10 +677,6 @@ block_user.detail_3 = Dieser Benutzer kann dich nicht als einen Mitarbeiter hinz
|
||||||
unblock = Nicht mehr blockieren
|
unblock = Nicht mehr blockieren
|
||||||
followers_one = %d Follower
|
followers_one = %d Follower
|
||||||
following_one = %d Folge ich
|
following_one = %d Folge ich
|
||||||
followers.title.few = Follower
|
|
||||||
following.title.one = Folgt
|
|
||||||
following.title.few = Folgt
|
|
||||||
followers.title.one = Follower
|
|
||||||
|
|
||||||
[settings]
|
[settings]
|
||||||
profile=Profil
|
profile=Profil
|
||||||
|
@ -1311,7 +1307,7 @@ editor.patching=Patche:
|
||||||
editor.fail_to_apply_patch=Patch „%s“ nicht anwendbar
|
editor.fail_to_apply_patch=Patch „%s“ nicht anwendbar
|
||||||
editor.new_patch=Neuer Patch
|
editor.new_patch=Neuer Patch
|
||||||
editor.commit_message_desc=Eine ausführlichere (optionale) Beschreibung hinzufügen …
|
editor.commit_message_desc=Eine ausführlichere (optionale) Beschreibung hinzufügen …
|
||||||
editor.signoff_desc=Am Ende der Commit-Nachricht einen „Signed-off-by“-Anhang vom Committer hinzufügen.
|
editor.signoff_desc=Am Ende der Commit Nachricht einen Signed-off-by Anhang vom Committer hinzufügen.
|
||||||
editor.commit_directly_to_this_branch=Direkt in den Branch „<strong class="branch-name">%s</strong>“ einchecken.
|
editor.commit_directly_to_this_branch=Direkt in den Branch „<strong class="branch-name">%s</strong>“ einchecken.
|
||||||
editor.create_new_branch=Einen <strong>neuen Branch</strong> für diesen Commit erstellen und einen Pull-Request starten.
|
editor.create_new_branch=Einen <strong>neuen Branch</strong> für diesen Commit erstellen und einen Pull-Request starten.
|
||||||
editor.create_new_branch_np=Erstelle einen <strong>neuen Branch</strong> für diesen Commit.
|
editor.create_new_branch_np=Erstelle einen <strong>neuen Branch</strong> für diesen Commit.
|
||||||
|
@ -2470,7 +2466,7 @@ settings.lfs_locks_no_locks=Keine Sperren
|
||||||
settings.lfs_lock_file_no_exist=Gesperrte Datei existiert nicht im Standard-Branch
|
settings.lfs_lock_file_no_exist=Gesperrte Datei existiert nicht im Standard-Branch
|
||||||
settings.lfs_force_unlock=Freigabe erzwingen
|
settings.lfs_force_unlock=Freigabe erzwingen
|
||||||
settings.lfs_pointers.found=%d Blob-Zeiger gefunden – %d assoziiert, %d nicht assoziiert (%d fehlend im Speicher)
|
settings.lfs_pointers.found=%d Blob-Zeiger gefunden – %d assoziiert, %d nicht assoziiert (%d fehlend im Speicher)
|
||||||
settings.lfs_pointers.sha=Blob-Hash
|
settings.lfs_pointers.sha=Blob-SHA
|
||||||
settings.lfs_pointers.oid=OID
|
settings.lfs_pointers.oid=OID
|
||||||
settings.lfs_pointers.inRepo=Im Repo
|
settings.lfs_pointers.inRepo=Im Repo
|
||||||
settings.lfs_pointers.exists=Existiert im Speicher
|
settings.lfs_pointers.exists=Existiert im Speicher
|
||||||
|
@ -2761,8 +2757,6 @@ project = Projekte
|
||||||
comments.edit.already_changed = Die Änderungen an diesem Kommentar können nicht gespeichert werden. Es scheint, als seien die Inhalte bereits durch einen anderen Benutzer verändert worden. Bitte die Seite neu laden und das Bearbeiten erneut versuchen, um deren Änderungen nicht zu überschreiben
|
comments.edit.already_changed = Die Änderungen an diesem Kommentar können nicht gespeichert werden. Es scheint, als seien die Inhalte bereits durch einen anderen Benutzer verändert worden. Bitte die Seite neu laden und das Bearbeiten erneut versuchen, um deren Änderungen nicht zu überschreiben
|
||||||
issues.edit.already_changed = Die Änderungen an diesem Issue können nicht gespeichert werden. Es scheint, als seien die Inhalte bereits durch einen anderen Benutzer verändert worden. Bitte die Seite neu laden und das Bearbeiten erneut versuchen, um deren Änderungen nicht zu überschreiben
|
issues.edit.already_changed = Die Änderungen an diesem Issue können nicht gespeichert werden. Es scheint, als seien die Inhalte bereits durch einen anderen Benutzer verändert worden. Bitte die Seite neu laden und das Bearbeiten erneut versuchen, um deren Änderungen nicht zu überschreiben
|
||||||
pulls.edit.already_changed = Die Änderungen an diesem Pull-Request können nicht gespeichert werden. Es scheint, als seien die Inhalte bereits durch einen anderen Benutzer verändert worden. Bitte die Seite neu laden und das Bearbeiten erneut versuchen, um deren Änderungen nicht zu überschreiben
|
pulls.edit.already_changed = Die Änderungen an diesem Pull-Request können nicht gespeichert werden. Es scheint, als seien die Inhalte bereits durch einen anderen Benutzer verändert worden. Bitte die Seite neu laden und das Bearbeiten erneut versuchen, um deren Änderungen nicht zu überschreiben
|
||||||
subscribe.pull.guest.tooltip = Einloggen, um diesen Pull-Request zu abbonieren.
|
|
||||||
subscribe.issue.guest.tooltip = Einloggen, um dieses Issue zu abbonieren.
|
|
||||||
|
|
||||||
[graphs]
|
[graphs]
|
||||||
|
|
||||||
|
@ -3838,10 +3832,6 @@ no_results = Keine passenden Ergebnisse gefunden.
|
||||||
code_search_unavailable = Die Code-Suche ist momentan nicht verfügbar. Bitte kontaktiere den Webseitenadministrator.
|
code_search_unavailable = Die Code-Suche ist momentan nicht verfügbar. Bitte kontaktiere den Webseitenadministrator.
|
||||||
keyword_search_unavailable = Suche nach Schlüsselwörtern ist momentan nicht unterstüzt. Bitte kontaktiere den Webseitenadministrator.
|
keyword_search_unavailable = Suche nach Schlüsselwörtern ist momentan nicht unterstüzt. Bitte kontaktiere den Webseitenadministrator.
|
||||||
code_search_by_git_grep = Die derzeitigen Codesuchergebnisse werden durch „git grep“ bereitgestellt. Es könnten bessere Ergebnisse erzielt werden, wenn der Administrator die Repository-Indizierung aktiviert.
|
code_search_by_git_grep = Die derzeitigen Codesuchergebnisse werden durch „git grep“ bereitgestellt. Es könnten bessere Ergebnisse erzielt werden, wenn der Administrator die Repository-Indizierung aktiviert.
|
||||||
exact = Exakt
|
|
||||||
exact_tooltip = Nur Ergebnisse einbinden, die auf den exakten Suchbegriff passen
|
|
||||||
issue_kind = Issues durchsuchen …
|
|
||||||
pull_kind = Pulls durchsuchen …
|
|
||||||
|
|
||||||
[markup]
|
[markup]
|
||||||
filepreview.line = Zeile %[1]d in %[2]s
|
filepreview.line = Zeile %[1]d in %[2]s
|
||||||
|
|
|
@ -93,7 +93,6 @@ remove_all = Remove all
|
||||||
remove_label_str = Remove item "%s"
|
remove_label_str = Remove item "%s"
|
||||||
edit = Edit
|
edit = Edit
|
||||||
view = View
|
view = View
|
||||||
test = Test
|
|
||||||
|
|
||||||
enabled = Enabled
|
enabled = Enabled
|
||||||
disabled = Disabled
|
disabled = Disabled
|
||||||
|
@ -269,7 +268,7 @@ err_admin_name_is_invalid = Administrator Username is invalid
|
||||||
|
|
||||||
general_title = General settings
|
general_title = General settings
|
||||||
app_name = Instance title
|
app_name = Instance title
|
||||||
app_name_helper = Enter your instance name here. It will be displayed on every page.
|
app_name_helper = You can enter your company name here.
|
||||||
app_slogan = Instance slogan
|
app_slogan = Instance slogan
|
||||||
app_slogan_helper = Enter your instance slogan here. Leave empty to disable.
|
app_slogan_helper = Enter your instance slogan here. Leave empty to disable.
|
||||||
repo_path = Repository root path
|
repo_path = Repository root path
|
||||||
|
@ -656,10 +655,6 @@ change_avatar = Change your avatar…
|
||||||
joined_on = Joined on %s
|
joined_on = Joined on %s
|
||||||
repositories = Repositories
|
repositories = Repositories
|
||||||
activity = Public activity
|
activity = Public activity
|
||||||
followers.title.one = Follower
|
|
||||||
followers.title.few = Followers
|
|
||||||
following.title.one = Following
|
|
||||||
following.title.few = Following
|
|
||||||
followers_one = %d follower
|
followers_one = %d follower
|
||||||
followers_few = %d followers
|
followers_few = %d followers
|
||||||
following_one = %d following
|
following_one = %d following
|
||||||
|
@ -667,10 +662,10 @@ following_few = %d following
|
||||||
follow = Follow
|
follow = Follow
|
||||||
unfollow = Unfollow
|
unfollow = Unfollow
|
||||||
block_user = Block user
|
block_user = Block user
|
||||||
block_user.detail = Please note that blocking a user has other effects, such as:
|
block_user.detail = Please understand that if you block this user, other actions will be taken. Such as:
|
||||||
block_user.detail_1 = You will stop following each other and will not be able to follow each other.
|
block_user.detail_1 = You are being unfollowed from this user.
|
||||||
block_user.detail_2 = This user will not be able to interact with the repositories you own, or the issues and comments you have created.
|
block_user.detail_2 = This user cannot interact with your repositories, created issues and comments.
|
||||||
block_user.detail_3 = You will not be able to add each other as repository collaborators.
|
block_user.detail_3 = This user cannot add you as a collaborator, nor can you add them as a collaborator.
|
||||||
follow_blocked_user = You cannot follow this user because you have blocked this user or this user has blocked you.
|
follow_blocked_user = You cannot follow this user because you have blocked this user or this user has blocked you.
|
||||||
starred = Starred repositories
|
starred = Starred repositories
|
||||||
watched = Watched repositories
|
watched = Watched repositories
|
||||||
|
@ -680,16 +675,11 @@ overview = Overview
|
||||||
block = Block
|
block = Block
|
||||||
unblock = Unblock
|
unblock = Unblock
|
||||||
user_bio = Biography
|
user_bio = Biography
|
||||||
|
disabled_public_activity = This user has disabled the public visibility of the activity.
|
||||||
email_visibility.limited = Your email address is visible to all authenticated users
|
email_visibility.limited = Your email address is visible to all authenticated users
|
||||||
show_on_map = Show this place on a map
|
show_on_map = Show this place on a map
|
||||||
settings = User settings
|
settings = User settings
|
||||||
|
|
||||||
disabled_public_activity = This user has disabled the public visibility of the activity.
|
|
||||||
public_activity.visibility_hint.self_public = Your activity is visible to everyone, except for interactions in private spaces. <a href="%s">Configure</a>.
|
|
||||||
public_activity.visibility_hint.admin_public = This activity is visible to everyone, but as an administrator you can also see interactions in private spaces.
|
|
||||||
public_activity.visibility_hint.self_private = Your activity is only visible to you and the instance administrators. <a href="%s">Configure</a>.
|
|
||||||
public_activity.visibility_hint.admin_private = This activity is visible to you because you're an administrator, but the user wants it to remain private.
|
|
||||||
|
|
||||||
form.name_reserved = The username "%s" is reserved.
|
form.name_reserved = The username "%s" is reserved.
|
||||||
form.name_pattern_not_allowed = The pattern "%s" is not allowed in a username.
|
form.name_pattern_not_allowed = The pattern "%s" is not allowed in a username.
|
||||||
form.name_chars_not_allowed = Username "%s" contains invalid characters.
|
form.name_chars_not_allowed = Username "%s" contains invalid characters.
|
||||||
|
@ -1618,8 +1608,7 @@ issues.ref_closed_from = `<a href="%[3]s">closed this issue %[4]s</a> <a id="%[1
|
||||||
issues.ref_reopened_from = `<a href="%[3]s">reopened this issue %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
issues.ref_reopened_from = `<a href="%[3]s">reopened this issue %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||||
issues.ref_from = `from %[1]s`
|
issues.ref_from = `from %[1]s`
|
||||||
issues.author = Author
|
issues.author = Author
|
||||||
issues.author.tooltip.issue = This user is the author of this issue.
|
issues.author_helper = This user is the author.
|
||||||
issues.author.tooltip.pr = This user is the author of this pull request.
|
|
||||||
issues.role.owner = Owner
|
issues.role.owner = Owner
|
||||||
issues.role.owner_helper = This user is the owner of this repository.
|
issues.role.owner_helper = This user is the owner of this repository.
|
||||||
issues.role.member = Member
|
issues.role.member = Member
|
||||||
|
@ -3324,11 +3313,6 @@ config.cache_interval = Cache interval
|
||||||
config.cache_conn = Cache connection
|
config.cache_conn = Cache connection
|
||||||
config.cache_item_ttl = Cache item TTL
|
config.cache_item_ttl = Cache item TTL
|
||||||
|
|
||||||
config.cache_test = Test Cache
|
|
||||||
config.cache_test_failed = Failed to probe the cache: %v.
|
|
||||||
config.cache_test_slow = Cache test successful, but response is slow: %s.
|
|
||||||
config.cache_test_succeeded = Cache test successful, got a response in %s.
|
|
||||||
|
|
||||||
config.session_config = Session configuration
|
config.session_config = Session configuration
|
||||||
config.session_provider = Session provider
|
config.session_provider = Session provider
|
||||||
config.provider_config = Provider config
|
config.provider_config = Provider config
|
||||||
|
|
|
@ -53,12 +53,12 @@ view = Itignan
|
||||||
disabled = Naka-disable
|
disabled = Naka-disable
|
||||||
copy_url = Kopyahin ang URL
|
copy_url = Kopyahin ang URL
|
||||||
create_new = Gumawa…
|
create_new = Gumawa…
|
||||||
user_profile_and_more = Profile at mga setting…
|
user_profile_and_more = Profile at Mga Setting…
|
||||||
signed_in_as = Naka-sign in bilang
|
signed_in_as = Naka-sign in bilang
|
||||||
toc = Talaan ng Mga Nilalaman
|
toc = Talaan ng Mga Nilalaman
|
||||||
licenses = Mga Lisensya
|
licenses = Mga Lisensya
|
||||||
return_to_forgejo = Bumalik sa Forgejo
|
return_to_forgejo = Bumalik sa Forgejo
|
||||||
toggle_menu = I-toggle ang menu
|
toggle_menu = I-toggle ang Menu
|
||||||
username = Username
|
username = Username
|
||||||
email = Email address
|
email = Email address
|
||||||
password = Password
|
password = Password
|
||||||
|
@ -125,7 +125,7 @@ filter.not_template = Hindi mga template
|
||||||
filter.public = Publiko
|
filter.public = Publiko
|
||||||
filter.private = Pribado
|
filter.private = Pribado
|
||||||
notifications = Mga Abiso
|
notifications = Mga Abiso
|
||||||
active_stopwatch = Aktibong tagasubaybay ng oras
|
active_stopwatch = Aktibong Tagasubaybay ng Oras
|
||||||
locked = Naka-kandado
|
locked = Naka-kandado
|
||||||
preview = Paunang tingnan
|
preview = Paunang tingnan
|
||||||
confirm_delete_artifact = Sigurado ka bang gusto mong burahin ang artifact na "%s"?
|
confirm_delete_artifact = Sigurado ka bang gusto mong burahin ang artifact na "%s"?
|
||||||
|
@ -193,8 +193,8 @@ forks_few = %d mga fork
|
||||||
stars_one = %d bituin
|
stars_one = %d bituin
|
||||||
|
|
||||||
[aria]
|
[aria]
|
||||||
footer.software = Tungkol sa software na ito
|
footer.software = Tungkol sa Software
|
||||||
navbar = Bar ng nabigasyon
|
navbar = Bar ng Nabigasyon
|
||||||
footer = Footer
|
footer = Footer
|
||||||
footer.links = Mga Link
|
footer.links = Mga Link
|
||||||
|
|
||||||
|
@ -233,7 +233,7 @@ err_admin_name_is_reserved = Hindi angkop ang Username ng Tagapangasiwa, naka-re
|
||||||
err_admin_name_is_invalid = Hindi angkop ang Username ng Tagapangasiwa
|
err_admin_name_is_invalid = Hindi angkop ang Username ng Tagapangasiwa
|
||||||
general_title = Mga General Setting
|
general_title = Mga General Setting
|
||||||
app_name = Pamagat ng instansya
|
app_name = Pamagat ng instansya
|
||||||
app_name_helper = Ilagay ang pangalan ng iyong instansya dito. Ipapakita ito sa bawat page.
|
app_name_helper = Maari mong ilagay ang pangalan ng iyong kompanya dito.
|
||||||
repo_path_helper = Ang mga remote Git repository ay mase-save sa directory na ito.
|
repo_path_helper = Ang mga remote Git repository ay mase-save sa directory na ito.
|
||||||
repo_path = Root path ng Repositoryo
|
repo_path = Root path ng Repositoryo
|
||||||
lfs_path = Root path ng Git LFS
|
lfs_path = Root path ng Git LFS
|
||||||
|
@ -269,16 +269,16 @@ register_confirm = Kailanganin ang kumpirmasyon sa email para magrehistro
|
||||||
mail_notify = Paganahin ang mga email notification
|
mail_notify = Paganahin ang mga email notification
|
||||||
disable_gravatar = I-disable ang Gravatar
|
disable_gravatar = I-disable ang Gravatar
|
||||||
federated_avatar_lookup = I-enable ang mga naka-federate na avatar
|
federated_avatar_lookup = I-enable ang mga naka-federate na avatar
|
||||||
federated_avatar_lookup.description = Hanapin ang mga avatar gamit ang Libravatar.
|
federated_avatar_lookup.description = I-enable ang naka-federate na paghahanap ng avatar gamit ng Libravatar.
|
||||||
disable_registration = I-disable ang pansariling pagrehistro
|
disable_registration = I-disable ang pansariling pagrehistro
|
||||||
allow_only_external_registration.description = Makakagawa lamang ng mga bagong account ang mga user sa pamamagitan ng mga naka-configure na external na serbisyo.
|
allow_only_external_registration.description = Payagan lang ang pagrehistro sa pamamagitan ng mga external na serbisyo
|
||||||
openid_signin = I-enable ang OpenID sign-in
|
openid_signin = I-enable ang OpenID sign-in
|
||||||
openid_signin.description = Payagagan ang mga user na mag-sign in sa pamamagitan ng OpenID.
|
openid_signin.description = I-enable ang pag-sign in ng user gamit ng OpenID.
|
||||||
openid_signup = I-enable ang OpenID na pansariling pagrehistro
|
openid_signup = I-enable ang OpenID na pansariling pagrehistro
|
||||||
openid_signup.description = Payagan ang mga user na gumawa ng mga account aa pamamagitan ng OpenID kapag naka-enable ang pansariling pagrehistro.
|
openid_signup.description = I-enable ang OpenID-based na pansariling pagrehistro ng user.
|
||||||
enable_captcha = I-enable ang CAPTCHA sa pagrehistro
|
enable_captcha = I-enable ang CAPTCHA sa pagrehistro
|
||||||
enable_captcha.description = Kailanganin ang mga user na ipasa ang CAPTCHA upang makagawa ng mga account.
|
enable_captcha.description = Kailanganin ang CAPTCHA sa pansariling pagrehistro ng user.
|
||||||
require_sign_in_view.description = Limitahan ang access ng nilalaman sa mga naka-sign in na user. Mabibisita lamang ng mga bisita ang mga authentikasyon na pahina.
|
require_sign_in_view.description = Limitahan ang access ng pahina sa mga naka-sign in na user. Makikita lang ng mga bisita ang sign-in at pagrehistro na mga pahina.
|
||||||
admin_title = Mga setting ng account ng tagapangasiwa
|
admin_title = Mga setting ng account ng tagapangasiwa
|
||||||
admin_name = Username ng tagapangasiwa
|
admin_name = Username ng tagapangasiwa
|
||||||
admin_password = Password
|
admin_password = Password
|
||||||
|
@ -298,10 +298,10 @@ save_config_failed = Nabigong i-save ang configuration: %v
|
||||||
invalid_admin_setting = Hindi angkop ang setting ng account ng tagapangasiwa: %v
|
invalid_admin_setting = Hindi angkop ang setting ng account ng tagapangasiwa: %v
|
||||||
invalid_log_root_path = Hindi angkop ang log path: %v
|
invalid_log_root_path = Hindi angkop ang log path: %v
|
||||||
default_keep_email_private = Itago ang mga email address bilang default
|
default_keep_email_private = Itago ang mga email address bilang default
|
||||||
default_keep_email_private.description = I-enable ang pagtago ng email address para sa mga bagong user bilang default para ang impormasyon na ito ay hindi mali-leak agad pagkatapos mag-sign up.
|
default_keep_email_private.description = Itago ang mga email address ng mga bagong user account bilang default.
|
||||||
default_allow_create_organization.description = Payagan ang mga user na gumawa ng mga organisasyon bilang default. Kung naka-disable ang opsyon na ito, ang isang tagapangasiwa ay dapat magbigay ng pahintulot na gumawa ng mga organisasyon sa mga bagong user.
|
default_allow_create_organization.description = Payagan ang mga bagong user account ng gumawa ng mga organisasyon bilang default.
|
||||||
default_enable_timetracking = I-enable ang pagsubaybay ng oras bilang default
|
default_enable_timetracking = I-enable ang pagsubaybay ng oras bilang default
|
||||||
default_enable_timetracking.description = Payagan ang paggamit ang pagsubaybay ng oras na feature sa mga bagong repositoryo bilang default.
|
default_enable_timetracking.description = I-enable ang pagsubaybay ng oras sa mga bagong repositoryo bilang default.
|
||||||
allow_dots_in_usernames = Payagan ang mga user na gamitin ang mga tuldok sa kanilang username. Hindi inaapektuhan ang mga umiiral na account.
|
allow_dots_in_usernames = Payagan ang mga user na gamitin ang mga tuldok sa kanilang username. Hindi inaapektuhan ang mga umiiral na account.
|
||||||
no_reply_address = Domain ng nakatagong email
|
no_reply_address = Domain ng nakatagong email
|
||||||
no_reply_address_helper = Domain name para sa mga user na may nakatagong email address. Halimbawa, ang username na "kita" ay mala-log sa Git bilang "kita@noreply.example.org" kapag ang nakatagong email domain ay nakatakda sa "noreply.example.org".
|
no_reply_address_helper = Domain name para sa mga user na may nakatagong email address. Halimbawa, ang username na "kita" ay mala-log sa Git bilang "kita@noreply.example.org" kapag ang nakatagong email domain ay nakatakda sa "noreply.example.org".
|
||||||
|
@ -310,18 +310,15 @@ invalid_password_algorithm = Hindi angkop na algorithm ng password hash
|
||||||
password_algorithm_helper = Itakda ang password hashing algorithm. Ang mga algorithm ay may magkakaibang mga kinakailangan at lakas. Ang algorithm ng Argon2 ay sa halip ay ligtas ngunit gumagamit ng maraming memory at maaaring hindi naaangkop para sa mga maliliit na sistema.
|
password_algorithm_helper = Itakda ang password hashing algorithm. Ang mga algorithm ay may magkakaibang mga kinakailangan at lakas. Ang algorithm ng Argon2 ay sa halip ay ligtas ngunit gumagamit ng maraming memory at maaaring hindi naaangkop para sa mga maliliit na sistema.
|
||||||
enable_update_checker = I-enable ang tagasuri ng update
|
enable_update_checker = I-enable ang tagasuri ng update
|
||||||
env_config_keys = Configuration ng Environment
|
env_config_keys = Configuration ng Environment
|
||||||
env_config_keys_prompt = Ang mga sumusunod na mga environment variable ay ilalapat rin sa iyong configuration file:
|
env_config_keys_prompt = Ang mga sumusunod na mga environment variable ay ia-apply rin sa iyong configuration file:
|
||||||
offline_mode.description = I-disable ang lahat ng mga third-party na content delivery network at lokal na ibahagi ang lahat ng mga resource.
|
offline_mode.description = I-disable ang lahat ng mga third-party na content delivery network at ibahagi ang lahat ng mga resources ng locally.
|
||||||
require_sign_in_view = Kailanganin ang pag-sign in para tignan ang nilalaman ng instansya
|
require_sign_in_view = Kailanganin ang pag-sign in para tignan ang nilalaman ng instansya
|
||||||
enable_update_checker_helper_forgejo = Pansamantalang susuriin ito para sa mga bagong bersyon ng Forgejo sa pamamagitan ng pagsuri sa isang tala ng TXT DNS sa release.forgejo.org.
|
enable_update_checker_helper_forgejo = Pansamantalang susuriin ito para sa mga bagong bersyon ng Forgejo sa pamamagitan ng pagsuri sa isang tala ng TXT DNS sa release.forgejo.org.
|
||||||
sqlite3_not_available = Ang itong bersyon ng Forgejo ay hindi sinusuportahan ang SQLite3. Paki-download ang opisyal na bersyon ng binary sa %s (hindi ang "gobuild" na bersyon).
|
sqlite3_not_available = Ang itong bersyon ng Forgejo ay hindi sinusuportahan ang SQLite3. Paki-download ang opisyal na bersyon ng binary sa %s (hindi ang "gobuild" na bersyon).
|
||||||
default_allow_create_organization = Payagan ang paggawa ng mga organisasyon bilang default
|
default_allow_create_organization = Payagan ang paggawa ng mga organisasyon bilang default
|
||||||
disable_registration.description = Ang mga tagapangasiwa ng instansya lamang ang makakagawa ng mga bagong user account. Lubos na inirerekomenda namin na panatilihing naka-disable ang pagrehistro maliban kung balak mo na mag-host ng publikong instansya para sa lahat at handang makitungo sa malaking bilang ng mga spam account.
|
disable_registration.description = I-disable ang pansariling pagrehistro ng user. Ang mga tagapangasiwa lamang ang makakagawa ng mga bagong user account.
|
||||||
disable_gravatar.description = I-disable paggamit ang Gravatar at iba pang mga third-party na avatar source. Ang mga default na avatar ay gagamitin maliban kung maga-upload ng avatar ang user sa instansya.
|
disable_gravatar.description = I-disable ang Gravatar at mga third-party na avatar source. Ang isang default na avatar ay gagamitin maliban kung maga-upload ng avatar ang user.
|
||||||
admin_setting.description = Ang paggawa ng administrator account ay opsyonal. Ang pinakaunang nakarehistro na user ay awtomatikong magiging tagapangasiwa.
|
admin_setting.description = Ang paggawa ng administrator account ay opsyonal. Ang pinakaunang nakarehistro na user ay awtomatikong magiging tagapangasiwa.
|
||||||
allow_only_external_registration = Payagan lamang ang pagrehistro sa pamamagitan ng mga external na serbisyo
|
|
||||||
app_slogan = Slogan ng instansya
|
|
||||||
app_slogan_helper = Ilagay ang slogan ng iyong instansya. Iwanang walang laman para i-disable.
|
|
||||||
|
|
||||||
[heatmap]
|
[heatmap]
|
||||||
number_of_contributions_in_the_last_12_months = %s mga kontribusyon sa nakalipas na 12 buwan
|
number_of_contributions_in_the_last_12_months = %s mga kontribusyon sa nakalipas na 12 buwan
|
||||||
|
@ -486,8 +483,8 @@ repo.transfer.body = Para tanggapin o tanggihan bisitahin ang %s o huwag na lang
|
||||||
repo.collaborator.added.subject = Idinagdag ka ni %s sa %s bilang tagaambag
|
repo.collaborator.added.subject = Idinagdag ka ni %s sa %s bilang tagaambag
|
||||||
team_invite.subject = Inimbitahan ka ni %[1]s para sumali sa organisasyong %[2]s
|
team_invite.subject = Inimbitahan ka ni %[1]s para sumali sa organisasyong %[2]s
|
||||||
team_invite.text_1 = Inimbitahan ka ni %[1]s para sumali sa koponang %[2]s sa organisasyong %[3]s.
|
team_invite.text_1 = Inimbitahan ka ni %[1]s para sumali sa koponang %[2]s sa organisasyong %[3]s.
|
||||||
team_invite.text_2 = Mangyaring i-click ang sumusunod na link para sumali sa koponan:
|
team_invite.text_2 = Paki-click ang sumusunod na link para sumali sa koponan:
|
||||||
activate_email.text = Mangyaring i-click ang sumusunod na link para i-verify ang iyong email address sa loob ng <b>%s</b>:
|
activate_email.text = Paki-click ang sumusunod na link para i-verify ang iyong email address sa loob ng <b>%s</b>:
|
||||||
repo.collaborator.added.text = Idinagdag ka bilang tagaambag sa repositoryo:
|
repo.collaborator.added.text = Idinagdag ka bilang tagaambag sa repositoryo:
|
||||||
activate_email.title = %s, paki-verify ang iyong email address
|
activate_email.title = %s, paki-verify ang iyong email address
|
||||||
issue.action.reject = Humingi ng mga pagbabago si <b>@%[1]s</b> sa pull request na ito.
|
issue.action.reject = Humingi ng mga pagbabago si <b>@%[1]s</b> sa pull request na ito.
|
||||||
|
@ -610,10 +607,10 @@ activity = Pampublikong aktibidad
|
||||||
followers_few = %d mga tagasunod
|
followers_few = %d mga tagasunod
|
||||||
block_user = I-block ang user
|
block_user = I-block ang user
|
||||||
change_avatar = Palitan ang iyong avatar…
|
change_avatar = Palitan ang iyong avatar…
|
||||||
block_user.detail = Pakitandaan na ang pag-block ng isang user ay may iba pang mga epekto, gaya ng:
|
block_user.detail = Pakiunawa na kung i-block mo ang user na ito, isasagawa ang iba pang mga aksyon. Gaya ng:
|
||||||
block_user.detail_1 = Hihinto kayo sa pagsunod sa isa't isa at hindi na kayo makakasunod sa isa't isa.
|
block_user.detail_1 = Ina-unfollow ka sa user na ito.
|
||||||
block_user.detail_2 = Hindi magagawa ng user na ito na makipag-ugnayan sa mga repositoryo na minamamay-ari mo, o sa mga isyu at komentong ginawa mo.
|
block_user.detail_2 = Ang user na ito ay hindi maaaring makipag-ugnayan sa iyong mga repositoryo, ginawang isyu at komento.
|
||||||
block_user.detail_3 = Hindi mo magagawang idagdag ang isa't isa bilang mga tagatulong ng repositoryo.
|
block_user.detail_3 = Hindi ka maaaring idagdag ng user na ito bilang isang collaborator, at hindi mo rin sila maidaragdag bilang isang collaborator.
|
||||||
follow_blocked_user = Hindi mo mapa-follow ang user na ito dahil na-block mo ang user na ito o na-block ka ng user na ito.
|
follow_blocked_user = Hindi mo mapa-follow ang user na ito dahil na-block mo ang user na ito o na-block ka ng user na ito.
|
||||||
starred = Mga naka-bituin na repositoryo
|
starred = Mga naka-bituin na repositoryo
|
||||||
watched = Mga sinusubaybayan na repositoryo
|
watched = Mga sinusubaybayan na repositoryo
|
||||||
|
@ -636,10 +633,6 @@ form.name_reserved = Nakareserba ang username na "%s".
|
||||||
form.name_chars_not_allowed = Naglalaman ng mga hindi angkop na character ang username.
|
form.name_chars_not_allowed = Naglalaman ng mga hindi angkop na character ang username.
|
||||||
followers_one = %d tagasunod
|
followers_one = %d tagasunod
|
||||||
following_one = %d sinusundan
|
following_one = %d sinusundan
|
||||||
following.title.few = Sinusundan
|
|
||||||
followers.title.few = Mga tagasunod
|
|
||||||
following.title.one = Sinusundan
|
|
||||||
followers.title.one = Tagasunod
|
|
||||||
|
|
||||||
[settings]
|
[settings]
|
||||||
profile = Profile
|
profile = Profile
|
||||||
|
@ -1270,8 +1263,8 @@ code = Code
|
||||||
ambiguous_character = `Ang %[1]c [U+%04[1]X] ay maaring malito sa %[2]c [U+%04[2]X]`
|
ambiguous_character = `Ang %[1]c [U+%04[1]X] ay maaring malito sa %[2]c [U+%04[2]X]`
|
||||||
escape_control_characters = I-escape
|
escape_control_characters = I-escape
|
||||||
unescape_control_characters = I-unescape
|
unescape_control_characters = I-unescape
|
||||||
invisible_runes_line = `Ang linya na ito ay may mga hindi nakikitang Unicode character`
|
invisible_runes_line = `Ang linya na ito ay may mga hindi nakikitang unicode character`
|
||||||
ambiguous_runes_line = `Ang linya na ito ay may mga hindi tiyak na Unicode character`
|
ambiguous_runes_line = `Ang linya na ito ay may mga hindi tiyak na unicode character`
|
||||||
tag = Tag
|
tag = Tag
|
||||||
migrate.migrating_git = Nililipat ang Git data
|
migrate.migrating_git = Nililipat ang Git data
|
||||||
vendored = Naka-vendor
|
vendored = Naka-vendor
|
||||||
|
@ -1333,7 +1326,7 @@ issues.author_helper = May-akda ang tagagamit na ito.
|
||||||
issues.role.owner = May-ari
|
issues.role.owner = May-ari
|
||||||
activity.title.prs_n = %d mga kahilingan sa paghatak
|
activity.title.prs_n = %d mga kahilingan sa paghatak
|
||||||
issues.label_color = Kulay
|
issues.label_color = Kulay
|
||||||
pulls.nothing_to_compare = Magkapareho ang mga branch na ito. Hindi na kailangang gumawa ng hiling sa paghila.
|
pulls.nothing_to_compare = Magkapareho ang mga branch na ito. Hindi na kailangang gumawa ng hiling sa paghatak.
|
||||||
projects.column.assigned_to = Itinalaga sa/kay
|
projects.column.assigned_to = Itinalaga sa/kay
|
||||||
issues.new_label_desc_placeholder = Paglalarawan
|
issues.new_label_desc_placeholder = Paglalarawan
|
||||||
issues.next = Susunod
|
issues.next = Susunod
|
||||||
|
@ -1463,7 +1456,7 @@ issues.new.no_projects = Walang mga proyekto
|
||||||
pulls.auto_merge_button_when_succeed = (Kung nagtagumpay ang mga [check])
|
pulls.auto_merge_button_when_succeed = (Kung nagtagumpay ang mga [check])
|
||||||
activity.git_stats_on_default_branch = Sa %s,
|
activity.git_stats_on_default_branch = Sa %s,
|
||||||
activity.period.quarterly = 3 buwan
|
activity.period.quarterly = 3 buwan
|
||||||
issues.review.left_comment = nagiwan ang komento
|
issues.review.left_comment = iniwan ang [comment]
|
||||||
pulls.compare_base = isama sa
|
pulls.compare_base = isama sa
|
||||||
activity.git_stats_additions = at mayroong
|
activity.git_stats_additions = at mayroong
|
||||||
issues.reopen_comment_issue = Magkomento at buksang muli
|
issues.reopen_comment_issue = Magkomento at buksang muli
|
||||||
|
@ -1547,7 +1540,7 @@ projects.card_type.desc = Mga preview ng card
|
||||||
commits.desc = I-browse ang history ng pagbabago ng source code.
|
commits.desc = I-browse ang history ng pagbabago ng source code.
|
||||||
commits.search.tooltip = Maari kang mag-prefix ng mga keyword gamit ang "author:", "committer:", "after:", o "before:", hal. "revert author:Nijika before:2022-10-09".
|
commits.search.tooltip = Maari kang mag-prefix ng mga keyword gamit ang "author:", "committer:", "after:", o "before:", hal. "revert author:Nijika before:2022-10-09".
|
||||||
issues.force_push_codes = `puwersahang itinulak ang %[1]s mula <a class="ui sha" href="%[3]s"><code>%[2]s</code></a> sa <a class="ui sha" href="%[5]s"><code>%[4]s</code></a> %[6]s`
|
issues.force_push_codes = `puwersahang itinulak ang %[1]s mula <a class="ui sha" href="%[3]s"><code>%[2]s</code></a> sa <a class="ui sha" href="%[5]s"><code>%[4]s</code></a> %[6]s`
|
||||||
issues.push_commit_1 = idinagdag ang %d commit %s
|
issues.push_commit_1 = idinagdag ang %d [commit] %s
|
||||||
issues.push_commits_n = idinagdag ang %d mga [commit] %s
|
issues.push_commits_n = idinagdag ang %d mga [commit] %s
|
||||||
issues.new.no_reviewers = Walang mga tagasuri
|
issues.new.no_reviewers = Walang mga tagasuri
|
||||||
pulls.title_desc_one = hinihiling na isama ang %[1]d [commit] mula <code>%[2]s</code> patungong <code id="branch_target">%[3]s</code>
|
pulls.title_desc_one = hinihiling na isama ang %[1]d [commit] mula <code>%[2]s</code> patungong <code id="branch_target">%[3]s</code>
|
||||||
|
@ -1558,14 +1551,14 @@ activity.git_stats_author_n = %d mga may-akda
|
||||||
issues.change_title_at = `binago ang pamagat mula <b><strike>%s</strike></b> sa <b>%s</b> %s`
|
issues.change_title_at = `binago ang pamagat mula <b><strike>%s</strike></b> sa <b>%s</b> %s`
|
||||||
activity.git_stats_author_1 = %d may-akda
|
activity.git_stats_author_1 = %d may-akda
|
||||||
diff.review.header = Isumite ang pagsusuri
|
diff.review.header = Isumite ang pagsusuri
|
||||||
issues.review.comment = sinuri ang %s
|
issues.review.comment = sinuri %s
|
||||||
pulls.approve_count_1 = %d pag-apruba
|
pulls.approve_count_1 = %d pag-apruba
|
||||||
pulls.viewed_files_label = %[1]d / %[2]d tinitingnang mga file
|
pulls.viewed_files_label = %[1]d / %[2]d tinitingnang mga file
|
||||||
pulls.approve_count_n = %d mga pag-apruba
|
pulls.approve_count_n = %d mga pag-apruba
|
||||||
pulls.push_rejected = Nabigo ang pagtulak: Tinatanggi ang pagtulak. Suriin ang [Git hooks] para sa [repositoryong] ito.
|
pulls.push_rejected = Nabigo ang pagtulak: Tinatanggi ang pagtulak. Suriin ang [Git hooks] para sa [repositoryong] ito.
|
||||||
diff.review.reject = Hilingin ang mga pagbago
|
diff.review.reject = Hilingin ang mga pagbago
|
||||||
diff.whitespace_show_everything = Ipakita lahat ng pagbago
|
diff.whitespace_show_everything = Ipakita lahat ng pagbago
|
||||||
issues.review.approve = inaprubahan ang mga pagbabagong ito %s
|
issues.review.approve = [inaprubahan] ang mga pagbabagong ito %s
|
||||||
diff.review.approve = Aprubahin
|
diff.review.approve = Aprubahin
|
||||||
settings.event_pull_request_review_desc = Inapruba, tinatanggihan o [komento ng pagsuri] ang [pull request].
|
settings.event_pull_request_review_desc = Inapruba, tinatanggihan o [komento ng pagsuri] ang [pull request].
|
||||||
settings.event_pull_request_review = Sinusuri na ang [pull request]
|
settings.event_pull_request_review = Sinusuri na ang [pull request]
|
||||||
|
@ -1736,7 +1729,7 @@ issues.comment_pull_merged_at = isinama ang commit %[1]s sa %[2]s %[3]s
|
||||||
pulls.commit_ref_at = ` isinangguni ang [pull request] mula sa isang [commit]<a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
pulls.commit_ref_at = ` isinangguni ang [pull request] mula sa isang [commit]<a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||||
wiki.last_commit_info = Binago ni %s ang pahinang ito %s
|
wiki.last_commit_info = Binago ni %s ang pahinang ito %s
|
||||||
issues.content_history.edited = binago
|
issues.content_history.edited = binago
|
||||||
issues.ref_pull_from = `<a href="%[3]s">isinangguni ang hiling sa paghila na ito %[4]s </a><a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
issues.ref_pull_from = `<a href="%[3]s">isinangguni ang [pull request] na ito</a><a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||||
pulls.merged_title_desc_few = isinali ang %[1]d mga [commit] mula sa <code>%[2]s</code> patungong <code>%[3]s</code> %[4]s
|
pulls.merged_title_desc_few = isinali ang %[1]d mga [commit] mula sa <code>%[2]s</code> patungong <code>%[3]s</code> %[4]s
|
||||||
settings.org_not_allowed_to_be_collaborator = Hindi maaring idagdag ang mga organizasyon bilang tagaambag.
|
settings.org_not_allowed_to_be_collaborator = Hindi maaring idagdag ang mga organizasyon bilang tagaambag.
|
||||||
settings.add_collaborator_success = Naidagdag na ang tagaambag.
|
settings.add_collaborator_success = Naidagdag na ang tagaambag.
|
||||||
|
@ -1745,7 +1738,7 @@ diff.comment.reply = Tumugon
|
||||||
pulls.create = Gumawa ng [pull request]
|
pulls.create = Gumawa ng [pull request]
|
||||||
issues.dependency.pr_close_blocked = Kailangan mong isara ang lahat ng mga isyu na humaharang sa [pull request] na ito bago mo ito isama.
|
issues.dependency.pr_close_blocked = Kailangan mong isara ang lahat ng mga isyu na humaharang sa [pull request] na ito bago mo ito isama.
|
||||||
pulls.delete.title = Burahin ang [pull request] na ito?
|
pulls.delete.title = Burahin ang [pull request] na ito?
|
||||||
issues.dependency.pr_closing_blockedby = Hinarang ng mga sumusunod na isyu mula sa pagsara ng hiling sa paghila na ito
|
issues.dependency.pr_closing_blockedby = Hinarang ng mga sumusunod na isyu mula sa pagsara ng [pull request] na ito
|
||||||
pulls.closed_at = `isinara ang [pull request] na ito<a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
pulls.closed_at = `isinara ang [pull request] na ito<a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||||
pulls.close = Isara ang [pull request]
|
pulls.close = Isara ang [pull request]
|
||||||
pulls.cmd_instruction_hint = `Tingnan ang <a class="show-instruction">mga panuto para sa linya ng utos</a>.`
|
pulls.cmd_instruction_hint = `Tingnan ang <a class="show-instruction">mga panuto para sa linya ng utos</a>.`
|
||||||
|
@ -1754,8 +1747,8 @@ issues.content_history.deleted = binura
|
||||||
pulls.no_results = Walang nakitang mga resulta.
|
pulls.no_results = Walang nakitang mga resulta.
|
||||||
pulls.closed = Sarado ang [pull request]
|
pulls.closed = Sarado ang [pull request]
|
||||||
pulls.is_closed = Naisara na ang [pull request].
|
pulls.is_closed = Naisara na ang [pull request].
|
||||||
issues.ref_closing_from = `<a href="%[3]s">isinangguni ang hiling sa paghila %[4]s na magsasara sa isyung ito</a><a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
issues.ref_closing_from = `<a href="%[3]s">isinangguni ang [pull request] %[4]s na magsasara sa isyung ito</a><a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||||
issues.ref_reopening_from = `<a href="%[3]s">isinangguni ang hiling sa paghila %[4]s na muling bubukas sa isyung ito</a><a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
issues.ref_reopening_from = `<a href="%[3]s">isinangguni ang [pull request] %[4]s na muling bubukas sa isyung ito</a><a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||||
issues.ref_closed_from = `<a href="%[3]s">isinara ang isyung ito %[4]s</a><a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
issues.ref_closed_from = `<a href="%[3]s">isinara ang isyung ito %[4]s</a><a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||||
issues.review.wait = hiniling sa pagsuri %s
|
issues.review.wait = hiniling sa pagsuri %s
|
||||||
issues.review.reject = hinihiling ang mga pagbago %s
|
issues.review.reject = hinihiling ang mga pagbago %s
|
||||||
|
@ -1763,103 +1756,9 @@ issues.review.remove_review_request = tinatanggal ang hiling sa pagsuri para sa/
|
||||||
pulls.reopen_to_merge = Mangyaring buksan muli ang [pull request] upang gawin ang pagsali.
|
pulls.reopen_to_merge = Mangyaring buksan muli ang [pull request] upang gawin ang pagsali.
|
||||||
pulls.merged_title_desc_one = isinali ang %[1]d [commit] mula<code>%[2]s</code> patungong <code>%[3]s</code> %[4]s
|
pulls.merged_title_desc_one = isinali ang %[1]d [commit] mula<code>%[2]s</code> patungong <code>%[3]s</code> %[4]s
|
||||||
pull.deleted_branch = (binura):%s
|
pull.deleted_branch = (binura):%s
|
||||||
issues.dependency.pr_close_blocks = Hinarang ng hiling sa paghila na ito mula sa pagsara ng mga sumusunod na isyu
|
issues.dependency.pr_close_blocks = Hinarang ng [pull request] na ito mula sa pagsara ng mga sumusunod na isyu
|
||||||
issues.reference_issue.body = Katawan
|
issues.reference_issue.body = Katawan
|
||||||
pulls.recently_pushed_new_branches = Itinulak mo sa [branch]<a href="%[3]s"> <strong>%[1]s</strong></a>%[2]s
|
pulls.recently_pushed_new_branches = Itinulak mo sa [branch]<a href="%[3]s"> <strong>%[1]s</strong></a>%[2]s
|
||||||
issues.add_time_minutes = Minuto
|
|
||||||
issues.del_time = Burahin ang log ng oras na ito
|
|
||||||
issues.stop_tracking = Itigil ang orasan
|
|
||||||
issues.cancel_tracking_history = `kinansela ang pagsubaybay ng oras %s`
|
|
||||||
issues.add_time = Manwal na magdagdag ng oras
|
|
||||||
issues.tracker = Tagasubaybay ng oras
|
|
||||||
issues.start_tracking_short = Simulan ang orasan
|
|
||||||
issues.tracker_auto_close = Awtomatikong titigil ang orasan na ito kapag sinara ang isyu na ito
|
|
||||||
issues.tracking_already_started = `Nagsimula ka na ng pagsubaybay ng oras sa <a href="%s">isa pang isyu</a>!`
|
|
||||||
issues.dependency.issue_no_dependencies = Walang nakatakdang mga dependency.
|
|
||||||
issues.dependency.pr_no_dependencies = Walang nakatakdang mga dependency.
|
|
||||||
issues.due_date_not_set = Walang nakatakdang takdang petsa.
|
|
||||||
issues.due_date_added = dinagdag ang takdang petsa %s %s
|
|
||||||
issues.error_removing_due_date = Nabigong tanggalin ang takdang petsa.
|
|
||||||
issues.error_modifying_due_date = Nabigong baguhin ang takdang petsa.
|
|
||||||
issues.due_date_remove = tinanggal ang takdang petsa %s %s
|
|
||||||
issues.due_date_overdue = Overdue na
|
|
||||||
issues.due_date_invalid = Ang takdang petsa ay hindi wasto o wala sa saklaw. Mangyaring gamitin ang format na "yyyy-mm-dd".
|
|
||||||
issues.dependency.title = Mga dependency
|
|
||||||
issues.due_date_form = yyyy-mm-dd
|
|
||||||
issues.due_date_form_add = Magdagdag ng takdang petsa
|
|
||||||
issues.due_date_not_writer = Kailangang may write access ka sa repositoryo na ito upang baguhin ang takdang petsa ng isang isyu.
|
|
||||||
issues.due_date_modified = binago ang takdang petsa mula %[2]s sa %[1]s %[3]s
|
|
||||||
issues.due_date = Takdang petsa
|
|
||||||
issues.add_time_sum_to_small = Walang inilagay na oras.
|
|
||||||
issues.time_spent_total = Kabuuang nilaan na oras
|
|
||||||
issues.del_time_history = `binura ang nilaan na oras %s`
|
|
||||||
subscribe.issue.guest.tooltip = Mag-sign in para mag-subscribe sa isyung ito.
|
|
||||||
issues.time_spent_from_all_authors = `Kabuuang nilaan na oras: %s`
|
|
||||||
issues.start_tracking = Simulan ang pagsubaybay ng oras
|
|
||||||
issues.add_time_history = `dinagdag ang nilaan na oras %s`
|
|
||||||
issues.invalid_due_date_format = Ang format ng takdang petsa ay dapat "yyyy-mm-dd".
|
|
||||||
subscribe.pull.guest.tooltip = Mag-sign in para mag-subscribe sa hiling sa paghila na ito.
|
|
||||||
issues.edit.already_changed = Hindi maimbak ang mga pagbabago sa isyu. Mukhang nabago na ng ibang tagagamit ang nilalaman. Mangyaring i-refresh ang pahina at subukang baguhin muli upang maiwasang ma-overwrite ang kanilang pagbago
|
|
||||||
signing.wont_sign.not_signed_in = Hindi ka naka-sign in.
|
|
||||||
activity.new_issues_count_n = Bagong mga isyu
|
|
||||||
activity.git_stats_files_changed_n = mga nabago
|
|
||||||
activity.git_stats_files_changed_1 = nabago
|
|
||||||
issues.dependency.remove = Tanggalin
|
|
||||||
pulls.edit.already_changed = Hindi maimbak ang mga pagbabago sa [pull request]. Mukhang nabago na ng ibang tagagamit ang nilalaman. Mangyaring i-refresh ang pahina at subukang baguhin muli upang maiwasang ma-overwrite ang kanilang pagbago
|
|
||||||
milestones.filter_sort.most_complete = Pinakakumpleto
|
|
||||||
settings.collaboration.owner = May-ari
|
|
||||||
pulls.showing_only_single_commit = Ipinapakita lamang ang mga pagbago ng [commit] %[1]s
|
|
||||||
comments.edit.already_changed = Hindi maimbak ang mga pagbabago sa komento. Mukhang nabago na ng ibang tagagamit ang nilalaman. Mangyaring i-refresh ang pahina at subukang baguhin muli upang maiwasang ma-overwrite ang kanilang pagbago
|
|
||||||
milestones.completeness = <strong>%d%%</strong> nakumpleto
|
|
||||||
wiki.welcome = Maligayang pagdating sa Wiki.
|
|
||||||
wiki.create_first_page = Gawin ang unang pahina
|
|
||||||
pulls.switch_comparison_type = Ilipat ang uri ng pagkumpara
|
|
||||||
settings.collaboration.read = Basahin
|
|
||||||
contributors.contribution_type.additions = Mga pagdagdag
|
|
||||||
settings.collaboration.write = Isulat
|
|
||||||
wiki.search = Hanapin ang wiki
|
|
||||||
wiki.no_search_results = Walang mga resulta
|
|
||||||
activity.git_stats_addition_1 = %d pagdagdag
|
|
||||||
activity.git_stats_addition_n = %d mga pagdagdag
|
|
||||||
activity.git_stats_deletion_1 = %d pagbura
|
|
||||||
activity.git_stats_deletion_n = %d mga pagbura
|
|
||||||
activity.navbar.code_frequency = Dalas ng [code]
|
|
||||||
pulls.switch_head_and_base = Ilipat ang ulo at base
|
|
||||||
activity.git_stats_push_to_all_branches = sa lahat ng mga [branch].
|
|
||||||
activity.git_stats_pushed_n = mga itinulak
|
|
||||||
issues.reference_link = Pagsangguni: %s
|
|
||||||
activity.git_stats_pushed_1 = itinulak
|
|
||||||
activity.git_stats_commit_n = %d mga [commit]
|
|
||||||
issues.dependency.add = Magdagdag ng dependency…
|
|
||||||
issues.dependency.cancel = Kanselahin
|
|
||||||
issues.dependency.no_permission.can_remove = Wala kang pahintulot na basahin ang dependency na ito ngunit matatanggal ang dependency
|
|
||||||
issues.dependency.remove_info = Tanggalin ang dependency na ito
|
|
||||||
issues.dependency.added_dependency = `nagdagdag ng bagong dependency %s`
|
|
||||||
issues.review.dismissed_label = Nadismiss
|
|
||||||
issues.review.dismissed = nadismiss ang pagsuri ni %s %s
|
|
||||||
issues.review.self.approval = Hindi mo maaring aprubahan ang sarili mong hiling sa paghila.
|
|
||||||
issues.review.self.rejection = Hindi mo maaring humiling ng pagbabago sa sarili mong hiling sa paghila.
|
|
||||||
pulls.nothing_to_compare_have_tag = Magkapareho ang mga piniling branch/tag.
|
|
||||||
issues.dependency.no_permission_1 = Wala kang pahintulot na basahin ang dependency na %d
|
|
||||||
issues.dependency.no_permission_n = Wala kang pahintulot na basahin ang mga %d dependency
|
|
||||||
issues.dependency.removed_dependency = `nagtanggal ng dependency %s`
|
|
||||||
settings.mirror_settings.push_mirror.add = Magdagdag ng salaming pangtulak
|
|
||||||
settings.mirror_settings.last_update = Huling nabago
|
|
||||||
settings.units.add_more = Magdagdag ng higit pa...
|
|
||||||
activity.closed_issues_count_n = Isinarang mga isyu
|
|
||||||
activity.new_issues_count_1 = Bagong isyu
|
|
||||||
settings.branches.add_new_rule = Magdagdag ng bagong patakaran
|
|
||||||
pulls.push_rejected_summary = Buong mensahe ng pagtanggi
|
|
||||||
activity.title.issues_1 = %d isyu
|
|
||||||
activity.title.issues_n = % mga isyu
|
|
||||||
settings.mirror_settings.direction.pull = Paghila
|
|
||||||
settings.mirror_settings.direction.push = Pagtulak
|
|
||||||
settings.push_mirror_sync_in_progress = Itinulak ang mga pagbabago patungo sa [malayuang] %s sa ngayon.
|
|
||||||
milestones.filter_sort.least_issues = [Pinakamaliit] na mga isyu
|
|
||||||
pulls.showing_specified_commit_range = Ipinapakita lamang ang mga pagbabago sa pagitan ng %[1]s..%[2]s
|
|
||||||
wiki.pages = Mga pahina
|
|
||||||
activity.unresolved_conv_label = Nakabukas
|
|
||||||
settings.pull_mirror_sync_in_progress = Inihatak ang mga pagbabago mula sa [malayuang] %s sa ngayon.
|
|
||||||
|
|
||||||
[search]
|
[search]
|
||||||
commit_kind = Maghanap ng mga commit...
|
commit_kind = Maghanap ng mga commit...
|
||||||
|
@ -1882,10 +1781,6 @@ branch_kind = Maghanap ng mga branch...
|
||||||
runner_kind = Maghanap ng mga runner...
|
runner_kind = Maghanap ng mga runner...
|
||||||
no_results = Walang mga tumutugma na resulta na nahanap.
|
no_results = Walang mga tumutugma na resulta na nahanap.
|
||||||
code_search_by_git_grep = Ang kasalukuyang mga resulta ng paghahanap ng code ay ibinibigay ng "git grep*. Maaring may mga mas magandang resulta kapag na-enable ng tagapangasiwa ng site ang Indexer ng Repositoryo.
|
code_search_by_git_grep = Ang kasalukuyang mga resulta ng paghahanap ng code ay ibinibigay ng "git grep*. Maaring may mga mas magandang resulta kapag na-enable ng tagapangasiwa ng site ang Indexer ng Repositoryo.
|
||||||
pull_kind = Maghanap ng mga paghila...
|
|
||||||
issue_kind = Maghanap ng mga isyu...
|
|
||||||
exact = Eksakto
|
|
||||||
exact_tooltip = Samahan lamang ang mga resulta na tutugma sa eksaktong search term
|
|
||||||
|
|
||||||
[admin]
|
[admin]
|
||||||
auths.updated = Nabago
|
auths.updated = Nabago
|
||||||
|
@ -2078,7 +1973,7 @@ auths.auth_name = Pangalan ng authentikasyon
|
||||||
auths.security_protocol = Protocol ng seguridad
|
auths.security_protocol = Protocol ng seguridad
|
||||||
auths.domain = Domain
|
auths.domain = Domain
|
||||||
auths.host = Host
|
auths.host = Host
|
||||||
packages.total_size = Kabuuang laki: %s
|
packages.total_size = Kabuuang Laki: %s
|
||||||
auths.attribute_avatar = Attribute ng avatar
|
auths.attribute_avatar = Attribute ng avatar
|
||||||
auths.enabled = Naka-enable
|
auths.enabled = Naka-enable
|
||||||
auths.syncenabled = I-enable ang user synchronization
|
auths.syncenabled = I-enable ang user synchronization
|
||||||
|
@ -2113,7 +2008,7 @@ auths.user_dn = DN ng User
|
||||||
auths.attribute_username = Attribute ng username
|
auths.attribute_username = Attribute ng username
|
||||||
auths.attribute_username_placeholder = Iwanang walang laman para gamitin ang username na inilagay sa Forgejo.
|
auths.attribute_username_placeholder = Iwanang walang laman para gamitin ang username na inilagay sa Forgejo.
|
||||||
auths.attribute_name = Attribute ng unang pangalan
|
auths.attribute_name = Attribute ng unang pangalan
|
||||||
packages.unreferenced_size = Hindi sinangguniang laki: %s
|
packages.unreferenced_size = Walang Sangguniang Laki: %s
|
||||||
packages.owner = May-ari
|
packages.owner = May-ari
|
||||||
packages.name = Pangalan
|
packages.name = Pangalan
|
||||||
packages.cleanup = Linisin ang na-expire na data
|
packages.cleanup = Linisin ang na-expire na data
|
||||||
|
@ -2176,21 +2071,6 @@ config.register_email_confirm = Kailanganin ang pagkumpirma ng email upang magre
|
||||||
config.disable_register = I-disable ang pansariling pagrehistro
|
config.disable_register = I-disable ang pansariling pagrehistro
|
||||||
auths.default_domain_name = Default domain name na gagamitin para sa email address
|
auths.default_domain_name = Default domain name na gagamitin para sa email address
|
||||||
auths.allow_deactivate_all = Pinapayagan ang walang laman na resulta ng paghahanap para i-deactivate ang lahat ng mga user
|
auths.allow_deactivate_all = Pinapayagan ang walang laman na resulta ng paghahanap para i-deactivate ang lahat ng mga user
|
||||||
notices.type_2 = Trabaho
|
|
||||||
notices.desc = Deskripsyon
|
|
||||||
notices.op = Op.
|
|
||||||
notices.delete_all = Burahin ang lahat ng mga paunawa
|
|
||||||
notices.type = Uri
|
|
||||||
notices.type_1 = Repositoryo
|
|
||||||
notices.system_notice_list = Mga paunawa ng sistema
|
|
||||||
notices.deselect_all = I-deselect lahat
|
|
||||||
notices.select_all = Piliin lahat
|
|
||||||
notices.delete_success = Binura na ang mga paunawa ng sistema.
|
|
||||||
notices.operations = Mga operasyon
|
|
||||||
notices.delete_selected = Burahin ang pinili
|
|
||||||
notices.view_detail_header = Mga detalye ng paunawa
|
|
||||||
notices.inverse_selection = Baliktarin ang pagpili
|
|
||||||
config.app_slogan = Slogan ng instansya
|
|
||||||
|
|
||||||
[org]
|
[org]
|
||||||
repo_updated = Binago %s
|
repo_updated = Binago %s
|
||||||
|
@ -2212,11 +2092,6 @@ team_name_helper = Ang mga pangalan ng koponan ay dapat na maikli at makakaalala
|
||||||
team_desc_helper = Ilarawan ang layunin ng koponan.
|
team_desc_helper = Ilarawan ang layunin ng koponan.
|
||||||
members = Mga miyembro
|
members = Mga miyembro
|
||||||
code = Code
|
code = Code
|
||||||
follow_blocked_user = Hindi ka makakasunod sa organisasyong ito dahil hinarang ka ng organisasyong ito.
|
|
||||||
settings.permission = Mga pahintulot
|
|
||||||
settings.visibility.public = Pangpubliko
|
|
||||||
settings.full_name = Buong pangalan
|
|
||||||
form.create_org_not_allowed = Hindi ka pinapayagang gumawa ng organisasyon.
|
|
||||||
|
|
||||||
|
|
||||||
[packages]
|
[packages]
|
||||||
|
|
|
@ -87,9 +87,9 @@ rerun=Relancer
|
||||||
rerun_all=Relancer toutes les tâches
|
rerun_all=Relancer toutes les tâches
|
||||||
save=Enregistrer
|
save=Enregistrer
|
||||||
add=Ajouter
|
add=Ajouter
|
||||||
add_all=Tout ajouter
|
add_all=Tout Ajouter
|
||||||
remove=Supprimer
|
remove=Supprimer
|
||||||
remove_all=Tout supprimer
|
remove_all=Tout Supprimer
|
||||||
remove_label_str=Supprimer l’élément « %s »
|
remove_label_str=Supprimer l’élément « %s »
|
||||||
edit=Éditer
|
edit=Éditer
|
||||||
view=Voir
|
view=Voir
|
||||||
|
@ -280,19 +280,19 @@ offline_mode.description=Désactiver l'utilisation de CDNs, et servir toutes les
|
||||||
disable_gravatar=Désactiver Gravatar
|
disable_gravatar=Désactiver Gravatar
|
||||||
disable_gravatar.description=Désactiver Gravatar et les autres sources d'avatars tierces. Un avatar par défaut sera utilisé pour les utilisateurs n'ayant pas téléversé un avatar personnalisé.
|
disable_gravatar.description=Désactiver Gravatar et les autres sources d'avatars tierces. Un avatar par défaut sera utilisé pour les utilisateurs n'ayant pas téléversé un avatar personnalisé.
|
||||||
federated_avatar_lookup=Activer les avatars fédérés
|
federated_avatar_lookup=Activer les avatars fédérés
|
||||||
federated_avatar_lookup.description=Activer la recherche d'avatars en utilisant Libravatar.
|
federated_avatar_lookup.description=Activer la recherche unifiée d'avatars en utilisant le service open source unifié basé sur libravatar.
|
||||||
disable_registration=Désactiver la création de compte
|
disable_registration=Désactiver la création de compte
|
||||||
disable_registration.description=Seuls les administrateurs pourront créer de nouveaux comptes utilisateurs. Il est hautement recommandé de désactiver les inscriptions a moins que vous ayez l'intention de fournir une instance publiquement accessible et soyez prêt à gérer un grand nombre de comptes indésirables.
|
disable_registration.description=Désactiver les nouvelles inscriptions. Seuls les administrateurs pourront créer de nouveaux comptes utilisateurs.
|
||||||
allow_only_external_registration.description=N'autoriser l'inscription qu'à partir des services externes.
|
allow_only_external_registration.description=N'autoriser l'inscription qu'à partir des services externes
|
||||||
openid_signin=Activer l'authentification OpenID
|
openid_signin=Activer l'authentification OpenID
|
||||||
openid_signin.description=Activer l'authentification via OpenID.
|
openid_signin.description=Activer l'authentification via OpenID.
|
||||||
openid_signup=Activer l'inscription OpenID
|
openid_signup=Activer l'inscription OpenID
|
||||||
openid_signup.description=Activer l'inscription avec OpenID si le formulaire d'inscription est disponible.
|
openid_signup.description=Activer l'inscription avec OpenID.
|
||||||
enable_captcha=Activer le CAPTCHA d'inscription
|
enable_captcha=Activer le CAPTCHA d'inscription
|
||||||
enable_captcha.description=Demander un CAPTCHA aux utilisateurs qui créent des comptes.
|
enable_captcha.description=Demander un CAPTCHA à l'inscription.
|
||||||
require_sign_in_view=Exiger la connexion à un compte pour afficher les pages
|
require_sign_in_view=Exiger la connexion à un compte pour afficher les pages
|
||||||
require_sign_in_view.description=Limiter l’accès aux pages aux utilisateurs connectés. Les visiteurs ne verront que les pages de connexion et d’inscription.
|
require_sign_in_view.description=Limiter l’accès aux pages aux utilisateurs connectés. Les visiteurs ne verront que les pages de connexion et d’inscription.
|
||||||
admin_setting.description=La création d'un compte administrateur est facultative. Le premier utilisateur enregistré deviendra automatiquement un administrateur.
|
admin_setting.description=La création d'un compte administrateur est facultative. Le premier utilisateur enregistré deviendra automatiquement un administrateur le cas échéant.
|
||||||
admin_title=Paramètres de compte administrateur
|
admin_title=Paramètres de compte administrateur
|
||||||
admin_name=Nom d’utilisateur administrateur
|
admin_name=Nom d’utilisateur administrateur
|
||||||
admin_password=Mot de passe
|
admin_password=Mot de passe
|
||||||
|
@ -312,9 +312,9 @@ save_config_failed=L'enregistrement de la configuration %v a échoué
|
||||||
invalid_admin_setting=Paramètres du compte administrateur invalides : %v
|
invalid_admin_setting=Paramètres du compte administrateur invalides : %v
|
||||||
invalid_log_root_path=Le répertoire des fichiers de journalisation est invalide : %v
|
invalid_log_root_path=Le répertoire des fichiers de journalisation est invalide : %v
|
||||||
default_keep_email_private=Masquer les adresses courriels par défaut
|
default_keep_email_private=Masquer les adresses courriels par défaut
|
||||||
default_keep_email_private.description=Masquer par défaut les adresses courriels des nouveaux utilisateurs afin que cette information ne soient pas visible immédiatement après l'inscription.
|
default_keep_email_private.description=Masquer par défaut les adresses courriels des nouveaux utilisateurs.
|
||||||
default_allow_create_organization=Autoriser la création d'organisations par défaut
|
default_allow_create_organization=Autoriser la création d'organisations par défaut
|
||||||
default_allow_create_organization.description=Permettre aux nouveaux comptes utilisateurs de créer des organisations par défaut. Lorsque cette option est désactivée, un administrateur devra donner la permission de créer des organisations aux nouveaux utilisateurs.
|
default_allow_create_organization.description=Permettre aux nouveaux comptes utilisateurs de créer des organisations par défaut.
|
||||||
default_enable_timetracking=Activer le suivi de temps par défaut
|
default_enable_timetracking=Activer le suivi de temps par défaut
|
||||||
default_enable_timetracking.description=Activer le suivi du temps pour les nouveaux dépôts par défaut.
|
default_enable_timetracking.description=Activer le suivi du temps pour les nouveaux dépôts par défaut.
|
||||||
no_reply_address=Domaine pour les courriels cachés
|
no_reply_address=Domaine pour les courriels cachés
|
||||||
|
@ -331,7 +331,6 @@ smtp_from_invalid = L'adresse "Envoyer un courriel en tant que" est invalide
|
||||||
config_location_hint = Ces options de configuration seront sauvegardées dans :
|
config_location_hint = Ces options de configuration seront sauvegardées dans :
|
||||||
app_slogan = Slogan de l'instance
|
app_slogan = Slogan de l'instance
|
||||||
app_slogan_helper = Entrez le slogan de l'instance ici. En son absence il sera désactivé.
|
app_slogan_helper = Entrez le slogan de l'instance ici. En son absence il sera désactivé.
|
||||||
allow_only_external_registration = Utiliser uniquement l'enregistrement via un service externe
|
|
||||||
|
|
||||||
[home]
|
[home]
|
||||||
uname_holder=Nom d’utilisateur ou adresse courriel
|
uname_holder=Nom d’utilisateur ou adresse courriel
|
||||||
|
@ -794,7 +793,7 @@ add_email_success=La nouvelle adresse e-mail a été ajoutée.
|
||||||
email_preference_set_success=L'e-mail de préférence a été défini avec succès.
|
email_preference_set_success=L'e-mail de préférence a été défini avec succès.
|
||||||
add_openid_success=La nouvelle adresse OpenID a été ajoutée.
|
add_openid_success=La nouvelle adresse OpenID a été ajoutée.
|
||||||
keep_email_private=Cacher l'adresse courriel
|
keep_email_private=Cacher l'adresse courriel
|
||||||
keep_email_private_popup=Ceci masquera votre adresse e-mail de votre profil, de vos demandes d'ajout et des fichiers modifiés depuis l'interface Web. Les révisions déjà soumises ne seront pas modifiés. Utilisez %s dans les révisions pour les relier à votre compte.
|
keep_email_private_popup=Ceci masquera votre adresse e-mail de votre profil, de vos demandes d'ajout et des fichiers modifiés depuis l'interface Web. Les révisions déjà soumises ne seront pas modifiés.
|
||||||
openid_desc=OpenID vous permet de confier l'authentification à une tierce partie.
|
openid_desc=OpenID vous permet de confier l'authentification à une tierce partie.
|
||||||
|
|
||||||
manage_ssh_keys=Gérer les clés SSH
|
manage_ssh_keys=Gérer les clés SSH
|
||||||
|
@ -2763,11 +2762,6 @@ wiki.search = Recherche dans le wiki
|
||||||
wiki.no_search_results = Pas de résultats
|
wiki.no_search_results = Pas de résultats
|
||||||
form.string_too_long = La chaîne de caractère fournie fait plus de %d caractères.
|
form.string_too_long = La chaîne de caractère fournie fait plus de %d caractères.
|
||||||
settings.federation_settings = Paramètres de féderation
|
settings.federation_settings = Paramètres de féderation
|
||||||
project = Projets
|
|
||||||
subscribe.issue.guest.tooltip = Authentifiez vous pour vous abonner à ce ticket.
|
|
||||||
subscribe.pull.guest.tooltip = Authentifiez vous pour suivre cette demande d'ajout.
|
|
||||||
n_release_one = %s publication
|
|
||||||
n_release_few = %s publications
|
|
||||||
|
|
||||||
[graphs]
|
[graphs]
|
||||||
component_loading=Chargement de %s…
|
component_loading=Chargement de %s…
|
||||||
|
|
|
@ -12,7 +12,7 @@ sign_in_with_provider = Iniciar Sesión con %s
|
||||||
sign_in_or = ou
|
sign_in_or = ou
|
||||||
sign_out = Pechar Sesión
|
sign_out = Pechar Sesión
|
||||||
sign_up = Rexístrate
|
sign_up = Rexístrate
|
||||||
link_account = Vincular Conta
|
link_account = Ligazón a Conta
|
||||||
register = Rexistro
|
register = Rexistro
|
||||||
version = Vesión
|
version = Vesión
|
||||||
powered_by = Desenvolvido por %s
|
powered_by = Desenvolvido por %s
|
||||||
|
@ -125,23 +125,6 @@ confirm_delete_selected = Confirmar a eliminación de todos os elementos selecci
|
||||||
show_full_screen = Mostrar Pantalla Completa
|
show_full_screen = Mostrar Pantalla Completa
|
||||||
more_items = Máis items
|
more_items = Máis items
|
||||||
toggle_menu = Alternar Menú
|
toggle_menu = Alternar Menú
|
||||||
filter = Filtro
|
|
||||||
filter.clear = Borrar filtros
|
|
||||||
filter.is_archived = Arquivado
|
|
||||||
filter.is_fork = Derivacións
|
|
||||||
filter.is_mirror = Espellos
|
|
||||||
filter.not_archived = Non arquivado
|
|
||||||
filter.not_fork = Sen derivacións
|
|
||||||
filter.not_mirror = Sen réplicas
|
|
||||||
invalid_data = Datos non válidos: %v
|
|
||||||
concept_user_individual = Individual
|
|
||||||
concept_code_repository = Repositorio
|
|
||||||
filter.is_template = Modelos
|
|
||||||
filter.not_template = Non modelos
|
|
||||||
filter.public = Publico
|
|
||||||
pin = Aproximada
|
|
||||||
filter.private = Privado
|
|
||||||
copy_generic = Copiar ao portapapeis
|
|
||||||
|
|
||||||
[aria]
|
[aria]
|
||||||
navbar = Barra de Navegación
|
navbar = Barra de Navegación
|
||||||
|
@ -154,71 +137,9 @@ contributions_zero = Sen Achegas
|
||||||
less = Menos
|
less = Menos
|
||||||
more = Máis
|
more = Máis
|
||||||
number_of_contributions_in_the_last_12_months = %s de contribucións nos últimos 12 meses
|
number_of_contributions_in_the_last_12_months = %s de contribucións nos últimos 12 meses
|
||||||
contributions_few = contribucións
|
|
||||||
contributions_one = contribución
|
|
||||||
|
|
||||||
[editor]
|
[editor]
|
||||||
buttons.heading.tooltip = Engadir Título
|
buttons.heading.tooltip = Engadir Título
|
||||||
buttons.italic.tooltip = Engade texto en cursiva
|
buttons.italic.tooltip = Engade texto en cursiva
|
||||||
buttons.quote.tooltip = Texto de cita
|
buttons.quote.tooltip = Texto de cita
|
||||||
buttons.bold.tooltip = Engadir texto en negriña
|
buttons.bold.tooltip = Engadir texto en negriña
|
||||||
buttons.link.tooltip = Engade unha ligazón
|
|
||||||
buttons.code.tooltip = Engadir código
|
|
||||||
buttons.list.unordered.tooltip = Engadir unha lista de marcadores
|
|
||||||
buttons.enable_monospace_font = Activa o tipo de letra monoespazo
|
|
||||||
buttons.disable_monospace_font = Desactivar o tipo de letra monoespazo
|
|
||||||
buttons.ref.tooltip = Referencia un problema ou pull request
|
|
||||||
|
|
||||||
|
|
||||||
[search]
|
|
||||||
search = Buscar...
|
|
||||||
type_tooltip = Tipo de busca
|
|
||||||
|
|
||||||
[startpage]
|
|
||||||
platform = Multiplataforma
|
|
||||||
app_desc = Um servizo Git autoxestionado e fácil de usar
|
|
||||||
install = Fácil de instalar
|
|
||||||
platform_desc = Forgejo execútase en calquera lugar onde <a target="_blank" rel="noopener noreferrer" href="https://go.dev/">Go</a> poida compilar para: Windows, MacOS, Linux, ARM, etc. Escolla seu preferido!
|
|
||||||
install_desc = Simplemente <a target="_blank" rel="noopener noreferrer" href="https://forgejo.org/download/#installation-from-binary">executa o binario</a> para a túa plataforma, envíao con < un target="_blank" rel="noopener noreferrer" href="https://forgejo.org/download/#container-image">Docker</a> ou consígueo <a target="_blank" rel=" noopener noreferrer" href="https://forgejo.org/download">empaquetado</a>.
|
|
||||||
|
|
||||||
[error]
|
|
||||||
occurred = Ocorreu un erro
|
|
||||||
missing_csrf = Solicitude incorrecta: non hai ningún token CSRF presente
|
|
||||||
server_internal = Erro interno do servidor
|
|
||||||
invalid_csrf = Solicitude incorrecta: token CSRF non válido
|
|
||||||
not_found = Non se puido atopar o obxectivo.
|
|
||||||
network_error = Erro de rede
|
|
||||||
report_message = Se cres que se trata dun erro de Forgejo, busca problemas en <a href="https://codeberg.org/forgejo/forgejo/issues" target="_blank">Codeberg</a> ou abre un novo problema Se é necesario.
|
|
||||||
|
|
||||||
[filter]
|
|
||||||
string.asc = A - Z
|
|
||||||
string.desc = Z - A
|
|
||||||
|
|
||||||
[install]
|
|
||||||
err_empty_db_path = A ruta da base de datos SQLite3 non pode estar baleira.
|
|
||||||
smtp_from_invalid = O enderezo "Enviar correo electrónico como" non é válido
|
|
||||||
optional_title = Axustes opcionais
|
|
||||||
email_title = Configuración de correo electrónico
|
|
||||||
smtp_addr = Servidor SMTP
|
|
||||||
smtp_port = Porto do Servidor SMTP
|
|
||||||
smtp_from = Enviar correo electrónico como
|
|
||||||
no_admin_and_disable_registration = Non pode desactivar o rexistro automático de usuarios sen crear unha conta de administrador.
|
|
||||||
err_empty_admin_password = O contrasinal do administrador non pode estar baleiro.
|
|
||||||
err_empty_admin_email = O correo electrónico do administrador non pode estar baleiro.
|
|
||||||
err_admin_name_is_reserved = O nome de usuario do administrador non é válido, o nome de usuario está reservado
|
|
||||||
reinstall_confirm_check_2 = É posible que os repositorios e a configuración teñan que volver a sincronizarse. Ao marcar esta caixa, confirmas que volverás sincronizar os ganchos para os repositorios e o ficheiro authorized_keys manualmente. Confirma que se asegurará de que a configuración do repositorio e do espello sexa correcta.
|
|
||||||
reinstall_confirm_check_3 = Confirmas que estás absolutamente seguro de que este Forgejo se está a executar coa localización correcta do app.ini e de que tes que volver a instalar. Vostede confirma que recoñece os riscos anteriores.
|
|
||||||
err_admin_name_pattern_not_allowed = O nome de usuario do administrador non é válido, o nome de usuario coincide cun patrón reservado
|
|
||||||
err_admin_name_is_invalid = O nome de usuario do administrador non é válido
|
|
||||||
ssl_mode = SSL
|
|
||||||
path = Ruta
|
|
||||||
reinstall_error = Está tentando instalar nunha base de datos Forgejo existente
|
|
||||||
http_port = Porto de escoita HTTP do Forgejo
|
|
||||||
http_port_helper = Número de porto que utilizará o servidor web de Forgejo.
|
|
||||||
app_url = URL Base
|
|
||||||
app_url_helper = Enderezo base para URL de clonación HTTP(S) e notificacións por correo electrónico.
|
|
||||||
log_root_path = Ruta de rexistro
|
|
||||||
log_root_path_helper = Os ficheiros de rexistro escribiranse neste directorio.
|
|
||||||
sqlite_helper = Ruta do ficheiro para a base de datos SQLite3.<br>Introduza unha ruta absoluta se executa Forgejo como servizo.
|
|
||||||
reinstall_confirm_message = A reinstalación cunha base de datos Forgejo existente pode causar varios problemas. Na maioría dos casos, deberías usar o teu "app.ini" existente para executar Forgejo. Se sabes o que estás facendo, confirma o seguinte:
|
|
||||||
reinstall_confirm_check_1 = É posible que se perdan os datos cifrados pola SECRET_KEY en app.ini: é posible que os usuarios non poidan iniciar sesión con 2FA/OTP e que os espellos non funcionen correctamente. Ao marcar esta caixa, confirmas que o ficheiro app.ini actual contén a SECRET_KEY correcta.
|
|
|
@ -275,22 +275,22 @@ register_confirm=登録にはメールによる確認が必要
|
||||||
mail_notify=メール通知を有効にする
|
mail_notify=メール通知を有効にする
|
||||||
server_service_title=サーバーと外部サービスの設定
|
server_service_title=サーバーと外部サービスの設定
|
||||||
offline_mode=ローカルモードを有効にする
|
offline_mode=ローカルモードを有効にする
|
||||||
offline_mode.description=外部のCDNサービスを使わず、すべてのリソースを自前で提供します。
|
offline_mode.description=外のCDNサービスを使わず、すべてのリソースを自前で提供します。
|
||||||
disable_gravatar=Gravatarを無効にする
|
disable_gravatar=Gravatarを無効にする
|
||||||
disable_gravatar.description=Gravatarと外部のアバターソースを無効にします。 アバターをローカルにアップロードしていないユーザーには、デフォルトのアバターが使用されます。
|
disable_gravatar.description=Gravatarと外のアバターソースを無効にします。 アバターをローカルにアップロードしていないユーザーには、デフォルトのアバターが使用されます。
|
||||||
federated_avatar_lookup=フェデレーテッド・アバターを有効にする
|
federated_avatar_lookup=フェデレーテッド・アバターを有効にする
|
||||||
federated_avatar_lookup.description=Libravatarを使用したフェデレーテッド・アバター検索を有効にします。
|
federated_avatar_lookup.description=Libravatarを使用したフェデレーテッド・アバター検索を有効にします。
|
||||||
disable_registration=セルフ登録を無効にする
|
disable_registration=セルフ登録を無効にする
|
||||||
disable_registration.description=管理者だけが新しいユーザー アカウントを作成できます。誰もが利用できるパブリックインスタンスをホストし、大量のスパムアカウントに対処する準備ができていない限り、登録を無効にしておくことを強くお勧めします。
|
disable_registration.description=ユーザーのセルフ登録を無効にします。 新しいユーザーアカウントを作成できるのは管理者だけとなります。
|
||||||
allow_only_external_registration.description=設定された外部サービスを使用してのみ新しいアカウントを作成できます。
|
allow_only_external_registration.description=外部サービスを使用した登録のみを許可
|
||||||
openid_signin=OpenIDを使ったサインインを有効にする
|
openid_signin=OpenIDを使ったサインインを有効にする
|
||||||
openid_signin.description=OpenIDを使ったユーザーのサインインを有効にします。
|
openid_signin.description=OpenIDを使ったユーザーのサインインを有効にします。
|
||||||
openid_signup=OpenIDを使ったセルフ登録を有効にする
|
openid_signup=OpenIDを使ったセルフ登録を有効にする
|
||||||
openid_signup.description=セルフ登録が有効になっている場合、ユーザーが OpenID 経由でアカウントを作成できるようにします。
|
openid_signup.description=OpenIDベースでのユーザーのセルフ登録を有効にします。
|
||||||
enable_captcha=登録時のCAPTCHAを有効にする
|
enable_captcha=登録時のCAPTCHAを有効にする
|
||||||
enable_captcha.description=アカウントを作成する時に、ユーザーにCAPTCHA 認証を必須にします。
|
enable_captcha.description=ユーザーのセルフ登録時にCAPTCHAを必須にします。
|
||||||
require_sign_in_view=インスタンス内ページの閲覧にサインインが必要
|
require_sign_in_view=インスタンス内ページの閲覧にサインインが必要
|
||||||
require_sign_in_view.description=コンテンツへのアクセスをサインインしたユーザーに限定します。 ゲストは認証ページだけ見ることができます。
|
require_sign_in_view.description=ページアクセスをサインイン済みユーザーに限定します。 訪問者はサインインページと登録ページだけ見ることができます。
|
||||||
admin_setting.description=管理者アカウントの作成は任意です。 最初に登録したユーザーは自動的に管理者になります。
|
admin_setting.description=管理者アカウントの作成は任意です。 最初に登録したユーザーは自動的に管理者になります。
|
||||||
admin_title=管理者アカウントの設定
|
admin_title=管理者アカウントの設定
|
||||||
admin_name=管理者ユーザー名
|
admin_name=管理者ユーザー名
|
||||||
|
@ -311,9 +311,9 @@ save_config_failed=設定ファイルの保存に失敗しました: %v
|
||||||
invalid_admin_setting=管理者アカウントの設定が無効です: %v
|
invalid_admin_setting=管理者アカウントの設定が無効です: %v
|
||||||
invalid_log_root_path=ログの保存先パスが無効です: %v
|
invalid_log_root_path=ログの保存先パスが無効です: %v
|
||||||
default_keep_email_private=デフォルトでメールアドレスを隠す
|
default_keep_email_private=デフォルトでメールアドレスを隠す
|
||||||
default_keep_email_private.description=新規ユーザーのメールアドレスの非表示をデフォルトで有効にして、サインアップ直後にこの情報が漏洩しないようにします。
|
default_keep_email_private.description=新しいユーザーアカウントで、デフォルトでメールアドレスを隠す設定にします。
|
||||||
default_allow_create_organization=デフォルトで組織の作成を許可
|
default_allow_create_organization=デフォルトで組織の作成を許可
|
||||||
default_allow_create_organization.description=デフォルトで、新規ユーザーが組織を作成できるようにします。このオプションを無効にすると、管理者は新規ユーザーに組織を作成する権限を付与する必要があります。
|
default_allow_create_organization.description=新しいユーザーアカウントに組織の作成をデフォルトで許可します。
|
||||||
default_enable_timetracking=デフォルトでタイムトラッキング有効
|
default_enable_timetracking=デフォルトでタイムトラッキング有効
|
||||||
default_enable_timetracking.description=新しいリポジトリのタイムトラッキングをデフォルトで有効にします。
|
default_enable_timetracking.description=新しいリポジトリのタイムトラッキングをデフォルトで有効にします。
|
||||||
no_reply_address=メールを隠すときのドメイン
|
no_reply_address=メールを隠すときのドメイン
|
||||||
|
@ -328,9 +328,6 @@ allow_dots_in_usernames = ユーザー名にドットを使用できるように
|
||||||
smtp_from_invalid = メール送信者のアドレスが無効です
|
smtp_from_invalid = メール送信者のアドレスが無効です
|
||||||
enable_update_checker_helper_forgejo = Forgejoの最新バージョンを、release.forgejo.orgのDNSのTXTレコードを定期的に参照して取得します。
|
enable_update_checker_helper_forgejo = Forgejoの最新バージョンを、release.forgejo.orgのDNSのTXTレコードを定期的に参照して取得します。
|
||||||
config_location_hint = この設定は次に保存されます:
|
config_location_hint = この設定は次に保存されます:
|
||||||
allow_only_external_registration = 外部サービス経由のみの登録を許可する
|
|
||||||
app_slogan = インスタンスのスローガン
|
|
||||||
app_slogan_helper = ここにインスタンスのスローガンを入力します。無効にするには空白のままにします。
|
|
||||||
|
|
||||||
[home]
|
[home]
|
||||||
uname_holder=ユーザー名またはメールアドレス
|
uname_holder=ユーザー名またはメールアドレス
|
||||||
|
@ -668,7 +665,7 @@ settings=ユーザー設定
|
||||||
form.name_reserved=ユーザー名 "%s" は予約されています。
|
form.name_reserved=ユーザー名 "%s" は予約されています。
|
||||||
form.name_pattern_not_allowed=`"%s" の形式はユーザー名に使用できません。`
|
form.name_pattern_not_allowed=`"%s" の形式はユーザー名に使用できません。`
|
||||||
form.name_chars_not_allowed=ユーザー名 "%s" には無効な文字が含まれています。
|
form.name_chars_not_allowed=ユーザー名 "%s" には無効な文字が含まれています。
|
||||||
block_user.detail_2 = このユーザーは、リポジトリ、作成されたイシュー、コメントを操作できません。
|
block_user.detail_2 = このユーザーは、リポジトリ、作成された問題、コメントを操作できません。
|
||||||
block_user.detail_1 = このユーザーからのフォローが解除されています。
|
block_user.detail_1 = このユーザーからのフォローが解除されています。
|
||||||
follow_blocked_user = あなたはこのユーザーをフォローできません。なぜなら、あなたはこのユーザーをブロックしたか、このユーザーはあなたをブロックしているからです。
|
follow_blocked_user = あなたはこのユーザーをフォローできません。なぜなら、あなたはこのユーザーをブロックしたか、このユーザーはあなたをブロックしているからです。
|
||||||
block_user.detail_3 = このユーザーはあなたをコラボレーターとして追加することはできませんし、あなたも彼らをコラボレーターに追加できません。
|
block_user.detail_3 = このユーザーはあなたをコラボレーターとして追加することはできませんし、あなたも彼らをコラボレーターに追加できません。
|
||||||
|
@ -799,7 +796,7 @@ manage_ssh_keys=SSHキーの管理
|
||||||
manage_ssh_principals=SSH証明書プリンシパルの管理
|
manage_ssh_principals=SSH証明書プリンシパルの管理
|
||||||
manage_gpg_keys=GPGキーの管理
|
manage_gpg_keys=GPGキーの管理
|
||||||
add_key=キーを追加
|
add_key=キーを追加
|
||||||
ssh_desc=あなたのアカウントに関連付けられているSSH公開鍵です。 対応する秘密鍵で、あなたのリポジトリへのフルアクセスが可能です。検証済みの SSHキーは、SSH 署名された Git コミットの検証に使用できます。
|
ssh_desc=あなたのアカウントに関連付けられているSSH公開鍵です。 対応する秘密鍵で、あなたのリポジトリへのフルアクセスが可能です。
|
||||||
principal_desc=これらのSSH証明書プリンシパルがあなたのアカウントに関連付けられており、あなたのリポジトリへのフルアクセスが許可されています。
|
principal_desc=これらのSSH証明書プリンシパルがあなたのアカウントに関連付けられており、あなたのリポジトリへのフルアクセスが許可されています。
|
||||||
gpg_desc=あなたのアカウントに関連付けられているGPG公開鍵です。 これらの鍵でコミットが検証できるよう、秘密鍵は安全に保管してください。
|
gpg_desc=あなたのアカウントに関連付けられているGPG公開鍵です。 これらの鍵でコミットが検証できるよう、秘密鍵は安全に保管してください。
|
||||||
ssh_helper=<strong>ヘルプが必要ですか?</strong> GitHubのガイドをご覧ください: <a href="%s">SSHキーの作成</a>、SSHを使う際に<a href="%s">よくある問題</a>
|
ssh_helper=<strong>ヘルプが必要ですか?</strong> GitHubのガイドをご覧ください: <a href="%s">SSHキーの作成</a>、SSHを使う際に<a href="%s">よくある問題</a>
|
||||||
|
@ -875,7 +872,7 @@ social_desc=これらのソーシャルアカウントで、あなたのアカ
|
||||||
unbind=連携の解除
|
unbind=連携の解除
|
||||||
unbind_success=ソーシャルアカウントの登録を削除しました。
|
unbind_success=ソーシャルアカウントの登録を削除しました。
|
||||||
|
|
||||||
manage_access_token=アクセストークン
|
manage_access_token=アクセストークンの管理
|
||||||
generate_new_token=新しいトークンを生成
|
generate_new_token=新しいトークンを生成
|
||||||
tokens_desc=これらのトークンは、Forgejo APIによるアカウントへのアクセスを許可します。
|
tokens_desc=これらのトークンは、Forgejo APIによるアカウントへのアクセスを許可します。
|
||||||
token_name=トークン名
|
token_name=トークン名
|
||||||
|
@ -906,7 +903,7 @@ remove_oauth2_application=OAuth2アプリケーションの削除
|
||||||
remove_oauth2_application_desc=OAuth2アプリケーションを削除すると、すべての署名済みアクセストークンが利用できなくなります。 続行しますか?
|
remove_oauth2_application_desc=OAuth2アプリケーションを削除すると、すべての署名済みアクセストークンが利用できなくなります。 続行しますか?
|
||||||
remove_oauth2_application_success=アプリケーションを削除しました。
|
remove_oauth2_application_success=アプリケーションを削除しました。
|
||||||
create_oauth2_application=新しいOAuth2アプリケーションの作成
|
create_oauth2_application=新しいOAuth2アプリケーションの作成
|
||||||
create_oauth2_application_button=アプリケーションの作成
|
create_oauth2_application_button=アプリケーション作成
|
||||||
create_oauth2_application_success=新しいOAuth2アプリケーションを作成しました。
|
create_oauth2_application_success=新しいOAuth2アプリケーションを作成しました。
|
||||||
update_oauth2_application_success=OAuth2アプリケーションを更新しました。
|
update_oauth2_application_success=OAuth2アプリケーションを更新しました。
|
||||||
oauth2_application_name=アプリケーション名
|
oauth2_application_name=アプリケーション名
|
||||||
|
@ -924,7 +921,7 @@ oauth2_application_remove_description=OAuth2アプリケーションを削除す
|
||||||
oauth2_application_locked=設定で有効にされた場合、Forgejoは起動時にいくつかのOAuth2アプリケーションを事前登録します。 想定されていない動作を防ぐため、これらは編集も削除もできません。 詳細についてはOAuth2のドキュメントを参照してください。
|
oauth2_application_locked=設定で有効にされた場合、Forgejoは起動時にいくつかのOAuth2アプリケーションを事前登録します。 想定されていない動作を防ぐため、これらは編集も削除もできません。 詳細についてはOAuth2のドキュメントを参照してください。
|
||||||
|
|
||||||
authorized_oauth2_applications=許可済みOAuth2アプリケーション
|
authorized_oauth2_applications=許可済みOAuth2アプリケーション
|
||||||
authorized_oauth2_applications_description=これらのサードパーティ アプリケーションに、あなたのForgejoアカウントへのアクセスを許可しています。 使用しなくなったアプリケーションはアクセス権を取り消すようにしてください。
|
authorized_oauth2_applications_description=これらのサードパーティ アプリケーションに、あなたのForgejoアカウントへのアクセスを許可しています。 不要になったアプリケーションはアクセス権を取り消すようにしてください。
|
||||||
revoke_key=取り消し
|
revoke_key=取り消し
|
||||||
revoke_oauth2_grant=アクセス権の取り消し
|
revoke_oauth2_grant=アクセス権の取り消し
|
||||||
revoke_oauth2_grant_description=このサードパーティ アプリケーションのアクセス権を取り消し、アプリケーションがあなたのデータへアクセスすることを防ぎます。 続行しますか?
|
revoke_oauth2_grant_description=このサードパーティ アプリケーションのアクセス権を取り消し、アプリケーションがあなたのデータへアクセスすることを防ぎます。 続行しますか?
|
||||||
|
@ -957,10 +954,10 @@ webauthn_delete_key_desc=セキュリティキーの登録を解除すると、
|
||||||
webauthn_key_loss_warning=セキュリティキーを紛失すると、アカウントへのアクセスを失います。
|
webauthn_key_loss_warning=セキュリティキーを紛失すると、アカウントへのアクセスを失います。
|
||||||
webauthn_alternative_tip=もうひとつ別の認証方法も設定しておくと良いでしょう。
|
webauthn_alternative_tip=もうひとつ別の認証方法も設定しておくと良いでしょう。
|
||||||
|
|
||||||
manage_account_links=連携アカウント
|
manage_account_links=連携アカウントの管理
|
||||||
manage_account_links_desc=これらの外部アカウントがForgejoアカウントと連携されています。
|
manage_account_links_desc=これらの外部アカウントがForgejoアカウントと連携されています。
|
||||||
account_links_not_available=現在このForgejoアカウントが連携している外部アカウントはありません。
|
account_links_not_available=現在このForgejoアカウントが連携している外部アカウントはありません。
|
||||||
link_account=アカウントを連携
|
link_account=アカウントをリンク
|
||||||
remove_account_link=連携アカウントの削除
|
remove_account_link=連携アカウントの削除
|
||||||
remove_account_link_desc=連携アカウントを削除し、Forgejoアカウントへのアクセス権を取り消します。 続行しますか?
|
remove_account_link_desc=連携アカウントを削除し、Forgejoアカウントへのアクセス権を取り消します。 続行しますか?
|
||||||
remove_account_link_success=連携アカウントを削除しました。
|
remove_account_link_success=連携アカウントを削除しました。
|
||||||
|
@ -977,9 +974,9 @@ confirm_delete_account=削除の続行
|
||||||
delete_account_title=ユーザーアカウントの削除
|
delete_account_title=ユーザーアカウントの削除
|
||||||
delete_account_desc=このユーザーアカウントを恒久的に削除してもよろしいですか?
|
delete_account_desc=このユーザーアカウントを恒久的に削除してもよろしいですか?
|
||||||
|
|
||||||
email_notifications.enable=メール通知を有効
|
email_notifications.enable=メール通知有効
|
||||||
email_notifications.onmention=メンションのみメール通知
|
email_notifications.onmention=メンションのみメール通知
|
||||||
email_notifications.disable=メール通知を無効
|
email_notifications.disable=メール通知無効
|
||||||
email_notifications.submit=メール設定を保存
|
email_notifications.submit=メール設定を保存
|
||||||
email_notifications.andyourown=自分に関する通知も含める
|
email_notifications.andyourown=自分に関する通知も含める
|
||||||
|
|
||||||
|
@ -990,7 +987,7 @@ visibility.limited=限定
|
||||||
visibility.limited_tooltip=認証されたユーザーのみに表示されます
|
visibility.limited_tooltip=認証されたユーザーのみに表示されます
|
||||||
visibility.private=プライベート
|
visibility.private=プライベート
|
||||||
visibility.private_tooltip=あなたが参加した組織のメンバーのみに表示されます
|
visibility.private_tooltip=あなたが参加した組織のメンバーのみに表示されます
|
||||||
blocked_users_none = ブロックしているユーザーはいません。
|
blocked_users_none = あなたはまだ誰もユーザーをブロックしていません。
|
||||||
blocked_users = ブロックしたユーザー
|
blocked_users = ブロックしたユーザー
|
||||||
user_unblock_success = このユーザーをアンブロックするのに成功しました。
|
user_unblock_success = このユーザーをアンブロックするのに成功しました。
|
||||||
blocked_since = %s からブロック中
|
blocked_since = %s からブロック中
|
||||||
|
@ -999,7 +996,7 @@ change_password = パスワードを変更
|
||||||
pronouns = 代名詞
|
pronouns = 代名詞
|
||||||
pronouns_custom = カスタム
|
pronouns_custom = カスタム
|
||||||
pronouns_unspecified = 未指定
|
pronouns_unspecified = 未指定
|
||||||
update_hints = ヒントを更新
|
update_hints = アップデートのヒント
|
||||||
additional_repo_units_hint_description = 利用可能なすべての機能が有効になっていないリポジトリに対して、「機能を追加...」ボタンを表示します。
|
additional_repo_units_hint_description = 利用可能なすべての機能が有効になっていないリポジトリに対して、「機能を追加...」ボタンを表示します。
|
||||||
update_hints_success = ヒントが更新されました。
|
update_hints_success = ヒントが更新されました。
|
||||||
hints = ヒント
|
hints = ヒント
|
||||||
|
@ -1122,7 +1119,7 @@ desc.sha256=SHA256
|
||||||
template.items=テンプレート項目
|
template.items=テンプレート項目
|
||||||
template.git_content=Gitコンテンツ (デフォルトブランチ)
|
template.git_content=Gitコンテンツ (デフォルトブランチ)
|
||||||
template.git_hooks=Gitフック
|
template.git_hooks=Gitフック
|
||||||
template.git_hooks_tooltip=現在、一度追加したGitフックは変更や削除ができません。 テンプレートリポジトリを信頼している場合のみ、これを選択してください。
|
template.git_hooks_tooltip=現在のところ、一度追加したGitフックは変更や削除ができません。 テンプレートリポジトリを信頼している場合のみ、これを選択してください。
|
||||||
template.webhooks=Webhook
|
template.webhooks=Webhook
|
||||||
template.topics=トピック
|
template.topics=トピック
|
||||||
template.avatar=アバター
|
template.avatar=アバター
|
||||||
|
@ -1175,7 +1172,7 @@ migrate.migrating=<b>%s</b> から移行しています ...
|
||||||
migrate.migrating_failed=<b>%s</b> からの移行が失敗しました。
|
migrate.migrating_failed=<b>%s</b> からの移行が失敗しました。
|
||||||
migrate.migrating_failed.error=移行に失敗しました: %s
|
migrate.migrating_failed.error=移行に失敗しました: %s
|
||||||
migrate.migrating_failed_no_addr=移行に失敗しました。
|
migrate.migrating_failed_no_addr=移行に失敗しました。
|
||||||
migrate.github.description=github.com やその他の GitHub エンタープライズサーバーからデータを移行します。
|
migrate.github.description=github.com やその他の GitHub インスタンスからデータを移行します。
|
||||||
migrate.git.description=Git サービスからリポジトリのみを移行します。
|
migrate.git.description=Git サービスからリポジトリのみを移行します。
|
||||||
migrate.gitlab.description=gitlab.com やその他の GitLab インスタンスからデータを移行します。
|
migrate.gitlab.description=gitlab.com やその他の GitLab インスタンスからデータを移行します。
|
||||||
migrate.gitea.description=gitea.com やその他の Gitea/Forgejo インスタンスからデータを移行します。
|
migrate.gitea.description=gitea.com やその他の Gitea/Forgejo インスタンスからデータを移行します。
|
||||||
|
@ -1283,7 +1280,7 @@ line=行
|
||||||
lines=行
|
lines=行
|
||||||
from_comment=(コメント)
|
from_comment=(コメント)
|
||||||
|
|
||||||
editor.add_file=ファイルの追加
|
editor.add_file=ファイル追加
|
||||||
editor.new_file=新規ファイル
|
editor.new_file=新規ファイル
|
||||||
editor.upload_file=ファイルをアップロード
|
editor.upload_file=ファイルをアップロード
|
||||||
editor.edit_file=ファイルを編集
|
editor.edit_file=ファイルを編集
|
||||||
|
@ -1298,7 +1295,7 @@ editor.delete_this_file=ファイルを削除
|
||||||
editor.must_have_write_access=このファイルを変更したり変更の提案をするには、書き込み権限が必要です。
|
editor.must_have_write_access=このファイルを変更したり変更の提案をするには、書き込み権限が必要です。
|
||||||
editor.file_delete_success=ファイル "%s" を削除しました。
|
editor.file_delete_success=ファイル "%s" を削除しました。
|
||||||
editor.name_your_file=ファイル名を指定…
|
editor.name_your_file=ファイル名を指定…
|
||||||
editor.filename_help=ディレクトリを追加するにはディレクトリ名に続けてスラッシュ("/")を入力します。 ディレクトリを削除するには入力欄の先頭でbackspaceキーを押します。
|
editor.filename_help=ディレクトリを追加するにはディレクトリ名に続けてスラッシュ('/')を入力します。 ディレクトリを削除するには入力欄の先頭でbackspaceキーを押します。
|
||||||
editor.or=または
|
editor.or=または
|
||||||
editor.cancel_lower=キャンセル
|
editor.cancel_lower=キャンセル
|
||||||
editor.commit_signed_changes=署名した変更をコミット
|
editor.commit_signed_changes=署名した変更をコミット
|
||||||
|
@ -1338,7 +1335,7 @@ editor.fail_to_update_file=ファイル "%s" を作成または変更できま
|
||||||
editor.fail_to_update_file_summary=エラーメッセージ:
|
editor.fail_to_update_file_summary=エラーメッセージ:
|
||||||
editor.push_rejected_no_message=サーバーがメッセージを出さずに変更を拒否しました。 Git フックを確認してください。
|
editor.push_rejected_no_message=サーバーがメッセージを出さずに変更を拒否しました。 Git フックを確認してください。
|
||||||
editor.push_rejected=サーバーが変更を拒否しました。 Gitフックを確認してください。
|
editor.push_rejected=サーバーが変更を拒否しました。 Gitフックを確認してください。
|
||||||
editor.push_rejected_summary=拒否されたメッセージの全文:
|
editor.push_rejected_summary=拒否メッセージ全体:
|
||||||
editor.add_subdir=ディレクトリを追加…
|
editor.add_subdir=ディレクトリを追加…
|
||||||
editor.unable_to_upload_files=`"%s" へファイルをアップロードすることができませんでした: %v`
|
editor.unable_to_upload_files=`"%s" へファイルをアップロードすることができませんでした: %v`
|
||||||
editor.upload_file_is_locked=ファイル "%s" は %s がロックしています。
|
editor.upload_file_is_locked=ファイル "%s" は %s がロックしています。
|
||||||
|
@ -2728,7 +2725,7 @@ settings.sourcehut_builds.manifest_path = Build manifestのパス
|
||||||
settings.sourcehut_builds.secrets_helper = ジョブにビルドシークレットへのアクセス権を付与します (SECRETS:RO 権限が必要です)
|
settings.sourcehut_builds.secrets_helper = ジョブにビルドシークレットへのアクセス権を付与します (SECRETS:RO 権限が必要です)
|
||||||
release.hide_archive_links_helper = このリリース用に自動的に生成されたソース コード アーカイブを非表示にします。たとえば、独自のソース コードをアップロードする場合などです。
|
release.hide_archive_links_helper = このリリース用に自動的に生成されたソース コード アーカイブを非表示にします。たとえば、独自のソース コードをアップロードする場合などです。
|
||||||
error.broken_git_hook = このリポジトリの Git フックが壊れているようです。<a target="_blank" rel="noreferrer" href="%s">ドキュメント</a>に従って修正し、コミットをいくつかプッシュしてステータスを更新してください。
|
error.broken_git_hook = このリポジトリの Git フックが壊れているようです。<a target="_blank" rel="noreferrer" href="%s">ドキュメント</a>に従って修正し、コミットをいくつかプッシュしてステータスを更新してください。
|
||||||
editor.commit_id_not_matching = 編集中にファイルが変更されました。新しいブランチにコミットしてからマージしてください。
|
editor.commit_id_not_matching = このコミットIDはあなたが編集していたものと一致しません。新しいブランチへコミットし、そしてマージしてください。
|
||||||
issues.num_participants_one = %d 人の参加者
|
issues.num_participants_one = %d 人の参加者
|
||||||
commits.search_branch = このブランチ
|
commits.search_branch = このブランチ
|
||||||
size_format = %[1]s: %[2]s, %[3]s: %[4]s
|
size_format = %[1]s: %[2]s, %[3]s: %[4]s
|
||||||
|
@ -2743,10 +2740,6 @@ settings.transfer.button = 所有権を移送する
|
||||||
settings.transfer.modal.title = 所有権を移送
|
settings.transfer.modal.title = 所有権を移送
|
||||||
wiki.search = Wikiを検索
|
wiki.search = Wikiを検索
|
||||||
wiki.no_search_results = 結果がありませんでした
|
wiki.no_search_results = 結果がありませんでした
|
||||||
form.string_too_long = 指定された文字列は %d 文字より長いです。
|
|
||||||
project = プロジェクト
|
|
||||||
subscribe.issue.guest.tooltip = このイシューを購読するにはサインインしてください。
|
|
||||||
subscribe.pull.guest.tooltip = このプルリクエストを購読するにはサインインしてください。
|
|
||||||
|
|
||||||
[graphs]
|
[graphs]
|
||||||
component_loading = %s の読み込み中...
|
component_loading = %s の読み込み中...
|
||||||
|
|
|
@ -156,14 +156,12 @@ artifacts = Artifacts
|
||||||
filter.public = 공개
|
filter.public = 공개
|
||||||
filter.private = 비공개
|
filter.private = 비공개
|
||||||
filter.not_template = 템플릿이 아님
|
filter.not_template = 템플릿이 아님
|
||||||
view = 보기
|
|
||||||
never = 안함
|
|
||||||
|
|
||||||
[aria]
|
[aria]
|
||||||
navbar = 내비게이션 바
|
navbar = 네비게이션 바
|
||||||
footer.links = 링크
|
footer.links = 링크
|
||||||
footer = 꼬릿말
|
footer = 꼬릿말
|
||||||
footer.software = 이 소프트웨어에 대하여
|
footer.software = 소프트웨어에 대하여
|
||||||
|
|
||||||
[heatmap]
|
[heatmap]
|
||||||
number_of_contributions_in_the_last_12_months = 지난 12달간 %s 명의 기여자
|
number_of_contributions_in_the_last_12_months = 지난 12달간 %s 명의 기여자
|
||||||
|
@ -175,11 +173,6 @@ less = 적은
|
||||||
more = 많은
|
more = 많은
|
||||||
|
|
||||||
[editor]
|
[editor]
|
||||||
buttons.italic.tooltip = 기울어진 텍스트 추가
|
|
||||||
buttons.heading.tooltip = 헤딩 추가
|
|
||||||
buttons.bold.tooltip = 두꺼운 텍스트 추가
|
|
||||||
buttons.code.tooltip = 코드 추가
|
|
||||||
buttons.link.tooltip = 링크 추가
|
|
||||||
|
|
||||||
[filter]
|
[filter]
|
||||||
|
|
||||||
|
@ -440,11 +433,6 @@ auth_failed=인증 실패: %v
|
||||||
|
|
||||||
|
|
||||||
target_branch_not_exist=대상 브랜치가 존재하지 않습니다.
|
target_branch_not_exist=대상 브랜치가 존재하지 않습니다.
|
||||||
url_error = `"%s"는 유효한 URL이 아닙니다.`
|
|
||||||
include_error = `"%s"을/를 포함해야 합니다.`
|
|
||||||
regex_pattern_error = `regex 패턴이 잘못되었습니다: %s`
|
|
||||||
username_error = `영문("a-z", "A-Z"), 숫자("0-9"), 대시("-"), 밑줄("_"), 점(".")만 포함할 수 있습니다. 영문 혹은 숫자가 아닌 문자로 시작하거나 끝날 수 없으며 연속된 영문 혹은 숫자가 아닌 문자도 금지됩니다.`
|
|
||||||
glob_pattern_error = `glob 패턴이 잘못되었습니다: %s`
|
|
||||||
|
|
||||||
|
|
||||||
[user]
|
[user]
|
||||||
|
@ -636,7 +624,6 @@ email_notifications.disable=이메일 알림 끄기
|
||||||
visibility.private=비공개
|
visibility.private=비공개
|
||||||
change_password = 비밀번호 변경
|
change_password = 비밀번호 변경
|
||||||
email_desc = 당신의 대표 이메일 주소는 알림, 비밀번호 재설정과 웹에서의 Git 작동에 사용되며 가려지지 않습니다.
|
email_desc = 당신의 대표 이메일 주소는 알림, 비밀번호 재설정과 웹에서의 Git 작동에 사용되며 가려지지 않습니다.
|
||||||
comment_type_group_dependency = 전제조건
|
|
||||||
|
|
||||||
[repo]
|
[repo]
|
||||||
owner=소유자
|
owner=소유자
|
||||||
|
@ -670,7 +657,7 @@ mirror_interval_invalid=미러 간격이 올바르지 않습니다.
|
||||||
mirror_address=URL로 부터 클론
|
mirror_address=URL로 부터 클론
|
||||||
mirror_last_synced=마지막 동기화
|
mirror_last_synced=마지막 동기화
|
||||||
watchers=이 저장소를 주시하고 있는 사람들
|
watchers=이 저장소를 주시하고 있는 사람들
|
||||||
stargazers=이 저장소를 좋아하는 사람들
|
stargazers=별을 준 사람들
|
||||||
forks=포크
|
forks=포크
|
||||||
reactions_more=그리고 %d 더
|
reactions_more=그리고 %d 더
|
||||||
language_other=기타
|
language_other=기타
|
||||||
|
@ -855,7 +842,7 @@ issues.open_title=오픈
|
||||||
issues.closed_title=닫힘
|
issues.closed_title=닫힘
|
||||||
issues.draft_title=초안
|
issues.draft_title=초안
|
||||||
issues.num_comments=%d개의 코멘트
|
issues.num_comments=%d개의 코멘트
|
||||||
issues.commented_at=`코멘트함, <a href="#%s">%s</a>`
|
issues.commented_at=`코멘트됨, <a href="#%s">%s</a>`
|
||||||
issues.delete_comment_confirm=이 댓글을 정말 삭제하시겠습니까?
|
issues.delete_comment_confirm=이 댓글을 정말 삭제하시겠습니까?
|
||||||
issues.context.edit=수정하기
|
issues.context.edit=수정하기
|
||||||
issues.context.delete=삭제
|
issues.context.delete=삭제
|
||||||
|
@ -883,7 +870,7 @@ issues.label_deletion_desc=라벨을 삭제하면 모든 이슈로부터도 삭
|
||||||
issues.label_deletion_success=라벨이 삭제되었습니다.
|
issues.label_deletion_success=라벨이 삭제되었습니다.
|
||||||
issues.label.filter_sort.alphabetically=알파벳순
|
issues.label.filter_sort.alphabetically=알파벳순
|
||||||
issues.label.filter_sort.reverse_alphabetically=이름 역순으로 정렬
|
issues.label.filter_sort.reverse_alphabetically=이름 역순으로 정렬
|
||||||
issues.num_participants_few=참가자 %d명
|
issues.num_participants_few=참여자 %d명
|
||||||
issues.attachment.open_tab=`클릭하여 "%s" 새탭으로 보기`
|
issues.attachment.open_tab=`클릭하여 "%s" 새탭으로 보기`
|
||||||
issues.attachment.download=' "%s"를 다운로드 하려면 클릭 하십시오 '
|
issues.attachment.download=' "%s"를 다운로드 하려면 클릭 하십시오 '
|
||||||
issues.subscribe=구독하기
|
issues.subscribe=구독하기
|
||||||
|
@ -891,8 +878,8 @@ issues.unsubscribe=구독 취소
|
||||||
issues.delete=삭제
|
issues.delete=삭제
|
||||||
issues.tracker=타임 트래커
|
issues.tracker=타임 트래커
|
||||||
issues.start_tracking=타임 트래킹 시작
|
issues.start_tracking=타임 트래킹 시작
|
||||||
issues.start_tracking_history=`님이 %s 작업 시작`
|
issues.start_tracking_history=`%s가 작업 시작`
|
||||||
issues.stop_tracking_history=`님이 %s 작업 중단`
|
issues.stop_tracking_history=`작업 중단 %s`
|
||||||
issues.add_time=수동으로 시간 입력
|
issues.add_time=수동으로 시간 입력
|
||||||
issues.add_time_short=시간 입력
|
issues.add_time_short=시간 입력
|
||||||
issues.add_time_cancel=취소
|
issues.add_time_cancel=취소
|
||||||
|
@ -915,21 +902,21 @@ issues.due_date_added=마감일 %s 를 추가 %s
|
||||||
issues.due_date_remove=%s %s 마감일이 삭제됨
|
issues.due_date_remove=%s %s 마감일이 삭제됨
|
||||||
issues.due_date_overdue="기한 초과"
|
issues.due_date_overdue="기한 초과"
|
||||||
issues.due_date_invalid=기한이 올바르지 않거나 범위를 벗어났습니다. "yyyy-mm-dd"형식을 사용해주십시오.
|
issues.due_date_invalid=기한이 올바르지 않거나 범위를 벗어났습니다. "yyyy-mm-dd"형식을 사용해주십시오.
|
||||||
issues.dependency.title=전제조건
|
issues.dependency.title=의존성
|
||||||
issues.dependency.add=전제조건 추가…
|
issues.dependency.add=의존성 추가…
|
||||||
issues.dependency.cancel=취소
|
issues.dependency.cancel=취소
|
||||||
issues.dependency.remove=제거
|
issues.dependency.remove=제거
|
||||||
issues.dependency.remove_info=이 전제조건 제거
|
issues.dependency.remove_info=이 의존성 제거
|
||||||
issues.dependency.blocks_short=차단
|
issues.dependency.blocks_short=차단
|
||||||
issues.dependency.blocked_by_short=의존성
|
issues.dependency.blocked_by_short=의존성
|
||||||
issues.dependency.remove_header=전제조건 제거
|
issues.dependency.remove_header=의존성 제거
|
||||||
issues.dependency.issue_remove_text=이슈로부터 전제조건을 제거하게 됩니다. 계속하시겠습니까?
|
issues.dependency.issue_remove_text=이슈로부터 의존성을 제거하게 됩니다. 계속하시겠습니까?
|
||||||
issues.dependency.pr_remove_text=풀 리퀘스트로부터 전제조건을 제거하게 됩니다. 계속하시겠습니까?
|
issues.dependency.pr_remove_text=풀 리퀘스트로부터 의존성을 제거하게 됩니다. 계속하시겠습니까?
|
||||||
issues.dependency.add_error_same_issue=자기자신을 전제하는 이슈는 만들 수 없습니다.
|
issues.dependency.add_error_same_issue=자기자신에 종속되는 이슈는 만들 수 없습니다.
|
||||||
issues.dependency.add_error_dep_issue_not_exist=전제된 이슈가 없습니다.
|
issues.dependency.add_error_dep_issue_not_exist=종속된 이슈가 없습니다.
|
||||||
issues.dependency.add_error_dep_not_exist=전제조건이 존재하지 않습니다.
|
issues.dependency.add_error_dep_not_exist=의존성이 존재하지 않습니다.
|
||||||
issues.dependency.add_error_dep_exists=전제조건이 이미 존재합니다.
|
issues.dependency.add_error_dep_exists=의존성이 이미 존재합니다.
|
||||||
issues.dependency.add_error_dep_not_same_repo=두 이슈는 같은 저장소 안에 있어야 합니다.
|
issues.dependency.add_error_dep_not_same_repo=두 이슈는 같은 레포지토리 안에 있어야 합니다.
|
||||||
issues.review.self.approval=자신의 풀 리퀘스트를 승인할 수 없습니다.
|
issues.review.self.approval=자신의 풀 리퀘스트를 승인할 수 없습니다.
|
||||||
issues.review.self.rejection=자신의 풀 리퀘스트에 대한 변경을 요청할 수 없습니다.
|
issues.review.self.rejection=자신의 풀 리퀘스트에 대한 변경을 요청할 수 없습니다.
|
||||||
issues.review.approve="이 변경사항을 승인하였습니다. %s"
|
issues.review.approve="이 변경사항을 승인하였습니다. %s"
|
||||||
|
@ -1304,23 +1291,6 @@ issues.filter_milestone_closed = 닫힌 마일스톤
|
||||||
issues.opened_by_fake = %[2]s님이 %[1]s에 열음
|
issues.opened_by_fake = %[2]s님이 %[1]s에 열음
|
||||||
issues.filter_project_none = 프로젝트 없음
|
issues.filter_project_none = 프로젝트 없음
|
||||||
issues.new.no_projects = 프로젝트 없음
|
issues.new.no_projects = 프로젝트 없음
|
||||||
issues.dependency.pr_close_blocks = 이 풀 리퀘스트는 다음의 이슈를 닫는것을 제한함
|
|
||||||
issues.dependency.setting = 이슈와 풀 리퀘스트에서 전제조건을 활성화
|
|
||||||
issues.dependency.issue_no_dependencies = 전제조건이 설정되지 않았습니다.
|
|
||||||
issues.dependency.pr_closing_blockedby = 이 풀 리퀘스트를 닫는것이 다음의 이슈에 의해 제한됨
|
|
||||||
issues.dependency.issue_closing_blockedby = 이 이슈를 닫는것이 다음의 이슈에 의해 제한됨
|
|
||||||
issues.dependency.issue_close_blocked = 이 이슈를 닫으려면 먼저 이 이슈를 제한하는 모든 이슈를 닫아야 합니다.
|
|
||||||
issues.num_participants_one = 참가자 %d명
|
|
||||||
issues.dependency.no_permission_n = %d개의 전제조건을 읽을 권한이 없음
|
|
||||||
issues.dependency.issue_close_blocks = 이 이슈는 다음의 이슈를 닫는것을 제한함
|
|
||||||
issues.dependency.add_error_cannot_create_circular = 서로를 전제하는 이슈를 만들 수 없습니다.
|
|
||||||
issues.dependency.pr_no_dependencies = 전제조건이 설정되지 않았습니다.
|
|
||||||
issues.dependency.added_dependency = `님이 %s 새로운 전제조건 추가`
|
|
||||||
issues.dependency.issue_batch_close_blocked = 이슈 #%d에 아직 열려 있는 전제조건이 있어 선택한 이슈를 일괄적으로 종료할 수 없음
|
|
||||||
issues.dependency.no_permission_1 = %d개의 전제조건을 읽을 권한이 없음
|
|
||||||
issues.dependency.no_permission.can_remove = 이 전제조건을 읽을 권한이 없지만 지울 수 있음
|
|
||||||
issues.dependency.removed_dependency = `님이 %s 전제조건 삭제`
|
|
||||||
issues.dependency.pr_close_blocked = 병합하기 전에 이 풀 리퀘스트을 제한하는 모든 이슈를 종료해야 합니다.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1750,10 +1720,6 @@ alpine.repository.branches=브랜치
|
||||||
alpine.repository.repositories=저장소
|
alpine.repository.repositories=저장소
|
||||||
conan.details.repository=저장소
|
conan.details.repository=저장소
|
||||||
owner.settings.cleanuprules.enabled=활성화됨
|
owner.settings.cleanuprules.enabled=활성화됨
|
||||||
nuget.dependency.framework = 타겟 프레임워크
|
|
||||||
maven.download = 종속성을 다운로드하려면 명령줄을 통해 실행하세요:
|
|
||||||
dependency.id = ID
|
|
||||||
dependency.version = 버전
|
|
||||||
|
|
||||||
[secrets]
|
[secrets]
|
||||||
|
|
||||||
|
@ -1787,17 +1753,3 @@ branch_kind = 브랜치 검색...
|
||||||
keyword_search_unavailable = 지금은 키워드로 검색이 지원되지 않습니다. 사이트 관리자에게 문의하십시오.
|
keyword_search_unavailable = 지금은 키워드로 검색이 지원되지 않습니다. 사이트 관리자에게 문의하십시오.
|
||||||
commit_kind = 커밋 검색...
|
commit_kind = 커밋 검색...
|
||||||
no_results = 일치하는 결과를 찾을 수 없습니다.
|
no_results = 일치하는 결과를 찾을 수 없습니다.
|
||||||
search = 검색...
|
|
||||||
type_tooltip = 검색 타입
|
|
||||||
fuzzy_tooltip = 검색어와 밀접하게 일치하는 결과도 포함
|
|
||||||
repo_kind = 저장소 검색...
|
|
||||||
user_kind = 사용자 검색...
|
|
||||||
org_kind = 조직 검색...
|
|
||||||
team_kind = 팀 검색...
|
|
||||||
code_kind = 코드 검색...
|
|
||||||
code_search_unavailable = 코드 검색은 현재 허용되지 않았습니다. 사이트 관리자와 연락하세요.
|
|
||||||
package_kind = 패키지 검색...
|
|
||||||
project_kind = 프로젝트 검색...
|
|
||||||
exact_tooltip = 검색어와 정확하게 일치하는 결과만 포함
|
|
||||||
issue_kind = 이슈 검색...
|
|
||||||
pull_kind = 풀 검색...
|
|
|
@ -16,7 +16,7 @@ page=Pagina
|
||||||
template=Sjabloon
|
template=Sjabloon
|
||||||
language=Taal
|
language=Taal
|
||||||
notifications=Meldingen
|
notifications=Meldingen
|
||||||
active_stopwatch=Actieve tijd tracker
|
active_stopwatch=Actieve Tijd Tracker
|
||||||
create_new=Maken…
|
create_new=Maken…
|
||||||
user_profile_and_more=Profiel en instellingen…
|
user_profile_and_more=Profiel en instellingen…
|
||||||
signed_in_as=Aangemeld als
|
signed_in_as=Aangemeld als
|
||||||
|
@ -103,7 +103,7 @@ error404=De pagina die u probeert te bereiken <strong>bestaat niet</strong> of <
|
||||||
|
|
||||||
never=Nooit
|
never=Nooit
|
||||||
|
|
||||||
rss_feed=RSS feed
|
rss_feed=RSS Feed
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -145,12 +145,12 @@ confirm_delete_artifact = Weet u zeker dat u het artefact "%s" wilt verwijderen?
|
||||||
toggle_menu = Menu schakelen
|
toggle_menu = Menu schakelen
|
||||||
filter.clear = Filter wissen
|
filter.clear = Filter wissen
|
||||||
filter.is_archived = Gearchiveerd
|
filter.is_archived = Gearchiveerd
|
||||||
filter.is_fork = Forks
|
filter.is_fork = Geforkt
|
||||||
filter.not_fork = Niet forks
|
filter.not_fork = Niet geforkt
|
||||||
filter.is_mirror = Mirrors
|
filter.is_mirror = Gespiegeld
|
||||||
filter.not_mirror = Niet mirrors
|
filter.not_mirror = Niet gespiegeld
|
||||||
filter.is_template = Sjabloons
|
filter.is_template = Sjabloon
|
||||||
filter.not_template = Geen sjabloons
|
filter.not_template = Geen sjabloon
|
||||||
filter.public = Publiek
|
filter.public = Publiek
|
||||||
filter.private = Privé
|
filter.private = Privé
|
||||||
filter = Filter
|
filter = Filter
|
||||||
|
@ -162,7 +162,7 @@ copy_generic = Kopieer naar klembord
|
||||||
[aria]
|
[aria]
|
||||||
navbar = Navigatiebalk
|
navbar = Navigatiebalk
|
||||||
footer = Voettekst
|
footer = Voettekst
|
||||||
footer.software = Over deze software
|
footer.software = Info over software
|
||||||
footer.links = Verwijzingen
|
footer.links = Verwijzingen
|
||||||
|
|
||||||
[heatmap]
|
[heatmap]
|
||||||
|
@ -245,7 +245,7 @@ err_admin_name_is_invalid=Gebruikersnaam van beheerder is ongeldig
|
||||||
|
|
||||||
general_title=Algemene instellingen
|
general_title=Algemene instellingen
|
||||||
app_name=Instantienaam
|
app_name=Instantienaam
|
||||||
app_name_helper=Voer hier de naam van uw instantie in. Dit wordt weergegeven op elke pagina.
|
app_name_helper=U kan de naam van uw bedrijf hier invullen.
|
||||||
repo_path=Repository hoofdpad
|
repo_path=Repository hoofdpad
|
||||||
repo_path_helper=Externe git repositories worden opgeslagen in deze map.
|
repo_path_helper=Externe git repositories worden opgeslagen in deze map.
|
||||||
lfs_path=Git LFS root pad
|
lfs_path=Git LFS root pad
|
||||||
|
@ -276,9 +276,9 @@ server_service_title=Server en service-instellingen van derden
|
||||||
offline_mode=Lokale modus inschakelen
|
offline_mode=Lokale modus inschakelen
|
||||||
offline_mode.description=Schakel third-party content uit en gebruik alleen lokale middelen.
|
offline_mode.description=Schakel third-party content uit en gebruik alleen lokale middelen.
|
||||||
disable_gravatar=Gravatar uitschakelen
|
disable_gravatar=Gravatar uitschakelen
|
||||||
disable_gravatar.description=Gravatar en derden avatar bronnen uitschakelen. Een standaard avatar zal worden gebruikt, tenzij een gebruiker hun eigen avatar uploadt naar de instantie.
|
disable_gravatar.description=Gravatar en derden avatar bronnen uitschakelen. Een standaard avatar zal worden gebruikt, tenzij een gebruiker een lokale avatar uploadt.
|
||||||
federated_avatar_lookup=Federated avatars toestaan
|
federated_avatar_lookup=Federated avatars toestaan
|
||||||
federated_avatar_lookup.description=Zoek avatars op met Libravatar.
|
federated_avatar_lookup.description=Enable federated avatars lookup to use federated open source service based on libravatar.
|
||||||
disable_registration=Schakel zelf registratie uit
|
disable_registration=Schakel zelf registratie uit
|
||||||
disable_registration.description=Schakel zelfregistratie uit, alleen admins kunnen accounts maken.
|
disable_registration.description=Schakel zelfregistratie uit, alleen admins kunnen accounts maken.
|
||||||
allow_only_external_registration.description=Registratie alleen via externe diensten toestaan
|
allow_only_external_registration.description=Registratie alleen via externe diensten toestaan
|
||||||
|
@ -328,9 +328,6 @@ require_sign_in_view.description = Beperk de toegang tot de pagina's tot ingelog
|
||||||
enable_update_checker_helper_forgejo = Het zal periodiek controleren op nieuwe Forgejo-versies door een TXT DNS-record op release.forgejo.org te controleren.
|
enable_update_checker_helper_forgejo = Het zal periodiek controleren op nieuwe Forgejo-versies door een TXT DNS-record op release.forgejo.org te controleren.
|
||||||
smtp_from_invalid = Het adres "E-mails versturen als" is ongeldig
|
smtp_from_invalid = Het adres "E-mails versturen als" is ongeldig
|
||||||
config_location_hint = Deze configuratieopties worden opgeslagen in:
|
config_location_hint = Deze configuratieopties worden opgeslagen in:
|
||||||
allow_only_external_registration = Sta alleen registratie toe via externe diensten
|
|
||||||
app_slogan = Instantie slogan
|
|
||||||
app_slogan_helper = Voer hier de slogan van uw instantie in. Laat leeg om dit uit te schakelen.
|
|
||||||
|
|
||||||
[home]
|
[home]
|
||||||
uname_holder=Gebruikersnaam of e-mailadres
|
uname_holder=Gebruikersnaam of e-mailadres
|
||||||
|
@ -639,8 +636,6 @@ Description = Beschrijving
|
||||||
FullName = Volledige naam
|
FullName = Volledige naam
|
||||||
To = Branch naam
|
To = Branch naam
|
||||||
Website = Website
|
Website = Website
|
||||||
AccessToken = Toegangstoken
|
|
||||||
Pronouns = Voornaamwoorden
|
|
||||||
|
|
||||||
|
|
||||||
[user]
|
[user]
|
||||||
|
@ -676,10 +671,6 @@ form.name_pattern_not_allowed = Het patroon "%s" is niet toegestaan in een gebru
|
||||||
form.name_chars_not_allowed = Gebruikernaam "%s" bevat ongeldige karakters.
|
form.name_chars_not_allowed = Gebruikernaam "%s" bevat ongeldige karakters.
|
||||||
following_one = %d volgers
|
following_one = %d volgers
|
||||||
followers_one = %d volger
|
followers_one = %d volger
|
||||||
followers.title.few = Volgers
|
|
||||||
following.title.one = Volgend
|
|
||||||
following.title.few = Volgend
|
|
||||||
followers.title.one = Volger
|
|
||||||
|
|
||||||
|
|
||||||
[settings]
|
[settings]
|
||||||
|
@ -1007,7 +998,6 @@ additional_repo_units_hint_description = Toon een "Voeg meer eenheden toe..." kn
|
||||||
pronouns = Persoonlijke voornaamwoord
|
pronouns = Persoonlijke voornaamwoord
|
||||||
pronouns_custom = Aangepast
|
pronouns_custom = Aangepast
|
||||||
pronouns_unspecified = Ongedefinieerd
|
pronouns_unspecified = Ongedefinieerd
|
||||||
language.title = Standaard taal
|
|
||||||
|
|
||||||
[repo]
|
[repo]
|
||||||
owner=Eigenaar
|
owner=Eigenaar
|
||||||
|
@ -2731,25 +2721,6 @@ release.download_count_few = %s downloads
|
||||||
release.system_generated = Deze bijlage wordt automatisch gegenereerd.
|
release.system_generated = Deze bijlage wordt automatisch gegenereerd.
|
||||||
settings.sourcehut_builds.secrets = Geheimen
|
settings.sourcehut_builds.secrets = Geheimen
|
||||||
settings.web_hook_name_sourcehut_builds = SourceHut Builds
|
settings.web_hook_name_sourcehut_builds = SourceHut Builds
|
||||||
form.string_too_long = De opgegeven string is langer dan %d tekens.
|
|
||||||
project = Projecten
|
|
||||||
settings.federation_following_repos = URLs van de volgende repositories. Gescheiden door ";", geen witruimte.
|
|
||||||
settings.federation_settings = Federatie instellingen
|
|
||||||
settings.federation_apapiurl = Federatie URL van deze repository. Kopiër en plak dit in de federatie instellingen van een andere repository als een URL van de volgende repository.
|
|
||||||
settings.federation_not_enabled = Federatie is niet ingeschakeld voor deze instantie.
|
|
||||||
subscribe.issue.guest.tooltip = Log in om dit issue te volgen.
|
|
||||||
subscribe.pull.guest.tooltip = Log in om dit pull request te volgen.
|
|
||||||
settings.transfer.modal.title = Eigendom overdragen
|
|
||||||
settings.transfer.button = Eigendom overdragen
|
|
||||||
settings.graphql_url = GraphQL URL
|
|
||||||
release.hide_archive_links = Verberg automatisch gegenereerde archieven
|
|
||||||
release.hide_archive_links_helper = Verberg automatisch gegenereerde broncode-archieven voor deze release. Als u bijvoorbeeld uw eigen uploadt.
|
|
||||||
wiki.search = Zoek wiki
|
|
||||||
wiki.no_search_results = Geen resultaten
|
|
||||||
settings.sourcehut_builds.visibility = Job zichtbaarheid
|
|
||||||
settings.sourcehut_builds.manifest_path = Bouw manifestpad
|
|
||||||
n_release_one = %s release
|
|
||||||
n_release_few = %s releases
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -2879,7 +2850,6 @@ settings.change_orgname_prompt = Merk op: Het wijzigen van de organisatienaam za
|
||||||
settings.visibility.limited = Beperkt (alleen zichtbaar voor geauthenticeerde gebruikers)
|
settings.visibility.limited = Beperkt (alleen zichtbaar voor geauthenticeerde gebruikers)
|
||||||
teams.add_nonexistent_repo = De repository die u probeert toe te voegen bestaat niet, maak deze eerst aan alstublieft.
|
teams.add_nonexistent_repo = De repository die u probeert toe te voegen bestaat niet, maak deze eerst aan alstublieft.
|
||||||
teams.all_repositories_write_permission_desc = Dit team verleent <strong>Schrijf</strong> permissies tot <strong>alle repositories</strong>: leden kunnen lezen en pushen naar repositories.
|
teams.all_repositories_write_permission_desc = Dit team verleent <strong>Schrijf</strong> permissies tot <strong>alle repositories</strong>: leden kunnen lezen en pushen naar repositories.
|
||||||
open_dashboard = Open dashboard
|
|
||||||
|
|
||||||
[admin]
|
[admin]
|
||||||
dashboard=Overzicht
|
dashboard=Overzicht
|
||||||
|
@ -3421,8 +3391,6 @@ auths.tips.gmail_settings = Gmail instellingen:
|
||||||
config_summary = Samenvatting
|
config_summary = Samenvatting
|
||||||
config.open_with_editor_app_help = De "Openen met" editors voor het kloonmenu. Als deze leeg blijft, wordt de standaardwaarde gebruikt. Uitvouwen om de standaard te zien.
|
config.open_with_editor_app_help = De "Openen met" editors voor het kloonmenu. Als deze leeg blijft, wordt de standaardwaarde gebruikt. Uitvouwen om de standaard te zien.
|
||||||
auths.tip.gitlab_new = Registreer een nieuwe applicatie op https://gitlab.com/-/profile/applications
|
auths.tip.gitlab_new = Registreer een nieuwe applicatie op https://gitlab.com/-/profile/applications
|
||||||
config.app_slogan = Instantie slogan
|
|
||||||
auths.default_domain_name = Standaarddomeinnaam die voor het e-mailadres wordt gebruikt
|
|
||||||
|
|
||||||
|
|
||||||
[action]
|
[action]
|
||||||
|
@ -3666,7 +3634,6 @@ versions = Versies
|
||||||
versions.view_all = Alles weergeven
|
versions.view_all = Alles weergeven
|
||||||
filter.type.all = Alle
|
filter.type.all = Alle
|
||||||
owner.settings.cargo.rebuild.no_index = Kan niet herbouwen, er is geen index geïnitialiseerd.
|
owner.settings.cargo.rebuild.no_index = Kan niet herbouwen, er is geen index geïnitialiseerd.
|
||||||
npm.dependencies.bundle = Gebundelde dependencies
|
|
||||||
|
|
||||||
[secrets]
|
[secrets]
|
||||||
secrets = Geheimen
|
secrets = Geheimen
|
||||||
|
@ -3773,7 +3740,6 @@ runners.delete_runner_success = Runner succesvol verwijderd
|
||||||
runs.no_matching_online_runner_helper = Geen overeenkomende online runner met label: %s
|
runs.no_matching_online_runner_helper = Geen overeenkomende online runner met label: %s
|
||||||
runs.workflow = Workflow
|
runs.workflow = Workflow
|
||||||
runs.no_job_without_needs = De workflow moet ten minste één taak zonder afhankelijkheden bevatten.
|
runs.no_job_without_needs = De workflow moet ten minste één taak zonder afhankelijkheden bevatten.
|
||||||
runs.no_job = De workflow moet minimaal één job bevatten
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -3824,11 +3790,7 @@ type_tooltip = Zoektype
|
||||||
fuzzy_tooltip = Neem resultaten op die ook sterk overeenkomen met de zoekterm
|
fuzzy_tooltip = Neem resultaten op die ook sterk overeenkomen met de zoekterm
|
||||||
code_search_unavailable = Code zoeken is momenteel niet beschikbaar. Neem contact op met de sitebeheerder.
|
code_search_unavailable = Code zoeken is momenteel niet beschikbaar. Neem contact op met de sitebeheerder.
|
||||||
keyword_search_unavailable = Zoeken op trefwoord is momenteel niet beschikbaar. Neem contact op met de beheerder van de site.
|
keyword_search_unavailable = Zoeken op trefwoord is momenteel niet beschikbaar. Neem contact op met de beheerder van de site.
|
||||||
code_search_by_git_grep = Huidige code zoekresultaten worden geleverd door "git grep". Er kunnen betere resultaten zijn als de sitebeheerder code indexer inschakelt.
|
code_search_by_git_grep = Huidige code zoekresultaten worden geleverd door "git grep". Er kunnen betere resultaten zijn als de sitebeheerder Repository Indexer inschakelt.
|
||||||
exact = Exact
|
|
||||||
exact_tooltip = Bevat alleen resultaten die de exacte zoekterm bevatten
|
|
||||||
issue_kind = Zoek issues...
|
|
||||||
pull_kind = Zoek pulls...
|
|
||||||
|
|
||||||
[munits.data]
|
[munits.data]
|
||||||
b = B
|
b = B
|
||||||
|
|
|
@ -162,7 +162,7 @@ copy_generic = Copiar para área de transferência
|
||||||
[aria]
|
[aria]
|
||||||
navbar=Barra de navegação
|
navbar=Barra de navegação
|
||||||
footer=Rodapé
|
footer=Rodapé
|
||||||
footer.software=Sobre o software
|
footer.software=Sobre o Software
|
||||||
footer.links=Links
|
footer.links=Links
|
||||||
|
|
||||||
[heatmap]
|
[heatmap]
|
||||||
|
@ -211,7 +211,7 @@ platform_desc=Forgejo roda em qualquer sistema em que <a target="_blank" rel="no
|
||||||
lightweight=Leve e rápido
|
lightweight=Leve e rápido
|
||||||
lightweight_desc=Forgejo utiliza poucos recursos e consegue mesmo rodar no barato Raspberry Pi. Economize energia elétrica da sua máquina!
|
lightweight_desc=Forgejo utiliza poucos recursos e consegue mesmo rodar no barato Raspberry Pi. Economize energia elétrica da sua máquina!
|
||||||
license=Código aberto
|
license=Código aberto
|
||||||
license_desc=Está tudo no <a target="_blank" rel="noopener noreferrer" href="https://forgejo.org/download">Forgejo</a>! Contribua e torne este projeto ainda melhor. Não tenha vergonha de contribuir!
|
license_desc=Está tudo no <a target="_blank" rel="noopener noreferrer" href="https://codeberg.org/forgejo/forgejo/">Forgejo</a>! Contribua e torne este projeto ainda melhor. Não tenha vergonha de contribuir!
|
||||||
install_desc = Apenas <a target="_blank" rel="noopener noreferrer" href="https://forgejo.org/download/#installation-from-binary">rode o binário</a> para a sua plataforma, execute-o com <a target="_blank" rel="noopener noreferrer" href="https://forgejo.org/download/#container-image">Docker</a>, ou obtenha-o <a target="_blank" rel="noopener noreferrer" href="https://forgejo.org/download">empacotado</a>.
|
install_desc = Apenas <a target="_blank" rel="noopener noreferrer" href="https://forgejo.org/download/#installation-from-binary">rode o binário</a> para a sua plataforma, execute-o com <a target="_blank" rel="noopener noreferrer" href="https://forgejo.org/download/#container-image">Docker</a>, ou obtenha-o <a target="_blank" rel="noopener noreferrer" href="https://forgejo.org/download">empacotado</a>.
|
||||||
|
|
||||||
[install]
|
[install]
|
||||||
|
@ -288,7 +288,7 @@ openid_signin.description=Habilitar o acesso de usuários via OpenID.
|
||||||
openid_signup=Habilitar cadastros via OpenID
|
openid_signup=Habilitar cadastros via OpenID
|
||||||
openid_signup.description=Habilitar o auto-cadastro com base no OpenID.
|
openid_signup.description=Habilitar o auto-cadastro com base no OpenID.
|
||||||
enable_captcha=Habilitar CAPTCHA ao registrar
|
enable_captcha=Habilitar CAPTCHA ao registrar
|
||||||
enable_captcha.description=Impor validação por CAPTCHA para cadastro de usuários.
|
enable_captcha.description=Obrigar validação por CAPTCHA para auto-cadastro de usuários.
|
||||||
require_sign_in_view=Apenas usuários logados podem visualizar páginas
|
require_sign_in_view=Apenas usuários logados podem visualizar páginas
|
||||||
require_sign_in_view.description=Limitar o acesso de página aos usuários autenticados. Os visitantes só verão as páginas de autenticação e cadastro.
|
require_sign_in_view.description=Limitar o acesso de página aos usuários autenticados. Os visitantes só verão as páginas de autenticação e cadastro.
|
||||||
admin_setting.description=Criar uma conta de administrador é opcional. O primeiro usuário cadastrado automaticamente se tornará um administrador.
|
admin_setting.description=Criar uma conta de administrador é opcional. O primeiro usuário cadastrado automaticamente se tornará um administrador.
|
||||||
|
@ -304,7 +304,7 @@ invalid_db_setting=Configuração de banco de dados está inválida: %v
|
||||||
invalid_db_table=A tabela "%s" do banco de dados é inválida: %v
|
invalid_db_table=A tabela "%s" do banco de dados é inválida: %v
|
||||||
invalid_repo_path=A raiz do repositório está inválida: %v
|
invalid_repo_path=A raiz do repositório está inválida: %v
|
||||||
invalid_app_data_path=O caminho dos dados do aplicativo é inválido: %v
|
invalid_app_data_path=O caminho dos dados do aplicativo é inválido: %v
|
||||||
run_user_not_match=O usuário configurado para executar o Forgejo não corresponde ao usuário atual: %s -> %s
|
run_user_not_match=
|
||||||
internal_token_failed=Falha ao gerar o token interno: %v
|
internal_token_failed=Falha ao gerar o token interno: %v
|
||||||
secret_key_failed=Falha ao gerar a chave secreta: %v
|
secret_key_failed=Falha ao gerar a chave secreta: %v
|
||||||
save_config_failed=Falha ao salvar a configuração: %v
|
save_config_failed=Falha ao salvar a configuração: %v
|
||||||
|
@ -329,8 +329,6 @@ enable_update_checker_helper_forgejo = Confere periodicamente um registro TXT de
|
||||||
smtp_from_invalid = O endereço "Enviar e-mail como" é inválido
|
smtp_from_invalid = O endereço "Enviar e-mail como" é inválido
|
||||||
config_location_hint = Essas opções de configuração serão salvas em:
|
config_location_hint = Essas opções de configuração serão salvas em:
|
||||||
allow_only_external_registration = Permitir cadastros somente via serviços externos
|
allow_only_external_registration = Permitir cadastros somente via serviços externos
|
||||||
app_slogan = Slogan do servidor
|
|
||||||
app_slogan_helper = Insira o slogan de seu servidor aqui. Deixe em branco para desabilitar.
|
|
||||||
|
|
||||||
[home]
|
[home]
|
||||||
uname_holder=Usuário ou e-mail
|
uname_holder=Usuário ou e-mail
|
||||||
|
@ -672,11 +670,10 @@ unblock = Desbloquear
|
||||||
block = Bloquear
|
block = Bloquear
|
||||||
block_user.detail_2 = Este usuário não poderá interagir com seus repositórios, questões criadas e comentários.
|
block_user.detail_2 = Este usuário não poderá interagir com seus repositórios, questões criadas e comentários.
|
||||||
follow_blocked_user = Você não pode seguir este usuário, pois você o bloqueou ou foi bloqueado por ele.
|
follow_blocked_user = Você não pode seguir este usuário, pois você o bloqueou ou foi bloqueado por ele.
|
||||||
block_user.detail_3 = Este(a) usuário(a) não poderá adicioná-lo(a) como colaborador(a), nem você poderá adicioná-lo(a) como colaborador(a).
|
block_user.detail_3 = Este usuário não poderá adicionar-lhe como colaborador e você também não poderá adicioná-lo como colaborador.
|
||||||
block_user.detail = Por favor, entenda que se você bloquear este usuário, outras ações serão tomadas. Tais como:
|
block_user.detail = Por favor, entenda que se você bloquear este usuário, outras ações serão tomadas. Tais como:
|
||||||
followers_one = %d seguidor
|
followers_one = %d seguidor
|
||||||
following_one = %d seguindo
|
following_one = %d seguindo
|
||||||
block_user.detail_1 = Você deixará de seguir este usuário.
|
|
||||||
|
|
||||||
[settings]
|
[settings]
|
||||||
profile=Perfil
|
profile=Perfil
|
||||||
|
@ -686,7 +683,7 @@ password=Senha
|
||||||
security=Segurança
|
security=Segurança
|
||||||
avatar=Avatar
|
avatar=Avatar
|
||||||
ssh_gpg_keys=Chaves SSH / GPG
|
ssh_gpg_keys=Chaves SSH / GPG
|
||||||
social=Redes sociais
|
social=Contas sociais
|
||||||
applications=Aplicativos
|
applications=Aplicativos
|
||||||
orgs=Organizações
|
orgs=Organizações
|
||||||
repos=Repositórios
|
repos=Repositórios
|
||||||
|
@ -931,7 +928,7 @@ revoke_oauth2_grant_success=Acesso revogado com sucesso.
|
||||||
twofa_desc=Autenticação de dois fatores melhora a segurança de sua conta.
|
twofa_desc=Autenticação de dois fatores melhora a segurança de sua conta.
|
||||||
twofa_is_enrolled=Sua conta está atualmente <strong>habilitada</strong> com autenticação de dois fatores.
|
twofa_is_enrolled=Sua conta está atualmente <strong>habilitada</strong> com autenticação de dois fatores.
|
||||||
twofa_not_enrolled=Sua conta não está atualmente inscrita para a autenticação em duas etapas.
|
twofa_not_enrolled=Sua conta não está atualmente inscrita para a autenticação em duas etapas.
|
||||||
twofa_disable=Desabilitar autenticação de dois fatores
|
twofa_disable=Desabilitar a autenticação de dois fatores
|
||||||
twofa_scratch_token_regenerate=Gerar novamente o token de backup
|
twofa_scratch_token_regenerate=Gerar novamente o token de backup
|
||||||
twofa_scratch_token_regenerated=Seu token agora é %s. Guarde-a em um local seguro, pois ela nunca mais será exibido.
|
twofa_scratch_token_regenerated=Seu token agora é %s. Guarde-a em um local seguro, pois ela nunca mais será exibido.
|
||||||
twofa_enroll=Inscrever para a autenticação de dois fatores
|
twofa_enroll=Inscrever para a autenticação de dois fatores
|
||||||
|
@ -947,16 +944,16 @@ twofa_enrolled=Sua conta foi inscrita na autenticação de dois fatores. Armazen
|
||||||
twofa_failed_get_secret=Falha ao obter o segredo.
|
twofa_failed_get_secret=Falha ao obter o segredo.
|
||||||
|
|
||||||
webauthn_desc=Chaves de segurança são dispositivos de hardware que contém chaves de criptografia. Elas podem ser usadas para autenticação de dois fatores. A chave de segurança deve suportar o padrão <a rel="noreferrer" target="_blank" href="https://w3c.github.io/webauthn/#webauthn-authenticator">WebAuthnn Authenticator</a>.
|
webauthn_desc=Chaves de segurança são dispositivos de hardware que contém chaves de criptografia. Elas podem ser usadas para autenticação de dois fatores. A chave de segurança deve suportar o padrão <a rel="noreferrer" target="_blank" href="https://w3c.github.io/webauthn/#webauthn-authenticator">WebAuthnn Authenticator</a>.
|
||||||
webauthn_register_key=Adicionar chave
|
webauthn_register_key=Adicionar chave de segurança
|
||||||
webauthn_nickname=Apelido
|
webauthn_nickname=Apelido
|
||||||
webauthn_delete_key=Remover chave
|
webauthn_delete_key=Remover chave de segurança
|
||||||
webauthn_delete_key_desc=Se você remover uma chave de segurança, não será possível utilizá-la para fazer login. Continuar?
|
webauthn_delete_key_desc=Se você remover uma chave de segurança, não poderá mais entrar com ela. Continuar?
|
||||||
|
|
||||||
manage_account_links=Contas vinculadas
|
manage_account_links=Gerenciar contas vinculadas
|
||||||
manage_account_links_desc=Estas contas externas estão vinculadas a sua conta de Forgejo.
|
manage_account_links_desc=Estas contas externas estão vinculadas a sua conta de Forgejo.
|
||||||
account_links_not_available=Não existem contas externas atualmente vinculadas a esta conta.
|
account_links_not_available=Não existem contas externas atualmente vinculadas a esta conta.
|
||||||
link_account=Vincular conta
|
link_account=Vincular Conta
|
||||||
remove_account_link=Remover conta
|
remove_account_link=Remover conta vinculada
|
||||||
remove_account_link_desc=A exclusão da chave SSH revogará o acesso à sua conta. Continuar?
|
remove_account_link_desc=A exclusão da chave SSH revogará o acesso à sua conta. Continuar?
|
||||||
remove_account_link_success=A conta vinculada foi removida.
|
remove_account_link_success=A conta vinculada foi removida.
|
||||||
|
|
||||||
|
@ -966,17 +963,17 @@ orgs_none=Você não é membro de nenhuma organização.
|
||||||
repos_none=Você não é proprietário de nenhum repositório.
|
repos_none=Você não é proprietário de nenhum repositório.
|
||||||
|
|
||||||
delete_account=Excluir sua conta
|
delete_account=Excluir sua conta
|
||||||
delete_prompt=Esta operação excluirá o seu usuário permanentemente. Esta ação é <strong>IRREVERSÍVEL</strong>.
|
delete_prompt=Esta operação irá apagar permanentemente a sua conta de usuário. Isto <strong>NÃO PODERÁ</strong> ser desfeito.
|
||||||
delete_with_all_comments=Sua conta é mais nova que %s. Para evitar comentários fantasmas, todos os comentários de Issue/PR serão excluídos com ela.
|
delete_with_all_comments=Sua conta é mais nova que %s. Para evitar comentários fantasmas, todos os comentários de Issue/PR serão excluídos com ela.
|
||||||
confirm_delete_account=Confirmar exclusão
|
confirm_delete_account=Confirmar exclusão
|
||||||
delete_account_title=Excluir usuário
|
delete_account_title=Excluir conta de usuário
|
||||||
delete_account_desc=Tem certeza que deseja apagar sua conta de usuário permanentemente?
|
delete_account_desc=Tem certeza que deseja apagar sua conta de usuário permanentemente?
|
||||||
|
|
||||||
email_notifications.enable=Habilitar notificações por e-mail
|
email_notifications.enable=Habilitar notificações de e-mail
|
||||||
email_notifications.onmention=Somente quando for mencionado(a)
|
email_notifications.onmention=Somente e-mail com menção
|
||||||
email_notifications.disable=Desabilitar notificações por e-mail
|
email_notifications.disable=Desabilitar notificações de e-mail
|
||||||
email_notifications.submit=Atualizar preferências de e-mail
|
email_notifications.submit=Atualizar preferências de e-mail
|
||||||
email_notifications.andyourown=e suas próprias notificações
|
email_notifications.andyourown=E Suas Próprias Notificações
|
||||||
|
|
||||||
visibility=Visibilidade do usuário
|
visibility=Visibilidade do usuário
|
||||||
visibility.public=Pública
|
visibility.public=Pública
|
||||||
|
@ -1033,7 +1030,7 @@ download_zip=Baixar ZIP
|
||||||
download_tar=Baixar TAR.GZ
|
download_tar=Baixar TAR.GZ
|
||||||
download_bundle=Baixar PACOTE
|
download_bundle=Baixar PACOTE
|
||||||
generate_repo=Gerar repositório
|
generate_repo=Gerar repositório
|
||||||
generate_from=Gerar a partir de
|
generate_from=Gerar de
|
||||||
repo_desc=Descrição
|
repo_desc=Descrição
|
||||||
repo_desc_helper=Digite uma breve descrição (opcional)
|
repo_desc_helper=Digite uma breve descrição (opcional)
|
||||||
repo_lang=Linguagem
|
repo_lang=Linguagem
|
||||||
|
@ -1054,7 +1051,7 @@ trust_model_helper_committer=Committer: Confiar em assinaturas que correspondem
|
||||||
trust_model_helper_collaborator_committer=Colaborador+Committer: Confiar em assinaturas dos colaboradores que correspondem ao committer
|
trust_model_helper_collaborator_committer=Colaborador+Committer: Confiar em assinaturas dos colaboradores que correspondem ao committer
|
||||||
trust_model_helper_default=Padrão: Usar o modelo de confiança padrão para esta instalação
|
trust_model_helper_default=Padrão: Usar o modelo de confiança padrão para esta instalação
|
||||||
create_repo=Criar repositório
|
create_repo=Criar repositório
|
||||||
default_branch=Ramo padrão
|
default_branch=Branch Padrão
|
||||||
default_branch_label=padrão
|
default_branch_label=padrão
|
||||||
default_branch_helper=O branch padrão é o branch base para pull requests e commits de código.
|
default_branch_helper=O branch padrão é o branch base para pull requests e commits de código.
|
||||||
mirror_prune=Varrer
|
mirror_prune=Varrer
|
||||||
|
@ -1062,7 +1059,7 @@ mirror_prune_desc=Remover referências obsoletas de controle remoto
|
||||||
mirror_interval=Intervalo de espelhamento (unidades válidas são 'h', 'm', ou 's'). O desabilita a sincronização automática. (Intervalo mínimo: %s)
|
mirror_interval=Intervalo de espelhamento (unidades válidas são 'h', 'm', ou 's'). O desabilita a sincronização automática. (Intervalo mínimo: %s)
|
||||||
mirror_interval_invalid=O intervalo do espelhamento não é válido.
|
mirror_interval_invalid=O intervalo do espelhamento não é válido.
|
||||||
mirror_sync_on_commit=Sincronizar quando commits forem enviados
|
mirror_sync_on_commit=Sincronizar quando commits forem enviados
|
||||||
mirror_address=Clonar a partir de URL
|
mirror_address=Clonar de URL
|
||||||
mirror_address_desc=Coloque todas as credenciais necessárias na seção de autorização.
|
mirror_address_desc=Coloque todas as credenciais necessárias na seção de autorização.
|
||||||
mirror_address_url_invalid=O URL fornecido é inválido. Você deve escapar todos os componentes do URL corretamente.
|
mirror_address_url_invalid=O URL fornecido é inválido. Você deve escapar todos os componentes do URL corretamente.
|
||||||
mirror_address_protocol_invalid=O URL fornecido é inválido. Somente locais http(s):// ou git:// podem ser usados para espelhamento.
|
mirror_address_protocol_invalid=O URL fornecido é inválido. Somente locais http(s):// ou git:// podem ser usados para espelhamento.
|
||||||
|
@ -1173,8 +1170,8 @@ migrate.codebase.description=Migrar dados de codebasehq.com.
|
||||||
migrate.gitbucket.description=Migrar dados de instâncias do GitBucket.
|
migrate.gitbucket.description=Migrar dados de instâncias do GitBucket.
|
||||||
migrate.migrating_git=Migrando dados Git
|
migrate.migrating_git=Migrando dados Git
|
||||||
migrate.migrating_topics=Migrando tópicos
|
migrate.migrating_topics=Migrando tópicos
|
||||||
migrate.migrating_milestones=Migrando marcos
|
migrate.migrating_milestones=Migrando Marcos
|
||||||
migrate.migrating_labels=Migrando rótulos
|
migrate.migrating_labels=Migrando Rótulos
|
||||||
migrate.migrating_releases=Migrando Versões
|
migrate.migrating_releases=Migrando Versões
|
||||||
migrate.migrating_issues=Migrando Issues
|
migrate.migrating_issues=Migrando Issues
|
||||||
migrate.migrating_pulls=Migrando Pull Requests
|
migrate.migrating_pulls=Migrando Pull Requests
|
||||||
|
@ -1194,10 +1191,10 @@ unstar=Retirar dos favoritos
|
||||||
star=Juntar aos favoritos
|
star=Juntar aos favoritos
|
||||||
fork=Fork
|
fork=Fork
|
||||||
download_archive=Baixar repositório
|
download_archive=Baixar repositório
|
||||||
more_operations=Mais operações
|
more_operations=Mais Operações
|
||||||
|
|
||||||
no_desc=Nenhuma descrição
|
no_desc=Nenhuma descrição
|
||||||
quick_guide=Guia rápido
|
quick_guide=Guia Rápido
|
||||||
clone_this_repo=Clonar este repositório
|
clone_this_repo=Clonar este repositório
|
||||||
cite_this_repo=Citar este repositório
|
cite_this_repo=Citar este repositório
|
||||||
create_new_repo_command=Criando um novo repositório por linha de comando
|
create_new_repo_command=Criando um novo repositório por linha de comando
|
||||||
|
@ -1234,8 +1231,8 @@ tagged_this=criou essa tag
|
||||||
file.title=%s em %s
|
file.title=%s em %s
|
||||||
file_raw=Original
|
file_raw=Original
|
||||||
file_history=Histórico
|
file_history=Histórico
|
||||||
file_view_source=Ver código-fonte
|
file_view_source=Exibir código-fonte
|
||||||
file_view_rendered=Ver renderizado
|
file_view_rendered=Ver Renderizado
|
||||||
file_view_raw=Ver original
|
file_view_raw=Ver original
|
||||||
file_permalink=Link permanente
|
file_permalink=Link permanente
|
||||||
file_too_large=O arquivo é muito grande para ser mostrado.
|
file_too_large=O arquivo é muito grande para ser mostrado.
|
||||||
|
@ -1243,13 +1240,13 @@ invisible_runes_header=`Este arquivo contém caracteres Unicode invisíveis`
|
||||||
invisible_runes_description=`Este arquivo contém caracteres Unicode invisíveis que são indistinguíveis para humanos, mas que podem ser processados de forma diferente por um computador. Se você acha que isso é intencional, pode ignorar esse aviso com segurança. Use o botão Escapar para revelá-los
|
invisible_runes_description=`Este arquivo contém caracteres Unicode invisíveis que são indistinguíveis para humanos, mas que podem ser processados de forma diferente por um computador. Se você acha que isso é intencional, pode ignorar esse aviso com segurança. Use o botão Escapar para revelá-los
|
||||||
ambiguous_runes_header=`Este arquivo contém caracteres Unicode ambíguos`
|
ambiguous_runes_header=`Este arquivo contém caracteres Unicode ambíguos`
|
||||||
ambiguous_runes_description=`Este arquivo contém caracteres Unicode que podem ser confundidos com outros caracteres. Se você acha que isso é intencional, pode ignorar esse aviso com segurança. Use o botão Escapar para revelá-los
|
ambiguous_runes_description=`Este arquivo contém caracteres Unicode que podem ser confundidos com outros caracteres. Se você acha que isso é intencional, pode ignorar esse aviso com segurança. Use o botão Escapar para revelá-los
|
||||||
invisible_runes_line=`Esta linha contém caracteres unicode invisíveis`
|
invisible_runes_line=`Esta linha tem caracteres unicode invisíveis`
|
||||||
ambiguous_runes_line=`Esta linha contém caracteres unicode ambíguos`
|
ambiguous_runes_line=`Esta linha tem caracteres unicode ambíguos`
|
||||||
ambiguous_character=`%[1]c [U+%04[1]X] é confundível com o %[2]c [U+%04[2]X]`
|
ambiguous_character=`%[1]c [U+%04[1]X] é confundível com o %[2]c [U+%04[2]X]`
|
||||||
|
|
||||||
escape_control_characters=Escapar
|
escape_control_characters=Escapar
|
||||||
unescape_control_characters=Desescapar
|
unescape_control_characters=Desescapar
|
||||||
file_copy_permalink=Copiar link permanente
|
file_copy_permalink=Copiar Link Permanente
|
||||||
view_git_blame=Ver Git Blame
|
view_git_blame=Ver Git Blame
|
||||||
video_not_supported_in_browser=Seu navegador não suporta a tag 'video' do HTML5.
|
video_not_supported_in_browser=Seu navegador não suporta a tag 'video' do HTML5.
|
||||||
audio_not_supported_in_browser=Seu navegador não suporta a tag 'audio' do HTML5.
|
audio_not_supported_in_browser=Seu navegador não suporta a tag 'audio' do HTML5.
|
||||||
|
@ -1271,11 +1268,11 @@ line=linha
|
||||||
lines=linhas
|
lines=linhas
|
||||||
from_comment=(comentário)
|
from_comment=(comentário)
|
||||||
|
|
||||||
editor.add_file=Adicionar arquivo
|
editor.add_file=Adicionar Arquivo
|
||||||
editor.new_file=Novo arquivo
|
editor.new_file=Novo arquivo
|
||||||
editor.upload_file=Enviar arquivo
|
editor.upload_file=Enviar arquivo
|
||||||
editor.edit_file=Editar arquivo
|
editor.edit_file=Editar arquivo
|
||||||
editor.preview_changes=Pré-visualizar alterações
|
editor.preview_changes=Visualizar alterações
|
||||||
editor.cannot_edit_lfs_files=Arquivos LFS não podem ser editados na interface web.
|
editor.cannot_edit_lfs_files=Arquivos LFS não podem ser editados na interface web.
|
||||||
editor.cannot_edit_non_text_files=Arquivos binários não podem ser editados na interface web.
|
editor.cannot_edit_non_text_files=Arquivos binários não podem ser editados na interface web.
|
||||||
editor.edit_this_file=Editar arquivo
|
editor.edit_this_file=Editar arquivo
|
||||||
|
@ -1295,7 +1292,7 @@ editor.add_tmpl=Adicionar "<nome do arquivo>"
|
||||||
editor.add=Adicionar %s
|
editor.add=Adicionar %s
|
||||||
editor.update=Atualizar %s
|
editor.update=Atualizar %s
|
||||||
editor.delete=Excluir %s
|
editor.delete=Excluir %s
|
||||||
editor.patch=Aplicar correção
|
editor.patch=Aplicar Correção
|
||||||
editor.patching=Corrigindo:
|
editor.patching=Corrigindo:
|
||||||
editor.fail_to_apply_patch=`Não foi possível aplicar a correção "%s"`
|
editor.fail_to_apply_patch=`Não foi possível aplicar a correção "%s"`
|
||||||
editor.new_patch=Nova correção
|
editor.new_patch=Nova correção
|
||||||
|
@ -1345,7 +1342,7 @@ commits.nothing_to_compare=Estes branches são iguais.
|
||||||
commits.search=Pesquisar commits...
|
commits.search=Pesquisar commits...
|
||||||
commits.search.tooltip=Você pode prefixar as palavras-chave com "author:" (autor da mudança), "committer:" (autor do commit), "after:" (depois) ou "before:" (antes). Por exemplo: "revert author:Ana before:2019-01-13".\
|
commits.search.tooltip=Você pode prefixar as palavras-chave com "author:" (autor da mudança), "committer:" (autor do commit), "after:" (depois) ou "before:" (antes). Por exemplo: "revert author:Ana before:2019-01-13".\
|
||||||
commits.find=Pesquisar
|
commits.find=Pesquisar
|
||||||
commits.search_all=Todos os ramos
|
commits.search_all=Todos os branches
|
||||||
commits.author=Autor
|
commits.author=Autor
|
||||||
commits.message=Mensagem
|
commits.message=Mensagem
|
||||||
commits.date=Data
|
commits.date=Data
|
||||||
|
@ -1377,17 +1374,17 @@ projects=Projetos
|
||||||
projects.desc=Gerencie issues e PRs nos quadros do projeto.
|
projects.desc=Gerencie issues e PRs nos quadros do projeto.
|
||||||
projects.description=Descrição (opcional)
|
projects.description=Descrição (opcional)
|
||||||
projects.description_placeholder=Descrição
|
projects.description_placeholder=Descrição
|
||||||
projects.create=Criar projeto
|
projects.create=Criar Projeto
|
||||||
projects.title=Título
|
projects.title=Título
|
||||||
projects.new=Novo projeto
|
projects.new=Novo projeto
|
||||||
projects.new_subheader=Coordene, acompanhe e atualize seu trabalho em um só lugar, para que os projetos permaneçam transparentes e dentro do cronograma.
|
projects.new_subheader=Coordene, acompanhe e atualize seu trabalho em um só lugar, para que os projetos permaneçam transparentes e dentro do cronograma.
|
||||||
projects.create_success=Projeto "%s" criado.
|
projects.create_success=Projeto "%s" criado.
|
||||||
projects.deletion=Excluir projeto
|
projects.deletion=Apagar Projeto
|
||||||
projects.deletion_desc=Excluir um projeto o remove de todas as issues relacionadas. Deseja continuar?
|
projects.deletion_desc=Excluir um projeto o remove de todas as issues relacionadas. Deseja continuar?
|
||||||
projects.deletion_success=O projeto foi excluido.
|
projects.deletion_success=O projeto foi excluido.
|
||||||
projects.edit=Editar projeto
|
projects.edit=Editar Projetos
|
||||||
projects.edit_subheader=Projetos organizam issues e acompanham o progresso.
|
projects.edit_subheader=Projetos organizam issues e acompanham o progresso.
|
||||||
projects.modify=Editar projeto
|
projects.modify=Atualizar Projeto
|
||||||
projects.edit_success=Projeto "%s" atualizado.
|
projects.edit_success=Projeto "%s" atualizado.
|
||||||
projects.type.none=Nenhum
|
projects.type.none=Nenhum
|
||||||
projects.type.basic_kanban=Kanban básico
|
projects.type.basic_kanban=Kanban básico
|
||||||
|
@ -1399,7 +1396,7 @@ projects.column.edit=Editar coluna
|
||||||
projects.column.edit_title=Nome
|
projects.column.edit_title=Nome
|
||||||
projects.column.new_title=Nome
|
projects.column.new_title=Nome
|
||||||
projects.column.new_submit=Criar coluna
|
projects.column.new_submit=Criar coluna
|
||||||
projects.column.new=Nova coluna
|
projects.column.new=Adicionar coluna
|
||||||
projects.column.set_default=Atribuir como padrão
|
projects.column.set_default=Atribuir como padrão
|
||||||
projects.column.set_default_desc=Definir esta coluna como padrão para pull e issues sem categoria
|
projects.column.set_default_desc=Definir esta coluna como padrão para pull e issues sem categoria
|
||||||
projects.column.unset_default=Desatribuir padrão
|
projects.column.unset_default=Desatribuir padrão
|
||||||
|
@ -1423,12 +1420,12 @@ issues.filter_reviewers=Filtrar Revisor
|
||||||
issues.new=Nova issue
|
issues.new=Nova issue
|
||||||
issues.new.title_empty=Título não pode ser em branco
|
issues.new.title_empty=Título não pode ser em branco
|
||||||
issues.new.labels=Etiquetas
|
issues.new.labels=Etiquetas
|
||||||
issues.new.no_label=Nenhum rótulo
|
issues.new.no_label=Sem etiqueta
|
||||||
issues.new.clear_labels=Limpar etiquetas
|
issues.new.clear_labels=Limpar etiquetas
|
||||||
issues.new.projects=Projetos
|
issues.new.projects=Projetos
|
||||||
issues.new.clear_projects=Limpar projetos
|
issues.new.clear_projects=Limpar projetos
|
||||||
issues.new.no_projects=Sem projeto
|
issues.new.no_projects=Sem projeto
|
||||||
issues.new.open_projects=Projetos abertos
|
issues.new.open_projects=Abrir Projetos
|
||||||
issues.new.closed_projects=Projetos fechados
|
issues.new.closed_projects=Projetos fechados
|
||||||
issues.new.no_items=Nenhum item
|
issues.new.no_items=Nenhum item
|
||||||
issues.new.milestone=Marco
|
issues.new.milestone=Marco
|
||||||
|
@ -1446,12 +1443,12 @@ issues.choose.blank=Padrão
|
||||||
issues.choose.blank_about=Criar uma issue a partir do modelo padrão.
|
issues.choose.blank_about=Criar uma issue a partir do modelo padrão.
|
||||||
issues.choose.ignore_invalid_templates=Modelos inválidos foram ignorados
|
issues.choose.ignore_invalid_templates=Modelos inválidos foram ignorados
|
||||||
issues.choose.invalid_templates=%v modelo(s) inválido(s) encontrado(s)
|
issues.choose.invalid_templates=%v modelo(s) inválido(s) encontrado(s)
|
||||||
issues.no_ref=Nenhum ramo ou rótulo especificado
|
issues.no_ref=Nenhum branch/tag especificado
|
||||||
issues.create=Criar issue
|
issues.create=Criar issue
|
||||||
issues.new_label=Novo rótulo
|
issues.new_label=Nova etiqueta
|
||||||
issues.new_label_placeholder=Nome da etiqueta
|
issues.new_label_placeholder=Nome da etiqueta
|
||||||
issues.new_label_desc_placeholder=Descrição
|
issues.new_label_desc_placeholder=Descrição
|
||||||
issues.create_label=Criar rótulo
|
issues.create_label=Criar etiqueta
|
||||||
issues.label_templates.title=Carregue um conjunto de etiquetas pré-definidas
|
issues.label_templates.title=Carregue um conjunto de etiquetas pré-definidas
|
||||||
issues.label_templates.info=Ainda não existem etiquetas. Crie uma etiqueta em 'Nova etiqueta' ou use um conjunto de etiquetas predefinida:
|
issues.label_templates.info=Ainda não existem etiquetas. Crie uma etiqueta em 'Nova etiqueta' ou use um conjunto de etiquetas predefinida:
|
||||||
issues.label_templates.helper=Selecione um conjunto de etiquetas
|
issues.label_templates.helper=Selecione um conjunto de etiquetas
|
||||||
|
@ -1584,7 +1581,7 @@ issues.label_description=Descrição
|
||||||
issues.label_color=Cor
|
issues.label_color=Cor
|
||||||
issues.label_exclusive=Exclusiva
|
issues.label_exclusive=Exclusiva
|
||||||
issues.label_archive=Arquivar
|
issues.label_archive=Arquivar
|
||||||
issues.label_exclusive_desc=Nomeie o rótulo como <code>âmbito/objeto</code> para torná-lo mutuamente exclusivo em relação a outros rótulos do mesmo <code>âmbito/</code>.
|
issues.label_exclusive_desc=Nomeie a etiqueta <code>escopo/item</code> para torná-la mutuamente exclusiva em relação a outras etiquetas do <code>escopo/</code>.
|
||||||
issues.label_exclusive_warning=Quaisquer rótulos com escopo conflitantes serão removidos ao editar os rótulos de uma issue ou pull request.
|
issues.label_exclusive_warning=Quaisquer rótulos com escopo conflitantes serão removidos ao editar os rótulos de uma issue ou pull request.
|
||||||
issues.label_count=%d etiquetas
|
issues.label_count=%d etiquetas
|
||||||
issues.label_open_issues=%d issues abertas
|
issues.label_open_issues=%d issues abertas
|
||||||
|
@ -1775,7 +1772,7 @@ pulls.merged_title_desc_few=aplicou merge dos %[1]d commits de <code>%[2]s</code
|
||||||
pulls.change_target_branch_at=`mudou o branch de destino de <b>%s</b> para <b>%s</b> %s`
|
pulls.change_target_branch_at=`mudou o branch de destino de <b>%s</b> para <b>%s</b> %s`
|
||||||
pulls.tab_conversation=Conversação
|
pulls.tab_conversation=Conversação
|
||||||
pulls.tab_commits=Commits
|
pulls.tab_commits=Commits
|
||||||
pulls.tab_files=Arquivos modificados
|
pulls.tab_files=Arquivos alterados
|
||||||
pulls.reopen_to_merge=Por favor reabra este pull request para aplicar o merge.
|
pulls.reopen_to_merge=Por favor reabra este pull request para aplicar o merge.
|
||||||
pulls.cant_reopen_deleted_branch=Este pull request não pode ser reaberto porque o branch foi excluído.
|
pulls.cant_reopen_deleted_branch=Este pull request não pode ser reaberto porque o branch foi excluído.
|
||||||
pulls.merged=Merge aplicado
|
pulls.merged=Merge aplicado
|
||||||
|
@ -1812,8 +1809,8 @@ pulls.approve_count_1=%d aprovação
|
||||||
pulls.approve_count_n=%d aprovações
|
pulls.approve_count_n=%d aprovações
|
||||||
pulls.reject_count_1=%d pedido de alteração
|
pulls.reject_count_1=%d pedido de alteração
|
||||||
pulls.reject_count_n=%d pedidos de alteração
|
pulls.reject_count_n=%d pedidos de alteração
|
||||||
pulls.waiting_count_1=%d revisão pendente
|
pulls.waiting_count_1=aguardando %d revisão
|
||||||
pulls.waiting_count_n=%d revisões pendentes
|
pulls.waiting_count_n=aguardando %d revisões
|
||||||
pulls.wrong_commit_id=id de commit tem que ser um id de commit no branch de destino
|
pulls.wrong_commit_id=id de commit tem que ser um id de commit no branch de destino
|
||||||
|
|
||||||
pulls.no_merge_desc=O merge deste pull request não pode ser aplicado porque todas as opções de mesclagem do repositório estão desabilitadas.
|
pulls.no_merge_desc=O merge deste pull request não pode ser aplicado porque todas as opções de mesclagem do repositório estão desabilitadas.
|
||||||
|
@ -1885,7 +1882,7 @@ milestones.no_due_date=Sem data limite
|
||||||
milestones.open=Reabrir
|
milestones.open=Reabrir
|
||||||
milestones.close=Fechar
|
milestones.close=Fechar
|
||||||
milestones.new_subheader=Os marcos podem ajudá-lo a organizar os problemas e acompanhar seu progresso.
|
milestones.new_subheader=Os marcos podem ajudá-lo a organizar os problemas e acompanhar seu progresso.
|
||||||
milestones.completeness=<strong>%d%%</strong> completo
|
milestones.completeness=%d%% concluído
|
||||||
milestones.create=Criar marco
|
milestones.create=Criar marco
|
||||||
milestones.title=Título
|
milestones.title=Título
|
||||||
milestones.desc=Descrição
|
milestones.desc=Descrição
|
||||||
|
@ -2153,7 +2150,7 @@ settings.confirm_wiki_delete=Excluir dados da wiki
|
||||||
settings.wiki_deletion_success=Os dados da wiki do repositório foi excluídos.
|
settings.wiki_deletion_success=Os dados da wiki do repositório foi excluídos.
|
||||||
settings.delete=Excluir este repositório
|
settings.delete=Excluir este repositório
|
||||||
settings.delete_desc=A exclusão de um repositório é permanente e não pode ser desfeita.
|
settings.delete_desc=A exclusão de um repositório é permanente e não pode ser desfeita.
|
||||||
settings.delete_notices_1=- <strong>NÃO É POSSÍVEL</strong> desfazer esta ação.
|
settings.delete_notices_1=- Esta operação <strong>NÃO PODERÁ</strong> ser desfeita.
|
||||||
settings.delete_notices_2=- Essa operação excluirá permanentemente o repositório <strong>%s</strong>, incluindo código, issues, comentários, dados da wiki e configurações do colaborador.
|
settings.delete_notices_2=- Essa operação excluirá permanentemente o repositório <strong>%s</strong>, incluindo código, issues, comentários, dados da wiki e configurações do colaborador.
|
||||||
settings.delete_notices_fork_1=- Forks deste repositório se tornarão independentes após a exclusão.
|
settings.delete_notices_fork_1=- Forks deste repositório se tornarão independentes após a exclusão.
|
||||||
settings.deletion_success=O repositório foi excluído.
|
settings.deletion_success=O repositório foi excluído.
|
||||||
|
@ -2605,7 +2602,7 @@ settings.transfer_abort_success = A transferência de repositório para %s foi c
|
||||||
settings.enter_repo_name = Digite os nomes do dono e do repositório exatamente neste formato:
|
settings.enter_repo_name = Digite os nomes do dono e do repositório exatamente neste formato:
|
||||||
issues.blocked_by_user = Você não pode criar uma questão neste repositório porque você foi bloqueado pelo dono do repositório.
|
issues.blocked_by_user = Você não pode criar uma questão neste repositório porque você foi bloqueado pelo dono do repositório.
|
||||||
settings.new_owner_blocked_doer = Você foi bloqueado pelo novo dono do repositório.
|
settings.new_owner_blocked_doer = Você foi bloqueado pelo novo dono do repositório.
|
||||||
settings.wiki_rename_branch_main_notices_1 = <strong>NÃO É POSSÍVEL</strong> desfazer esta ação.
|
settings.wiki_rename_branch_main_notices_1 = Esta ação <strong>NÃO PODERÁ</strong> ser desfeita.
|
||||||
tree_path_not_found_commit = O caminho %[1]s não existe no commit %[2]s
|
tree_path_not_found_commit = O caminho %[1]s não existe no commit %[2]s
|
||||||
rss.must_be_on_branch = Você precisa estar em uma branch para ter um feed RSS.
|
rss.must_be_on_branch = Você precisa estar em uma branch para ter um feed RSS.
|
||||||
admin.manage_flags = Gerenciar sinalizadores
|
admin.manage_flags = Gerenciar sinalizadores
|
||||||
|
@ -2614,8 +2611,8 @@ admin.update_flags = Atualizar sinalizadores
|
||||||
admin.flags_replaced = Os sinalizadores do repositório foram substituídos
|
admin.flags_replaced = Os sinalizadores do repositório foram substituídos
|
||||||
all_branches = Todas as branches
|
all_branches = Todas as branches
|
||||||
fork_branch = Branch a ser clonada para o fork
|
fork_branch = Branch a ser clonada para o fork
|
||||||
object_format_helper = O formato utilizado para armazenar os objetos do repositório, sendo SHA1 o mais compatível. Esta ação é <strong>IRREVERSÍVEL</strong>.
|
object_format_helper = O formato utilizado para armazenar os objetos do repositório, sendo SHA1 o mais compatível. Esta opção não poderá ser alterada futuramente.
|
||||||
object_format = Formato dos objetos
|
object_format = Formato de objeto
|
||||||
tree_path_not_found_branch = Caminho %[1]s não existe na branch %[2]s
|
tree_path_not_found_branch = Caminho %[1]s não existe na branch %[2]s
|
||||||
tree_path_not_found_tag = Caminho %[1]s não existe na etiqueta %[2]s
|
tree_path_not_found_tag = Caminho %[1]s não existe na etiqueta %[2]s
|
||||||
commits.view_path = Ver neste ponto do histórico
|
commits.view_path = Ver neste ponto do histórico
|
||||||
|
@ -2665,42 +2662,6 @@ wiki.search = Pesquisar na wiki
|
||||||
wiki.no_search_results = Nenhum resultado
|
wiki.no_search_results = Nenhum resultado
|
||||||
n_release_one = %s versão
|
n_release_one = %s versão
|
||||||
n_release_few = %s versões
|
n_release_few = %s versões
|
||||||
form.string_too_long = O texto fornecido possui mais que %d caracteres.
|
|
||||||
branch.branch_name_conflict = O nome do ramo "%s" está em conflito com o ramo "%s" já existente.
|
|
||||||
settings.graphql_url = URL do GraphQL
|
|
||||||
settings.add_collaborator_blocked_our = Não foi possível adicionar o(a) colaborador(a), pois o(a) proprietário(a) do repositório bloqueou-os.
|
|
||||||
settings.confirmation_string = Texto de confirmação
|
|
||||||
settings.wiki_rename_branch_main = Regularizar o nome do ramo da wiki
|
|
||||||
project = Projetos
|
|
||||||
comments.edit.already_changed = Falha ao salvar as alterações ao comentário. Parece que o conteúdo foi alterado por outro usuário. Atualize a página e tente novamente para evitar sobrescrever as alterações feitas pelo outro usuário.
|
|
||||||
activity.navbar.code_frequency = Frequência de código
|
|
||||||
settings.protect_status_check_matched = Correspondente
|
|
||||||
branch.tag_collision = O ramo "%s" não pode ser criado porque já existe uma etiqueta com o mesmo nome no repositório.
|
|
||||||
settings.archive.mirrors_unavailable = As réplicas ficarão indisponíveis se o repositório estiver arquivado.
|
|
||||||
release.download_count_one = %s download
|
|
||||||
settings.mirror_settings.docs.no_new_mirrors = O seu repositório está replicando alterações de ou para outro repositório. Observe que não é possível criar novas réplicas no momento.
|
|
||||||
settings.mirror_settings.docs.pull_mirror_instructions = Para configurar uma réplica de outro repositório, consulte:
|
|
||||||
settings.wiki_rename_branch_main_desc = Renomear o ramo usado internamente pela wiki para "%s". Esta ação é <strong>IRREVERSÍVEL</strong>.
|
|
||||||
settings.enforce_on_admins = Impor esta regra aos administradores de repositórios
|
|
||||||
settings.enforce_on_admins_desc = Administradores de repositório não podem burlar esta regra.
|
|
||||||
subscribe.issue.guest.tooltip = Faça login para receber notificações desta questão
|
|
||||||
settings.federation_not_enabled = O recurso de federação não está habilitado em seu servidor.
|
|
||||||
settings.trust_model.committer.desc = Uma assinatura de commit é considerada "confiável" caso corresponda ao autor do commit, caso contrário será definida como "discordante". Isso permite delegar a autoria de commits ao Forgejo, adicionando créditos ao autor original nos campos "Co-authored-by" e "Co-commited-by" no final do commit. A chave padrão do Forgejo deve corresponder à chave de um usuário no banco de dados.
|
|
||||||
settings.wiki_branch_rename_success = O nome do ramo da wiki do repositório foi regularizado com sucesso.
|
|
||||||
pulls.nothing_to_compare_have_tag = O ramo/etiqueta escolhidos são iguais.
|
|
||||||
settings.sourcehut_builds.secrets = Segredos
|
|
||||||
release.download_count_few = %s downloads
|
|
||||||
release.hide_archive_links = Ocultar arquivos gerados automaticamente
|
|
||||||
release.system_generated = Este anexo foi gerado automaticamente.
|
|
||||||
settings.wiki_branch_rename_failure = Falha ao regularizar o nome do ramo da wiki do repositório.
|
|
||||||
settings.add_collaborator_blocked_them = Não foi possível adicionar o(a) colaborador(a) porque ele(a) bloqueou o(a) proprietário(a) do repositório.
|
|
||||||
settings.thread_id = ID da discussão
|
|
||||||
issues.edit.already_changed = Não foi possível salvar as alterações desta questão porque o conteúdo foi alterado por outro(a) usuário(a). Atualize a página e tente novamente para evitar sobrescrever as alterações.
|
|
||||||
pulls.edit.already_changed = Não foi possível salvar as alterações deste pedido de integração porque o conteúdo foi alterado por outro(a) usuário(a). Atualize a página e tente novamente para evitar sobrescrever as alterações.
|
|
||||||
editor.commit_id_not_matching = O arquivo foi alterado durante a edição. Salve as alterações em um novo ramo e realize a mesclagem.
|
|
||||||
blame.ignore_revs = As revisões em <a href="%s">.git-blame-ignore-revs</a> foram ignoradas. Clique <a href="%s">aqui</a> para retornar à visualização normal.
|
|
||||||
topic.format_prompt = Os tópicos devem começar com um caracter alfanumérico, podem incluir hífens ("-") e pontos ("."), e podem ter até 35 caracteres. As letras devem ser minúsculas.
|
|
||||||
settings.rename_branch_failed_protected = Não foi possível renomar o ramo %s porque ele está protegido.
|
|
||||||
|
|
||||||
[graphs]
|
[graphs]
|
||||||
|
|
||||||
|
@ -2750,7 +2711,7 @@ settings.change_orgname_redirect_prompt=O nome antigo irá redirecionar até que
|
||||||
settings.update_avatar_success=O avatar da organização foi atualizado.
|
settings.update_avatar_success=O avatar da organização foi atualizado.
|
||||||
settings.delete=Excluir organização
|
settings.delete=Excluir organização
|
||||||
settings.delete_account=Excluir esta organização
|
settings.delete_account=Excluir esta organização
|
||||||
settings.delete_prompt=A organização será excluída permanentemente. Esta ação é <strong>IRREVERSÍVEL</strong>!
|
settings.delete_prompt=A organização será excluída permanentemente. Isto <strong>NÃO PODERÁ</strong> ser desfeito!
|
||||||
settings.confirm_delete_account=Confirmar exclusão
|
settings.confirm_delete_account=Confirmar exclusão
|
||||||
settings.delete_org_title=Excluir organização
|
settings.delete_org_title=Excluir organização
|
||||||
settings.delete_org_desc=Essa organização será excluída permanentemente. Continuar?
|
settings.delete_org_desc=Essa organização será excluída permanentemente. Continuar?
|
||||||
|
@ -2825,10 +2786,6 @@ teams.invite.by=Convidado por %s
|
||||||
teams.invite.description=Por favor, clique no botão abaixo para se juntar à equipe.
|
teams.invite.description=Por favor, clique no botão abaixo para se juntar à equipe.
|
||||||
settings.email = E-mail de contato
|
settings.email = E-mail de contato
|
||||||
teams.invite.title = Você foi convidado para juntar-se à equipe <strong>%s</strong> da organização <strong>%s</strong>.
|
teams.invite.title = Você foi convidado para juntar-se à equipe <strong>%s</strong> da organização <strong>%s</strong>.
|
||||||
open_dashboard = Abrir painel
|
|
||||||
settings.change_orgname_prompt = Obs.: Alterar o nome de uma organização resultará na alteração do URL dela e disponibilizará o nome antigo para uso.
|
|
||||||
follow_blocked_user = Não foi possível seguir esta organização porque ela bloqueou-o(a).
|
|
||||||
form.name_pattern_not_allowed = O padrão "%s" não é permitido no nome de uma organização.
|
|
||||||
|
|
||||||
[admin]
|
[admin]
|
||||||
dashboard=Painel
|
dashboard=Painel
|
||||||
|
@ -3346,18 +3303,6 @@ self_check = Autodiagnóstico
|
||||||
auths.tip.gitea = Registre um novo aplicativo OAuth2. A documentação pode ser encontrada em https://forgejo.org/docs/latest/user/oauth2-provider/
|
auths.tip.gitea = Registre um novo aplicativo OAuth2. A documentação pode ser encontrada em https://forgejo.org/docs/latest/user/oauth2-provider/
|
||||||
dashboard.sync_tag.started = Sincronização de etiquetas iniciada
|
dashboard.sync_tag.started = Sincronização de etiquetas iniciada
|
||||||
self_check.no_problem_found = Por enquanto não há algum problema.
|
self_check.no_problem_found = Por enquanto não há algum problema.
|
||||||
config_settings = Configurações
|
|
||||||
config_summary = Resumo
|
|
||||||
auths.tips.gmail_settings = Configurações do Gmail:
|
|
||||||
auths.tip.gitlab_new = Registre um novo aplicativo em https://gitlab.com/-/profile/applications
|
|
||||||
config.app_slogan = Slogan do servidor
|
|
||||||
auths.default_domain_name = Domínio padrão usado para o endereço de e-mail
|
|
||||||
dashboard.sync_repo_tags = Sincronizar etiquetas do Git para o banco de dados
|
|
||||||
config.app_data_path = Caminho dos dados do aplicativo
|
|
||||||
dashboard.task.cancelled = Tarefa: %[1]s cancelada: %[3]s
|
|
||||||
dashboard.sync_branch.started = Sincronização de ramos iniciada
|
|
||||||
dashboard.sync_repo_branches = Sincronizar ramos perdidos do Git para o banco de dados
|
|
||||||
packages.cleanup.success = Os dados expirados foram limpos com sucesso
|
|
||||||
|
|
||||||
|
|
||||||
[action]
|
[action]
|
||||||
|
@ -3597,8 +3542,6 @@ owner.settings.chef.keypair=Gerar par de chaves
|
||||||
rpm.repository.architectures = Arquiteturas
|
rpm.repository.architectures = Arquiteturas
|
||||||
rpm.repository = Informações do repositório
|
rpm.repository = Informações do repositório
|
||||||
rpm.repository.multiple_groups = Este pacote está disponível em vários grupos.
|
rpm.repository.multiple_groups = Este pacote está disponível em vários grupos.
|
||||||
npm.dependencies.bundle = Dependências empacotadas
|
|
||||||
registry.documentation = Para mais informações sobre o registro %s, veja <a target="_blank" rel="noopener noreferrer" href="%s">a documentação</a>.
|
|
||||||
|
|
||||||
[secrets]
|
[secrets]
|
||||||
secrets=Segredos
|
secrets=Segredos
|
||||||
|
@ -3639,7 +3582,7 @@ runners.name=Nome
|
||||||
runners.owner_type=Tipo
|
runners.owner_type=Tipo
|
||||||
runners.description=Descrição
|
runners.description=Descrição
|
||||||
runners.labels=Rótulos
|
runners.labels=Rótulos
|
||||||
runners.last_online=Última vez online
|
runners.last_online=Última Vez Online
|
||||||
runners.runner_title=Runner
|
runners.runner_title=Runner
|
||||||
runners.task_list=Tarefas recentes neste runner
|
runners.task_list=Tarefas recentes neste runner
|
||||||
runners.task_list.no_tasks=Ainda não há nenhuma tarefa.
|
runners.task_list.no_tasks=Ainda não há nenhuma tarefa.
|
||||||
|
@ -3692,10 +3635,6 @@ variables = Variáveis
|
||||||
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.deletion.failed = Falha ao remover a variável.
|
variables.deletion.failed = Falha ao remover a variável.
|
||||||
variables.creation.failed = Falha ao adicionar a variável.
|
variables.creation.failed = Falha ao adicionar a variável.
|
||||||
runs.no_workflows.documentation = Para mais informações sobre Forgejo Actions, veja <a target="_blank" rel="noopener noreferrer" href="%s">a documentação</a>.
|
|
||||||
runs.no_workflows.quick_start = Forgejo Actions é uma novidade para você? Veja <a target="_blank" rel="noopener noreferrer" href="%s">o guia rápido</a>.
|
|
||||||
runs.no_results = Nenhum resultado.
|
|
||||||
variables.description = As variáveis serão passadas para certas ações e não poderão ser lidas de outra forma.
|
|
||||||
|
|
||||||
|
|
||||||
[projects]
|
[projects]
|
||||||
|
@ -3719,9 +3658,6 @@ component_loading = Carregando %s...
|
||||||
component_loading_failed = Não foi possível carregar o(a) %s
|
component_loading_failed = Não foi possível carregar o(a) %s
|
||||||
component_loading_info = Pode demorar um pouco…
|
component_loading_info = Pode demorar um pouco…
|
||||||
contributors.what = contribuições
|
contributors.what = contribuições
|
||||||
code_frequency.what = frequência de código
|
|
||||||
recent_commits.what = commits recentes
|
|
||||||
component_failed_to_load = Ocorreu um erro inesperado.
|
|
||||||
|
|
||||||
|
|
||||||
[search]
|
[search]
|
||||||
|
@ -3745,17 +3681,3 @@ branch_kind = Pesquisar branches…
|
||||||
commit_kind = Pesquisar commits…
|
commit_kind = Pesquisar commits…
|
||||||
runner_kind = Pesquisar runners...
|
runner_kind = Pesquisar runners...
|
||||||
code_search_unavailable = A pesquisa de código não está disponível no momento. Entre em contato com o administrador do site.
|
code_search_unavailable = A pesquisa de código não está disponível no momento. Entre em contato com o administrador do site.
|
||||||
|
|
||||||
[munits.data]
|
|
||||||
b = B
|
|
||||||
kib = KiB
|
|
||||||
mib = MiB
|
|
||||||
gib = GiB
|
|
||||||
tib = TiB
|
|
||||||
pib = PiB
|
|
||||||
eib = EiB
|
|
||||||
|
|
||||||
[markup]
|
|
||||||
filepreview.line = Linha %[1]d em %[2]s
|
|
||||||
filepreview.lines = Linhas %[1]d a %[2]d em %[3]s
|
|
||||||
filepreview.truncated = Pré-visualização truncada
|
|
|
@ -162,7 +162,7 @@ copy_generic = Copiar para a área de transferência
|
||||||
[aria]
|
[aria]
|
||||||
navbar=Barra de navegação
|
navbar=Barra de navegação
|
||||||
footer=Rodapé
|
footer=Rodapé
|
||||||
footer.software=Sobre este software
|
footer.software=Sobre o Software
|
||||||
footer.links=Ligações
|
footer.links=Ligações
|
||||||
|
|
||||||
[heatmap]
|
[heatmap]
|
||||||
|
@ -279,18 +279,18 @@ offline_mode.description=Desabilitar redes de entrega de conteúdos de terceiros
|
||||||
disable_gravatar=Desabilitar o Gravatar
|
disable_gravatar=Desabilitar o Gravatar
|
||||||
disable_gravatar.description=Desabilitar o Gravatar e fontes de avatares de terceiros. Será usado um avatar padrão, a não ser que o utilizador carregue um avatar localmente.
|
disable_gravatar.description=Desabilitar o Gravatar e fontes de avatares de terceiros. Será usado um avatar padrão, a não ser que o utilizador carregue um avatar localmente.
|
||||||
federated_avatar_lookup=Habilitar avatares federados
|
federated_avatar_lookup=Habilitar avatares federados
|
||||||
federated_avatar_lookup.description=Pesquisar avatares usando o Libravatar.
|
federated_avatar_lookup.description=Habilitar pesquisa de avatares federada usando o Libravatar.
|
||||||
disable_registration=Desabilitar a auto-inscrição
|
disable_registration=Desabilitar a auto-inscrição
|
||||||
disable_registration.description=Apenas os administradores da instância poderão criar novas contas de utilizador. É altamente recomendado que o registo seja mantido desabilitado, a não ser que tencione hospedar uma instância pública para toda a gente e esteja disposto a lidar com grandes quantidades de contas falsas (spam).
|
disable_registration.description=Desabilitar a auto-inscrição do utilizador. Somente os administradores poderão criar novas contas de utilizador.
|
||||||
allow_only_external_registration.description=Os utilizadores apenas poderão criar novas contas usando serviços externos que tenham sido configurados.
|
allow_only_external_registration.description=Permitir a inscrição somente por meio de serviços externos
|
||||||
openid_signin=Habilitar início de sessão com OpenID
|
openid_signin=Habilitar início de sessão com OpenID
|
||||||
openid_signin.description=Habilitar o início de sessão do utilizador usando o OpenID.
|
openid_signin.description=Habilitar o início de sessão do utilizador usando o OpenID.
|
||||||
openid_signup=Habilitar a auto-inscrição com OpenID
|
openid_signup=Habilitar a auto-inscrição com OpenID
|
||||||
openid_signup.description=Permitir que os utilizadores criem contas com OpenID se as auto-inscrições estiverem habilitadas.
|
openid_signup.description=Habilitar a utilização do OpenID para fazer auto-inscrições.
|
||||||
enable_captcha=Habilitar CAPTCHA na inscrição
|
enable_captcha=Habilitar CAPTCHA na inscrição
|
||||||
enable_captcha.description=Exigir que os utilizadores passem um CAPTCHA para poderem criar uma conta.
|
enable_captcha.description=Exigir CAPTCHA na auto-inscrição de utilizadores.
|
||||||
require_sign_in_view=Exigir sessão iniciada para visualizar conteúdo da instância
|
require_sign_in_view=Exigir sessão iniciada para visualizar conteúdo da instância
|
||||||
require_sign_in_view.description=Limitar o acesso às páginas aos utilizadores com sessão iniciada. Os visitantes só poderão visualizar a página de autenticação.
|
require_sign_in_view.description=Limitar o acesso às páginas aos utilizadores com sessão iniciada. Os visitantes só poderão visualizar as páginas de início de sessão e de inscrição.
|
||||||
admin_setting.description=A criação de uma conta de administração é opcional. O primeiro utilizador inscrito tornar-se-á automaticamente num administrador.
|
admin_setting.description=A criação de uma conta de administração é opcional. O primeiro utilizador inscrito tornar-se-á automaticamente num administrador.
|
||||||
admin_title=Configurações da conta de administração
|
admin_title=Configurações da conta de administração
|
||||||
admin_name=Nome de utilizador do administrador
|
admin_name=Nome de utilizador do administrador
|
||||||
|
@ -311,9 +311,9 @@ save_config_failed=Falhou ao guardar a configuração: %v
|
||||||
invalid_admin_setting=A configuração da conta de administrador é inválida: %v
|
invalid_admin_setting=A configuração da conta de administrador é inválida: %v
|
||||||
invalid_log_root_path=A localização dos registos é inválida: %v
|
invalid_log_root_path=A localização dos registos é inválida: %v
|
||||||
default_keep_email_private=Esconder, por norma, os endereços de email
|
default_keep_email_private=Esconder, por norma, os endereços de email
|
||||||
default_keep_email_private.description=Esconder, por norma, os endereços de email de novos utilizadores, para que essa informação não seja divulgada imediatamente após o registo.
|
default_keep_email_private.description=Esconder, por norma, os endereços de email de novos utilizadores.
|
||||||
default_allow_create_organization=Permitir, por norma, a criação de organizações
|
default_allow_create_organization=Permitir, por norma, a criação de organizações
|
||||||
default_allow_create_organization.description=Permitir, por norma, que os novos utilizadores criem organizações. Quando esta opção está desabilitada, um administrador tem de dar permissão para utilizadores possam criar organizações.
|
default_allow_create_organization.description=Permitir, por norma, que os novos utilizadores criem organizações.
|
||||||
default_enable_timetracking=Habilitar, por norma, a contagem do tempo
|
default_enable_timetracking=Habilitar, por norma, a contagem do tempo
|
||||||
default_enable_timetracking.description=Habilitar, por norma, a contagem do tempo nos novos repositórios.
|
default_enable_timetracking.description=Habilitar, por norma, a contagem do tempo nos novos repositórios.
|
||||||
no_reply_address=Domínio dos emails ocultos
|
no_reply_address=Domínio dos emails ocultos
|
||||||
|
@ -328,9 +328,6 @@ config_location_hint = Estas opções de configuração serão gravadas em:
|
||||||
enable_update_checker_helper_forgejo = Irá verificar periodicamente a existência de novas versões do Forgejo analisando um registo TXT DNS em release.forgejo.org.
|
enable_update_checker_helper_forgejo = Irá verificar periodicamente a existência de novas versões do Forgejo analisando um registo TXT DNS em release.forgejo.org.
|
||||||
smtp_from_invalid = O endereço para "Enviar email como" é inválido
|
smtp_from_invalid = O endereço para "Enviar email como" é inválido
|
||||||
allow_dots_in_usernames = Permitir que os utilizadores usem pontos no nome de utilizador. Não tem efeito sobre as contas existentes.
|
allow_dots_in_usernames = Permitir que os utilizadores usem pontos no nome de utilizador. Não tem efeito sobre as contas existentes.
|
||||||
app_slogan = Lema da instância
|
|
||||||
app_slogan_helper = Escreva aqui o seu lema da instância. Deixe em branco para desabilitar.
|
|
||||||
allow_only_external_registration = Permitir registo apenas através de serviços externos
|
|
||||||
|
|
||||||
[home]
|
[home]
|
||||||
uname_holder=Nome de utilizador ou endereço de email
|
uname_holder=Nome de utilizador ou endereço de email
|
||||||
|
@ -1591,7 +1588,7 @@ issues.role.collaborator_helper=Este utilizador foi convidado a colaborar neste
|
||||||
issues.role.first_time_contributor=Contribuidor pela primeira vez
|
issues.role.first_time_contributor=Contribuidor pela primeira vez
|
||||||
issues.role.first_time_contributor_helper=Esta é a primeira contribuição deste utilizador para o repositório.
|
issues.role.first_time_contributor_helper=Esta é a primeira contribuição deste utilizador para o repositório.
|
||||||
issues.role.contributor=Contribuidor
|
issues.role.contributor=Contribuidor
|
||||||
issues.role.contributor_helper=Este utilizador cometeu anteriormente para este repositório.
|
issues.role.contributor_helper=Este utilizador cometeu anteriormente para o repositório.
|
||||||
issues.re_request_review=Voltar a solicitar revisão
|
issues.re_request_review=Voltar a solicitar revisão
|
||||||
issues.is_stale=Houve modificações neste pedido de integração posteriormente a esta revisão
|
issues.is_stale=Houve modificações neste pedido de integração posteriormente a esta revisão
|
||||||
issues.remove_request_review=Remover solicitação de revisão
|
issues.remove_request_review=Remover solicitação de revisão
|
||||||
|
@ -2492,7 +2489,7 @@ settings.lfs_locks_no_locks=Sem bloqueios
|
||||||
settings.lfs_lock_file_no_exist=O ficheiro bloqueado não existe no ramo principal
|
settings.lfs_lock_file_no_exist=O ficheiro bloqueado não existe no ramo principal
|
||||||
settings.lfs_force_unlock=Forçar desbloqueio
|
settings.lfs_force_unlock=Forçar desbloqueio
|
||||||
settings.lfs_pointers.found=Encontrado(s) %d ponteiro(s) de blob - %d associado(a), %d desassociado(a) (%d ausente do armazenamento)
|
settings.lfs_pointers.found=Encontrado(s) %d ponteiro(s) de blob - %d associado(a), %d desassociado(a) (%d ausente do armazenamento)
|
||||||
settings.lfs_pointers.sha=Hash do blob
|
settings.lfs_pointers.sha=SHA do blob
|
||||||
settings.lfs_pointers.oid=OID
|
settings.lfs_pointers.oid=OID
|
||||||
settings.lfs_pointers.inRepo=No repositório
|
settings.lfs_pointers.inRepo=No repositório
|
||||||
settings.lfs_pointers.exists=Existe no armazenamento
|
settings.lfs_pointers.exists=Existe no armazenamento
|
||||||
|
@ -2743,19 +2740,6 @@ wiki.no_search_results = Sem resultados
|
||||||
settings.transfer.button = Transferir propriedade
|
settings.transfer.button = Transferir propriedade
|
||||||
settings.transfer.modal.title = Transferir propriedade
|
settings.transfer.modal.title = Transferir propriedade
|
||||||
wiki.search = Pesquisar wiki
|
wiki.search = Pesquisar wiki
|
||||||
form.string_too_long = O texto fornecido é mais comprido do que %d caracteres.
|
|
||||||
settings.federation_settings = Configurações da federação
|
|
||||||
settings.federation_apapiurl = URL de federação deste repositório. Copie e cole nas configurações de federação de outro repositório como um URL de um repositório que está a ser seguido.
|
|
||||||
issues.edit.already_changed = Não foi possível guardar as modificações desta questão. O conteúdo parece ter sido modificado por outro utilizador. Refresque a página e tente editar novamente para evitar sobrescrever as modificações que fizeram
|
|
||||||
project = Planeamentos
|
|
||||||
pulls.edit.already_changed = Não foi possível guardar as modificações do pedido de integração. O conteúdo parece ter sido modificado por outro utilizador. Refresque a página e tente editar novamente para evitar sobrescrever as modificações que fizeram
|
|
||||||
subscribe.issue.guest.tooltip = Inicie sessão para subscrever esta questão.
|
|
||||||
subscribe.pull.guest.tooltip = Inicie sessão para subscrever este pedido de integração.
|
|
||||||
comments.edit.already_changed = Não foi possível guardar as modificações do comentário. O conteúdo parece ter sido modificado por outro utilizador. Refresque a página e tente editar novamente para evitar sobrescrever as modificações que fizeram
|
|
||||||
settings.federation_following_repos = URLs de repositórios que estão a ser seguidos. Separe-os com ";" sem espaços em branco.
|
|
||||||
settings.federation_not_enabled = A federação não está a habilitada na sua instância.
|
|
||||||
n_release_one = %s lançamento
|
|
||||||
n_release_few = %s lançamentos
|
|
||||||
|
|
||||||
[graphs]
|
[graphs]
|
||||||
component_loading=A carregar %s...
|
component_loading=A carregar %s...
|
||||||
|
@ -3434,7 +3418,6 @@ auths.tip.gitlab_new = Registe uma nova aplicação em https://gitlab.com/-/prof
|
||||||
config.open_with_editor_app_help = Os editores da opção "Abrir com" do menu da clonagem. Se for deixado em branco, será usado o valor predefinido. Expanda para ver o que está predefinido.
|
config.open_with_editor_app_help = Os editores da opção "Abrir com" do menu da clonagem. Se for deixado em branco, será usado o valor predefinido. Expanda para ver o que está predefinido.
|
||||||
config.allow_dots_in_usernames = Permitir que os utilizadores usem pontos no seu nome de utilizador. Não altera as contas existentes.
|
config.allow_dots_in_usernames = Permitir que os utilizadores usem pontos no seu nome de utilizador. Não altera as contas existentes.
|
||||||
auths.default_domain_name = Nome de domínio predefinido usado para o endereço de email
|
auths.default_domain_name = Nome de domínio predefinido usado para o endereço de email
|
||||||
config.app_slogan = Lema da instância
|
|
||||||
|
|
||||||
[action]
|
[action]
|
||||||
create_repo=criou o repositório <a href="%s">%s</a>
|
create_repo=criou o repositório <a href="%s">%s</a>
|
||||||
|
@ -3787,7 +3770,6 @@ runs.no_workflows.documentation = Para mais informação sobre o Forgejo Action,
|
||||||
runs.no_workflows.quick_start = Não sabe como começar com o Forgejo Action? Veja o <a target="_blank" rel="noopener noreferrer" href="%s">guia de iniciação rápida</a>.
|
runs.no_workflows.quick_start = Não sabe como começar com o Forgejo Action? Veja o <a target="_blank" rel="noopener noreferrer" href="%s">guia de iniciação rápida</a>.
|
||||||
runs.no_job_without_needs = A sequência de trabalho tem de conter pelo menos um trabalho sem dependências.
|
runs.no_job_without_needs = A sequência de trabalho tem de conter pelo menos um trabalho sem dependências.
|
||||||
runs.workflow = Sequência de trabalho
|
runs.workflow = Sequência de trabalho
|
||||||
runs.no_job = A sequência de trabalho tem de conter pelo menos um trabalho
|
|
||||||
|
|
||||||
[projects]
|
[projects]
|
||||||
type-1.display_name=Planeamento individual
|
type-1.display_name=Planeamento individual
|
||||||
|
|
|
@ -86,9 +86,9 @@ rerun=Перезапустить
|
||||||
rerun_all=Перезапустить все задания
|
rerun_all=Перезапустить все задания
|
||||||
save=Сохранить
|
save=Сохранить
|
||||||
add=Добавить
|
add=Добавить
|
||||||
add_all=Включить все
|
add_all=Добавить все
|
||||||
remove=Исключить
|
remove=Удалить
|
||||||
remove_all=Исключить все
|
remove_all=Удалить все
|
||||||
remove_label_str=Удалить элемент «%s»
|
remove_label_str=Удалить элемент «%s»
|
||||||
edit=Изменить
|
edit=Изменить
|
||||||
|
|
||||||
|
@ -140,7 +140,7 @@ confirm_delete_selected=Вы точно хотите удалить все вы
|
||||||
name=Название
|
name=Название
|
||||||
value=Значение
|
value=Значение
|
||||||
tracked_time_summary = Сводка отслеженного времени на основе фильтров списка задач
|
tracked_time_summary = Сводка отслеженного времени на основе фильтров списка задач
|
||||||
view = Открыть
|
view = Просмотр
|
||||||
confirm_delete_artifact = Вы точно хотите удалить артефакт «%s»?
|
confirm_delete_artifact = Вы точно хотите удалить артефакт «%s»?
|
||||||
toggle_menu = Показать/скрыть меню
|
toggle_menu = Показать/скрыть меню
|
||||||
filter.not_archived = Не архивированные
|
filter.not_archived = Не архивированные
|
||||||
|
@ -245,7 +245,7 @@ err_admin_name_is_invalid=Неверное имя администратора
|
||||||
|
|
||||||
general_title=Основные настройки
|
general_title=Основные настройки
|
||||||
app_name=Название сервера
|
app_name=Название сервера
|
||||||
app_name_helper=Укажите название вашего сервера (Git-хостинга). Оно будет видно на всех страницах.
|
app_name_helper=Здесь вы можете ввести название своей компании.
|
||||||
repo_path=Путь до каталога репозиториев
|
repo_path=Путь до каталога репозиториев
|
||||||
repo_path_helper=Все удалённые Git репозитории будут сохранены в этом каталоге.
|
repo_path_helper=Все удалённые Git репозитории будут сохранены в этом каталоге.
|
||||||
lfs_path=Путь до корневого каталога Git LFS
|
lfs_path=Путь до корневого каталога Git LFS
|
||||||
|
@ -275,22 +275,22 @@ register_confirm=Требовать подтверждение по эл. поч
|
||||||
mail_notify=Уведомления по эл. почте
|
mail_notify=Уведомления по эл. почте
|
||||||
server_service_title=Настройки сервера и внешних служб
|
server_service_title=Настройки сервера и внешних служб
|
||||||
offline_mode=Локальный режим
|
offline_mode=Локальный режим
|
||||||
offline_mode.description=Отключить сторонние службы доставки контента и передавать все ресурсы из их локальных копий.
|
offline_mode.description=Отключить сторонние сети доставки контента и передавать все ресурсы из их локальных копий.
|
||||||
disable_gravatar=Отключить Gravatar
|
disable_gravatar=Отключить Gravatar
|
||||||
disable_gravatar.description=Отключить Gravatar и прочие сторонние источники аватаров. Если у пользователя нет локально установленного аватара, будет использован аватар по умолчанию.
|
disable_gravatar.description=Отключить Gravatar и сторонние источники аватаров. Если у пользователя нет локально установленного аватара, будет использоваться аватар по умолчанию.
|
||||||
federated_avatar_lookup=Федерированные аватары
|
federated_avatar_lookup=Федерированные аватары
|
||||||
federated_avatar_lookup.description=Искать аватары используя Libravatar.
|
federated_avatar_lookup.description=Искать аватары используя Libravatar.
|
||||||
disable_registration=Отключить самостоятельную регистрацию
|
disable_registration=Отключить самостоятельную регистрацию
|
||||||
disable_registration.description=Только администраторы смогут создавать новые учётные записи пользователей. Отключение саморегистрации крайне рекомендовано, разве что если вы не собираетесь создать публичный сервер для всех и готовы бороться с большим количеством спама.
|
disable_registration.description=Отключить самостоятельную регистрацию. Только администраторы смогут создавать новые учётные записи пользователей.
|
||||||
allow_only_external_registration.description=Пользователи смогут создавать новые учётные записи только через добавленные сторонние службы.
|
allow_only_external_registration.description=Пользователи смогут создавать новые учётные записи только через добавленные сторонние службы.
|
||||||
openid_signin=Вход через OpenID
|
openid_signin=Включить вход через OpenID
|
||||||
openid_signin.description=Разрешить вход в учётные записи через OpenID.
|
openid_signin.description=Включить вход через OpenID.
|
||||||
openid_signup=Саморегистрация через OpenID
|
openid_signup=Включить саморегистрацию через OpenID
|
||||||
openid_signup.description=Разрешить пользователям регистрироваться через OpenID, если включена саморегистрация.
|
openid_signup.description=Включить регистрацию пользователей через OpenID.
|
||||||
enable_captcha=CAPTCHA для регистрации
|
enable_captcha=Включить CAPTCHA при регистрации
|
||||||
enable_captcha.description=Требовать прохождение CAPTCHA для регистрации учётных записей.
|
enable_captcha.description=Запрашивать капчу при регистрации пользователя.
|
||||||
require_sign_in_view=Требовать авторизацию для просмотра содержимого
|
require_sign_in_view=Требовать авторизацию для просмотра содержимого
|
||||||
require_sign_in_view.description=Требовать наличие учётной записи для просмотра содержимого сервера. Посетители увидят лишь страницы входа и регистрации.
|
require_sign_in_view.description=Ограничить доступ к странице только вошедшими пользователями. Посетители увидят лишь страницы входа и регистрации.
|
||||||
admin_setting.description=Создание учётной записи администратора необязательно. Первый зарегистрированный пользователь автоматически становится администратором.
|
admin_setting.description=Создание учётной записи администратора необязательно. Первый зарегистрированный пользователь автоматически становится администратором.
|
||||||
admin_title=Учётная запись администратора
|
admin_title=Учётная запись администратора
|
||||||
admin_name=Логин администратора
|
admin_name=Логин администратора
|
||||||
|
@ -311,11 +311,11 @@ save_config_failed=Не удалось сохранить конфигураци
|
||||||
invalid_admin_setting=Некорректные настройки учётной записи администратора: %v
|
invalid_admin_setting=Некорректные настройки учётной записи администратора: %v
|
||||||
invalid_log_root_path=Недопустимый путь для логов: %v
|
invalid_log_root_path=Недопустимый путь для логов: %v
|
||||||
default_keep_email_private=Скрывать адреса эл. почты по умолчанию
|
default_keep_email_private=Скрывать адреса эл. почты по умолчанию
|
||||||
default_keep_email_private.description=Скрывать адреса эл. почты новых учётных записей по умолчанию, чтобы они не «утекали» сразу после регистрации.
|
default_keep_email_private.description=Скрывать адреса эл. почты новых учётных записей по умолчанию.
|
||||||
default_allow_create_organization=Разрешить создание организаций по умолчанию
|
default_allow_create_organization=Разрешить создание организаций по умолчанию
|
||||||
default_allow_create_organization.description=Разрешать создание организаций новым пользователям по умолчанию. Если эта опция выключена, администратор будет должен выдавать такое разрешение новым пользователям по отдельности.
|
default_allow_create_organization.description=Разрешить новым учётным записям пользователей создавать организации по умолчанию.
|
||||||
default_enable_timetracking=Включить отслеживание времени по умолчанию
|
default_enable_timetracking=Включить отслеживание времени по умолчанию
|
||||||
default_enable_timetracking.description=Использование отслеживания времени будет разрешено в новых репозиториях по умолчанию.
|
default_enable_timetracking.description=Включить отслеживание времени для новых репозиториев по умолчанию.
|
||||||
no_reply_address=Домен скрытых адресов почты
|
no_reply_address=Домен скрытых адресов почты
|
||||||
no_reply_address_helper=Доменное имя для пользователей со скрытым адресом эл. почты. Например, пользователь «joe» будет зарегистрирован в Git как «joe@noreply.example.org», если скрытый домен эл. почты задан как «noreply.example.org».
|
no_reply_address_helper=Доменное имя для пользователей со скрытым адресом эл. почты. Например, пользователь «joe» будет зарегистрирован в Git как «joe@noreply.example.org», если скрытый домен эл. почты задан как «noreply.example.org».
|
||||||
password_algorithm=Алгоритм хеширования паролей
|
password_algorithm=Алгоритм хеширования паролей
|
||||||
|
@ -330,7 +330,7 @@ smtp_from_invalid = Адрес для отправки писем некорре
|
||||||
config_location_hint = Эти настройки конфигурации будут сохранены в:
|
config_location_hint = Эти настройки конфигурации будут сохранены в:
|
||||||
allow_only_external_registration = Разрешить регистрацию только через сторонние службы
|
allow_only_external_registration = Разрешить регистрацию только через сторонние службы
|
||||||
app_slogan = Лозунг сервера
|
app_slogan = Лозунг сервера
|
||||||
app_slogan_helper = Укажите лозунг вашего сервера, либо оставьте пустым для отключения.
|
app_slogan_helper = Укажите лозунг вашего Git-хостинга, либо оставьте пустым для отключения.
|
||||||
|
|
||||||
[home]
|
[home]
|
||||||
uname_holder=Логин или адрес эл. почты
|
uname_holder=Логин или адрес эл. почты
|
||||||
|
@ -669,22 +669,14 @@ form.name_pattern_not_allowed=Шаблон «%s» не допускается в
|
||||||
form.name_chars_not_allowed=Имя пользователя «%s» содержит недопустимые символы.
|
form.name_chars_not_allowed=Имя пользователя «%s» содержит недопустимые символы.
|
||||||
block = Заблокировать
|
block = Заблокировать
|
||||||
unblock = Разблокировать
|
unblock = Разблокировать
|
||||||
block_user.detail_2 = Этот пользователь не сможет взаимодействовать с вашими репозиториями, а также с задачами и комментариями, которые вы создали.
|
block_user.detail_2 = Этот пользователь не сможет взаимодействовать с вашими репозиториями, задачами и комментариями.
|
||||||
block_user.detail = Учтите, что блокировка этого пользователя приведёт ко следующему:
|
block_user.detail = Учтите, что блокировка этого пользователя повлияет на следующее:
|
||||||
follow_blocked_user = Вы не можете подписаться на этого пользователя, т.к. вы его заблокировали, либо он вас.
|
follow_blocked_user = Вы не можете подписаться на этого пользователя, т.к. вы его заблокировали, либо он вас.
|
||||||
block_user = Заблокировать пользователя
|
block_user = Заблокировать пользователя
|
||||||
block_user.detail_1 = Вы будете отписаны друг от друга и не сможете подписаться друг на друга.
|
block_user.detail_1 = Вы будете отписаны от этого пользователя.
|
||||||
block_user.detail_3 = Вы не сможете добавлять друг друга в качестве соучастников репозиториев.
|
block_user.detail_3 = Вы не сможете добавлять друг друга в качестве соучастников репозиториев.
|
||||||
followers_one = %d подписчик
|
followers_one = %d подписчик
|
||||||
following_one = %d подписка
|
following_one = %d подписка
|
||||||
followers.title.few = Подписчики
|
|
||||||
following.title.one = Подписка
|
|
||||||
followers.title.one = Подписчик
|
|
||||||
following.title.few = Подписки
|
|
||||||
public_activity.visibility_hint.self_public = Ваша активность видна всем, кроме действий в приватных местах. <a href="%s">Изменить</a>.
|
|
||||||
public_activity.visibility_hint.self_private = Ваша активность видна только вам и администраторам сервера. <a href="%s">Изменить</a>.
|
|
||||||
public_activity.visibility_hint.admin_private = Эта активность доступна вам, потому что вы администратор. Этот пользователь желает, чтобы она осталась частной.
|
|
||||||
public_activity.visibility_hint.admin_public = Эта активность доступна всем, но вы, как администратор, также видите действия в приватных местах.
|
|
||||||
|
|
||||||
[settings]
|
[settings]
|
||||||
profile=Профиль
|
profile=Профиль
|
||||||
|
@ -1321,7 +1313,7 @@ editor.filename_is_a_directory=Имя файла «%s» уже использу
|
||||||
editor.file_editing_no_longer_exists=Редактируемый файл «%s» больше не существует в этом репозитории.
|
editor.file_editing_no_longer_exists=Редактируемый файл «%s» больше не существует в этом репозитории.
|
||||||
editor.file_deleting_no_longer_exists=Удаляемый файл «%s» больше не существует в этом репозитории.
|
editor.file_deleting_no_longer_exists=Удаляемый файл «%s» больше не существует в этом репозитории.
|
||||||
editor.file_changed_while_editing=Содержимое файла изменилось с момента начала редактирования. <a target="_blank" rel="noopener noreferrer" href="%s">Нажмите здесь</a>, чтобы увидеть, что было изменено, или <strong>Зафиксировать изменения снова</strong>, чтобы заменить их.
|
editor.file_changed_while_editing=Содержимое файла изменилось с момента начала редактирования. <a target="_blank" rel="noopener noreferrer" href="%s">Нажмите здесь</a>, чтобы увидеть, что было изменено, или <strong>Зафиксировать изменения снова</strong>, чтобы заменить их.
|
||||||
editor.file_already_exists=Файл «%s» уже существует в этом репозитории.
|
editor.file_already_exists=Файл с именем «%s» уже существует в репозитории.
|
||||||
editor.commit_empty_file_header=Закоммитить пустой файл
|
editor.commit_empty_file_header=Закоммитить пустой файл
|
||||||
editor.commit_empty_file_text=Файл, который вы собираетесь зафиксировать, пуст. Продолжить?
|
editor.commit_empty_file_text=Файл, который вы собираетесь зафиксировать, пуст. Продолжить?
|
||||||
editor.no_changes_to_show=Нет изменений.
|
editor.no_changes_to_show=Нет изменений.
|
||||||
|
@ -1855,7 +1847,7 @@ pulls.status_checks_warning=Некоторые проверки имеют пр
|
||||||
pulls.status_checks_failure=Некоторые проверки провалились
|
pulls.status_checks_failure=Некоторые проверки провалились
|
||||||
pulls.status_checks_error=Некоторые проверки сообщили об ошибках
|
pulls.status_checks_error=Некоторые проверки сообщили об ошибках
|
||||||
pulls.status_checks_requested=Требуется
|
pulls.status_checks_requested=Требуется
|
||||||
pulls.status_checks_details=Подробности
|
pulls.status_checks_details=Информация
|
||||||
pulls.status_checks_hide_all=Скрыть все проверки
|
pulls.status_checks_hide_all=Скрыть все проверки
|
||||||
pulls.status_checks_show_all=Показать все проверки
|
pulls.status_checks_show_all=Показать все проверки
|
||||||
pulls.update_branch=Обновить ветку слиянием
|
pulls.update_branch=Обновить ветку слиянием
|
||||||
|
@ -2220,7 +2212,7 @@ settings.githook_edit_desc=Если хук не активен, будет по
|
||||||
settings.githook_name=Название хукa
|
settings.githook_name=Название хукa
|
||||||
settings.githook_content=Содержимое хука
|
settings.githook_content=Содержимое хука
|
||||||
settings.update_githook=Обновить хук
|
settings.update_githook=Обновить хук
|
||||||
settings.add_webhook_desc=Forgejo будет оправлять <code>POST</code>-запросы на указанный URL адрес с информацией о происходящих событиях. Подробности на странице <a target="_blank" rel="noopener noreferrer" href="%s">инструкции по использованию веб-хуков</a>.
|
settings.add_webhook_desc=Forgejo будет оправлять <code>POST</code> запросы на указанный URL адрес, с информацией о происходящих событиях. Подробности на странице <a target="_blank" rel="noopener noreferrer" href="%s">инструкции по использованию веб-хуков</a>.
|
||||||
settings.payload_url=URL обработчика
|
settings.payload_url=URL обработчика
|
||||||
settings.http_method=HTTP-метод
|
settings.http_method=HTTP-метод
|
||||||
settings.content_type=Тип содержимого POST
|
settings.content_type=Тип содержимого POST
|
||||||
|
@ -2260,7 +2252,7 @@ settings.event_issue_milestone=Добавление задач в этапы
|
||||||
settings.event_issue_milestone_desc=Этап или этап выполнения задания.
|
settings.event_issue_milestone_desc=Этап или этап выполнения задания.
|
||||||
settings.event_issue_comment=Комментарии в задаче
|
settings.event_issue_comment=Комментарии в задаче
|
||||||
settings.event_issue_comment_desc=Комментарий создан, изменён или удалён.
|
settings.event_issue_comment_desc=Комментарий создан, изменён или удалён.
|
||||||
settings.event_header_pull_request=События запросов слияний
|
settings.event_header_pull_request=События запроса на слияние
|
||||||
settings.event_pull_request=Запрос на слияние
|
settings.event_pull_request=Запрос на слияние
|
||||||
settings.event_pull_request_desc=Запрос на слияние открыт, закрыт, переоткрыт или отредактирован.
|
settings.event_pull_request_desc=Запрос на слияние открыт, закрыт, переоткрыт или отредактирован.
|
||||||
settings.event_pull_request_assign=Запроса на слияние назначен
|
settings.event_pull_request_assign=Запроса на слияние назначен
|
||||||
|
@ -2765,8 +2757,6 @@ settings.federation_apapiurl = Федеративная ссылка на это
|
||||||
settings.federation_following_repos = Ссылки следуемых репозиториев. Разделены с «;», без пробелов.
|
settings.federation_following_repos = Ссылки следуемых репозиториев. Разделены с «;», без пробелов.
|
||||||
n_release_one = %s выпуск
|
n_release_one = %s выпуск
|
||||||
n_release_few = %s выпусков
|
n_release_few = %s выпусков
|
||||||
subscribe.issue.guest.tooltip = Войдите, чтобы подписаться на эту задачу.
|
|
||||||
subscribe.pull.guest.tooltip = Войдите, чтобы подписаться на это слияние.
|
|
||||||
|
|
||||||
[graphs]
|
[graphs]
|
||||||
|
|
||||||
|
@ -2842,7 +2832,7 @@ members.leave.detail=Покинуть %s?
|
||||||
members.invite_desc=Добавить нового участника в %s:
|
members.invite_desc=Добавить нового участника в %s:
|
||||||
members.invite_now=Пригласить
|
members.invite_now=Пригласить
|
||||||
|
|
||||||
teams.join=Присоединиться
|
teams.join=Объединить
|
||||||
teams.leave=Выйти
|
teams.leave=Выйти
|
||||||
teams.leave.detail=Покинуть %s?
|
teams.leave.detail=Покинуть %s?
|
||||||
teams.can_create_org_repo=Создать репозитории
|
teams.can_create_org_repo=Создать репозитории
|
||||||
|
@ -3271,7 +3261,7 @@ config.register_email_confirm=Требовать подтверждение по
|
||||||
config.disable_register=Саморегистрация отключена
|
config.disable_register=Саморегистрация отключена
|
||||||
config.allow_only_internal_registration=Разрешить регистрацию только напрямую через Forgejo
|
config.allow_only_internal_registration=Разрешить регистрацию только напрямую через Forgejo
|
||||||
config.allow_only_external_registration=Регистрация только через сторонние службы
|
config.allow_only_external_registration=Регистрация только через сторонние службы
|
||||||
config.enable_openid_signup=Саморегистрация через OpenID
|
config.enable_openid_signup=Cаморегистрация через OpenID
|
||||||
config.enable_openid_signin=Вход через OpenID
|
config.enable_openid_signin=Вход через OpenID
|
||||||
config.show_registration_button=Кнопка регистрации
|
config.show_registration_button=Кнопка регистрации
|
||||||
config.require_sign_in_view=Для просмотра необходима авторизация
|
config.require_sign_in_view=Для просмотра необходима авторизация
|
||||||
|
@ -3557,7 +3547,7 @@ about=Об этом пакете
|
||||||
requirements=Требования
|
requirements=Требования
|
||||||
dependencies=Зависимости
|
dependencies=Зависимости
|
||||||
keywords=Ключевые слова
|
keywords=Ключевые слова
|
||||||
details=Сведения
|
details=Подробнее
|
||||||
details.author=Автор
|
details.author=Автор
|
||||||
details.project_site=Сайт проекта
|
details.project_site=Сайт проекта
|
||||||
details.repository_site=Сайт репозитория
|
details.repository_site=Сайт репозитория
|
||||||
|
@ -3851,10 +3841,6 @@ match_tooltip = Включать только результаты, точно
|
||||||
code_search_unavailable = Поиск по коду сейчас недоступен. Уточните подробности у администратора.
|
code_search_unavailable = Поиск по коду сейчас недоступен. Уточните подробности у администратора.
|
||||||
runner_kind = Поиск исполнителей...
|
runner_kind = Поиск исполнителей...
|
||||||
code_search_by_git_grep = Эти результаты получены через «git grep». Результатов может быть больше, если администратор сервера включит индексатор кода.
|
code_search_by_git_grep = Эти результаты получены через «git grep». Результатов может быть больше, если администратор сервера включит индексатор кода.
|
||||||
exact = Точный
|
|
||||||
exact_tooltip = Включать только результаты, точно соответствующие запросу
|
|
||||||
issue_kind = Поиск задач...
|
|
||||||
pull_kind = Поиск слияний...
|
|
||||||
|
|
||||||
|
|
||||||
[markup]
|
[markup]
|
||||||
|
|
|
@ -20,7 +20,7 @@ notifications=通知
|
||||||
active_stopwatch=活动时间跟踪器
|
active_stopwatch=活动时间跟踪器
|
||||||
tracked_time_summary=基于问题列表过滤器的跟踪时间概要
|
tracked_time_summary=基于问题列表过滤器的跟踪时间概要
|
||||||
create_new=创建…
|
create_new=创建…
|
||||||
user_profile_and_more=个人信息和设置…
|
user_profile_and_more=个人信息和配置
|
||||||
signed_in_as=已登录用户
|
signed_in_as=已登录用户
|
||||||
enable_javascript=此网站需要 JavaScript。
|
enable_javascript=此网站需要 JavaScript。
|
||||||
toc=目录
|
toc=目录
|
||||||
|
@ -245,7 +245,7 @@ err_admin_name_is_invalid=管理员用户名无效
|
||||||
|
|
||||||
general_title=一般设置
|
general_title=一般设置
|
||||||
app_name=站点名称
|
app_name=站点名称
|
||||||
app_name_helper=在此处输入您的实例名称。它将显示在所有页面上。
|
app_name_helper=您可以在此输入您公司的名称。
|
||||||
repo_path=仓库根目录
|
repo_path=仓库根目录
|
||||||
repo_path_helper=所有远程 Git 仓库将保存到此目录。
|
repo_path_helper=所有远程 Git 仓库将保存到此目录。
|
||||||
lfs_path=LFS 根目录
|
lfs_path=LFS 根目录
|
||||||
|
@ -275,20 +275,20 @@ register_confirm=需要发电子邮件确认注册
|
||||||
mail_notify=启用邮件通知提醒
|
mail_notify=启用邮件通知提醒
|
||||||
server_service_title=服务器和第三方服务设置
|
server_service_title=服务器和第三方服务设置
|
||||||
offline_mode=启用本地模式
|
offline_mode=启用本地模式
|
||||||
offline_mode.description=禁用第三方 CDN 并在本地提供所有资源。
|
offline_mode.description=禁用第三方 CDN 并在本地服务所有资源。
|
||||||
disable_gravatar=禁用 Gravatar 头像
|
disable_gravatar=禁用 Gravatar 头像
|
||||||
disable_gravatar.description=禁用 Gravatar 和第三方头像源。除非用户在实例上传头像, 否则将使用默认的头像。
|
disable_gravatar.description=禁用 Gravatar 和第三方头像源。除非用户在本地上传头像, 否则将使用默认的头像。
|
||||||
federated_avatar_lookup=启用 Federated 头像
|
federated_avatar_lookup=启用 Federated 头像
|
||||||
federated_avatar_lookup.description=使用 Libravatar 查找头像。
|
federated_avatar_lookup.description=启用 Federated Avatars 查找以使用开源的 Libravatar 服务。
|
||||||
disable_registration=禁止用户自助注册
|
disable_registration=禁止用户自助注册
|
||||||
disable_registration.description=只有实例管理员才能创建新的用户帐户。强烈建议保持注册禁用,除非您打算为所有人托管一个公共实例并准备好处理大量垃圾帐户。
|
disable_registration.description=禁用用户自助注册。只有管理员才能创建新的用户帐户。
|
||||||
allow_only_external_registration.description=仅允许使用已配置的外部服务来创建新帐户。
|
allow_only_external_registration.description=仅允许通过外部服务注册
|
||||||
openid_signin=启用 OpenID 登录
|
openid_signin=启用 OpenID 登录
|
||||||
openid_signin.description=允许用户通过 OpenID 登录。
|
openid_signin.description=启用通过 OpenID 登录
|
||||||
openid_signup=启用 OpenID 自助注册
|
openid_signup=启用 OpenID 自助注册
|
||||||
openid_signup.description=如果启用了自助注册,则允许用户通过 OpenID 创建帐户。
|
openid_signup.description=启用基于 OpenID 的用户自助注册。
|
||||||
enable_captcha=启用注册验证码
|
enable_captcha=启用注册验证码
|
||||||
enable_captcha.description=要求用户通过 CAPTCHA 验证才能创建帐户。
|
enable_captcha.description=要求在用户注册时输入预验证码
|
||||||
require_sign_in_view=启用页面访问限制
|
require_sign_in_view=启用页面访问限制
|
||||||
require_sign_in_view.description=仅允许已登录用户访问页面。访客只能看到注册和登录页。
|
require_sign_in_view.description=仅允许已登录用户访问页面。访客只能看到注册和登录页。
|
||||||
admin_setting.description=创建管理员帐户是可选的。第一个注册用户将自动成为管理员。
|
admin_setting.description=创建管理员帐户是可选的。第一个注册用户将自动成为管理员。
|
||||||
|
@ -311,11 +311,11 @@ save_config_failed=应用配置保存失败:%v
|
||||||
invalid_admin_setting=管理员帐户设置无效: %v
|
invalid_admin_setting=管理员帐户设置无效: %v
|
||||||
invalid_log_root_path=日志路径无效: %v
|
invalid_log_root_path=日志路径无效: %v
|
||||||
default_keep_email_private=默认情况下隐藏电子邮件地址
|
default_keep_email_private=默认情况下隐藏电子邮件地址
|
||||||
default_keep_email_private.description=默认为新用户启用电子邮件地址隐藏,防止这些信息在注册后立即泄露。
|
default_keep_email_private.description=默认情况下, 隐藏新用户帐户的电子邮件地址。
|
||||||
default_allow_create_organization=默认情况下允许创建组织
|
default_allow_create_organization=默认情况下允许创建组织
|
||||||
default_allow_create_organization.description=默认允许新用户创建组织。禁用此选项时,管理员必须向新用户授予创建组织的权限。
|
default_allow_create_organization.description=默认情况下, 允许新用户帐户创建组织。
|
||||||
default_enable_timetracking=默认情况下启用时间跟踪
|
default_enable_timetracking=默认情况下启用时间跟踪
|
||||||
default_enable_timetracking.description=默认允许新存储库使用时间跟踪功能。
|
default_enable_timetracking.description=默认情况下启用新仓库的时间跟踪。
|
||||||
no_reply_address=隐藏电子邮件
|
no_reply_address=隐藏电子邮件
|
||||||
no_reply_address_helper=用于设置隐藏电子邮件地址的用户使用的电子邮件域名。例如,如果用于隐藏电子邮件地址的域名设为“noreply.example.org”,则用户名 “joe” 在 Git 中将以 “joe@noreply.example.org” 表示。
|
no_reply_address_helper=用于设置隐藏电子邮件地址的用户使用的电子邮件域名。例如,如果用于隐藏电子邮件地址的域名设为“noreply.example.org”,则用户名 “joe” 在 Git 中将以 “joe@noreply.example.org” 表示。
|
||||||
password_algorithm=密码哈希算法
|
password_algorithm=密码哈希算法
|
||||||
|
@ -329,11 +329,9 @@ enable_update_checker_helper_forgejo = 通过检查 release.forgejo.org 上的 D
|
||||||
smtp_from_invalid = 电子邮件发件人地址无效
|
smtp_from_invalid = 电子邮件发件人地址无效
|
||||||
config_location_hint = 这些配置项将被保存在:
|
config_location_hint = 这些配置项将被保存在:
|
||||||
allow_only_external_registration = 仅允许通过外部服务注册
|
allow_only_external_registration = 仅允许通过外部服务注册
|
||||||
app_slogan = 实例标语
|
|
||||||
app_slogan_helper = 在此处输入您的实例标语。留空则禁用。
|
|
||||||
|
|
||||||
[home]
|
[home]
|
||||||
uname_holder=用户名或电子邮箱
|
uname_holder=用户名或邮箱
|
||||||
password_holder=密码
|
password_holder=密码
|
||||||
switch_dashboard_context=切换控制面板用户
|
switch_dashboard_context=切换控制面板用户
|
||||||
my_repos=仓库列表
|
my_repos=仓库列表
|
||||||
|
@ -410,7 +408,7 @@ resent_limit_prompt=您请求发送激活邮件过于频繁,请等待 3 分钟
|
||||||
has_unconfirmed_mail=%s 您好,系统检测到您有一封发送至 <b>%s</b> 但未被确认的邮件。如果您未收到激活邮件,或需要重新发送,请单击下方的按钮。
|
has_unconfirmed_mail=%s 您好,系统检测到您有一封发送至 <b>%s</b> 但未被确认的邮件。如果您未收到激活邮件,或需要重新发送,请单击下方的按钮。
|
||||||
resend_mail=单击此处重新发送确认邮件
|
resend_mail=单击此处重新发送确认邮件
|
||||||
email_not_associate=您输入的邮箱地址未被关联到任何帐号!
|
email_not_associate=您输入的邮箱地址未被关联到任何帐号!
|
||||||
send_reset_mail=发送恢复邮件
|
send_reset_mail=发送账户恢复邮件
|
||||||
reset_password=账户恢复
|
reset_password=账户恢复
|
||||||
invalid_code=此确认密钥无效或已过期。
|
invalid_code=此确认密钥无效或已过期。
|
||||||
invalid_code_forgot_password=你的确认码无效或者已过期,点击 <a href="%s">这里</a> 开始新的会话。
|
invalid_code_forgot_password=你的确认码无效或者已过期,点击 <a href="%s">这里</a> 开始新的会话。
|
||||||
|
@ -427,8 +425,8 @@ twofa_passcode_incorrect=你的验证码不正确。如果你丢失了你的设
|
||||||
twofa_scratch_token_incorrect=你的验证口令不正确。
|
twofa_scratch_token_incorrect=你的验证口令不正确。
|
||||||
login_userpass=登录
|
login_userpass=登录
|
||||||
tab_openid=OpenID
|
tab_openid=OpenID
|
||||||
oauth_signup_tab=注册新帐号
|
oauth_signup_tab=注册帐号
|
||||||
oauth_signup_title=完成新帐户创建
|
oauth_signup_title=完成新帐户
|
||||||
oauth_signup_submit=完成账号
|
oauth_signup_submit=完成账号
|
||||||
oauth_signin_tab=绑定到现有帐号
|
oauth_signin_tab=绑定到现有帐号
|
||||||
oauth_signin_title=登录以授权绑定帐户
|
oauth_signin_title=登录以授权绑定帐户
|
||||||
|
@ -687,13 +685,13 @@ password=修改密码
|
||||||
security=安全
|
security=安全
|
||||||
avatar=头像设置
|
avatar=头像设置
|
||||||
ssh_gpg_keys=SSH / GPG 密钥
|
ssh_gpg_keys=SSH / GPG 密钥
|
||||||
social=社交帐号
|
social=社交帐号绑定
|
||||||
applications=应用
|
applications=应用
|
||||||
orgs=组织
|
orgs=管理组织
|
||||||
repos=仓库列表
|
repos=仓库列表
|
||||||
delete=删除帐户
|
delete=删除帐户
|
||||||
twofa=两步验证
|
twofa=两步验证
|
||||||
account_link=已绑定的帐户
|
account_link=已绑定帐户
|
||||||
organization=组织
|
organization=组织
|
||||||
uid=UID
|
uid=UID
|
||||||
webauthn=安全密钥
|
webauthn=安全密钥
|
||||||
|
@ -763,14 +761,14 @@ password_change_disabled=非本地帐户不能通过 Forgejo 的 web 界面更
|
||||||
|
|
||||||
emails=邮箱地址
|
emails=邮箱地址
|
||||||
manage_emails=管理邮箱地址
|
manage_emails=管理邮箱地址
|
||||||
manage_themes=默认主题
|
manage_themes=选择默认主题
|
||||||
manage_openid=OpenID 地址
|
manage_openid=管理 OpenID 地址
|
||||||
email_desc=您的主要电子邮件地址将用于通知、密码恢复,基于网页界面的Git操作(只要它不是设置为隐藏的)。
|
email_desc=您的主要电子邮件地址将用于通知、密码恢复,基于网页界面的Git操作(只要它不是设置为隐藏的)。
|
||||||
theme_desc=这将是您在整个网站上的默认主题。
|
theme_desc=这将是您在整个网站上的默认主题。
|
||||||
primary=主要
|
primary=主要
|
||||||
activated=已激活
|
activated=已激活
|
||||||
requires_activation=需要激活
|
requires_activation=需要激活
|
||||||
primary_email=设为主要
|
primary_email=设为主要邮件地址
|
||||||
activate_email=发送激活邮件
|
activate_email=发送激活邮件
|
||||||
activations_pending=等待激活
|
activations_pending=等待激活
|
||||||
can_not_add_email_activations_pending=有一个待处理的激活请求,请稍等几分钟后再尝试添加新的电子邮件地址。
|
can_not_add_email_activations_pending=有一个待处理的激活请求,请稍等几分钟后再尝试添加新的电子邮件地址。
|
||||||
|
@ -867,7 +865,7 @@ token_state_desc=7 天内使用过该密钥
|
||||||
principal_state_desc=7 天内使用过该规则
|
principal_state_desc=7 天内使用过该规则
|
||||||
show_openid=在个人信息上显示
|
show_openid=在个人信息上显示
|
||||||
hide_openid=在个人信息上隐藏
|
hide_openid=在个人信息上隐藏
|
||||||
ssh_disabled=SSH 已禁用
|
ssh_disabled=SSH 被禁用
|
||||||
ssh_signonly=SSH 目前已禁用,因此这些密钥仅用于提交签名验证。
|
ssh_signonly=SSH 目前已禁用,因此这些密钥仅用于提交签名验证。
|
||||||
ssh_externally_managed=此 SSH 密钥是由外部管理的
|
ssh_externally_managed=此 SSH 密钥是由外部管理的
|
||||||
manage_social=管理关联社交帐户
|
manage_social=管理关联社交帐户
|
||||||
|
@ -875,7 +873,7 @@ social_desc=这些社交账户可以用来登录您的账户。确保您认识
|
||||||
unbind=取消链接
|
unbind=取消链接
|
||||||
unbind_success=社交账户已成功移除。
|
unbind_success=社交账户已成功移除。
|
||||||
|
|
||||||
manage_access_token=访问令牌
|
manage_access_token=管理访问令牌
|
||||||
generate_new_token=生成新的令牌
|
generate_new_token=生成新的令牌
|
||||||
tokens_desc=这些令牌拥有通过 Forgejo API 对您的帐户的访问权限。
|
tokens_desc=这些令牌拥有通过 Forgejo API 对您的帐户的访问权限。
|
||||||
token_name=令牌名称
|
token_name=令牌名称
|
||||||
|
@ -957,7 +955,7 @@ webauthn_delete_key_desc=如果删除了安全密钥,则不能再使用它登
|
||||||
webauthn_key_loss_warning=如果您丢失了您的安全密钥,您将无法访问您的帐户。
|
webauthn_key_loss_warning=如果您丢失了您的安全密钥,您将无法访问您的帐户。
|
||||||
webauthn_alternative_tip=您可能想要配置额外的身份验证方法。
|
webauthn_alternative_tip=您可能想要配置额外的身份验证方法。
|
||||||
|
|
||||||
manage_account_links=已绑定的账号
|
manage_account_links=管理绑定过的账号
|
||||||
manage_account_links_desc=这些外部帐户已经绑定到您的 Forgejo 帐户。
|
manage_account_links_desc=这些外部帐户已经绑定到您的 Forgejo 帐户。
|
||||||
account_links_not_available=当前没有与您的 Forgejo 帐户绑定的外部帐户。
|
account_links_not_available=当前没有与您的 Forgejo 帐户绑定的外部帐户。
|
||||||
link_account=链接账户
|
link_account=链接账户
|
||||||
|
@ -996,7 +994,7 @@ blocked_since = 自 %s 起被屏蔽
|
||||||
user_unblock_success = 已成功取消对该用户的屏蔽。
|
user_unblock_success = 已成功取消对该用户的屏蔽。
|
||||||
user_block_success = 已成功屏蔽该用户。
|
user_block_success = 已成功屏蔽该用户。
|
||||||
change_password = 更改密码
|
change_password = 更改密码
|
||||||
additional_repo_units_hint = 建议仓库启用更多功能
|
additional_repo_units_hint = 鼓励仓库启用更多功能
|
||||||
hints = 提示
|
hints = 提示
|
||||||
update_hints = 更新提示
|
update_hints = 更新提示
|
||||||
additional_repo_units_hint_description = 在所有存在未启用的功能的仓库内显示一个“选择更多功能…”按钮。
|
additional_repo_units_hint_description = 在所有存在未启用的功能的仓库内显示一个“选择更多功能…”按钮。
|
||||||
|
@ -1592,7 +1590,7 @@ issues.role.collaborator_helper=该用户已被邀请在仓库上进行协作。
|
||||||
issues.role.first_time_contributor=首次贡献者
|
issues.role.first_time_contributor=首次贡献者
|
||||||
issues.role.first_time_contributor_helper=这是该用户对仓库的第一次贡献。
|
issues.role.first_time_contributor_helper=这是该用户对仓库的第一次贡献。
|
||||||
issues.role.contributor=贡献者
|
issues.role.contributor=贡献者
|
||||||
issues.role.contributor_helper=该用户之前已提交至该仓库。
|
issues.role.contributor_helper=该用户之前提交过该仓库。
|
||||||
issues.re_request_review=再次请求审核
|
issues.re_request_review=再次请求审核
|
||||||
issues.is_stale=此评审之后代码有更新
|
issues.is_stale=此评审之后代码有更新
|
||||||
issues.remove_request_review=移除审核请求
|
issues.remove_request_review=移除审核请求
|
||||||
|
@ -1868,7 +1866,7 @@ pulls.head_out_of_date=合并失败:在生成合并时,head 已更新。提
|
||||||
pulls.has_merged=失败:合并请求已经被合并,您不能再次合并或更改目标分支。
|
pulls.has_merged=失败:合并请求已经被合并,您不能再次合并或更改目标分支。
|
||||||
pulls.push_rejected=合并失败:推送被拒绝。请查看此仓库的 Git 钩子。
|
pulls.push_rejected=合并失败:推送被拒绝。请查看此仓库的 Git 钩子。
|
||||||
pulls.push_rejected_summary=详细拒绝信息
|
pulls.push_rejected_summary=详细拒绝信息
|
||||||
pulls.push_rejected_no_message=推送失败:此推送被拒绝但未提供其他信息。请检查此仓库的 Git 钩子
|
pulls.push_rejected_no_message=推送失败:此推送被拒绝但未提供其他信息。请检查此仓库的 Git Hook
|
||||||
pulls.open_unmerged_pull_exists=`您不能执行重新打开操作, 因为已经存在相同的合并请求 (#%d)。`
|
pulls.open_unmerged_pull_exists=`您不能执行重新打开操作, 因为已经存在相同的合并请求 (#%d)。`
|
||||||
pulls.status_checking=一些检测仍在等待运行
|
pulls.status_checking=一些检测仍在等待运行
|
||||||
pulls.status_checks_success=所有检测均成功
|
pulls.status_checks_success=所有检测均成功
|
||||||
|
@ -1999,8 +1997,8 @@ activity.period.quarterly=3个月
|
||||||
activity.period.semiyearly=6 个月
|
activity.period.semiyearly=6 个月
|
||||||
activity.period.yearly=1年
|
activity.period.yearly=1年
|
||||||
activity.overview=概览
|
activity.overview=概览
|
||||||
activity.active_prs_count_1=<strong>%d</strong> 个活跃合并请求
|
activity.active_prs_count_1=<strong>%d</strong> 合并请求
|
||||||
activity.active_prs_count_n=<strong>%d</strong> 个活跃合并请求
|
activity.active_prs_count_n=<strong>%d</strong> 项活动的合并请求
|
||||||
activity.merged_prs_count_1=已合并的合并请求
|
activity.merged_prs_count_1=已合并的合并请求
|
||||||
activity.merged_prs_count_n=已合并的合并请求
|
activity.merged_prs_count_n=已合并的合并请求
|
||||||
activity.opened_prs_count_1=新合并请求
|
activity.opened_prs_count_1=新合并请求
|
||||||
|
@ -2149,12 +2147,12 @@ settings.pulls.default_allow_edits_from_maintainers=默认开启允许维护者
|
||||||
settings.releases_desc=启用版本发布
|
settings.releases_desc=启用版本发布
|
||||||
settings.packages_desc=启用仓库软件包注册中心
|
settings.packages_desc=启用仓库软件包注册中心
|
||||||
settings.projects_desc=启用仓库项目
|
settings.projects_desc=启用仓库项目
|
||||||
settings.actions_desc=使用 Forgejo Actions 启用集成 CI/CD 管道
|
settings.actions_desc=启用 Actions
|
||||||
settings.admin_settings=管理员设置
|
settings.admin_settings=管理员设置
|
||||||
settings.admin_enable_health_check=启用仓库健康检查 (git fsck)
|
settings.admin_enable_health_check=启用仓库健康检查 (git fsck)
|
||||||
settings.admin_code_indexer=代码索引器
|
settings.admin_code_indexer=代码索引器
|
||||||
settings.admin_stats_indexer=代码统计索引器
|
settings.admin_stats_indexer=代码统计索引器
|
||||||
settings.admin_indexer_commit_sha=上次索引的提交
|
settings.admin_indexer_commit_sha=上次索引的 SHA
|
||||||
settings.admin_indexer_unindexed=未索引
|
settings.admin_indexer_unindexed=未索引
|
||||||
settings.reindex_button=添加到重新索引队列
|
settings.reindex_button=添加到重新索引队列
|
||||||
settings.reindex_requested=已请求重新索引
|
settings.reindex_requested=已请求重新索引
|
||||||
|
@ -2412,7 +2410,7 @@ settings.ignore_stale_approvals=忽略过期批准
|
||||||
settings.ignore_stale_approvals_desc=对旧提交(过期审核)的批准将不计入 PR 的批准数。如果过期审查已被驳回,则与此无关。
|
settings.ignore_stale_approvals_desc=对旧提交(过期审核)的批准将不计入 PR 的批准数。如果过期审查已被驳回,则与此无关。
|
||||||
settings.require_signed_commits=需要签名提交
|
settings.require_signed_commits=需要签名提交
|
||||||
settings.require_signed_commits_desc=拒绝推送未签名或无法验证的提交到分支
|
settings.require_signed_commits_desc=拒绝推送未签名或无法验证的提交到分支
|
||||||
settings.protect_branch_name_pattern=受保护的分支名称正则
|
settings.protect_branch_name_pattern=受保护的分支名称模式
|
||||||
settings.protect_branch_name_pattern_desc=分支保护的名称匹配规则。语法请参阅 <a href="github.com/gobwas/glob">文档</a> 。如:main, release/**
|
settings.protect_branch_name_pattern_desc=分支保护的名称匹配规则。语法请参阅 <a href="github.com/gobwas/glob">文档</a> 。如:main, release/**
|
||||||
settings.protect_patterns=规则
|
settings.protect_patterns=规则
|
||||||
settings.protect_protected_file_patterns=受保护的文件模式(使用半角分号“;”分隔):
|
settings.protect_protected_file_patterns=受保护的文件模式(使用半角分号“;”分隔):
|
||||||
|
@ -2510,10 +2508,10 @@ diff.commit=当前提交
|
||||||
diff.git-notes=Notes
|
diff.git-notes=Notes
|
||||||
diff.data_not_available=比较内容不可用
|
diff.data_not_available=比较内容不可用
|
||||||
diff.options_button=Diff 选项
|
diff.options_button=Diff 选项
|
||||||
diff.show_diff_stats=显示统计信息
|
diff.show_diff_stats=显示统计
|
||||||
diff.download_patch=下载 Patch 文件
|
diff.download_patch=下载 Patch 文件
|
||||||
diff.download_diff=下载 Diff 文件
|
diff.download_diff=下载 Diff 文件
|
||||||
diff.show_split_view=拆分视图
|
diff.show_split_view=分列视图
|
||||||
diff.show_unified_view=合并视图
|
diff.show_unified_view=合并视图
|
||||||
diff.whitespace_button=空白符号
|
diff.whitespace_button=空白符号
|
||||||
diff.whitespace_show_everything=显示所有更改
|
diff.whitespace_show_everything=显示所有更改
|
||||||
|
@ -2544,7 +2542,7 @@ diff.comment.add_single_comment=添加单条评论
|
||||||
diff.comment.add_review_comment=添加评论
|
diff.comment.add_review_comment=添加评论
|
||||||
diff.comment.start_review=开始评审
|
diff.comment.start_review=开始评审
|
||||||
diff.comment.reply=回复
|
diff.comment.reply=回复
|
||||||
diff.review=完成审核
|
diff.review=评审
|
||||||
diff.review.header=提交评审
|
diff.review.header=提交评审
|
||||||
diff.review.placeholder=评审意见
|
diff.review.placeholder=评审意见
|
||||||
diff.review.comment=评论
|
diff.review.comment=评论
|
||||||
|
@ -2554,7 +2552,7 @@ diff.review.reject=请求变更
|
||||||
diff.review.self_approve=合并请求作者不能批准自己的合并请求
|
diff.review.self_approve=合并请求作者不能批准自己的合并请求
|
||||||
diff.committed_by=提交者
|
diff.committed_by=提交者
|
||||||
diff.protected=受保护的
|
diff.protected=受保护的
|
||||||
diff.image.side_by_side=并排
|
diff.image.side_by_side=双排
|
||||||
diff.image.swipe=滑动
|
diff.image.swipe=滑动
|
||||||
diff.image.overlay=叠加
|
diff.image.overlay=叠加
|
||||||
diff.has_escaped=这一行有隐藏的 Unicode 字符
|
diff.has_escaped=这一行有隐藏的 Unicode 字符
|
||||||
|
@ -2590,9 +2588,9 @@ release.prerelease_helper=标记此版本不适合生产使用。
|
||||||
release.cancel=取消
|
release.cancel=取消
|
||||||
release.publish=发布版本
|
release.publish=发布版本
|
||||||
release.save_draft=保存草稿
|
release.save_draft=保存草稿
|
||||||
release.edit_release=更新此次发布
|
release.edit_release=保存此次发布
|
||||||
release.delete_release=删除发布
|
release.delete_release=删除发布
|
||||||
release.delete_tag=删除标签
|
release.delete_tag=删除 Git标签
|
||||||
release.deletion=删除发布
|
release.deletion=删除发布
|
||||||
release.deletion_desc=删除版本发布只会从 Forgejo 中移除。这不会影响 Git 的标签以及您仓库的内容和历史。是否继续?
|
release.deletion_desc=删除版本发布只会从 Forgejo 中移除。这不会影响 Git 的标签以及您仓库的内容和历史。是否继续?
|
||||||
release.deletion_success=Release已被删除。
|
release.deletion_success=Release已被删除。
|
||||||
|
@ -2605,14 +2603,14 @@ release.tag_already_exist=此 Git标签 名称已存在
|
||||||
release.downloads=下载附件
|
release.downloads=下载附件
|
||||||
release.download_count=下载:%s
|
release.download_count=下载:%s
|
||||||
release.add_tag_msg=使用发布的标题和内容作为标签消息。
|
release.add_tag_msg=使用发布的标题和内容作为标签消息。
|
||||||
release.add_tag=创建标签
|
release.add_tag=仅创建标签
|
||||||
release.releases_for=%s 的版本发布
|
release.releases_for=%s 的版本发布
|
||||||
release.tags_for=%s 的标签
|
release.tags_for=%s 的标签
|
||||||
|
|
||||||
branch.name=分支名称
|
branch.name=分支名称
|
||||||
branch.already_exists=名为 %s 的分支已存在。
|
branch.already_exists=名为 %s 的分支已存在。
|
||||||
branch.delete_head=刪除
|
branch.delete_head=刪除
|
||||||
branch.delete=删除分支 "%s"
|
branch.delete=删除分支 %s
|
||||||
branch.delete_html=删除分支
|
branch.delete_html=删除分支
|
||||||
branch.delete_desc=删除分支是永久的。虽然已删除的分支在实际被删除前有可能会短时间存在,但这在大多数情况下无法撤销。是否继续?
|
branch.delete_desc=删除分支是永久的。虽然已删除的分支在实际被删除前有可能会短时间存在,但这在大多数情况下无法撤销。是否继续?
|
||||||
branch.deletion_success=分支 %s 已被删除。
|
branch.deletion_success=分支 %s 已被删除。
|
||||||
|
@ -2629,9 +2627,9 @@ branch.restore_success=分支 "%s"已还原。
|
||||||
branch.restore_failed=还原分支 "%s"失败。
|
branch.restore_failed=还原分支 "%s"失败。
|
||||||
branch.protected_deletion_failed=不能删除受保护的分支 "%s"。
|
branch.protected_deletion_failed=不能删除受保护的分支 "%s"。
|
||||||
branch.default_deletion_failed=不能删除默认分支"%s"。
|
branch.default_deletion_failed=不能删除默认分支"%s"。
|
||||||
branch.restore=恢复分支 "%s"
|
branch.restore=`还原分支 "%s"`
|
||||||
branch.download=下载分支 "%s"
|
branch.download=`下载分支 "%s"`
|
||||||
branch.rename=重命名分支 "%s"
|
branch.rename=`重命名分支 "%s"`
|
||||||
branch.search=搜索分支
|
branch.search=搜索分支
|
||||||
branch.included_desc=此分支是默认分支的一部分
|
branch.included_desc=此分支是默认分支的一部分
|
||||||
branch.included=已包含
|
branch.included=已包含
|
||||||
|
@ -2728,7 +2726,7 @@ n_branch_one = %s 分支
|
||||||
n_branch_few = %s 分支
|
n_branch_few = %s 分支
|
||||||
n_tag_one = %s 标签
|
n_tag_one = %s 标签
|
||||||
n_tag_few = %s 标签
|
n_tag_few = %s 标签
|
||||||
editor.commit_id_not_matching = 您在编辑文件时该文件已被更改。请提交到一个新的分支,然后再将这个新的分支合并回当前分支。
|
editor.commit_id_not_matching = 此提交ID与您当前编辑的不匹配。请提交到一个新的分支,然后再将这个新的分支合并回当前分支。
|
||||||
issues.num_participants_one = %d 个参与者
|
issues.num_participants_one = %d 个参与者
|
||||||
issues.archived_label_description = (已归档)%s
|
issues.archived_label_description = (已归档)%s
|
||||||
editor.push_out_of_date = 推送似乎已过期。
|
editor.push_out_of_date = 推送似乎已过期。
|
||||||
|
@ -2764,12 +2762,6 @@ project = 项目
|
||||||
issues.edit.already_changed = 无法保存对工单的更改。工单似乎已经被另一个用户修改了,为了防止修改被覆盖,请刷新页面后再次尝试编辑
|
issues.edit.already_changed = 无法保存对工单的更改。工单似乎已经被另一个用户修改了,为了防止修改被覆盖,请刷新页面后再次尝试编辑
|
||||||
pulls.edit.already_changed = 无法保存对合并请求的更改。内容似乎已经被另一个用户修改了,为了防止修改被覆盖,请刷新页面后再次尝试编辑
|
pulls.edit.already_changed = 无法保存对合并请求的更改。内容似乎已经被另一个用户修改了,为了防止修改被覆盖,请刷新页面后再次尝试编辑
|
||||||
comments.edit.already_changed = 无法保存对评论的更改。内容似乎已经被另一个用户修改了,为了防止修改被覆盖,请刷新页面后再次尝试编辑
|
comments.edit.already_changed = 无法保存对评论的更改。内容似乎已经被另一个用户修改了,为了防止修改被覆盖,请刷新页面后再次尝试编辑
|
||||||
subscribe.issue.guest.tooltip = 登录以订阅工单。
|
|
||||||
subscribe.pull.guest.tooltip = 登录以订阅此拉取请求。
|
|
||||||
settings.federation_following_repos = 关注仓库的 URL。以“;”分隔,无空格。
|
|
||||||
settings.federation_settings = 邦联设置
|
|
||||||
settings.federation_apapiurl = 此仓库的邦联URL地址。将其作为关注的仓库URL地址填写到另一个仓库的邦联设置中。
|
|
||||||
settings.federation_not_enabled = 当前实例未启用邦联功能。
|
|
||||||
|
|
||||||
[graphs]
|
[graphs]
|
||||||
component_loading=正在加载 %s...
|
component_loading=正在加载 %s...
|
||||||
|
@ -2809,7 +2801,7 @@ form.create_org_not_allowed=此账号禁止创建组织
|
||||||
|
|
||||||
settings=组织设置
|
settings=组织设置
|
||||||
settings.options=组织
|
settings.options=组织
|
||||||
settings.full_name=全名
|
settings.full_name=组织全名
|
||||||
settings.email=联系电子邮件
|
settings.email=联系电子邮件
|
||||||
settings.website=网站
|
settings.website=网站
|
||||||
settings.location=所在地区
|
settings.location=所在地区
|
||||||
|
@ -2822,7 +2814,7 @@ settings.visibility.limited_shortname=受限
|
||||||
settings.visibility.private=私有 (仅对组织成员可见)
|
settings.visibility.private=私有 (仅对组织成员可见)
|
||||||
settings.visibility.private_shortname=私有
|
settings.visibility.private_shortname=私有
|
||||||
|
|
||||||
settings.update_settings=更新设置
|
settings.update_settings=更新组织设置
|
||||||
settings.update_setting_success=组织设置已更新。
|
settings.update_setting_success=组织设置已更新。
|
||||||
settings.change_orgname_prompt=注意:更改组织名称同时会更改组织的 URL 地址并释放旧的名称。
|
settings.change_orgname_prompt=注意:更改组织名称同时会更改组织的 URL 地址并释放旧的名称。
|
||||||
settings.change_orgname_redirect_prompt=在被人使用前,旧用户名将会被重定向。
|
settings.change_orgname_redirect_prompt=在被人使用前,旧用户名将会被重定向。
|
||||||
|
@ -2830,7 +2822,7 @@ settings.update_avatar_success=组织头像已经更新。
|
||||||
settings.delete=删除组织
|
settings.delete=删除组织
|
||||||
settings.delete_account=删除当前组织
|
settings.delete_account=删除当前组织
|
||||||
settings.delete_prompt=删除操作会永久清除该组织的信息,并且 <strong>不可恢复</strong>!
|
settings.delete_prompt=删除操作会永久清除该组织的信息,并且 <strong>不可恢复</strong>!
|
||||||
settings.confirm_delete_account=确认删除
|
settings.confirm_delete_account=确认删除组织
|
||||||
settings.delete_org_title=删除组织
|
settings.delete_org_title=删除组织
|
||||||
settings.delete_org_desc=此组织将会被永久删除,确认继续吗?
|
settings.delete_org_desc=此组织将会被永久删除,确认继续吗?
|
||||||
settings.hooks_desc=在此处添加的 Web 钩子将会应用到该组织下的 <strong>所有仓库</strong>。
|
settings.hooks_desc=在此处添加的 Web 钩子将会应用到该组织下的 <strong>所有仓库</strong>。
|
||||||
|
@ -2871,7 +2863,7 @@ teams.no_desc=该团队暂无描述
|
||||||
teams.settings=团队设置
|
teams.settings=团队设置
|
||||||
teams.owners_permission_desc=管理员团队对 <strong>所有仓库</strong> 具有操作权限,且对组织具有 <strong>管理员权限</strong>。
|
teams.owners_permission_desc=管理员团队对 <strong>所有仓库</strong> 具有操作权限,且对组织具有 <strong>管理员权限</strong>。
|
||||||
teams.members=团队成员
|
teams.members=团队成员
|
||||||
teams.update_settings=更新设置
|
teams.update_settings=更新团队设置
|
||||||
teams.delete_team=删除团队
|
teams.delete_team=删除团队
|
||||||
teams.add_team_member=添加团队成员
|
teams.add_team_member=添加团队成员
|
||||||
teams.invite_team_member=邀请加入 %s
|
teams.invite_team_member=邀请加入 %s
|
||||||
|
@ -2910,7 +2902,7 @@ open_dashboard = 打开仪表盘
|
||||||
dashboard=管理面板
|
dashboard=管理面板
|
||||||
self_check=自我检查
|
self_check=自我检查
|
||||||
identity_access=身份及认证
|
identity_access=身份及认证
|
||||||
users=用户帐户
|
users=帐户管理
|
||||||
organizations=组织管理
|
organizations=组织管理
|
||||||
assets=代码资产
|
assets=代码资产
|
||||||
repositories=仓库管理
|
repositories=仓库管理
|
||||||
|
@ -3012,7 +3004,7 @@ dashboard.sync_branch.started=分支同步已开始
|
||||||
dashboard.sync_tag.started=标签同步已开始
|
dashboard.sync_tag.started=标签同步已开始
|
||||||
dashboard.rebuild_issue_indexer=重建工单索引
|
dashboard.rebuild_issue_indexer=重建工单索引
|
||||||
|
|
||||||
users.user_manage_panel=管理用户帐户
|
users.user_manage_panel=用户帐户管理
|
||||||
users.new_account=创建新帐户
|
users.new_account=创建新帐户
|
||||||
users.name=用户名
|
users.name=用户名
|
||||||
users.full_name=全名
|
users.full_name=全名
|
||||||
|
@ -3027,7 +3019,7 @@ users.repos=仓库数
|
||||||
users.created=创建时间
|
users.created=创建时间
|
||||||
users.last_login=上次登录
|
users.last_login=上次登录
|
||||||
users.never_login=从未登录
|
users.never_login=从未登录
|
||||||
users.send_register_notify=通过邮件发送注册通知
|
users.send_register_notify=发送注册通知
|
||||||
users.new_success=用户账户 '%s' 已被创建。
|
users.new_success=用户账户 '%s' 已被创建。
|
||||||
users.edit=修改
|
users.edit=修改
|
||||||
users.auth_source=认证源
|
users.auth_source=认证源
|
||||||
|
@ -3150,7 +3142,7 @@ auths.attribute_surname=姓氏属性
|
||||||
auths.attribute_mail=电子邮箱属性
|
auths.attribute_mail=电子邮箱属性
|
||||||
auths.attribute_ssh_public_key=SSH公钥属性
|
auths.attribute_ssh_public_key=SSH公钥属性
|
||||||
auths.attribute_avatar=头像属性
|
auths.attribute_avatar=头像属性
|
||||||
auths.attributes_in_bind=从 bind DN 中拉取属性信息
|
auths.attributes_in_bind=从 Bind DN 中拉取属性信息
|
||||||
auths.allow_deactivate_all=允许在搜索结果为空时停用所有用户
|
auths.allow_deactivate_all=允许在搜索结果为空时停用所有用户
|
||||||
auths.use_paged_search=使用分页搜索
|
auths.use_paged_search=使用分页搜索
|
||||||
auths.search_page_size=分页大小
|
auths.search_page_size=分页大小
|
||||||
|
@ -3202,7 +3194,7 @@ auths.oauth2_admin_group=管理员用户组的 Claim 声明值。(可选 - 需
|
||||||
auths.oauth2_restricted_group=受限用户组的 Claim 声明值。(可选 - 需要上面的声明名称)
|
auths.oauth2_restricted_group=受限用户组的 Claim 声明值。(可选 - 需要上面的声明名称)
|
||||||
auths.oauth2_map_group_to_team=映射声明的组到组织团队。(可选 - 要求在上面填写声明的名字)
|
auths.oauth2_map_group_to_team=映射声明的组到组织团队。(可选 - 要求在上面填写声明的名字)
|
||||||
auths.oauth2_map_group_to_team_removal=如果用户不属于相应的组,从已同步团队中移除用户
|
auths.oauth2_map_group_to_team_removal=如果用户不属于相应的组,从已同步团队中移除用户
|
||||||
auths.enable_auto_register=允许自动注册
|
auths.enable_auto_register=允许用户自动注册
|
||||||
auths.sspi_auto_create_users=自动创建用户
|
auths.sspi_auto_create_users=自动创建用户
|
||||||
auths.sspi_auto_create_users_helper=允许 SSPI 认证在用户第一次登录时自动创建新账号
|
auths.sspi_auto_create_users_helper=允许 SSPI 认证在用户第一次登录时自动创建新账号
|
||||||
auths.sspi_auto_activate_users=自动激活用户
|
auths.sspi_auto_activate_users=自动激活用户
|
||||||
|
@ -3236,7 +3228,7 @@ auths.new_success=已添加身份验证 '%s'。
|
||||||
auths.update_success=认证源已经更新。
|
auths.update_success=认证源已经更新。
|
||||||
auths.update=更新认证源
|
auths.update=更新认证源
|
||||||
auths.delete=删除认证源
|
auths.delete=删除认证源
|
||||||
auths.delete_auth_title=删除认证源
|
auths.delete_auth_title=删除身份验证源
|
||||||
auths.delete_auth_desc=删除一个认证源将阻止使用它进行登录。确认?
|
auths.delete_auth_desc=删除一个认证源将阻止使用它进行登录。确认?
|
||||||
auths.still_in_used=认证源仍在使用。请先解除或者删除使用此认证源的用户。
|
auths.still_in_used=认证源仍在使用。请先解除或者删除使用此认证源的用户。
|
||||||
auths.deletion_success=认证源已经更新。
|
auths.deletion_success=认证源已经更新。
|
||||||
|
@ -3246,9 +3238,9 @@ auths.unable_to_initialize_openid=无法初始化 OpenID Connect 提供商: %s
|
||||||
auths.invalid_openIdConnectAutoDiscoveryURL=无效的 Auto Discovery URL (这必须是一个以 http:// 或 https://开头的有效的 URL)
|
auths.invalid_openIdConnectAutoDiscoveryURL=无效的 Auto Discovery URL (这必须是一个以 http:// 或 https://开头的有效的 URL)
|
||||||
|
|
||||||
config.server_config=服务器配置
|
config.server_config=服务器配置
|
||||||
config.app_name=实例名称
|
config.app_name=站点名称
|
||||||
config.app_ver=Forgejo版本
|
config.app_ver=Forgejo版本
|
||||||
config.app_url=基本 URL
|
config.app_url=Forgejo 基本 URL
|
||||||
config.custom_conf=配置文件路径
|
config.custom_conf=配置文件路径
|
||||||
config.custom_file_root_path=自定义文件根路径
|
config.custom_file_root_path=自定义文件根路径
|
||||||
config.domain=服务器域名
|
config.domain=服务器域名
|
||||||
|
@ -3262,7 +3254,7 @@ config.repo_root_path=仓库根目录
|
||||||
config.lfs_root_path=LFS根目录
|
config.lfs_root_path=LFS根目录
|
||||||
config.log_file_root_path=日志路径
|
config.log_file_root_path=日志路径
|
||||||
config.script_type=脚本类型
|
config.script_type=脚本类型
|
||||||
config.reverse_auth_user=反向代理认证用户
|
config.reverse_auth_user=反向代理认证
|
||||||
|
|
||||||
config.ssh_config=SSH 配置
|
config.ssh_config=SSH 配置
|
||||||
config.ssh_enabled=启用
|
config.ssh_enabled=启用
|
||||||
|
@ -3295,10 +3287,10 @@ config.register_email_confirm=需要电子邮件确认注册
|
||||||
config.disable_register=禁止用户注册
|
config.disable_register=禁止用户注册
|
||||||
config.allow_only_internal_registration=只允许通过 Forgejo 进行注册
|
config.allow_only_internal_registration=只允许通过 Forgejo 进行注册
|
||||||
config.allow_only_external_registration=仅允许通过外部服务注册
|
config.allow_only_external_registration=仅允许通过外部服务注册
|
||||||
config.enable_openid_signup=启用 OpenID 自助注册
|
config.enable_openid_signup=启用 OpenID 自注册
|
||||||
config.enable_openid_signin=启用 OpenID 登录
|
config.enable_openid_signin=启用 OpenID 登录
|
||||||
config.show_registration_button=显示注册按钮
|
config.show_registration_button=显示注册按钮
|
||||||
config.require_sign_in_view=需要登录才能查看内容
|
config.require_sign_in_view=启用登录访问限制
|
||||||
config.mail_notify=启用邮件通知
|
config.mail_notify=启用邮件通知
|
||||||
config.enable_captcha=启用登录验证码
|
config.enable_captcha=启用登录验证码
|
||||||
config.active_code_lives=激活用户链接有效期
|
config.active_code_lives=激活用户链接有效期
|
||||||
|
@ -3309,7 +3301,7 @@ config.enable_timetracking=启用时间跟踪
|
||||||
config.default_enable_timetracking=默认情况下启用时间跟踪
|
config.default_enable_timetracking=默认情况下启用时间跟踪
|
||||||
config.allow_dots_in_usernames = 允许用户在用户名中使用英文句号。不影响已有的帐户。
|
config.allow_dots_in_usernames = 允许用户在用户名中使用英文句号。不影响已有的帐户。
|
||||||
config.default_allow_only_contributors_to_track_time=仅允许成员跟踪时间
|
config.default_allow_only_contributors_to_track_time=仅允许成员跟踪时间
|
||||||
config.no_reply_address=隐藏电子邮件域名
|
config.no_reply_address=隐藏电子邮件域
|
||||||
config.default_visibility_organization=新组织的默认可见性
|
config.default_visibility_organization=新组织的默认可见性
|
||||||
config.default_enable_dependencies=默认情况下启用工单依赖
|
config.default_enable_dependencies=默认情况下启用工单依赖
|
||||||
|
|
||||||
|
@ -3318,7 +3310,7 @@ config.queue_length=队列长度
|
||||||
config.deliver_timeout=推送超时
|
config.deliver_timeout=推送超时
|
||||||
config.skip_tls_verify=跳过 TLS 验证
|
config.skip_tls_verify=跳过 TLS 验证
|
||||||
|
|
||||||
config.mailer_config=邮件配置
|
config.mailer_config=Mailer 配置
|
||||||
config.mailer_enabled=启用服务
|
config.mailer_enabled=启用服务
|
||||||
config.mailer_enable_helo=启用HELO
|
config.mailer_enable_helo=启用HELO
|
||||||
config.mailer_name=任务名称
|
config.mailer_name=任务名称
|
||||||
|
@ -3334,17 +3326,17 @@ config.mailer_use_dummy=Dummy
|
||||||
config.test_email_placeholder=电子邮址 (例如,test@example.com)
|
config.test_email_placeholder=电子邮址 (例如,test@example.com)
|
||||||
config.send_test_mail=发送测试邮件
|
config.send_test_mail=发送测试邮件
|
||||||
config.send_test_mail_submit=发送
|
config.send_test_mail_submit=发送
|
||||||
config.test_mail_failed=发送测试邮件至 "%s" 时失败:%v
|
config.test_mail_failed=发送测试邮件至 '%s' 时失败:%v
|
||||||
config.test_mail_sent=测试邮件已经发送至 "%s"。
|
config.test_mail_sent=测试邮件已经发送至 '%s'。
|
||||||
|
|
||||||
config.oauth_config=OAuth 配置
|
config.oauth_config=OAuth 配置
|
||||||
config.oauth_enabled=启用
|
config.oauth_enabled=启用
|
||||||
|
|
||||||
config.cache_config=缓存配置
|
config.cache_config=Cache 配置
|
||||||
config.cache_adapter=缓存适配器
|
config.cache_adapter=Cache 适配器
|
||||||
config.cache_interval=缓存周期
|
config.cache_interval=Cache 周期
|
||||||
config.cache_conn=缓存连接字符串
|
config.cache_conn=Cache 连接字符串
|
||||||
config.cache_item_ttl=缓存条目 TTL
|
config.cache_item_ttl=缓存项目 TTL
|
||||||
|
|
||||||
config.session_config=Session 配置
|
config.session_config=Session 配置
|
||||||
config.session_provider=Session 提供者
|
config.session_provider=Session 提供者
|
||||||
|
@ -3358,7 +3350,7 @@ config.cookie_life_time=Cookie 生命周期
|
||||||
config.picture_config=图片和头像配置
|
config.picture_config=图片和头像配置
|
||||||
config.picture_service=图片服务
|
config.picture_service=图片服务
|
||||||
config.disable_gravatar=禁用 Gravatar 头像
|
config.disable_gravatar=禁用 Gravatar 头像
|
||||||
config.enable_federated_avatar=启用 federated avatars
|
config.enable_federated_avatar=启用 Federated Avatars
|
||||||
|
|
||||||
config.git_config=Git 配置
|
config.git_config=Git 配置
|
||||||
config.git_disable_diff_highlight=禁用差异对比语法高亮
|
config.git_disable_diff_highlight=禁用差异对比语法高亮
|
||||||
|
@ -3383,7 +3375,7 @@ config.set_setting_failed=设置 %s 失败
|
||||||
|
|
||||||
monitor.stats=统计
|
monitor.stats=统计
|
||||||
|
|
||||||
monitor.cron=定时任务
|
monitor.cron=Cron 任务
|
||||||
monitor.name=任务名称
|
monitor.name=任务名称
|
||||||
monitor.schedule=任务安排
|
monitor.schedule=任务安排
|
||||||
monitor.next=下次执行时间
|
monitor.next=下次执行时间
|
||||||
|
@ -3407,11 +3399,11 @@ monitor.queue=队列: %s
|
||||||
monitor.queue.name=名称
|
monitor.queue.name=名称
|
||||||
monitor.queue.type=类型
|
monitor.queue.type=类型
|
||||||
monitor.queue.exemplar=数据类型
|
monitor.queue.exemplar=数据类型
|
||||||
monitor.queue.numberworkers=worker 数量
|
monitor.queue.numberworkers=工作者数量
|
||||||
monitor.queue.activeworkers=活跃 worker
|
monitor.queue.activeworkers=活跃工作者
|
||||||
monitor.queue.maxnumberworkers=最大 worker 数量
|
monitor.queue.maxnumberworkers=最大工作者数量
|
||||||
monitor.queue.numberinqueue=队列中的数量
|
monitor.queue.numberinqueue=队列中的数量
|
||||||
monitor.queue.review_add=审查 / 添加 worker
|
monitor.queue.review_add=查看 / 添加工作者
|
||||||
monitor.queue.settings.title=池设置
|
monitor.queue.settings.title=池设置
|
||||||
monitor.queue.settings.desc=因为工作者队列阻塞,池正在动态扩展。
|
monitor.queue.settings.desc=因为工作者队列阻塞,池正在动态扩展。
|
||||||
monitor.queue.settings.maxnumberworkers=最大工作者数量
|
monitor.queue.settings.maxnumberworkers=最大工作者数量
|
||||||
|
@ -3437,7 +3429,7 @@ notices.desc=提示描述
|
||||||
notices.op=操作
|
notices.op=操作
|
||||||
notices.delete_success=系统通知已被删除。
|
notices.delete_success=系统通知已被删除。
|
||||||
dashboard.sync_repo_tags = 将 git 数据中的标签同步到数据库
|
dashboard.sync_repo_tags = 将 git 数据中的标签同步到数据库
|
||||||
dashboard.sync_tag.started = 标签同步已开始
|
dashboard.sync_tag.started = 标签同步开始
|
||||||
self_check = 自检
|
self_check = 自检
|
||||||
self_check.no_problem_found = 未找到问题。
|
self_check.no_problem_found = 未找到问题。
|
||||||
self_check.database_collation_mismatch = 期望数据库使用排序规则:%s
|
self_check.database_collation_mismatch = 期望数据库使用排序规则:%s
|
||||||
|
@ -3456,7 +3448,6 @@ config_settings = 设置
|
||||||
config_summary = 概况
|
config_summary = 概况
|
||||||
auths.default_domain_name = 用于电子邮件地址的默认域名
|
auths.default_domain_name = 用于电子邮件地址的默认域名
|
||||||
config.open_with_editor_app_help = 克隆菜单中的“打开方式”所用的编辑器。如果留空,将使用默认值。展开以查看默认值。
|
config.open_with_editor_app_help = 克隆菜单中的“打开方式”所用的编辑器。如果留空,将使用默认值。展开以查看默认值。
|
||||||
config.app_slogan = 实例标语
|
|
||||||
|
|
||||||
[action]
|
[action]
|
||||||
create_repo=创建了仓库 <a href="%s">%s</a>
|
create_repo=创建了仓库 <a href="%s">%s</a>
|
||||||
|
@ -3675,10 +3666,10 @@ owner.settings.cargo.rebuild=重建索引
|
||||||
owner.settings.cargo.rebuild.description=如果索引与存储的 Cargo 包不同步,重建可能会有用。
|
owner.settings.cargo.rebuild.description=如果索引与存储的 Cargo 包不同步,重建可能会有用。
|
||||||
owner.settings.cargo.rebuild.error=无法重建 Cargo 索引: %v
|
owner.settings.cargo.rebuild.error=无法重建 Cargo 索引: %v
|
||||||
owner.settings.cargo.rebuild.success=Cargo 索引已成功重建。
|
owner.settings.cargo.rebuild.success=Cargo 索引已成功重建。
|
||||||
owner.settings.cleanuprules.title=清理规则
|
owner.settings.cleanuprules.title=管理清理规则
|
||||||
owner.settings.cleanuprules.add=添加清理规则
|
owner.settings.cleanuprules.add=添加清理规则
|
||||||
owner.settings.cleanuprules.edit=编辑清理规则
|
owner.settings.cleanuprules.edit=编辑清理规则
|
||||||
owner.settings.cleanuprules.none=尚无清理规则。
|
owner.settings.cleanuprules.none=没有可用的清理规则。请查阅文档。
|
||||||
owner.settings.cleanuprules.preview=清理规则预览
|
owner.settings.cleanuprules.preview=清理规则预览
|
||||||
owner.settings.cleanuprules.preview.overview=%d 个软件包计划被删除。
|
owner.settings.cleanuprules.preview.overview=%d 个软件包计划被删除。
|
||||||
owner.settings.cleanuprules.preview.none=清理规则与任何软件包都不匹配。
|
owner.settings.cleanuprules.preview.none=清理规则与任何软件包都不匹配。
|
||||||
|
@ -3722,7 +3713,7 @@ management=密钥管理
|
||||||
[actions]
|
[actions]
|
||||||
actions=Actions
|
actions=Actions
|
||||||
|
|
||||||
unit.desc=使用 Forgejo Actions 管理集成的 CI/CD 管道
|
unit.desc=管理Actions
|
||||||
|
|
||||||
status.unknown=未知
|
status.unknown=未知
|
||||||
status.waiting=等待中
|
status.waiting=等待中
|
||||||
|
@ -3734,7 +3725,7 @@ status.skipped=已忽略
|
||||||
status.blocked=阻塞中
|
status.blocked=阻塞中
|
||||||
|
|
||||||
runners=Runners
|
runners=Runners
|
||||||
runners.runner_manage_panel=管理 Runners
|
runners.runner_manage_panel=Runners管理
|
||||||
runners.new=创建 Runner
|
runners.new=创建 Runner
|
||||||
runners.new_notice=如何启动一个运行器
|
runners.new_notice=如何启动一个运行器
|
||||||
runners.status=状态
|
runners.status=状态
|
||||||
|
@ -3782,21 +3773,21 @@ runs.actors_no_select=所有操作者
|
||||||
runs.status_no_select=所有状态
|
runs.status_no_select=所有状态
|
||||||
runs.no_results=没有匹配的结果。
|
runs.no_results=没有匹配的结果。
|
||||||
runs.no_workflows=目前还没有工作流。
|
runs.no_workflows=目前还没有工作流。
|
||||||
runs.no_workflows.quick_start=不知道如何使用 Forgejo Actions吗?请查看 <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=关于Forgejo 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.no_runs=工作流尚未运行过。
|
||||||
runs.empty_commit_message=(空白的提交消息)
|
runs.empty_commit_message=(空白的提交消息)
|
||||||
|
|
||||||
workflow.disable=禁用工作流
|
workflow.disable=禁用工作流
|
||||||
workflow.disable_success=工作流 "%s" 已成功禁用。
|
workflow.disable_success=工作流 '%s' 已成功禁用。
|
||||||
workflow.enable=启用工作流
|
workflow.enable=启用工作流
|
||||||
workflow.enable_success=工作流 "%s" 已成功启用。
|
workflow.enable_success=工作流 '%s' 已成功启用。
|
||||||
workflow.disabled=工作流已禁用。
|
workflow.disabled=工作流已禁用。
|
||||||
|
|
||||||
need_approval_desc=该工作流由派生仓库的合并请求所触发,需要批准方可运行。
|
need_approval_desc=该工作流由派生仓库的合并请求所触发,需要批准方可运行。
|
||||||
|
|
||||||
variables=变量
|
variables=变量
|
||||||
variables.management=管理变量
|
variables.management=变量管理
|
||||||
variables.creation=添加变量
|
variables.creation=添加变量
|
||||||
variables.none=目前还没有变量。
|
variables.none=目前还没有变量。
|
||||||
variables.deletion=删除变量
|
variables.deletion=删除变量
|
||||||
|
@ -3851,10 +3842,6 @@ code_search_by_git_grep = 当前搜索结果由 git grep 提供,如果站点
|
||||||
match = 匹配
|
match = 匹配
|
||||||
match_tooltip = 仅包含与搜索词完全匹配的结果
|
match_tooltip = 仅包含与搜索词完全匹配的结果
|
||||||
fuzzy_tooltip = 在搜索结果中包含与搜索词相近的项目
|
fuzzy_tooltip = 在搜索结果中包含与搜索词相近的项目
|
||||||
exact = 精确
|
|
||||||
issue_kind = 搜索工单...
|
|
||||||
pull_kind = 搜索拉取...
|
|
||||||
exact_tooltip = 仅包含与精确搜索词匹配的结果
|
|
||||||
|
|
||||||
|
|
||||||
[munits.data]
|
[munits.data]
|
||||||
|
|
895
package-lock.json
generated
895
package-lock.json
generated
File diff suppressed because it is too large
Load diff
17
package.json
17
package.json
|
@ -24,7 +24,7 @@
|
||||||
"dayjs": "1.11.11",
|
"dayjs": "1.11.11",
|
||||||
"dropzone": "6.0.0-beta.2",
|
"dropzone": "6.0.0-beta.2",
|
||||||
"easymde": "2.18.0",
|
"easymde": "2.18.0",
|
||||||
"esbuild-loader": "4.1.0",
|
"esbuild-loader": "4.2.0",
|
||||||
"escape-goat": "4.0.0",
|
"escape-goat": "4.0.0",
|
||||||
"fast-glob": "3.3.2",
|
"fast-glob": "3.3.2",
|
||||||
"htmx.org": "1.9.12",
|
"htmx.org": "1.9.12",
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
"license-checker-webpack-plugin": "0.2.1",
|
"license-checker-webpack-plugin": "0.2.1",
|
||||||
"mermaid": "10.9.1",
|
"mermaid": "10.9.1",
|
||||||
"mini-css-extract-plugin": "2.9.0",
|
"mini-css-extract-plugin": "2.9.0",
|
||||||
"minimatch": "9.0.5",
|
"minimatch": "9.0.4",
|
||||||
"monaco-editor": "0.47.0",
|
"monaco-editor": "0.47.0",
|
||||||
"monaco-editor-webpack-plugin": "7.1.0",
|
"monaco-editor-webpack-plugin": "7.1.0",
|
||||||
"pdfobject": "2.3.0",
|
"pdfobject": "2.3.0",
|
||||||
|
@ -53,23 +53,22 @@
|
||||||
"tributejs": "5.1.3",
|
"tributejs": "5.1.3",
|
||||||
"uint8-to-base64": "0.2.0",
|
"uint8-to-base64": "0.2.0",
|
||||||
"vanilla-colorful": "0.7.2",
|
"vanilla-colorful": "0.7.2",
|
||||||
"vue": "3.4.30",
|
"vue": "3.4.27",
|
||||||
"vue-bar-graph": "2.0.0",
|
"vue-bar-graph": "2.0.0",
|
||||||
"vue-chartjs": "5.3.1",
|
"vue-chartjs": "5.3.1",
|
||||||
"vue-loader": "17.4.2",
|
"vue-loader": "17.4.2",
|
||||||
"vue3-calendar-heatmap": "2.0.5",
|
"vue3-calendar-heatmap": "2.0.5",
|
||||||
"webpack": "5.92.1",
|
"webpack": "5.91.0",
|
||||||
"webpack-cli": "5.1.4",
|
"webpack-cli": "5.1.4",
|
||||||
"wrap-ansi": "9.0.0"
|
"wrap-ansi": "9.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint-community/eslint-plugin-eslint-comments": "4.3.0",
|
"@eslint-community/eslint-plugin-eslint-comments": "4.3.0",
|
||||||
"@playwright/test": "1.45.0",
|
"@playwright/test": "1.44.1",
|
||||||
"@stoplight/spectral-cli": "6.11.1",
|
"@stoplight/spectral-cli": "6.11.1",
|
||||||
"@stylistic/eslint-plugin-js": "1.8.1",
|
"@stylistic/eslint-plugin-js": "1.8.1",
|
||||||
"@stylistic/stylelint-plugin": "2.1.2",
|
"@stylistic/stylelint-plugin": "2.1.2",
|
||||||
"@vitejs/plugin-vue": "5.0.4",
|
"@vitejs/plugin-vue": "5.0.4",
|
||||||
"@vitest/coverage-v8": "1.6.0",
|
|
||||||
"@vue/test-utils": "2.4.6",
|
"@vue/test-utils": "2.4.6",
|
||||||
"eslint": "8.57.0",
|
"eslint": "8.57.0",
|
||||||
"eslint-plugin-array-func": "4.0.0",
|
"eslint-plugin-array-func": "4.0.0",
|
||||||
|
@ -84,9 +83,9 @@
|
||||||
"eslint-plugin-vitest": "0.5.4",
|
"eslint-plugin-vitest": "0.5.4",
|
||||||
"eslint-plugin-vitest-globals": "1.5.0",
|
"eslint-plugin-vitest-globals": "1.5.0",
|
||||||
"eslint-plugin-vue": "9.26.0",
|
"eslint-plugin-vue": "9.26.0",
|
||||||
"eslint-plugin-vue-scoped-css": "2.8.1",
|
"eslint-plugin-vue-scoped-css": "2.8.0",
|
||||||
"eslint-plugin-wc": "2.1.0",
|
"eslint-plugin-wc": "2.1.0",
|
||||||
"happy-dom": "14.12.3",
|
"happy-dom": "14.12.0",
|
||||||
"markdownlint-cli": "0.41.0",
|
"markdownlint-cli": "0.41.0",
|
||||||
"postcss-html": "1.7.0",
|
"postcss-html": "1.7.0",
|
||||||
"stylelint": "16.6.1",
|
"stylelint": "16.6.1",
|
||||||
|
@ -94,7 +93,7 @@
|
||||||
"stylelint-declaration-strict-value": "1.10.4",
|
"stylelint-declaration-strict-value": "1.10.4",
|
||||||
"stylelint-value-no-unknown-custom-properties": "6.0.1",
|
"stylelint-value-no-unknown-custom-properties": "6.0.1",
|
||||||
"svgo": "3.2.0",
|
"svgo": "3.2.0",
|
||||||
"vite-string-plugin": "1.3.4",
|
"vite-string-plugin": "1.3.2",
|
||||||
"vitest": "1.6.0"
|
"vitest": "1.6.0"
|
||||||
},
|
},
|
||||||
"browserslist": ["defaults"]
|
"browserslist": ["defaults"]
|
||||||
|
|
1
release-notes/7.0.4/fix/4059.md
Normal file
1
release-notes/7.0.4/fix/4059.md
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Wrongfully hidden "Use Custom URLs Instead of Default URLs" checkbox on Authentication Source Administration page.
|
|
@ -1 +0,0 @@
|
||||||
Authentication Source Administration page wrongfully handled the "Custom URLs Instead of Default URLs" checkbox (missing checkbox, irrelevant fields) [#4059](https://codeberg.org/forgejo/forgejo/pulls/4059) [#4194](https://codeberg.org/forgejo/forgejo/pulls/4194)
|
|
|
@ -1 +0,0 @@
|
||||||
User profiles: only show RSS feed button and Public activity tab when the activity can be accessed, add messages about visibility
|
|
|
@ -1 +0,0 @@
|
||||||
Make tooltip of Author label in comments more clear
|
|
|
@ -1,3 +0,0 @@
|
||||||
- [commit](https://codeberg.org/forgejo/forgejo/commit/b60e3ac7b4aeeb9b8760f43eea9576c0e23309e9) allow downloading draft releases assets.
|
|
||||||
- [commit](https://codeberg.org/forgejo/forgejo/commit/1fca15529ac8fefb60d86b0c1f4bec8dae9a8566) API endpoints for managing tag protection
|
|
||||||
- [commit](https://codeberg.org/forgejo/forgejo/commit/4334c705b5f9388b16af23c7e75a69d027d07d5e) extract and display readme and comments for Composer packages
|
|
|
@ -1,2 +0,0 @@
|
||||||
- [commit](https://codeberg.org/forgejo/forgejo/commit/364922c6e4f28264add9e2501a352c25ad6a0993) when a repository is adopted, its object format is not set in the database
|
|
||||||
- [commit](https://codeberg.org/forgejo/forgejo/commit/e7f332a55d6a48a3f3b4f2bfa43d18455ac00acc) during a migration from bitbucket, LFS downloads fail
|
|
|
@ -1 +0,0 @@
|
||||||
- markdown files displayed in the UI that have an unescaped backtick in the image alt [could (accidentally) trigger an inline code](https://github.com/yuin/goldmark/issues/456)
|
|
|
@ -1 +0,0 @@
|
||||||
- markdown `[*[a]*](b)` [is incorrectly rendered as `<p><a href="b"><em>[a]</em></a></p>`](https://github.com/yuin/goldmark/issues/457)
|
|
|
@ -1 +0,0 @@
|
||||||
- [commit](https://codeberg.org/forgejo/forgejo/commit/358cd67c4f316f2d4f1d3be6dcb891dc04a2ff07) reduce memory usage for chunked artifact uploads to S3
|
|
|
@ -7,8 +7,7 @@
|
||||||
"group:postcss",
|
"group:postcss",
|
||||||
"group:linters",
|
"group:linters",
|
||||||
"schedule:daily",
|
"schedule:daily",
|
||||||
"schedule:automergeDaily",
|
"schedule:automergeDaily"
|
||||||
"local>forgejo-contrib/forgejo-renovate//go.json"
|
|
||||||
],
|
],
|
||||||
"ignorePresets": [
|
"ignorePresets": [
|
||||||
":semanticPrefixFixDepsChoreOthers",
|
":semanticPrefixFixDepsChoreOthers",
|
||||||
|
@ -18,7 +17,7 @@
|
||||||
"semanticCommits": "disabled",
|
"semanticCommits": "disabled",
|
||||||
"automergeStrategy": "merge-commit",
|
"automergeStrategy": "merge-commit",
|
||||||
"postUpdateOptions": ["gomodTidy", "gomodUpdateImportPaths", "npmDedupe"],
|
"postUpdateOptions": ["gomodTidy", "gomodUpdateImportPaths", "npmDedupe"],
|
||||||
"prConcurrentLimit": 10,
|
"prConcurrentLimit": 5,
|
||||||
"internalChecksFilter": "strict",
|
"internalChecksFilter": "strict",
|
||||||
"osvVulnerabilityAlerts": true,
|
"osvVulnerabilityAlerts": true,
|
||||||
"labels": ["dependency-upgrade"],
|
"labels": ["dependency-upgrade"],
|
||||||
|
@ -57,20 +56,10 @@
|
||||||
{
|
{
|
||||||
"description": "elasticsearch CI images are published about once a month and do not use semantic versioning or short tags",
|
"description": "elasticsearch CI images are published about once a month and do not use semantic versioning or short tags",
|
||||||
"matchDepNames": [
|
"matchDepNames": [
|
||||||
"elasticsearch"
|
"elasticsearch",
|
||||||
],
|
],
|
||||||
"extends": ["schedule:quarterly"]
|
"extends": ["schedule:quarterly"]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"description": "devcontainer is an optional tool used by some Forgejo contributors when working on the codebase",
|
|
||||||
"matchPackagePrefixes": [
|
|
||||||
"ghcr.io/devcontainers/features/",
|
|
||||||
"ghcr.io/devcontainers-contrib/features/"
|
|
||||||
],
|
|
||||||
"groupName": "devcontainer packages",
|
|
||||||
"extends": ["schedule:quarterly"],
|
|
||||||
"automerge": true
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"description": "Group golang packages",
|
"description": "Group golang packages",
|
||||||
"matchDepNames": [
|
"matchDepNames": [
|
||||||
|
@ -93,8 +82,7 @@
|
||||||
"matchDatasources": ["docker"],
|
"matchDatasources": ["docker"],
|
||||||
"matchPackageNames": ["ghcr.io/visualon/renovate"],
|
"matchPackageNames": ["ghcr.io/visualon/renovate"],
|
||||||
"matchUpdateTypes": ["minor", "patch", "digest"],
|
"matchUpdateTypes": ["minor", "patch", "digest"],
|
||||||
"automerge": true,
|
"automerge": true
|
||||||
"groupName": "renovate"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"description": "Split minor and patch updates",
|
"description": "Split minor and patch updates",
|
||||||
|
@ -159,6 +147,8 @@
|
||||||
"@playwright/",
|
"@playwright/",
|
||||||
"@stoplight/spectral-cli",
|
"@stoplight/spectral-cli",
|
||||||
"@stylistic/",
|
"@stylistic/",
|
||||||
|
"ghcr.io/devcontainers/features/",
|
||||||
|
"ghcr.io/devcontainers-contrib/features/",
|
||||||
"mcr.microsoft.com/devcontainers/"
|
"mcr.microsoft.com/devcontainers/"
|
||||||
],
|
],
|
||||||
"automerge": true
|
"automerge": true
|
||||||
|
@ -197,7 +187,7 @@
|
||||||
"customType": "regex",
|
"customType": "regex",
|
||||||
"fileMatch": ["^Makefile$"],
|
"fileMatch": ["^Makefile$"],
|
||||||
"matchStrings": [
|
"matchStrings": [
|
||||||
" \\?= (?<depName>.+?)@(?<currentValue>.+?) # renovate: datasource=(?<datasource>.+?)(?: packageName=(?<packageName>.+?))?( versioning=(?<versioning>.+?))?\\s"
|
" \\?= (?<depName>.+?)@(?<currentValue>.+?) # renovate: datasource=(?<datasource>.+?)\\s"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -241,12 +241,16 @@ func (ar artifactRoutes) uploadArtifact(ctx *ArtifactContext) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// get upload file size
|
// get upload file size
|
||||||
fileRealTotalSize, contentLength := getUploadFileSize(ctx)
|
fileRealTotalSize, contentLength, err := getUploadFileSize(ctx)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Error get upload file size: %v", err)
|
||||||
|
ctx.Error(http.StatusInternalServerError, "Error get upload file size")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// get artifact retention days
|
// get artifact retention days
|
||||||
expiredDays := setting.Actions.ArtifactRetentionDays
|
expiredDays := setting.Actions.ArtifactRetentionDays
|
||||||
if queryRetentionDays := ctx.Req.URL.Query().Get("retentionDays"); queryRetentionDays != "" {
|
if queryRetentionDays := ctx.Req.URL.Query().Get("retentionDays"); queryRetentionDays != "" {
|
||||||
var err error
|
|
||||||
expiredDays, err = strconv.ParseInt(queryRetentionDays, 10, 64)
|
expiredDays, err = strconv.ParseInt(queryRetentionDays, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("Error parse retention days: %v", err)
|
log.Error("Error parse retention days: %v", err)
|
||||||
|
|
|
@ -39,7 +39,7 @@ func saveUploadChunkBase(st storage.ObjectStorage, ctx *ArtifactContext,
|
||||||
r = io.TeeReader(r, hasher)
|
r = io.TeeReader(r, hasher)
|
||||||
}
|
}
|
||||||
// save chunk to storage
|
// save chunk to storage
|
||||||
writtenSize, err := st.Save(storagePath, r, contentSize)
|
writtenSize, err := st.Save(storagePath, r, -1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return -1, fmt.Errorf("save chunk to storage error: %v", err)
|
return -1, fmt.Errorf("save chunk to storage error: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -208,7 +208,7 @@ func mergeChunksForArtifact(ctx *ArtifactContext, chunks []*chunkFileItem, st st
|
||||||
|
|
||||||
// save merged file
|
// save merged file
|
||||||
storagePath := fmt.Sprintf("%d/%d/%d.%s", artifact.RunID%255, artifact.ID%255, time.Now().UnixNano(), extension)
|
storagePath := fmt.Sprintf("%d/%d/%d.%s", artifact.RunID%255, artifact.ID%255, time.Now().UnixNano(), extension)
|
||||||
written, err := st.Save(storagePath, mergedReader, artifact.FileCompressedSize)
|
written, err := st.Save(storagePath, mergedReader, -1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("save merged file error: %v", err)
|
return fmt.Errorf("save merged file error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,7 +43,7 @@ func validateRunID(ctx *ArtifactContext) (*actions.ActionTask, int64, bool) {
|
||||||
return task, runID, true
|
return task, runID, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func validateRunIDV4(ctx *ArtifactContext, rawRunID string) (*actions.ActionTask, int64, bool) { //nolint:unparam
|
func validateRunIDV4(ctx *ArtifactContext, rawRunID string) (*actions.ActionTask, int64, bool) {
|
||||||
task := ctx.ActionTask
|
task := ctx.ActionTask
|
||||||
runID, err := strconv.ParseInt(rawRunID, 10, 64)
|
runID, err := strconv.ParseInt(rawRunID, 10, 64)
|
||||||
if err != nil || task.Job.RunID != runID {
|
if err != nil || task.Job.RunID != runID {
|
||||||
|
@ -84,11 +84,11 @@ func parseArtifactItemPath(ctx *ArtifactContext) (string, string, bool) {
|
||||||
|
|
||||||
// getUploadFileSize returns the size of the file to be uploaded.
|
// getUploadFileSize returns the size of the file to be uploaded.
|
||||||
// The raw size is the size of the file as reported by the header X-TFS-FileLength.
|
// The raw size is the size of the file as reported by the header X-TFS-FileLength.
|
||||||
func getUploadFileSize(ctx *ArtifactContext) (int64, int64) {
|
func getUploadFileSize(ctx *ArtifactContext) (int64, int64, error) {
|
||||||
contentLength := ctx.Req.ContentLength
|
contentLength := ctx.Req.ContentLength
|
||||||
xTfsLength, _ := strconv.ParseInt(ctx.Req.Header.Get(artifactXTfsFileLengthHeader), 10, 64)
|
xTfsLength, _ := strconv.ParseInt(ctx.Req.Header.Get(artifactXTfsFileLengthHeader), 10, 64)
|
||||||
if xTfsLength > 0 {
|
if xTfsLength > 0 {
|
||||||
return xTfsLength, contentLength
|
return xTfsLength, contentLength, nil
|
||||||
}
|
}
|
||||||
return contentLength, contentLength
|
return contentLength, contentLength, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ var uploadVersionMutex sync.Mutex
|
||||||
|
|
||||||
// saveAsPackageBlob creates a package blob from an upload
|
// saveAsPackageBlob creates a package blob from an upload
|
||||||
// The uploaded blob gets stored in a special upload version to link them to the package/image
|
// The uploaded blob gets stored in a special upload version to link them to the package/image
|
||||||
func saveAsPackageBlob(ctx context.Context, hsr packages_module.HashedSizeReader, pci *packages_service.PackageCreationInfo) (*packages_model.PackageBlob, error) { //nolint:unparam
|
func saveAsPackageBlob(ctx context.Context, hsr packages_module.HashedSizeReader, pci *packages_service.PackageCreationInfo) (*packages_model.PackageBlob, error) {
|
||||||
pb := packages_service.NewPackageBlob(hsr)
|
pb := packages_service.NewPackageBlob(hsr)
|
||||||
|
|
||||||
exists := false
|
exists := false
|
||||||
|
|
|
@ -36,7 +36,7 @@ func apiError(ctx *context.Context, status int, obj any) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func xmlResponse(ctx *context.Context, status int, obj any) { //nolint:unparam
|
func xmlResponse(ctx *context.Context, status int, obj any) {
|
||||||
ctx.Resp.Header().Set("Content-Type", "application/atom+xml; charset=utf-8")
|
ctx.Resp.Header().Set("Content-Type", "application/atom+xml; charset=utf-8")
|
||||||
ctx.Resp.WriteHeader(status)
|
ctx.Resp.WriteHeader(status)
|
||||||
if _, err := ctx.Resp.Write([]byte(xml.Header)); err != nil {
|
if _, err := ctx.Resp.Write([]byte(xml.Header)); err != nil {
|
||||||
|
|
|
@ -1112,15 +1112,6 @@ func Routes() *web.Route {
|
||||||
m.Post("", reqToken(), reqRepoWriter(unit.TypeCode), mustNotBeArchived, bind(api.CreateTagOption{}), repo.CreateTag)
|
m.Post("", reqToken(), reqRepoWriter(unit.TypeCode), mustNotBeArchived, bind(api.CreateTagOption{}), repo.CreateTag)
|
||||||
m.Delete("/*", reqToken(), reqRepoWriter(unit.TypeCode), mustNotBeArchived, repo.DeleteTag)
|
m.Delete("/*", reqToken(), reqRepoWriter(unit.TypeCode), mustNotBeArchived, repo.DeleteTag)
|
||||||
}, reqRepoReader(unit.TypeCode), context.ReferencesGitRepo(true))
|
}, reqRepoReader(unit.TypeCode), context.ReferencesGitRepo(true))
|
||||||
m.Group("/tag_protections", func() {
|
|
||||||
m.Combo("").Get(repo.ListTagProtection).
|
|
||||||
Post(bind(api.CreateTagProtectionOption{}), mustNotBeArchived, repo.CreateTagProtection)
|
|
||||||
m.Group("/{id}", func() {
|
|
||||||
m.Combo("").Get(repo.GetTagProtection).
|
|
||||||
Patch(bind(api.EditTagProtectionOption{}), mustNotBeArchived, repo.EditTagProtection).
|
|
||||||
Delete(repo.DeleteTagProtection)
|
|
||||||
})
|
|
||||||
}, reqToken(), reqAdmin())
|
|
||||||
m.Group("/actions", func() {
|
m.Group("/actions", func() {
|
||||||
m.Get("/tasks", repo.ListActionTasks)
|
m.Get("/tasks", repo.ListActionTasks)
|
||||||
}, reqRepoReader(unit.TypeActions), context.ReferencesGitRepo(true))
|
}, reqRepoReader(unit.TypeActions), context.ReferencesGitRepo(true))
|
||||||
|
|
|
@ -64,7 +64,7 @@ func CompareDiff(ctx *context.APIContext) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_, headGitRepo, ci, _, _ := parseCompareInfo(ctx, api.CreatePullRequestOption{
|
_, _, headGitRepo, ci, _, _ := parseCompareInfo(ctx, api.CreatePullRequestOption{
|
||||||
Base: infos[0],
|
Base: infos[0],
|
||||||
Head: infos[1],
|
Head: infos[1],
|
||||||
})
|
})
|
||||||
|
|
|
@ -406,7 +406,7 @@ func CreatePullRequest(ctx *context.APIContext) {
|
||||||
)
|
)
|
||||||
|
|
||||||
// Get repo/branch information
|
// Get repo/branch information
|
||||||
headRepo, headGitRepo, compareInfo, baseBranch, headBranch := parseCompareInfo(ctx, form)
|
_, headRepo, headGitRepo, compareInfo, baseBranch, headBranch := parseCompareInfo(ctx, form)
|
||||||
if ctx.Written() {
|
if ctx.Written() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -1051,7 +1051,7 @@ func MergePullRequest(ctx *context.APIContext) {
|
||||||
ctx.Status(http.StatusOK)
|
ctx.Status(http.StatusOK)
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption) (*repo_model.Repository, *git.Repository, *git.CompareInfo, string, string) {
|
func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption) (*user_model.User, *repo_model.Repository, *git.Repository, *git.CompareInfo, string, string) {
|
||||||
baseRepo := ctx.Repo.Repository
|
baseRepo := ctx.Repo.Repository
|
||||||
|
|
||||||
// Get compared branches information
|
// Get compared branches information
|
||||||
|
@ -1084,14 +1084,14 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
|
||||||
} else {
|
} else {
|
||||||
ctx.Error(http.StatusInternalServerError, "GetUserByName", err)
|
ctx.Error(http.StatusInternalServerError, "GetUserByName", err)
|
||||||
}
|
}
|
||||||
return nil, nil, nil, "", ""
|
return nil, nil, nil, nil, "", ""
|
||||||
}
|
}
|
||||||
headBranch = headInfos[1]
|
headBranch = headInfos[1]
|
||||||
// The head repository can also point to the same repo
|
// The head repository can also point to the same repo
|
||||||
isSameRepo = ctx.Repo.Owner.ID == headUser.ID
|
isSameRepo = ctx.Repo.Owner.ID == headUser.ID
|
||||||
} else {
|
} else {
|
||||||
ctx.NotFound()
|
ctx.NotFound()
|
||||||
return nil, nil, nil, "", ""
|
return nil, nil, nil, nil, "", ""
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.Repo.PullRequest.SameRepo = isSameRepo
|
ctx.Repo.PullRequest.SameRepo = isSameRepo
|
||||||
|
@ -1099,7 +1099,7 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
|
||||||
// Check if base branch is valid.
|
// Check if base branch is valid.
|
||||||
if !ctx.Repo.GitRepo.IsBranchExist(baseBranch) && !ctx.Repo.GitRepo.IsTagExist(baseBranch) {
|
if !ctx.Repo.GitRepo.IsBranchExist(baseBranch) && !ctx.Repo.GitRepo.IsTagExist(baseBranch) {
|
||||||
ctx.NotFound("BaseNotExist")
|
ctx.NotFound("BaseNotExist")
|
||||||
return nil, nil, nil, "", ""
|
return nil, nil, nil, nil, "", ""
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if current user has fork of repository or in the same repository.
|
// Check if current user has fork of repository or in the same repository.
|
||||||
|
@ -1107,7 +1107,7 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
|
||||||
if headRepo == nil && !isSameRepo {
|
if headRepo == nil && !isSameRepo {
|
||||||
log.Trace("parseCompareInfo[%d]: does not have fork or in same repository", baseRepo.ID)
|
log.Trace("parseCompareInfo[%d]: does not have fork or in same repository", baseRepo.ID)
|
||||||
ctx.NotFound("GetForkedRepo")
|
ctx.NotFound("GetForkedRepo")
|
||||||
return nil, nil, nil, "", ""
|
return nil, nil, nil, nil, "", ""
|
||||||
}
|
}
|
||||||
|
|
||||||
var headGitRepo *git.Repository
|
var headGitRepo *git.Repository
|
||||||
|
@ -1118,7 +1118,7 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
|
||||||
headGitRepo, err = gitrepo.OpenRepository(ctx, headRepo)
|
headGitRepo, err = gitrepo.OpenRepository(ctx, headRepo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Error(http.StatusInternalServerError, "OpenRepository", err)
|
ctx.Error(http.StatusInternalServerError, "OpenRepository", err)
|
||||||
return nil, nil, nil, "", ""
|
return nil, nil, nil, nil, "", ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1127,7 +1127,7 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
headGitRepo.Close()
|
headGitRepo.Close()
|
||||||
ctx.Error(http.StatusInternalServerError, "GetUserRepoPermission", err)
|
ctx.Error(http.StatusInternalServerError, "GetUserRepoPermission", err)
|
||||||
return nil, nil, nil, "", ""
|
return nil, nil, nil, nil, "", ""
|
||||||
}
|
}
|
||||||
if !permBase.CanReadIssuesOrPulls(true) || !permBase.CanRead(unit.TypeCode) {
|
if !permBase.CanReadIssuesOrPulls(true) || !permBase.CanRead(unit.TypeCode) {
|
||||||
if log.IsTrace() {
|
if log.IsTrace() {
|
||||||
|
@ -1138,7 +1138,7 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
|
||||||
}
|
}
|
||||||
headGitRepo.Close()
|
headGitRepo.Close()
|
||||||
ctx.NotFound("Can't read pulls or can't read UnitTypeCode")
|
ctx.NotFound("Can't read pulls or can't read UnitTypeCode")
|
||||||
return nil, nil, nil, "", ""
|
return nil, nil, nil, nil, "", ""
|
||||||
}
|
}
|
||||||
|
|
||||||
// user should have permission to read headrepo's codes
|
// user should have permission to read headrepo's codes
|
||||||
|
@ -1146,7 +1146,7 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
headGitRepo.Close()
|
headGitRepo.Close()
|
||||||
ctx.Error(http.StatusInternalServerError, "GetUserRepoPermission", err)
|
ctx.Error(http.StatusInternalServerError, "GetUserRepoPermission", err)
|
||||||
return nil, nil, nil, "", ""
|
return nil, nil, nil, nil, "", ""
|
||||||
}
|
}
|
||||||
if !permHead.CanRead(unit.TypeCode) {
|
if !permHead.CanRead(unit.TypeCode) {
|
||||||
if log.IsTrace() {
|
if log.IsTrace() {
|
||||||
|
@ -1157,24 +1157,24 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
|
||||||
}
|
}
|
||||||
headGitRepo.Close()
|
headGitRepo.Close()
|
||||||
ctx.NotFound("Can't read headRepo UnitTypeCode")
|
ctx.NotFound("Can't read headRepo UnitTypeCode")
|
||||||
return nil, nil, nil, "", ""
|
return nil, nil, nil, nil, "", ""
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if head branch is valid.
|
// Check if head branch is valid.
|
||||||
if !headGitRepo.IsBranchExist(headBranch) && !headGitRepo.IsTagExist(headBranch) {
|
if !headGitRepo.IsBranchExist(headBranch) && !headGitRepo.IsTagExist(headBranch) {
|
||||||
headGitRepo.Close()
|
headGitRepo.Close()
|
||||||
ctx.NotFound()
|
ctx.NotFound()
|
||||||
return nil, nil, nil, "", ""
|
return nil, nil, nil, nil, "", ""
|
||||||
}
|
}
|
||||||
|
|
||||||
compareInfo, err := headGitRepo.GetCompareInfo(repo_model.RepoPath(baseRepo.Owner.Name, baseRepo.Name), baseBranch, headBranch, false, false)
|
compareInfo, err := headGitRepo.GetCompareInfo(repo_model.RepoPath(baseRepo.Owner.Name, baseRepo.Name), baseBranch, headBranch, false, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
headGitRepo.Close()
|
headGitRepo.Close()
|
||||||
ctx.Error(http.StatusInternalServerError, "GetCompareInfo", err)
|
ctx.Error(http.StatusInternalServerError, "GetCompareInfo", err)
|
||||||
return nil, nil, nil, "", ""
|
return nil, nil, nil, nil, "", ""
|
||||||
}
|
}
|
||||||
|
|
||||||
return headRepo, headGitRepo, compareInfo, baseBranch, headBranch
|
return headUser, headRepo, headGitRepo, compareInfo, baseBranch, headBranch
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdatePullRequest merge PR's baseBranch into headBranch
|
// UpdatePullRequest merge PR's baseBranch into headBranch
|
||||||
|
|
|
@ -107,7 +107,7 @@ func Search(ctx *context.APIContext) {
|
||||||
// - name: sort
|
// - name: sort
|
||||||
// in: query
|
// in: query
|
||||||
// description: sort repos by attribute. Supported values are
|
// description: sort repos by attribute. Supported values are
|
||||||
// "alpha", "created", "updated", "size", "git_size", "lfs_size", "stars", "forks" and "id".
|
// "alpha", "created", "updated", "size", and "id".
|
||||||
// Default is "alpha"
|
// Default is "alpha"
|
||||||
// type: string
|
// type: string
|
||||||
// - name: order
|
// - name: order
|
||||||
|
@ -184,7 +184,7 @@ func Search(ctx *context.APIContext) {
|
||||||
if len(sortOrder) == 0 {
|
if len(sortOrder) == 0 {
|
||||||
sortOrder = "asc"
|
sortOrder = "asc"
|
||||||
}
|
}
|
||||||
if searchModeMap, ok := repo_model.OrderByMap[sortOrder]; ok {
|
if searchModeMap, ok := repo_model.SearchOrderByMap[sortOrder]; ok {
|
||||||
if orderBy, ok := searchModeMap[sortMode]; ok {
|
if orderBy, ok := searchModeMap[sortMode]; ok {
|
||||||
opts.OrderBy = orderBy
|
opts.OrderBy = orderBy
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -7,13 +7,9 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
|
||||||
|
|
||||||
"code.gitea.io/gitea/models"
|
"code.gitea.io/gitea/models"
|
||||||
git_model "code.gitea.io/gitea/models/git"
|
|
||||||
"code.gitea.io/gitea/models/organization"
|
|
||||||
repo_model "code.gitea.io/gitea/models/repo"
|
repo_model "code.gitea.io/gitea/models/repo"
|
||||||
user_model "code.gitea.io/gitea/models/user"
|
|
||||||
api "code.gitea.io/gitea/modules/structs"
|
api "code.gitea.io/gitea/modules/structs"
|
||||||
"code.gitea.io/gitea/modules/web"
|
"code.gitea.io/gitea/modules/web"
|
||||||
"code.gitea.io/gitea/routers/api/v1/utils"
|
"code.gitea.io/gitea/routers/api/v1/utils"
|
||||||
|
@ -318,349 +314,3 @@ func DeleteTag(ctx *context.APIContext) {
|
||||||
|
|
||||||
ctx.Status(http.StatusNoContent)
|
ctx.Status(http.StatusNoContent)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListTagProtection lists tag protections for a repo
|
|
||||||
func ListTagProtection(ctx *context.APIContext) {
|
|
||||||
// swagger:operation GET /repos/{owner}/{repo}/tag_protections repository repoListTagProtection
|
|
||||||
// ---
|
|
||||||
// summary: List tag protections for a repository
|
|
||||||
// produces:
|
|
||||||
// - application/json
|
|
||||||
// parameters:
|
|
||||||
// - name: owner
|
|
||||||
// in: path
|
|
||||||
// description: owner of the repo
|
|
||||||
// type: string
|
|
||||||
// required: true
|
|
||||||
// - name: repo
|
|
||||||
// in: path
|
|
||||||
// description: name of the repo
|
|
||||||
// type: string
|
|
||||||
// required: true
|
|
||||||
// responses:
|
|
||||||
// "200":
|
|
||||||
// "$ref": "#/responses/TagProtectionList"
|
|
||||||
|
|
||||||
repo := ctx.Repo.Repository
|
|
||||||
pts, err := git_model.GetProtectedTags(ctx, repo.ID)
|
|
||||||
if err != nil {
|
|
||||||
ctx.Error(http.StatusInternalServerError, "GetProtectedTags", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
apiPts := make([]*api.TagProtection, len(pts))
|
|
||||||
for i := range pts {
|
|
||||||
apiPts[i] = convert.ToTagProtection(ctx, pts[i], repo)
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.JSON(http.StatusOK, apiPts)
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetTagProtection gets a tag protection
|
|
||||||
func GetTagProtection(ctx *context.APIContext) {
|
|
||||||
// swagger:operation GET /repos/{owner}/{repo}/tag_protections/{id} repository repoGetTagProtection
|
|
||||||
// ---
|
|
||||||
// summary: Get a specific tag protection for the repository
|
|
||||||
// produces:
|
|
||||||
// - application/json
|
|
||||||
// parameters:
|
|
||||||
// - name: owner
|
|
||||||
// in: path
|
|
||||||
// description: owner of the repo
|
|
||||||
// type: string
|
|
||||||
// required: true
|
|
||||||
// - name: repo
|
|
||||||
// in: path
|
|
||||||
// description: name of the repo
|
|
||||||
// type: string
|
|
||||||
// required: true
|
|
||||||
// - name: id
|
|
||||||
// in: path
|
|
||||||
// description: id of the tag protect to get
|
|
||||||
// type: integer
|
|
||||||
// required: true
|
|
||||||
// responses:
|
|
||||||
// "200":
|
|
||||||
// "$ref": "#/responses/TagProtection"
|
|
||||||
// "404":
|
|
||||||
// "$ref": "#/responses/notFound"
|
|
||||||
|
|
||||||
repo := ctx.Repo.Repository
|
|
||||||
id := ctx.ParamsInt64(":id")
|
|
||||||
pt, err := git_model.GetProtectedTagByID(ctx, id)
|
|
||||||
if err != nil {
|
|
||||||
ctx.Error(http.StatusInternalServerError, "GetProtectedTagByID", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if pt == nil || repo.ID != pt.RepoID {
|
|
||||||
ctx.NotFound()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.JSON(http.StatusOK, convert.ToTagProtection(ctx, pt, repo))
|
|
||||||
}
|
|
||||||
|
|
||||||
// CreateTagProtection creates a tag protection for a repo
|
|
||||||
func CreateTagProtection(ctx *context.APIContext) {
|
|
||||||
// swagger:operation POST /repos/{owner}/{repo}/tag_protections repository repoCreateTagProtection
|
|
||||||
// ---
|
|
||||||
// summary: Create a tag protections for a repository
|
|
||||||
// consumes:
|
|
||||||
// - application/json
|
|
||||||
// produces:
|
|
||||||
// - application/json
|
|
||||||
// parameters:
|
|
||||||
// - name: owner
|
|
||||||
// in: path
|
|
||||||
// description: owner of the repo
|
|
||||||
// type: string
|
|
||||||
// required: true
|
|
||||||
// - name: repo
|
|
||||||
// in: path
|
|
||||||
// description: name of the repo
|
|
||||||
// type: string
|
|
||||||
// required: true
|
|
||||||
// - name: body
|
|
||||||
// in: body
|
|
||||||
// schema:
|
|
||||||
// "$ref": "#/definitions/CreateTagProtectionOption"
|
|
||||||
// responses:
|
|
||||||
// "201":
|
|
||||||
// "$ref": "#/responses/TagProtection"
|
|
||||||
// "403":
|
|
||||||
// "$ref": "#/responses/forbidden"
|
|
||||||
// "404":
|
|
||||||
// "$ref": "#/responses/notFound"
|
|
||||||
// "422":
|
|
||||||
// "$ref": "#/responses/validationError"
|
|
||||||
// "423":
|
|
||||||
// "$ref": "#/responses/repoArchivedError"
|
|
||||||
|
|
||||||
form := web.GetForm(ctx).(*api.CreateTagProtectionOption)
|
|
||||||
repo := ctx.Repo.Repository
|
|
||||||
|
|
||||||
namePattern := strings.TrimSpace(form.NamePattern)
|
|
||||||
if namePattern == "" {
|
|
||||||
ctx.Error(http.StatusBadRequest, "name_pattern are empty", "name_pattern are empty")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(form.WhitelistUsernames) == 0 && len(form.WhitelistTeams) == 0 {
|
|
||||||
ctx.Error(http.StatusBadRequest, "both whitelist_usernames and whitelist_teams are empty", "both whitelist_usernames and whitelist_teams are empty")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
pt, err := git_model.GetProtectedTagByNamePattern(ctx, repo.ID, namePattern)
|
|
||||||
if err != nil {
|
|
||||||
ctx.Error(http.StatusInternalServerError, "GetProtectTagOfRepo", err)
|
|
||||||
return
|
|
||||||
} else if pt != nil {
|
|
||||||
ctx.Error(http.StatusForbidden, "Create tag protection", "Tag protection already exist")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var whitelistUsers, whitelistTeams []int64
|
|
||||||
whitelistUsers, err = user_model.GetUserIDsByNames(ctx, form.WhitelistUsernames, false)
|
|
||||||
if err != nil {
|
|
||||||
if user_model.IsErrUserNotExist(err) {
|
|
||||||
ctx.Error(http.StatusUnprocessableEntity, "User does not exist", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
ctx.Error(http.StatusInternalServerError, "GetUserIDsByNames", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if repo.Owner.IsOrganization() {
|
|
||||||
whitelistTeams, err = organization.GetTeamIDsByNames(ctx, repo.OwnerID, form.WhitelistTeams, false)
|
|
||||||
if err != nil {
|
|
||||||
if organization.IsErrTeamNotExist(err) {
|
|
||||||
ctx.Error(http.StatusUnprocessableEntity, "Team does not exist", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
ctx.Error(http.StatusInternalServerError, "GetTeamIDsByNames", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protectTag := &git_model.ProtectedTag{
|
|
||||||
RepoID: repo.ID,
|
|
||||||
NamePattern: strings.TrimSpace(namePattern),
|
|
||||||
AllowlistUserIDs: whitelistUsers,
|
|
||||||
AllowlistTeamIDs: whitelistTeams,
|
|
||||||
}
|
|
||||||
if err := git_model.InsertProtectedTag(ctx, protectTag); err != nil {
|
|
||||||
ctx.Error(http.StatusInternalServerError, "InsertProtectedTag", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
pt, err = git_model.GetProtectedTagByID(ctx, protectTag.ID)
|
|
||||||
if err != nil {
|
|
||||||
ctx.Error(http.StatusInternalServerError, "GetProtectedTagByID", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if pt == nil || pt.RepoID != repo.ID {
|
|
||||||
ctx.Error(http.StatusInternalServerError, "New tag protection not found", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.JSON(http.StatusCreated, convert.ToTagProtection(ctx, pt, repo))
|
|
||||||
}
|
|
||||||
|
|
||||||
// EditTagProtection edits a tag protection for a repo
|
|
||||||
func EditTagProtection(ctx *context.APIContext) {
|
|
||||||
// swagger:operation PATCH /repos/{owner}/{repo}/tag_protections/{id} repository repoEditTagProtection
|
|
||||||
// ---
|
|
||||||
// summary: Edit a tag protections for a repository. Only fields that are set will be changed
|
|
||||||
// consumes:
|
|
||||||
// - application/json
|
|
||||||
// produces:
|
|
||||||
// - application/json
|
|
||||||
// parameters:
|
|
||||||
// - name: owner
|
|
||||||
// in: path
|
|
||||||
// description: owner of the repo
|
|
||||||
// type: string
|
|
||||||
// required: true
|
|
||||||
// - name: repo
|
|
||||||
// in: path
|
|
||||||
// description: name of the repo
|
|
||||||
// type: string
|
|
||||||
// required: true
|
|
||||||
// - name: id
|
|
||||||
// in: path
|
|
||||||
// description: id of protected tag
|
|
||||||
// type: integer
|
|
||||||
// required: true
|
|
||||||
// - name: body
|
|
||||||
// in: body
|
|
||||||
// schema:
|
|
||||||
// "$ref": "#/definitions/EditTagProtectionOption"
|
|
||||||
// responses:
|
|
||||||
// "200":
|
|
||||||
// "$ref": "#/responses/TagProtection"
|
|
||||||
// "404":
|
|
||||||
// "$ref": "#/responses/notFound"
|
|
||||||
// "422":
|
|
||||||
// "$ref": "#/responses/validationError"
|
|
||||||
// "423":
|
|
||||||
// "$ref": "#/responses/repoArchivedError"
|
|
||||||
|
|
||||||
repo := ctx.Repo.Repository
|
|
||||||
form := web.GetForm(ctx).(*api.EditTagProtectionOption)
|
|
||||||
|
|
||||||
id := ctx.ParamsInt64(":id")
|
|
||||||
pt, err := git_model.GetProtectedTagByID(ctx, id)
|
|
||||||
if err != nil {
|
|
||||||
ctx.Error(http.StatusInternalServerError, "GetProtectedTagByID", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if pt == nil || pt.RepoID != repo.ID {
|
|
||||||
ctx.NotFound()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if form.NamePattern != nil {
|
|
||||||
pt.NamePattern = *form.NamePattern
|
|
||||||
}
|
|
||||||
|
|
||||||
var whitelistUsers, whitelistTeams []int64
|
|
||||||
if form.WhitelistTeams != nil {
|
|
||||||
if repo.Owner.IsOrganization() {
|
|
||||||
whitelistTeams, err = organization.GetTeamIDsByNames(ctx, repo.OwnerID, form.WhitelistTeams, false)
|
|
||||||
if err != nil {
|
|
||||||
if organization.IsErrTeamNotExist(err) {
|
|
||||||
ctx.Error(http.StatusUnprocessableEntity, "Team does not exist", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
ctx.Error(http.StatusInternalServerError, "GetTeamIDsByNames", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pt.AllowlistTeamIDs = whitelistTeams
|
|
||||||
}
|
|
||||||
|
|
||||||
if form.WhitelistUsernames != nil {
|
|
||||||
whitelistUsers, err = user_model.GetUserIDsByNames(ctx, form.WhitelistUsernames, false)
|
|
||||||
if err != nil {
|
|
||||||
if user_model.IsErrUserNotExist(err) {
|
|
||||||
ctx.Error(http.StatusUnprocessableEntity, "User does not exist", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
ctx.Error(http.StatusInternalServerError, "GetUserIDsByNames", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
pt.AllowlistUserIDs = whitelistUsers
|
|
||||||
}
|
|
||||||
|
|
||||||
err = git_model.UpdateProtectedTag(ctx, pt)
|
|
||||||
if err != nil {
|
|
||||||
ctx.Error(http.StatusInternalServerError, "UpdateProtectedTag", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
pt, err = git_model.GetProtectedTagByID(ctx, id)
|
|
||||||
if err != nil {
|
|
||||||
ctx.Error(http.StatusInternalServerError, "GetProtectedTagByID", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if pt == nil || pt.RepoID != repo.ID {
|
|
||||||
ctx.Error(http.StatusInternalServerError, "New tag protection not found", "New tag protection not found")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.JSON(http.StatusOK, convert.ToTagProtection(ctx, pt, repo))
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeleteTagProtection
|
|
||||||
func DeleteTagProtection(ctx *context.APIContext) {
|
|
||||||
// swagger:operation DELETE /repos/{owner}/{repo}/tag_protections/{id} repository repoDeleteTagProtection
|
|
||||||
// ---
|
|
||||||
// summary: Delete a specific tag protection for the repository
|
|
||||||
// produces:
|
|
||||||
// - application/json
|
|
||||||
// parameters:
|
|
||||||
// - name: owner
|
|
||||||
// in: path
|
|
||||||
// description: owner of the repo
|
|
||||||
// type: string
|
|
||||||
// required: true
|
|
||||||
// - name: repo
|
|
||||||
// in: path
|
|
||||||
// description: name of the repo
|
|
||||||
// type: string
|
|
||||||
// required: true
|
|
||||||
// - name: id
|
|
||||||
// in: path
|
|
||||||
// description: id of protected tag
|
|
||||||
// type: integer
|
|
||||||
// required: true
|
|
||||||
// responses:
|
|
||||||
// "204":
|
|
||||||
// "$ref": "#/responses/empty"
|
|
||||||
// "404":
|
|
||||||
// "$ref": "#/responses/notFound"
|
|
||||||
|
|
||||||
repo := ctx.Repo.Repository
|
|
||||||
id := ctx.ParamsInt64(":id")
|
|
||||||
pt, err := git_model.GetProtectedTagByID(ctx, id)
|
|
||||||
if err != nil {
|
|
||||||
ctx.Error(http.StatusInternalServerError, "GetProtectedTagByID", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if pt == nil || pt.RepoID != repo.ID {
|
|
||||||
ctx.NotFound()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
err = git_model.DeleteProtectedTag(ctx, pt)
|
|
||||||
if err != nil {
|
|
||||||
ctx.Error(http.StatusInternalServerError, "DeleteProtectedTag", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.Status(http.StatusNoContent)
|
|
||||||
}
|
|
||||||
|
|
|
@ -184,12 +184,6 @@ type swaggerParameterBodies struct {
|
||||||
// in:body
|
// in:body
|
||||||
CreateTagOption api.CreateTagOption
|
CreateTagOption api.CreateTagOption
|
||||||
|
|
||||||
// in:body
|
|
||||||
CreateTagProtectionOption api.CreateTagProtectionOption
|
|
||||||
|
|
||||||
// in:body
|
|
||||||
EditTagProtectionOption api.EditTagProtectionOption
|
|
||||||
|
|
||||||
// in:body
|
// in:body
|
||||||
CreateAccessTokenOption api.CreateAccessTokenOption
|
CreateAccessTokenOption api.CreateAccessTokenOption
|
||||||
|
|
||||||
|
|
|
@ -70,20 +70,6 @@ type swaggerResponseAnnotatedTag struct {
|
||||||
Body api.AnnotatedTag `json:"body"`
|
Body api.AnnotatedTag `json:"body"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// TagProtectionList
|
|
||||||
// swagger:response TagProtectionList
|
|
||||||
type swaggerResponseTagProtectionList struct {
|
|
||||||
// in:body
|
|
||||||
Body []api.TagProtection `json:"body"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// TagProtection
|
|
||||||
// swagger:response TagProtection
|
|
||||||
type swaggerResponseTagProtection struct {
|
|
||||||
// in:body
|
|
||||||
Body api.TagProtection `json:"body"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reference
|
// Reference
|
||||||
// swagger:response Reference
|
// swagger:response Reference
|
||||||
type swaggerResponseReference struct {
|
type swaggerResponseReference struct {
|
||||||
|
|
|
@ -46,5 +46,5 @@ type swaggerResponseUserHeatmapData struct {
|
||||||
// swagger:response UserSettings
|
// swagger:response UserSettings
|
||||||
type swaggerResponseUserSettings struct {
|
type swaggerResponseUserSettings struct {
|
||||||
// in:body
|
// in:body
|
||||||
Body api.UserSettings `json:"body"`
|
Body []api.UserSettings `json:"body"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -434,7 +434,7 @@ func preReceiveBranch(ctx *preReceiveContext, oldCommitID, newCommitID string, r
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func preReceiveTag(ctx *preReceiveContext, oldCommitID, newCommitID string, refFullName git.RefName) { //nolint:unparam
|
func preReceiveTag(ctx *preReceiveContext, oldCommitID, newCommitID string, refFullName git.RefName) {
|
||||||
if !ctx.AssertCanWriteCode() {
|
if !ctx.AssertCanWriteCode() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -470,7 +470,7 @@ func preReceiveTag(ctx *preReceiveContext, oldCommitID, newCommitID string, refF
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func preReceiveFor(ctx *preReceiveContext, oldCommitID, newCommitID string, refFullName git.RefName) { //nolint:unparam
|
func preReceiveFor(ctx *preReceiveContext, oldCommitID, newCommitID string, refFullName git.RefName) {
|
||||||
if !ctx.AssertCreatePullRequest() {
|
if !ctx.AssertCreatePullRequest() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,6 @@ import (
|
||||||
activities_model "code.gitea.io/gitea/models/activities"
|
activities_model "code.gitea.io/gitea/models/activities"
|
||||||
"code.gitea.io/gitea/models/db"
|
"code.gitea.io/gitea/models/db"
|
||||||
"code.gitea.io/gitea/modules/base"
|
"code.gitea.io/gitea/modules/base"
|
||||||
"code.gitea.io/gitea/modules/cache"
|
|
||||||
"code.gitea.io/gitea/modules/graceful"
|
"code.gitea.io/gitea/modules/graceful"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
@ -212,14 +211,6 @@ func SelfCheck(ctx *context.Context) {
|
||||||
|
|
||||||
ctx.Data["DatabaseCheckHasProblems"] = hasProblem
|
ctx.Data["DatabaseCheckHasProblems"] = hasProblem
|
||||||
}
|
}
|
||||||
|
|
||||||
elapsed, err := cache.Test()
|
|
||||||
if err != nil {
|
|
||||||
ctx.Data["CacheError"] = err
|
|
||||||
} else if elapsed > cache.SlowCacheThreshold {
|
|
||||||
ctx.Data["CacheSlow"] = fmt.Sprint(elapsed)
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.HTML(http.StatusOK, tplSelfCheck)
|
ctx.HTML(http.StatusOK, tplSelfCheck)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@ import (
|
||||||
|
|
||||||
system_model "code.gitea.io/gitea/models/system"
|
system_model "code.gitea.io/gitea/models/system"
|
||||||
"code.gitea.io/gitea/modules/base"
|
"code.gitea.io/gitea/modules/base"
|
||||||
"code.gitea.io/gitea/modules/cache"
|
|
||||||
"code.gitea.io/gitea/modules/git"
|
"code.gitea.io/gitea/modules/git"
|
||||||
"code.gitea.io/gitea/modules/json"
|
"code.gitea.io/gitea/modules/json"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
|
@ -43,22 +42,6 @@ func SendTestMail(ctx *context.Context) {
|
||||||
ctx.Redirect(setting.AppSubURL + "/admin/config")
|
ctx.Redirect(setting.AppSubURL + "/admin/config")
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestCache test the cache settings
|
|
||||||
func TestCache(ctx *context.Context) {
|
|
||||||
elapsed, err := cache.Test()
|
|
||||||
if err != nil {
|
|
||||||
ctx.Flash.Error(ctx.Tr("admin.config.cache_test_failed", err))
|
|
||||||
} else {
|
|
||||||
if elapsed > cache.SlowCacheThreshold {
|
|
||||||
ctx.Flash.Warning(ctx.Tr("admin.config.cache_test_slow", elapsed))
|
|
||||||
} else {
|
|
||||||
ctx.Flash.Info(ctx.Tr("admin.config.cache_test_succeeded", elapsed))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.Redirect(setting.AppSubURL + "/admin/config")
|
|
||||||
}
|
|
||||||
|
|
||||||
func shadowPasswordKV(cfgItem, splitter string) string {
|
func shadowPasswordKV(cfgItem, splitter string) string {
|
||||||
fields := strings.Split(cfgItem, splitter)
|
fields := strings.Split(cfgItem, splitter)
|
||||||
for i := 0; i < len(fields); i++ {
|
for i := 0; i < len(fields); i++ {
|
||||||
|
@ -200,7 +183,7 @@ func ChangeConfig(ctx *context.Context) {
|
||||||
value := ctx.FormString("value")
|
value := ctx.FormString("value")
|
||||||
cfg := setting.Config()
|
cfg := setting.Config()
|
||||||
|
|
||||||
marshalBool := func(v string) (string, error) { //nolint:unparam
|
marshalBool := func(v string) (string, error) {
|
||||||
if b, _ := strconv.ParseBool(v); b {
|
if b, _ := strconv.ParseBool(v); b {
|
||||||
return "true", nil
|
return "true", nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,6 @@ package explore
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
|
||||||
|
|
||||||
"code.gitea.io/gitea/models/db"
|
"code.gitea.io/gitea/models/db"
|
||||||
repo_model "code.gitea.io/gitea/models/repo"
|
repo_model "code.gitea.io/gitea/models/repo"
|
||||||
|
@ -58,18 +57,47 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) {
|
||||||
orderBy db.SearchOrderBy
|
orderBy db.SearchOrderBy
|
||||||
)
|
)
|
||||||
|
|
||||||
sortOrder := strings.ToLower(ctx.FormString("sort"))
|
sortOrder := ctx.FormString("sort")
|
||||||
if sortOrder == "" {
|
if sortOrder == "" {
|
||||||
sortOrder = setting.UI.ExploreDefaultSort
|
sortOrder = setting.UI.ExploreDefaultSort
|
||||||
}
|
}
|
||||||
|
ctx.Data["SortType"] = sortOrder
|
||||||
|
|
||||||
if order, ok := repo_model.OrderByFlatMap[sortOrder]; ok {
|
switch sortOrder {
|
||||||
orderBy = order
|
case "newest":
|
||||||
} else {
|
orderBy = db.SearchOrderByNewest
|
||||||
sortOrder = "recentupdate"
|
case "oldest":
|
||||||
|
orderBy = db.SearchOrderByOldest
|
||||||
|
case "leastupdate":
|
||||||
|
orderBy = db.SearchOrderByLeastUpdated
|
||||||
|
case "reversealphabetically":
|
||||||
|
orderBy = db.SearchOrderByAlphabeticallyReverse
|
||||||
|
case "alphabetically":
|
||||||
|
orderBy = db.SearchOrderByAlphabetically
|
||||||
|
case "reversesize":
|
||||||
|
orderBy = db.SearchOrderBySizeReverse
|
||||||
|
case "size":
|
||||||
|
orderBy = db.SearchOrderBySize
|
||||||
|
case "reversegitsize":
|
||||||
|
orderBy = db.SearchOrderByGitSizeReverse
|
||||||
|
case "gitsize":
|
||||||
|
orderBy = db.SearchOrderByGitSize
|
||||||
|
case "reverselfssize":
|
||||||
|
orderBy = db.SearchOrderByLFSSizeReverse
|
||||||
|
case "lfssize":
|
||||||
|
orderBy = db.SearchOrderByLFSSize
|
||||||
|
case "moststars":
|
||||||
|
orderBy = db.SearchOrderByStarsReverse
|
||||||
|
case "feweststars":
|
||||||
|
orderBy = db.SearchOrderByStars
|
||||||
|
case "mostforks":
|
||||||
|
orderBy = db.SearchOrderByForksReverse
|
||||||
|
case "fewestforks":
|
||||||
|
orderBy = db.SearchOrderByForks
|
||||||
|
default:
|
||||||
|
ctx.Data["SortType"] = "recentupdate"
|
||||||
orderBy = db.SearchOrderByRecentUpdated
|
orderBy = db.SearchOrderByRecentUpdated
|
||||||
}
|
}
|
||||||
ctx.Data["SortType"] = sortOrder
|
|
||||||
|
|
||||||
keyword := ctx.FormTrim("q")
|
keyword := ctx.FormTrim("q")
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ func redirectToBadge(ctx *context_module.Context, label, text, color string) {
|
||||||
ctx.Redirect(getBadgeURL(ctx, label, text, color))
|
ctx.Redirect(getBadgeURL(ctx, label, text, color))
|
||||||
}
|
}
|
||||||
|
|
||||||
func errorBadge(ctx *context_module.Context, label, text string) { //nolint:unparam
|
func errorBadge(ctx *context_module.Context, label, text string) {
|
||||||
ctx.Redirect(getBadgeURL(ctx, label, text, "crimson"))
|
ctx.Redirect(getBadgeURL(ctx, label, text, "crimson"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,8 +19,14 @@ const (
|
||||||
// Contributors render the page to show repository contributors graph
|
// Contributors render the page to show repository contributors graph
|
||||||
func Contributors(ctx *context.Context) {
|
func Contributors(ctx *context.Context) {
|
||||||
ctx.Data["Title"] = ctx.Tr("repo.activity.navbar.contributors")
|
ctx.Data["Title"] = ctx.Tr("repo.activity.navbar.contributors")
|
||||||
|
|
||||||
ctx.Data["PageIsActivity"] = true
|
ctx.Data["PageIsActivity"] = true
|
||||||
ctx.Data["PageIsContributors"] = true
|
ctx.Data["PageIsContributors"] = true
|
||||||
|
|
||||||
|
ctx.PageData["contributionType"] = "commits"
|
||||||
|
|
||||||
|
ctx.PageData["repoLink"] = ctx.Repo.RepoLink
|
||||||
|
|
||||||
ctx.HTML(http.StatusOK, tplContributors)
|
ctx.HTML(http.StatusOK, tplContributors)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue