Compare commits

..

1 commit

Author SHA1 Message Date
Renovate Bot c295b1a5bc Update dependency esbuild-loader to v4.2.0 2024-06-18 00:04:47 +00:00
144 changed files with 1336 additions and 3063 deletions

View file

@ -24,6 +24,3 @@ exclude_dir = [
]
exclude_regex = ["_test.go$", "_gen.go$"]
stop_on_error = true
[log]
main_only = true

View file

@ -87,6 +87,7 @@ code.gitea.io/gitea/models/repo
releaseSorter.Swap
SortReleases
FindReposMapByIDs
SearchOrderBy.String
IsErrTopicNotExist
ErrTopicNotExist.Error
ErrTopicNotExist.Unwrap
@ -210,6 +211,7 @@ code.gitea.io/gitea/modules/json
StdJSON.Indent
code.gitea.io/gitea/modules/markup
IsSameDomain
GetRendererByType
RenderString
IsMarkupFile

View file

@ -6,7 +6,7 @@
"ghcr.io/devcontainers/features/node:1": {
"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/features/python:1": {
"version": "3.12"

View file

@ -22,7 +22,7 @@ jobs:
runs-on: docker
container:
image: ghcr.io/visualon/renovate:37.414.1
image: ghcr.io/visualon/renovate:37.409.1
steps:
- name: Load renovate repo cache

View file

@ -36,7 +36,7 @@ jobs:
- run: make deps-frontend
- run: make lint-frontend
- run: make checks-frontend
- run: make test-frontend-coverage
- run: make test-frontend
- run: make frontend
test-unit:
if: ${{ !startsWith(vars.ROLE, 'forgejo-') }}
@ -57,6 +57,8 @@ jobs:
MINIO_DOMAIN: minio
MINIO_ROOT_USER: 123456
MINIO_ROOT_PASSWORD: 12345678
redis:
image: redis:7.2
steps:
- uses: https://code.forgejo.org/actions/checkout@v3
- uses: https://code.forgejo.org/actions/setup-go@v4
@ -86,59 +88,8 @@ jobs:
env:
RACE_ENABLED: 'true'
TAGS: bindata
TEST_REDIS_SERVER: redis:6379
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:
if: ${{ !startsWith(vars.ROLE, 'forgejo-') }}
runs-on: docker

View file

@ -22,7 +22,6 @@ linters:
- typecheck
- unconvert
- unused
- unparam
- wastedassign
run:

View file

@ -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
ARG GOPROXY
ENV GOPROXY=${GOPROXY:-direct}
ENV GOPROXY ${GOPROXY:-direct}
ARG RELEASE_VERSION
ARG TAGS="sqlite sqlite_unlock_notify"
ENV TAGS="bindata timetzdata $TAGS"
ENV TAGS "bindata timetzdata $TAGS"
ARG CGO_EXTRA_CFLAGS
#
@ -92,8 +92,8 @@ RUN addgroup \
git && \
echo "git:*" | chpasswd -e
ENV USER=git
ENV GITEA_CUSTOM=/data/gitea
ENV USER git
ENV GITEA_CUSTOM /data/gitea
VOLUME ["/data"]

View file

@ -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
ARG GOPROXY
ENV GOPROXY=${GOPROXY:-direct}
ENV GOPROXY ${GOPROXY:-direct}
ARG RELEASE_VERSION
ARG TAGS="sqlite sqlite_unlock_notify"
ENV TAGS="bindata timetzdata $TAGS"
ENV TAGS "bindata timetzdata $TAGS"
ARG CGO_EXTRA_CFLAGS
#
@ -95,17 +95,17 @@ COPY --from=build-env /go/src/code.gitea.io/gitea/contrib/autocompletion/bash_au
#git:git
USER 1000:1000
ENV GITEA_WORK_DIR=/var/lib/gitea
ENV GITEA_CUSTOM=/var/lib/gitea/custom
ENV GITEA_TEMP=/tmp/gitea
ENV TMPDIR=/tmp/gitea
ENV GITEA_WORK_DIR /var/lib/gitea
ENV GITEA_CUSTOM /var/lib/gitea/custom
ENV GITEA_TEMP /tmp/gitea
ENV TMPDIR /tmp/gitea
# Legacy config file for backwards compatibility
# 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 HOME="/var/lib/gitea/git"
ENV GITEA_APP_INI ${GITEA_CUSTOM}/conf/app.ini
ENV HOME "/var/lib/gitea/git"
VOLUME ["/var/lib/gitea", "/etc/gitea"]
WORKDIR /var/lib/gitea

View file

@ -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
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
RENOVATE_NPM_PACKAGE ?= renovate@37.414.1 # renovate: datasource=docker packageName=ghcr.io/visualon/renovate
DOCKER_IMAGE ?= gitea/gitea
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)
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
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
@ -240,7 +237,6 @@ help:
@echo " - lint-md lint markdown files"
@echo " - lint-swagger lint swagger files"
@echo " - lint-templates lint template files"
@echo " - lint-renovate lint renovate files"
@echo " - lint-yaml lint yaml files"
@echo " - lint-spell lint spelling"
@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-major show major release number only"
@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-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 " - webpack build webpack 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
.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
lint-backend-fix: lint-go-fix lint-go-vet lint-editorconfig
@ -438,12 +432,6 @@ lint-css-fix: node_modules
lint-swagger: node_modules
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
lint-md: node_modules
npx markdownlint docs *.md
@ -521,19 +509,10 @@ test-backend:
@echo "Running go test with $(GOTESTFLAGS) -tags '$(TEST_TAGS)'..."
@$(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
test-frontend: node_modules
npx vitest
.PHONY: test-frontend-coverage
test-frontend-coverage: node_modules
npx vitest --coverage --coverage.include 'web_src/**'
.PHONY: test-check
test-check:
@echo "Running test-check...";

File diff suppressed because one or more lines are too long

View file

@ -20,11 +20,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1717974879,
"narHash": "sha256-GTO3C88+5DX171F/gVS3Qga/hOs/eRMxPFpiHq2t+D8=",
"lastModified": 1715534503,
"narHash": "sha256-5ZSVkFadZbFP1THataCaSf0JH2cAH3S29hU9rrxTEqk=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "c7b821ba2e1e635ba5a76d299af62821cbcb09f3",
"rev": "2057814051972fa1453ddfb0d98badbea9b83c06",
"type": "github"
},
"original": {

View file

@ -30,7 +30,6 @@
# backend
go_1_22
gofumpt
];
};
}

15
go.mod
View file

@ -5,7 +5,7 @@ go 1.22.0
toolchain go1.22.4
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.gitea.io/actions-proto-go v0.4.0
code.gitea.io/gitea-vet v0.2.3
@ -39,7 +39,7 @@ require (
github.com/gliderlabs/ssh v0.3.7
github.com/go-ap/activitypub v0.0.0-20231114162308-e219254dc5c9
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-co-op/gocron v1.37.0
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/pprof v0.0.0-20240528025155-186aa0362fba
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/h2non/gock v1.2.0
github.com/hashicorp/go-version v1.6.0
@ -101,12 +101,12 @@ require (
github.com/valyala/fastjson v1.6.4
github.com/xanzy/go-gitlab v0.96.0
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-meta v1.1.0
go.uber.org/mock v0.4.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/oauth2 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/h2non/parth v0.0.0-20190131123155-b4df798d6542 // 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/imdario/mergo v0.3.16 // 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/sagikazarmark/locafero v0.4.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/shopspring/decimal v1.4.0 // 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/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 v4.0.0+incompatible

31
go.sum
View file

@ -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/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
code.forgejo.org/f3/gof3/v3 v3.4.0 h1:60LOo47tAKvr9nVu2qqNjbgRnCKeKx68mRMRBo/hIuA=
code.forgejo.org/f3/gof3/v3 v3.4.0/go.mod h1:9v7foN46KlEr5gywOSQPn1k5BVpPeuBozsLKlgOQ3YM=
code.forgejo.org/f3/gof3/v3 v3.3.1 h1:lG7vT1Y/OIJDcZJE+mm5uycLyOQm0nVwGxnIWcBQ5XY=
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/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4=
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/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.14 h1:PyEwo2Vudraa0x/Wl6eDRRW2NXBvekgfxyydcM0WGE0=
github.com/go-chi/chi/v5 v5.0.14/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
github.com/go-chi/chi/v5 v5.0.11 h1:BnpYbFZ3T3S1WMpD79r7R5ThWX40TaFB7L31Y8xqSwA=
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/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58=
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/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
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/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w=
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/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-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU=
github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk=
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c=
github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
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/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
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/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/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/go.mod h1:TJJQYtLe/BeEmEjelI3b7xNZjzAukEkeWKmoakvaOoI=
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/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/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/go.mod h1:b/AvD03P0KHj4yuihb+VtLD6bYYgsy0zqBzPCRjkCNs=
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.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.7.4 h1:BDXOHExt+A7gwPCJgPIIq7ENvceR7we7rOS9TNoLZeg=
github.com/yuin/goldmark v1.7.4/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
github.com/yuin/goldmark v1.7.2 h1:NjGd7lO7zrUn/A7eKwn5PEOt4ONYGqpxSEeZuduvgxc=
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/go.mod h1:ovIvrum6DQJA4QsJSovrkC4saKHQVs7TvcaeO8AIl5I=
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/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/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ=
golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E=
golang.org/x/image v0.17.0 h1:nTRVVdajgB8zCMZVsViyzhnMKPwYeroEERRC64JuLco=
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/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=

View file

@ -18,6 +18,12 @@ const (
SearchOrderByRecentUpdated SearchOrderBy = "updated_unix DESC"
SearchOrderByOldest SearchOrderBy = "created_unix ASC"
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"
SearchOrderByIDReverse SearchOrderBy = "id DESC"
SearchOrderByStars SearchOrderBy = "num_stars ASC"

View file

@ -215,15 +215,16 @@ func fileTimestampToTime(timestamp int64) time.Time {
return time.UnixMicro(timestamp)
}
func (f *file) loadMetaByPath() error {
func (f *file) loadMetaByPath() (*dbfsMeta, error) {
var fileMeta dbfsMeta
if ok, err := db.GetEngine(f.ctx).Where("full_path = ?", f.fullPath).Get(&fileMeta); err != nil {
return err
return nil, err
} else if ok {
f.metaID = fileMeta.ID
f.blockSize = fileMeta.BlockSize
return &fileMeta, nil
}
return nil
return nil, nil
}
func (f *file) open(flag int) (err error) {
@ -287,7 +288,10 @@ func (f *file) createEmpty() error {
if err != nil {
return err
}
return f.loadMetaByPath()
if _, err = f.loadMetaByPath(); err != nil {
return err
}
return nil
}
func (f *file) truncate() error {
@ -364,5 +368,8 @@ func buildPath(path string) string {
func newDbFile(ctx context.Context, path string) (*file, error) {
path = buildPath(path)
f := &file{ctx: ctx, fullPath: path, blockSize: defaultFileBlockSize}
return f, f.loadMetaByPath()
if _, err := f.loadMetaByPath(); err != nil {
return nil, err
}
return f, nil
}

View file

@ -110,19 +110,6 @@ func GetProtectedTagByID(ctx context.Context, id int64) (*ProtectedTag, error) {
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.
// 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) {

View file

@ -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() {
return
return sess
}
start := 0
@ -109,9 +109,11 @@ func applyLimit(sess *xorm.Session, opts *IssuesOptions) {
start = (opts.Paginator.Page - 1) * opts.Paginator.PageSize
}
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 opts.LabelIDs[0] == 0 {
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 {
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 {
sess.And("issue.milestone_id = 0")
} else if len(opts.MilestoneIDs) > 0 {
@ -149,9 +153,11 @@ func applyMilestoneCondition(sess *xorm.Session, opts *IssuesOptions) {
From("milestone").
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
sess.Join("INNER", "project_issue", "issue.id = project_issue.issue_id").
And("project_issue.project_id=?", opts.ProjectID)
@ -160,9 +166,10 @@ func applyProjectCondition(sess *xorm.Session, opts *IssuesOptions) {
}
// opts.ProjectID == 0 means all projects,
// 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,
// do not need to apply any condition
if opts.ProjectColumnID > 0 {
@ -170,9 +177,10 @@ func applyProjectColumnCondition(sess *xorm.Session, opts *IssuesOptions) {
} else if opts.ProjectColumnID == db.NoConditionID {
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 {
opts.RepoCond = builder.Eq{"issue.repo_id": opts.RepoIDs[0]}
} else if len(opts.RepoIDs) > 1 {
@ -187,9 +195,10 @@ func applyRepoConditions(sess *xorm.Session, opts *IssuesOptions) {
if opts.RepoCond != nil {
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 {
sess.In("issue.id", opts.IssueIDs)
}
@ -252,6 +261,8 @@ func applyConditions(sess *xorm.Session, opts *IssuesOptions) {
if opts.User != nil {
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
@ -328,22 +339,22 @@ func issuePullAccessibleRepoCond(repoIDstr string, userID int64, org *organizati
return cond
}
func applyAssigneeCondition(sess *xorm.Session, assigneeID int64) {
sess.Join("INNER", "issue_assignees", "issue.id = issue_assignees.issue_id").
func applyAssigneeCondition(sess *xorm.Session, assigneeID int64) *xorm.Session {
return sess.Join("INNER", "issue_assignees", "issue.id = issue_assignees.issue_id").
And("issue_assignees.assignee_id = ?", assigneeID)
}
func applyPosterCondition(sess *xorm.Session, posterID int64) {
sess.And("issue.poster_id=?", posterID)
func applyPosterCondition(sess *xorm.Session, posterID int64) *xorm.Session {
return sess.And("issue.poster_id=?", posterID)
}
func applyMentionedCondition(sess *xorm.Session, mentionedID int64) {
sess.Join("INNER", "issue_user", "issue.id = issue_user.issue_id").
func applyMentionedCondition(sess *xorm.Session, mentionedID int64) *xorm.Session {
return sess.Join("INNER", "issue_user", "issue.id = issue_user.issue_id").
And("issue_user.is_mentioned = ?", true).
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").
From("team_user").
Where(builder.Eq{"team_user.uid": reviewRequestedID})
@ -364,11 +375,11 @@ func applyReviewRequestedCondition(sess *xorm.Session, reviewRequestedID int64)
),
builder.In("review.id", maxReview),
))
sess.Where("issue.poster_id <> ?", reviewRequestedID).
return sess.Where("issue.poster_id <> ?", reviewRequestedID).
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
// any pull requests already returned by the review requested filter.
notPoster := builder.Neq{"issue.poster_id": reviewedID}
@ -395,11 +406,11 @@ func applyReviewedCondition(sess *xorm.Session, reviewedID int64) {
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) {
sess.And(
func applySubscribedCondition(sess *xorm.Session, subscriberID int64) *xorm.Session {
return sess.And(
builder.
NotIn("issue.id",
builder.Select("issue_id").

View file

@ -28,7 +28,7 @@ type PullRequestsOptions struct {
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.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)
}
return sess
return sess, nil
}
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
}
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))
if err != nil {
log.Error("Count PRs: %v", err)
return nil, maxResults, err
}
findSession := listPullRequestStatement(ctx, baseRepoID, opts)
findSession, err := listPullRequestStatement(ctx, baseRepoID, opts)
applySorts(findSession, opts.SortType, 0)
if err != nil {
log.Error("listPullRequestStatement: %v", err)
return nil, maxResults, err
}
findSession = db.SetSessionPagination(findSession, opts)
prs := make([]*PullRequest, 0, opts.PageSize)
return prs, maxResults, findSession.Find(&prs)
@ -198,10 +206,8 @@ func (prs PullRequestList) LoadIssues(ctx context.Context) (IssueList, error) {
return nil, nil
}
// Load issues which are not loaded
issueIDs := container.FilterSlice(prs, func(pr *PullRequest) (int64, bool) {
return pr.IssueID, pr.Issue == nil && pr.IssueID > 0
})
// Load issues.
issueIDs := prs.GetIssueIDs()
issues := make(map[int64]*Issue, len(issueIDs))
if err := db.GetEngine(ctx).
In("id", issueIDs).
@ -237,7 +243,10 @@ func (prs PullRequestList) LoadIssues(ctx context.Context) (IssueList, error) {
// GetIssueIDs returns all issue ids
func (prs PullRequestList) GetIssueIDs() []int64 {
return container.FilterSlice(prs, func(pr *PullRequest) (int64, bool) {
return pr.IssueID, pr.IssueID > 0
if pr.Issue == nil {
return pr.IssueID, pr.IssueID > 0
}
return 0, false
})
}

View file

@ -205,6 +205,31 @@ type SearchRepoOptions struct {
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
func UserOwnedRepoCond(userID int64) builder.Cond {
return builder.Eq{

View file

@ -5,48 +5,20 @@ package repo
import "code.gitea.io/gitea/models/db"
// OrderByMap represents all possible search order
var OrderByMap = map[string]map[string]db.SearchOrderBy{
// SearchOrderByMap represents all possible search order
var SearchOrderByMap = map[string]map[string]db.SearchOrderBy{
"asc": {
"alpha": "owner_name ASC, name ASC",
"created": db.SearchOrderByOldest,
"updated": db.SearchOrderByLeastUpdated,
"size": "size ASC",
"git_size": "git_size ASC",
"lfs_size": "lfs_size ASC",
"id": db.SearchOrderByID,
"stars": db.SearchOrderByStars,
"forks": db.SearchOrderByForks,
"alpha": "owner_name ASC, name ASC",
"created": db.SearchOrderByOldest,
"updated": db.SearchOrderByLeastUpdated,
"size": db.SearchOrderBySize,
"id": db.SearchOrderByID,
},
"desc": {
"alpha": "owner_name DESC, name DESC",
"created": db.SearchOrderByNewest,
"updated": db.SearchOrderByRecentUpdated,
"size": "size DESC",
"git_size": "git_size DESC",
"lfs_size": "lfs_size DESC",
"id": db.SearchOrderByIDReverse,
"stars": db.SearchOrderByStarsReverse,
"forks": db.SearchOrderByForksReverse,
"alpha": "owner_name DESC, name DESC",
"created": db.SearchOrderByNewest,
"updated": db.SearchOrderByRecentUpdated,
"size": db.SearchOrderBySizeReverse,
"id": db.SearchOrderByIDReverse,
},
}
// 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"],
}

View file

@ -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
}
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)
if err != nil {
log.Error("invalid integer for %s representation in %s hash spec %s", param, algorithmName, config)

View file

@ -6,7 +6,6 @@ package cache
import (
"fmt"
"strconv"
"time"
"code.gitea.io/gitea/modules/setting"
@ -41,37 +40,6 @@ func Init() error {
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
func GetCache() mc.Cache {
return conn

View file

@ -9,7 +9,6 @@ import (
"time"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/test"
"github.com/stretchr/testify/assert"
)
@ -35,18 +34,6 @@ func TestNewContext(t *testing.T) {
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) {
createTestCache()

View file

@ -42,19 +42,20 @@ var (
)
// 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()
if gitVersion != nil {
return nil
return gitVersion, nil
}
stdout, _, runErr := NewCommand(DefaultContext, "version").RunStdString(nil)
if runErr != nil {
return runErr
return nil, runErr
}
fields := strings.Fields(stdout)
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
@ -69,7 +70,7 @@ func loadGitVersion() error {
var err error
gitVersion, err = version.NewVersion(versionString)
return err
return gitVersion, err
}
// 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
err = loadGitVersion()
_, err = loadGitVersion()
if err != nil {
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
func CheckGitVersionAtLeast(atLeast string) error {
if err := loadGitVersion(); err != nil {
if _, err := loadGitVersion(); err != nil {
return err
}
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.
func CheckGitVersionEqual(equal string) error {
if err := loadGitVersion(); err != nil {
if _, err := loadGitVersion(); err != nil {
return err
}
atLeastVersion, err := version.NewVersion(equal)

View file

@ -34,13 +34,13 @@ type ObjectFormat interface {
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([]byte(" "))
_, _ = hasher.Write([]byte(strconv.Itoa(len(content))))
_, _ = hasher.Write([]byte{0})
_, _ = hasher.Write(content)
hasher.Sum(dst)
return hasher.Sum(dst)
}
/* SHA1 Type */

View file

@ -38,12 +38,6 @@ func ToSearchOptions(keyword string, opts *issues_model.IssuesOptions) *SearchOp
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
convertID := func(id int64) optional.Option[int64] {
if id > 0 {
@ -55,6 +49,7 @@ func ToSearchOptions(keyword string, opts *issues_model.IssuesOptions) *SearchOp
return nil
}
searchOpt.ProjectID = convertID(opts.ProjectID)
searchOpt.ProjectColumnID = convertID(opts.ProjectColumnID)
searchOpt.PosterID = convertID(opts.PosterID)
searchOpt.AssigneeID = convertID(opts.AssigneeID)

View file

@ -211,7 +211,7 @@ func createRequest(ctx context.Context, method, url string, headers map[string]s
for key, value := range headers {
req.Header.Set(key, value)
}
req.Header.Set("Accept", AcceptHeader)
req.Header.Set("Accept", MediaType)
return req, nil
}
@ -251,6 +251,6 @@ func handleErrorResponse(resp *http.Response) error {
return err
}
log.Trace("ErrorResponse(%v): %v", resp.Status, er)
log.Trace("ErrorResponse: %v", er)
return errors.New(er.Message)
}

View file

@ -155,7 +155,7 @@ func TestHTTPClientDownload(t *testing.T) {
hc := &http.Client{Transport: RoundTripFunc(func(req *http.Request) *http.Response {
assert.Equal(t, "POST", req.Method)
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
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 {
assert.Equal(t, "POST", req.Method)
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
err := json.NewDecoder(req.Body).Decode(&batchRequest)

View file

@ -10,8 +10,6 @@ import (
const (
// MediaType contains the media type for LFS server requests
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.

View file

@ -37,7 +37,6 @@ func (a *BasicTransferAdapter) Download(ctx context.Context, l *Link) (io.ReadCl
if err != nil {
return nil, err
}
log.Debug("Download Request: %+v", req)
resp, err := performRequest(ctx, a.client, req)
if err != nil {
return nil, err

View file

@ -26,7 +26,7 @@ func TestBasicTransferAdapter(t *testing.T) {
p := Pointer{Oid: "b5a2c96250612366ea272ffac6d9744aaf4b45aacd96aa7cfcb931ee3b558259", Size: 5}
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"))
url := req.URL.String()

View file

@ -48,7 +48,7 @@ var (
// 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
// 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 = regexp.MustCompile(`\[\[(.*?)\]\](\w*)`)
@ -143,6 +143,20 @@ func CustomLinkURLSchemes(schemes []string) {
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 {
context string
err error
@ -379,7 +393,7 @@ func visitNode(ctx *RenderContext, procs []processor, node *html.Node) {
// We ignore code and pre.
switch node.Type {
case html.TextNode:
processTextNodes(ctx, procs, node)
textNode(ctx, procs, node)
case html.ElementNode:
if node.Data == "img" {
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 {
visitNode(ctx, procs, n)
}
default:
}
// 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.
func processTextNodes(ctx *RenderContext, procs []processor, node *html.Node) {
for _, p := range procs {
p(ctx, node)
func textNode(ctx *RenderContext, procs []processor, node *html.Node) {
for _, processor := range procs {
processor(ctx, node)
}
}

View file

@ -381,7 +381,6 @@ func TestRegExp_sha1CurrentPattern(t *testing.T) {
"(abcdefabcdefabcdefabcdefabcdefabcdefabcd)",
"[abcdefabcdefabcdefabcdefabcdefabcdefabcd]",
"abcdefabcdefabcdefabcdefabcdefabcdefabcd.",
"abcdefabcdefabcdefabcdefabcdefabcdefabcd:",
}
falseTestCases := []string{
"test",

View file

@ -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>`)
}
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) {
setting.AppURL = markup.TestAppURL

View file

@ -548,10 +548,6 @@ func TestMathBlock(t *testing.T) {
`$$a`,
`<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 {

View file

@ -45,10 +45,6 @@ func isPunctuation(b byte) bool {
return b == '.' || b == '!' || b == '?' || b == ',' || b == ';' || b == ':'
}
func isBracket(b byte) bool {
return b == ')'
}
func isAlphanumeric(b byte) bool {
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
}
suceedingCharacter := line[pos]
if !isPunctuation(suceedingCharacter) && !(suceedingCharacter == ' ') && !isBracket(suceedingCharacter) {
if !isPunctuation(suceedingCharacter) && !(suceedingCharacter == ' ') {
return nil
}
if line[ender-1] != '\\' {

View file

@ -9,9 +9,9 @@ import (
"code.gitea.io/gitea/modules/container"
"code.gitea.io/gitea/modules/markup/common"
"code.gitea.io/gitea/modules/util"
"github.com/yuin/goldmark/ast"
"github.com/yuin/goldmark/util"
)
type prefixedIDs struct {
@ -36,7 +36,7 @@ func (p *prefixedIDs) GenerateWithDefault(value, dft []byte) []byte {
if !bytes.HasPrefix(result, []byte("user-content-")) {
result = append([]byte("user-content-"), result...)
}
if p.values.Add(util.UnsafeBytesToString(result)) {
if p.values.Add(util.BytesToReadOnlyString(result)) {
return result
}
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.
func (p *prefixedIDs) Put(value []byte) {
p.values.Add(util.UnsafeBytesToString(value))
p.values.Add(util.BytesToReadOnlyString(value))
}
func newPrefixedIDs() *prefixedIDs {

View file

@ -48,7 +48,7 @@ func (r *HTMLRenderer) renderCodeSpan(w util.BufWriter, source []byte, n ast.Nod
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())
if matchColor(strings.ToLower(string(colorContent))) {
v.AppendChild(v, NewColorPreview(colorContent))

View file

@ -7,10 +7,10 @@ import (
"fmt"
"code.gitea.io/gitea/modules/markup"
"code.gitea.io/gitea/modules/util"
"github.com/yuin/goldmark/ast"
"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) {
@ -21,11 +21,11 @@ func (g *ASTTransformer) transformHeading(_ *markup.RenderContext, v *ast.Headin
}
txt := v.Text(reader.Source())
header := markup.Header{
Text: util.UnsafeBytesToString(txt),
Text: util.BytesToReadOnlyString(txt),
Level: v.Level,
}
if id, found := v.AttributeString("id"); found {
header.ID = util.UnsafeBytesToString(id.([]byte))
header.ID = util.BytesToReadOnlyString(id.([]byte))
}
*tocList = append(*tocList, header)
g.applyElementDir(v)

View file

@ -6,7 +6,6 @@ package composer
import (
"archive/zip"
"io"
"path"
"regexp"
"strings"
@ -37,14 +36,10 @@ type Package struct {
Metadata *Metadata
}
// https://getcomposer.org/doc/04-schema.md
// Metadata represents the metadata of a Composer package
type Metadata struct {
Description string `json:"description,omitempty"`
Readme string `json:"readme,omitempty"`
Keywords []string `json:"keywords,omitempty"`
Comments Comments `json:"_comments,omitempty"`
Homepage string `json:"homepage,omitempty"`
License Licenses `json:"license,omitempty"`
Authors []Author `json:"authors,omitempty"`
@ -79,28 +74,6 @@ func (l *Licenses) UnmarshalJSON(data []byte) error {
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
type Author struct {
Name string `json:"name,omitempty"`
@ -128,14 +101,14 @@ func ParsePackage(r io.ReaderAt, size int64) (*Package, error) {
}
defer f.Close()
return ParseComposerFile(archive, path.Dir(file.Name), f)
return ParseComposerFile(f)
}
}
return nil, ErrMissingComposerFile
}
// 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 {
Name string `json:"name"`
Version string `json:"version"`
@ -164,19 +137,6 @@ func ParseComposerFile(archive *zip.Reader, pathPrefix string, r io.Reader) (*Pa
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{
Name: cj.Name,
Version: cj.Version,

View file

@ -17,8 +17,6 @@ import (
const (
name = "gitea/composer-package"
description = "Package Description"
readme = "Package Readme"
comments = "Package Comment"
packageType = "composer-plugin"
author = "Gitea Authors"
email = "no.reply@gitea.io"
@ -43,8 +41,7 @@ const composerContent = `{
},
"require": {
"php": ">=7.2 || ^8.0"
},
"_comments": "` + comments + `"
}
}`
func TestLicenseUnmarshal(t *testing.T) {
@ -57,30 +54,18 @@ func TestLicenseUnmarshal(t *testing.T) {
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) {
createArchive := func(files map[string]string) []byte {
createArchive := func(name, content string) []byte {
var buf bytes.Buffer
archive := zip.NewWriter(&buf)
for name, content := range files {
w, _ := archive.Create(name)
w.Write([]byte(content))
}
w, _ := archive.Create(name)
w.Write([]byte(content))
archive.Close()
return buf.Bytes()
}
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)))
assert.Nil(t, cp)
@ -88,7 +73,7 @@ func TestParsePackage(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)))
assert.Nil(t, cp)
@ -96,52 +81,43 @@ func TestParsePackage(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)))
assert.Nil(t, cp)
assert.Error(t, err)
})
t.Run("InvalidPackageName", func(t *testing.T) {
data := createArchive(map[string]string{"composer.json": "{}"})
t.Run("Valid", func(t *testing.T) {
data := createArchive("composer.json", composerContent)
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.ErrorIs(t, err, ErrInvalidName)
})
t.Run("InvalidPackageVersion", func(t *testing.T) {
data := createArchive(map[string]string{"composer.json": `{"name": "gitea/composer-package", "version": "1.a.3"}`})
cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
cp, err := ParseComposerFile(strings.NewReader(`{"name": "gitea/composer-package", "version": "1.a.3"}`))
assert.Nil(t, cp)
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) {
data := createArchive(map[string]string{"composer.json": composerContent, "README.md": readme})
cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
cp, err := ParseComposerFile(strings.NewReader(composerContent))
assert.NoError(t, err)
assert.NotNil(t, cp)
assert.Equal(t, name, cp.Name)
assert.Empty(t, cp.Version)
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.Equal(t, author, cp.Metadata.Authors[0].Name)
assert.Equal(t, email, cp.Metadata.Authors[0].Email)

View file

@ -185,6 +185,8 @@ func ParseDescription(r io.Reader) (*Package, error) {
}
func setField(p *Package, data string) error {
const listDelimiter = ", "
if data == "" {
return nil
}
@ -213,19 +215,19 @@ func setField(p *Package, data string) error {
case "Description":
p.Metadata.Description = value
case "URL":
p.Metadata.ProjectURL = splitAndTrim(value)
p.Metadata.ProjectURL = splitAndTrim(value, listDelimiter)
case "License":
p.Metadata.License = value
case "Author":
p.Metadata.Authors = splitAndTrim(authorReplacePattern.ReplaceAllString(value, ""))
p.Metadata.Authors = splitAndTrim(authorReplacePattern.ReplaceAllString(value, ""), listDelimiter)
case "Depends":
p.Metadata.Depends = splitAndTrim(value)
p.Metadata.Depends = splitAndTrim(value, listDelimiter)
case "Imports":
p.Metadata.Imports = splitAndTrim(value)
p.Metadata.Imports = splitAndTrim(value, listDelimiter)
case "Suggests":
p.Metadata.Suggests = splitAndTrim(value)
p.Metadata.Suggests = splitAndTrim(value, listDelimiter)
case "LinkingTo":
p.Metadata.LinkingTo = splitAndTrim(value)
p.Metadata.LinkingTo = splitAndTrim(value, listDelimiter)
case "NeedsCompilation":
p.Metadata.NeedsCompilation = value == "yes"
}
@ -233,8 +235,8 @@ func setField(p *Package, data string) error {
return nil
}
func splitAndTrim(s string) []string {
items := strings.Split(s, ", ")
func splitAndTrim(s, sep string) []string {
items := strings.Split(s, sep)
for i := range items {
items[i] = strings.TrimSpace(items[i])
}

View file

@ -14,7 +14,8 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/markup/mdstripper"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
"github.com/yuin/goldmark/util"
)
var (
@ -340,7 +341,7 @@ func FindRenderizableReferenceNumeric(content string, prOnly, crossLinkOnly bool
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 {
return false, nil
}

View file

@ -97,7 +97,7 @@ func decodeEnvSectionKey(encoded string) (ok bool, section, key string) {
// 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
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) {
useFileValue = true
envKey = envKey[:len(envKey)-len(suffixFile)]

View file

@ -122,7 +122,7 @@ const (
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)
if err != nil {
if !IsValidStorageType(StorageType(typ)) {

View file

@ -24,7 +24,7 @@ type Team struct {
// CreateTeamOption options for creating a team
type CreateTeamOption struct {
// 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)"`
IncludesAllRepositories bool `json:"includes_all_repositories"`
// enum: read,write,admin
@ -40,7 +40,7 @@ type CreateTeamOption struct {
// EditTeamOption options for editing a team
type EditTeamOption struct {
// 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)"`
IncludesAllRepositories *bool `json:"includes_all_repositories"`
// enum: read,write,admin

View file

@ -3,8 +3,6 @@
package structs
import "time"
// Tag represents a repository tag
type Tag struct {
Name string `json:"name"`
@ -48,29 +46,3 @@ type TagArchiveDownloadCount struct {
Zip int64 `json:"zip"`
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"`
}

View file

@ -8,7 +8,8 @@ import (
"code.gitea.io/gitea/models/system"
"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
@ -23,7 +24,7 @@ func (f *DBStore) Get(ctx context.Context, item StateItem) error {
if content == "" {
return nil
}
return json.Unmarshal(util.UnsafeStringToBytes(content), item)
return json.Unmarshal(util.StringToReadOnlyBytes(content), item)
}
// Set saves the state item
@ -32,5 +33,5 @@ func (f *DBStore) Set(ctx context.Context, item StateItem) error {
if err != nil {
return err
}
return system.SaveAppStateContent(ctx, item.Name(), util.UnsafeBytesToString(b))
return system.SaveAppStateContent(ctx, item.Name(), util.BytesToReadOnlyString(b))
}

View file

@ -15,7 +15,10 @@ import (
// GenerateKeyPair generates a public and private keypair
func GenerateKeyPair(bits int) (string, string, error) {
priv, _ := rsa.GenerateKey(rand.Reader, bits)
privPem := pemBlockForPriv(priv)
privPem, err := pemBlockForPriv(priv)
if err != nil {
return "", "", err
}
pubPem, err := pemBlockForPub(&priv.PublicKey)
if err != nil {
return "", "", err
@ -23,12 +26,12 @@ func GenerateKeyPair(bits int) (string, string, error) {
return privPem, pubPem, nil
}
func pemBlockForPriv(priv *rsa.PrivateKey) string {
func pemBlockForPriv(priv *rsa.PrivateKey) (string, error) {
privBytes := pem.EncodeToMemory(&pem.Block{
Type: "RSA PRIVATE KEY",
Bytes: x509.MarshalPKCS1PrivateKey(priv),
})
return string(privBytes)
return string(privBytes), nil
}
func pemBlockForPub(pub *rsa.PublicKey) (string, error) {

View file

@ -6,6 +6,8 @@ package util
import (
"bytes"
"unicode"
"github.com/yuin/goldmark/util"
)
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"
func SanitizeCredentialURLs(s string) string {
bs := UnsafeStringToBytes(s)
bs := util.StringToReadOnlyBytes(s)
schemeSepPos := bytes.Index(bs, schemeSep)
if schemeSepPos == -1 || bytes.IndexByte(bs[schemeSepPos:], '@') == -1 {
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)
}
out = append(out, bs...)
return UnsafeBytesToString(out)
return util.BytesToReadOnlyString(out)
}

View file

@ -87,11 +87,11 @@ func ToSnakeCase(input string) 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 {
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 {
return unsafe.Slice(unsafe.StringData(s), len(s))
}

View file

@ -35,10 +35,6 @@ func GetSiteCookie(req *http.Request, name string) string {
// SetSiteCookie returns given cookie value from request header.
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{
Name: name,
Value: url.QueryEscape(value),
@ -50,6 +46,10 @@ func SetSiteCookie(resp http.ResponseWriter, name, value string, maxAge int) {
SameSite: setting.SessionConfig.SameSite,
}
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

View file

@ -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

View file

@ -42,3 +42,10 @@ fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output
# Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode
iOSInjectionProject/

View file

@ -35,3 +35,6 @@ override.tf.json
# Ignore CLI configuration files
.terraformrc
terraform.rc
# Ignore hcl file
.terraform.lock.hcl

View file

@ -164,7 +164,7 @@ copy_generic = Kopírovat do schránky
[aria]
navbar=Navigační lišta
footer=Zápatí
footer.software=O tomto softwaru
footer.software=O softwaru
footer.links=Odkazy
[heatmap]
@ -247,7 +247,7 @@ err_admin_name_is_invalid=Uživatelské jméno administrátora není platné
general_title=Obecná nastavení
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_helper=Všechny vzdálené repozitáře Gitu budou uloženy do tohoto adresáře.
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_chars_not_allowed=Uživatelské jméno „%s“ obsahuje neplatné znaky.
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_1 = Přestanete se navzájem sledovat a nebudete se moci znovu začít 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_3 = Nebudete si moci každý druhého přidat jako spolupracovníky v repozitářích.
block_user.detail = Pokud zablokujete tohoto uživatele, budou provedeny i další akce. Například:
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, vytvářet problémy a komentáře.
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.
block = Zablokovat
unblock = Odblokovat
followers_one = %d sledující
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]
profile=Profil
@ -1077,7 +1069,7 @@ mirror_prune=Vyčistit
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_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_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í.
@ -1564,7 +1556,7 @@ issues.closed_title=Uzavřeno
issues.draft_title=Koncept
issues.num_comments_1=%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.context.copy_link=Kopírovat odkaz
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_no_lfs_files=V tomto repozitáři nejsou uloženy žádné LFS soubory
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_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?
@ -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_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.sha=Hash blobu
settings.lfs_pointers.sha=Blob SHA
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=V repozitáři
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
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
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]
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.by=Pozvání od %s
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
[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>`
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_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>`
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>
@ -3866,10 +3856,6 @@ fuzzy_tooltip = Zahrnout také výsledky, které úzce odpovídají hledanému v
search = Hledat...
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.
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]
filepreview.lines = Řádky %[1]d až %[2]d v souboru %[3]s

View file

@ -245,7 +245,7 @@ err_admin_name_is_invalid=Administratornutzername ist ungültig
general_title=Allgemeine Einstellungen
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_helper=Remote-Git-Repositorys werden in diesem Verzeichnis gespeichert.
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
followers_one = %d Follower
following_one = %d Folge ich
followers.title.few = Follower
following.title.one = Folgt
following.title.few = Folgt
followers.title.one = Follower
[settings]
profile=Profil
@ -1311,7 +1307,7 @@ editor.patching=Patche:
editor.fail_to_apply_patch=Patch „%s“ nicht anwendbar
editor.new_patch=Neuer Patch
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.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.
@ -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_force_unlock=Freigabe erzwingen
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.inRepo=Im Repo
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
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
subscribe.pull.guest.tooltip = Einloggen, um diesen Pull-Request zu abbonieren.
subscribe.issue.guest.tooltip = Einloggen, um dieses Issue zu abbonieren.
[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.
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.
exact = Exakt
exact_tooltip = Nur Ergebnisse einbinden, die auf den exakten Suchbegriff passen
issue_kind = Issues durchsuchen …
pull_kind = Pulls durchsuchen …
[markup]
filepreview.line = Zeile %[1]d in %[2]s

View file

@ -93,7 +93,6 @@ remove_all = Remove all
remove_label_str = Remove item "%s"
edit = Edit
view = View
test = Test
enabled = Enabled
disabled = Disabled
@ -269,7 +268,7 @@ err_admin_name_is_invalid = Administrator Username is invalid
general_title = General settings
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_helper = Enter your instance slogan here. Leave empty to disable.
repo_path = Repository root path
@ -656,10 +655,6 @@ change_avatar = Change your avatar…
joined_on = Joined on %s
repositories = Repositories
activity = Public activity
followers.title.one = Follower
followers.title.few = Followers
following.title.one = Following
following.title.few = Following
followers_one = %d follower
followers_few = %d followers
following_one = %d following
@ -667,10 +662,10 @@ following_few = %d following
follow = Follow
unfollow = Unfollow
block_user = Block user
block_user.detail = Please note that blocking a user has other effects, such as:
block_user.detail_1 = You will stop following each other and will not be able to follow each other.
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_3 = You will not be able to add each other as repository collaborators.
block_user.detail = Please understand that if you block this user, other actions will be taken. Such as:
block_user.detail_1 = You are being unfollowed from this user.
block_user.detail_2 = This user cannot interact with your repositories, created issues and comments.
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.
starred = Starred repositories
watched = Watched repositories
@ -680,16 +675,11 @@ overview = Overview
block = Block
unblock = Unblock
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
show_on_map = Show this place on a map
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_pattern_not_allowed = The pattern "%s" is not allowed in a username.
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_from = `from %[1]s`
issues.author = Author
issues.author.tooltip.issue = This user is the author of this issue.
issues.author.tooltip.pr = This user is the author of this pull request.
issues.author_helper = This user is the author.
issues.role.owner = Owner
issues.role.owner_helper = This user is the owner of this repository.
issues.role.member = Member
@ -3324,11 +3313,6 @@ config.cache_interval = Cache interval
config.cache_conn = Cache connection
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_provider = Session provider
config.provider_config = Provider config

View file

@ -53,12 +53,12 @@ view = Itignan
disabled = Naka-disable
copy_url = Kopyahin ang URL
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
toc = Talaan ng Mga Nilalaman
licenses = Mga Lisensya
return_to_forgejo = Bumalik sa Forgejo
toggle_menu = I-toggle ang menu
toggle_menu = I-toggle ang Menu
username = Username
email = Email address
password = Password
@ -125,7 +125,7 @@ filter.not_template = Hindi mga template
filter.public = Publiko
filter.private = Pribado
notifications = Mga Abiso
active_stopwatch = Aktibong tagasubaybay ng oras
active_stopwatch = Aktibong Tagasubaybay ng Oras
locked = Naka-kandado
preview = Paunang tingnan
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
[aria]
footer.software = Tungkol sa software na ito
navbar = Bar ng nabigasyon
footer.software = Tungkol sa Software
navbar = Bar ng Nabigasyon
footer = Footer
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
general_title = Mga General Setting
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 = Root path ng Repositoryo
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
disable_gravatar = I-disable ang Gravatar
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
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.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.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.description = Kailanganin ang mga user na ipasa ang CAPTCHA upang makagawa ng mga account.
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.
enable_captcha.description = Kailanganin ang CAPTCHA sa pansariling pagrehistro ng user.
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_name = Username ng tagapangasiwa
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_log_root_path = Hindi angkop ang log path: %v
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_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_keep_email_private.description = Itago ang mga email address ng mga bagong user account bilang default.
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.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.
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".
@ -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.
enable_update_checker = I-enable ang tagasuri ng update
env_config_keys = Configuration ng Environment
env_config_keys_prompt = Ang mga sumusunod na mga environment variable ay ilalapat 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.
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 ibahagi ang lahat ng mga resources ng locally.
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.
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
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_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_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 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.
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]
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
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_2 = Mangyaring i-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>:
team_invite.text_2 = Paki-click ang sumusunod na link para sumali sa koponan:
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:
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.
@ -610,10 +607,10 @@ activity = Pampublikong aktibidad
followers_few = %d mga tagasunod
block_user = I-block ang user
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_1 = Hihinto kayo sa pagsunod sa isa't isa at hindi na kayo makakasunod sa isa't isa.
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_3 = Hindi mo magagawang idagdag ang isa't isa bilang mga tagatulong ng repositoryo.
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 = Ina-unfollow ka sa user na ito.
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 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.
starred = Mga naka-bituin 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.
followers_one = %d tagasunod
following_one = %d sinusundan
following.title.few = Sinusundan
followers.title.few = Mga tagasunod
following.title.one = Sinusundan
followers.title.one = Tagasunod
[settings]
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]`
escape_control_characters = I-escape
unescape_control_characters = I-unescape
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`
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`
tag = Tag
migrate.migrating_git = Nililipat ang Git data
vendored = Naka-vendor
@ -1333,7 +1326,7 @@ issues.author_helper = May-akda ang tagagamit na ito.
issues.role.owner = May-ari
activity.title.prs_n = %d mga kahilingan sa paghatak
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
issues.new_label_desc_placeholder = Paglalarawan
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])
activity.git_stats_on_default_branch = Sa %s,
activity.period.quarterly = 3 buwan
issues.review.left_comment = nagiwan ang komento
issues.review.left_comment = iniwan ang [comment]
pulls.compare_base = isama sa
activity.git_stats_additions = at mayroong
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.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.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.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>
@ -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`
activity.git_stats_author_1 = %d may-akda
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.viewed_files_label = %[1]d / %[2]d tinitingnang mga file
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.
diff.review.reject = Hilingin ang mga 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
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]
@ -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>`
wiki.last_commit_info = Binago ni %s ang pahinang ito %s
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
settings.org_not_allowed_to_be_collaborator = Hindi maaring idagdag ang mga organizasyon bilang tagaambag.
settings.add_collaborator_success = Naidagdag na ang tagaambag.
@ -1745,7 +1738,7 @@ diff.comment.reply = Tumugon
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.
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.close = Isara ang [pull request]
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.closed = Sarado 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_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_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 [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.review.wait = hiniling sa pagsuri %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.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
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
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]
commit_kind = Maghanap ng mga commit...
@ -1882,10 +1781,6 @@ branch_kind = Maghanap ng mga branch...
runner_kind = Maghanap ng mga runner...
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.
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]
auths.updated = Nabago
@ -2078,7 +1973,7 @@ auths.auth_name = Pangalan ng authentikasyon
auths.security_protocol = Protocol ng seguridad
auths.domain = Domain
auths.host = Host
packages.total_size = Kabuuang laki: %s
packages.total_size = Kabuuang Laki: %s
auths.attribute_avatar = Attribute ng avatar
auths.enabled = Naka-enable
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_placeholder = Iwanang walang laman para gamitin ang username na inilagay sa Forgejo.
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.name = Pangalan
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
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
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]
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.
members = Mga miyembro
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]

View file

@ -87,9 +87,9 @@ rerun=Relancer
rerun_all=Relancer toutes les tâches
save=Enregistrer
add=Ajouter
add_all=Tout ajouter
add_all=Tout Ajouter
remove=Supprimer
remove_all=Tout supprimer
remove_all=Tout Supprimer
remove_label_str=Supprimer lélément « %s »
edit=Éditer
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.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.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.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.
allow_only_external_registration.description=N'autoriser l'inscription qu'à partir des services externes.
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
openid_signin=Activer l'authentification OpenID
openid_signin.description=Activer l'authentification via 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.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.description=Limiter laccès aux pages aux utilisateurs connectés. Les visiteurs ne verront que les pages de connexion et dinscription.
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_name=Nom dutilisateur administrateur
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_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.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.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.description=Activer le suivi du temps pour les nouveaux dépôts par défaut.
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 :
app_slogan = Slogan de l'instance
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]
uname_holder=Nom dutilisateur 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.
add_openid_success=La nouvelle adresse OpenID a été ajoutée.
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.
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
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
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]
component_loading=Chargement de %s…

View file

@ -12,7 +12,7 @@ sign_in_with_provider = Iniciar Sesión con %s
sign_in_or = ou
sign_out = Pechar Sesión
sign_up = Rexístrate
link_account = Vincular Conta
link_account = Ligazón a Conta
register = Rexistro
version = Vesión
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
more_items = Máis items
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]
navbar = Barra de Navegación
@ -154,71 +137,9 @@ contributions_zero = Sen Achegas
less = Menos
more = Máis
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]
buttons.heading.tooltip = Engadir Título
buttons.italic.tooltip = Engade texto en cursiva
buttons.quote.tooltip = Texto de cita
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.

View file

@ -275,22 +275,22 @@ register_confirm=登録にはメールによる確認が必要
mail_notify=メール通知を有効にする
server_service_title=サーバーと外部サービスの設定
offline_mode=ローカルモードを有効にする
offline_mode.description=のCDNサービスを使わず、すべてのリソースを自前で提供します。
offline_mode.description=のCDNサービスを使わず、すべてのリソースを自前で提供します。
disable_gravatar=Gravatarを無効にする
disable_gravatar.description=Gravatarと外のアバターソースを無効にします。 アバターをローカルにアップロードしていないユーザーには、デフォルトのアバターが使用されます。
disable_gravatar.description=Gravatarと外のアバターソースを無効にします。 アバターをローカルにアップロードしていないユーザーには、デフォルトのアバターが使用されます。
federated_avatar_lookup=フェデレーテッド・アバターを有効にする
federated_avatar_lookup.description=Libravatarを使用したフェデレーテッド・アバター検索を有効にします。
disable_registration=セルフ登録を無効にする
disable_registration.description=管理者だけが新しいユーザー アカウントを作成できます。誰もが利用できるパブリックインスタンスをホストし、大量のスパムアカウントに対処する準備ができていない限り、登録を無効にしておくことを強くお勧めします。
allow_only_external_registration.description=設定された外部サービスを使用してのみ新しいアカウントを作成できます。
disable_registration.description=ユーザーのセルフ登録を無効にします。 新しいユーザーアカウントを作成できるのは管理者だけとなります。
allow_only_external_registration.description=外部サービスを使用した登録のみを許可
openid_signin=OpenIDを使ったサインインを有効にする
openid_signin.description=OpenIDを使ったユーザーのサインインを有効にします。
openid_signup=OpenIDを使ったセルフ登録を有効にする
openid_signup.description=セルフ登録が有効になっている場合、ユーザーが OpenID 経由でアカウントを作成できるようにします。
openid_signup.description=OpenIDベースでのユーザーのセルフ登録を有効にします。
enable_captcha=登録時のCAPTCHAを有効にする
enable_captcha.description=アカウントを作成する時に、ユーザーにCAPTCHA 認証を必須にします。
enable_captcha.description=ユーザーのセルフ登録時にCAPTCHAを必須にします。
require_sign_in_view=インスタンス内ページの閲覧にサインインが必要
require_sign_in_view.description=コンテンツへのアクセスをサインインしたユーザーに限定します。 ゲストは認証ページだけ見ることができます。
require_sign_in_view.description=ページアクセスをサインイン済みユーザーに限定します。 訪問者はサインインページと登録ページだけ見ることができます。
admin_setting.description=管理者アカウントの作成は任意です。 最初に登録したユーザーは自動的に管理者になります。
admin_title=管理者アカウントの設定
admin_name=管理者ユーザー名
@ -311,9 +311,9 @@ save_config_failed=設定ファイルの保存に失敗しました: %v
invalid_admin_setting=管理者アカウントの設定が無効です: %v
invalid_log_root_path=ログの保存先パスが無効です: %v
default_keep_email_private=デフォルトでメールアドレスを隠す
default_keep_email_private.description=規ユーザーのメールアドレスの非表示をデフォルトで有効にして、サインアップ直後にこの情報が漏洩しないようにします。
default_keep_email_private.description=しいユーザーアカウントで、デフォルトでメールアドレスを隠す設定にします。
default_allow_create_organization=デフォルトで組織の作成を許可
default_allow_create_organization.description=デフォルトで、新規ユーザーが組織を作成できるようにします。このオプションを無効にすると、管理者は新規ユーザーに組織を作成する権限を付与する必要があります。
default_allow_create_organization.description=新しいユーザーアカウントに組織の作成をデフォルトで許可します。
default_enable_timetracking=デフォルトでタイムトラッキング有効
default_enable_timetracking.description=新しいリポジトリのタイムトラッキングをデフォルトで有効にします。
no_reply_address=メールを隠すときのドメイン
@ -328,9 +328,6 @@ allow_dots_in_usernames = ユーザー名にドットを使用できるように
smtp_from_invalid = メール送信者のアドレスが無効です
enable_update_checker_helper_forgejo = Forgejoの最新バージョンを、release.forgejo.orgのDNSのTXTレコードを定期的に参照して取得します。
config_location_hint = この設定は次に保存されます:
allow_only_external_registration = 外部サービス経由のみの登録を許可する
app_slogan = インスタンスのスローガン
app_slogan_helper = ここにインスタンスのスローガンを入力します。無効にするには空白のままにします。
[home]
uname_holder=ユーザー名またはメールアドレス
@ -668,7 +665,7 @@ settings=ユーザー設定
form.name_reserved=ユーザー名 "%s" は予約されています。
form.name_pattern_not_allowed=`"%s" の形式はユーザー名に使用できません。`
form.name_chars_not_allowed=ユーザー名 "%s" には無効な文字が含まれています。
block_user.detail_2 = このユーザーは、リポジトリ、作成されたイシュー、コメントを操作できません。
block_user.detail_2 = このユーザーは、リポジトリ、作成された問題、コメントを操作できません。
block_user.detail_1 = このユーザーからのフォローが解除されています。
follow_blocked_user = あなたはこのユーザーをフォローできません。なぜなら、あなたはこのユーザーをブロックしたか、このユーザーはあなたをブロックしているからです。
block_user.detail_3 = このユーザーはあなたをコラボレーターとして追加することはできませんし、あなたも彼らをコラボレーターに追加できません。
@ -799,7 +796,7 @@ manage_ssh_keys=SSHキーの管理
manage_ssh_principals=SSH証明書プリンシパルの管理
manage_gpg_keys=GPGキーの管理
add_key=キーを追加
ssh_desc=あなたのアカウントに関連付けられているSSH公開鍵です。 対応する秘密鍵で、あなたのリポジトリへのフルアクセスが可能です。検証済みの SSHキーは、SSH 署名された Git コミットの検証に使用できます。
ssh_desc=あなたのアカウントに関連付けられているSSH公開鍵です。 対応する秘密鍵で、あなたのリポジトリへのフルアクセスが可能です。
principal_desc=これらのSSH証明書プリンシパルがあなたのアカウントに関連付けられており、あなたのリポジトリへのフルアクセスが許可されています。
gpg_desc=あなたのアカウントに関連付けられているGPG公開鍵です。 これらの鍵でコミットが検証できるよう、秘密鍵は安全に保管してください。
ssh_helper=<strong>ヘルプが必要ですか?</strong> GitHubのガイドをご覧ください: <a href="%s">SSHキーの作成</a>、SSHを使う際に<a href="%s">よくある問題</a>
@ -875,7 +872,7 @@ social_desc=これらのソーシャルアカウントで、あなたのアカ
unbind=連携の解除
unbind_success=ソーシャルアカウントの登録を削除しました。
manage_access_token=アクセストークン
manage_access_token=アクセストークンの管理
generate_new_token=新しいトークンを生成
tokens_desc=これらのトークンは、Forgejo APIによるアカウントへのアクセスを許可します。
token_name=トークン名
@ -906,7 +903,7 @@ remove_oauth2_application=OAuth2アプリケーションの削除
remove_oauth2_application_desc=OAuth2アプリケーションを削除すると、すべての署名済みアクセストークンが利用できなくなります。 続行しますか?
remove_oauth2_application_success=アプリケーションを削除しました。
create_oauth2_application=新しいOAuth2アプリケーションの作成
create_oauth2_application_button=アプリケーション作成
create_oauth2_application_button=アプリケーション作成
create_oauth2_application_success=新しいOAuth2アプリケーションを作成しました。
update_oauth2_application_success=OAuth2アプリケーションを更新しました。
oauth2_application_name=アプリケーション名
@ -924,7 +921,7 @@ oauth2_application_remove_description=OAuth2アプリケーションを削除す
oauth2_application_locked=設定で有効にされた場合、Forgejoは起動時にいくつかのOAuth2アプリケーションを事前登録します。 想定されていない動作を防ぐため、これらは編集も削除もできません。 詳細についてはOAuth2のドキュメントを参照してください。
authorized_oauth2_applications=許可済みOAuth2アプリケーション
authorized_oauth2_applications_description=これらのサードパーティ アプリケーションに、あなたのForgejoアカウントへのアクセスを許可しています。 使用しなくなったアプリケーションはアクセス権を取り消すようにしてください。
authorized_oauth2_applications_description=これらのサードパーティ アプリケーションに、あなたのForgejoアカウントへのアクセスを許可しています。 不要になったアプリケーションはアクセス権を取り消すようにしてください。
revoke_key=取り消し
revoke_oauth2_grant=アクセス権の取り消し
revoke_oauth2_grant_description=このサードパーティ アプリケーションのアクセス権を取り消し、アプリケーションがあなたのデータへアクセスすることを防ぎます。 続行しますか?
@ -957,10 +954,10 @@ webauthn_delete_key_desc=セキュリティキーの登録を解除すると、
webauthn_key_loss_warning=セキュリティキーを紛失すると、アカウントへのアクセスを失います。
webauthn_alternative_tip=もうひとつ別の認証方法も設定しておくと良いでしょう。
manage_account_links=連携アカウント
manage_account_links=連携アカウントの管理
manage_account_links_desc=これらの外部アカウントがForgejoアカウントと連携されています。
account_links_not_available=現在このForgejoアカウントが連携している外部アカウントはありません。
link_account=アカウントを連携
link_account=アカウントをリンク
remove_account_link=連携アカウントの削除
remove_account_link_desc=連携アカウントを削除し、Forgejoアカウントへのアクセス権を取り消します。 続行しますか?
remove_account_link_success=連携アカウントを削除しました。
@ -977,9 +974,9 @@ confirm_delete_account=削除の続行
delete_account_title=ユーザーアカウントの削除
delete_account_desc=このユーザーアカウントを恒久的に削除してもよろしいですか?
email_notifications.enable=メール通知有効
email_notifications.enable=メール通知有効
email_notifications.onmention=メンションのみメール通知
email_notifications.disable=メール通知無効
email_notifications.disable=メール通知無効
email_notifications.submit=メール設定を保存
email_notifications.andyourown=自分に関する通知も含める
@ -990,7 +987,7 @@ visibility.limited=限定
visibility.limited_tooltip=認証されたユーザーのみに表示されます
visibility.private=プライベート
visibility.private_tooltip=あなたが参加した組織のメンバーのみに表示されます
blocked_users_none = ブロックしているユーザーはいません。
blocked_users_none = あなたはまだ誰もユーザーをブロックしていません。
blocked_users = ブロックしたユーザー
user_unblock_success = このユーザーをアンブロックするのに成功しました。
blocked_since = %s からブロック中
@ -999,7 +996,7 @@ change_password = パスワードを変更
pronouns = 代名詞
pronouns_custom = カスタム
pronouns_unspecified = 未指定
update_hints = ヒントを更新
update_hints = アップデートのヒント
additional_repo_units_hint_description = 利用可能なすべての機能が有効になっていないリポジトリに対して、「機能を追加...」ボタンを表示します。
update_hints_success = ヒントが更新されました。
hints = ヒント
@ -1122,7 +1119,7 @@ desc.sha256=SHA256
template.items=テンプレート項目
template.git_content=Gitコンテンツ (デフォルトブランチ)
template.git_hooks=Gitフック
template.git_hooks_tooltip=現在、一度追加したGitフックは変更や削除ができません。 テンプレートリポジトリを信頼している場合のみ、これを選択してください。
template.git_hooks_tooltip=現在のところ、一度追加したGitフックは変更や削除ができません。 テンプレートリポジトリを信頼している場合のみ、これを選択してください。
template.webhooks=Webhook
template.topics=トピック
template.avatar=アバター
@ -1175,7 +1172,7 @@ migrate.migrating=<b>%s</b> から移行しています ...
migrate.migrating_failed=<b>%s</b> からの移行が失敗しました。
migrate.migrating_failed.error=移行に失敗しました: %s
migrate.migrating_failed_no_addr=移行に失敗しました。
migrate.github.description=github.com やその他の GitHub エンタープライズサーバーからデータを移行します。
migrate.github.description=github.com やその他の GitHub インスタンスからデータを移行します。
migrate.git.description=Git サービスからリポジトリのみを移行します。
migrate.gitlab.description=gitlab.com やその他の GitLab インスタンスからデータを移行します。
migrate.gitea.description=gitea.com やその他の Gitea/Forgejo インスタンスからデータを移行します。
@ -1283,7 +1280,7 @@ line=行
lines=
from_comment=(コメント)
editor.add_file=ファイル追加
editor.add_file=ファイル追加
editor.new_file=新規ファイル
editor.upload_file=ファイルをアップロード
editor.edit_file=ファイルを編集
@ -1298,7 +1295,7 @@ editor.delete_this_file=ファイルを削除
editor.must_have_write_access=このファイルを変更したり変更の提案をするには、書き込み権限が必要です。
editor.file_delete_success=ファイル "%s" を削除しました。
editor.name_your_file=ファイル名を指定…
editor.filename_help=ディレクトリを追加するにはディレクトリ名に続けてスラッシュ("/")を入力します。 ディレクトリを削除するには入力欄の先頭でbackspaceキーを押します。
editor.filename_help=ディレクトリを追加するにはディレクトリ名に続けてスラッシュ('/')を入力します。 ディレクトリを削除するには入力欄の先頭でbackspaceキーを押します。
editor.or=または
editor.cancel_lower=キャンセル
editor.commit_signed_changes=署名した変更をコミット
@ -1338,7 +1335,7 @@ editor.fail_to_update_file=ファイル "%s" を作成または変更できま
editor.fail_to_update_file_summary=エラーメッセージ:
editor.push_rejected_no_message=サーバーがメッセージを出さずに変更を拒否しました。 Git フックを確認してください。
editor.push_rejected=サーバーが変更を拒否しました。 Gitフックを確認してください。
editor.push_rejected_summary=拒否されたメッセージの全文:
editor.push_rejected_summary=拒否メッセージ全体:
editor.add_subdir=ディレクトリを追加…
editor.unable_to_upload_files=`"%s" へファイルをアップロードすることができませんでした: %v`
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 権限が必要です)
release.hide_archive_links_helper = このリリース用に自動的に生成されたソース コード アーカイブを非表示にします。たとえば、独自のソース コードをアップロードする場合などです。
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 人の参加者
commits.search_branch = このブランチ
size_format = %[1]s: %[2]s, %[3]s: %[4]s
@ -2743,10 +2740,6 @@ settings.transfer.button = 所有権を移送する
settings.transfer.modal.title = 所有権を移送
wiki.search = Wikiを検索
wiki.no_search_results = 結果がありませんでした
form.string_too_long = 指定された文字列は %d 文字より長いです。
project = プロジェクト
subscribe.issue.guest.tooltip = このイシューを購読するにはサインインしてください。
subscribe.pull.guest.tooltip = このプルリクエストを購読するにはサインインしてください。
[graphs]
component_loading = %s の読み込み中...

View file

@ -156,14 +156,12 @@ artifacts = Artifacts
filter.public = 공개
filter.private = 비공개
filter.not_template = 템플릿이 아님
view = 보기
never = 안함
[aria]
navbar = 비게이션 바
navbar = 비게이션 바
footer.links = 링크
footer = 꼬릿말
footer.software = 소프트웨어에 대하여
footer.software = 소프트웨어에 대하여
[heatmap]
number_of_contributions_in_the_last_12_months = 지난 12달간 %s 명의 기여자
@ -175,11 +173,6 @@ less = 적은
more = 많은
[editor]
buttons.italic.tooltip = 기울어진 텍스트 추가
buttons.heading.tooltip = 헤딩 추가
buttons.bold.tooltip = 두꺼운 텍스트 추가
buttons.code.tooltip = 코드 추가
buttons.link.tooltip = 링크 추가
[filter]
@ -440,11 +433,6 @@ auth_failed=인증 실패: %v
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]
@ -636,7 +624,6 @@ email_notifications.disable=이메일 알림 끄기
visibility.private=비공개
change_password = 비밀번호 변경
email_desc = 당신의 대표 이메일 주소는 알림, 비밀번호 재설정과 웹에서의 Git 작동에 사용되며 가려지지 않습니다.
comment_type_group_dependency = 전제조건
[repo]
owner=소유자
@ -670,7 +657,7 @@ mirror_interval_invalid=미러 간격이 올바르지 않습니다.
mirror_address=URL로 부터 클론
mirror_last_synced=마지막 동기화
watchers=이 저장소를 주시하고 있는 사람들
stargazers=이 저장소를 좋아하는 사람들
stargazers=별을 준 사람들
forks=포크
reactions_more=그리고 %d 더
language_other=기타
@ -855,7 +842,7 @@ issues.open_title=오픈
issues.closed_title=닫힘
issues.draft_title=초안
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.context.edit=수정하기
issues.context.delete=삭제
@ -883,7 +870,7 @@ issues.label_deletion_desc=라벨을 삭제하면 모든 이슈로부터도 삭
issues.label_deletion_success=라벨이 삭제되었습니다.
issues.label.filter_sort.alphabetically=알파벳순
issues.label.filter_sort.reverse_alphabetically=이름 역순으로 정렬
issues.num_participants_few=자 %d명
issues.num_participants_few=자 %d명
issues.attachment.open_tab=`클릭하여 "%s" 새탭으로 보기`
issues.attachment.download=' "%s"를 다운로드 하려면 클릭 하십시오 '
issues.subscribe=구독하기
@ -891,8 +878,8 @@ issues.unsubscribe=구독 취소
issues.delete=삭제
issues.tracker=타임 트래커
issues.start_tracking=타임 트래킹 시작
issues.start_tracking_history=`님이 %s 작업 시작`
issues.stop_tracking_history=`님이 %s 작업 중단`
issues.start_tracking_history=`%s 작업 시작`
issues.stop_tracking_history=`작업 중단 %s`
issues.add_time=수동으로 시간 입력
issues.add_time_short=시간 입력
issues.add_time_cancel=취소
@ -915,21 +902,21 @@ issues.due_date_added=마감일 %s 를 추가 %s
issues.due_date_remove=%s %s 마감일이 삭제됨
issues.due_date_overdue="기한 초과"
issues.due_date_invalid=기한이 올바르지 않거나 범위를 벗어났습니다. "yyyy-mm-dd"형식을 사용해주십시오.
issues.dependency.title=전제조건
issues.dependency.add=전제조건 추가…
issues.dependency.title=의존성
issues.dependency.add=의존성 추가…
issues.dependency.cancel=취소
issues.dependency.remove=제거
issues.dependency.remove_info=전제조건 제거
issues.dependency.remove_info=의존성 제거
issues.dependency.blocks_short=차단
issues.dependency.blocked_by_short=의존성
issues.dependency.remove_header=전제조건 제거
issues.dependency.issue_remove_text=이슈로부터 전제조건을 제거하게 됩니다. 계속하시겠습니까?
issues.dependency.pr_remove_text=풀 리퀘스트로부터 전제조건을 제거하게 됩니다. 계속하시겠습니까?
issues.dependency.add_error_same_issue=자기자신을 전제하는 이슈는 만들 수 없습니다.
issues.dependency.add_error_dep_issue_not_exist=전제된 이슈가 없습니다.
issues.dependency.add_error_dep_not_exist=전제조건이 존재하지 않습니다.
issues.dependency.add_error_dep_exists=전제조건이 이미 존재합니다.
issues.dependency.add_error_dep_not_same_repo=두 이슈는 같은 저장소 안에 있어야 합니다.
issues.dependency.remove_header=의존성 제거
issues.dependency.issue_remove_text=이슈로부터 의존성을 제거하게 됩니다. 계속하시겠습니까?
issues.dependency.pr_remove_text=풀 리퀘스트로부터 의존성을 제거하게 됩니다. 계속하시겠습니까?
issues.dependency.add_error_same_issue=자기자신에 종속되는 이슈는 만들 수 없습니다.
issues.dependency.add_error_dep_issue_not_exist=종속된 이슈가 없습니다.
issues.dependency.add_error_dep_not_exist=의존성이 존재하지 않습니다.
issues.dependency.add_error_dep_exists=의존성이 이미 존재합니다.
issues.dependency.add_error_dep_not_same_repo=두 이슈는 같은 레포지토리 안에 있어야 합니다.
issues.review.self.approval=자신의 풀 리퀘스트를 승인할 수 없습니다.
issues.review.self.rejection=자신의 풀 리퀘스트에 대한 변경을 요청할 수 없습니다.
issues.review.approve="이 변경사항을 승인하였습니다. %s"
@ -1304,23 +1291,6 @@ issues.filter_milestone_closed = 닫힌 마일스톤
issues.opened_by_fake = %[2]s님이 %[1]s에 열음
issues.filter_project_none = 프로젝트 없음
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=저장소
conan.details.repository=저장소
owner.settings.cleanuprules.enabled=활성화됨
nuget.dependency.framework = 타겟 프레임워크
maven.download = 종속성을 다운로드하려면 명령줄을 통해 실행하세요:
dependency.id = ID
dependency.version = 버전
[secrets]
@ -1786,18 +1752,4 @@ code_search_by_git_grep = 현재 코드 검색 결과는 "git grep"에 의해
branch_kind = 브랜치 검색...
keyword_search_unavailable = 지금은 키워드로 검색이 지원되지 않습니다. 사이트 관리자에게 문의하십시오.
commit_kind = 커밋 검색...
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 = 풀 검색...
no_results = 일치하는 결과를 찾을 수 없습니다.

View file

@ -16,7 +16,7 @@ page=Pagina
template=Sjabloon
language=Taal
notifications=Meldingen
active_stopwatch=Actieve tijd tracker
active_stopwatch=Actieve Tijd Tracker
create_new=Maken…
user_profile_and_more=Profiel en instellingen…
signed_in_as=Aangemeld als
@ -103,7 +103,7 @@ error404=De pagina die u probeert te bereiken <strong>bestaat niet</strong> of <
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
filter.clear = Filter wissen
filter.is_archived = Gearchiveerd
filter.is_fork = Forks
filter.not_fork = Niet forks
filter.is_mirror = Mirrors
filter.not_mirror = Niet mirrors
filter.is_template = Sjabloons
filter.not_template = Geen sjabloons
filter.is_fork = Geforkt
filter.not_fork = Niet geforkt
filter.is_mirror = Gespiegeld
filter.not_mirror = Niet gespiegeld
filter.is_template = Sjabloon
filter.not_template = Geen sjabloon
filter.public = Publiek
filter.private = Privé
filter = Filter
@ -162,7 +162,7 @@ copy_generic = Kopieer naar klembord
[aria]
navbar = Navigatiebalk
footer = Voettekst
footer.software = Over deze software
footer.software = Info over software
footer.links = Verwijzingen
[heatmap]
@ -245,7 +245,7 @@ err_admin_name_is_invalid=Gebruikersnaam van beheerder is ongeldig
general_title=Algemene instellingen
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_helper=Externe git repositories worden opgeslagen in deze map.
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.description=Schakel third-party content uit en gebruik alleen lokale middelen.
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.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.description=Schakel zelfregistratie uit, alleen admins kunnen accounts maken.
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.
smtp_from_invalid = Het adres "E-mails versturen als" is ongeldig
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]
uname_holder=Gebruikersnaam of e-mailadres
@ -639,8 +636,6 @@ Description = Beschrijving
FullName = Volledige naam
To = Branch naam
Website = Website
AccessToken = Toegangstoken
Pronouns = Voornaamwoorden
[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.
following_one = %d volgers
followers_one = %d volger
followers.title.few = Volgers
following.title.one = Volgend
following.title.few = Volgend
followers.title.one = Volger
[settings]
@ -1007,7 +998,6 @@ additional_repo_units_hint_description = Toon een "Voeg meer eenheden toe..." kn
pronouns = Persoonlijke voornaamwoord
pronouns_custom = Aangepast
pronouns_unspecified = Ongedefinieerd
language.title = Standaard taal
[repo]
owner=Eigenaar
@ -2731,25 +2721,6 @@ release.download_count_few = %s downloads
release.system_generated = Deze bijlage wordt automatisch gegenereerd.
settings.sourcehut_builds.secrets = Geheimen
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)
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.
open_dashboard = Open dashboard
[admin]
dashboard=Overzicht
@ -3421,8 +3391,6 @@ auths.tips.gmail_settings = Gmail instellingen:
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.
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]
@ -3666,7 +3634,6 @@ versions = Versies
versions.view_all = Alles weergeven
filter.type.all = Alle
owner.settings.cargo.rebuild.no_index = Kan niet herbouwen, er is geen index geïnitialiseerd.
npm.dependencies.bundle = Gebundelde dependencies
[secrets]
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.workflow = Workflow
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
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.
code_search_by_git_grep = Huidige code zoekresultaten worden geleverd door "git grep". Er kunnen betere resultaten zijn als de sitebeheerder code indexer inschakelt.
exact = Exact
exact_tooltip = Bevat alleen resultaten die de exacte zoekterm bevatten
issue_kind = Zoek issues...
pull_kind = Zoek pulls...
code_search_by_git_grep = Huidige code zoekresultaten worden geleverd door "git grep". Er kunnen betere resultaten zijn als de sitebeheerder Repository Indexer inschakelt.
[munits.data]
b = B

View file

@ -162,7 +162,7 @@ copy_generic = Copiar para área de transferência
[aria]
navbar=Barra de navegação
footer=Rodapé
footer.software=Sobre o software
footer.software=Sobre o Software
footer.links=Links
[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_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_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]
@ -288,7 +288,7 @@ openid_signin.description=Habilitar o acesso de usuários via OpenID.
openid_signup=Habilitar cadastros via OpenID
openid_signup.description=Habilitar o auto-cadastro com base no OpenID.
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.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.
@ -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_repo_path=A raiz do repositório está inválida: %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
secret_key_failed=Falha ao gerar a chave secreta: %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
config_location_hint = Essas opções de configuração serão salvas em:
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]
uname_holder=Usuário ou e-mail
@ -672,11 +670,10 @@ unblock = Desbloquear
block = Bloquear
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.
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:
followers_one = %d seguidor
following_one = %d seguindo
block_user.detail_1 = Você deixará de seguir este usuário.
[settings]
profile=Perfil
@ -686,7 +683,7 @@ password=Senha
security=Segurança
avatar=Avatar
ssh_gpg_keys=Chaves SSH / GPG
social=Redes sociais
social=Contas sociais
applications=Aplicativos
orgs=Organizações
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_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_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_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
@ -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.
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_delete_key=Remover chave
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=Remover chave de segurança
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.
account_links_not_available=Não existem contas externas atualmente vinculadas a esta conta.
link_account=Vincular conta
remove_account_link=Remover conta
link_account=Vincular 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_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.
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.
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?
email_notifications.enable=Habilitar notificações por e-mail
email_notifications.onmention=Somente quando for mencionado(a)
email_notifications.disable=Desabilitar notificações por e-mail
email_notifications.enable=Habilitar notificações de e-mail
email_notifications.onmention=Somente e-mail com menção
email_notifications.disable=Desabilitar notificações 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.public=Pública
@ -1033,7 +1030,7 @@ download_zip=Baixar ZIP
download_tar=Baixar TAR.GZ
download_bundle=Baixar PACOTE
generate_repo=Gerar repositório
generate_from=Gerar a partir de
generate_from=Gerar de
repo_desc=Descrição
repo_desc_helper=Digite uma breve descrição (opcional)
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_default=Padrão: Usar o modelo de confiança padrão para esta instalação
create_repo=Criar repositório
default_branch=Ramo padrão
default_branch=Branch 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.
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_invalid=O intervalo do espelhamento não é válido.
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_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.
@ -1173,8 +1170,8 @@ migrate.codebase.description=Migrar dados de codebasehq.com.
migrate.gitbucket.description=Migrar dados de instâncias do GitBucket.
migrate.migrating_git=Migrando dados Git
migrate.migrating_topics=Migrando tópicos
migrate.migrating_milestones=Migrando marcos
migrate.migrating_labels=Migrando rótulos
migrate.migrating_milestones=Migrando Marcos
migrate.migrating_labels=Migrando Rótulos
migrate.migrating_releases=Migrando Versões
migrate.migrating_issues=Migrando Issues
migrate.migrating_pulls=Migrando Pull Requests
@ -1194,10 +1191,10 @@ unstar=Retirar dos favoritos
star=Juntar aos favoritos
fork=Fork
download_archive=Baixar repositório
more_operations=Mais operações
more_operations=Mais Operações
no_desc=Nenhuma descrição
quick_guide=Guia rápido
quick_guide=Guia Rápido
clone_this_repo=Clonar este repositório
cite_this_repo=Citar este repositório
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_raw=Original
file_history=Histórico
file_view_source=Ver código-fonte
file_view_rendered=Ver renderizado
file_view_source=Exibir código-fonte
file_view_rendered=Ver Renderizado
file_view_raw=Ver original
file_permalink=Link permanente
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
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
invisible_runes_line=`Esta linha contém caracteres unicode invisíveis`
ambiguous_runes_line=`Esta linha contém caracteres unicode ambíguos`
invisible_runes_line=`Esta linha tem caracteres unicode invisíveis`
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]`
escape_control_characters=Escapar
unescape_control_characters=Desescapar
file_copy_permalink=Copiar link permanente
file_copy_permalink=Copiar Link Permanente
view_git_blame=Ver Git Blame
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.
@ -1271,11 +1268,11 @@ line=linha
lines=linhas
from_comment=(comentário)
editor.add_file=Adicionar arquivo
editor.add_file=Adicionar Arquivo
editor.new_file=Novo arquivo
editor.upload_file=Enviar 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_non_text_files=Arquivos binários não podem ser editados na interface web.
editor.edit_this_file=Editar arquivo
@ -1295,7 +1292,7 @@ editor.add_tmpl=Adicionar "<nome do arquivo>"
editor.add=Adicionar %s
editor.update=Atualizar %s
editor.delete=Excluir %s
editor.patch=Aplicar correção
editor.patch=Aplicar Correção
editor.patching=Corrigindo:
editor.fail_to_apply_patch=`Não foi possível aplicar a correção "%s"`
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.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.search_all=Todos os ramos
commits.search_all=Todos os branches
commits.author=Autor
commits.message=Mensagem
commits.date=Data
@ -1377,17 +1374,17 @@ projects=Projetos
projects.desc=Gerencie issues e PRs nos quadros do projeto.
projects.description=Descrição (opcional)
projects.description_placeholder=Descrição
projects.create=Criar projeto
projects.create=Criar Projeto
projects.title=Título
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.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_success=O projeto foi excluido.
projects.edit=Editar projeto
projects.edit=Editar Projetos
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.type.none=Nenhum
projects.type.basic_kanban=Kanban básico
@ -1399,7 +1396,7 @@ projects.column.edit=Editar coluna
projects.column.edit_title=Nome
projects.column.new_title=Nome
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_desc=Definir esta coluna como padrão para pull e issues sem categoria
projects.column.unset_default=Desatribuir padrão
@ -1423,12 +1420,12 @@ issues.filter_reviewers=Filtrar Revisor
issues.new=Nova issue
issues.new.title_empty=Título não pode ser em branco
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.projects=Projetos
issues.new.clear_projects=Limpar projetos
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.no_items=Nenhum item
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.ignore_invalid_templates=Modelos inválidos foram ignorados
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.new_label=Novo rótulo
issues.new_label=Nova etiqueta
issues.new_label_placeholder=Nome da etiqueta
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.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
@ -1584,7 +1581,7 @@ issues.label_description=Descrição
issues.label_color=Cor
issues.label_exclusive=Exclusiva
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_count=%d etiquetas
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.tab_conversation=Conversação
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.cant_reopen_deleted_branch=Este pull request não pode ser reaberto porque o branch foi excluído.
pulls.merged=Merge aplicado
@ -1812,8 +1809,8 @@ pulls.approve_count_1=%d aprovação
pulls.approve_count_n=%d aprovações
pulls.reject_count_1=%d pedido de alteração
pulls.reject_count_n=%d pedidos de alteração
pulls.waiting_count_1=%d revisão pendente
pulls.waiting_count_n=%d revisões pendentes
pulls.waiting_count_1=aguardando %d revisão
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.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.close=Fechar
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.title=Título
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.delete=Excluir este repositório
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_fork_1=- Forks deste repositório se tornarão independentes após a exclusão.
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:
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.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
rss.must_be_on_branch = Você precisa estar em uma branch para ter um feed RSS.
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
all_branches = Todas as branches
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 = Formato dos objetos
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 de objeto
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
commits.view_path = Ver neste ponto do histórico
@ -2665,42 +2662,6 @@ wiki.search = Pesquisar na wiki
wiki.no_search_results = Nenhum resultado
n_release_one = %s versão
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]
@ -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.delete=Excluir 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.delete_org_title=Excluir organização
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.
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>.
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]
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/
dashboard.sync_tag.started = Sincronização de etiquetas iniciada
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]
@ -3597,8 +3542,6 @@ owner.settings.chef.keypair=Gerar par de chaves
rpm.repository.architectures = Arquiteturas
rpm.repository = Informações do repositório
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=Segredos
@ -3639,7 +3582,7 @@ runners.name=Nome
runners.owner_type=Tipo
runners.description=Descrição
runners.labels=Rótulos
runners.last_online=Última vez online
runners.last_online=Última Vez Online
runners.runner_title=Runner
runners.task_list=Tarefas recentes neste runner
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.deletion.failed = Falha ao remover 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]
@ -3719,9 +3658,6 @@ component_loading = Carregando %s...
component_loading_failed = Não foi possível carregar o(a) %s
component_loading_info = Pode demorar um pouco…
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]
@ -3744,18 +3680,4 @@ code_search_by_git_grep = Os resultados atuais da pesquisa de código são forne
branch_kind = Pesquisar branches…
commit_kind = Pesquisar commits…
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.
[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
code_search_unavailable = A pesquisa de código não está disponível no momento. Entre em contato com o administrador do site.

View file

@ -162,7 +162,7 @@ copy_generic = Copiar para a área de transferência
[aria]
navbar=Barra de navegação
footer=Rodapé
footer.software=Sobre este software
footer.software=Sobre o Software
footer.links=Ligações
[heatmap]
@ -279,18 +279,18 @@ offline_mode.description=Desabilitar redes de entrega de conteúdos de terceiros
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.
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.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).
allow_only_external_registration.description=Os utilizadores apenas poderão criar novas contas usando serviços externos que tenham sido configurados.
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=Permitir a inscrição somente por meio de serviços externos
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_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.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.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_title=Configurações da conta de administração
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_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.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.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.description=Habilitar, por norma, a contagem do tempo nos novos repositórios.
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.
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.
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]
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_helper=Esta é a primeira contribuição deste utilizador para o repositório.
issues.role.contributor=Contribuidor
issues.role.contributor_helper=Este utilizador cometeu anteriormente para 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.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
@ -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_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.sha=Hash do blob
settings.lfs_pointers.sha=SHA do blob
settings.lfs_pointers.oid=OID
settings.lfs_pointers.inRepo=No repositório
settings.lfs_pointers.exists=Existe no armazenamento
@ -2743,19 +2740,6 @@ wiki.no_search_results = Sem resultados
settings.transfer.button = Transferir propriedade
settings.transfer.modal.title = Transferir propriedade
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]
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.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
config.app_slogan = Lema da instância
[action]
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_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.no_job = A sequência de trabalho tem de conter pelo menos um trabalho
[projects]
type-1.display_name=Planeamento individual

View file

@ -86,9 +86,9 @@ rerun=Перезапустить
rerun_all=Перезапустить все задания
save=Сохранить
add=Добавить
add_all=Включить все
remove=Исключить
remove_all=Исключить все
add_all=Добавить все
remove=Удалить
remove_all=Удалить все
remove_label_str=Удалить элемент «%s»
edit=Изменить
@ -140,7 +140,7 @@ confirm_delete_selected=Вы точно хотите удалить все вы
name=Название
value=Значение
tracked_time_summary = Сводка отслеженного времени на основе фильтров списка задач
view = Открыть
view = Просмотр
confirm_delete_artifact = Вы точно хотите удалить артефакт «%s»?
toggle_menu = Показать/скрыть меню
filter.not_archived = Не архивированные
@ -245,7 +245,7 @@ err_admin_name_is_invalid=Неверное имя администратора
general_title=Основные настройки
app_name=Название сервера
app_name_helper=Укажите название вашего сервера (Git-хостинга). Оно будет видно на всех страницах.
app_name_helper=Здесь вы можете ввести название своей компании.
repo_path=Путь до каталога репозиториев
repo_path_helper=Все удалённые Git репозитории будут сохранены в этом каталоге.
lfs_path=Путь до корневого каталога Git LFS
@ -275,22 +275,22 @@ register_confirm=Требовать подтверждение по эл. поч
mail_notify=Уведомления по эл. почте
server_service_title=Настройки сервера и внешних служб
offline_mode=Локальный режим
offline_mode.description=Отключить сторонние службы доставки контента и передавать все ресурсы из их локальных копий.
offline_mode.description=Отключить сторонние сети доставки контента и передавать все ресурсы из их локальных копий.
disable_gravatar=Отключить Gravatar
disable_gravatar.description=Отключить Gravatar и прочие сторонние источники аватаров. Если у пользователя нет локально установленного аватара, будет использован аватар по умолчанию.
disable_gravatar.description=Отключить Gravatar и сторонние источники аватаров. Если у пользователя нет локально установленного аватара, будет использоваться аватар по умолчанию.
federated_avatar_lookup=Федерированные аватары
federated_avatar_lookup.description=Искать аватары используя Libravatar.
disable_registration=Отключить самостоятельную регистрацию
disable_registration.description=Только администраторы смогут создавать новые учётные записи пользователей. Отключение саморегистрации крайне рекомендовано, разве что если вы не собираетесь создать публичный сервер для всех и готовы бороться с большим количеством спама.
disable_registration.description=Отключить самостоятельную регистрацию. Только администраторы смогут создавать новые учётные записи пользователей.
allow_only_external_registration.description=Пользователи смогут создавать новые учётные записи только через добавленные сторонние службы.
openid_signin=Вход через OpenID
openid_signin.description=Разрешить вход в учётные записи через OpenID.
openid_signup=Саморегистрация через OpenID
openid_signup.description=Разрешить пользователям регистрироваться через OpenID, если включена саморегистрация.
enable_captcha=CAPTCHA для регистрации
enable_captcha.description=Требовать прохождение CAPTCHA для регистрации учётных записей.
openid_signin=Включить вход через OpenID
openid_signin.description=Включить вход через OpenID.
openid_signup=Включить саморегистрацию через OpenID
openid_signup.description=Включить регистрацию пользователей через OpenID.
enable_captcha=Включить CAPTCHA при регистрации
enable_captcha.description=Запрашивать капчу при регистрации пользователя.
require_sign_in_view=Требовать авторизацию для просмотра содержимого
require_sign_in_view.description=Требовать наличие учётной записи для просмотра содержимого сервера. Посетители увидят лишь страницы входа и регистрации.
require_sign_in_view.description=Ограничить доступ к странице только вошедшими пользователями. Посетители увидят лишь страницы входа и регистрации.
admin_setting.description=Создание учётной записи администратора необязательно. Первый зарегистрированный пользователь автоматически становится администратором.
admin_title=Учётная запись администратора
admin_name=Логин администратора
@ -311,11 +311,11 @@ save_config_failed=Не удалось сохранить конфигураци
invalid_admin_setting=Некорректные настройки учётной записи администратора: %v
invalid_log_root_path=Недопустимый путь для логов: %v
default_keep_email_private=Скрывать адреса эл. почты по умолчанию
default_keep_email_private.description=Скрывать адреса эл. почты новых учётных записей по умолчанию, чтобы они не «утекали» сразу после регистрации.
default_keep_email_private.description=Скрывать адреса эл. почты новых учётных записей по умолчанию.
default_allow_create_organization=Разрешить создание организаций по умолчанию
default_allow_create_organization.description=Разрешать создание организаций новым пользователям по умолчанию. Если эта опция выключена, администратор будет должен выдавать такое разрешение новым пользователям по отдельности.
default_allow_create_organization.description=Разрешить новым учётным записям пользователей создавать организации по умолчанию.
default_enable_timetracking=Включить отслеживание времени по умолчанию
default_enable_timetracking.description=Использование отслеживания времени будет разрешено в новых репозиториях по умолчанию.
default_enable_timetracking.description=Включить отслеживание времени для новых репозиториев по умолчанию.
no_reply_address=Домен скрытых адресов почты
no_reply_address_helper=Доменное имя для пользователей со скрытым адресом эл. почты. Например, пользователь «joe» будет зарегистрирован в Git как «joe@noreply.example.org», если скрытый домен эл. почты задан как «noreply.example.org».
password_algorithm=Алгоритм хеширования паролей
@ -330,7 +330,7 @@ smtp_from_invalid = Адрес для отправки писем некорре
config_location_hint = Эти настройки конфигурации будут сохранены в:
allow_only_external_registration = Разрешить регистрацию только через сторонние службы
app_slogan = Лозунг сервера
app_slogan_helper = Укажите лозунг вашего сервера, либо оставьте пустым для отключения.
app_slogan_helper = Укажите лозунг вашего Git-хостинга, либо оставьте пустым для отключения.
[home]
uname_holder=Логин или адрес эл. почты
@ -669,22 +669,14 @@ form.name_pattern_not_allowed=Шаблон «%s» не допускается в
form.name_chars_not_allowed=Имя пользователя «%s» содержит недопустимые символы.
block = Заблокировать
unblock = Разблокировать
block_user.detail_2 = Этот пользователь не сможет взаимодействовать с вашими репозиториями, а также с задачами и комментариями, которые вы создали.
block_user.detail = Учтите, что блокировка этого пользователя приведёт ко следующему:
block_user.detail_2 = Этот пользователь не сможет взаимодействовать с вашими репозиториями, задачами и комментариями.
block_user.detail = Учтите, что блокировка этого пользователя повлияет на следующее:
follow_blocked_user = Вы не можете подписаться на этого пользователя, т.к. вы его заблокировали, либо он вас.
block_user = Заблокировать пользователя
block_user.detail_1 = Вы будете отписаны друг от друга и не сможете подписаться друг на друга.
block_user.detail_1 = Вы будете отписаны от этого пользователя.
block_user.detail_3 = Вы не сможете добавлять друг друга в качестве соучастников репозиториев.
followers_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]
profile=Профиль
@ -1321,7 +1313,7 @@ editor.filename_is_a_directory=Имя файла «%s» уже использу
editor.file_editing_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_already_exists=Файл «%s» уже существует в этом репозитории.
editor.file_already_exists=Файл с именем «%s» уже существует в репозитории.
editor.commit_empty_file_header=Закоммитить пустой файл
editor.commit_empty_file_text=Файл, который вы собираетесь зафиксировать, пуст. Продолжить?
editor.no_changes_to_show=Нет изменений.
@ -1855,7 +1847,7 @@ pulls.status_checks_warning=Некоторые проверки имеют пр
pulls.status_checks_failure=Некоторые проверки провалились
pulls.status_checks_error=Некоторые проверки сообщили об ошибках
pulls.status_checks_requested=Требуется
pulls.status_checks_details=Подробности
pulls.status_checks_details=Информация
pulls.status_checks_hide_all=Скрыть все проверки
pulls.status_checks_show_all=Показать все проверки
pulls.update_branch=Обновить ветку слиянием
@ -2220,7 +2212,7 @@ settings.githook_edit_desc=Если хук не активен, будет по
settings.githook_name=Название хукa
settings.githook_content=Содержимое хука
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.http_method=HTTP-метод
settings.content_type=Тип содержимого POST
@ -2260,7 +2252,7 @@ settings.event_issue_milestone=Добавление задач в этапы
settings.event_issue_milestone_desc=Этап или этап выполнения задания.
settings.event_issue_comment=Комментарии в задаче
settings.event_issue_comment_desc=Комментарий создан, изменён или удалён.
settings.event_header_pull_request=События запросов слияний
settings.event_header_pull_request=События запроса на слияние
settings.event_pull_request=Запрос на слияние
settings.event_pull_request_desc=Запрос на слияние открыт, закрыт, переоткрыт или отредактирован.
settings.event_pull_request_assign=Запроса на слияние назначен
@ -2765,8 +2757,6 @@ settings.federation_apapiurl = Федеративная ссылка на это
settings.federation_following_repos = Ссылки следуемых репозиториев. Разделены с «;», без пробелов.
n_release_one = %s выпуск
n_release_few = %s выпусков
subscribe.issue.guest.tooltip = Войдите, чтобы подписаться на эту задачу.
subscribe.pull.guest.tooltip = Войдите, чтобы подписаться на это слияние.
[graphs]
@ -2842,7 +2832,7 @@ members.leave.detail=Покинуть %s?
members.invite_desc=Добавить нового участника в %s:
members.invite_now=Пригласить
teams.join=Присоединиться
teams.join=Объединить
teams.leave=Выйти
teams.leave.detail=Покинуть %s?
teams.can_create_org_repo=Создать репозитории
@ -3271,7 +3261,7 @@ config.register_email_confirm=Требовать подтверждение по
config.disable_register=Саморегистрация отключена
config.allow_only_internal_registration=Разрешить регистрацию только напрямую через Forgejo
config.allow_only_external_registration=Регистрация только через сторонние службы
config.enable_openid_signup=Саморегистрация через OpenID
config.enable_openid_signup=Cаморегистрация через OpenID
config.enable_openid_signin=Вход через OpenID
config.show_registration_button=Кнопка регистрации
config.require_sign_in_view=Для просмотра необходима авторизация
@ -3557,7 +3547,7 @@ about=Об этом пакете
requirements=Требования
dependencies=Зависимости
keywords=Ключевые слова
details=Сведения
details=Подробнее
details.author=Автор
details.project_site=Сайт проекта
details.repository_site=Сайт репозитория
@ -3851,10 +3841,6 @@ match_tooltip = Включать только результаты, точно
code_search_unavailable = Поиск по коду сейчас недоступен. Уточните подробности у администратора.
runner_kind = Поиск исполнителей...
code_search_by_git_grep = Эти результаты получены через «git grep». Результатов может быть больше, если администратор сервера включит индексатор кода.
exact = Точный
exact_tooltip = Включать только результаты, точно соответствующие запросу
issue_kind = Поиск задач...
pull_kind = Поиск слияний...
[markup]

View file

@ -20,7 +20,7 @@ notifications=通知
active_stopwatch=活动时间跟踪器
tracked_time_summary=基于问题列表过滤器的跟踪时间概要
create_new=创建…
user_profile_and_more=个人信息和设置…
user_profile_and_more=个人信息和配置
signed_in_as=已登录用户
enable_javascript=此网站需要 JavaScript。
toc=目录
@ -245,7 +245,7 @@ err_admin_name_is_invalid=管理员用户名无效
general_title=一般设置
app_name=站点名称
app_name_helper=在此输入您的实例名称。它将显示在所有页面上
app_name_helper=您可以在此输入您公司的名称。
repo_path=仓库根目录
repo_path_helper=所有远程 Git 仓库将保存到此目录。
lfs_path=LFS 根目录
@ -275,20 +275,20 @@ register_confirm=需要发电子邮件确认注册
mail_notify=启用邮件通知提醒
server_service_title=服务器和第三方服务设置
offline_mode=启用本地模式
offline_mode.description=禁用第三方 CDN 并在本地提供所有资源。
offline_mode.description=禁用第三方 CDN 并在本地服务所有资源。
disable_gravatar=禁用 Gravatar 头像
disable_gravatar.description=禁用 Gravatar 和第三方头像源。除非用户在实例上传头像, 否则将使用默认的头像。
disable_gravatar.description=禁用 Gravatar 和第三方头像源。除非用户在本地上传头像, 否则将使用默认的头像。
federated_avatar_lookup=启用 Federated 头像
federated_avatar_lookup.description=使用 Libravatar 查找头像
federated_avatar_lookup.description=启用 Federated Avatars 查找以使用开源的 Libravatar 服务
disable_registration=禁止用户自助注册
disable_registration.description=只有实例管理员才能创建新的用户帐户。强烈建议保持注册禁用,除非您打算为所有人托管一个公共实例并准备好处理大量垃圾帐户。
allow_only_external_registration.description=仅允许使用已配置的外部服务来创建新帐户。
disable_registration.description=禁用用户自助注册。只有管理员才能创建新的用户帐户。
allow_only_external_registration.description=仅允许通过外部服务注册
openid_signin=启用 OpenID 登录
openid_signin.description=允许用户通过 OpenID 登录。
openid_signin.description=启用通过 OpenID 登录
openid_signup=启用 OpenID 自助注册
openid_signup.description=如果启用了自助注册,则允许用户通过 OpenID 创建帐户
openid_signup.description=启用基于 OpenID 的用户自助注册
enable_captcha=启用注册验证码
enable_captcha.description=要求用户通过 CAPTCHA 验证才能创建帐户。
enable_captcha.description=要求在用户注册时输入预验证码
require_sign_in_view=启用页面访问限制
require_sign_in_view.description=仅允许已登录用户访问页面。访客只能看到注册和登录页。
admin_setting.description=创建管理员帐户是可选的。第一个注册用户将自动成为管理员。
@ -311,11 +311,11 @@ save_config_failed=应用配置保存失败:%v
invalid_admin_setting=管理员帐户设置无效: %v
invalid_log_root_path=日志路径无效: %v
default_keep_email_private=默认情况下隐藏电子邮件地址
default_keep_email_private.description=默认为新用户启用电子邮件地址隐藏,防止这些信息在注册后立即泄露
default_keep_email_private.description=默认情况下, 隐藏新用户帐户的电子邮件地址
default_allow_create_organization=默认情况下允许创建组织
default_allow_create_organization.description=默认允许新用户创建组织。禁用此选项时,管理员必须向新用户授予创建组织的权限
default_allow_create_organization.description=默认情况下, 允许新用户帐户创建组织
default_enable_timetracking=默认情况下启用时间跟踪
default_enable_timetracking.description=默认允许新存储库使用时间跟踪功能
default_enable_timetracking.description=默认情况下启用新仓库的时间跟踪
no_reply_address=隐藏电子邮件
no_reply_address_helper=用于设置隐藏电子邮件地址的用户使用的电子邮件域名。例如如果用于隐藏电子邮件地址的域名设为“noreply.example.org”则用户名 “joe” 在 Git 中将以 “joe@noreply.example.org” 表示。
password_algorithm=密码哈希算法
@ -329,11 +329,9 @@ enable_update_checker_helper_forgejo = 通过检查 release.forgejo.org 上的 D
smtp_from_invalid = 电子邮件发件人地址无效
config_location_hint = 这些配置项将被保存在:
allow_only_external_registration = 仅允许通过外部服务注册
app_slogan = 实例标语
app_slogan_helper = 在此处输入您的实例标语。留空则禁用。
[home]
uname_holder=用户名或电子邮箱
uname_holder=用户名或邮箱
password_holder=密码
switch_dashboard_context=切换控制面板用户
my_repos=仓库列表
@ -410,7 +408,7 @@ resent_limit_prompt=您请求发送激活邮件过于频繁,请等待 3 分钟
has_unconfirmed_mail=%s 您好,系统检测到您有一封发送至 <b>%s</b> 但未被确认的邮件。如果您未收到激活邮件,或需要重新发送,请单击下方的按钮。
resend_mail=单击此处重新发送确认邮件
email_not_associate=您输入的邮箱地址未被关联到任何帐号!
send_reset_mail=发送恢复邮件
send_reset_mail=发送账户恢复邮件
reset_password=账户恢复
invalid_code=此确认密钥无效或已过期。
invalid_code_forgot_password=你的确认码无效或者已过期,点击 <a href="%s">这里</a> 开始新的会话。
@ -427,8 +425,8 @@ twofa_passcode_incorrect=你的验证码不正确。如果你丢失了你的设
twofa_scratch_token_incorrect=你的验证口令不正确。
login_userpass=登录
tab_openid=OpenID
oauth_signup_tab=注册帐号
oauth_signup_title=完成新帐户创建
oauth_signup_tab=注册帐号
oauth_signup_title=完成新帐户
oauth_signup_submit=完成账号
oauth_signin_tab=绑定到现有帐号
oauth_signin_title=登录以授权绑定帐户
@ -687,13 +685,13 @@ password=修改密码
security=安全
avatar=头像设置
ssh_gpg_keys=SSH / GPG 密钥
social=社交帐号
social=社交帐号绑定
applications=应用
orgs=组织
orgs=管理组织
repos=仓库列表
delete=删除帐户
twofa=两步验证
account_link=已绑定帐户
account_link=已绑定帐户
organization=组织
uid=UID
webauthn=安全密钥
@ -763,14 +761,14 @@ password_change_disabled=非本地帐户不能通过 Forgejo 的 web 界面更
emails=邮箱地址
manage_emails=管理邮箱地址
manage_themes=默认主题
manage_openid=OpenID 地址
manage_themes=选择默认主题
manage_openid=管理 OpenID 地址
email_desc=您的主要电子邮件地址将用于通知、密码恢复基于网页界面的Git操作(只要它不是设置为隐藏的)。
theme_desc=这将是您在整个网站上的默认主题。
primary=主要
activated=已激活
requires_activation=需要激活
primary_email=设为主要
primary_email=设为主要邮件地址
activate_email=发送激活邮件
activations_pending=等待激活
can_not_add_email_activations_pending=有一个待处理的激活请求,请稍等几分钟后再尝试添加新的电子邮件地址。
@ -867,7 +865,7 @@ token_state_desc=7 天内使用过该密钥
principal_state_desc=7 天内使用过该规则
show_openid=在个人信息上显示
hide_openid=在个人信息上隐藏
ssh_disabled=SSH 禁用
ssh_disabled=SSH 禁用
ssh_signonly=SSH 目前已禁用,因此这些密钥仅用于提交签名验证。
ssh_externally_managed=此 SSH 密钥是由外部管理的
manage_social=管理关联社交帐户
@ -875,7 +873,7 @@ social_desc=这些社交账户可以用来登录您的账户。确保您认识
unbind=取消链接
unbind_success=社交账户已成功移除。
manage_access_token=访问令牌
manage_access_token=管理访问令牌
generate_new_token=生成新的令牌
tokens_desc=这些令牌拥有通过 Forgejo API 对您的帐户的访问权限。
token_name=令牌名称
@ -957,7 +955,7 @@ webauthn_delete_key_desc=如果删除了安全密钥,则不能再使用它登
webauthn_key_loss_warning=如果您丢失了您的安全密钥,您将无法访问您的帐户。
webauthn_alternative_tip=您可能想要配置额外的身份验证方法。
manage_account_links=已绑定的账号
manage_account_links=管理绑定过的账号
manage_account_links_desc=这些外部帐户已经绑定到您的 Forgejo 帐户。
account_links_not_available=当前没有与您的 Forgejo 帐户绑定的外部帐户。
link_account=链接账户
@ -996,7 +994,7 @@ blocked_since = 自 %s 起被屏蔽
user_unblock_success = 已成功取消对该用户的屏蔽。
user_block_success = 已成功屏蔽该用户。
change_password = 更改密码
additional_repo_units_hint = 建议仓库启用更多功能
additional_repo_units_hint = 鼓励仓库启用更多功能
hints = 提示
update_hints = 更新提示
additional_repo_units_hint_description = 在所有存在未启用的功能的仓库内显示一个“选择更多功能…”按钮。
@ -1592,7 +1590,7 @@ issues.role.collaborator_helper=该用户已被邀请在仓库上进行协作。
issues.role.first_time_contributor=首次贡献者
issues.role.first_time_contributor_helper=这是该用户对仓库的第一次贡献。
issues.role.contributor=贡献者
issues.role.contributor_helper=该用户之前已提交至该仓库。
issues.role.contributor_helper=该用户之前提交过该仓库。
issues.re_request_review=再次请求审核
issues.is_stale=此评审之后代码有更新
issues.remove_request_review=移除审核请求
@ -1868,7 +1866,7 @@ pulls.head_out_of_date=合并失败在生成合并时head 已更新。提
pulls.has_merged=失败:合并请求已经被合并,您不能再次合并或更改目标分支。
pulls.push_rejected=合并失败:推送被拒绝。请查看此仓库的 Git 钩子。
pulls.push_rejected_summary=详细拒绝信息
pulls.push_rejected_no_message=推送失败:此推送被拒绝但未提供其他信息。请检查此仓库的 Git 钩子
pulls.push_rejected_no_message=推送失败:此推送被拒绝但未提供其他信息。请检查此仓库的 Git Hook
pulls.open_unmerged_pull_exists=`您不能执行重新打开操作, 因为已经存在相同的合并请求 (#%d)。`
pulls.status_checking=一些检测仍在等待运行
pulls.status_checks_success=所有检测均成功
@ -1999,8 +1997,8 @@ activity.period.quarterly=3个月
activity.period.semiyearly=6 个月
activity.period.yearly=1年
activity.overview=概览
activity.active_prs_count_1=<strong>%d</strong> 个活跃合并请求
activity.active_prs_count_n=<strong>%d</strong> 个活跃合并请求
activity.active_prs_count_1=<strong>%d</strong> 合并请求
activity.active_prs_count_n=<strong>%d</strong> 项活动的合并请求
activity.merged_prs_count_1=已合并的合并请求
activity.merged_prs_count_n=已合并的合并请求
activity.opened_prs_count_1=新合并请求
@ -2149,12 +2147,12 @@ settings.pulls.default_allow_edits_from_maintainers=默认开启允许维护者
settings.releases_desc=启用版本发布
settings.packages_desc=启用仓库软件包注册中心
settings.projects_desc=启用仓库项目
settings.actions_desc=使用 Forgejo Actions 启用集成 CI/CD 管道
settings.actions_desc=启用 Actions
settings.admin_settings=管理员设置
settings.admin_enable_health_check=启用仓库健康检查 (git fsck)
settings.admin_code_indexer=代码索引器
settings.admin_stats_indexer=代码统计索引器
settings.admin_indexer_commit_sha=上次索引的提交
settings.admin_indexer_commit_sha=上次索引的 SHA
settings.admin_indexer_unindexed=未索引
settings.reindex_button=添加到重新索引队列
settings.reindex_requested=已请求重新索引
@ -2412,7 +2410,7 @@ settings.ignore_stale_approvals=忽略过期批准
settings.ignore_stale_approvals_desc=对旧提交(过期审核)的批准将不计入 PR 的批准数。如果过期审查已被驳回,则与此无关。
settings.require_signed_commits=需要签名提交
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_patterns=规则
settings.protect_protected_file_patterns=受保护的文件模式(使用半角分号“;”分隔):
@ -2510,10 +2508,10 @@ diff.commit=当前提交
diff.git-notes=Notes
diff.data_not_available=比较内容不可用
diff.options_button=Diff 选项
diff.show_diff_stats=显示统计信息
diff.show_diff_stats=显示统计
diff.download_patch=下载 Patch 文件
diff.download_diff=下载 Diff 文件
diff.show_split_view=分视图
diff.show_split_view=视图
diff.show_unified_view=合并视图
diff.whitespace_button=空白符号
diff.whitespace_show_everything=显示所有更改
@ -2544,7 +2542,7 @@ diff.comment.add_single_comment=添加单条评论
diff.comment.add_review_comment=添加评论
diff.comment.start_review=开始评审
diff.comment.reply=回复
diff.review=完成审核
diff.review=评审
diff.review.header=提交评审
diff.review.placeholder=评审意见
diff.review.comment=评论
@ -2554,7 +2552,7 @@ diff.review.reject=请求变更
diff.review.self_approve=合并请求作者不能批准自己的合并请求
diff.committed_by=提交者
diff.protected=受保护的
diff.image.side_by_side=
diff.image.side_by_side=
diff.image.swipe=滑动
diff.image.overlay=叠加
diff.has_escaped=这一行有隐藏的 Unicode 字符
@ -2590,9 +2588,9 @@ release.prerelease_helper=标记此版本不适合生产使用。
release.cancel=取消
release.publish=发布版本
release.save_draft=保存草稿
release.edit_release=更新此次发布
release.edit_release=保存此次发布
release.delete_release=删除发布
release.delete_tag=删除标签
release.delete_tag=删除 Git标签
release.deletion=删除发布
release.deletion_desc=删除版本发布只会从 Forgejo 中移除。这不会影响 Git 的标签以及您仓库的内容和历史。是否继续?
release.deletion_success=Release已被删除。
@ -2605,14 +2603,14 @@ release.tag_already_exist=此 Git标签 名称已存在
release.downloads=下载附件
release.download_count=下载:%s
release.add_tag_msg=使用发布的标题和内容作为标签消息。
release.add_tag=创建标签
release.add_tag=创建标签
release.releases_for=%s 的版本发布
release.tags_for=%s 的标签
branch.name=分支名称
branch.already_exists=名为 %s 的分支已存在。
branch.delete_head=刪除
branch.delete=删除分支 "%s"
branch.delete=删除分支 %s
branch.delete_html=删除分支
branch.delete_desc=删除分支是永久的。虽然已删除的分支在实际被删除前有可能会短时间存在,但这在大多数情况下无法撤销。是否继续?
branch.deletion_success=分支 %s 已被删除。
@ -2629,9 +2627,9 @@ branch.restore_success=分支 "%s"已还原。
branch.restore_failed=还原分支 "%s"失败。
branch.protected_deletion_failed=不能删除受保护的分支 "%s"。
branch.default_deletion_failed=不能删除默认分支"%s"。
branch.restore=恢复分支 "%s"
branch.download=下载分支 "%s"
branch.rename=重命名分支 "%s"
branch.restore=`还原分支 "%s"`
branch.download=`下载分支 "%s"`
branch.rename=`重命名分支 "%s"`
branch.search=搜索分支
branch.included_desc=此分支是默认分支的一部分
branch.included=已包含
@ -2728,7 +2726,7 @@ n_branch_one = %s 分支
n_branch_few = %s 分支
n_tag_one = %s 标签
n_tag_few = %s 标签
editor.commit_id_not_matching = 您在编辑文件时该文件已被更改。请提交到一个新的分支,然后再将这个新的分支合并回当前分支。
editor.commit_id_not_matching = 此提交ID与您当前编辑的不匹配。请提交到一个新的分支,然后再将这个新的分支合并回当前分支。
issues.num_participants_one = %d 个参与者
issues.archived_label_description = (已归档)%s
editor.push_out_of_date = 推送似乎已过期。
@ -2764,12 +2762,6 @@ project = 项目
issues.edit.already_changed = 无法保存对工单的更改。工单似乎已经被另一个用户修改了,为了防止修改被覆盖,请刷新页面后再次尝试编辑
pulls.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]
component_loading=正在加载 %s...
@ -2809,7 +2801,7 @@ form.create_org_not_allowed=此账号禁止创建组织
settings=组织设置
settings.options=组织
settings.full_name=全名
settings.full_name=组织全名
settings.email=联系电子邮件
settings.website=网站
settings.location=所在地区
@ -2822,7 +2814,7 @@ settings.visibility.limited_shortname=受限
settings.visibility.private=私有 (仅对组织成员可见)
settings.visibility.private_shortname=私有
settings.update_settings=更新设置
settings.update_settings=更新组织设置
settings.update_setting_success=组织设置已更新。
settings.change_orgname_prompt=注意:更改组织名称同时会更改组织的 URL 地址并释放旧的名称。
settings.change_orgname_redirect_prompt=在被人使用前,旧用户名将会被重定向。
@ -2830,7 +2822,7 @@ settings.update_avatar_success=组织头像已经更新。
settings.delete=删除组织
settings.delete_account=删除当前组织
settings.delete_prompt=删除操作会永久清除该组织的信息,并且 <strong>不可恢复</strong>
settings.confirm_delete_account=确认删除
settings.confirm_delete_account=确认删除组织
settings.delete_org_title=删除组织
settings.delete_org_desc=此组织将会被永久删除,确认继续吗?
settings.hooks_desc=在此处添加的 Web 钩子将会应用到该组织下的 <strong>所有仓库</strong>。
@ -2871,7 +2863,7 @@ teams.no_desc=该团队暂无描述
teams.settings=团队设置
teams.owners_permission_desc=管理员团队对 <strong>所有仓库</strong> 具有操作权限,且对组织具有 <strong>管理员权限</strong>。
teams.members=团队成员
teams.update_settings=更新设置
teams.update_settings=更新团队设置
teams.delete_team=删除团队
teams.add_team_member=添加团队成员
teams.invite_team_member=邀请加入 %s
@ -2910,7 +2902,7 @@ open_dashboard = 打开仪表盘
dashboard=管理面板
self_check=自我检查
identity_access=身份及认证
users=用户帐户
users=帐户管理
organizations=组织管理
assets=代码资产
repositories=仓库管理
@ -3012,7 +3004,7 @@ dashboard.sync_branch.started=分支同步已开始
dashboard.sync_tag.started=标签同步已开始
dashboard.rebuild_issue_indexer=重建工单索引
users.user_manage_panel=管理用户帐户
users.user_manage_panel=用户帐户管理
users.new_account=创建新帐户
users.name=用户名
users.full_name=全名
@ -3027,7 +3019,7 @@ users.repos=仓库数
users.created=创建时间
users.last_login=上次登录
users.never_login=从未登录
users.send_register_notify=通过邮件发送注册通知
users.send_register_notify=发送注册通知
users.new_success=用户账户 '%s' 已被创建。
users.edit=修改
users.auth_source=认证源
@ -3150,7 +3142,7 @@ auths.attribute_surname=姓氏属性
auths.attribute_mail=电子邮箱属性
auths.attribute_ssh_public_key=SSH公钥属性
auths.attribute_avatar=头像属性
auths.attributes_in_bind=bind DN 中拉取属性信息
auths.attributes_in_bind=Bind DN 中拉取属性信息
auths.allow_deactivate_all=允许在搜索结果为空时停用所有用户
auths.use_paged_search=使用分页搜索
auths.search_page_size=分页大小
@ -3202,7 +3194,7 @@ auths.oauth2_admin_group=管理员用户组的 Claim 声明值。(可选 - 需
auths.oauth2_restricted_group=受限用户组的 Claim 声明值。(可选 - 需要上面的声明名称)
auths.oauth2_map_group_to_team=映射声明的组到组织团队。(可选 - 要求在上面填写声明的名字)
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_helper=允许 SSPI 认证在用户第一次登录时自动创建新账号
auths.sspi_auto_activate_users=自动激活用户
@ -3236,7 +3228,7 @@ auths.new_success=已添加身份验证 '%s'。
auths.update_success=认证源已经更新。
auths.update=更新认证源
auths.delete=删除认证源
auths.delete_auth_title=删除证源
auths.delete_auth_title=删除身份验证源
auths.delete_auth_desc=删除一个认证源将阻止使用它进行登录。确认?
auths.still_in_used=认证源仍在使用。请先解除或者删除使用此认证源的用户。
auths.deletion_success=认证源已经更新。
@ -3246,9 +3238,9 @@ auths.unable_to_initialize_openid=无法初始化 OpenID Connect 提供商: %s
auths.invalid_openIdConnectAutoDiscoveryURL=无效的 Auto Discovery URL (这必须是一个以 http:// 或 https://开头的有效的 URL)
config.server_config=服务器配置
config.app_name=实例名称
config.app_ver=Forgejo 版本
config.app_url=基本 URL
config.app_name=站点名称
config.app_ver=Forgejo版本
config.app_url=Forgejo 基本 URL
config.custom_conf=配置文件路径
config.custom_file_root_path=自定义文件根路径
config.domain=服务器域名
@ -3262,7 +3254,7 @@ config.repo_root_path=仓库根目录
config.lfs_root_path=LFS根目录
config.log_file_root_path=日志路径
config.script_type=脚本类型
config.reverse_auth_user=反向代理认证用户
config.reverse_auth_user=反向代理认证
config.ssh_config=SSH 配置
config.ssh_enabled=启用
@ -3295,10 +3287,10 @@ config.register_email_confirm=需要电子邮件确认注册
config.disable_register=禁止用户注册
config.allow_only_internal_registration=只允许通过 Forgejo 进行注册
config.allow_only_external_registration=仅允许通过外部服务注册
config.enable_openid_signup=启用 OpenID 自注册
config.enable_openid_signup=启用 OpenID 自注册
config.enable_openid_signin=启用 OpenID 登录
config.show_registration_button=显示注册按钮
config.require_sign_in_view=需要登录才能查看内容
config.require_sign_in_view=启用登录访问限制
config.mail_notify=启用邮件通知
config.enable_captcha=启用登录验证码
config.active_code_lives=激活用户链接有效期
@ -3309,7 +3301,7 @@ config.enable_timetracking=启用时间跟踪
config.default_enable_timetracking=默认情况下启用时间跟踪
config.allow_dots_in_usernames = 允许用户在用户名中使用英文句号。不影响已有的帐户。
config.default_allow_only_contributors_to_track_time=仅允许成员跟踪时间
config.no_reply_address=隐藏电子邮件域
config.no_reply_address=隐藏电子邮件域
config.default_visibility_organization=新组织的默认可见性
config.default_enable_dependencies=默认情况下启用工单依赖
@ -3318,7 +3310,7 @@ config.queue_length=队列长度
config.deliver_timeout=推送超时
config.skip_tls_verify=跳过 TLS 验证
config.mailer_config=邮件配置
config.mailer_config=Mailer 配置
config.mailer_enabled=启用服务
config.mailer_enable_helo=启用HELO
config.mailer_name=任务名称
@ -3334,17 +3326,17 @@ config.mailer_use_dummy=Dummy
config.test_email_placeholder=电子邮址 (例如test@example.com)
config.send_test_mail=发送测试邮件
config.send_test_mail_submit=发送
config.test_mail_failed=发送测试邮件至 "%s" 时失败:%v
config.test_mail_sent=测试邮件已经发送至 "%s"
config.test_mail_failed=发送测试邮件至 '%s' 时失败:%v
config.test_mail_sent=测试邮件已经发送至 '%s'
config.oauth_config=OAuth 配置
config.oauth_enabled=启用
config.cache_config=缓存配置
config.cache_adapter=缓存适配器
config.cache_interval=缓存周期
config.cache_conn=缓存连接字符串
config.cache_item_ttl=缓存目 TTL
config.cache_config=Cache 配置
config.cache_adapter=Cache 适配器
config.cache_interval=Cache 周期
config.cache_conn=Cache 连接字符串
config.cache_item_ttl=缓存目 TTL
config.session_config=Session 配置
config.session_provider=Session 提供者
@ -3358,7 +3350,7 @@ config.cookie_life_time=Cookie 生命周期
config.picture_config=图片和头像配置
config.picture_service=图片服务
config.disable_gravatar=禁用 Gravatar 头像
config.enable_federated_avatar=启用 federated avatars
config.enable_federated_avatar=启用 Federated Avatars
config.git_config=Git 配置
config.git_disable_diff_highlight=禁用差异对比语法高亮
@ -3383,7 +3375,7 @@ config.set_setting_failed=设置 %s 失败
monitor.stats=统计
monitor.cron=定时任务
monitor.cron=Cron 任务
monitor.name=任务名称
monitor.schedule=任务安排
monitor.next=下次执行时间
@ -3407,11 +3399,11 @@ monitor.queue=队列: %s
monitor.queue.name=名称
monitor.queue.type=类型
monitor.queue.exemplar=数据类型
monitor.queue.numberworkers=worker 数量
monitor.queue.activeworkers=活跃 worker
monitor.queue.maxnumberworkers=最大 worker 数量
monitor.queue.numberworkers=工作者数量
monitor.queue.activeworkers=活跃工作者
monitor.queue.maxnumberworkers=最大工作者数量
monitor.queue.numberinqueue=队列中的数量
monitor.queue.review_add=审查 / 添加 worker
monitor.queue.review_add=查看 / 添加工作者
monitor.queue.settings.title=池设置
monitor.queue.settings.desc=因为工作者队列阻塞,池正在动态扩展。
monitor.queue.settings.maxnumberworkers=最大工作者数量
@ -3437,7 +3429,7 @@ notices.desc=提示描述
notices.op=操作
notices.delete_success=系统通知已被删除。
dashboard.sync_repo_tags = 将 git 数据中的标签同步到数据库
dashboard.sync_tag.started = 标签同步开始
dashboard.sync_tag.started = 标签同步开始
self_check = 自检
self_check.no_problem_found = 未找到问题。
self_check.database_collation_mismatch = 期望数据库使用排序规则:%s
@ -3456,7 +3448,6 @@ config_settings = 设置
config_summary = 概况
auths.default_domain_name = 用于电子邮件地址的默认域名
config.open_with_editor_app_help = 克隆菜单中的“打开方式”所用的编辑器。如果留空,将使用默认值。展开以查看默认值。
config.app_slogan = 实例标语
[action]
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.error=无法重建 Cargo 索引: %v
owner.settings.cargo.rebuild.success=Cargo 索引已成功重建。
owner.settings.cleanuprules.title=清理规则
owner.settings.cleanuprules.title=管理清理规则
owner.settings.cleanuprules.add=添加清理规则
owner.settings.cleanuprules.edit=编辑清理规则
owner.settings.cleanuprules.none=尚无清理规则
owner.settings.cleanuprules.none=没有可用的清理规则。请查阅文档
owner.settings.cleanuprules.preview=清理规则预览
owner.settings.cleanuprules.preview.overview=%d 个软件包计划被删除。
owner.settings.cleanuprules.preview.none=清理规则与任何软件包都不匹配。
@ -3722,7 +3713,7 @@ management=密钥管理
[actions]
actions=Actions
unit.desc=使用 Forgejo Actions 管理集成的 CI/CD 管道
unit.desc=管理Actions
status.unknown=未知
status.waiting=等待中
@ -3734,7 +3725,7 @@ status.skipped=已忽略
status.blocked=阻塞中
runners=Runners
runners.runner_manage_panel=管理 Runners
runners.runner_manage_panel=Runners管理
runners.new=创建 Runner
runners.new_notice=如何启动一个运行器
runners.status=状态
@ -3782,21 +3773,21 @@ runs.actors_no_select=所有操作者
runs.status_no_select=所有状态
runs.no_results=没有匹配的结果。
runs.no_workflows=目前还没有工作流。
runs.no_workflows.quick_start=不知道如何使用 Forgejo 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.quick_start=不知道如何使用 Gitea Actions吗请查看 <a target="_blank" rel="noopener noreferrer" href="%s">快速启动指南</a>。
runs.no_workflows.documentation=关于Gitea Actions的更多信息请参阅 <a target="_blank" rel="noopener noreferrer" href="%s">文档</a>。
runs.no_runs=工作流尚未运行过。
runs.empty_commit_message=(空白的提交消息)
workflow.disable=禁用工作流
workflow.disable_success=工作流 "%s" 已成功禁用。
workflow.disable_success=工作流 '%s' 已成功禁用。
workflow.enable=启用工作流
workflow.enable_success=工作流 "%s" 已成功启用。
workflow.enable_success=工作流 '%s' 已成功启用。
workflow.disabled=工作流已禁用。
need_approval_desc=该工作流由派生仓库的合并请求所触发,需要批准方可运行。
variables=变量
variables.management=管理变量
variables.management=变量管理
variables.creation=添加变量
variables.none=目前还没有变量。
variables.deletion=删除变量
@ -3851,10 +3842,6 @@ code_search_by_git_grep = 当前搜索结果由 git grep 提供,如果站点
match = 匹配
match_tooltip = 仅包含与搜索词完全匹配的结果
fuzzy_tooltip = 在搜索结果中包含与搜索词相近的项目
exact = 精确
issue_kind = 搜索工单...
pull_kind = 搜索拉取...
exact_tooltip = 仅包含与精确搜索词匹配的结果
[munits.data]

895
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -24,7 +24,7 @@
"dayjs": "1.11.11",
"dropzone": "6.0.0-beta.2",
"easymde": "2.18.0",
"esbuild-loader": "4.1.0",
"esbuild-loader": "4.2.0",
"escape-goat": "4.0.0",
"fast-glob": "3.3.2",
"htmx.org": "1.9.12",
@ -34,7 +34,7 @@
"license-checker-webpack-plugin": "0.2.1",
"mermaid": "10.9.1",
"mini-css-extract-plugin": "2.9.0",
"minimatch": "9.0.5",
"minimatch": "9.0.4",
"monaco-editor": "0.47.0",
"monaco-editor-webpack-plugin": "7.1.0",
"pdfobject": "2.3.0",
@ -53,23 +53,22 @@
"tributejs": "5.1.3",
"uint8-to-base64": "0.2.0",
"vanilla-colorful": "0.7.2",
"vue": "3.4.30",
"vue": "3.4.27",
"vue-bar-graph": "2.0.0",
"vue-chartjs": "5.3.1",
"vue-loader": "17.4.2",
"vue3-calendar-heatmap": "2.0.5",
"webpack": "5.92.1",
"webpack": "5.91.0",
"webpack-cli": "5.1.4",
"wrap-ansi": "9.0.0"
},
"devDependencies": {
"@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",
"@stylistic/eslint-plugin-js": "1.8.1",
"@stylistic/stylelint-plugin": "2.1.2",
"@vitejs/plugin-vue": "5.0.4",
"@vitest/coverage-v8": "1.6.0",
"@vue/test-utils": "2.4.6",
"eslint": "8.57.0",
"eslint-plugin-array-func": "4.0.0",
@ -84,9 +83,9 @@
"eslint-plugin-vitest": "0.5.4",
"eslint-plugin-vitest-globals": "1.5.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",
"happy-dom": "14.12.3",
"happy-dom": "14.12.0",
"markdownlint-cli": "0.41.0",
"postcss-html": "1.7.0",
"stylelint": "16.6.1",
@ -94,7 +93,7 @@
"stylelint-declaration-strict-value": "1.10.4",
"stylelint-value-no-unknown-custom-properties": "6.0.1",
"svgo": "3.2.0",
"vite-string-plugin": "1.3.4",
"vite-string-plugin": "1.3.2",
"vitest": "1.6.0"
},
"browserslist": ["defaults"]

View file

@ -0,0 +1 @@
Wrongfully hidden "Use Custom URLs Instead of Default URLs" checkbox on Authentication Source Administration page.

View file

@ -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)

View file

@ -1 +0,0 @@
User profiles: only show RSS feed button and Public activity tab when the activity can be accessed, add messages about visibility

View file

@ -1 +0,0 @@
Make tooltip of Author label in comments more clear

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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)

View file

@ -1 +0,0 @@
- [commit](https://codeberg.org/forgejo/forgejo/commit/358cd67c4f316f2d4f1d3be6dcb891dc04a2ff07) reduce memory usage for chunked artifact uploads to S3

View file

@ -7,8 +7,7 @@
"group:postcss",
"group:linters",
"schedule:daily",
"schedule:automergeDaily",
"local>forgejo-contrib/forgejo-renovate//go.json"
"schedule:automergeDaily"
],
"ignorePresets": [
":semanticPrefixFixDepsChoreOthers",
@ -18,7 +17,7 @@
"semanticCommits": "disabled",
"automergeStrategy": "merge-commit",
"postUpdateOptions": ["gomodTidy", "gomodUpdateImportPaths", "npmDedupe"],
"prConcurrentLimit": 10,
"prConcurrentLimit": 5,
"internalChecksFilter": "strict",
"osvVulnerabilityAlerts": true,
"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",
"matchDepNames": [
"elasticsearch"
"elasticsearch",
],
"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",
"matchDepNames": [
@ -93,8 +82,7 @@
"matchDatasources": ["docker"],
"matchPackageNames": ["ghcr.io/visualon/renovate"],
"matchUpdateTypes": ["minor", "patch", "digest"],
"automerge": true,
"groupName": "renovate"
"automerge": true
},
{
"description": "Split minor and patch updates",
@ -159,6 +147,8 @@
"@playwright/",
"@stoplight/spectral-cli",
"@stylistic/",
"ghcr.io/devcontainers/features/",
"ghcr.io/devcontainers-contrib/features/",
"mcr.microsoft.com/devcontainers/"
],
"automerge": true
@ -197,7 +187,7 @@
"customType": "regex",
"fileMatch": ["^Makefile$"],
"matchStrings": [
" \\?= (?<depName>.+?)@(?<currentValue>.+?) # renovate: datasource=(?<datasource>.+?)(?: packageName=(?<packageName>.+?))?( versioning=(?<versioning>.+?))?\\s"
" \\?= (?<depName>.+?)@(?<currentValue>.+?) # renovate: datasource=(?<datasource>.+?)\\s"
]
}
]

View file

@ -241,12 +241,16 @@ func (ar artifactRoutes) uploadArtifact(ctx *ArtifactContext) {
}
// 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
expiredDays := setting.Actions.ArtifactRetentionDays
if queryRetentionDays := ctx.Req.URL.Query().Get("retentionDays"); queryRetentionDays != "" {
var err error
expiredDays, err = strconv.ParseInt(queryRetentionDays, 10, 64)
if err != nil {
log.Error("Error parse retention days: %v", err)

View file

@ -39,7 +39,7 @@ func saveUploadChunkBase(st storage.ObjectStorage, ctx *ArtifactContext,
r = io.TeeReader(r, hasher)
}
// save chunk to storage
writtenSize, err := st.Save(storagePath, r, contentSize)
writtenSize, err := st.Save(storagePath, r, -1)
if err != nil {
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
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 {
return fmt.Errorf("save merged file error: %v", err)
}

View file

@ -43,7 +43,7 @@ func validateRunID(ctx *ArtifactContext) (*actions.ActionTask, int64, bool) {
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
runID, err := strconv.ParseInt(rawRunID, 10, 64)
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.
// 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
xTfsLength, _ := strconv.ParseInt(ctx.Req.Header.Get(artifactXTfsFileLengthHeader), 10, 64)
if xTfsLength > 0 {
return xTfsLength, contentLength
return xTfsLength, contentLength, nil
}
return contentLength, contentLength
return contentLength, contentLength, nil
}

View file

@ -26,7 +26,7 @@ var uploadVersionMutex sync.Mutex
// 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
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)
exists := false

View file

@ -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.WriteHeader(status)
if _, err := ctx.Resp.Write([]byte(xml.Header)); err != nil {

View file

@ -1112,15 +1112,6 @@ func Routes() *web.Route {
m.Post("", reqToken(), reqRepoWriter(unit.TypeCode), mustNotBeArchived, bind(api.CreateTagOption{}), repo.CreateTag)
m.Delete("/*", reqToken(), reqRepoWriter(unit.TypeCode), mustNotBeArchived, repo.DeleteTag)
}, 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.Get("/tasks", repo.ListActionTasks)
}, reqRepoReader(unit.TypeActions), context.ReferencesGitRepo(true))

View file

@ -64,7 +64,7 @@ func CompareDiff(ctx *context.APIContext) {
}
}
_, headGitRepo, ci, _, _ := parseCompareInfo(ctx, api.CreatePullRequestOption{
_, _, headGitRepo, ci, _, _ := parseCompareInfo(ctx, api.CreatePullRequestOption{
Base: infos[0],
Head: infos[1],
})

View file

@ -406,7 +406,7 @@ func CreatePullRequest(ctx *context.APIContext) {
)
// Get repo/branch information
headRepo, headGitRepo, compareInfo, baseBranch, headBranch := parseCompareInfo(ctx, form)
_, headRepo, headGitRepo, compareInfo, baseBranch, headBranch := parseCompareInfo(ctx, form)
if ctx.Written() {
return
}
@ -1051,7 +1051,7 @@ func MergePullRequest(ctx *context.APIContext) {
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
// Get compared branches information
@ -1084,14 +1084,14 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
} else {
ctx.Error(http.StatusInternalServerError, "GetUserByName", err)
}
return nil, nil, nil, "", ""
return nil, nil, nil, nil, "", ""
}
headBranch = headInfos[1]
// The head repository can also point to the same repo
isSameRepo = ctx.Repo.Owner.ID == headUser.ID
} else {
ctx.NotFound()
return nil, nil, nil, "", ""
return nil, nil, nil, nil, "", ""
}
ctx.Repo.PullRequest.SameRepo = isSameRepo
@ -1099,7 +1099,7 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
// Check if base branch is valid.
if !ctx.Repo.GitRepo.IsBranchExist(baseBranch) && !ctx.Repo.GitRepo.IsTagExist(baseBranch) {
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.
@ -1107,7 +1107,7 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
if headRepo == nil && !isSameRepo {
log.Trace("parseCompareInfo[%d]: does not have fork or in same repository", baseRepo.ID)
ctx.NotFound("GetForkedRepo")
return nil, nil, nil, "", ""
return nil, nil, nil, nil, "", ""
}
var headGitRepo *git.Repository
@ -1118,7 +1118,7 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
headGitRepo, err = gitrepo.OpenRepository(ctx, headRepo)
if err != nil {
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 {
headGitRepo.Close()
ctx.Error(http.StatusInternalServerError, "GetUserRepoPermission", err)
return nil, nil, nil, "", ""
return nil, nil, nil, nil, "", ""
}
if !permBase.CanReadIssuesOrPulls(true) || !permBase.CanRead(unit.TypeCode) {
if log.IsTrace() {
@ -1138,7 +1138,7 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
}
headGitRepo.Close()
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
@ -1146,7 +1146,7 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
if err != nil {
headGitRepo.Close()
ctx.Error(http.StatusInternalServerError, "GetUserRepoPermission", err)
return nil, nil, nil, "", ""
return nil, nil, nil, nil, "", ""
}
if !permHead.CanRead(unit.TypeCode) {
if log.IsTrace() {
@ -1157,24 +1157,24 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
}
headGitRepo.Close()
ctx.NotFound("Can't read headRepo UnitTypeCode")
return nil, nil, nil, "", ""
return nil, nil, nil, nil, "", ""
}
// Check if head branch is valid.
if !headGitRepo.IsBranchExist(headBranch) && !headGitRepo.IsTagExist(headBranch) {
headGitRepo.Close()
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)
if err != nil {
headGitRepo.Close()
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

View file

@ -107,7 +107,7 @@ func Search(ctx *context.APIContext) {
// - name: sort
// in: query
// 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"
// type: string
// - name: order
@ -184,7 +184,7 @@ func Search(ctx *context.APIContext) {
if len(sortOrder) == 0 {
sortOrder = "asc"
}
if searchModeMap, ok := repo_model.OrderByMap[sortOrder]; ok {
if searchModeMap, ok := repo_model.SearchOrderByMap[sortOrder]; ok {
if orderBy, ok := searchModeMap[sortMode]; ok {
opts.OrderBy = orderBy
} else {

View file

@ -7,13 +7,9 @@ import (
"errors"
"fmt"
"net/http"
"strings"
"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"
user_model "code.gitea.io/gitea/models/user"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/web"
"code.gitea.io/gitea/routers/api/v1/utils"
@ -318,349 +314,3 @@ func DeleteTag(ctx *context.APIContext) {
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)
}

View file

@ -184,12 +184,6 @@ type swaggerParameterBodies struct {
// in:body
CreateTagOption api.CreateTagOption
// in:body
CreateTagProtectionOption api.CreateTagProtectionOption
// in:body
EditTagProtectionOption api.EditTagProtectionOption
// in:body
CreateAccessTokenOption api.CreateAccessTokenOption

View file

@ -70,20 +70,6 @@ type swaggerResponseAnnotatedTag struct {
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
// swagger:response Reference
type swaggerResponseReference struct {

View file

@ -46,5 +46,5 @@ type swaggerResponseUserHeatmapData struct {
// swagger:response UserSettings
type swaggerResponseUserSettings struct {
// in:body
Body api.UserSettings `json:"body"`
Body []api.UserSettings `json:"body"`
}

View file

@ -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() {
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() {
return
}

View file

@ -14,7 +14,6 @@ import (
activities_model "code.gitea.io/gitea/models/activities"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/cache"
"code.gitea.io/gitea/modules/graceful"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
@ -212,14 +211,6 @@ func SelfCheck(ctx *context.Context) {
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)
}

View file

@ -12,7 +12,6 @@ import (
system_model "code.gitea.io/gitea/models/system"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/cache"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/json"
"code.gitea.io/gitea/modules/log"
@ -43,22 +42,6 @@ func SendTestMail(ctx *context.Context) {
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 {
fields := strings.Split(cfgItem, splitter)
for i := 0; i < len(fields); i++ {
@ -200,7 +183,7 @@ func ChangeConfig(ctx *context.Context) {
value := ctx.FormString("value")
cfg := setting.Config()
marshalBool := func(v string) (string, error) { //nolint:unparam
marshalBool := func(v string) (string, error) {
if b, _ := strconv.ParseBool(v); b {
return "true", nil
}

View file

@ -6,7 +6,6 @@ package explore
import (
"fmt"
"net/http"
"strings"
"code.gitea.io/gitea/models/db"
repo_model "code.gitea.io/gitea/models/repo"
@ -58,18 +57,47 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) {
orderBy db.SearchOrderBy
)
sortOrder := strings.ToLower(ctx.FormString("sort"))
sortOrder := ctx.FormString("sort")
if sortOrder == "" {
sortOrder = setting.UI.ExploreDefaultSort
}
ctx.Data["SortType"] = sortOrder
if order, ok := repo_model.OrderByFlatMap[sortOrder]; ok {
orderBy = order
} else {
sortOrder = "recentupdate"
switch sortOrder {
case "newest":
orderBy = db.SearchOrderByNewest
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
}
ctx.Data["SortType"] = sortOrder
keyword := ctx.FormTrim("q")

View file

@ -39,7 +39,7 @@ func redirectToBadge(ctx *context_module.Context, label, text, color string) {
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"))
}

View file

@ -19,8 +19,14 @@ const (
// Contributors render the page to show repository contributors graph
func Contributors(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.activity.navbar.contributors")
ctx.Data["PageIsActivity"] = true
ctx.Data["PageIsContributors"] = true
ctx.PageData["contributionType"] = "commits"
ctx.PageData["repoLink"] = ctx.Repo.RepoLink
ctx.HTML(http.StatusOK, tplContributors)
}

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