mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-01-25 14:53:15 +01:00
Merge branch 'forgejo' into repocard
This commit is contained in:
commit
a82cd18d9a
119 changed files with 6915 additions and 2391 deletions
2
.forgejo/testdata/build-release/Dockerfile
vendored
2
.forgejo/testdata/build-release/Dockerfile
vendored
|
@ -1,4 +1,4 @@
|
|||
FROM code.forgejo.org/oci/alpine:3.20
|
||||
FROM data.forgejo.org/oci/alpine:3.20
|
||||
ARG RELEASE_VERSION=unkown
|
||||
LABEL maintainer="contact@forgejo.org" \
|
||||
org.opencontainers.image.version="${RELEASE_VERSION}"
|
||||
|
|
|
@ -17,7 +17,7 @@ runs:
|
|||
apt-get -q install -qq -y zstd
|
||||
|
||||
- name: "Set up Go using setup-go"
|
||||
uses: https://code.forgejo.org/actions/setup-go@v5
|
||||
uses: https://data.forgejo.org/actions/setup-go@v5
|
||||
id: go-version
|
||||
with:
|
||||
go-version-file: "go.mod"
|
||||
|
|
|
@ -40,14 +40,14 @@ jobs:
|
|||
)
|
||||
runs-on: docker
|
||||
container:
|
||||
image: 'code.forgejo.org/oci/node:20-bookworm'
|
||||
image: 'data.forgejo.org/oci/node:20-bookworm'
|
||||
steps:
|
||||
- name: event info
|
||||
run: |
|
||||
cat <<'EOF'
|
||||
${{ toJSON(github) }}
|
||||
EOF
|
||||
- uses: https://code.forgejo.org/actions/git-backporting@v4.8.4
|
||||
- uses: https://data.forgejo.org/actions/git-backporting@v4.8.4
|
||||
with:
|
||||
target-branch-pattern: "^backport/(?<target>(v.*))$"
|
||||
strategy: ort
|
||||
|
|
|
@ -23,12 +23,12 @@ on:
|
|||
jobs:
|
||||
release-simulation:
|
||||
if: vars.ROLE == 'forgejo-coding'
|
||||
runs-on: self-hosted
|
||||
runs-on: lxc-bookworm
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- id: forgejo
|
||||
uses: https://code.forgejo.org/actions/setup-forgejo@v2.0.4
|
||||
uses: https://data.forgejo.org/actions/setup-forgejo@v2.0.4
|
||||
with:
|
||||
user: root
|
||||
password: admin1234
|
||||
|
|
|
@ -14,6 +14,12 @@
|
|||
# secrets.CASCADE_DESTINATION_TOKEN: <generated from code.forgejo.org/forgejo-ci> scope read:user, write:repository, write:issue
|
||||
# vars.CASCADE_DESTINATION_DOER: forgejo-ci
|
||||
#
|
||||
# vars.SKIP_END_TO_END: `true` or `false`
|
||||
# It must be `false` (or absent) so https://code.forgejo.org/forgejo/end-to-end is run
|
||||
# with the newly built release.
|
||||
# It must be set to `true` when a release is missing, for instance because it was
|
||||
# removed and failed to upload.
|
||||
#
|
||||
on:
|
||||
push:
|
||||
tags: 'v[0-9]+.[0-9]+.*'
|
||||
|
@ -23,7 +29,7 @@ on:
|
|||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: self-hosted
|
||||
runs-on: lxc-bookworm
|
||||
# root is used for testing, allow it
|
||||
if: vars.ROLE == 'forgejo-integration' || github.repository_owner == 'root'
|
||||
steps:
|
||||
|
@ -37,11 +43,11 @@ jobs:
|
|||
repository="${{ github.repository }}"
|
||||
echo "value=${repository##*/}" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- uses: https://code.forgejo.org/actions/setup-node@v4
|
||||
- uses: https://data.forgejo.org/actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- uses: https://code.forgejo.org/actions/setup-go@v5
|
||||
- uses: https://data.forgejo.org/actions/setup-go@v5
|
||||
with:
|
||||
go-version-file: "go.mod"
|
||||
|
||||
|
@ -87,7 +93,7 @@ jobs:
|
|||
|
||||
- name: cache node_modules
|
||||
id: node
|
||||
uses: https://code.forgejo.org/actions/cache@v4
|
||||
uses: https://data.forgejo.org/actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
node_modules
|
||||
|
@ -158,7 +164,7 @@ jobs:
|
|||
|
||||
- name: build container & release
|
||||
if: ${{ secrets.TOKEN != '' }}
|
||||
uses: https://code.forgejo.org/forgejo/forgejo-build-publish/build@v5.2.1
|
||||
uses: https://data.forgejo.org/forgejo/forgejo-build-publish/build@v5.2.1
|
||||
with:
|
||||
forgejo: "${{ env.GITHUB_SERVER_URL }}"
|
||||
owner: "${{ env.GITHUB_REPOSITORY_OWNER }}"
|
||||
|
@ -177,7 +183,7 @@ jobs:
|
|||
|
||||
- name: build rootless container
|
||||
if: ${{ secrets.TOKEN != '' }}
|
||||
uses: https://code.forgejo.org/forgejo/forgejo-build-publish/build@v5.2.1
|
||||
uses: https://data.forgejo.org/forgejo/forgejo-build-publish/build@v5.2.1
|
||||
with:
|
||||
forgejo: "${{ env.GITHUB_SERVER_URL }}"
|
||||
owner: "${{ env.GITHUB_REPOSITORY_OWNER }}"
|
||||
|
@ -195,7 +201,7 @@ jobs:
|
|||
|
||||
- name: end-to-end tests
|
||||
if: ${{ secrets.TOKEN != '' && vars.ROLE == 'forgejo-integration' && vars.SKIP_END_TO_END != 'true' }}
|
||||
uses: https://code.forgejo.org/actions/cascading-pr@v2.2.0
|
||||
uses: https://data.forgejo.org/actions/cascading-pr@v2.2.0
|
||||
with:
|
||||
origin-url: ${{ env.GITHUB_SERVER_URL }}
|
||||
origin-repo: ${{ github.repository }}
|
||||
|
|
|
@ -35,7 +35,7 @@ jobs:
|
|||
)
|
||||
runs-on: docker
|
||||
container:
|
||||
image: code.forgejo.org/oci/node:20-bookworm
|
||||
image: data.forgejo.org/oci/node:20-bookworm
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
|
|
|
@ -9,7 +9,7 @@ jobs:
|
|||
if: vars.ROLE == 'forgejo-integration'
|
||||
runs-on: docker
|
||||
container:
|
||||
image: 'code.forgejo.org/oci/node:20-bookworm'
|
||||
image: 'data.forgejo.org/oci/node:20-bookworm'
|
||||
steps:
|
||||
|
||||
- name: apt install curl jq
|
||||
|
|
|
@ -16,7 +16,7 @@ jobs:
|
|||
if: vars.ROLE == 'forgejo-coding'
|
||||
runs-on: docker
|
||||
container:
|
||||
image: 'code.forgejo.org/oci/node:20-bookworm'
|
||||
image: 'data.forgejo.org/oci/node:20-bookworm'
|
||||
steps:
|
||||
- name: Debug output
|
||||
run: |
|
||||
|
|
|
@ -13,9 +13,9 @@ jobs:
|
|||
if: vars.ROLE == 'forgejo-coding' && github.event.pull_request.merged
|
||||
runs-on: docker
|
||||
container:
|
||||
image: 'code.forgejo.org/oci/ci:1'
|
||||
image: 'data.forgejo.org/oci/ci:1'
|
||||
steps:
|
||||
- uses: https://code.forgejo.org/forgejo/set-milestone@v1.0.0
|
||||
- uses: https://data.forgejo.org/forgejo/set-milestone@v1.0.0
|
||||
with:
|
||||
forgejo: https://codeberg.org
|
||||
repository: forgejo/forgejo
|
||||
|
|
|
@ -11,7 +11,7 @@ jobs:
|
|||
if: ${{ secrets.MIRROR_TOKEN != '' }}
|
||||
runs-on: docker
|
||||
container:
|
||||
image: 'code.forgejo.org/oci/node:20-bookworm'
|
||||
image: 'data.forgejo.org/oci/node:20-bookworm'
|
||||
steps:
|
||||
- name: git push {v*/,}forgejo
|
||||
run: |
|
||||
|
|
|
@ -36,13 +36,13 @@ on:
|
|||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: self-hosted
|
||||
runs-on: lxc-bookworm
|
||||
if: vars.DOER != '' && vars.FORGEJO != '' && vars.TO_OWNER != '' && vars.FROM_OWNER != '' && secrets.TOKEN != ''
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: copy & sign
|
||||
uses: https://code.forgejo.org/forgejo/forgejo-build-publish/publish@v5.2.1
|
||||
uses: https://data.forgejo.org/forgejo/forgejo-build-publish/publish@v5.2.1
|
||||
with:
|
||||
from-forgejo: ${{ vars.FORGEJO }}
|
||||
to-forgejo: ${{ vars.FORGEJO }}
|
||||
|
@ -61,14 +61,14 @@ jobs:
|
|||
|
||||
- name: get trigger mirror issue
|
||||
id: mirror
|
||||
uses: https://code.forgejo.org/infrastructure/issue-action/get@v1.1.0
|
||||
uses: https://data.forgejo.org/infrastructure/issue-action/get@v1.1.0
|
||||
with:
|
||||
forgejo: https://code.forgejo.org
|
||||
repository: forgejo/forgejo
|
||||
labels: mirror-trigger
|
||||
|
||||
- name: trigger the mirror
|
||||
uses: https://code.forgejo.org/infrastructure/issue-action/set@v1.1.0
|
||||
uses: https://data.forgejo.org/infrastructure/issue-action/set@v1.1.0
|
||||
with:
|
||||
forgejo: https://code.forgejo.org
|
||||
repository: forgejo/forgejo
|
||||
|
@ -78,7 +78,7 @@ jobs:
|
|||
label: trigger
|
||||
|
||||
- name: upgrade v*.next.forgejo.org
|
||||
uses: https://code.forgejo.org/infrastructure/next-digest@v1.1.0
|
||||
uses: https://data.forgejo.org/infrastructure/next-digest@v1.1.0
|
||||
with:
|
||||
url: https://placeholder:${{ secrets.TOKEN_NEXT_DIGEST }}@code.forgejo.org/infrastructure/next-digest
|
||||
ref_name: '${{ github.ref_name }}'
|
||||
|
|
|
@ -9,11 +9,11 @@ jobs:
|
|||
if: vars.ROLE == 'forgejo-coding'
|
||||
runs-on: docker
|
||||
container:
|
||||
image: 'code.forgejo.org/oci/node:20-bookworm'
|
||||
image: 'data.forgejo.org/oci/node:20-bookworm'
|
||||
steps:
|
||||
- uses: https://code.forgejo.org/actions/checkout@v4
|
||||
- uses: https://data.forgejo.org/actions/checkout@v4
|
||||
|
||||
- uses: https://code.forgejo.org/actions/setup-go@v5
|
||||
- uses: https://data.forgejo.org/actions/setup-go@v5
|
||||
with:
|
||||
go-version-file: "go.mod"
|
||||
cache: false
|
||||
|
|
|
@ -12,9 +12,9 @@ jobs:
|
|||
if: ( vars.ROLE == 'forgejo-coding' ) && contains(github.event.pull_request.labels.*.name, 'worth a release-note')
|
||||
runs-on: docker
|
||||
container:
|
||||
image: 'code.forgejo.org/oci/node:20-bookworm'
|
||||
image: 'data.forgejo.org/oci/node:20-bookworm'
|
||||
steps:
|
||||
- uses: https://code.forgejo.org/actions/checkout@v4
|
||||
- uses: https://data.forgejo.org/actions/checkout@v4
|
||||
|
||||
- name: event
|
||||
run: |
|
||||
|
@ -25,7 +25,7 @@ jobs:
|
|||
${{ toJSON(github.event) }}
|
||||
EOF
|
||||
|
||||
- uses: https://code.forgejo.org/actions/setup-go@v5
|
||||
- uses: https://data.forgejo.org/actions/setup-go@v5
|
||||
with:
|
||||
go-version-file: "go.mod"
|
||||
cache: false
|
||||
|
|
|
@ -25,11 +25,11 @@ jobs:
|
|||
|
||||
runs-on: docker
|
||||
container:
|
||||
image: code.forgejo.org/forgejo-contrib/renovate:39.69.2
|
||||
image: data.forgejo.org/forgejo-contrib/renovate:39.69.2
|
||||
|
||||
steps:
|
||||
- name: Load renovate repo cache
|
||||
uses: https://code.forgejo.org/actions/cache/restore@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: https://data.forgejo.org/actions/cache/restore@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
with:
|
||||
path: |
|
||||
.tmp/cache/renovate/repository
|
||||
|
@ -62,7 +62,7 @@ jobs:
|
|||
|
||||
- name: Save renovate repo cache
|
||||
if: always() && env.RENOVATE_DRY_RUN != 'full'
|
||||
uses: https://code.forgejo.org/actions/cache/save@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
uses: https://data.forgejo.org/actions/cache/save@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1
|
||||
with:
|
||||
path: |
|
||||
.tmp/cache/renovate/repository
|
||||
|
|
|
@ -13,7 +13,7 @@ jobs:
|
|||
if: vars.ROLE == 'forgejo-coding' || vars.ROLE == 'forgejo-testing'
|
||||
runs-on: docker
|
||||
container:
|
||||
image: 'code.forgejo.org/oci/node:20-bookworm'
|
||||
image: 'data.forgejo.org/oci/node:20-bookworm'
|
||||
options: --tmpfs /tmp:exec,noatime
|
||||
steps:
|
||||
- name: event info
|
||||
|
@ -21,7 +21,7 @@ jobs:
|
|||
cat <<'EOF'
|
||||
${{ toJSON(github) }}
|
||||
EOF
|
||||
- uses: https://code.forgejo.org/actions/checkout@v4
|
||||
- uses: https://data.forgejo.org/actions/checkout@v4
|
||||
- uses: ./.forgejo/workflows-composite/setup-env
|
||||
- run: su forgejo -c 'make deps-backend deps-tools'
|
||||
- run: su forgejo -c 'make --always-make -j$(nproc) lint-backend tidy-check swagger-check fmt-check swagger-validate' # ensure the "go-licenses" make target runs
|
||||
|
@ -30,10 +30,10 @@ jobs:
|
|||
if: vars.ROLE == 'forgejo-coding' || vars.ROLE == 'forgejo-testing'
|
||||
runs-on: docker
|
||||
container:
|
||||
image: 'code.forgejo.org/oci/node:20-bookworm'
|
||||
image: 'data.forgejo.org/oci/node:20-bookworm'
|
||||
options: --tmpfs /tmp:exec,noatime
|
||||
steps:
|
||||
- uses: https://code.forgejo.org/actions/checkout@v4
|
||||
- uses: https://data.forgejo.org/actions/checkout@v4
|
||||
- run: make deps-frontend
|
||||
- run: make lint-frontend
|
||||
- run: make checks-frontend
|
||||
|
@ -55,17 +55,17 @@ jobs:
|
|||
runs-on: docker
|
||||
needs: [backend-checks, frontend-checks]
|
||||
container:
|
||||
image: 'code.forgejo.org/oci/node:20-bookworm'
|
||||
image: 'data.forgejo.org/oci/node:20-bookworm'
|
||||
options: --tmpfs /tmp:exec,noatime
|
||||
services:
|
||||
elasticsearch:
|
||||
image: code.forgejo.org/oci/bitnami/elasticsearch:7
|
||||
image: data.forgejo.org/oci/bitnami/elasticsearch:7
|
||||
options: --tmpfs /bitnami/elasticsearch/data
|
||||
env:
|
||||
discovery.type: single-node
|
||||
ES_JAVA_OPTS: "-Xms512m -Xmx512m"
|
||||
minio:
|
||||
image: code.forgejo.org/oci/bitnami/minio:2024.8.17
|
||||
image: data.forgejo.org/oci/bitnami/minio:2024.8.17
|
||||
options: >-
|
||||
--hostname gitea.minio --tmpfs /bitnami/minio/data:noatime
|
||||
env:
|
||||
|
@ -73,7 +73,7 @@ jobs:
|
|||
MINIO_ROOT_USER: 123456
|
||||
MINIO_ROOT_PASSWORD: 12345678
|
||||
steps:
|
||||
- uses: https://code.forgejo.org/actions/checkout@v4
|
||||
- uses: https://data.forgejo.org/actions/checkout@v4
|
||||
- uses: ./.forgejo/workflows-composite/setup-env
|
||||
- name: install git >= 2.42
|
||||
uses: ./.forgejo/workflows-composite/apt-install-from
|
||||
|
@ -96,10 +96,10 @@ jobs:
|
|||
runs-on: docker
|
||||
needs: [backend-checks, frontend-checks]
|
||||
container:
|
||||
image: 'code.forgejo.org/oci/playwright:latest'
|
||||
image: 'data.forgejo.org/oci/playwright:latest'
|
||||
options: --tmpfs /tmp:exec,noatime
|
||||
steps:
|
||||
- uses: https://code.forgejo.org/actions/checkout@v4
|
||||
- uses: https://data.forgejo.org/actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 20
|
||||
- uses: ./.forgejo/workflows-composite/setup-env
|
||||
|
@ -116,7 +116,7 @@ jobs:
|
|||
- uses: ./.forgejo/workflows-composite/build-backend
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
uses: https://code.forgejo.org/tj-actions/changed-files@v45
|
||||
uses: https://data.forgejo.org/tj-actions/changed-files@v45
|
||||
with:
|
||||
separator: '\n'
|
||||
- run: |
|
||||
|
@ -128,7 +128,7 @@ jobs:
|
|||
CHANGED_FILES: ${{steps.changed-files.outputs.all_changed_files}}
|
||||
- name: Upload test artifacts on failure
|
||||
if: failure()
|
||||
uses: https://code.forgejo.org/forgejo/upload-artifact@v4
|
||||
uses: https://data.forgejo.org/forgejo/upload-artifact@v4
|
||||
with:
|
||||
name: test-artifacts.zip
|
||||
path: tests/e2e/test-artifacts/
|
||||
|
@ -138,20 +138,20 @@ jobs:
|
|||
runs-on: docker
|
||||
needs: [backend-checks, frontend-checks, test-unit]
|
||||
container:
|
||||
image: 'code.forgejo.org/oci/node:20-bookworm'
|
||||
image: 'data.forgejo.org/oci/node:20-bookworm'
|
||||
options: --tmpfs /tmp:exec,noatime
|
||||
name: ${{ format('test-remote-cacher ({0})', matrix.cacher.name) }}
|
||||
strategy:
|
||||
matrix:
|
||||
cacher:
|
||||
- name: redis
|
||||
image: code.forgejo.org/oci/bitnami/redis:7.2
|
||||
image: data.forgejo.org/oci/bitnami/redis:7.2
|
||||
options: --tmpfs /bitnami/redis/data:noatime
|
||||
- name: redict
|
||||
image: registry.redict.io/redict:7.3.0-scratch
|
||||
options: --tmpfs /data:noatime
|
||||
- name: valkey
|
||||
image: code.forgejo.org/oci/bitnami/valkey:7.2
|
||||
image: data.forgejo.org/oci/bitnami/valkey:7.2
|
||||
options: --tmpfs /bitnami/redis/data:noatime
|
||||
- name: garnet
|
||||
image: ghcr.io/microsoft/garnet-alpine:1.0.14
|
||||
|
@ -161,7 +161,7 @@ jobs:
|
|||
image: ${{ matrix.cacher.image }}
|
||||
options: ${{ matrix.cacher.options }}
|
||||
steps:
|
||||
- uses: https://code.forgejo.org/actions/checkout@v4
|
||||
- uses: https://data.forgejo.org/actions/checkout@v4
|
||||
- uses: ./.forgejo/workflows-composite/setup-env
|
||||
- name: install git >= 2.42
|
||||
uses: ./.forgejo/workflows-composite/apt-install-from
|
||||
|
@ -180,11 +180,11 @@ jobs:
|
|||
runs-on: docker
|
||||
needs: [backend-checks, frontend-checks]
|
||||
container:
|
||||
image: 'code.forgejo.org/oci/node:20-bookworm'
|
||||
image: 'data.forgejo.org/oci/node:20-bookworm'
|
||||
options: --tmpfs /tmp:exec,noatime
|
||||
services:
|
||||
mysql:
|
||||
image: 'code.forgejo.org/oci/bitnami/mysql:8.4'
|
||||
image: 'data.forgejo.org/oci/bitnami/mysql:8.4'
|
||||
env:
|
||||
ALLOW_EMPTY_PASSWORD: yes
|
||||
MYSQL_DATABASE: testgitea
|
||||
|
@ -194,7 +194,7 @@ jobs:
|
|||
MYSQL_EXTRA_FLAGS: --innodb-adaptive-flushing=OFF --innodb-buffer-pool-size=4G --innodb-log-buffer-size=128M --innodb-flush-log-at-trx-commit=0 --innodb-flush-log-at-timeout=30 --innodb-flush-method=nosync --innodb-fsync-threshold=1000000000 --disable-log-bin
|
||||
options: --tmpfs /bitnami/mysql/data:noatime
|
||||
steps:
|
||||
- uses: https://code.forgejo.org/actions/checkout@v4
|
||||
- uses: https://data.forgejo.org/actions/checkout@v4
|
||||
- uses: ./.forgejo/workflows-composite/setup-env
|
||||
- name: install dependencies & git >= 2.42
|
||||
uses: ./.forgejo/workflows-composite/apt-install-from
|
||||
|
@ -211,19 +211,19 @@ jobs:
|
|||
runs-on: docker
|
||||
needs: [backend-checks, frontend-checks]
|
||||
container:
|
||||
image: 'code.forgejo.org/oci/node:20-bookworm'
|
||||
image: 'data.forgejo.org/oci/node:20-bookworm'
|
||||
options: --tmpfs /tmp:exec,noatime
|
||||
services:
|
||||
minio:
|
||||
image: code.forgejo.org/oci/bitnami/minio:2024.8.17
|
||||
image: data.forgejo.org/oci/bitnami/minio:2024.8.17
|
||||
env:
|
||||
MINIO_ROOT_USER: 123456
|
||||
MINIO_ROOT_PASSWORD: 12345678
|
||||
options: --tmpfs /bitnami/minio/data
|
||||
ldap:
|
||||
image: code.forgejo.org/oci/test-openldap:latest
|
||||
image: data.forgejo.org/oci/test-openldap:latest
|
||||
pgsql:
|
||||
image: code.forgejo.org/oci/bitnami/postgresql:15
|
||||
image: data.forgejo.org/oci/bitnami/postgresql:15
|
||||
env:
|
||||
POSTGRESQL_DATABASE: test
|
||||
POSTGRESQL_PASSWORD: postgres
|
||||
|
@ -231,7 +231,7 @@ jobs:
|
|||
POSTGRESQL_EXTRA_FLAGS: -c full_page_writes=off
|
||||
options: --tmpfs /bitnami/postgresql
|
||||
steps:
|
||||
- uses: https://code.forgejo.org/actions/checkout@v4
|
||||
- uses: https://data.forgejo.org/actions/checkout@v4
|
||||
- uses: ./.forgejo/workflows-composite/setup-env
|
||||
- name: install dependencies & git >= 2.42
|
||||
uses: ./.forgejo/workflows-composite/apt-install-from
|
||||
|
@ -250,10 +250,10 @@ jobs:
|
|||
runs-on: docker
|
||||
needs: [backend-checks, frontend-checks]
|
||||
container:
|
||||
image: 'code.forgejo.org/oci/node:20-bookworm'
|
||||
image: 'data.forgejo.org/oci/node:20-bookworm'
|
||||
options: --tmpfs /tmp:exec,noatime
|
||||
steps:
|
||||
- uses: https://code.forgejo.org/actions/checkout@v4
|
||||
- uses: https://data.forgejo.org/actions/checkout@v4
|
||||
- uses: ./.forgejo/workflows-composite/setup-env
|
||||
- name: install dependencies & git >= 2.42
|
||||
uses: ./.forgejo/workflows-composite/apt-install-from
|
||||
|
@ -278,10 +278,10 @@ jobs:
|
|||
- test-remote-cacher
|
||||
- test-unit
|
||||
container:
|
||||
image: 'code.forgejo.org/oci/node:20-bookworm'
|
||||
image: 'data.forgejo.org/oci/node:20-bookworm'
|
||||
options: --tmpfs /tmp:exec,noatime
|
||||
steps:
|
||||
- uses: https://code.forgejo.org/actions/checkout@v4
|
||||
- uses: https://data.forgejo.org/actions/checkout@v4
|
||||
- uses: ./.forgejo/workflows-composite/setup-env
|
||||
- run: su forgejo -c 'make deps-backend deps-tools'
|
||||
- run: su forgejo -c 'make security-check'
|
||||
|
|
2
Makefile
2
Makefile
|
@ -49,7 +49,7 @@ GOVULNCHECK_PACKAGE ?= golang.org/x/vuln/cmd/govulncheck@v1 # renovate: datasour
|
|||
DEADCODE_PACKAGE ?= golang.org/x/tools/cmd/deadcode@v0.28.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.17.0 # renovate: datasource=go
|
||||
RENOVATE_NPM_PACKAGE ?= renovate@39.69.2 # renovate: datasource=docker packageName=code.forgejo.org/forgejo-contrib/renovate
|
||||
RENOVATE_NPM_PACKAGE ?= renovate@39.82.1 # renovate: datasource=docker packageName=code.forgejo.org/forgejo-contrib/renovate
|
||||
|
||||
# https://github.com/disposable-email-domains/disposable-email-domains/commits/main/
|
||||
DISPOSABLE_EMAILS_SHA ?= 0c27e671231d27cf66370034d7f6818037416989 # renovate: ...
|
||||
|
|
2
assets/go-licenses.json
generated
2
assets/go-licenses.json
generated
|
@ -1042,7 +1042,7 @@
|
|||
{
|
||||
"name": "golang.org/x/time/rate",
|
||||
"path": "golang.org/x/time/rate/LICENSE",
|
||||
"licenseText": "Copyright (c) 2009 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
|
||||
"licenseText": "Copyright 2009 The Go Authors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n * Neither the name of Google LLC nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
|
||||
},
|
||||
{
|
||||
"name": "google.golang.org/genproto/googleapis/rpc/status",
|
||||
|
|
9
build.go
9
build.go
|
@ -11,13 +11,4 @@ package main
|
|||
import (
|
||||
// for embed
|
||||
_ "github.com/shurcooL/vfsgen"
|
||||
|
||||
// for cover merge
|
||||
_ "golang.org/x/tools/cover"
|
||||
|
||||
// for vet
|
||||
_ "code.gitea.io/gitea-vet"
|
||||
|
||||
// for swagger
|
||||
_ "github.com/go-swagger/go-swagger/cmd/swagger"
|
||||
)
|
||||
|
|
|
@ -1,118 +0,0 @@
|
|||
// Copyright 2020 The Gitea Authors. All rights reserved.
|
||||
// Copyright (c) 2015, Wade Simmons
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
// gocovmerge takes the results from multiple `go test -coverprofile` runs and
|
||||
// merges them into one profile
|
||||
|
||||
//go:build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"sort"
|
||||
|
||||
"golang.org/x/tools/cover"
|
||||
)
|
||||
|
||||
func mergeProfiles(p, merge *cover.Profile) {
|
||||
if p.Mode != merge.Mode {
|
||||
log.Fatalf("cannot merge profiles with different modes")
|
||||
}
|
||||
// Since the blocks are sorted, we can keep track of where the last block
|
||||
// was inserted and only look at the blocks after that as targets for merge
|
||||
startIndex := 0
|
||||
for _, b := range merge.Blocks {
|
||||
startIndex = mergeProfileBlock(p, b, startIndex)
|
||||
}
|
||||
}
|
||||
|
||||
func mergeProfileBlock(p *cover.Profile, pb cover.ProfileBlock, startIndex int) int {
|
||||
sortFunc := func(i int) bool {
|
||||
pi := p.Blocks[i+startIndex]
|
||||
return pi.StartLine >= pb.StartLine && (pi.StartLine != pb.StartLine || pi.StartCol >= pb.StartCol)
|
||||
}
|
||||
|
||||
i := 0
|
||||
if sortFunc(i) != true {
|
||||
i = sort.Search(len(p.Blocks)-startIndex, sortFunc)
|
||||
}
|
||||
i += startIndex
|
||||
if i < len(p.Blocks) && p.Blocks[i].StartLine == pb.StartLine && p.Blocks[i].StartCol == pb.StartCol {
|
||||
if p.Blocks[i].EndLine != pb.EndLine || p.Blocks[i].EndCol != pb.EndCol {
|
||||
log.Fatalf("OVERLAP MERGE: %v %v %v", p.FileName, p.Blocks[i], pb)
|
||||
}
|
||||
switch p.Mode {
|
||||
case "set":
|
||||
p.Blocks[i].Count |= pb.Count
|
||||
case "count", "atomic":
|
||||
p.Blocks[i].Count += pb.Count
|
||||
default:
|
||||
log.Fatalf("unsupported covermode: '%s'", p.Mode)
|
||||
}
|
||||
} else {
|
||||
if i > 0 {
|
||||
pa := p.Blocks[i-1]
|
||||
if pa.EndLine >= pb.EndLine && (pa.EndLine != pb.EndLine || pa.EndCol > pb.EndCol) {
|
||||
log.Fatalf("OVERLAP BEFORE: %v %v %v", p.FileName, pa, pb)
|
||||
}
|
||||
}
|
||||
if i < len(p.Blocks)-1 {
|
||||
pa := p.Blocks[i+1]
|
||||
if pa.StartLine <= pb.StartLine && (pa.StartLine != pb.StartLine || pa.StartCol < pb.StartCol) {
|
||||
log.Fatalf("OVERLAP AFTER: %v %v %v", p.FileName, pa, pb)
|
||||
}
|
||||
}
|
||||
p.Blocks = append(p.Blocks, cover.ProfileBlock{})
|
||||
copy(p.Blocks[i+1:], p.Blocks[i:])
|
||||
p.Blocks[i] = pb
|
||||
}
|
||||
return i + 1
|
||||
}
|
||||
|
||||
func addProfile(profiles []*cover.Profile, p *cover.Profile) []*cover.Profile {
|
||||
i := sort.Search(len(profiles), func(i int) bool { return profiles[i].FileName >= p.FileName })
|
||||
if i < len(profiles) && profiles[i].FileName == p.FileName {
|
||||
mergeProfiles(profiles[i], p)
|
||||
} else {
|
||||
profiles = append(profiles, nil)
|
||||
copy(profiles[i+1:], profiles[i:])
|
||||
profiles[i] = p
|
||||
}
|
||||
return profiles
|
||||
}
|
||||
|
||||
func dumpProfiles(profiles []*cover.Profile, out io.Writer) {
|
||||
if len(profiles) == 0 {
|
||||
return
|
||||
}
|
||||
fmt.Fprintf(out, "mode: %s\n", profiles[0].Mode)
|
||||
for _, p := range profiles {
|
||||
for _, b := range p.Blocks {
|
||||
fmt.Fprintf(out, "%s:%d.%d,%d.%d %d %d\n", p.FileName, b.StartLine, b.StartCol, b.EndLine, b.EndCol, b.NumStmt, b.Count)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
var merged []*cover.Profile
|
||||
|
||||
for _, file := range flag.Args() {
|
||||
profiles, err := cover.ParseProfiles(file)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to parse profile '%s': %v", file, err)
|
||||
}
|
||||
for _, p := range profiles {
|
||||
merged = addProfile(merged, p)
|
||||
}
|
||||
}
|
||||
|
||||
dumpProfiles(merged, os.Stdout)
|
||||
}
|
|
@ -59,9 +59,9 @@ func initRemoveTags() {
|
|||
oldnew := []string{}
|
||||
for _, el := range []string{
|
||||
"email@example.com", "correu@example.com", "epasts@domens.lv", "email@exemplo.com", "eposta@ornek.com", "email@példa.hu", "email@esempio.it",
|
||||
"user", "utente", "lietotājs", "gebruiker", "usuário", "Benutzer", "Bruker",
|
||||
"user", "utente", "lietotājs", "gebruiker", "usuário", "Benutzer", "Bruker", "bruger",
|
||||
"server", "servidor", "kiszolgáló", "serveris",
|
||||
"label", "etichetta", "etiķete", "rótulo", "Label", "utilizador",
|
||||
"label", "etichetta", "etiķete", "rótulo", "Label", "utilizador", "etiket", "iezīme",
|
||||
} {
|
||||
oldnew = append(oldnew, "<"+el+">", "REPLACED-TAG")
|
||||
}
|
||||
|
|
|
@ -7,11 +7,11 @@
|
|||
<body>
|
||||
<h1>Privacy Policy</h1>
|
||||
|
||||
<h4>Last updated: January 29, 2020</h4>
|
||||
<h4>Last updated: December 19, 2024</h4>
|
||||
|
||||
<h2>Who We Are?</h2>
|
||||
|
||||
<p>Your Gitea Instance</p>
|
||||
<p>Your Forgejo Instance</p>
|
||||
|
||||
<h2>What Personal Data We Collect?</h2>
|
||||
|
||||
|
@ -37,19 +37,19 @@
|
|||
|
||||
<h3>With your Consent</h3>
|
||||
|
||||
<p>We share your User Personal Information, if you consent, after letting you know what information will be shared, with whom, and why. For example, if you allow third party applications to access your Account using <a href="https://docs.gitea.com/development/oauth2-provider">OAuth2 providers</a>, we share all information associated with your Account, including private repos and organizations. You may also direct us through your action on Your Gitea Instance to share your User Personal Information, such as when joining an Organization.</p>
|
||||
<p>We share your User Personal Information, if you consent, after letting you know what information will be shared, with whom, and why. For example, if you allow third party applications to access your Account using <a href="https://forgejo.org/docs/latest/user/oauth2-provider/">OAuth2 providers</a>, we share all information associated with your Account, including private repos and organizations. You may also direct us through your action on Your Forgejo Instance to share your User Personal Information, such as when joining an Organization.</p>
|
||||
|
||||
<h3>With Service Providers</h3>
|
||||
|
||||
<p>We share User Personal Information with a limited number of service providers who process it on our behalf to provide or improve our Service, and who have agreed to privacy restrictions similar to the ones in our Privacy Statement by signing data protection agreements or making similar commitments. Our service providers perform payment processing, customer support ticketing, network data transmission, security, and other similar services. While Your Gitea Instance processes all User Personal Information in the (country/state where Gitea is deployed), our service providers may process data outside of (country/state where Gitea is deployed), the United States or the European Union.</p>
|
||||
<p>We share User Personal Information with a limited number of service providers who process it on our behalf to provide or improve our Service, and who have agreed to privacy restrictions similar to the ones in our Privacy Statement by signing data protection agreements or making similar commitments. Our service providers perform payment processing, customer support ticketing, network data transmission, security, and other similar services. While Your Forgejo Instance processes all User Personal Information in the (country/state where Forgejo is deployed), our service providers may process data outside of (country/state where Forgejo is deployed), the United States or the European Union.</p>
|
||||
|
||||
<h3>For Security Purposes</h3>
|
||||
|
||||
<p>If you are a member of an Organization, Your Gitea Instance may share your username, Usage Information, and Device Information associated with that Organization with an owner and/or administrator of the Organization who has agreed to the Corporate Terms of Service or applicable customer agreements, to the extent that such information is provided only to investigate or respond to a security incident that affects or compromises the security of that particular Organization.</p>
|
||||
<p>If you are a member of an Organization, Your Forgejo Instance may share your username, Usage Information, and Device Information associated with that Organization with an owner and/or administrator of the Organization who has agreed to the Corporate Terms of Service or applicable customer agreements, to the extent that such information is provided only to investigate or respond to a security incident that affects or compromises the security of that particular Organization.</p>
|
||||
|
||||
<h3>For Legal Disclosure</h3>
|
||||
|
||||
<p>Your Gitea Instance strives for transparency in complying with legal process and legal obligations. Unless prevented from doing so by law or court order, or in rare, exigent circumstances, we make a reasonable effort to notify users of any legally compelled or required disclosure of their information. Your Gitea Instance may disclose User Personal Information or other information we collect about you to law enforcement if required in response to a valid subpoena, court order, search warrant, a similar government order, or when we believe in good faith that disclosure is necessary to comply with our legal obligations, to protect our property or rights, or those of third parties or the public at large.</p>
|
||||
<p>Your Forgejo Instance strives for transparency in complying with legal process and legal obligations. Unless prevented from doing so by law or court order, or in rare, exigent circumstances, we make a reasonable effort to notify users of any legally compelled or required disclosure of their information. Your Forgejo Instance may disclose User Personal Information or other information we collect about you to law enforcement if required in response to a valid subpoena, court order, search warrant, a similar government order, or when we believe in good faith that disclosure is necessary to comply with our legal obligations, to protect our property or rights, or those of third parties or the public at large.</p>
|
||||
|
||||
<h3>Change in Control or Sale</h3>
|
||||
|
||||
|
@ -57,7 +57,7 @@
|
|||
|
||||
<h3>Aggregate, Non-Personally Identifying Information</h3>
|
||||
|
||||
<p>We share certain aggregated, non-personally identifying information with others about how our users, collectively, use Your Gitea Instance, or how our users respond to our other offerings, such as our conferences or events. For example, we may compile statistics on the open source activity across Your Gitea Instance.</p>
|
||||
<p>We share certain aggregated, non-personally identifying information with others about how our users, collectively, use Your Forgejo Instance, or how our users respond to our other offerings, such as our conferences or events. For example, we may compile statistics on the open source activity across Your Forgejo Instance.</p>
|
||||
|
||||
<p>We <b>don't</b> sell your User Personal Information for monetary or other consideration. </p>
|
||||
|
||||
|
@ -67,34 +67,34 @@
|
|||
|
||||
<ol>
|
||||
<li>We use your Registration Information to create your account, and to provide you the Service.</li>
|
||||
<li>We use your User Personal Information, specifically your username, to identify you on Your Gitea Instance.</li>
|
||||
<li>We use your User Personal Information, specifically your username, to identify you on Your Forgejo Instance.</li>
|
||||
<li>We use your Profile Information to fill out your Account profile and to share that profile with other users if you ask us to.</li>
|
||||
<li>We use your email address to communicate with you, if you've said that's okay, and only for the reasons you’ve said that’s okay.</li>
|
||||
<li>We use User Personal Information and other data to make recommendations for you, such as to suggest projects you may want to follow or contribute to. We learn from your public behavior on Your Gitea Instance—such as the projects you star—to determine your coding interests, and we recommend similar projects. These recommendations are automated decisions, but they have no legal impact on your rights.</li>
|
||||
<li>We use Usage Information and Device Information to better understand how our Users use Your Gitea Instance and to improve our Website and Service.</li>
|
||||
<li>We may use your User Personal Information if it is necessary for security purposes or to investigate possible fraud or attempts to harm Your Gitea Instance or our Users.</li>
|
||||
<li>We use User Personal Information and other data to make recommendations for you, such as to suggest projects you may want to follow or contribute to. We learn from your public behavior on Your Forgejo Instance—such as the projects you star—to determine your coding interests, and we recommend similar projects. These recommendations are automated decisions, but they have no legal impact on your rights.</li>
|
||||
<li>We use Usage Information and Device Information to better understand how our Users use Your Forgejo Instance and to improve our Website and Service.</li>
|
||||
<li>We may use your User Personal Information if it is necessary for security purposes or to investigate possible fraud or attempts to harm Your Forgejo Instance or our Users.</li>
|
||||
<li>We may use your User Personal Information to comply with our legal obligations, protect our intellectual property, and enforce our Terms of Service.</li>
|
||||
|
||||
<li>We limit our use of your User Personal Information to the purposes listed in this Privacy Statement. If we need to use your User Personal Information for other purposes, we will ask your permission first. You can always see what information we have, how we're using it, and what permissions you have given us in your user profile.</li>
|
||||
</ol>
|
||||
|
||||
<h2>How Your Gitea Instance Secures Your Information?</h2>
|
||||
<h2>How Your Forgejo Instance Secures Your Information?</h2>
|
||||
|
||||
<p>Your Gitea Instance takes all measures reasonably necessary to protect User Personal Information from unauthorized access, alteration, or destruction; maintain data accuracy; and help ensure the appropriate use of User Personal Information.</p>
|
||||
<p>Your Forgejo Instance takes all measures reasonably necessary to protect User Personal Information from unauthorized access, alteration, or destruction; maintain data accuracy; and help ensure the appropriate use of User Personal Information.</p>
|
||||
|
||||
<p>To the extent above, we enforce a written security information program, which:</p>
|
||||
|
||||
<ul>
|
||||
<li>aligns with industry recognized frameworks;</li>
|
||||
<li>includes security safeguards reasonably designed to protect the confidentiality, integrity, availability, and resilience of our Users' data;</li>
|
||||
<li>is appropriate to the nature, size, and complexity of Your Gitea Instance’s business operations;</li>
|
||||
<li>is appropriate to the nature, size, and complexity of Your Forgejo Instance’s business operations;</li>
|
||||
<li>includes incident response and data breach notification processes; and</li>
|
||||
<li>complies with applicable information security-related laws and regulations in the geographic regions where Your Gitea Instance does business.</li>
|
||||
<li>complies with applicable information security-related laws and regulations in the geographic regions where Your Forgejo Instance does business.</li>
|
||||
</ul>
|
||||
|
||||
<p>In the event of a data breach that affects your User Personal Information, we will act promptly to mitigate the impact of a breach and notify any affected Users without undue delay.</p>
|
||||
|
||||
<p>Transmission of data on Your Gitea Instance is encrypted using SSH, HTTPS (TLS), and git repository content is encrypted at rest. We host Your Gitea Instance at our hosting partner, which they provide data centers with high level of physical and network security.</p>
|
||||
<p>Transmission of data on Your Forgejo Instance is encrypted using SSH, HTTPS (TLS), and git repository content is encrypted at rest. We host Your Forgejo Instance at our hosting partner, which they provide data centers with high level of physical and network security.</p>
|
||||
|
||||
<p><b>Disclaimer:</b> No method of transmission, or method of electronic storage, is 100% secure, therefore, we cannot guarantee absolute security.</p>
|
||||
|
||||
|
@ -102,13 +102,13 @@
|
|||
|
||||
<h3>Cookies</h3>
|
||||
|
||||
<p>We uses cookies to make interactions with our service easy and meaningful. Cookies are small text files that websites often store on computer hard drives or mobile devices of visitors. We use cookies (and similar technologies, like HTML5 localStorage) to keep you logged in, remember your preferences, and provide information for future development of Your Gitea Instance. For security purposes, we use cookies to identify a device. By using our Website, you agree that we can place these types of cookies on your computer or device. If you disable your browser or device’s ability to accept these cookies, you will not be able to log in or use our services.</p>
|
||||
<p>We uses cookies to make interactions with our service easy and meaningful. Cookies are small text files that websites often store on computer hard drives or mobile devices of visitors. We use cookies (and similar technologies, like HTML5 localStorage) to keep you logged in, remember your preferences, and provide information for future development of Your Forgejo Instance. For security purposes, we use cookies to identify a device. By using our Website, you agree that we can place these types of cookies on your computer or device. If you disable your browser or device’s ability to accept these cookies, you will not be able to log in or use our services.</p>
|
||||
|
||||
<h3>Tracking and Analytics</h3>
|
||||
|
||||
<p>Out of the box, Gitea doesn't use third-party analytics. In case when we opt in to their usage, we do that to help us evaluate our Users' use of Your Gitea Instance, compile statistical reports on activity, and improve our content and Website performance. We only use these third-party analytics providers on certain areas of our Website, and all of them have signed data protection agreements with us that limit the type of User Personal Information they can collect and the purpose for which they can process the information. In addition, we may also deploy internal analytics software to provide similar functionality.</p>
|
||||
<p>Out of the box, Forgejo doesn't use third-party analytics. In case when we opt in to their usage, we do that to help us evaluate our Users' use of Your Forgejo Instance, compile statistical reports on activity, and improve our content and Website performance. We only use these third-party analytics providers on certain areas of our Website, and all of them have signed data protection agreements with us that limit the type of User Personal Information they can collect and the purpose for which they can process the information. In addition, we may also deploy internal analytics software to provide similar functionality.</p>
|
||||
|
||||
<p>Some browsers have incorporated "Do Not Track" (DNT) features that can send a signal to the websites you visit indicating you do not wish to be tracked. Your Gitea Instance responds to browser DNT signals and follows the <a href="https://www.w3.org/TR/tracking-dnt/">W3C standard for responding to DNT signals</a>. If you have not enabled DNT on a browser that supports it, cookies on some parts of our Website will track your online browsing activity on other online services over time, though we do not permit third parties other than our analytics and service providers to track Your Gitea Instance Users' activity over time on Your Gitea Instance.</p>
|
||||
<p>Some browsers have incorporated "Do Not Track" (DNT) features that can send a signal to the websites you visit indicating you do not wish to be tracked. Your Forgejo Instance responds to browser DNT signals and follows the <a href="https://www.w3.org/TR/tracking-dnt/">W3C standard for responding to DNT signals</a>. If you have not enabled DNT on a browser that supports it, cookies on some parts of our Website will track your online browsing activity on other online services over time, though we do not permit third parties other than our analytics and service providers to track Your Forgejo Instance Users' activity over time on Your Forgejo Instance.</p>
|
||||
|
||||
<h2>Repository Contents</h2>
|
||||
|
||||
|
@ -118,19 +118,19 @@
|
|||
|
||||
<h2>Public Information</h2>
|
||||
|
||||
<p>Many of our services and feature are public-facing. If your content is public-facing, third parties may access and use it in compliance with our Terms of Service, such as by viewing your profile or repositories or pulling data via our API. We do not sell that content; it is yours. However, we do allow third parties, such as research organizations or archives, to compile public-facing Your Gitea Instance information. Other third parties, such as data brokers, have been known to scrape Your Gitea Instance and compile data as well.</p>
|
||||
<p>Many of our services and feature are public-facing. If your content is public-facing, third parties may access and use it in compliance with our Terms of Service, such as by viewing your profile or repositories or pulling data via our API. We do not sell that content; it is yours. However, we do allow third parties, such as research organizations or archives, to compile public-facing Your Forgejo Instance information. Other third parties, such as data brokers, have been known to scrape Your Forgejo Instance and compile data as well.</p>
|
||||
|
||||
<p>Your User Personal Information associated with your content could be gathered by third parties in these compilations of Your Gitea Instance data. If you do not want your User Personal Information to appear in third parties’ compilations of Your Gitea Instance data, please do not make your User Personal Information publicly available and be sure to configure your email address to be private in your user profile and in your git commit settings.</p>
|
||||
<p>Your User Personal Information associated with your content could be gathered by third parties in these compilations of Your Forgejo Instance data. If you do not want your User Personal Information to appear in third parties’ compilations of Your Forgejo Instance data, please do not make your User Personal Information publicly available and be sure to configure your email address to be private in your user profile and in your git commit settings.</p>
|
||||
|
||||
<p>If you would like to compile Your Gitea Instance data, you must comply with our Terms of Service regarding scraping and privacy, and you may only use any public-facing User Personal Information you gather for the purpose for which our user authorized it. For example, where a Your Gitea Instance user has made an email address public-facing for the purpose of identification and attribution, do not use that email address for commercial advertising. We expect you to reasonably secure any User Personal Information you have gathered from Your Gitea Instance, and to respond promptly to complaints, removal requests, and "do not contact" requests from Your Gitea Instance or Your Gitea Instance users.</p>
|
||||
<p>If you would like to compile Your Forgejo Instance data, you must comply with our Terms of Service regarding scraping and privacy, and you may only use any public-facing User Personal Information you gather for the purpose for which our user authorized it. For example, where a Your Forgejo Instance user has made an email address public-facing for the purpose of identification and attribution, do not use that email address for commercial advertising. We expect you to reasonably secure any User Personal Information you have gathered from Your Forgejo Instance, and to respond promptly to complaints, removal requests, and "do not contact" requests from Your Forgejo Instance or Your Forgejo Instance users.</p>
|
||||
|
||||
<p>In similar fashion, projects on Your Gitea Instance may include publicly available User Personal Information collected as part of the collaborative events.</p>
|
||||
<p>In similar fashion, projects on Your Forgejo Instance may include publicly available User Personal Information collected as part of the collaborative events.</p>
|
||||
|
||||
<h2>Organizations</h2>
|
||||
|
||||
<p>If you collaborate on or become a member of an Organization, then its Account owners may receive your User Personal Information. When you accept an invitation to an Organization, you will be notified of the types of information owners may be able to see. If you accept an invitation to an Organization with a verified domain, then the owners of that Organization will be able to see your full email address(es) within that Organization's verified domain(s).</p>
|
||||
|
||||
<p>Please note, Your Gitea Instance may share your username, Usage Information, and Device Information with the owner of the Organization you are a member of, to the extent that your User Personal Information is provided only to investigate or respond to a security incident that affects or compromises the security of that particular Organization.</p>
|
||||
<p>Please note, Your Forgejo Instance may share your username, Usage Information, and Device Information with the owner of the Organization you are a member of, to the extent that your User Personal Information is provided only to investigate or respond to a security incident that affects or compromises the security of that particular Organization.</p>
|
||||
|
||||
<p>If you collaborate with or become a member of an Account that has agreed to a Data Protection Addendum (DPA) to this Privacy Policy, then that DPA governs in the event of conflicts between this Privacy Policy and DPA with respect to your activity in the Account.</p>
|
||||
|
||||
|
@ -138,17 +138,17 @@
|
|||
|
||||
<h2>How You Can Access and Control the Information We Collect?</h2>
|
||||
|
||||
<p>If you're already a Your Gitea Instance user, you may access, update, alter, or delete your basic user information by editing your user profile. You can control the information we collect about you by limiting what information is in your profile, or by keeping your information current.</p>
|
||||
<p>If you're already a Your Forgejo Instance user, you may access, update, alter, or delete your basic user information by editing your user profile. You can control the information we collect about you by limiting what information is in your profile, or by keeping your information current.</p>
|
||||
|
||||
<p>If Your Gitea Instance processes information about you, such as information receives from third parties, and you do not have an account, then you may, subject to applicable law, access, update, alter, delete, or object to the processing of your personal information by contacting our support.</p>
|
||||
<p>If Your Forgejo Instance processes information about you, such as information receives from third parties, and you do not have an account, then you may, subject to applicable law, access, update, alter, delete, or object to the processing of your personal information by contacting our support.</p>
|
||||
|
||||
<h3>Data Portability</h3>
|
||||
|
||||
<p>As a Your Gitea Instance User, you can always take your data with you. You can clone your repositories to your computer, or you can <a href="https://docs.gitea.com/development/migrations-interfaces">perform migrations using the provided interfaces</a>, for example.</p>
|
||||
<p>As a Your Forgejo Instance User, you can always take your data with you. You can clone your repositories to your computer, or you can <a href="https://docs.gitea.com/development/migrations-interfaces">perform migrations using the provided interfaces</a>, for example.</p>
|
||||
|
||||
<h3>Data Retention and Deletion of Data</h3>
|
||||
|
||||
<p>In general, Your Gitea Instance retains User Personal Information for as long as your account is active, or as needed to provide you service.</p>
|
||||
<p>In general, Your Forgejo Instance retains User Personal Information for as long as your account is active, or as needed to provide you service.</p>
|
||||
|
||||
<p>If you would like to cancel your account or delete your User Personal Information, you may do so in your user profile. We retain and use your information as necessary to comply with our legal obligations, resolve disputes, and enforce our agreements, but barring legal requirements, we will delete your full profile (within reason) within 90 days of your request. Feel free to contact our support to request erasure of the data we process on the basis of consent within 30 days.</p>
|
||||
|
||||
|
@ -158,14 +158,14 @@
|
|||
|
||||
<h2>Our Global Privacy Practices</h2>
|
||||
|
||||
<p>We store and process the information that we collect in the (country/state where Gitea is deployed) in accordance with this Privacy Statement though our service providers may store and process data outside the (country/state where Gitea is deployed). However, we understand that we have Users from different countries and regions with different privacy expectations, and we try to meet those needs even when the (country/state where Gitea is deployed) does not have the same privacy framework as other countries.</p>
|
||||
<p>We store and process the information that we collect in the (country/state where Forgejo is deployed) in accordance with this Privacy Statement though our service providers may store and process data outside the (country/state where Forgejo is deployed). However, we understand that we have Users from different countries and regions with different privacy expectations, and we try to meet those needs even when the (country/state where Forgejo is deployed) does not have the same privacy framework as other countries.</p>
|
||||
|
||||
<p>We provide a high standard of privacy protection—as described in this Privacy Statement—to all our users around the world, regardless of their country of origin or location, and we are proud of the levels of notice, choice, accountability, security, data integrity, access, and recourse we provide. We work hard to comply with the applicable data privacy laws wherever we do business, working with our Data Protection Officer as part of a cross-functional team that oversees our privacy compliance efforts. Additionally, if our vendors or affiliates have access to User Personal Information, they must sign agreements that require them to comply with our privacy policies and with applicable data privacy laws.</p>
|
||||
|
||||
<p>In particular:</p>
|
||||
|
||||
<ul>
|
||||
<li>Your Gitea Instance provides clear methods of unambiguous, informed, specific, and freely given consent at the time of data collection, when we collect your User Personal Information using consent as a basis.</li>
|
||||
<li>Your Forgejo Instance provides clear methods of unambiguous, informed, specific, and freely given consent at the time of data collection, when we collect your User Personal Information using consent as a basis.</li>
|
||||
<li>We collect only the minimum amount of User Personal Information necessary for our purposes, unless you choose to provide more. We encourage you to only give us the amount of data you are comfortable sharing.</li>
|
||||
<li>We offer you simple methods of accessing, altering, or deleting the User Personal Information we have collected, where legally permitted.</li>
|
||||
<li>We provide our Users notice, choice, accountability, security, and access regarding their User Personal Information, and we limit the purpose for processing it. We also provide our Users a method of recourse and enforcement. These are the Privacy Shield Principles, but they are also just good practices.</li>
|
||||
|
@ -173,21 +173,21 @@
|
|||
|
||||
<h2>How We Communicate with You?</h2>
|
||||
|
||||
<p>We use your email address to communicate with you, if you've said that's okay, and only for the reasons you’ve said that’s okay. For example, if you contact our support with a request, we respond to you via email. You have a lot of control over how your email address is used and shared on and through Your Gitea instance. You may manage your communication preferences in your user profile.</p>
|
||||
<p>We use your email address to communicate with you, if you've said that's okay, and only for the reasons you’ve said that’s okay. For example, if you contact our support with a request, we respond to you via email. You have a lot of control over how your email address is used and shared on and through Your Forgejo instance. You may manage your communication preferences in your user profile.</p>
|
||||
|
||||
<p>By design, the Git version control system associates many actions with a User's email address, such as commit messages. We are not able to change many aspects of the Git system. If you would like your email address to remain private, even when you’re commenting on public repositories, you can create a private email address in your user profile. You should also update your local Git configuration to use your private email address. This will not change how we contact you, but it will affect how others see you.</p>
|
||||
|
||||
<p>Depending on your email settings, Your Gitea instance may occasionally send notification emails about changes in a repository you’re watching, new features, requests for feedback, important policy changes, or to offer customer support. We also send marketing emails, based on your choices and in accordance with applicable laws and regulations. There's an “unsubscribe” link located at the bottom of each of the marketing emails we send you. Note that you can opt out of any communications with us, except the important ones (like from our support and system emails).</p>
|
||||
<p>Depending on your email settings, Your Forgejo instance may occasionally send notification emails about changes in a repository you’re watching, new features, requests for feedback, important policy changes, or to offer customer support. We also send marketing emails, based on your choices and in accordance with applicable laws and regulations. There's an “unsubscribe” link located at the bottom of each of the marketing emails we send you. Note that you can opt out of any communications with us, except the important ones (like from our support and system emails).</p>
|
||||
|
||||
<p>Our emails may contain a pixel tag, which is a small, clear image that can tell us whether or not you have opened an email and what your IP address is. We use this pixel tag to make our email more effective for you and to make sure we’re not sending you unwanted email.</p>
|
||||
|
||||
<h2>Changes to this Privacy Policy</h2>
|
||||
|
||||
<p>Although most changes are likely to be minor, Your Gitea Instance may change our Privacy Statement from time to time. We will provide notification to Users of material changes to this Privacy Statement through our Website at least 30 days prior to the change taking effect by posting a notice on our home page or sending email to the primary email address specified in your account.</p>
|
||||
<p>Although most changes are likely to be minor, Your Forgejo Instance may change our Privacy Statement from time to time. We will provide notification to Users of material changes to this Privacy Statement through our Website at least 30 days prior to the change taking effect by posting a notice on our home page or sending email to the primary email address specified in your account.</p>
|
||||
|
||||
<h2>Contact</h2>
|
||||
|
||||
<p>If you have any concerns about privacy, please contact us at <a href="mailto:privacy@your-gitea-instance">privacy@your-gitea-instance</a>. We will respond promptly, within 45 days.</p>
|
||||
<p>If you have any concerns about privacy, please contact us at <a href="mailto:privacy@your-forgejo-instance">privacy@your-forgejo-instance</a>. We will respond promptly, within 45 days.</p>
|
||||
|
||||
<h2>COPYING</h2>
|
||||
|
||||
|
|
|
@ -7,26 +7,26 @@
|
|||
<body>
|
||||
<h1>Terms of Service</h1>
|
||||
|
||||
<h4>Last updated: January 29, 2020</h4>
|
||||
<h4>Last updated: December 19, 2024</h4>
|
||||
|
||||
<p>Thank you for choosing Your Gitea Instance! Before you use it, please read this Terms of Service agreement carefully, which contains important contract between us and our users.</p>
|
||||
<p>Thank you for choosing Your Forgejo Instance! Before you use it, please read this Terms of Service agreement carefully, which contains important contract between us and our users.</p>
|
||||
|
||||
<h2>Definitions</h2>
|
||||
|
||||
<ol>
|
||||
<li>An "Account" represents your legal relationship with Your Gitea Instance. A “User Account” represents an individual User’s authorization to log in to and use the Service and serves as a User’s identity on Your Gitea Instance. “Organizations” are shared workspaces that may be associated with a single entity or with one or more Users where multiple Users can collaborate across many projects at once. A User Account can be a member of any number of Organizations.</li>
|
||||
<li>An "Account" represents your legal relationship with Your Forgejo Instance. A “User Account” represents an individual User’s authorization to log in to and use the Service and serves as a User’s identity on Your Forgejo Instance. “Organizations” are shared workspaces that may be associated with a single entity or with one or more Users where multiple Users can collaborate across many projects at once. A User Account can be a member of any number of Organizations.</li>
|
||||
|
||||
<li>The "Agreement" collectively refers to all terms, conditions, and notices referenced or contained in this document and other operating rules, policies (including Privacy Policy) and procedures that we may publish from time to time on this Website.</li>
|
||||
|
||||
<li>“Content” refers to content featured or displayed through the Website, including without limitation code, text, data, articles, images, photographs, graphics, software, applications, packages, designs, features, and other materials that are available on the Website or otherwise available through the Service. "Content" also includes Services. “User-Generated Content” is Content, written or otherwise, created or uploaded by our Users. "Your Content" is Content that you create or own.</li>
|
||||
|
||||
<li>"Your Gitea Instance", "We", and "Us" refers to Your Gitea Instance, as well as our affiliates, directors, subsidiaries, contractors, licensors, officers, agents, and employees.</li>
|
||||
<li>"Your Forgejo Instance", "We", and "Us" refers to Your Forgejo Instance, as well as our affiliates, directors, subsidiaries, contractors, licensors, officers, agents, and employees.</li>
|
||||
|
||||
<li>The "Service" refers to applications/software, products, and services provided by Your Gitea Instance.</li>
|
||||
<li>The "Service" refers to applications/software, products, and services provided by Your Forgejo Instance.</li>
|
||||
|
||||
<li>The "User", "You", and "Your" refers to individual person or institution (organizations or company) that has visited or using the Service; that have access or use any part of the Account; or that directs to use the Account to perform its function. Please note that additional terms may apply for Accounts related to business or government.</li>
|
||||
|
||||
<li>The "Website" refers to Your Gitea Instance's website at <a href="https://your-gitea-instance">your-gitea-instance</a>, including its subdomains and other websites owned by Your Gitea Instance.</li>
|
||||
<li>The "Website" refers to Your Forgejo Instance's website at <a href="https://your-forgejo-instance">your-forgejo-instance</a>, including its subdomains and other websites owned by Your Forgejo Instance.</li>
|
||||
</ol>
|
||||
|
||||
<h2>Account Terms</h2>
|
||||
|
@ -48,7 +48,7 @@
|
|||
<ul>
|
||||
<li>You must be a human to create an Account. Accounts registered by "bots" or other automated methods are not permitted. We do permit machine accounts:</li>
|
||||
<li>A machine account is an Account set up by an individual human who accepts the Terms on behalf of the Account, provides a valid email address, and is responsible for its actions. A machine account is used exclusively for performing automated tasks. Multiple users may direct the actions of a machine account, but the owner of the Account is ultimately responsible for the machine's actions.</li>
|
||||
<li>You must be age 13 or older. If we learn of any User under that age, we will immediately terminate that User's Account. Different countries may have different minimum age; in such cases you are responsible for complying with your country's regulation. By using Your Gitea Instance, you agree to comply with <a href="https://www.ftc.gov/enforcement/rules/rulemaking-regulatory-reform-proceedings/childrens-online-privacy-protection-rule">COPPA</a> and/or similar law in your country.</li>
|
||||
<li>You must be age 13 or older. If we learn of any User under that age, we will immediately terminate that User's Account. Different countries may have different minimum age; in such cases you are responsible for complying with your country's regulation. By using Your Forgejo Instance, you agree to comply with <a href="https://www.ftc.gov/enforcement/rules/rulemaking-regulatory-reform-proceedings/childrens-online-privacy-protection-rule">COPPA</a> and/or similar law in your country.</li>
|
||||
</ul>
|
||||
|
||||
<h3>User Account Security</h3>
|
||||
|
@ -57,7 +57,7 @@
|
|||
|
||||
<h3>Additional Terms</h3>
|
||||
|
||||
<p>In some situations, third parties' terms may apply to your use of Your Gitea Instance. For example, you may be a member of an organization on Your Gitea Instance with its own terms or license agreements; you may download an application that integrates with Your Gitea Instance; or you may use Your Gitea Instance to authenticate to another service. Please be aware that while these Terms are our full agreement with you, other parties' terms govern their relationships with you.</p>
|
||||
<p>In some situations, third parties' terms may apply to your use of Your Forgejo Instance. For example, you may be a member of an organization on Your Forgejo Instance with its own terms or license agreements; you may download an application that integrates with Your Forgejo Instance; or you may use Your Forgejo Instance to authenticate to another service. Please be aware that while these Terms are our full agreement with you, other parties' terms govern their relationships with you.</p>
|
||||
|
||||
<h2>Acceptable Use</h2>
|
||||
|
||||
|
@ -73,19 +73,19 @@
|
|||
<li>
|
||||
<p>You retain ownership of and responsibility for Your Content. If you're posting anything you did not create yourself or do not own the rights to, you agree that you are responsible for any Content you post; that you will only submit Content that you have the right to post; and that you will fully comply with any third party licenses relating to Content you post.</p>
|
||||
|
||||
<p>Because of above, we need you to grant us -- and other Your Gitea Instance users -- certain legal permissions, listed below in this section. If you upload Content that already comes with a license granting Your Gitea Instance the permissions we need to run our Service, no additional license is required. You understand that you will not receive any payment for any of the rights granted below. The licenses you grant to us will end when you remove Your Content from our servers, unless other Users have forked it.</p>
|
||||
<p>Because of above, we need you to grant us -- and other Your Forgejo Instance users -- certain legal permissions, listed below in this section. If you upload Content that already comes with a license granting Your Forgejo Instance the permissions we need to run our Service, no additional license is required. You understand that you will not receive any payment for any of the rights granted below. The licenses you grant to us will end when you remove Your Content from our servers, unless other Users have forked it.</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>We need the legal right to do things like host Your Content, publish it, and share it. You grant us and our legal successors the right to store, parse, and display Your Content, and make incidental copies as necessary to render the Website and provide the Service. This includes the right to do things like copy it to our database and make backups; show it to you and other users; parse it into a search index or otherwise analyze it on our servers; share it with other users; and perform it, in case Your Content is something like music or video.</p>
|
||||
|
||||
<p>This license, however, doesn't grant Your Gitea Instance the right to sell Your Content or otherwise distribute or use it outside of our provision of the Service.</p>
|
||||
<p>This license, however, doesn't grant Your Forgejo Instance the right to sell Your Content or otherwise distribute or use it outside of our provision of the Service.</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>Any User-Generated Content you post publicly, including issues, comments, and contributions to other Users' repositories, may be viewed by others. By setting your repositories to be viewed publicly, you agree to allow others to view and "fork" your repositories (this means that others may make their own copies of Content from your repositories in repositories they control).</p>
|
||||
|
||||
<p>If you set your pages and repositories to be viewed publicly, you grant each User of Your Gitea Instance a nonexclusive, worldwide license to use, display, and perform Your Content through the Your Gitea Instance Service and to reproduce Your Content solely on Your Gitea Instance as permitted through Your Gitea Instance's functionality (for example, through forking). You may grant further rights if you adopt a license. If you are uploading Content you did not create or own, you are responsible for ensuring that the Content you upload is licensed under terms that grant these permissions to other Your Gitea Instance Users.</p>
|
||||
<p>If you set your pages and repositories to be viewed publicly, you grant each User of Your Forgejo Instance a nonexclusive, worldwide license to use, display, and perform Your Content through the Your Forgejo Instance Service and to reproduce Your Content solely on Your Forgejo Instance as permitted through Your Forgejo Instance's functionality (for example, through forking). You may grant further rights if you adopt a license. If you are uploading Content you did not create or own, you are responsible for ensuring that the Content you upload is licensed under terms that grant these permissions to other Your Forgejo Instance Users.</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
|
@ -97,7 +97,7 @@
|
|||
<li>
|
||||
<p>You retain all moral rights to Your Content that you upload, publish, or submit to any part of the Service, including the rights of integrity and attribution. However, you waive these rights and agree not to assert them against us, to enable us to reasonably exercise the rights granted above, but not otherwise.</p>
|
||||
|
||||
<p>To the extent this agreement is not enforceable by applicable law, you grant Your Gitea Instance the rights we need to use Your Content without attribution and to make reasonable adaptations of Your Content as necessary to render the Website and provide the Service.</p>
|
||||
<p>To the extent this agreement is not enforceable by applicable law, you grant Your Forgejo Instance the rights we need to use Your Content without attribution and to make reasonable adaptations of Your Content as necessary to render the Website and provide the Service.</p>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
|
@ -106,27 +106,27 @@
|
|||
<ol>
|
||||
<li>Some Accounts may have private repositories, which allow the User to control access to Content.</li>
|
||||
|
||||
<li>Your Gitea Instance considers the contents of private repositories to be confidential to you. Your Gitea Instance will protect the contents of private repositories from unauthorized use, access, or disclosure in the same manner that we would use to protect our own confidential information of a similar nature and in no event with less than a reasonable degree of care.</li>
|
||||
<li>Your Forgejo Instance considers the contents of private repositories to be confidential to you. Your Forgejo Instance will protect the contents of private repositories from unauthorized use, access, or disclosure in the same manner that we would use to protect our own confidential information of a similar nature and in no event with less than a reasonable degree of care.</li>
|
||||
|
||||
<li>
|
||||
<p>Your Gitea Instance employees may only access the content of your private repositories in the following situations:</p>
|
||||
<p>Your Forgejo Instance employees may only access the content of your private repositories in the following situations:</p>
|
||||
|
||||
<ul>
|
||||
<li>With your consent and knowledge, for support reasons. If Your Gitea Instance accesses a private repository for support reasons, we will only do so with the owner’s consent and knowledge.</li>
|
||||
<li>When access is required for security reasons, including when access is required to maintain ongoing confidentiality, integrity, availability and resilience of Your Gitea Instance's systems and Service.</li>
|
||||
<li>With your consent and knowledge, for support reasons. If Your Forgejo Instance accesses a private repository for support reasons, we will only do so with the owner’s consent and knowledge.</li>
|
||||
<li>When access is required for security reasons, including when access is required to maintain ongoing confidentiality, integrity, availability and resilience of Your Forgejo Instance's systems and Service.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>You may choose to enable additional access to your private repositories. For example: You may enable various Your Gitea Instance services or features that require additional rights to Your Content in private repositories. These rights may vary depending on the service or feature, but Your Gitea Instance will continue to treat your private repository Content as confidential. If those services or features require rights in addition to those we need to provide the Your Gitea Instance Service, we will provide an explanation of those rights.</li>
|
||||
<li>You may choose to enable additional access to your private repositories. For example: You may enable various Your Forgejo Instance services or features that require additional rights to Your Content in private repositories. These rights may vary depending on the service or feature, but Your Forgejo Instance will continue to treat your private repository Content as confidential. If those services or features require rights in addition to those we need to provide the Your Forgejo Instance Service, we will provide an explanation of those rights.</li>
|
||||
</ol>
|
||||
|
||||
<h2>Copyright Infringement and DMCA Policy</h2>
|
||||
|
||||
<p>If you are copyright owner and believe that content on our website violates your copyright, please contact us at <a href="mailto:copyright@your-gitea-instance">copyright@your-gitea-instance</a>. Please note that before sending a takedown notice, consider legal uses (such as fair use and licensed use); and legal consequences for sending false notices.</p>
|
||||
<p>If you are copyright owner and believe that content on our website violates your copyright, please contact us at <a href="mailto:copyright@your-forgejo-instance">copyright@your-forgejo-instance</a>. Please note that before sending a takedown notice, consider legal uses (such as fair use and licensed use); and legal consequences for sending false notices.</p>
|
||||
|
||||
<h2>Intellectual Properties and COPYING</h2>
|
||||
|
||||
<p>Your Gitea Instance and our licensors, vendors, agents, and/or our content providers retain ownership of all intellectual property rights of any kind related to the Website and Service. We reserve all rights that are not expressly granted to you under this Agreement or by law. The look and feel of the Website and Service is copyright © Your Gitea Instance. All rights reserved.</p>
|
||||
<p>Your Forgejo Instance and our licensors, vendors, agents, and/or our content providers retain ownership of all intellectual property rights of any kind related to the Website and Service. We reserve all rights that are not expressly granted to you under this Agreement or by law. The look and feel of the Website and Service is copyright © Your Forgejo Instance. All rights reserved.</p>
|
||||
|
||||
<p>If you'd like to use our trademarks, you must follow all of our trademark guidelines.</p>
|
||||
|
||||
|
@ -134,13 +134,13 @@
|
|||
|
||||
<h2>API Terms</h2>
|
||||
|
||||
<p>Abuse or excessively frequent requests to Your Gitea Instance via the API may result in the temporary or permanent suspension of your Account's access to the API. Your Gitea Instance, in our sole discretion, will determine abuse or excessive usage of the API. We will make a reasonable attempt to warn you via email prior to suspension.</p>
|
||||
<p>Abuse or excessively frequent requests to Your Forgejo Instance via the API may result in the temporary or permanent suspension of your Account's access to the API. Your Forgejo Instance, in our sole discretion, will determine abuse or excessive usage of the API. We will make a reasonable attempt to warn you via email prior to suspension.</p>
|
||||
|
||||
<p>You may not share API tokens to exceed Your Gitea Instance's rate limitations.</p>
|
||||
<p>You may not share API tokens to exceed Your Forgejo Instance's rate limitations.</p>
|
||||
|
||||
<p>You may not use the API to download data or Content from Your Gitea Instance for spamming purposes, including for the purposes of selling Your Gitea Instance users' personal information, such as to recruiters, headhunters, and job boards.</p>
|
||||
<p>You may not use the API to download data or Content from Your Forgejo Instance for spamming purposes, including for the purposes of selling Your Forgejo Instance users' personal information, such as to recruiters, headhunters, and job boards.</p>
|
||||
|
||||
<p>All use of the Your Gitea Instance API is subject to these Terms of Service and the Your Gitea Instance Privacy Statement.</p>
|
||||
<p>All use of the Your Forgejo Instance API is subject to these Terms of Service and the Your Forgejo Instance Privacy Statement.</p>
|
||||
|
||||
<p>However, we may provide subscription-based access to our API for Users who need high-throughput access or reselling our Service.</p>
|
||||
|
||||
|
@ -149,7 +149,7 @@
|
|||
|
||||
<h3>Account Cancellation</h3>
|
||||
|
||||
<p>It is your responsibility to properly cancel your Account with Your Gitea Instance. You can cancel your Account at any time by going into your Settings in the global navigation bar at the top of the screen. The Account screen provides a simple, no questions asked cancellation link. We are not able to cancel Accounts in response to an email or phone request.</p>
|
||||
<p>It is your responsibility to properly cancel your Account with Your Forgejo Instance. You can cancel your Account at any time by going into your Settings in the global navigation bar at the top of the screen. The Account screen provides a simple, no questions asked cancellation link. We are not able to cancel Accounts in response to an email or phone request.</p>
|
||||
|
||||
<h3>Upon Cancellation</h3>
|
||||
|
||||
|
@ -161,7 +161,7 @@
|
|||
|
||||
<h3>We May Terminate</h3>
|
||||
|
||||
<p>Your Gitea Instance has the right to suspend or terminate your access to all or any part of the Website at any time, with or without cause, with or without notice, effective immediately. Your Gitea Instance reserves the right to refuse service to anyone for any reason at any time.</p>
|
||||
<p>Your Forgejo Instance has the right to suspend or terminate your access to all or any part of the Website at any time, with or without cause, with or without notice, effective immediately. Your Forgejo Instance reserves the right to refuse service to anyone for any reason at any time.</p>
|
||||
|
||||
<h3>Survival</h3>
|
||||
|
||||
|
@ -175,7 +175,7 @@
|
|||
|
||||
<h3>Legal Notices to Us Must Be in Writing</h3>
|
||||
|
||||
<p>Communications made through email or Your Gitea Instance Support's messaging system will not constitute legal notice to Your Gitea Instance or any of its officers, employees, agents or representatives in any situation where notice to Your Gitea Instance is required by contract or any law or regulation. Legal notice to Your Gitea Instance must be in writing and served on Your Gitea Instance's legal agent.</p>
|
||||
<p>Communications made through email or Your Forgejo Instance Support's messaging system will not constitute legal notice to Your Forgejo Instance or any of its officers, employees, agents or representatives in any situation where notice to Your Forgejo Instance is required by contract or any law or regulation. Legal notice to Your Forgejo Instance must be in writing and served on Your Forgejo Instance's legal agent.</p>
|
||||
|
||||
<h3>No Phone Support</h3>
|
||||
|
||||
|
@ -183,9 +183,9 @@
|
|||
|
||||
<h2>Disclaimer of Warranties</h2>
|
||||
|
||||
<p>Your Gitea Instance provides the Website and the Service “as is” and “as available,” without warranty of any kind. Without limiting this, we expressly disclaim all warranties, whether express, implied or statutory, regarding the Website and the Service including without limitation any warranty of merchantability, fitness for a particular purpose, title, security, accuracy and non-infringement.</p>
|
||||
<p>Your Forgejo Instance provides the Website and the Service “as is” and “as available,” without warranty of any kind. Without limiting this, we expressly disclaim all warranties, whether express, implied or statutory, regarding the Website and the Service including without limitation any warranty of merchantability, fitness for a particular purpose, title, security, accuracy and non-infringement.</p>
|
||||
|
||||
<p>Your Gitea Instance does not warrant that the Service will meet your requirements; that the Service will be uninterrupted, timely, secure, or error-free; that the information provided through the Service is accurate, reliable or correct; that any defects or errors will be corrected; that the Service will be available at any particular time or location; or that the Service is free of viruses or other harmful components. You assume full responsibility and risk of loss resulting from your downloading and/or use of files, information, content or other material obtained from the Service.</p>
|
||||
<p>Your Forgejo Instance does not warrant that the Service will meet your requirements; that the Service will be uninterrupted, timely, secure, or error-free; that the information provided through the Service is accurate, reliable or correct; that any defects or errors will be corrected; that the Service will be available at any particular time or location; or that the Service is free of viruses or other harmful components. You assume full responsibility and risk of loss resulting from your downloading and/or use of files, information, content or other material obtained from the Service.</p>
|
||||
|
||||
<h2>Limitation of Liability</h2>
|
||||
|
||||
|
@ -212,9 +212,9 @@
|
|||
|
||||
<h2>Release and Indemnification</h2>
|
||||
|
||||
<p>If you have a dispute with one or more Users, you agree to release Your Gitea Instance from any and all claims, demands and damages (actual and consequential) of every kind and nature, known and unknown, arising out of or in any way connected with such disputes.</p>
|
||||
<p>If you have a dispute with one or more Users, you agree to release Your Forgejo Instance from any and all claims, demands and damages (actual and consequential) of every kind and nature, known and unknown, arising out of or in any way connected with such disputes.</p>
|
||||
|
||||
<p>You agree to indemnify us, defend us, and hold us harmless from and against any and all claims, liabilities, and expenses, including attorneys’ fees, arising out of your use of the Website and the Service, including but not limited to your violation of this Agreement, provided that Your Gitea Instance (1) promptly gives you written notice of the claim, demand, suit or proceeding; (2) gives you sole control of the defense and settlement of the claim, demand, suit or proceeding (provided that you may not settle any claim, demand, suit or proceeding unless the settlement unconditionally releases Your Gitea Instance of all liability); and (3) provides to you all reasonable assistance, at your expense.</p>
|
||||
<p>You agree to indemnify us, defend us, and hold us harmless from and against any and all claims, liabilities, and expenses, including attorneys’ fees, arising out of your use of the Website and the Service, including but not limited to your violation of this Agreement, provided that Your Forgejo Instance (1) promptly gives you written notice of the claim, demand, suit or proceeding; (2) gives you sole control of the defense and settlement of the claim, demand, suit or proceeding (provided that you may not settle any claim, demand, suit or proceeding unless the settlement unconditionally releases Your Forgejo Instance of all liability); and (3) provides to you all reasonable assistance, at your expense.</p>
|
||||
|
||||
<h2>Changes to These Terms</h2>
|
||||
|
||||
|
@ -224,22 +224,22 @@
|
|||
|
||||
<h3>Governing Law</h3>
|
||||
|
||||
<p>Except to the extent applicable law provides otherwise, this Agreement between you and us and any access to or use of the Website or the Service are governed by (national laws of country/state where Gitea is deployed) and (regional laws of locality where Gitea is deployed), without regard to conflict of law provisions. You and Your Gitea Instance agree to submit to the exclusive jurisdiction and venue of the courts located in (locality where Gitea is deployed).</p>
|
||||
<p>Except to the extent applicable law provides otherwise, this Agreement between you and us and any access to or use of the Website or the Service are governed by (national laws of country/state where Forgejo is deployed) and (regional laws of locality where Forgejo is deployed), without regard to conflict of law provisions. You and Your Forgejo Instance agree to submit to the exclusive jurisdiction and venue of the courts located in (locality where Forgejo is deployed).</p>
|
||||
|
||||
<h3>Non-Assignability</h3>
|
||||
|
||||
<p>Your Gitea Instance may assign or delegate these Terms of Service and/or our Privacy Policy in whole or in part, to any person or entity at any time with or without your consent, including the license granted in <i>User-Generated Content</i>. You may not assign or delegate any rights or obligations under the Terms of Service or Privacy Statement without our prior written consent, and any unauthorized assignment and delegation by you is void.</p>
|
||||
<p>Your Forgejo Instance may assign or delegate these Terms of Service and/or our Privacy Policy in whole or in part, to any person or entity at any time with or without your consent, including the license granted in <i>User-Generated Content</i>. You may not assign or delegate any rights or obligations under the Terms of Service or Privacy Statement without our prior written consent, and any unauthorized assignment and delegation by you is void.</p>
|
||||
|
||||
<h3>Severablity, No Waiver, and Survival</h3>
|
||||
|
||||
<p>If any part of this Agreement is held invalid or unenforceable, that portion of the Agreement will be construed to reflect the parties’ original intent. The remaining portions will remain in full force and effect. Any failure on the part of Your Gitea Instance to enforce any provision of this Agreement will not be considered a waiver of our right to enforce such provision. Our rights under this Agreement will survive any termination of this Agreement.</p>
|
||||
<p>If any part of this Agreement is held invalid or unenforceable, that portion of the Agreement will be construed to reflect the parties’ original intent. The remaining portions will remain in full force and effect. Any failure on the part of Your Forgejo Instance to enforce any provision of this Agreement will not be considered a waiver of our right to enforce such provision. Our rights under this Agreement will survive any termination of this Agreement.</p>
|
||||
|
||||
<h3>Amendments and Complete Agreement</h3>
|
||||
|
||||
<p>This Agreement may only be modified by a written amendment signed by an authorized representative of Your Gitea Instance, or by the posting by Your Gitea Instance of a revised version in accordance with <i>Changes to These Terms</i>. These Terms of Service, together with the Your Gitea Instance Privacy Policy, represent the complete and exclusive statement of the agreement between you and us. This Agreement supersedes any proposal or prior agreement oral or written, and any other communications between you and Your Gitea Instance relating to the subject matter of these terms including any confidentiality or nondisclosure agreements.</p>
|
||||
<p>This Agreement may only be modified by a written amendment signed by an authorized representative of Your Forgejo Instance, or by the posting by Your Forgejo Instance of a revised version in accordance with <i>Changes to These Terms</i>. These Terms of Service, together with the Your Forgejo Instance Privacy Policy, represent the complete and exclusive statement of the agreement between you and us. This Agreement supersedes any proposal or prior agreement oral or written, and any other communications between you and Your Forgejo Instance relating to the subject matter of these terms including any confidentiality or nondisclosure agreements.</p>
|
||||
|
||||
<h3>Contact</h3>
|
||||
|
||||
<p>If you have questions about these Terms of Service, you can <a href="mailto:support@your-gitea-instance">contact our support</a>.</p>
|
||||
<p>If you have questions about these Terms of Service, you can <a href="mailto:support@your-forgejo-instance">contact our support</a>.</p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
99
go.mod
99
go.mod
|
@ -13,7 +13,6 @@ require (
|
|||
code.forgejo.org/go-chi/captcha v1.0.1
|
||||
code.forgejo.org/go-chi/session v1.0.1
|
||||
code.gitea.io/actions-proto-go v0.4.0
|
||||
code.gitea.io/gitea-vet v0.2.3
|
||||
code.gitea.io/sdk/gitea v0.17.1
|
||||
codeberg.org/gusted/mcaptcha v0.0.0-20220723083913-4f3072e1d570
|
||||
connectrpc.com/connect v1.17.0
|
||||
|
@ -49,8 +48,7 @@ require (
|
|||
github.com/go-ldap/ldap/v3 v3.4.6
|
||||
github.com/go-openapi/spec v0.20.14
|
||||
github.com/go-sql-driver/mysql v1.8.1
|
||||
github.com/go-swagger/go-swagger v0.30.5
|
||||
github.com/go-testfixtures/testfixtures/v3 v3.12.0
|
||||
github.com/go-testfixtures/testfixtures/v3 v3.14.0
|
||||
github.com/go-webauthn/webauthn v0.11.2
|
||||
github.com/gobwas/glob v0.2.3
|
||||
github.com/gogs/chardet v0.0.0-20211120154057-b7413eaefb8f
|
||||
|
@ -62,7 +60,6 @@ require (
|
|||
github.com/google/uuid v1.6.0
|
||||
github.com/gorilla/feeds v1.2.0
|
||||
github.com/gorilla/sessions v1.4.0
|
||||
github.com/h2non/gock v1.2.0
|
||||
github.com/hashicorp/go-version v1.6.0
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.7
|
||||
github.com/huandu/xstrings v1.5.0
|
||||
|
@ -111,9 +108,8 @@ require (
|
|||
golang.org/x/sync v0.10.0
|
||||
golang.org/x/sys v0.28.0
|
||||
golang.org/x/text v0.21.0
|
||||
golang.org/x/tools v0.28.0
|
||||
google.golang.org/grpc v1.68.0
|
||||
google.golang.org/protobuf v1.36.0
|
||||
google.golang.org/grpc v1.69.2
|
||||
google.golang.org/protobuf v1.36.1
|
||||
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
|
||||
gopkg.in/ini.v1 v1.67.0
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
|
@ -123,22 +119,26 @@ require (
|
|||
)
|
||||
|
||||
require (
|
||||
cloud.google.com/go/compute/metadata v0.5.0 // indirect
|
||||
cel.dev/expr v0.16.2 // indirect
|
||||
cloud.google.com/go v0.116.0 // indirect
|
||||
cloud.google.com/go/auth v0.9.9 // indirect
|
||||
cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect
|
||||
cloud.google.com/go/compute/metadata v0.5.2 // indirect
|
||||
cloud.google.com/go/iam v1.2.1 // indirect
|
||||
cloud.google.com/go/longrunning v0.6.1 // indirect
|
||||
cloud.google.com/go/monitoring v1.21.1 // indirect
|
||||
cloud.google.com/go/spanner v1.73.0 // indirect
|
||||
dario.cat/mergo v1.0.0 // indirect
|
||||
filippo.io/edwards25519 v1.1.0 // indirect
|
||||
git.sr.ht/~mariusor/go-xsd-duration v0.0.0-20220703122237-02e73435a078 // indirect
|
||||
github.com/ClickHouse/ch-go v0.61.5 // indirect
|
||||
github.com/ClickHouse/clickhouse-go/v2 v2.26.0 // indirect
|
||||
github.com/DataDog/zstd v1.5.5 // indirect
|
||||
github.com/Masterminds/goutils v1.1.1 // indirect
|
||||
github.com/Masterminds/semver/v3 v3.2.1 // indirect
|
||||
github.com/Masterminds/sprig/v3 v3.2.3 // indirect
|
||||
github.com/Microsoft/go-winio v0.6.1 // indirect
|
||||
github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.0 // indirect
|
||||
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.2 // indirect
|
||||
github.com/Microsoft/go-winio v0.6.2 // indirect
|
||||
github.com/RoaringBitmap/roaring v1.9.3 // indirect
|
||||
github.com/andybalholm/brotli v1.1.0 // indirect
|
||||
github.com/andybalholm/brotli v1.1.1 // indirect
|
||||
github.com/andybalholm/cascadia v1.3.2 // indirect
|
||||
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect
|
||||
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
|
||||
github.com/aymerick/douceur v0.2.0 // indirect
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
github.com/bits-and-blooms/bitset v1.13.0 // indirect
|
||||
|
@ -162,9 +162,11 @@ require (
|
|||
github.com/boombuler/barcode v1.0.1 // indirect
|
||||
github.com/bradfitz/gomemcache v0.0.0-20230905024940-24af94b03874 // indirect
|
||||
github.com/caddyserver/zerossl v0.1.3 // indirect
|
||||
github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect
|
||||
github.com/cention-sany/utf7 v0.0.0-20170124080048-26cad61bd60a // indirect
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
github.com/cloudflare/circl v1.3.8 // indirect
|
||||
github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect
|
||||
github.com/cyphar/filepath-securejoin v0.2.4 // indirect
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||
|
@ -173,27 +175,22 @@ require (
|
|||
github.com/dlclark/regexp2 v1.11.0 // indirect
|
||||
github.com/emersion/go-sasl v0.0.0-20231106173351-e73c9f7bad43 // indirect
|
||||
github.com/emirpasic/gods v1.18.1 // indirect
|
||||
github.com/envoyproxy/go-control-plane v0.13.1 // indirect
|
||||
github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect
|
||||
github.com/fatih/color v1.16.0 // indirect
|
||||
github.com/felixge/httpsnoop v1.0.4 // indirect
|
||||
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
|
||||
github.com/go-ap/errors v0.0.0-20231003111023-183eef4b31b7 // indirect
|
||||
github.com/go-asn1-ber/asn1-ber v1.5.5 // indirect
|
||||
github.com/go-enry/go-oniguruma v1.2.1 // indirect
|
||||
github.com/go-faster/city v1.0.1 // indirect
|
||||
github.com/go-faster/errors v0.7.1 // indirect
|
||||
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
|
||||
github.com/go-git/go-billy/v5 v5.5.0 // indirect
|
||||
github.com/go-ini/ini v1.67.0 // indirect
|
||||
github.com/go-openapi/analysis v0.22.2 // indirect
|
||||
github.com/go-openapi/errors v0.21.0 // indirect
|
||||
github.com/go-openapi/inflect v0.19.0 // indirect
|
||||
github.com/go-logr/logr v1.4.2 // indirect
|
||||
github.com/go-logr/stdr v1.2.2 // indirect
|
||||
github.com/go-openapi/jsonpointer v0.20.2 // indirect
|
||||
github.com/go-openapi/jsonreference v0.20.4 // indirect
|
||||
github.com/go-openapi/loads v0.21.5 // indirect
|
||||
github.com/go-openapi/runtime v0.26.2 // indirect
|
||||
github.com/go-openapi/strfmt v0.22.0 // indirect
|
||||
github.com/go-openapi/swag v0.22.7 // indirect
|
||||
github.com/go-openapi/validate v0.22.6 // indirect
|
||||
github.com/go-webauthn/x v0.1.14 // indirect
|
||||
github.com/goccy/go-json v0.10.3 // indirect
|
||||
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
|
||||
|
@ -205,24 +202,20 @@ require (
|
|||
github.com/google/go-cmp v0.6.0 // indirect
|
||||
github.com/google/go-querystring v1.1.0 // indirect
|
||||
github.com/google/go-tpm v0.9.1 // indirect
|
||||
github.com/google/s2a-go v0.1.8 // indirect
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect
|
||||
github.com/googleapis/gax-go/v2 v2.13.0 // indirect
|
||||
github.com/googleapis/go-sql-spanner v1.7.4 // indirect
|
||||
github.com/gorilla/css v1.0.1 // indirect
|
||||
github.com/gorilla/handlers v1.5.2 // indirect
|
||||
github.com/gorilla/mux v1.8.1 // indirect
|
||||
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/hcl v1.0.0 // indirect
|
||||
github.com/imdario/mergo v0.3.16 // indirect
|
||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
|
||||
github.com/jessevdk/go-flags v1.5.0 // indirect
|
||||
github.com/josharian/intern v1.0.0 // indirect
|
||||
github.com/kevinburke/ssh_config v1.2.0 // indirect
|
||||
github.com/klauspost/pgzip v1.2.6 // indirect
|
||||
github.com/kr/pretty v0.3.1 // indirect
|
||||
github.com/kr/text v0.2.0 // indirect
|
||||
github.com/libdns/libdns v0.2.2 // indirect
|
||||
github.com/magiconair/properties v1.8.7 // indirect
|
||||
github.com/mailru/easyjson v0.7.7 // indirect
|
||||
github.com/markbates/going v1.0.3 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
|
@ -230,66 +223,58 @@ require (
|
|||
github.com/mholt/acmez/v2 v2.0.3 // indirect
|
||||
github.com/miekg/dns v1.1.62 // indirect
|
||||
github.com/minio/md5-simd v1.1.2 // indirect
|
||||
github.com/mitchellh/copystructure v1.2.0 // indirect
|
||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||
github.com/mitchellh/reflectwalk v1.0.2 // indirect
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/mrjones/oauth v0.0.0-20190623134757-126b35219450 // indirect
|
||||
github.com/mschoch/smat v0.2.0 // indirect
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
||||
github.com/nwaples/rardecode v1.1.3 // indirect
|
||||
github.com/oklog/ulid v1.3.1 // indirect
|
||||
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
||||
github.com/onsi/ginkgo v1.16.5 // indirect
|
||||
github.com/paulmach/orb v0.11.1 // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.1.1 // indirect
|
||||
github.com/pierrec/lz4/v4 v4.1.21 // indirect
|
||||
github.com/pjbgf/sha1cd v0.3.0 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||
github.com/prometheus/client_model v0.6.1 // indirect
|
||||
github.com/prometheus/common v0.55.0 // indirect
|
||||
github.com/prometheus/procfs v0.15.1 // indirect
|
||||
github.com/rhysd/actionlint v1.6.27 // indirect
|
||||
github.com/rivo/uniseg v0.4.7 // indirect
|
||||
github.com/rogpeppe/go-internal v1.12.0 // indirect
|
||||
github.com/rs/xid v1.6.0 // indirect
|
||||
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/segmentio/asm v1.2.0 // indirect
|
||||
github.com/shopspring/decimal v1.4.0 // indirect
|
||||
github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c // indirect
|
||||
github.com/sirupsen/logrus v1.9.3 // indirect
|
||||
github.com/skeema/knownhosts v1.2.1 // indirect
|
||||
github.com/sourcegraph/conc v0.3.0 // indirect
|
||||
github.com/spf13/afero v1.11.0 // indirect
|
||||
github.com/spf13/cast v1.6.0 // indirect
|
||||
github.com/spf13/pflag v1.0.5 // indirect
|
||||
github.com/spf13/viper v1.18.2 // indirect
|
||||
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect
|
||||
github.com/subosito/gotenv v1.6.0 // indirect
|
||||
github.com/toqueteos/webbrowser v1.2.0 // indirect
|
||||
github.com/x448/float16 v0.8.4 // indirect
|
||||
github.com/xanzy/ssh-agent v0.3.3 // indirect
|
||||
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect
|
||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
|
||||
github.com/zeebo/blake3 v0.2.4 // indirect
|
||||
go.etcd.io/bbolt v1.3.9 // indirect
|
||||
go.mongodb.org/mongo-driver v1.13.1 // indirect
|
||||
go.opentelemetry.io/otel v1.26.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.26.0 // indirect
|
||||
go.opencensus.io v0.24.0 // indirect
|
||||
go.opentelemetry.io/contrib/detectors/gcp v1.31.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect
|
||||
go.opentelemetry.io/otel v1.31.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.31.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk v1.31.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk/metric v1.31.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.31.0 // indirect
|
||||
go.uber.org/atomic v1.11.0 // indirect
|
||||
go.uber.org/multierr v1.11.0 // indirect
|
||||
go.uber.org/zap v1.27.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20240119083558-1b970713d09a // indirect
|
||||
golang.org/x/mod v0.22.0 // indirect
|
||||
golang.org/x/time v0.5.0 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect
|
||||
golang.org/x/time v0.7.0 // indirect
|
||||
golang.org/x/tools v0.28.0 // indirect
|
||||
google.golang.org/api v0.203.0 // indirect
|
||||
google.golang.org/genproto v0.0.0-20241015192408-796eee8c2d53 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20241015192408-796eee8c2d53 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 // indirect
|
||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
|
||||
gopkg.in/warnings.v0 v0.1.2 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
)
|
||||
|
||||
replace github.com/hashicorp/go-version => github.com/6543/go-version v1.3.1
|
||||
|
|
|
@ -153,28 +153,34 @@ func UpdateRunJob(ctx context.Context, job *ActionRunJob, cond builder.Cond, col
|
|||
}
|
||||
|
||||
func AggregateJobStatus(jobs []*ActionRunJob) Status {
|
||||
allDone := true
|
||||
allWaiting := true
|
||||
hasFailure := false
|
||||
allSuccessOrSkipped := len(jobs) != 0
|
||||
allSkipped := len(jobs) != 0
|
||||
var hasFailure, hasCancelled, hasWaiting, hasRunning, hasBlocked bool
|
||||
for _, job := range jobs {
|
||||
if !job.Status.IsDone() {
|
||||
allDone = false
|
||||
}
|
||||
if job.Status != StatusWaiting && !job.Status.IsDone() {
|
||||
allWaiting = false
|
||||
}
|
||||
if job.Status == StatusFailure || job.Status == StatusCancelled {
|
||||
hasFailure = true
|
||||
}
|
||||
allSuccessOrSkipped = allSuccessOrSkipped && (job.Status == StatusSuccess || job.Status == StatusSkipped)
|
||||
allSkipped = allSkipped && job.Status == StatusSkipped
|
||||
hasFailure = hasFailure || job.Status == StatusFailure
|
||||
hasCancelled = hasCancelled || job.Status == StatusCancelled
|
||||
hasWaiting = hasWaiting || job.Status == StatusWaiting
|
||||
hasRunning = hasRunning || job.Status == StatusRunning
|
||||
hasBlocked = hasBlocked || job.Status == StatusBlocked
|
||||
}
|
||||
if allDone {
|
||||
if hasFailure {
|
||||
return StatusFailure
|
||||
}
|
||||
switch {
|
||||
case allSkipped:
|
||||
return StatusSkipped
|
||||
case allSuccessOrSkipped:
|
||||
return StatusSuccess
|
||||
}
|
||||
if allWaiting {
|
||||
case hasCancelled:
|
||||
return StatusCancelled
|
||||
case hasFailure:
|
||||
return StatusFailure
|
||||
case hasRunning:
|
||||
return StatusRunning
|
||||
case hasWaiting:
|
||||
return StatusWaiting
|
||||
case hasBlocked:
|
||||
return StatusBlocked
|
||||
default:
|
||||
return StatusUnknown // it shouldn't happen
|
||||
}
|
||||
return StatusRunning
|
||||
}
|
||||
|
|
85
models/actions/run_job_status_test.go
Normal file
85
models/actions/run_job_status_test.go
Normal file
|
@ -0,0 +1,85 @@
|
|||
// Copyright 2024 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package actions
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestAggregateJobStatus(t *testing.T) {
|
||||
testStatuses := func(expected Status, statuses []Status) {
|
||||
t.Helper()
|
||||
var jobs []*ActionRunJob
|
||||
for _, v := range statuses {
|
||||
jobs = append(jobs, &ActionRunJob{Status: v})
|
||||
}
|
||||
actual := AggregateJobStatus(jobs)
|
||||
if !assert.Equal(t, expected, actual) {
|
||||
var statusStrings []string
|
||||
for _, s := range statuses {
|
||||
statusStrings = append(statusStrings, s.String())
|
||||
}
|
||||
t.Errorf("AggregateJobStatus(%v) = %v, want %v", statusStrings, statusNames[actual], statusNames[expected])
|
||||
}
|
||||
}
|
||||
|
||||
cases := []struct {
|
||||
statuses []Status
|
||||
expected Status
|
||||
}{
|
||||
// unknown cases, maybe it shouldn't happen in real world
|
||||
{[]Status{}, StatusUnknown},
|
||||
{[]Status{StatusUnknown, StatusSuccess}, StatusUnknown},
|
||||
{[]Status{StatusUnknown, StatusSkipped}, StatusUnknown},
|
||||
{[]Status{StatusUnknown, StatusFailure}, StatusFailure},
|
||||
{[]Status{StatusUnknown, StatusCancelled}, StatusCancelled},
|
||||
{[]Status{StatusUnknown, StatusWaiting}, StatusWaiting},
|
||||
{[]Status{StatusUnknown, StatusRunning}, StatusRunning},
|
||||
{[]Status{StatusUnknown, StatusBlocked}, StatusBlocked},
|
||||
|
||||
// success with other status
|
||||
{[]Status{StatusSuccess}, StatusSuccess},
|
||||
{[]Status{StatusSuccess, StatusSkipped}, StatusSuccess}, // skipped doesn't affect success
|
||||
{[]Status{StatusSuccess, StatusFailure}, StatusFailure},
|
||||
{[]Status{StatusSuccess, StatusCancelled}, StatusCancelled},
|
||||
{[]Status{StatusSuccess, StatusWaiting}, StatusWaiting},
|
||||
{[]Status{StatusSuccess, StatusRunning}, StatusRunning},
|
||||
{[]Status{StatusSuccess, StatusBlocked}, StatusBlocked},
|
||||
|
||||
// any cancelled, then cancelled
|
||||
{[]Status{StatusCancelled}, StatusCancelled},
|
||||
{[]Status{StatusCancelled, StatusSuccess}, StatusCancelled},
|
||||
{[]Status{StatusCancelled, StatusSkipped}, StatusCancelled},
|
||||
{[]Status{StatusCancelled, StatusFailure}, StatusCancelled},
|
||||
{[]Status{StatusCancelled, StatusWaiting}, StatusCancelled},
|
||||
{[]Status{StatusCancelled, StatusRunning}, StatusCancelled},
|
||||
{[]Status{StatusCancelled, StatusBlocked}, StatusCancelled},
|
||||
|
||||
// failure with other status, fail fast
|
||||
// Should "running" win? Maybe no: old code does make "running" win, but GitHub does fail fast.
|
||||
{[]Status{StatusFailure}, StatusFailure},
|
||||
{[]Status{StatusFailure, StatusSuccess}, StatusFailure},
|
||||
{[]Status{StatusFailure, StatusSkipped}, StatusFailure},
|
||||
{[]Status{StatusFailure, StatusCancelled}, StatusCancelled},
|
||||
{[]Status{StatusFailure, StatusWaiting}, StatusFailure},
|
||||
{[]Status{StatusFailure, StatusRunning}, StatusFailure},
|
||||
{[]Status{StatusFailure, StatusBlocked}, StatusFailure},
|
||||
|
||||
// skipped with other status
|
||||
// TODO: need to clarify whether a PR with "skipped" job status is considered as "mergeable" or not.
|
||||
{[]Status{StatusSkipped}, StatusSkipped},
|
||||
{[]Status{StatusSkipped, StatusSuccess}, StatusSuccess},
|
||||
{[]Status{StatusSkipped, StatusFailure}, StatusFailure},
|
||||
{[]Status{StatusSkipped, StatusCancelled}, StatusCancelled},
|
||||
{[]Status{StatusSkipped, StatusWaiting}, StatusWaiting},
|
||||
{[]Status{StatusSkipped, StatusRunning}, StatusRunning},
|
||||
{[]Status{StatusSkipped, StatusBlocked}, StatusBlocked},
|
||||
}
|
||||
|
||||
for _, c := range cases {
|
||||
testStatuses(c.expected, c.statuses)
|
||||
}
|
||||
}
|
|
@ -432,6 +432,25 @@
|
|||
updated: 1683636626
|
||||
need_approval: 0
|
||||
approved_by: 0
|
||||
-
|
||||
id: 794
|
||||
title: "job output"
|
||||
repo_id: 4
|
||||
owner_id: 1
|
||||
workflow_id: "test.yaml"
|
||||
index: 190
|
||||
trigger_user_id: 1
|
||||
ref: "refs/heads/test"
|
||||
commit_sha: "c2d72f548424103f01ee1dc02889c1e2bff816b0"
|
||||
event: "push"
|
||||
is_fork_pull_request: 0
|
||||
status: 1
|
||||
started: 1683636528
|
||||
stopped: 1683636626
|
||||
created: 1683636108
|
||||
updated: 1683636626
|
||||
need_approval: 0
|
||||
approved_by: 0
|
||||
-
|
||||
id: 891
|
||||
title: "update actions"
|
||||
|
|
|
@ -45,3 +45,15 @@
|
|||
is_deleted: false
|
||||
deleted_by_id: 0
|
||||
deleted_unix: 0
|
||||
|
||||
-
|
||||
id: 15
|
||||
repo_id: 4
|
||||
name: 'master'
|
||||
commit_id: 'c7cd3cd144e6d23c9d6f3d07e52b2c1a956e0338'
|
||||
commit_message: 'add Readme'
|
||||
commit_time: 1588147171
|
||||
pusher_id: 13
|
||||
is_deleted: false
|
||||
deleted_by_id: 0
|
||||
deleted_unix: 0
|
||||
|
|
|
@ -20,9 +20,34 @@ import (
|
|||
func MigrateTwoFactorToKeying(x *xorm.Engine) error {
|
||||
var err error
|
||||
|
||||
// When upgrading from Forgejo v9 to v10, this migration will already be
|
||||
// called from models/migrations/migrations.go migration 304 and must not
|
||||
// be run twice.
|
||||
var version int
|
||||
_, err = x.Table("version").Where("`id` = 1").Select("version").Get(&version)
|
||||
if err != nil {
|
||||
// the version table does not exist when a test environment only applies Forgejo migrations
|
||||
} else if version > 304 {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch x.Dialect().URI().DBType {
|
||||
case schemas.MYSQL:
|
||||
_, err = x.Exec("ALTER TABLE `two_factor` MODIFY `secret` BLOB")
|
||||
case schemas.SQLITE:
|
||||
_, err = x.Exec("ALTER TABLE `two_factor` RENAME COLUMN `secret` TO `secret_backup`")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = x.Exec("ALTER TABLE `two_factor` ADD COLUMN `secret` BLOB")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = x.Exec("UPDATE `two_factor` SET `secret` = `secret_backup`")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = x.Exec("ALTER TABLE `two_factor` DROP COLUMN `secret_backup`")
|
||||
case schemas.POSTGRES:
|
||||
_, err = x.Exec("ALTER TABLE `two_factor` ALTER COLUMN `secret` SET DATA TYPE bytea USING secret::text::bytea")
|
||||
}
|
||||
|
|
|
@ -362,6 +362,10 @@ func prepareMigrationTasks() []*migration {
|
|||
newMigration(300, "Add force-push branch protection support", v1_23.AddForcePushBranchProtection),
|
||||
newMigration(301, "Add skip_secondary_authorization option to oauth2 application table", v1_23.AddSkipSecondaryAuthColumnToOAuth2ApplicationTable),
|
||||
newMigration(302, "Add index to action_task stopped log_expired", v1_23.AddIndexToActionTaskStoppedLogExpired),
|
||||
|
||||
// Migration to Forgejo v10
|
||||
newMigration(303, "Gitea last drop", v1_23.GiteaLastDrop),
|
||||
newMigration(304, "Migrate `secret` column to store keying material", forgejo_migrations.MigrateTwoFactorToKeying),
|
||||
}
|
||||
return preparedMigrations
|
||||
}
|
||||
|
|
33
models/migrations/v1_23/v303.go
Normal file
33
models/migrations/v1_23/v303.go
Normal file
|
@ -0,0 +1,33 @@
|
|||
// Copyright 2024 The Forgejo Authors.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package v1_23 //nolint
|
||||
|
||||
import (
|
||||
"code.gitea.io/gitea/models/migrations/base"
|
||||
|
||||
"xorm.io/xorm"
|
||||
)
|
||||
|
||||
func GiteaLastDrop(x *xorm.Engine) error {
|
||||
sess := x.NewSession()
|
||||
defer sess.Close()
|
||||
|
||||
if err := base.DropTableColumns(sess, "badge", "slug"); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := base.DropTableColumns(sess, "oauth2_application", "skip_secondary_authorization"); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := base.DropTableColumns(sess, "repository", "default_wiki_branch"); err != nil {
|
||||
return err
|
||||
}
|
||||
// the migration v297.go that adds everyone_access_mode exists in Gitea >= v1.22 and the column must be dropped
|
||||
// but it does not exist in Forgejo and a failure to drop the column can be ignored
|
||||
base.DropTableColumns(sess, "repo_unit", "everyone_access_mode")
|
||||
if err := base.DropTableColumns(sess, "protected_branch", "can_force_push", "enable_force_push_allowlist", "force_push_allowlist_user_i_ds", "force_push_allowlist_team_i_ds", "force_push_allowlist_deploy_keys"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return sess.Commit()
|
||||
}
|
|
@ -29,6 +29,15 @@ const (
|
|||
MergeStyleRebaseUpdate MergeStyle = "rebase-update-only"
|
||||
)
|
||||
|
||||
type UpdateStyle string
|
||||
|
||||
const (
|
||||
// UpdateStyleMerge create merge commit to update
|
||||
UpdateStyleMerge UpdateStyle = "merge"
|
||||
// UpdateStyleRebase rebase to update
|
||||
UpdateStyleRebase UpdateStyle = "rebase"
|
||||
)
|
||||
|
||||
// UpdateDefaultBranch updates the default branch
|
||||
func UpdateDefaultBranch(ctx context.Context, repo *Repository) error {
|
||||
_, err := db.GetEngine(ctx).ID(repo.ID).Cols("default_branch").Update(repo)
|
||||
|
|
|
@ -159,6 +159,7 @@ type PullRequestsConfig struct {
|
|||
AllowRebaseUpdate bool
|
||||
DefaultDeleteBranchAfterMerge bool
|
||||
DefaultMergeStyle MergeStyle
|
||||
DefaultUpdateStyle UpdateStyle
|
||||
DefaultAllowMaintainerEdit bool
|
||||
}
|
||||
|
||||
|
@ -197,6 +198,25 @@ func (cfg *PullRequestsConfig) GetDefaultMergeStyle() MergeStyle {
|
|||
return MergeStyleMerge
|
||||
}
|
||||
|
||||
// IsUpdateStyleAllowed returns if update style is allowed
|
||||
func (cfg *PullRequestsConfig) IsUpdateStyleAllowed(updateStyle UpdateStyle) bool {
|
||||
return updateStyle == UpdateStyleMerge ||
|
||||
updateStyle == UpdateStyleRebase && cfg.AllowRebaseUpdate
|
||||
}
|
||||
|
||||
// GetDefaultUpdateStyle returns the default update style for this pull request
|
||||
func (cfg *PullRequestsConfig) GetDefaultUpdateStyle() UpdateStyle {
|
||||
if len(cfg.DefaultUpdateStyle) != 0 {
|
||||
return cfg.DefaultUpdateStyle
|
||||
}
|
||||
|
||||
if setting.Repository.PullRequest.DefaultUpdateStyle != "" {
|
||||
return UpdateStyle(setting.Repository.PullRequest.DefaultUpdateStyle)
|
||||
}
|
||||
|
||||
return UpdateStyleMerge
|
||||
}
|
||||
|
||||
type ActionsConfig struct {
|
||||
DisabledWorkflows []string
|
||||
}
|
||||
|
|
|
@ -7,6 +7,8 @@ import (
|
|||
"testing"
|
||||
|
||||
"code.gitea.io/gitea/models/perm"
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
"code.gitea.io/gitea/modules/test"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
@ -37,3 +39,50 @@ func TestRepoUnitAccessMode(t *testing.T) {
|
|||
assert.Equal(t, perm.AccessModeWrite, UnitAccessModeWrite.ToAccessMode(perm.AccessModeAdmin))
|
||||
assert.Equal(t, perm.AccessModeRead, UnitAccessModeUnset.ToAccessMode(perm.AccessModeRead))
|
||||
}
|
||||
|
||||
func TestRepoPRIsUpdateStyleAllowed(t *testing.T) {
|
||||
var cfg PullRequestsConfig
|
||||
cfg = PullRequestsConfig{
|
||||
AllowRebaseUpdate: true,
|
||||
}
|
||||
assert.True(t, cfg.IsUpdateStyleAllowed(UpdateStyleMerge))
|
||||
assert.True(t, cfg.IsUpdateStyleAllowed(UpdateStyleRebase))
|
||||
|
||||
cfg = PullRequestsConfig{
|
||||
AllowRebaseUpdate: false,
|
||||
}
|
||||
assert.True(t, cfg.IsUpdateStyleAllowed(UpdateStyleMerge))
|
||||
assert.False(t, cfg.IsUpdateStyleAllowed(UpdateStyleRebase))
|
||||
}
|
||||
|
||||
func TestRepoPRGetDefaultUpdateStyle(t *testing.T) {
|
||||
defer test.MockVariableValue(&setting.Repository.PullRequest.DefaultUpdateStyle, "merge")()
|
||||
|
||||
var cfg PullRequestsConfig
|
||||
cfg = PullRequestsConfig{
|
||||
DefaultUpdateStyle: "",
|
||||
}
|
||||
assert.Equal(t, UpdateStyleMerge, cfg.GetDefaultUpdateStyle())
|
||||
cfg = PullRequestsConfig{
|
||||
DefaultUpdateStyle: "rebase",
|
||||
}
|
||||
assert.Equal(t, UpdateStyleRebase, cfg.GetDefaultUpdateStyle())
|
||||
cfg = PullRequestsConfig{
|
||||
DefaultUpdateStyle: "merge",
|
||||
}
|
||||
assert.Equal(t, UpdateStyleMerge, cfg.GetDefaultUpdateStyle())
|
||||
|
||||
setting.Repository.PullRequest.DefaultUpdateStyle = "rebase"
|
||||
cfg = PullRequestsConfig{
|
||||
DefaultUpdateStyle: "",
|
||||
}
|
||||
assert.Equal(t, UpdateStyleRebase, cfg.GetDefaultUpdateStyle())
|
||||
cfg = PullRequestsConfig{
|
||||
DefaultUpdateStyle: "rebase",
|
||||
}
|
||||
assert.Equal(t, UpdateStyleRebase, cfg.GetDefaultUpdateStyle())
|
||||
cfg = PullRequestsConfig{
|
||||
DefaultUpdateStyle: "merge",
|
||||
}
|
||||
assert.Equal(t, UpdateStyleMerge, cfg.GetDefaultUpdateStyle())
|
||||
}
|
||||
|
|
|
@ -18,10 +18,10 @@ import (
|
|||
)
|
||||
|
||||
type Setting struct {
|
||||
ID int64 `xorm:"pk autoincr"`
|
||||
SettingKey string `xorm:"varchar(255) unique"` // key should be lowercase
|
||||
SettingValue string `xorm:"text"`
|
||||
Version int `xorm:"version"`
|
||||
ID int64 `xorm:"pk autoincr"`
|
||||
SettingKey string `xorm:"varchar(255) unique"` // key should be lowercase
|
||||
SettingValue string `xorm:"text"`
|
||||
Version int
|
||||
Created timeutil.TimeStamp `xorm:"created"`
|
||||
Updated timeutil.TimeStamp `xorm:"updated"`
|
||||
}
|
||||
|
|
|
@ -4,47 +4,80 @@
|
|||
package pwn
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/h2non/gock"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
type mockTransport struct{}
|
||||
|
||||
func (mockTransport) RoundTrip(req *http.Request) (*http.Response, error) {
|
||||
if req.URL.Host != "api.pwnedpasswords.com" {
|
||||
return nil, errors.New("unexpected host")
|
||||
}
|
||||
|
||||
res := &http.Response{
|
||||
ProtoMajor: 1,
|
||||
ProtoMinor: 1,
|
||||
Proto: "HTTP/1.1",
|
||||
Request: req,
|
||||
Header: make(http.Header),
|
||||
StatusCode: 200,
|
||||
}
|
||||
|
||||
switch req.URL.Path {
|
||||
case "/range/5c1d8":
|
||||
res.Body = io.NopCloser(strings.NewReader("EAF2F254732680E8AC339B84F3266ECCBB5:1\r\nFC446EB88938834178CB9322C1EE273C2A7:2"))
|
||||
return res, nil
|
||||
case "/range/ba189":
|
||||
res.Body = io.NopCloser(strings.NewReader("FD4CB34F0378BCB15D23F6FFD28F0775C9E:3\r\nFDF342FCD8C3611DAE4D76E8A992A3E4169:4"))
|
||||
return res, nil
|
||||
case "/range/a1733":
|
||||
res.Body = io.NopCloser(strings.NewReader("C4CE0F1F0062B27B9E2F41AF0C08218017C:1\r\nFC446EB88938834178CB9322C1EE273C2A7:2\r\nFE81480327C992FE62065A827429DD1318B:0"))
|
||||
return res, nil
|
||||
case "/range/5617b":
|
||||
res.Body = io.NopCloser(strings.NewReader("FD4CB34F0378BCB15D23F6FFD28F0775C9E:3\r\nFDF342FCD8C3611DAE4D76E8A992A3E4169:4\r\nFE81480327C992FE62065A827429DD1318B:0"))
|
||||
return res, nil
|
||||
case "/range/79082":
|
||||
res.Body = io.NopCloser(strings.NewReader("FDF342FCD8C3611DAE4D76E8A992A3E4169:4\r\nFE81480327C992FE62065A827429DD1318B:0\r\nAFEF386F56EB0B4BE314E07696E5E6E6536:0"))
|
||||
return res, nil
|
||||
}
|
||||
|
||||
return nil, errors.New("unexpected path")
|
||||
}
|
||||
|
||||
var client = New(WithHTTP(&http.Client{
|
||||
Timeout: time.Second * 2,
|
||||
Timeout: time.Second * 2,
|
||||
Transport: mockTransport{},
|
||||
}))
|
||||
|
||||
func TestPassword(t *testing.T) {
|
||||
defer gock.Off()
|
||||
|
||||
count, err := client.CheckPassword("", false)
|
||||
require.ErrorIs(t, err, ErrEmptyPassword, "blank input should return ErrEmptyPassword")
|
||||
assert.Equal(t, -1, count)
|
||||
|
||||
gock.New("https://api.pwnedpasswords.com").Get("/range/5c1d8").Times(1).Reply(200).BodyString("EAF2F254732680E8AC339B84F3266ECCBB5:1\r\nFC446EB88938834178CB9322C1EE273C2A7:2")
|
||||
count, err = client.CheckPassword("pwned", false)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 1, count)
|
||||
|
||||
gock.New("https://api.pwnedpasswords.com").Get("/range/ba189").Times(1).Reply(200).BodyString("FD4CB34F0378BCB15D23F6FFD28F0775C9E:3\r\nFDF342FCD8C3611DAE4D76E8A992A3E4169:4")
|
||||
count, err = client.CheckPassword("notpwned", false)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 0, count)
|
||||
|
||||
gock.New("https://api.pwnedpasswords.com").Get("/range/a1733").Times(1).Reply(200).BodyString("C4CE0F1F0062B27B9E2F41AF0C08218017C:1\r\nFC446EB88938834178CB9322C1EE273C2A7:2\r\nFE81480327C992FE62065A827429DD1318B:0")
|
||||
count, err = client.CheckPassword("paddedpwned", true)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 1, count)
|
||||
|
||||
gock.New("https://api.pwnedpasswords.com").Get("/range/5617b").Times(1).Reply(200).BodyString("FD4CB34F0378BCB15D23F6FFD28F0775C9E:3\r\nFDF342FCD8C3611DAE4D76E8A992A3E4169:4\r\nFE81480327C992FE62065A827429DD1318B:0")
|
||||
count, err = client.CheckPassword("paddednotpwned", true)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 0, count)
|
||||
|
||||
gock.New("https://api.pwnedpasswords.com").Get("/range/79082").Times(1).Reply(200).BodyString("FDF342FCD8C3611DAE4D76E8A992A3E4169:4\r\nFE81480327C992FE62065A827429DD1318B:0\r\nAFEF386F56EB0B4BE314E07696E5E6E6536:0")
|
||||
count, err = client.CheckPassword("paddednotpwnedzero", true)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 0, count)
|
||||
|
|
|
@ -36,13 +36,15 @@ const (
|
|||
RegExpGrepMode
|
||||
)
|
||||
|
||||
var GrepSearchOptions = [3]string{"exact", "union", "regexp"}
|
||||
|
||||
type GrepOptions struct {
|
||||
RefName string
|
||||
MaxResultLimit int
|
||||
MatchesPerFile int // >= git 2.38
|
||||
ContextLineNumber int
|
||||
Mode grepMode
|
||||
PathSpec []setting.Glob
|
||||
Filename string
|
||||
}
|
||||
|
||||
func (opts *GrepOptions) ensureDefaults() {
|
||||
|
@ -112,12 +114,38 @@ func GrepSearch(ctx context.Context, repo *Repository, search string, opts GrepO
|
|||
}
|
||||
|
||||
// pathspec
|
||||
files := make([]string, 0,
|
||||
len(setting.Indexer.IncludePatterns)+
|
||||
len(setting.Indexer.ExcludePatterns)+
|
||||
len(opts.PathSpec))
|
||||
for _, expr := range append(setting.Indexer.IncludePatterns, opts.PathSpec...) {
|
||||
files = append(files, ":"+expr.Pattern())
|
||||
includeLen := len(setting.Indexer.IncludePatterns)
|
||||
if len(opts.Filename) > 0 {
|
||||
includeLen = 1
|
||||
}
|
||||
files := make([]string, 0, len(setting.Indexer.ExcludePatterns)+includeLen)
|
||||
if len(opts.Filename) > 0 && len(setting.Indexer.IncludePatterns) > 0 {
|
||||
// if the both a global include pattern and the per search path is defined
|
||||
// we only include results where the path matches the globally set pattern
|
||||
// (eg, global pattern = "src/**" and path = "node_modules/")
|
||||
|
||||
// FIXME: this is a bit too restrictive, and fails to consider cases where the
|
||||
// gloabally set include pattern refers to a file than a directory
|
||||
// (eg, global pattern = "**.go" and path = "modules/git")
|
||||
exprMatched := false
|
||||
for _, expr := range setting.Indexer.IncludePatterns {
|
||||
if expr.Match(opts.Filename) {
|
||||
files = append(files, ":(literal)"+opts.Filename)
|
||||
exprMatched = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !exprMatched {
|
||||
log.Warn("git-grep: filepath %s does not match any include pattern", opts.Filename)
|
||||
}
|
||||
} else if len(opts.Filename) > 0 {
|
||||
// if the path is only set we just include results that matches it
|
||||
files = append(files, ":(literal)"+opts.Filename)
|
||||
} else {
|
||||
// otherwise if global include patterns are set include results that strictly match them
|
||||
for _, expr := range setting.Indexer.IncludePatterns {
|
||||
files = append(files, ":"+expr.Pattern())
|
||||
}
|
||||
}
|
||||
for _, expr := range setting.Indexer.ExcludePatterns {
|
||||
files = append(files, ":^"+expr.Pattern())
|
||||
|
|
|
@ -89,6 +89,20 @@ func TestGrepSearch(t *testing.T) {
|
|||
},
|
||||
}, res)
|
||||
|
||||
res, err = GrepSearch(context.Background(), repo, "world", GrepOptions{
|
||||
MatchesPerFile: 1,
|
||||
Filename: "java-hello/",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, []*GrepResult{
|
||||
{
|
||||
Filename: "java-hello/main.java",
|
||||
LineNumbers: []int{1},
|
||||
LineCodes: []string{"public class HelloWorld"},
|
||||
HighlightedRanges: [][3]int{{0, 18, 23}},
|
||||
},
|
||||
}, res)
|
||||
|
||||
res, err = GrepSearch(context.Background(), repo, "no-such-content", GrepOptions{})
|
||||
require.NoError(t, err)
|
||||
assert.Empty(t, res)
|
||||
|
|
|
@ -230,7 +230,7 @@ func (repo *Repository) CommitsByFileAndRange(opts CommitsByFileAndRangeOptions)
|
|||
go func() {
|
||||
stderr := strings.Builder{}
|
||||
gitCmd := NewCommand(repo.Ctx, "rev-list").
|
||||
AddOptionFormat("--max-count=%d", setting.Git.CommitsRangeSize*opts.Page).
|
||||
AddOptionFormat("--max-count=%d", setting.Git.CommitsRangeSize).
|
||||
AddOptionFormat("--skip=%d", skip)
|
||||
gitCmd.AddDynamicArguments(opts.Revision)
|
||||
|
||||
|
|
|
@ -7,6 +7,9 @@ import (
|
|||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
"code.gitea.io/gitea/modules/test"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
@ -138,3 +141,61 @@ func TestGetTagCommit(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
assert.EqualValues(t, lTagCommitID, lTag.ID.String())
|
||||
}
|
||||
|
||||
func TestCommitsByRange(t *testing.T) {
|
||||
bareRepo1Path := filepath.Join(testReposDir, "repo1_bare")
|
||||
bareRepo1, err := openRepositoryWithDefaultContext(bareRepo1Path)
|
||||
require.NoError(t, err)
|
||||
defer bareRepo1.Close()
|
||||
|
||||
baseCommit, err := bareRepo1.GetBranchCommit("master")
|
||||
require.NoError(t, err)
|
||||
|
||||
testCases := []struct {
|
||||
Page int
|
||||
ExpectedCommitCount int
|
||||
}{
|
||||
{1, 3},
|
||||
{2, 3},
|
||||
{3, 1},
|
||||
{4, 0},
|
||||
}
|
||||
for _, testCase := range testCases {
|
||||
commits, err := baseCommit.CommitsByRange(testCase.Page, 3, "")
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, commits, testCase.ExpectedCommitCount, "page: %d", testCase.Page)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCommitsByFileAndRange(t *testing.T) {
|
||||
bareRepo1Path := filepath.Join(testReposDir, "repo1_bare")
|
||||
bareRepo1, err := openRepositoryWithDefaultContext(bareRepo1Path)
|
||||
require.NoError(t, err)
|
||||
defer bareRepo1.Close()
|
||||
defer test.MockVariableValue(&setting.Git.CommitsRangeSize, 2)()
|
||||
|
||||
testCases := []struct {
|
||||
File string
|
||||
Page int
|
||||
ExpectedCommitCount int
|
||||
}{
|
||||
{"file1.txt", 1, 1},
|
||||
{"file2.txt", 1, 1},
|
||||
{"file*.txt", 1, 2},
|
||||
{"foo", 1, 2},
|
||||
{"foo", 2, 1},
|
||||
{"foo", 3, 0},
|
||||
{"f*", 1, 2},
|
||||
{"f*", 2, 2},
|
||||
{"f*", 3, 1},
|
||||
}
|
||||
for _, testCase := range testCases {
|
||||
commits, err := bareRepo1.CommitsByFileAndRange(CommitsByFileAndRangeOptions{
|
||||
Revision: "master",
|
||||
File: testCase.File,
|
||||
Page: testCase.Page,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, commits, testCase.ExpectedCommitCount, "file: '%s', page: %d", testCase.File, testCase.Page)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ import (
|
|||
"code.gitea.io/gitea/modules/charset"
|
||||
"code.gitea.io/gitea/modules/git"
|
||||
"code.gitea.io/gitea/modules/gitrepo"
|
||||
tokenizer_hierarchy "code.gitea.io/gitea/modules/indexer/code/bleve/tokenizer/hierarchy"
|
||||
"code.gitea.io/gitea/modules/indexer/code/internal"
|
||||
indexer_internal "code.gitea.io/gitea/modules/indexer/internal"
|
||||
inner_bleve "code.gitea.io/gitea/modules/indexer/internal/bleve"
|
||||
|
@ -56,6 +57,7 @@ func addUnicodeNormalizeTokenFilter(m *mapping.IndexMappingImpl) error {
|
|||
type RepoIndexerData struct {
|
||||
RepoID int64
|
||||
CommitID string
|
||||
Filename string
|
||||
Content string
|
||||
Language string
|
||||
UpdatedAt time.Time
|
||||
|
@ -69,7 +71,8 @@ func (d *RepoIndexerData) Type() string {
|
|||
const (
|
||||
repoIndexerAnalyzer = "repoIndexerAnalyzer"
|
||||
repoIndexerDocType = "repoIndexerDocType"
|
||||
repoIndexerLatestVersion = 6
|
||||
pathHierarchyAnalyzer = "pathHierarchyAnalyzer"
|
||||
repoIndexerLatestVersion = 7
|
||||
)
|
||||
|
||||
// generateBleveIndexMapping generates a bleve index mapping for the repo indexer
|
||||
|
@ -89,6 +92,11 @@ func generateBleveIndexMapping() (mapping.IndexMapping, error) {
|
|||
docMapping.AddFieldMappingsAt("Language", termFieldMapping)
|
||||
docMapping.AddFieldMappingsAt("CommitID", termFieldMapping)
|
||||
|
||||
pathFieldMapping := bleve.NewTextFieldMapping()
|
||||
pathFieldMapping.IncludeInAll = false
|
||||
pathFieldMapping.Analyzer = pathHierarchyAnalyzer
|
||||
docMapping.AddFieldMappingsAt("Filename", pathFieldMapping)
|
||||
|
||||
timeFieldMapping := bleve.NewDateTimeFieldMapping()
|
||||
timeFieldMapping.IncludeInAll = false
|
||||
docMapping.AddFieldMappingsAt("UpdatedAt", timeFieldMapping)
|
||||
|
@ -103,6 +111,13 @@ func generateBleveIndexMapping() (mapping.IndexMapping, error) {
|
|||
"token_filters": []string{unicodeNormalizeName, camelcase.Name, lowercase.Name},
|
||||
}); err != nil {
|
||||
return nil, err
|
||||
} else if err := mapping.AddCustomAnalyzer(pathHierarchyAnalyzer, map[string]any{
|
||||
"type": analyzer_custom.Name,
|
||||
"char_filters": []string{},
|
||||
"tokenizer": tokenizer_hierarchy.Name,
|
||||
"token_filters": []string{unicodeNormalizeName},
|
||||
}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
mapping.DefaultAnalyzer = repoIndexerAnalyzer
|
||||
mapping.AddDocumentMapping(repoIndexerDocType, docMapping)
|
||||
|
@ -178,6 +193,7 @@ func (b *Indexer) addUpdate(ctx context.Context, batchWriter git.WriteCloserErro
|
|||
return batch.Index(id, &RepoIndexerData{
|
||||
RepoID: repo.ID,
|
||||
CommitID: commitSha,
|
||||
Filename: update.Filename,
|
||||
Content: string(charset.ToUTF8DropErrors(fileContents, charset.ConvertOpts{})),
|
||||
Language: analyze.GetCodeLanguage(update.Filename, fileContents),
|
||||
UpdatedAt: time.Now().UTC(),
|
||||
|
@ -266,22 +282,30 @@ func (b *Indexer) Search(ctx context.Context, opts *internal.SearchOptions) (int
|
|||
indexerQuery = keywordQuery
|
||||
}
|
||||
|
||||
opts.Filename = strings.Trim(opts.Filename, "/")
|
||||
if len(opts.Filename) > 0 {
|
||||
// we use a keyword analyzer for the query than path hierarchy analyzer
|
||||
// to match only the exact path
|
||||
// eg, a query for modules/indexer/code
|
||||
// should not provide results for modules/ nor modules/indexer
|
||||
indexerQuery = bleve.NewConjunctionQuery(
|
||||
indexerQuery,
|
||||
inner_bleve.MatchQuery(opts.Filename, "Filename", analyzer_keyword.Name, 0),
|
||||
)
|
||||
}
|
||||
|
||||
// Save for reuse without language filter
|
||||
facetQuery := indexerQuery
|
||||
if len(opts.Language) > 0 {
|
||||
languageQuery := bleve.NewMatchQuery(opts.Language)
|
||||
languageQuery.FieldVal = "Language"
|
||||
languageQuery.Analyzer = analyzer_keyword.Name
|
||||
|
||||
indexerQuery = bleve.NewConjunctionQuery(
|
||||
indexerQuery,
|
||||
languageQuery,
|
||||
inner_bleve.MatchQuery(opts.Language, "Language", analyzer_keyword.Name, 0),
|
||||
)
|
||||
}
|
||||
|
||||
from, pageSize := opts.GetSkipTake()
|
||||
searchRequest := bleve.NewSearchRequestOptions(indexerQuery, pageSize, from, false)
|
||||
searchRequest.Fields = []string{"Content", "RepoID", "Language", "CommitID", "UpdatedAt"}
|
||||
searchRequest.Fields = []string{"Content", "RepoID", "Filename", "Language", "CommitID", "UpdatedAt"}
|
||||
searchRequest.IncludeLocations = true
|
||||
|
||||
if len(opts.Language) == 0 {
|
||||
|
@ -320,7 +344,7 @@ func (b *Indexer) Search(ctx context.Context, opts *internal.SearchOptions) (int
|
|||
RepoID: int64(hit.Fields["RepoID"].(float64)),
|
||||
StartIndex: startIndex,
|
||||
EndIndex: endIndex,
|
||||
Filename: internal.FilenameOfIndexerID(hit.ID),
|
||||
Filename: hit.Fields["Filename"].(string),
|
||||
Content: hit.Fields["Content"].(string),
|
||||
CommitID: hit.Fields["CommitID"].(string),
|
||||
UpdatedUnix: updatedUnix,
|
||||
|
@ -333,7 +357,7 @@ func (b *Indexer) Search(ctx context.Context, opts *internal.SearchOptions) (int
|
|||
if len(opts.Language) > 0 {
|
||||
// Use separate query to go get all language counts
|
||||
facetRequest := bleve.NewSearchRequestOptions(facetQuery, 1, 0, false)
|
||||
facetRequest.Fields = []string{"Content", "RepoID", "Language", "CommitID", "UpdatedAt"}
|
||||
facetRequest.Fields = []string{"Content", "RepoID", "Filename", "Language", "CommitID", "UpdatedAt"}
|
||||
facetRequest.IncludeLocations = true
|
||||
facetRequest.AddFacet("languages", bleve.NewFacetRequest("Language", 10))
|
||||
|
||||
|
|
69
modules/indexer/code/bleve/tokenizer/hierarchy/hierarchy.go
Normal file
69
modules/indexer/code/bleve/tokenizer/hierarchy/hierarchy.go
Normal file
|
@ -0,0 +1,69 @@
|
|||
// Copyright 2024 The Forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package hierarchy
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
|
||||
"github.com/blevesearch/bleve/v2/analysis"
|
||||
"github.com/blevesearch/bleve/v2/registry"
|
||||
)
|
||||
|
||||
const Name = "path_hierarchy"
|
||||
|
||||
type PathHierarchyTokenizer struct{}
|
||||
|
||||
// Similar to elastic's path_hierarchy tokenizer
|
||||
// This tokenizes a given path into all the possible hierarchies
|
||||
// For example,
|
||||
// modules/indexer/code/search.go =>
|
||||
//
|
||||
// modules/
|
||||
// modules/indexer
|
||||
// modules/indexer/code
|
||||
// modules/indexer/code/search.go
|
||||
func (t *PathHierarchyTokenizer) Tokenize(input []byte) analysis.TokenStream {
|
||||
// trim any extra slashes
|
||||
input = bytes.Trim(input, "/")
|
||||
|
||||
// zero allocations until the nested directories exceed a depth of 8 (which is unlikely)
|
||||
rv := make(analysis.TokenStream, 0, 8)
|
||||
count, off := 1, 0
|
||||
|
||||
// iterate till all directory seperators
|
||||
for i := bytes.IndexRune(input[off:], '/'); i != -1; i = bytes.IndexRune(input[off:], '/') {
|
||||
// the index is relative to input[offest...]
|
||||
// add this index to the accumlated offset to get the index of the current seperator in input[0...]
|
||||
off += i
|
||||
rv = append(rv, &analysis.Token{
|
||||
Term: input[:off], // take the slice, input[0...index of seperator]
|
||||
Start: 0,
|
||||
End: off,
|
||||
Position: count,
|
||||
Type: analysis.AlphaNumeric,
|
||||
})
|
||||
// increment the offset after considering the seperator
|
||||
off++
|
||||
count++
|
||||
}
|
||||
|
||||
// the entire file path should always be the last token
|
||||
rv = append(rv, &analysis.Token{
|
||||
Term: input,
|
||||
Start: 0,
|
||||
End: len(input),
|
||||
Position: count,
|
||||
Type: analysis.AlphaNumeric,
|
||||
})
|
||||
|
||||
return rv
|
||||
}
|
||||
|
||||
func TokenizerConstructor(config map[string]any, cache *registry.Cache) (analysis.Tokenizer, error) {
|
||||
return &PathHierarchyTokenizer{}, nil
|
||||
}
|
||||
|
||||
func init() {
|
||||
registry.RegisterTokenizer(Name, TokenizerConstructor)
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
// Copyright 2024 The Forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package hierarchy
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestIndexerBleveHierarchyTokenizer(t *testing.T) {
|
||||
tokenizer := &PathHierarchyTokenizer{}
|
||||
keywords := []struct {
|
||||
Term string
|
||||
Results []string
|
||||
}{
|
||||
{
|
||||
Term: "modules/indexer/code/search.go",
|
||||
Results: []string{
|
||||
"modules",
|
||||
"modules/indexer",
|
||||
"modules/indexer/code",
|
||||
"modules/indexer/code/search.go",
|
||||
},
|
||||
},
|
||||
{
|
||||
Term: "/tmp/forgejo/",
|
||||
Results: []string{
|
||||
"tmp",
|
||||
"tmp/forgejo",
|
||||
},
|
||||
},
|
||||
{
|
||||
Term: "a/b/c/d/e/f/g/h/i/j",
|
||||
Results: []string{
|
||||
"a",
|
||||
"a/b",
|
||||
"a/b/c",
|
||||
"a/b/c/d",
|
||||
"a/b/c/d/e",
|
||||
"a/b/c/d/e/f",
|
||||
"a/b/c/d/e/f/g",
|
||||
"a/b/c/d/e/f/g/h",
|
||||
"a/b/c/d/e/f/g/h/i",
|
||||
"a/b/c/d/e/f/g/h/i/j",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, kw := range keywords {
|
||||
tokens := tokenizer.Tokenize([]byte(kw.Term))
|
||||
assert.Len(t, tokens, len(kw.Results))
|
||||
for i, token := range tokens {
|
||||
assert.Equal(t, i+1, token.Position)
|
||||
assert.Equal(t, kw.Results[i], string(token.Term))
|
||||
}
|
||||
}
|
||||
}
|
|
@ -30,7 +30,7 @@ import (
|
|||
)
|
||||
|
||||
const (
|
||||
esRepoIndexerLatestVersion = 1
|
||||
esRepoIndexerLatestVersion = 2
|
||||
// multi-match-types, currently only 2 types are used
|
||||
// Reference: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-multi-match-query.html#multi-match-types
|
||||
esMultiMatchTypeBestFields = "best_fields"
|
||||
|
@ -57,6 +57,21 @@ func NewIndexer(url, indexerName string) *Indexer {
|
|||
|
||||
const (
|
||||
defaultMapping = `{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"analyzer": {
|
||||
"custom_path_tree": {
|
||||
"tokenizer": "custom_hierarchy"
|
||||
}
|
||||
},
|
||||
"tokenizer": {
|
||||
"custom_hierarchy": {
|
||||
"type": "path_hierarchy",
|
||||
"delimiter": "/"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"mappings": {
|
||||
"properties": {
|
||||
"repo_id": {
|
||||
|
@ -72,6 +87,15 @@ const (
|
|||
"type": "keyword",
|
||||
"index": true
|
||||
},
|
||||
"filename": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"tree": {
|
||||
"type": "text",
|
||||
"analyzer": "custom_path_tree"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"type": "keyword",
|
||||
"index": true
|
||||
|
@ -138,6 +162,7 @@ func (b *Indexer) addUpdate(ctx context.Context, batchWriter git.WriteCloserErro
|
|||
"repo_id": repo.ID,
|
||||
"content": string(charset.ToUTF8DropErrors(fileContents, charset.ConvertOpts{})),
|
||||
"commit_id": sha,
|
||||
"filename": update.Filename,
|
||||
"language": analyze.GetCodeLanguage(update.Filename, fileContents),
|
||||
"updated_at": timeutil.TimeStampNow(),
|
||||
}),
|
||||
|
@ -267,7 +292,6 @@ func convertResult(searchResult *elastic.SearchResult, kw string, pageSize int)
|
|||
panic(fmt.Sprintf("2===%#v", hit.Highlight))
|
||||
}
|
||||
|
||||
repoID, fileName := internal.ParseIndexerID(hit.Id)
|
||||
res := make(map[string]any)
|
||||
if err := json.Unmarshal(hit.Source, &res); err != nil {
|
||||
return 0, nil, nil, err
|
||||
|
@ -276,8 +300,8 @@ func convertResult(searchResult *elastic.SearchResult, kw string, pageSize int)
|
|||
language := res["language"].(string)
|
||||
|
||||
hits = append(hits, &internal.SearchResult{
|
||||
RepoID: repoID,
|
||||
Filename: fileName,
|
||||
RepoID: int64(res["repo_id"].(float64)),
|
||||
Filename: res["filename"].(string),
|
||||
CommitID: res["commit_id"].(string),
|
||||
Content: res["content"].(string),
|
||||
UpdatedUnix: timeutil.TimeStamp(res["updated_at"].(float64)),
|
||||
|
@ -326,6 +350,9 @@ func (b *Indexer) Search(ctx context.Context, opts *internal.SearchOptions) (int
|
|||
repoQuery := elastic.NewTermsQuery("repo_id", repoStrs...)
|
||||
query = query.Must(repoQuery)
|
||||
}
|
||||
if len(opts.Filename) > 0 {
|
||||
query = query.Filter(elastic.NewTermsQuery("filename.tree", opts.Filename))
|
||||
}
|
||||
|
||||
var (
|
||||
start, pageSize = opts.GetSkipTake()
|
||||
|
|
|
@ -34,10 +34,11 @@ func testIndexer(name string, t *testing.T, indexer internal.Indexer) {
|
|||
err := index(git.DefaultContext, indexer, repoID)
|
||||
require.NoError(t, err)
|
||||
keywords := []struct {
|
||||
RepoIDs []int64
|
||||
Keyword string
|
||||
IDs []int64
|
||||
Langs int
|
||||
RepoIDs []int64
|
||||
Keyword string
|
||||
IDs []int64
|
||||
Langs int
|
||||
Filename string
|
||||
}{
|
||||
{
|
||||
RepoIDs: nil,
|
||||
|
@ -51,6 +52,20 @@ func testIndexer(name string, t *testing.T, indexer internal.Indexer) {
|
|||
IDs: []int64{},
|
||||
Langs: 0,
|
||||
},
|
||||
{
|
||||
RepoIDs: nil,
|
||||
Keyword: "Description",
|
||||
IDs: []int64{},
|
||||
Langs: 0,
|
||||
Filename: "NOT-README.md",
|
||||
},
|
||||
{
|
||||
RepoIDs: nil,
|
||||
Keyword: "Description",
|
||||
IDs: []int64{repoID},
|
||||
Langs: 1,
|
||||
Filename: "README.md",
|
||||
},
|
||||
{
|
||||
RepoIDs: nil,
|
||||
Keyword: "Description for",
|
||||
|
@ -86,6 +101,7 @@ func testIndexer(name string, t *testing.T, indexer internal.Indexer) {
|
|||
Page: 1,
|
||||
PageSize: 10,
|
||||
},
|
||||
Filename: kw.Filename,
|
||||
IsKeywordFuzzy: true,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
|
|
@ -24,6 +24,7 @@ type SearchOptions struct {
|
|||
RepoIDs []int64
|
||||
Keyword string
|
||||
Language string
|
||||
Filename string
|
||||
|
||||
IsKeywordFuzzy bool
|
||||
|
||||
|
|
|
@ -3,30 +3,8 @@
|
|||
|
||||
package internal
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"code.gitea.io/gitea/modules/indexer/internal"
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
)
|
||||
import "code.gitea.io/gitea/modules/indexer/internal"
|
||||
|
||||
func FilenameIndexerID(repoID int64, filename string) string {
|
||||
return internal.Base36(repoID) + "_" + filename
|
||||
}
|
||||
|
||||
func ParseIndexerID(indexerID string) (int64, string) {
|
||||
index := strings.IndexByte(indexerID, '_')
|
||||
if index == -1 {
|
||||
log.Error("Unexpected ID in repo indexer: %s", indexerID)
|
||||
}
|
||||
repoID, _ := internal.ParseBase36(indexerID[:index])
|
||||
return repoID, indexerID[index+1:]
|
||||
}
|
||||
|
||||
func FilenameOfIndexerID(indexerID string) string {
|
||||
index := strings.IndexByte(indexerID, '_')
|
||||
if index == -1 {
|
||||
log.Error("Unexpected ID in repo indexer: %s", indexerID)
|
||||
}
|
||||
return indexerID[index+1:]
|
||||
}
|
||||
|
|
|
@ -35,6 +35,8 @@ type SearchResultLanguages = internal.SearchResultLanguages
|
|||
|
||||
type SearchOptions = internal.SearchOptions
|
||||
|
||||
var CodeSearchOptions = [2]string{"exact", "fuzzy"}
|
||||
|
||||
func indices(content string, selectionStartIndex, selectionEndIndex int) (int, int) {
|
||||
startIndex := selectionStartIndex
|
||||
numLinesBefore := 0
|
||||
|
|
|
@ -28,13 +28,16 @@ var (
|
|||
// The hash used for HKDF.
|
||||
hash = sha256.New
|
||||
// The AEAD used for encryption/decryption.
|
||||
aead = chacha20poly1305.NewX
|
||||
aeadKeySize = chacha20poly1305.KeySize
|
||||
aeadNonceSize = chacha20poly1305.NonceSizeX
|
||||
aead = chacha20poly1305.NewX
|
||||
// The pseudorandom key generated by HKDF-Extract.
|
||||
prk []byte
|
||||
)
|
||||
|
||||
const (
|
||||
aeadKeySize = chacha20poly1305.KeySize
|
||||
aeadNonceSize = chacha20poly1305.NonceSizeX
|
||||
)
|
||||
|
||||
// Set the main IKM for this module.
|
||||
func Init(ikm []byte) {
|
||||
// Salt is intentionally left empty, it's not useful to Forgejo's use case.
|
||||
|
@ -55,7 +58,7 @@ var (
|
|||
// Derive *the* key for a given context, this is a deterministic function.
|
||||
// The same key will be provided for the same context.
|
||||
func DeriveKey(context Context) *Key {
|
||||
if len(prk) == 0 {
|
||||
if len(prk) != sha256.Size {
|
||||
panic("keying: not initialized")
|
||||
}
|
||||
|
||||
|
@ -63,7 +66,7 @@ func DeriveKey(context Context) *Key {
|
|||
|
||||
key := make([]byte, aeadKeySize)
|
||||
// This should never return an error, but if it does, panic.
|
||||
if _, err := r.Read(key); err != nil {
|
||||
if n, err := r.Read(key); err != nil || n != aeadKeySize {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
|
@ -92,7 +95,7 @@ func (k *Key) Encrypt(plaintext, additionalData []byte) []byte {
|
|||
|
||||
// Generate a random nonce.
|
||||
nonce := make([]byte, aeadNonceSize)
|
||||
if _, err := rand.Read(nonce); err != nil {
|
||||
if n, err := rand.Read(nonce); err != nil || n != aeadNonceSize {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
"encoding/xml"
|
||||
"io"
|
||||
|
||||
"code.gitea.io/gitea/modules/util"
|
||||
"code.gitea.io/gitea/modules/validation"
|
||||
|
||||
"golang.org/x/net/html/charset"
|
||||
|
@ -49,8 +50,16 @@ type pomStruct struct {
|
|||
Version string `xml:"version"`
|
||||
Scope string `xml:"scope"`
|
||||
} `xml:"dependencies>dependency"`
|
||||
Parent struct {
|
||||
GroupID string `xml:"groupId"`
|
||||
ArtifactID string `xml:"artifactId"`
|
||||
Version string `xml:"version"`
|
||||
RelativePath string `xml:"relativePath"`
|
||||
} `xml:"parent"`
|
||||
}
|
||||
|
||||
var ErrNoGroupID = util.NewInvalidArgumentErrorf("group ID is missing")
|
||||
|
||||
// ParsePackageMetaData parses the metadata of a pom file
|
||||
func ParsePackageMetaData(r io.Reader) (*Metadata, error) {
|
||||
var pom pomStruct
|
||||
|
@ -65,6 +74,17 @@ func ParsePackageMetaData(r io.Reader) (*Metadata, error) {
|
|||
pom.URL = ""
|
||||
}
|
||||
|
||||
groupID := pom.GroupID
|
||||
|
||||
if groupID == "" {
|
||||
// If a project inherits from a parent project, the groupId element is optional.
|
||||
// Refer to: https://maven.apache.org/pom.html#Inheritance
|
||||
if pom.Parent.GroupID == "" {
|
||||
return nil, ErrNoGroupID
|
||||
}
|
||||
groupID = pom.Parent.GroupID
|
||||
}
|
||||
|
||||
licenses := make([]string, 0, len(pom.Licenses))
|
||||
for _, l := range pom.Licenses {
|
||||
if l.Name != "" {
|
||||
|
@ -82,7 +102,7 @@ func ParsePackageMetaData(r io.Reader) (*Metadata, error) {
|
|||
}
|
||||
|
||||
return &Metadata{
|
||||
GroupID: pom.GroupID,
|
||||
GroupID: groupID,
|
||||
ArtifactID: pom.ArtifactID,
|
||||
Name: pom.Name,
|
||||
Description: pom.Description,
|
||||
|
|
|
@ -14,6 +14,7 @@ import (
|
|||
|
||||
const (
|
||||
groupID = "org.gitea"
|
||||
parentGroupID = "org.gitea.parent"
|
||||
artifactID = "my-project"
|
||||
version = "1.0.1"
|
||||
name = "My Gitea Project"
|
||||
|
@ -27,6 +28,11 @@ const (
|
|||
|
||||
const pomContent = `<?xml version="1.0"?>
|
||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>` + parentGroupID + `</groupId>
|
||||
<artifactId>parent-project</artifactId>
|
||||
<version>1.0.0</version>
|
||||
</parent>
|
||||
<groupId>` + groupID + `</groupId>
|
||||
<artifactId>` + artifactID + `</artifactId>
|
||||
<version>` + version + `</version>
|
||||
|
@ -47,6 +53,24 @@ const pomContent = `<?xml version="1.0"?>
|
|||
</dependencies>
|
||||
</project>`
|
||||
|
||||
const pomWithParentGroupID = `<?xml version="1.0"?>
|
||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>` + parentGroupID + `</groupId>
|
||||
<artifactId>parent-project</artifactId>
|
||||
<version>1.0.0</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>` + artifactID + `</artifactId>
|
||||
<version>` + version + `</version>
|
||||
</project>`
|
||||
|
||||
const pomWithMissingGroupID = `<?xml version="1.0"?>
|
||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<artifactId>` + artifactID + `</artifactId>
|
||||
<version>` + version + `</version>
|
||||
</project>`
|
||||
|
||||
func TestParsePackageMetaData(t *testing.T) {
|
||||
t.Run("InvalidFile", func(t *testing.T) {
|
||||
m, err := ParsePackageMetaData(strings.NewReader(""))
|
||||
|
@ -87,4 +111,19 @@ func TestParsePackageMetaData(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
assert.NotNil(t, m)
|
||||
})
|
||||
|
||||
t.Run("UseParentGroupID", func(t *testing.T) {
|
||||
m, err := ParsePackageMetaData(strings.NewReader(pomWithParentGroupID))
|
||||
require.NoError(t, err)
|
||||
assert.NotNil(t, m)
|
||||
|
||||
assert.Equal(t, parentGroupID, m.GroupID)
|
||||
})
|
||||
|
||||
t.Run("MissingGroupIDThrowsError", func(t *testing.T) {
|
||||
m, err := ParsePackageMetaData(strings.NewReader(pomWithMissingGroupID))
|
||||
assert.Nil(t, m)
|
||||
require.Error(t, err)
|
||||
assert.Equal(t, ErrNoGroupID, err)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -89,8 +89,9 @@ func CreateRepositoryByExample(ctx context.Context, doer, u *user_model.User, re
|
|||
Type: tp,
|
||||
Config: &repo_model.PullRequestsConfig{
|
||||
AllowMerge: true, AllowRebase: true, AllowRebaseMerge: true, AllowSquash: true, AllowFastForwardOnly: true,
|
||||
DefaultMergeStyle: repo_model.MergeStyle(setting.Repository.PullRequest.DefaultMergeStyle),
|
||||
AllowRebaseUpdate: true,
|
||||
DefaultMergeStyle: repo_model.MergeStyle(setting.Repository.PullRequest.DefaultMergeStyle),
|
||||
DefaultUpdateStyle: repo_model.UpdateStyle(setting.Repository.PullRequest.DefaultUpdateStyle),
|
||||
AllowRebaseUpdate: true,
|
||||
},
|
||||
})
|
||||
} else {
|
||||
|
|
|
@ -46,7 +46,7 @@ func (url defaultActionsURL) URL() string {
|
|||
}
|
||||
|
||||
const (
|
||||
defaultActionsURLForgejo = "https://code.forgejo.org"
|
||||
defaultActionsURLForgejo = "https://data.forgejo.org"
|
||||
defaultActionsURLGitHub = "github" // https://github.com
|
||||
defaultActionsURLSelf = "self" // the root URL of the self-hosted instance
|
||||
)
|
||||
|
|
|
@ -117,7 +117,7 @@ func Test_getDefaultActionsURLForActions(t *testing.T) {
|
|||
iniStr: `
|
||||
[actions]
|
||||
`,
|
||||
wantURL: "https://code.forgejo.org",
|
||||
wantURL: "https://data.forgejo.org",
|
||||
},
|
||||
{
|
||||
name: "github",
|
||||
|
|
|
@ -87,6 +87,7 @@ var (
|
|||
DefaultMergeMessageAllAuthors bool
|
||||
DefaultMergeMessageMaxApprovers int
|
||||
DefaultMergeMessageOfficialApproversOnly bool
|
||||
DefaultUpdateStyle string
|
||||
PopulateSquashCommentWithCommitMessages bool
|
||||
AddCoCommitterTrailers bool
|
||||
TestConflictingPatchesWithGitApply bool
|
||||
|
@ -216,6 +217,7 @@ var (
|
|||
DefaultMergeMessageAllAuthors bool
|
||||
DefaultMergeMessageMaxApprovers int
|
||||
DefaultMergeMessageOfficialApproversOnly bool
|
||||
DefaultUpdateStyle string
|
||||
PopulateSquashCommentWithCommitMessages bool
|
||||
AddCoCommitterTrailers bool
|
||||
TestConflictingPatchesWithGitApply bool
|
||||
|
@ -232,6 +234,7 @@ var (
|
|||
DefaultMergeMessageAllAuthors: false,
|
||||
DefaultMergeMessageMaxApprovers: 10,
|
||||
DefaultMergeMessageOfficialApproversOnly: true,
|
||||
DefaultUpdateStyle: "merge",
|
||||
PopulateSquashCommentWithCommitMessages: false,
|
||||
AddCoCommitterTrailers: true,
|
||||
RetargetChildrenOnMerge: true,
|
||||
|
|
|
@ -105,6 +105,7 @@ type Repository struct {
|
|||
DefaultDeleteBranchAfterMerge bool `json:"default_delete_branch_after_merge"`
|
||||
DefaultMergeStyle string `json:"default_merge_style"`
|
||||
DefaultAllowMaintainerEdit bool `json:"default_allow_maintainer_edit"`
|
||||
DefaultUpdateStyle string `json:"default_update_style"`
|
||||
AvatarURL string `json:"avatar_url"`
|
||||
Internal bool `json:"internal"`
|
||||
MirrorInterval string `json:"mirror_interval"`
|
||||
|
@ -225,6 +226,8 @@ type EditRepoOption struct {
|
|||
DefaultDeleteBranchAfterMerge *bool `json:"default_delete_branch_after_merge,omitempty"`
|
||||
// set to a merge style to be used by this repository: "merge", "rebase", "rebase-merge", "squash", or "fast-forward-only".
|
||||
DefaultMergeStyle *string `json:"default_merge_style,omitempty"`
|
||||
// set to a update style to be used by this repository: "rebase" or "merge"
|
||||
DefaultUpdateStyle *string `json:"default_update_style,omitempty"`
|
||||
// set to `true` to allow edits from maintainers by default
|
||||
DefaultAllowMaintainerEdit *bool `json:"default_allow_maintainer_edit,omitempty"`
|
||||
// set to `true` to archive this repository.
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
[common]
|
||||
help = সাহায্য
|
||||
dashboard = ড্যাশবোর্ড
|
||||
dashboard = ড্যাশবোর্ড
|
||||
home = বাড়ি
|
||||
explore = দেখোণ
|
||||
logo = লোগো
|
||||
sign_in = সাইণ ইণ
|
||||
sign_in_or = বা
|
|
@ -812,7 +812,7 @@ manage_emails=Správa e-mailových adres
|
|||
manage_themes=Výchozí motiv
|
||||
manage_openid=Adresy OpenID
|
||||
email_desc=Vaše hlavní e-mailová adresa bude použita pro oznámení, obnovení hesla, a pokud není skrytá, pro operace Gitu.
|
||||
theme_desc=Toto bude váš výchozí motiv vzhledu na tomto webu.
|
||||
theme_desc=Tento motiv se použije pro webové rozhraní, když jste přihlášeni.
|
||||
primary=Hlavní
|
||||
activated=Aktivován
|
||||
requires_activation=Vyžaduje aktivaci
|
||||
|
@ -1010,7 +1010,7 @@ remove_account_link=Odstranit propojený účet
|
|||
remove_account_link_desc=Odstraněním propojeného účtu zrušíte jeho přístup k vašemu Forgejo účtu. Pokračovat?
|
||||
remove_account_link_success=Propojený účet byl odstraněn.
|
||||
|
||||
hooks.desc=Přidat webhooky, které budou spouštěny pro <strong>všechny repozitáře</strong> vve vašem vlastnictví.
|
||||
hooks.desc=Přidejte webhooky, které budou spouštěny pro <strong>všechny repozitáře</strong> ve vašem vlastnictví.
|
||||
|
||||
orgs_none=Nejste členem žádné organizace.
|
||||
repos_none=Nevlastníte žádné repozitáře.
|
||||
|
@ -1056,9 +1056,9 @@ language.description = Tento jazyk bude uložen do vašeho účtu a po přihlá
|
|||
language.localization_project = Pomozte nám s překladem Forgejo do vašeho jazyka! <a href="%s">Více informací</a>.
|
||||
|
||||
[repo]
|
||||
new_repo_helper=Repozitář obsahuje všechny projektové soubory, včetně historie revizí. Už jej hostujete jinde? <a href="%s">Migrovat repozitář.</a>
|
||||
new_repo_helper=Repozitář obsahuje všechny soubory projektu, včetně historie revizí. Už jej hostujete jinde? <a href="%s">Migrovat repozitář</a>.
|
||||
owner=Vlastník
|
||||
owner_helper=Některé organizace se nemusejí v seznamu zobrazit kvůli maximálnímu dosaženému počtu repozitářů.
|
||||
owner_helper=Některé organizace se nemusí v seznamu zobrazit kvůli maximálnímu dosaženému počtu repozitářů.
|
||||
repo_name=Název repozitáře
|
||||
repo_name_helper=Dobrý název repozitáře většinou používá krátká, zapamatovatelná a unikátní klíčová slova.
|
||||
repo_size=Velikost repozitáře
|
||||
|
@ -1067,7 +1067,7 @@ template_select=Vyberte šablonu
|
|||
template_helper=Nastavit repozitář jako šablonu
|
||||
template_description=Šablony repozitářů umožňují uživatelům generovat nové repositáře se stejnou strukturou, soubory a volitelnými nastaveními.
|
||||
visibility=Viditelnost
|
||||
visibility_description=Pouze majitelé nebo členové organizace to budou moci vidět, pokud mají práva.
|
||||
visibility_description=Budou jej moci vidět pouze majitelé nebo členové organizace, pokud mají práva.
|
||||
visibility_helper=Nastavit repozitář jako soukromý
|
||||
visibility_helper_forced=Váš administrátor vynutil, že nové repozitáře budou soukromé.
|
||||
visibility_fork_helper=(Změna této možnosti ovlivní viditelnost všech forků repozitáře.)
|
||||
|
@ -1088,20 +1088,20 @@ download_bundle=Stáhnout BUNDLE
|
|||
generate_repo=Generovat repozitář
|
||||
generate_from=Generovat z
|
||||
repo_desc=Popis
|
||||
repo_desc_helper=Zadejte krátký popis (volitelné)
|
||||
repo_desc_helper=Zadejte krátký popis (nepovinné)
|
||||
repo_lang=Jazyk
|
||||
repo_gitignore_helper=Vyberte šablony .gitignore
|
||||
repo_gitignore_helper_desc=Vyberte soubory, které nechcete sledovat ze seznamu šablon pro běžné jazyky. Typické artefakty generované nástroji pro sestavení každého jazyka jsou ve výchozím stavu součástí .gitignore.
|
||||
repo_gitignore_helper_desc=Ze seznamu šablon pro běžné jazyky vyberte soubory, které nemáme sledovat. Typické artefakty generované nástroji pro sestavení každého jazyka jsou ve výchozím stavu součástí .gitignore.
|
||||
issue_labels=Štítky
|
||||
issue_labels_helper=Vyberte sadu štítků
|
||||
license=Licence
|
||||
license_helper=Vyberte licenční soubor
|
||||
license_helper_desc=Licence řídí, co ostatní mohou a nemohou dělat s vaším kódem. Nejste si jisti, která je pro váš projekt správná? Podívejte se na <a target="_blank" rel="noopener noreferrer" href="%s">Zvolte licenci</a>
|
||||
license_helper=Vyberte soubor licence
|
||||
license_helper_desc=Licence řídí, co ostatní mohou a nemohou dělat s vaším kódem. Nejste si jisti, která je pro váš projekt správná? Podívejte se na stránku <a target="_blank" rel="noopener noreferrer" href="%s">Výběr licence</a>.
|
||||
object_format = Objektový formát
|
||||
object_format_helper = Objektový formát repozitáře. Později jej nelze změnit. Nejkompatibilnější je SHA1.
|
||||
readme=README
|
||||
readme_helper=Vyberte šablonu souboru README
|
||||
readme_helper_desc=Toto je místo, kde můžete napsat úplný popis vašeho projektu.
|
||||
readme_helper_desc=Do tohoto místa můžete zadat celý popis vašeho projektu.
|
||||
auto_init=Inicializovat repozitář (přidá soubory .gitignore, License a README)
|
||||
trust_model_helper=Vyberte model důvěry pro ověření podpisu. Možnosti jsou:
|
||||
trust_model_helper_collaborator=Spolupracovník: Důvěřovat podpisům spolupracovníků
|
||||
|
@ -2488,8 +2488,8 @@ settings.archive.text = Archivováním repozitáře jej celý převedete do stav
|
|||
settings.archive.success=Repozitář byl úspěšně archivován.
|
||||
settings.archive.error=Nastala chyba při archivování repozitáře. Prohlédněte si záznam pro více detailů.
|
||||
settings.archive.error_ismirror=Nemůžete archivovat zrcadlený repozitář.
|
||||
settings.archive.branchsettings_unavailable=Nastavení větví není dostupné, pokud je repozitář archivovaný.
|
||||
settings.archive.tagsettings_unavailable=Nastavení značek není k dispozici, pokud je repozitář archivován.
|
||||
settings.archive.branchsettings_unavailable=Nastavení větví není v archivovaných repozitářích k dispozici.
|
||||
settings.archive.tagsettings_unavailable=Nastavení značek nejsou v archivovaných repozitářích k dispozici.
|
||||
settings.unarchive.button=Zrušit archivaci repozitáře
|
||||
settings.unarchive.header=Obnovit tento repozitář
|
||||
settings.unarchive.text=Obnovení repozitáře vrátí možnost přijímání commitů a nahrávání. Stejně tak se obnoví i možnost vytváření nových problémů a žádostí o sloučení.
|
||||
|
@ -2749,7 +2749,7 @@ settings.event_pull_request_approvals = Schválení žádostí o sloučení
|
|||
settings.ignore_stale_approvals_desc = Nepočítat schválení udělená u starších commitů (zastaralá schválení) do celkového počtu schválení u ŽS. Není relevantní, pokud byla zastaralá schválení již zrušena.
|
||||
file_follow = Následovat symbolický odkaz
|
||||
settings.protect_status_check_patterns_desc = Zadejte vzorce pro upřesnění kontrol, které musí projít před sloučením větví do větve, která se shoduje s tímto pravidlem. Na každý řádek zadejte jeden vzorec. Vzorce nesmí být prázdné.
|
||||
settings.archive.mirrors_unavailable = Zrcadla nejsou dostupná, když je repozitář archivován.
|
||||
settings.archive.mirrors_unavailable = Zrcadla nejsou v archivovaných repozitářích k dispozici.
|
||||
settings.protect_enable_merge_desc = Kdokoli s přístupem k zápisu bude moci slučovat žádosti o sloučení do této větve.
|
||||
settings.event_pull_request_review_request_desc = Bylo požádáno o posouzení žádosti o sloučení nebo bylo toto požádání odstraněno.
|
||||
error.broken_git_hook = Zdá se, že u tohoto repozitáře jsou rozbité Git hooks. Pro jejich opravení se prosím řiďte pokyny v <a target="_blank" rel="noreferrer" href="%s">dokumentaci</a> a poté odešlete několik commitů pro obnovení stavu.
|
||||
|
@ -2848,6 +2848,8 @@ diff.git-notes.remove-body = Tato poznámka bude odebrána.
|
|||
issues.num_reviews_one = %d kontrola
|
||||
issues.num_reviews_few = %d kontrol
|
||||
issues.summary_card_alt = Souhrn problému s názvem „%s“ v repozitáři %s
|
||||
editor.add_tmpl.filename = nazevsouboru
|
||||
settings.default_update_style_desc = Výchozí způsob aktualizací používaný pro aktualizace žádostí o sloučení, které jsou pozadu oproti základní větvi.
|
||||
|
||||
[graphs]
|
||||
component_loading_info = Tohle může chvíli trvat…
|
||||
|
@ -3513,7 +3515,7 @@ monitor.download_diagnosis_report = Stáhnout hlášení o diagnóze
|
|||
self_check.no_problem_found=Zatím nebyl nalezen žádný problém.
|
||||
self_check.database_collation_mismatch=Očekávejte, že databáze použije collation: %s
|
||||
self_check.database_inconsistent_collation_columns=Databáze používá collation %s, ale tyto sloupce používají chybné collation. To může způsobit neočekávané problémy.
|
||||
self_check.database_fix_mysql=Pro uživatele MySQL/MariaDB můžete použít příkaz "gitea doctor convert", který opraví problémy s collation, nebo můžete také problém vyřešit příkazem "ALTER ... COLLATE ..." SQL ručně.
|
||||
self_check.database_fix_mysql=Pro uživatele MySQL/MariaDB můžete použít příkaz „forgejo doctor convert“, který opraví problémy s porovnáním. Problém také můžete ručně vyřešit příkazem „ALTER ... COLLATE ...“ SQL.
|
||||
self_check = Vlastní kontrola
|
||||
self_check.database_collation_case_insensitive=Databáze používá collation %s, což je collation nerozlišující velká a malá písmena. Ačkoli s ní Gitea může pracovat, mohou se vyskytnout vzácné případy, kdy nebude fungovat podle očekávání.
|
||||
auths.oauth2_map_group_to_team = Zmapovat zabrané skupiny u týmů organizací (volitelné - vyžaduje název claimu výše)
|
||||
|
@ -3684,9 +3686,9 @@ conda.install=Pro instalaci balíčku pomocí Conda spusťte následující př
|
|||
container.details.type=Typ obrazu
|
||||
container.details.platform=Platforma
|
||||
container.pull=Stáhnout obraz z příkazové řádky:
|
||||
container.digest=Výběr:
|
||||
container.digest=Výběr
|
||||
container.multi_arch=OS/architektura
|
||||
container.layers=Vrstvy obrazů
|
||||
container.layers=Vrstvy obrazu
|
||||
container.labels=Štítky
|
||||
container.labels.key=Klíč
|
||||
container.labels.value=Hodnota
|
||||
|
@ -3799,6 +3801,7 @@ arch.version.checkdepends = Závislosti Check
|
|||
arch.version.conflicts = Konflikty
|
||||
arch.version.replaces = Nahrazuje
|
||||
arch.version.backup = Záloha
|
||||
container.images.title = Obrázky
|
||||
|
||||
[secrets]
|
||||
secrets=Tajné klíče
|
||||
|
|
907
options/locale/locale_da.ini
Normal file
907
options/locale/locale_da.ini
Normal file
|
@ -0,0 +1,907 @@
|
|||
|
||||
|
||||
|
||||
[common]
|
||||
home = Hjem
|
||||
dashboard = Instrumentpanel
|
||||
explore = Udforsk
|
||||
help = Hjælp
|
||||
logo = Logo
|
||||
sign_in = Login
|
||||
sign_in_with_provider = Login med %s
|
||||
sign_in_or = eller
|
||||
sign_out = Logud
|
||||
sign_up = Register
|
||||
return_to_forgejo = Vend tilbage til Forgejo
|
||||
new_repo.title = Ny repository
|
||||
retry = Prøv igen
|
||||
link_account = Link konto
|
||||
register = Register
|
||||
powered_by = Baseret på %s
|
||||
version = Version
|
||||
create_new = Opret…
|
||||
user_profile_and_more = Profil og indstillinger…
|
||||
page = Side
|
||||
template = Skabelon
|
||||
language = Sprog
|
||||
notifications = Notifikationer
|
||||
active_stopwatch = Aktiv tidsregistrering
|
||||
enable_javascript = Dette websted kræver JavaScript.
|
||||
toc = Indholdsfortegnelse
|
||||
licenses = Licenser
|
||||
more_items = Flere genstande
|
||||
username = Brugernavn
|
||||
email = E-mailadresse
|
||||
password = Adgangskode
|
||||
access_token = Adgangstoken
|
||||
re_type = Bekræft adgangskode
|
||||
captcha = CAPTCHA
|
||||
twofa = To-faktor autentificering
|
||||
twofa_scratch = To-faktor skrabekode
|
||||
webauthn_sign_in = Tryk på knappen på din sikkerhedsnøgle. Hvis din sikkerhedsnøgle ikke har nogen knap, skal du indsætte den igen.
|
||||
webauthn_use_twofa = Brug en tofaktorkode fra din telefon
|
||||
webauthn_error = Kunne ikke læse din sikkerhedsnøgle.
|
||||
webauthn_unsupported_browser = Din browser understøtter i øjeblikket ikke WebAuthn.
|
||||
webauthn_error_unknown = Der opstod en ukendt fejl. Prøv venligst igen.
|
||||
webauthn_error_unable_to_process = Serveren kunne ikke behandle din anmodning.
|
||||
webauthn_error_duplicated = Sikkerhedsnøglen er ikke tilladt for denne anmodning. Sørg for, at nøglen ikke allerede er registreret.
|
||||
webauthn_error_empty = Du skal angive et navn for denne nøgle.
|
||||
organization = Organisation
|
||||
mirror = Mirror
|
||||
new_mirror = Ny mirror
|
||||
new_fork = Ny repository fork
|
||||
new_project = Nyt projekt
|
||||
new_project_column = Ny kolonne
|
||||
admin_panel = Side administration
|
||||
settings = Indstillinger
|
||||
your_profile = Profil
|
||||
your_starred = Stjernemarkeret
|
||||
your_settings = Indstillinger
|
||||
passcode = Passcode
|
||||
repository = Repository
|
||||
new_org.title = Ny organisation
|
||||
new_repo.link = Nyt repository
|
||||
new_migrate.link = Ny migration
|
||||
new_org.link = Ny organisation
|
||||
all = Alle
|
||||
sources = Kilder
|
||||
mirrors = Mirrors
|
||||
collaborative = Samarbejdende
|
||||
forks = Forks
|
||||
activities = Aktiviteter
|
||||
pull_requests = Pull anmodninger
|
||||
issues = Problemer
|
||||
milestones = Milepæle
|
||||
ok = OK
|
||||
cancel = Annuller
|
||||
rerun = Kør igen
|
||||
rerun_all = Kør alle jobs igen
|
||||
save = Gem
|
||||
add = Tilføj
|
||||
add_all = Tilføj alle
|
||||
remove = Slet
|
||||
remove_all = Slet alle
|
||||
remove_label_str = Slet genstand "%s"
|
||||
edit = Redigere
|
||||
view = Se
|
||||
test = Test
|
||||
disabled = Deaktiveret
|
||||
copy = Kopiér
|
||||
copy_generic = Kopiér til udklipsholder
|
||||
copy_url = Kopiér URL
|
||||
copy_path = Kopiér sti
|
||||
copy_content = Kopier indhold
|
||||
copy_branch = Kopiér branch navn
|
||||
copy_success = Kopieret!
|
||||
copy_error = Kopiering mislykkedes
|
||||
write = Skriv
|
||||
preview = Forhåndsvisning
|
||||
loading = Indlæser…
|
||||
error = Fejl
|
||||
error413 = Du har opbrugt din kvote.
|
||||
go_back = Gå tilbage
|
||||
never = Aldrig
|
||||
unknown = Ukendt
|
||||
rss_feed = RSS feed
|
||||
pin = Pin
|
||||
unpin = Frigør
|
||||
artifacts = Artefakter
|
||||
archived = Arkiveret
|
||||
concept_system_global = Global
|
||||
concept_user_individual = Individuel
|
||||
concept_code_repository = Repository
|
||||
concept_user_organization = Organisation
|
||||
show_timestamps = Vis tidsstempler
|
||||
show_log_seconds = Vis sekunder
|
||||
tracked_time_summary = Opsummering af sporet tid baseret på filtre af problemliste
|
||||
signed_in_as = Logget ind som
|
||||
webauthn_error_insecure = WebAuthn understøtter kun sikre forbindelser. Til test over HTTP kan du bruge oprindelsen "localhost" eller "127.0.0.1"
|
||||
invalid_data = Ugyldige data: %v
|
||||
webauthn_insert_key = Indsæt din sikkerhedsnøgle
|
||||
webauthn_press_button = Tryk venligst på knappen på din sikkerhedsnøgle…
|
||||
webauthn_error_timeout = Timeout nået, før din nøgle kunne læses. Genindlæs denne side og prøv igen.
|
||||
enabled = Aktiveret
|
||||
locked = Låst
|
||||
copy_hash = Kopiér hash
|
||||
error404 = Den side, du forsøger at nå, enten <strong>findes ikke</strong> eller <strong>du er ikke autoriseret</strong> til at se den.
|
||||
confirm_delete_artifact = Er du sikker på, at du vil slette artefakten "%s"?
|
||||
new_migrate.title = Ny migration
|
||||
copy_type_unsupported = Denne filtype kan ikke kopieres
|
||||
toggle_menu = TIl/Fra menu
|
||||
show_full_screen = Vis fuld skærm
|
||||
download_logs = Download logs
|
||||
confirm_delete_selected = Bekræft at slette alle valgte genstande?
|
||||
name = Navn
|
||||
value = Værdi
|
||||
filter = Filter
|
||||
filter.clear = Ryd filtre
|
||||
filter.is_archived = Arkiveret
|
||||
filter.not_archived = Ikke arkiveret
|
||||
filter.is_fork = Forks
|
||||
filter.not_fork = Ikke forks
|
||||
filter.is_mirror = Mirrors
|
||||
filter.not_mirror = Ikke mirrors
|
||||
filter.is_template = Skabeloner
|
||||
filter.not_template = Ikke skabeloner
|
||||
filter.public = Offentlig
|
||||
filter.private = Privat
|
||||
|
||||
[search]
|
||||
search = Søg...
|
||||
type_tooltip = Søge type
|
||||
fuzzy = Fuzzy
|
||||
fuzzy_tooltip = Medtag resultater, der også matcher søgeordet tæt
|
||||
union = Almindelig
|
||||
union_tooltip = Inkluder resultater, der matcher et hvilket som helst af de mellemrumsadskilte søgeord
|
||||
exact = Nøjagtig
|
||||
exact_tooltip = Medtag kun resultater, der matcher den nøjagtige søgeterm
|
||||
regexp = RegExp
|
||||
regexp_tooltip = Fortolk søgetermen som et regulært udtryk
|
||||
org_kind = Søg i organisationer...
|
||||
team_kind = Søg efter hold...
|
||||
code_kind = Søg kode...
|
||||
code_search_by_git_grep = Aktuelle kodesøgeresultater leveres af "git grep". Der kan være bedre resultater, hvis webstedsadministratoren aktiverer kodeindeksering.
|
||||
package_kind = Søg pakker...
|
||||
project_kind = Søg efter projekter...
|
||||
commit_kind = Søg commits...
|
||||
branch_kind = Søg branches...
|
||||
runner_kind = Søg runners...
|
||||
issue_kind = Søg i problemer...
|
||||
milestone_kind = Søg milepæle...
|
||||
pull_kind = Søg pulls...
|
||||
repo_kind = Søg depoter...
|
||||
code_search_unavailable = Kodesøgning er ikke tilgængelig i øjeblikket. Kontakt venligst webstedets administrator.
|
||||
no_results = Ingen matchende resultater fundet.
|
||||
user_kind = Søg brugere...
|
||||
keyword_search_unavailable = Søgning efter nøgleord er ikke tilgængelig i øjeblikket. Kontakt venligst webstedets administrator.
|
||||
|
||||
[aria]
|
||||
navbar = Navigationslinje
|
||||
footer = Sidefod
|
||||
footer.software = Omkring dette software
|
||||
footer.links = Links
|
||||
|
||||
[heatmap]
|
||||
number_of_contributions_in_the_last_12_months = %s bidrag inden for de sidste 12 måneder
|
||||
contributions_zero = Ingen bidrag
|
||||
contributions_format = {contributions} på {month} {day}, {year}
|
||||
contributions_one = bidrag
|
||||
contributions_few = bidragene
|
||||
less = Mindre
|
||||
more = Mere
|
||||
|
||||
[editor]
|
||||
buttons.heading.tooltip = Tilføj overskrift
|
||||
buttons.bold.tooltip = Tilføj fed tekst
|
||||
buttons.italic.tooltip = Tilføj kursiv tekst
|
||||
buttons.quote.tooltip = Citat tekst
|
||||
buttons.code.tooltip = Tilføj kode
|
||||
buttons.link.tooltip = Tilføj et link
|
||||
buttons.list.unordered.tooltip = Tilføj en punktliste
|
||||
buttons.list.task.tooltip = Tilføj en liste over opgaver
|
||||
buttons.list.ordered.tooltip = Tilføj en nummereret liste
|
||||
buttons.mention.tooltip = Nævn en bruger eller et hold
|
||||
buttons.ref.tooltip = Henvis til et problem eller pull-anmodning
|
||||
buttons.enable_monospace_font = Aktiver monospace-skrifttype
|
||||
buttons.disable_monospace_font = Deaktiver monospace-skrifttype
|
||||
buttons.new_table.tooltip = Tilføj tabel
|
||||
table_modal.header = Tilføj tabel
|
||||
table_modal.placeholder.header = Hoved
|
||||
table_modal.placeholder.content = Indhold
|
||||
table_modal.label.rows = Rækker
|
||||
table_modal.label.columns = Kolonner
|
||||
buttons.unindent.tooltip = Udsortere genstande med ét niveau
|
||||
buttons.indent.tooltip = Indlejring af genstande med ét niveau
|
||||
buttons.switch_to_legacy.tooltip = Brug den gamle editor i stedet
|
||||
|
||||
[filter]
|
||||
string.asc = A - Z
|
||||
string.desc = Z - A
|
||||
|
||||
[error]
|
||||
occurred = Der opstod en fejl
|
||||
not_found = Målet kunne ikke findes.
|
||||
network_error = Netværksfejl
|
||||
server_internal = Intern serverfejl
|
||||
report_message = Hvis du mener, at dette er en Forgejo-fejl, skal du søge efter problemer på <a href="%s" target="_blank">Codeberg</a> eller åbne et nyt problem, hvis det er nødvendigt.
|
||||
|
||||
[startpage]
|
||||
app_desc = En smertefri, selv-hostet Git-tjeneste
|
||||
install = Nem at installere
|
||||
platform = På tværs af platforme
|
||||
platform_desc = Det er bekræftet, at Forgejo kører på frie operativsystemer som Linux og FreeBSD, samt forskellige CPU-arkitekturer. Vælg den du elsker!
|
||||
lightweight = Letvægtig
|
||||
lightweight_desc = Forgejo har lave minimale krav og kan køre på en billig Raspberry Pi. Spar din maskines energi!
|
||||
license = Åben kildekode
|
||||
license_desc = Få <a target="_blank" rel="noopener noreferrer" href="%[1]s">Forgejo</a>! Slut dig til os ved at <a target="_blank" rel="noopener noreferrer" href="%[2]s">bidrage</a> til at gøre dette projekt endnu bedre. Vær ikke genert over at være en bidragyder!
|
||||
install_desc = Du skal blot <a target="_blank" rel="noopener noreferrer" href="%[1]s">køre binæren</a> for din platform, send den med <a target="_blank" rel="noopener noreferrer" href="%[2]s">Docker</a>, eller få det <a target="_blank" rel="noopener noreferrer" href="%[3]s">pakket</a>.
|
||||
|
||||
[install]
|
||||
install = Installation
|
||||
title = Indledende konfiguration
|
||||
docker_helper = Hvis du kører Forgejo inde i Docker, skal du læse <a target="_blank" rel="noopener noreferrer" href="%s">dokumentationen</a>, før du ændrer nogen indstillinger.
|
||||
require_db_desc = Forgejo kræver MySQL, PostgreSQL, SQLite3 eller TiDB (MySQL-protokol).
|
||||
db_title = Database indstillinger
|
||||
db_type = Database type
|
||||
host = Vært
|
||||
user = Brugernavn
|
||||
password = Adgangskode
|
||||
db_name = Database navn
|
||||
db_schema = Schema
|
||||
db_schema_helper = Lad stå tom for databasestandard ("offentlig").
|
||||
ssl_mode = SSL
|
||||
reinstall_error = Du forsøger at installere i en eksisterende Forgejo-database
|
||||
reinstall_confirm_check_1 = Dataene krypteret af SECRET_KEY i app.ini kan gå tabt: brugere kan muligvis ikke logge ind med 2FA/OTP, og mirrors fungerer muligvis ikke korrekt. Ved at markere dette felt bekræfter du, at den aktuelle app.ini-fil indeholder den korrekte SECRET_KEY.
|
||||
reinstall_confirm_check_3 = Du bekræfter, at du er helt sikker på, at denne Forgejo kører med den korrekte app.ini placering, og at du er sikker på, at du skal gen-installere. Du bekræfter, at du anerkender ovenstående risici.
|
||||
err_empty_db_path = SQLite3-databasestien må ikke være tom.
|
||||
no_admin_and_disable_registration = Du kan ikke deaktivere brugerens selvregistrering uden at oprette en administratorkonto.
|
||||
err_empty_admin_password = Administratoradgangskoden må ikke være tom.
|
||||
err_empty_admin_email = Administrator-e-mailen må ikke være tom.
|
||||
err_admin_name_is_reserved = Administratorbrugernavnet er ugyldigt, brugernavnet er reserveret
|
||||
err_admin_name_pattern_not_allowed = Administratorbrugernavnet er ugyldigt, brugernavnet matcher et reserveret mønster
|
||||
err_admin_name_is_invalid = Administratorbrugernavnet er ugyldigt
|
||||
general_title = Generelle indstillinger
|
||||
app_name = Instans titel
|
||||
app_slogan_helper = Indtast dit instans slogan her. Lad være tom for at deaktivere.
|
||||
lfs_path_helper = Filer sporet af Git LFS vil blive gemt i denne mappe. Lad være tom for at deaktivere.
|
||||
run_user = Bruger at køre som
|
||||
lfs_path = Git LFS rodsti
|
||||
repo_path = Depot rodsti
|
||||
domain = Server domæne
|
||||
domain_helper = Domæne eller værtsadresse for serveren.
|
||||
ssh_port = SSH server port
|
||||
ssh_port_helper = Portnummer, der vil blive brugt af SSH-serveren. Lad være tomt for at deaktivere SSH-serveren.
|
||||
http_port = HTTP lytte port
|
||||
http_port_helper = Portnummer, der vil blive brugt af Forgejo-webserveren.
|
||||
app_url = Base URL
|
||||
log_root_path = Log sti
|
||||
log_root_path_helper = Logfiler vil blive skrevet til denne mappe.
|
||||
optional_title = Valgfrie indstillinger
|
||||
email_title = E-mail-indstillinger
|
||||
smtp_addr = SMTP vært
|
||||
smtp_port = SMTP port
|
||||
smtp_from = Send e-mail som
|
||||
smtp_from_invalid = "Send e-mail som"-adressen er ugyldig
|
||||
mailer_user = SMTP brugernavn
|
||||
mailer_password = SMTP adgangskode
|
||||
register_confirm = Kræv e-mail-bekræftelse for at registrere
|
||||
mail_notify = Aktiver e-mailmeddelelser
|
||||
server_service_title = Server- og tredjeparts tjenesteindstillinger
|
||||
offline_mode = Aktiver lokal tilstand
|
||||
disable_gravatar = Deaktiver Gravatar
|
||||
disable_gravatar.description = Deaktiver brug af Gravatar eller andre tredjeparts avatar kilder. Standardbilleder vil blive brugt til bruger avatarer, medmindre de uploader deres egen avatar til instansen.
|
||||
federated_avatar_lookup = Aktiver fødererede avatarer
|
||||
federated_avatar_lookup.description = Slå avatarer op ved hjælp af Libravatar.
|
||||
disable_registration = Deaktiver selvregistrering
|
||||
allow_only_external_registration = Tillad kun registrering via eksterne tjenester
|
||||
allow_only_external_registration.description = Brugere vil kun være i stand til at oprette nye konti ved at bruge konfigurerede eksterne tjenester.
|
||||
openid_signin = Aktiver OpenID-logon
|
||||
openid_signin.description = Tillad brugere at logge ind via OpenID.
|
||||
app_slogan = Instans slogan
|
||||
repo_path_helper = Fjerne Git depoter vil blive gemt i denne mappe.
|
||||
smtp_from_helper = E-mailadresse Forgejo vil bruge. Indtast en almindelig e-mailadresse, eller brug formatet "Navn" <email@example.com>.
|
||||
run_user_helper = Operativsystemets brugernavn, som Forgejo kører som. Bemærk, at denne bruger skal have adgang til depotets rodsti.
|
||||
app_name_helper = Indtast dit instans-navn her. Det vil blive vist på hver side.
|
||||
offline_mode.description = Deaktiver tredjeparts indholdsleverings netværk og server alle ressourcer lokalt.
|
||||
disable_registration.description = Kun instans administratoren vil være i stand til at oprette nye brugerkonti. Det anbefales stærkt at holde registreringen deaktiveret, medmindre du har til hensigt at være vært for en offentlig instans for alle og klar til at håndtere store mængder spamkonti.
|
||||
openid_signup = Aktiver OpenID-selvregistrering
|
||||
sqlite_helper = Filsti til SQLite3-databasen.<br>Indtast en absolut sti, hvis du kører Forgejo som en tjeneste.
|
||||
path = Sti
|
||||
reinstall_confirm_message = Geninstallation med en eksisterende Forgejo-database kan forårsage flere problemer. I de fleste tilfælde bør du bruge din eksisterende "app.ini" til at køre Forgejo. Hvis du ved, hvad du laver, skal du bekræfte følgende:
|
||||
reinstall_confirm_check_2 = Depoterne og indstillingerne skal muligvis synkroniseres igen. Ved at markere dette felt bekræfter du, at du vil re-synkronisere hooks for depoter og authorized_keys-filen manuelt. Du bekræfter, at du vil sikre dig, at indstillingerne for depoter og mirror er korrekte.
|
||||
app_url_helper = Base adresse for HTTP(S)-klone-URL'er og e-mail-meddelelser.
|
||||
enable_captcha = Aktiver registrering CAPTCHA
|
||||
enable_captcha.description = Kræv brugere at bestå CAPTCHA for at oprette konti.
|
||||
require_sign_in_view = Kræv at logge ind for at se instansindhold
|
||||
default_keep_email_private = Skjul e-mailadresser som standard
|
||||
default_keep_email_private.description = Aktiver skjulning af e-mail-adresser for nye brugere som standard, så disse oplysninger ikke lækkes umiddelbart efter tilmelding.
|
||||
default_allow_create_organization = Tillad oprettelse af organisationer som standard
|
||||
default_enable_timetracking = Aktiver tidsregistrering som standard
|
||||
default_enable_timetracking.description = Tillad som standard brug af tidssporings-funktion for nye depoter.
|
||||
admin_title = Indstillinger for administratorkonto
|
||||
admin_setting.description = Det er valgfrit at oprette en administratorkonto. Den første registrerede bruger bliver automatisk administrator.
|
||||
admin_name = Administrator brugernavn
|
||||
admin_password = Adgangskode
|
||||
confirm_password = Bekræft adgangskode
|
||||
admin_email = E-mailadresse
|
||||
config_location_hint = Disse konfigurationsmuligheder vil blive gemt i:
|
||||
install_btn_confirm = Installer Forgejo
|
||||
invalid_db_setting = Databaseindstillingerne er ugyldige: %v
|
||||
invalid_db_table = Databasetabellen "%s" er ugyldig: %v
|
||||
invalid_repo_path = Depotets rodsti er ugyldig: %v
|
||||
invalid_app_data_path = Appens datasti er ugyldig: %v
|
||||
run_user_not_match = Brugernavnet som "bruger det skal køres som" er ikke det aktuelle brugernavn: %s -> %s
|
||||
internal_token_failed = Kunne ikke generere intern token: %v
|
||||
secret_key_failed = Kunne ikke generere hemmelig nøgle: %v
|
||||
save_config_failed = Konfigurationen kunne ikke gemmes: %v
|
||||
invalid_admin_setting = Administratorkonto indstillingen er ugyldig: %v
|
||||
invalid_log_root_path = Log stien er ugyldig: %v
|
||||
allow_dots_in_usernames = Tillad brugere at bruge prikker i deres brugernavne. Påvirker ikke eksisterende konti.
|
||||
no_reply_address = Skjult e-mail-domæne
|
||||
invalid_password_algorithm = Ugyldig hash-algoritme for adgangskode
|
||||
enable_update_checker = Aktiver opdateringskontrol
|
||||
env_config_keys = Miljøkonfiguration
|
||||
env_config_keys_prompt = Følgende miljøvariabler vil også blive anvendt på din konfigurationsfil:
|
||||
test_git_failed = Kunne ikke teste "git" kommandoen: %v
|
||||
sqlite3_not_available = Denne Forgejo-version understøtter ikke SQLite3. Download venligst den officielle binære version fra %s (ikke "gobuild"-versionen).
|
||||
no_reply_address_helper = Domænenavn til brugere med en skjult e-mailadresse. For eksempel vil brugernavnet "joe" blive logget i Git som "joe@noreply.example.org", hvis det skjulte e-mail-domæne er sat til "noreply.example.org".
|
||||
require_sign_in_view.description = Begræns indholdsadgang til ind-loggede brugere. Gæster vil kun kunne besøge autentificerings sider..
|
||||
default_allow_create_organization.description = Tillad nye brugere at oprette organisationer som standard. Når denne mulighed er deaktiveret, skal en administrator give tilladelse til at oprette organisationer til nye brugere.
|
||||
password_algorithm = Adgangskode hash algoritme
|
||||
enable_update_checker_helper_forgejo = Den vil med jævne mellemrum tjekke for nye Forgejo versioner ved at tjekke en TXT DNS-posten på release.forgejo.org.
|
||||
password_algorithm_helper = Indstil adgangskode-hash-algoritmen. Algoritmer har forskellige krav og styrke. Argon2-algoritmen er ret sikker, men bruger meget hukommelse og kan være upassende til små systemer.
|
||||
openid_signup.description = Tillad brugere at oprette konti via OpenID, hvis selvregistrering er aktiveret.
|
||||
|
||||
[home]
|
||||
uname_holder = Brugernavn eller e-mailadresse
|
||||
switch_dashboard_context = Skift instrumentpanel-kontekst
|
||||
my_repos = Depoter
|
||||
my_orgs = Organisationer
|
||||
view_home = Se %s
|
||||
filter = Andre filtre
|
||||
filter_by_team_repositories = Filtrer efter holddepoter
|
||||
feed_of = Feed of "%s"
|
||||
show_archived = Arkiveret
|
||||
show_both_archived_unarchived = Viser både arkiveret og ikke-arkiveret
|
||||
show_only_archived = Viser kun arkiverede
|
||||
show_only_unarchived = Viser kun ikke-arkiveret
|
||||
show_private = Privat
|
||||
show_only_private = Viser kun privat
|
||||
show_only_public = Viser kun offentligt
|
||||
issues.in_your_repos = I dine depoter
|
||||
show_both_private_public = Viser både offentlige og private
|
||||
|
||||
[explore]
|
||||
repos = Depoter
|
||||
users = Brugere
|
||||
stars_one = %d stjerne
|
||||
stars_few = %d stjerner
|
||||
forks_one = %d fork
|
||||
forks_few = %d forks
|
||||
organizations = Organisationer
|
||||
code = Kode
|
||||
code_last_indexed_at = Sidst indekseret %s
|
||||
relevant_repositories = Kun relevante depoter vises, <a href="%s">vis ufiltrerede resultater</a>.
|
||||
go_to = Gå til
|
||||
relevant_repositories_tooltip = Depoter som er forks, eller som ikke har noget emne, intet ikon og ingen beskrivelse, er skjult.
|
||||
|
||||
[auth]
|
||||
create_new_account = Registrer konto
|
||||
disable_register_prompt = Registrering er deaktiveret. Kontakt venligst din side-administrator.
|
||||
disable_register_mail = E-mailbekræftelse for registrering er deaktiveret.
|
||||
manual_activation_only = Kontakt din side-administrator for at fuldføre aktiveringen.
|
||||
remember_me = Husk denne enhed
|
||||
forgot_password_title = Glemt adgangskode
|
||||
forgot_password = Glemt adgangskode?
|
||||
hint_register = Har du brug for en konto? <a href="%s">Registrer dig nu.</a>
|
||||
sign_up_button = Registrer nu.
|
||||
sign_up_successful = Kontoen blev oprettet. Velkommen!
|
||||
must_change_password = Opdater din adgangskode
|
||||
allow_password_change = Kræv, at brugeren ændrer adgangskode (anbefales)
|
||||
reset_password_mail_sent_prompt = En bekræftelses-e-mail er blevet sendt til <b>%s</b>. For at fuldføre kontogendannelses-processen skal du tjekke din indbakke og følge det medfølgende link inden for de næste %s.
|
||||
active_your_account = Aktiver din konto
|
||||
account_activated = Kontoen er blevet aktiveret
|
||||
prohibit_login = Kontoen er suspenderet
|
||||
prohibit_login_desc = Din konto er blevet suspenderet fra interaktion med instansen. Kontakt instans-administratoren for at få adgang igen.
|
||||
change_unconfirmed_email_summary = Skift den e-mailadresse, aktiveringsmail sendes til.
|
||||
change_unconfirmed_email_error = Kan ikke ændre e-mailadressen: %v
|
||||
resend_mail = Klik her for at sende din aktiverings-e-mail igen
|
||||
send_reset_mail = Send gendannelses-e-mail
|
||||
reset_password = Kontogendannelse
|
||||
invalid_code = Din bekræftelseskode er ugyldig eller er udløbet.
|
||||
invalid_code_forgot_password = Din bekræftelseskode er ugyldig eller er udløbet. Klik <a href="%s">her</a> for at starte en ny session.
|
||||
invalid_password = Din adgangskode stemmer ikke overens med den adgangskode, der blev brugt til at oprette kontoen.
|
||||
reset_password_helper = Gendan konto
|
||||
resent_limit_prompt = Du har allerede anmodet om en aktiverings-e-mail for nylig. Vent venligst 3 minutter, og prøv igen.
|
||||
reset_password_wrong_user = Du er logget ind som %s, men linket til kontogendannelse er beregnet til %s
|
||||
confirmation_mail_sent_prompt = En ny bekræftelses-e-mail er blevet sendt til <b>%s</b>. For at fuldføre registreringsprocessen skal du tjekke din indbakke og følge det medfølgende link inden for de næste %s. Hvis e-mailen er forkert, kan du logge ind og anmode om, at endnu en bekræftelses-e-mail sendes til en anden adresse.
|
||||
change_unconfirmed_email = Hvis du har opgivet den forkerte e-mailadresse under tilmeldingen, kan du ændre den nedenfor, og der vil i stedet blive sendt en bekræftelse til den nye adresse.
|
||||
hint_login = Har du allerede en konto? <a href="%s">Log ind nu!</a>
|
||||
has_unconfirmed_mail = Hej %s, du har en ubekræftet e-mailadresse (<b>%s</b>). Hvis du ikke har modtaget en bekræftelses-e-mail eller har brug for at sende en ny, bedes du klikke på knappen nedenfor.
|
||||
password_too_short = Adgangskodelængden må ikke være mindre end %d tegn.
|
||||
non_local_account = Ikke-lokale brugere kan ikke opdatere deres adgangskode via Forgejo-webgrænsefladen.
|
||||
verify = Verificere
|
||||
unauthorized_credentials = Legitimationsoplysningerne er forkerte eller er udløbet. Prøv din kommando igen, eller se %s for at få flere oplysninger
|
||||
scratch_code = Skrabekode
|
||||
use_scratch_code = Brug en skrabekode
|
||||
use_onetime_code = Brug en engangskode
|
||||
twofa_scratch_used = Du har brugt din skrabekode. Du er blevet omdirigeret til siden med to-faktorindstillinger, så du kan fjerne din enhedstilmelding eller generere en ny skrabekode.
|
||||
twofa_passcode_incorrect = Din passcode er forkert. Hvis du har forlagt din enhed, skal du bruge din skrabekode til at logge ind.
|
||||
twofa_scratch_token_incorrect = Din skrabekode er forkert.
|
||||
login_userpass = Login
|
||||
oauth_signup_tab = Registrer ny konto
|
||||
oauth_signup_title = Fuldfør ny konto
|
||||
oauth_signup_submit = Gennemfør konto
|
||||
oauth_signin_tab = Link til en eksisterende konto
|
||||
oauth_signin_title = Log ind for at godkende linket konto
|
||||
oauth_signin_submit = Link konto
|
||||
oauth.signin.error = Der opstod en fejl under behandling af godkendelsesanmodningen. Hvis denne fejl fortsætter, bedes du kontakte webstedets administrator.
|
||||
oauth.signin.error.access_denied = Godkendelsesanmodningen blev afvist.
|
||||
oauth.signin.error.temporarily_unavailable = Godkendelse mislykkedes, fordi godkendelsesserveren midlertidigt ikke er tilgængelig. Prøv venligst igen senere.
|
||||
openid_connect_submit = Forbind
|
||||
openid_connect_title = Opret forbindelse til en eksisterende konto
|
||||
openid_register_title = Opret ny konto
|
||||
openid_register_desc = Den valgte OpenID URI er ukendt. Knyt den til en ny konto her.
|
||||
disable_forgot_password_mail = Kontogendannelse er deaktiveret, fordi der ikke er konfigureret nogen e-mail. Kontakt venligst din webstedsadministrator.
|
||||
email_domain_blacklisted = Du kan ikke registrere dig med din e-mailadresse.
|
||||
authorize_application = Godkend Applikation
|
||||
authorize_redirect_notice = Du vil blive omdirigeret til %s, hvis du godkender denne applikation.
|
||||
authorize_application_created_by = Denne applikation blev oprettet af %s.
|
||||
authorize_application_description = Hvis du giver adgangen, vil den være i stand til at få adgang til og skrive til alle dine kontooplysninger, inklusive private depoter og organisationer.
|
||||
authorize_title = Tillad "%s" at få adgang til din konto?
|
||||
authorization_failed = Godkendelse mislykkedes
|
||||
password_pwned_err = Kunne ikke fuldføre anmodningen til HaveIBeenPwned
|
||||
last_admin = Du kan ikke fjerne den sidste admin. Der skal være mindst én administrator.
|
||||
back_to_sign_in = Tilbage til Log ind
|
||||
sign_in_openid = Fortsæt med OpenID
|
||||
openid_signin_desc = Indtast din OpenID URI. For eksempel: alice.openid.example.org eller https://openid.example.org/alice.
|
||||
disable_forgot_password_mail_admin = Kontogendannelse er kun tilgængelig, når e-mail er konfigureret. Konfigurer venligst e-mail for at aktivere kontogendannelse.
|
||||
password_pwned = Den adgangskode, du valgte, er på en <a target="_blank" rel="noopener noreferrer" href="%s">liste over stjålne adgangskoder</a>, der tidligere er blevet afsløret i forbindelse med offentlige databrud. Prøv venligst igen med en anden adgangskode, og overvej også at ændre denne adgangskode et andet sted.
|
||||
openid_connect_desc = Den valgte OpenID URI er ukendt. Knyt den til en ny konto her.
|
||||
authorization_failed_desc = Godkendelsen mislykkedes, fordi vi har registreret en ugyldig anmodning. Kontakt venligst vedligeholderen af den app, du har forsøgt at godkende.
|
||||
|
||||
[mail]
|
||||
view_it_on = Se det på %s
|
||||
reply = eller svar direkte på denne e-mail
|
||||
link_not_working_do_paste = Virker linket ikke? Prøv at kopiere og indsætte det i din browsers URL-linje.
|
||||
hi_user_x = Hej <b>%s</b>,
|
||||
activate_account = Aktiver venligst din konto
|
||||
activate_account.text_1 = Hej <b>%[1]s</b>, tak, fordi du registrerede dig hos %[2]s!
|
||||
activate_account.text_2 = Klik venligst på følgende link for at aktivere din konto inden for <b>%s</b>:
|
||||
activate_email = Bekræft din e-mailadresse
|
||||
admin.new_user.subject = Ny bruger %s har lige tilmeldt sig
|
||||
admin.new_user.user_info = Brugeroplysninger
|
||||
admin.new_user.text = Venligst <a href="%s">klik her</a> for at administrere denne bruger fra administrationspanelet.
|
||||
register_notify = Velkommen til %s
|
||||
register_notify.text_1 = dette er din registreringsbekræftelses-e-mail for %s!
|
||||
register_notify.text_3 = Hvis en anden har lavet denne konto for dig, skal du først <a href="%s">indstille din adgangskode</a>.
|
||||
reset_password = Gendan din konto
|
||||
password_change.subject = Din adgangskode er blevet ændret
|
||||
password_change.text_1 = Adgangskoden til din konto er lige blevet ændret.
|
||||
primary_mail_change.subject = Din primære mail er blevet ændret
|
||||
totp_disabled.subject = TOTP er blevet deaktiveret
|
||||
totp_disabled.text_1 = Tidsbaseret engangsadgangskode (TOTP) på din konto er netop blevet deaktiveret.
|
||||
totp_disabled.no_2fa = Der er ikke længere konfigureret andre 2FA-metoder, hvilket betyder, at det ikke længere er nødvendigt at logge ind på din konto hos 2FA.
|
||||
removed_security_key.subject = En sikkerhedsnøgle er blevet fjernet
|
||||
removed_security_key.text_1 = Sikkerhedsnøglen "%[1]s" er lige blevet fjernet fra din konto.
|
||||
account_security_caution.text_1 = Hvis dette var dig, så kan du roligt ignorere denne mail.
|
||||
totp_enrolled.subject = Du har aktiveret TOTP som 2FA-metode
|
||||
totp_enrolled.text_1.has_webauthn = Du har lige aktiveret TOTP for din konto. Dette betyder, at du for alle fremtidige login til din konto kan bruge TOTP som en 2FA-metode eller bruge en af dine sikkerhedsnøgler.
|
||||
register_success = Registreringen lykkedes
|
||||
issue_assigned.pull = @%[1]s har tildelt dig at trække anmodning %[2]s i depotet %[3]s.
|
||||
issue_assigned.issue = @%[1]s har tildelt dig et problem %[2]s i depotet %[3]s.
|
||||
register_notify.text_2 = Du kan logge ind på din konto med dit brugernavn: %s
|
||||
primary_mail_change.text_1 = Din kontos primære mail er lige blevet ændret til %[1]s. Det betyder, at denne e-mailadresse ikke længere vil modtage e-mail-meddelelser for din konto.
|
||||
account_security_caution.text_2 = Hvis dette ikke var dig, er din konto kompromitteret. Kontakt venligst administratorerne af dette websted.
|
||||
activate_email.text = Klik venligst på følgende link for at bekræfte din e-mailadresse inden for <b>%s</b>:
|
||||
reset_password.text = Hvis dette var dig, skal du klikke på følgende link for at gendanne din konto inden for <b>%s</b>:
|
||||
removed_security_key.no_2fa = Der er ikke længere konfigureret andre 2FA-metoder, hvilket betyder, at det ikke længere er nødvendigt at logge ind på din konto hos 2FA.
|
||||
totp_enrolled.text_1.no_webauthn = Du har lige aktiveret TOTP for din konto. Det betyder, at du for alle fremtidige login til din konto skal bruge TOTP som 2FA-metode.
|
||||
issue.x_mentioned_you = <b>@%s</b> nævnte dig:
|
||||
issue.action.force_push = <b>%[1]s</b> tvangs pushed <b>%[2]s</b> fra %[3]s til %[4]s.
|
||||
issue.action.push_1 = <b>@%[1]s</b> pushed %[3]d commit til %[2]s
|
||||
issue.action.push_n = <b>@%[1]s</b> pushed %[3]d commits til %[2]s
|
||||
issue.action.close = <b>@%[1]s</b> lukket #%[2]d.
|
||||
issue.action.reopen = <b>@%[1]s</b> genåbnet #%[2]d.
|
||||
issue.action.merge = <b>@%[1]s</b> merged #%[2]d ind i %[3]s.
|
||||
issue.action.approve = <b>@%[1]s</b> godkendte denne pull-anmodning.
|
||||
issue.action.reject = <b>@%[1]s</b> anmodede om ændringer på denne pull-anmodning.
|
||||
issue.action.review = <b>@%[1]s</b> kommenterede denne pull-anmodning.
|
||||
issue.action.review_dismissed = <b>@%[1]s</b> afviste den seneste kontrol fra %[2]s for denne pull-anmodning.
|
||||
issue.action.ready_for_review = <b>@%[1]s</b> markerede denne pull-anmodning klar til gennemgang.
|
||||
issue.action.new = <b>@%[1]s</b> oprettede #%[2]d.
|
||||
issue.in_tree_path = I %s:
|
||||
release.new.subject = %s i %s udgivet
|
||||
release.new.text = <b>@%[1]s</b> udgivet %[2]s i %[3]s
|
||||
release.title = Title: %s
|
||||
release.note = Note:
|
||||
release.downloads = Downloads:
|
||||
release.download.zip = Kildekode (ZIP)
|
||||
release.download.targz = Kildekode (TAR.GZ)
|
||||
repo.transfer.subject_to = %s ønsker at overføre depotet "%s" til %s
|
||||
repo.transfer.subject_to_you = %s ønsker at overføre depotet "%s" til dig
|
||||
repo.transfer.to_you = dig
|
||||
repo.transfer.body = For at acceptere eller afvise det, besøg %s eller ignorer det.
|
||||
repo.collaborator.added.subject = %s føjede dig til %s som samarbejdspartner
|
||||
repo.collaborator.added.text = Du er blevet tilføjet som samarbejdspartner til depotet:
|
||||
team_invite.subject = %[1]s har inviteret dig til at deltage i %[2]s organisationen
|
||||
team_invite.text_1 = %[1]s har inviteret dig til at deltage i teamet %[2]s i organisationen %[3]s.
|
||||
team_invite.text_2 = Klik venligst på følgende link for at blive medlem af holdet:
|
||||
team_invite.text_3 = Note: Denne invitation var beregnet til %[1]s. Hvis du ikke forventede denne invitation, kan du ignorere denne e-mail.
|
||||
|
||||
[modal]
|
||||
yes = Ja
|
||||
no = Nej
|
||||
confirm = Bekærft
|
||||
cancel = Annuller
|
||||
modify = Updatere
|
||||
|
||||
[form]
|
||||
UserName = Brugernavn
|
||||
FullName = Fulde navn
|
||||
Description = Beskrivelse
|
||||
Pronouns = Stedord
|
||||
Biography = Biografi
|
||||
Website = Websted
|
||||
Location = Lokation
|
||||
RepoName = Depot navn
|
||||
Email = E-mailadresse
|
||||
Password = Adgangskode
|
||||
Retype = Bekræft adgangskode
|
||||
PayloadUrl = Payload URL
|
||||
TeamName = Holdnavn
|
||||
AuthName = Autorisationsnavn
|
||||
AdminEmail = Admin email
|
||||
To = Gren navn
|
||||
AccessToken = Adgangstoken
|
||||
NewBranchName = Nyt gren navn
|
||||
CommitSummary = Commit oversigt
|
||||
CommitMessage = Commit besked
|
||||
CommitChoice = Commit valg
|
||||
TreeName = Fil sti
|
||||
Content = Indhold
|
||||
SSPISeparatorReplacement = Separator
|
||||
SSPIDefaultLanguage = Standard sprog
|
||||
require_error = ` må ikke være tomt.`
|
||||
alpha_dash_error = ` bør kun indeholde alfanumeriske, bindestreg ("-") og understregningstegn ("_").`
|
||||
alpha_dash_dot_error = ` bør kun indeholde alfanumeriske tegn, bindestreg ("-"), understregning ("_") og prik ("".").`
|
||||
git_ref_name_error = ` skal være et veludformet Git-referencenavn.`
|
||||
size_error = ` skal være størrelse %s.`
|
||||
min_size_error = ` skal indeholde mindst %s tegn.`
|
||||
email_error = ` er ikke en gyldig e-mailadresse.`
|
||||
url_error = `"%s" er ikke en gyldig URL.`
|
||||
include_error = ` skal indeholde understreng "%s".`
|
||||
glob_pattern_error = ` globmønster er ugyldigt: %s.`
|
||||
regex_pattern_error = ` regex-mønster er ugyldigt: %s.`
|
||||
invalid_group_team_map_error = ` mapping er ugyldig: %s`
|
||||
unknown_error = Ukendt fejl:
|
||||
captcha_incorrect = CAPTCHA-koden er forkert.
|
||||
password_not_match = Adgangskoderne stemmer ikke overens.
|
||||
lang_select_error = Vælg et sprog fra listen.
|
||||
username_been_taken = Brugernavnet er allerede taget.
|
||||
username_change_not_local_user = Ikke-lokale brugere må ikke ændre deres brugernavn.
|
||||
repo_name_been_taken = Depotnavnet er allerede brugt.
|
||||
repository_force_private = Tving Privat er aktiveret: private depoter kan ikke gøres offentlige.
|
||||
repository_files_already_exist = Der findes allerede filer for dette depot. Kontakt systemadministratoren.
|
||||
repository_files_already_exist.delete = Der findes allerede filer for dette depot. Du skal slette dem.
|
||||
visit_rate_limit = Fjernbesøg adresseret takstbegrænsning.
|
||||
2fa_auth_required = Fjernbesøg krævede godkendelse af to faktorer.
|
||||
org_name_been_taken = Organisationsnavnet er allerede taget.
|
||||
team_name_been_taken = Holdnavnet er allerede taget.
|
||||
team_no_units_error = Tillad adgang til mindst én depotsektion.
|
||||
email_been_used = E-mailadressen er allerede brugt.
|
||||
email_invalid = E-mailadressen er ugyldig.
|
||||
openid_been_used = OpenID-adressen "%s" er allerede brugt.
|
||||
password_complexity = Adgangskoden opfylder ikke kompleksitetskravene:
|
||||
password_lowercase_one = Mindst ét lille bogstav
|
||||
password_uppercase_one = Mindst ét stort tegn
|
||||
password_digit_one = Mindst ét ciffer
|
||||
enterred_invalid_repo_name = Det depotnavn, du indtastede, er forkert.
|
||||
enterred_invalid_org_name = Det organisationsnavn, du har indtastet, er forkert.
|
||||
enterred_invalid_owner_name = Det nye ejernavn er ikke gyldigt.
|
||||
enterred_invalid_password = Den adgangskode, du indtastede, er forkert.
|
||||
unset_password = Login-brugeren har ikke angivet adgangskoden.
|
||||
user_not_exist = Brugeren eksisterer ikke.
|
||||
team_not_exist = Holdet eksisterer ikke.
|
||||
last_org_owner = Du kan ikke fjerne den sidste bruger fra "ejere"-teamet. Der skal være mindst én ejer for en organisation.
|
||||
duplicate_invite_to_team = Brugeren var allerede inviteret som et holdmedlem.
|
||||
organization_leave_success = Du har forladt organisationen %s.
|
||||
invalid_ssh_key = Kan ikke bekræfte din SSH-nøgle: %s
|
||||
invalid_gpg_key = Kan ikke bekræfte din GPG-nøgle: %s
|
||||
invalid_ssh_principal = Ugyldig principal: %s
|
||||
unable_verify_ssh_key = Kan ikke bekræfte SSH-nøglen, dobbelttjek den for fejl.
|
||||
auth_failed = Godkendelse mislykkedes: %v
|
||||
still_own_repo = Din konto ejer et eller flere depoter, slet eller overfør dem først.
|
||||
still_has_org = Din konto er medlem af en eller flere organisationer, forlad dem først.
|
||||
still_own_packages = Din konto ejer en eller flere pakker, slet dem først.
|
||||
org_still_own_packages = Denne organisation ejer stadig en eller flere pakker, slet dem først.
|
||||
target_branch_not_exist = Gren målet eksisterer ikke.
|
||||
admin_cannot_delete_self = Du kan ikke slette dig selv, når du er administrator. Fjern venligst dine administratorrettigheder først.
|
||||
required_prefix = Input skal starte med "%s"
|
||||
username_error = ` kan kun indeholde alfanumeriske tegn ("0-9","a-z","A-Z"), bindestreg ("-"), understregning ("_") og prik ("."). Det kan ikke begynde eller slutte med ikke-alfanumeriske tegn, og på hinanden følgende ikke-alfanumeriske tegn er også forbudt.`
|
||||
max_size_error = ` må højst indeholde %s tegn.`
|
||||
repository_files_already_exist.adopt_or_delete = Der findes allerede filer for dette depot. Enten adopter dem eller slet dem.
|
||||
org_still_own_repo = Denne organisation ejer stadig et eller flere depoter, slet eller overfør dem først.
|
||||
username_error_no_dots = ` kan kun indeholde alfanumeriske tegn ("0-9","a-z","A-Z"), bindestreg ("-") og understregning ("_"). Det kan ikke begynde eller slutte med ikke-alfanumeriske tegn, og på hinanden følgende ikke-alfanumeriske tegn er også forbudt.`
|
||||
username_password_incorrect = Brugernavn eller adgangskode er forkert.
|
||||
repository_files_already_exist.adopt = Filer findes allerede for dette depot og kan kun adopteres.
|
||||
password_special_one = Mindst ét specialtegn (tegnsætning, parenteser, anførselstegn osv.)
|
||||
unsupported_login_type = Login typen understøttes ikke for at slette kontoen.
|
||||
cannot_add_org_to_team = En organisation kan ikke tilføjes som et holdmedlem.
|
||||
must_use_public_key = Nøglen du har angivet er en privat nøgle. Lad være med at uploade din private nøgle nogen steder. Brug din offentlige nøgle i stedet.
|
||||
|
||||
[user]
|
||||
change_avatar = Skift din avatar…
|
||||
joined_on = Tilmeldte sig den %s
|
||||
repositories = Depoter
|
||||
activity = Offentlig aktivitet
|
||||
followers.title.one = Følger
|
||||
followers.title.few = Følgere
|
||||
following.title.one = Følger
|
||||
following.title.few = Følger
|
||||
followers_one = %d følger
|
||||
followers_few = %d følgere
|
||||
following_one = %d følger
|
||||
following_few = %d følger
|
||||
follow = Følg
|
||||
unfollow = Fjern følg
|
||||
block_user = Bloker bruger
|
||||
block_user.detail = Bemærk venligst, at blokering af en bruger har andre effekter, såsom:
|
||||
block_user.detail_1 = I vil holde op med at følge hinanden og vil ikke være i stand til at følge hinanden.
|
||||
block_user.detail_2 = Denne bruger vil ikke være i stand til at interagere med de depoter, du ejer, eller de problemer og kommentarer, du har oprettet.
|
||||
block_user.detail_3 = I vil ikke være i stand til at tilføje hinanden som depot-samarbejdspartnere.
|
||||
follow_blocked_user = Du kan ikke følge denne bruger, fordi du har blokeret denne bruger, eller denne bruger har blokeret dig.
|
||||
starred = Stjernemarkerede depoter
|
||||
watched = Overvågede depoter
|
||||
code = Kode
|
||||
overview = Oversigt
|
||||
block = Block
|
||||
user_bio = Biografi
|
||||
email_visibility.limited = Din e-mailadresse er synlig for alle godkendte brugere
|
||||
show_on_map = Vis dette sted på et kort
|
||||
settings = Brugerindstillinger
|
||||
public_activity.visibility_hint.admin_public = Denne aktivitet er synlig for alle, men som administrator kan du også se interaktioner i private rum.
|
||||
public_activity.visibility_hint.self_private = Din aktivitet er kun synlig for dig og instans-administratorerne. <a href="%s">Konfigurer</a>.
|
||||
public_activity.visibility_hint.admin_private = Denne aktivitet er synlig for dig, fordi du er administrator, men brugeren ønsker, at den forbliver privat.
|
||||
form.name_reserved = Brugernavnet "%s" er reserveret.
|
||||
form.name_pattern_not_allowed = Mønsteret "%s" er ikke tilladt i et brugernavn.
|
||||
form.name_chars_not_allowed = Brugernavnet "%s" indeholder ugyldige tegn.
|
||||
unblock = Fjern blokering
|
||||
projects = Projekter
|
||||
disabled_public_activity = Denne bruger har deaktiveret den offentlige synlighed af aktiviteten.
|
||||
public_activity.visibility_hint.self_public = Din aktivitet er synlig for alle, undtagen interaktioner i private rum. <a href="%s">Konfigurer</a>.
|
||||
public_activity.visibility_hint.self_private_profile = Din aktivitet er kun synlig for dig og instans-administratorerne, fordi din profil er privat. <a href="%s">Konfigurer</a>.
|
||||
|
||||
[settings]
|
||||
profile = Profil
|
||||
account = Konto
|
||||
appearance = Udseende
|
||||
password = Adgangskode
|
||||
security = Sikkerhed
|
||||
avatar = Avatar
|
||||
ssh_gpg_keys = SSH / GPG nøgler
|
||||
applications = Applikationer
|
||||
orgs = Organisationer
|
||||
repos = Depoter
|
||||
delete = Slet konto
|
||||
twofa = To-faktor-godkendelse (TOTP)
|
||||
organization = Organisationer
|
||||
uid = UID
|
||||
webauthn = To-faktor-godkendelse (sikkerhedsnøgler)
|
||||
blocked_users = Blokerede brugere
|
||||
public_profile = Offentlig profil
|
||||
location_placeholder = Del din omtrentlige placering med andre
|
||||
password_username_disabled = Ikke-lokale brugere må ikke ændre deres brugernavn. Kontakt venligst din webstedsadministrator for flere detaljer.
|
||||
full_name = Fulde navn
|
||||
website = Websted
|
||||
location = Lokation
|
||||
pronouns = Stedord
|
||||
pronouns_custom = Brugerdefineret
|
||||
pronouns_unspecified = Uspecificeret
|
||||
update_theme = Skift tema
|
||||
update_language = Skift sprog
|
||||
update_language_success = Sproget er blevet opdateret.
|
||||
update_profile_success = Din profil er blevet opdateret.
|
||||
change_username = Dit brugernavn er blevet ændret.
|
||||
change_username_redirect_prompt = Det gamle brugernavn vil omdirigere, indtil nogen gør krav på det.
|
||||
continue = Fortsæt
|
||||
cancel = Annuller
|
||||
language = Sprog
|
||||
language.title = Standard sprog
|
||||
language.description = Dette sprog gemmes på din konto og bruges som standard, når du logger ind.
|
||||
ui = Tema
|
||||
additional_repo_units_hint = Foreslå at aktivere yderligere depotenheder
|
||||
additional_repo_units_hint_description = Vis et "Aktiver mere"-tip for depoter, der ikke har alle tilgængelige enheder aktiveret.
|
||||
update_hints = Opdater tips
|
||||
hints = Tips
|
||||
update_hints_success = Tips er blevet opdateret.
|
||||
hidden_comment_types = Skjulte kommentartyper
|
||||
hidden_comment_types.ref_tooltip = Kommentarer, hvor dette problem blev refereret fra en anden problem/commit/…
|
||||
hidden_comment_types.issue_ref_tooltip = Kommentarer, hvor brugeren ændrer grenen/taget, der er knyttet til problemet
|
||||
comment_type_group_reference = Reference
|
||||
comment_type_group_label = Etiket
|
||||
comment_type_group_milestone = Milepæl
|
||||
comment_type_group_assignee = Udpegningsmodtager
|
||||
comment_type_group_title = Title
|
||||
comment_type_group_branch = Gren
|
||||
comment_type_group_time_tracking = Tidsregistrering
|
||||
comment_type_group_deadline = Tidsfrist
|
||||
comment_type_group_dependency = Dependency
|
||||
comment_type_group_lock = Lås status
|
||||
comment_type_group_review_request = Gennemgå anmodning
|
||||
comment_type_group_pull_request_push = Tilføjet commits
|
||||
comment_type_group_project = Projekt
|
||||
comment_type_group_issue_ref = Problem henvisning
|
||||
privacy = Privatliv
|
||||
keep_activity_private = Skjul aktivitet fra profilsiden
|
||||
lookup_avatar_by_mail = Slå avatar up efter e-mailadresse
|
||||
enable_custom_avatar = Brug tilpasset avatar
|
||||
delete_current_avatar = Slet nuværende avatar
|
||||
uploaded_avatar_not_a_image = Den uploadede fil er ikke et billede.
|
||||
update_avatar_success = Din avatar er blevet opdateret.
|
||||
update_user_avatar_success = Brugerens avatar er blevet opdateret.
|
||||
change_password = Skift adgangskode
|
||||
update_password = Opdater adgangskode
|
||||
old_password = Nuværende adgangskode
|
||||
new_password = Ny adgangskode
|
||||
retype_new_password = Bekræft ny adgangskode
|
||||
password_incorrect = Den aktuelle adgangskode er forkert.
|
||||
password_change_disabled = Ikke-lokale brugere kan ikke opdatere deres adgangskode via Forgejo-webgrænsefladen.
|
||||
manage_emails = Administrer e-mailadresser
|
||||
manage_themes = Standard tema
|
||||
manage_openid = OpenID-adresser
|
||||
theme_desc = Dette tema vil blive brugt til webgrænsefladen, når du er logget ind.
|
||||
primary = Primær
|
||||
activated = Aktiveret
|
||||
requires_activation = Kræver aktivering
|
||||
primary_email = Gør til primær
|
||||
activate_email = Send aktivering
|
||||
activations_pending = Aktiveringer afventer
|
||||
can_not_add_email_activations_pending = Der er en afventende aktivering, prøv igen om et par minutter, hvis du vil tilføje en ny e-mail.
|
||||
delete_email = Slet
|
||||
email_deletion = Fjern e-mailadresse
|
||||
email_deletion_success = E-mailadressen er blevet fjernet.
|
||||
theme_update_success = Dit tema blev opdateret.
|
||||
theme_update_error = Det valgte tema findes ikke.
|
||||
openid_deletion = Fjern OpenID-adresse
|
||||
openid_deletion_desc = Fjernelse af denne OpenID-adresse fra din konto vil forhindre dig i at logge ind med den. Fortsætte?
|
||||
openid_deletion_success = OpenID-adressen er blevet fjernet.
|
||||
add_new_email = Tilføj e-mailadresse
|
||||
add_new_openid = Tilføj ny OpenID URI
|
||||
language.localization_project = Hjælp os med at oversætte Forgejo til dit sprog! <a href="%s">Få flere oplysninger</a>.
|
||||
update_language_not_found = Sprog "%s" er ikke tilgængeligt.
|
||||
hidden_comment_types_description = Kommentartyper, der er markeret her, vil ikke blive vist på problemsider. Hvis du f.eks. markerer "Etiket", fjernes alle "<bruger> tilføjede/fjernede <etiket>" kommentarer.
|
||||
update_profile = Opdater profil
|
||||
change_username_prompt = Note: Ændring af dit brugernavn ændrer også din konto-URL.
|
||||
biography_placeholder = Fortæl andre lidt om dig selv! (Markdown understøttes)
|
||||
profile_desc = Styr, hvordan din profil vises til andre brugere. Din primære e-mailadresse vil blive brugt til meddelelser, gendannelse af adgangskode og webbaserede Git-operationer.
|
||||
saved_successfully = Dine indstillinger blev gemt.
|
||||
keep_activity_private.description = Din <a href="%s">offentlige aktivitet</a> vil kun være synlig for dig og instans-administratorerne.
|
||||
email_desc = Din primære e-mailadresse vil blive brugt til meddelelser, gendannelse af adgangskode og, forudsat at den ikke er skjult, webbaserede Git-operationer.
|
||||
uploaded_avatar_is_too_big = Den uploadede filstørrelse (%d KiB) overstiger den maksimale størrelse (%d KiB).
|
||||
email_deletion_desc = E-mailadressen og relaterede oplysninger vil blive fjernet fra din konto. Git commits af denne e-mailadresse forbliver uændret. Fortsætte?
|
||||
choose_new_avatar = Vælg ny avatar
|
||||
update_avatar = Opdater avatar
|
||||
change_password_success = Din adgangskode er blevet opdateret. Log ind med din nye adgangskode fra nu af.
|
||||
add_email = Tilføj e-mailadresse
|
||||
add_openid = Tilføj OpenID URI
|
||||
add_email_confirmation_sent = En bekræftelses-e-mail er blevet sendt til "%s". For at bekræfte din e-mailadresse, tjek venligst din indbakke og følg det medfølgende link inden for de næste %s.
|
||||
add_openid_success = Den nye OpenID-adresse er blevet tilføjet.
|
||||
keep_email_private = Skjul e-mailadresse
|
||||
openid_desc = OpenID lader dig uddelegere godkendelse til en ekstern udbyder.
|
||||
manage_ssh_keys = Administrer SSH-nøgler
|
||||
manage_ssh_principals = Administrer SSH-certifikatprincippere
|
||||
manage_gpg_keys = Administrer GPG-nøgler
|
||||
add_key = Tilføj nøgle
|
||||
ssh_desc = Disse offentlige SSH-nøgler er knyttet til din konto. De tilsvarende private nøgler giver fuld adgang til dine depoter. SSH-nøgler, der er blevet bekræftet, kan bruges til at bekræfte SSH-signerede Git-commits.
|
||||
principal_desc = Disse SSH-certifikatprincipper er knyttet til din konto og giver fuld adgang til dine depoter.
|
||||
ssh_helper = <strong>Har du brug for hjælp?</strong> Se vejledningen til at <a href="%s">oprette dine egne SSH-nøgler</a> eller løse <a href="%s">almindelige problemer</a> a> du kan støde på når du bruger SSH.
|
||||
gpg_helper = <strong>Har du brug for hjælp?</strong> Se vejledningen <a href="%s">om GPG</a>.
|
||||
key_content_gpg_placeholder = Begynder med "-----BEGIN PGP PUBLIC KEY BLOCK-----"
|
||||
add_new_principal = Tilføj principal
|
||||
ssh_key_been_used = Denne SSH-nøgle er allerede blevet tilføjet til serveren.
|
||||
ssh_key_name_used = En SSH-nøgle med samme navn findes allerede på din konto.
|
||||
ssh_principal_been_used = Denne principal er allerede blevet tilføjet til serveren.
|
||||
gpg_key_id_used = Der findes allerede en offentlig GPG-nøgle med samme id.
|
||||
gpg_no_key_email_found = Denne GPG-nøgle matcher ikke nogen aktiveret e-mail-adresse tilknyttet din konto. Det kan stadig tilføjes, hvis du underskriver det medfølgende token.
|
||||
gpg_key_matched_identities = Matchede identiteter:
|
||||
gpg_key_verified = Verificeret nøgle
|
||||
gpg_key_verified_long = Nøglen er blevet bekræftet med et token og kan bruges til at bekræfte commits, der matcher alle aktiverede e-mailadresser for denne bruger ud over eventuelle matchede identiteter for denne nøgle.
|
||||
gpg_key_verify = Bekræft
|
||||
gpg_invalid_token_signature = Den medfølgende GPG-nøgle, signatur og token stemmer ikke overens, eller token er forældet.
|
||||
gpg_token_required = Du skal angive en underskrift for nedenstående token
|
||||
gpg_token = Token
|
||||
gpg_token_signature = Pansret GPG-signatur
|
||||
key_signature_gpg_placeholder = Begynder med "-----BEGIN PGP SIGNATURE-----"
|
||||
verify_gpg_key_success = GPG-nøglen "%s" er blevet bekræftet.
|
||||
ssh_key_verified = Verificeret nøgle
|
||||
ssh_token_required = Du skal angive en underskrift for nedenstående token
|
||||
ssh_token = Token
|
||||
ssh_token_help = Du kan generere en signatur ved at bruge:
|
||||
ssh_token_signature = Pansret SSH signatur
|
||||
key_signature_ssh_placeholder = Begynder med "-----BEGIN SSH SIGNATURE-----"
|
||||
verify_ssh_key_success = SSH-nøglen "%s" er blevet bekræftet.
|
||||
subkeys = Undernøgler
|
||||
key_name = Nøglenavn
|
||||
key_id = Nøgle ID
|
||||
key_content = Indhold
|
||||
principal_content = Indhold
|
||||
add_key_success = SSH-nøglen "%s" er blevet tilføjet.
|
||||
add_principal_success = SSH-certifikatprincippet "%s" er blevet tilføjet.
|
||||
delete_key = Slet
|
||||
ssh_key_deletion = Slet SSH-nøgle
|
||||
gpg_key_deletion = Slet GPG-nøglen
|
||||
ssh_principal_deletion = Slet SSH Certificate Principal
|
||||
gpg_key_deletion_desc = Fjernelse af en GPG-nøgle afbekræfter commits, der er underskrevet af den. Fortsætte?
|
||||
ssh_principal_deletion_desc = Fjernelse af en SSH Certificate Principal tilbagekalder dens adgang til din konto. Fortsætte?
|
||||
ssh_key_deletion_success = SSH-nøglen er blevet fjernet.
|
||||
ssh_principal_deletion_success = Principal er blevet fjernet.
|
||||
added_on = Tilføjet den %s
|
||||
valid_until_date = Gyldig indtil %s
|
||||
last_used = Sidst brugt på
|
||||
no_activity = Ingen nylig aktivitet
|
||||
can_read_info = Læs
|
||||
can_write_info = Skriv
|
||||
token_state_desc = Dette token er blevet brugt inden for de sidste 7 dage
|
||||
principal_state_desc = Denne principal er blevet brugt inden for de sidste 7 dage
|
||||
show_openid = Vis på profil
|
||||
hide_openid = Skjul fra profil
|
||||
ssh_externally_managed = Denne SSH-nøgle administreres eksternt for denne bruger
|
||||
manage_access_token = Adgangstoken
|
||||
generate_new_token = Generer nyt token
|
||||
tokens_desc = Disse tokens giver adgang til din konto ved hjælp af Forgejo API.
|
||||
token_name = Token navn
|
||||
generate_token = Generer token
|
||||
generate_token_success = Dit nye token er blevet genereret. Kopier den nu, da den ikke vises igen.
|
||||
delete_token = Slet
|
||||
access_token_deletion = Slet adgangstoken
|
||||
access_token_deletion_desc = Sletning af et token vil tilbagekalde adgangen til din konto for applikationer, der bruger den. Dette kan ikke fortrydes. Fortsætte?
|
||||
repo_and_org_access = Depot og organisationsadgang
|
||||
permissions_public_only = Kun offentlig
|
||||
permissions_access_all = Alle (offentlige, private og begrænsede)
|
||||
select_permissions = Vælg tilladelser
|
||||
permission_no_access = Ingen adgang
|
||||
permission_read = Læs
|
||||
permission_write = Læs og skriv
|
||||
permissions_list = Tilladelser:
|
||||
manage_oauth2_applications = Administrer OAuth2-applikationer
|
||||
edit_oauth2_application = Rediger OAuth2-applikation
|
||||
add_email_success = Den nye e-mailadresse er blevet tilføjet.
|
||||
key_content_ssh_placeholder = Begynder med "ssh-ed25519", "ssh-rsa", "ecdsa-sha2-nistp256", "ecdsa-sha2-nistp384", "ecdsa-sha2-nistp521", "sk-ecdsa-sha2-nistp256@openssh.com", eller "sk-ssh-ed25519@openssh.com"
|
||||
gpg_key_matched_identities_long = De indlejrede identiteter i denne nøgle matcher de følgende aktiverede e-mailadresser for denne bruger. Commits, der matcher disse e-mailadresser, kan bekræftes med denne nøgle.
|
||||
gpg_key_deletion_success = GPG-nøglen er blevet fjernet.
|
||||
email_preference_set_success = E-mail-præference er blevet indstillet.
|
||||
keep_email_private_popup = Dette vil skjule din e-mailadresse fra din profil. Det vil ikke længere være standard for commits foretaget via webgrænsefladen, såsom filupload og redigeringer, og vil ikke blive brugt til merge commits. I stedet kan en speciel adresse %s bruges til at knytte commits til din konto. Bemærk, at ændring af denne mulighed ikke vil påvirke eksisterende commits.
|
||||
gpg_desc = Disse offentlige GPG-nøgler er knyttet til din konto og bruges til at bekræfte dine commits. Opbevar dine private nøgler sikkert, da de giver dig mulighed for at underskrive commits med din identitet.
|
||||
gpg_token_help = Du kan generere en signatur ved at bruge:
|
||||
ssh_key_verified_long = Nøglen er blevet bekræftet med et token og kan bruges til at bekræfte commits, der matcher enhver aktiveret e-mail-adresse for denne bruger.
|
||||
ssh_key_deletion_desc = Fjernelse af en SSH-nøgle tilbagekalder dens adgang til din konto. Fortsætte?
|
||||
ssh_signonly = SSH er i øjeblikket deaktiveret, så disse nøgler bruges kun til bekræftelse af commit signatur.
|
||||
at_least_one_permission = Du skal vælge mindst én tilladelse for at oprette et token
|
||||
ssh_key_verify = Bekræft
|
||||
ssh_invalid_token_signature = Den angivne SSH-nøgle, signatur eller token stemmer ikke overens, eller token er forældet.
|
||||
add_gpg_key_success = GPG-nøglen "%s" er blevet tilføjet.
|
||||
valid_forever = Gyldig for evigt
|
||||
ssh_disabled = SSH er deaktiveret
|
||||
key_state_desc = Denne nøgle er blevet brugt inden for de sidste 7 dage
|
||||
generate_token_name_duplicate = <strong>%s</strong> er allerede blevet brugt som applikationsnavn. Brug venligst en ny.
|
||||
delete_token_success = Tokenet er blevet slettet. Applikationer, der bruger den, har ikke længere adgang til din konto.
|
||||
access_token_desc = Valgte tokentilladelser begrænser kun autorisation til de tilsvarende <a href="%[1]s" target="_blank">API</a>-ruter. Læs <a href="%[2]s" target="_blank">dokumentationen</a> for at få flere oplysninger.
|
||||
oauth2_applications_desc = OAuth2-applikationer gør det muligt for din tredjepartsapplikation at godkende brugere sikkert i denne Forgejo-instans.
|
||||
remove_oauth2_application = Slet OAuth2-applikation
|
||||
remove_oauth2_application_desc = Sletning af en OAuth2-applikation vil tilbagekalde adgangen til alle signerede adgangstokens. Vil du fortsætte?
|
||||
remove_oauth2_application_success = Ansøgningen er blevet slettet.
|
||||
create_oauth2_application = Opret en ny OAuth2-applikation
|
||||
create_oauth2_application_button = Opret applikation
|
||||
create_oauth2_application_success = Du har oprettet en ny OAuth2-applikation.
|
||||
update_oauth2_application_success = Du har opdateret OAuth2-applikationen.
|
||||
oauth2_application_name = Applikationsnavn
|
||||
oauth2_redirect_uris = Omdiriger URI'er. Brug venligst en ny linje for hver URI.
|
||||
save_application = Gem
|
||||
oauth2_client_id = Klient ID
|
||||
oauth2_client_secret = Klient hemmelighed
|
||||
oauth2_regenerate_secret = Genskab hemmeligheden
|
||||
oauth2_regenerate_secret_hint = Har du mistet din hemmelighed?
|
||||
oauth2_client_secret_hint = Hemmeligheden vil ikke blive vist igen, når du forlader eller opdaterer denne side. Sørg for, at du har gemt den.
|
||||
oauth2_application_edit = Redigere
|
||||
oauth2_confidential_client = Fortrolig klient. Vælg for apps, der holder hemmeligheden fortrolig, såsom webapps. Vælg ikke for indbyggede apps, herunder desktop- og mobilapps.
|
|
@ -814,7 +814,7 @@ manage_emails=E-Mail-Adressen verwalten
|
|||
manage_themes=Standard-Theme
|
||||
manage_openid=OpenID-Adressen
|
||||
email_desc=Deine primäre E-Mail-Adresse wird für Benachrichtigungen, Passwort-Wiederherstellung und, sofern sie nicht versteckt ist, web-basierte Git-Operationen verwendet.
|
||||
theme_desc=Dies wird dein Standard-Theme auf der Seite sein.
|
||||
theme_desc=Dieses Thema wird für die Weboberfläche verwendet, wenn du angemeldet bist.
|
||||
primary=Primär
|
||||
activated=Aktiviert
|
||||
requires_activation=Erfordert Aktivierung
|
||||
|
@ -1097,7 +1097,7 @@ issue_labels=Labels
|
|||
issue_labels_helper=Wähle eine Label-Sammlung
|
||||
license=Lizenz
|
||||
license_helper=Wähle eine Lizenz
|
||||
license_helper_desc=Eine Lizenz regelt, was andere mit deinem Code tun (oder nicht tun) können. Unsicher, welches für dein Projekt die Richtige ist? Siehe <a target="_blank" rel="noopener noreferrer" href="%s">Choose a license.</a>
|
||||
license_helper_desc=Eine Lizenz regelt, was andere mit deinem Code tun (oder nicht tun) können. Unsicher, welches für dein Projekt die Richtige ist? Siehe <a target="_blank" rel="noopener noreferrer" href="%s">Choose a license</a>.
|
||||
readme=README
|
||||
readme_helper=Wähle eine README-Vorlage
|
||||
readme_helper_desc=Hier kannst du eine komplette Beschreibung für dein Projekt schreiben.
|
||||
|
@ -2490,8 +2490,8 @@ settings.archive.text=Durch das Archivieren wird ein Repo vollständig schreibge
|
|||
settings.archive.success=Das Repo wurde erfolgreich archiviert.
|
||||
settings.archive.error=Beim Versuch, das Repository zu archivieren, ist ein Fehler aufgetreten. Weitere Details finden sich im Log.
|
||||
settings.archive.error_ismirror=Du kannst kein gespiegeltes Repo archivieren.
|
||||
settings.archive.branchsettings_unavailable=Branch-Einstellungen sind nicht verfügbar wenn das Repo archiviert ist.
|
||||
settings.archive.tagsettings_unavailable=Tag Einstellungen sind nicht verfügbar, wenn das Repo archiviert wurde.
|
||||
settings.archive.branchsettings_unavailable=Branch-Einstellungen sind nicht verfügbar in archivierten Repos.
|
||||
settings.archive.tagsettings_unavailable=Tag-Einstellungen sind nicht verfügbar in archivierten Repos.
|
||||
settings.unarchive.button=Archivierung zurücksetzen
|
||||
settings.unarchive.header=Archivierung dieses Repositorys zurücksetzen
|
||||
settings.unarchive.text=Durch das Aufheben der Archivierung kann das Repo wieder Commits und Pushes sowie neue Issues und Pull-Requests empfangen.
|
||||
|
@ -2690,7 +2690,7 @@ error.csv.too_large=Diese Datei kann nicht gerendert werden, da sie zu groß ist
|
|||
error.csv.unexpected=Diese Datei kann nicht gerendert werden, da sie ein unerwartetes Zeichen in Zeile %d und Spalte %d enthält.
|
||||
error.csv.invalid_field_count=Diese Datei kann nicht gerendert werden, da sie eine falsche Anzahl an Feldern in Zeile %d hat.
|
||||
rss.must_be_on_branch = Du musst auf einem Branch sein, um einen RSS-Feed zu haben.
|
||||
new_repo_helper = Ein Repository enthält alle Projektdateien inklusive der Revisionshistorie. Bereits woanders gehostet? <a href="%s">Repository migrieren.</a>
|
||||
new_repo_helper = Ein Repository enthält alle Projektdateien inklusive der Revisionshistorie. Bereits woanders gehostet? <a href="%s">Repository migrieren</a>.
|
||||
issues.comment.blocked_by_user = Du kannst kein Kommentar für dieses Issue erstellen, weil du vom Repository-Besitzer oder dem Autoren des Issues blockiert wurdest.
|
||||
clone_in_vscodium = In VSCodium klonen
|
||||
settings.units.add_more = Mehr aktivieren
|
||||
|
@ -2704,7 +2704,7 @@ settings.add_collaborator_blocked_them = Der Mitarbeiter konnte nicht hinzugefü
|
|||
settings.wiki_rename_branch_main = Den Wiki-Branch-Namen normalisieren
|
||||
settings.enter_repo_name = Gib den Besitzer- und den Repository-Namen genau wie angezeigt ein:
|
||||
settings.wiki_branch_rename_success = Der Branch-Name des Repository-Wikis wurde erfolgreich normalisiert.
|
||||
settings.archive.mirrors_unavailable = Spiegel sind nicht verfügbar, wenn das Repo archiviert ist.
|
||||
settings.archive.mirrors_unavailable = Spiegel sind nicht verfügbar in archivierten Repos.
|
||||
pulls.blocked_by_user = Du kannst keinen Pull-Request in diesem Repository erstellen, weil du vom Repository-Besitzer blockiert wurdest.
|
||||
settings.add_collaborator_blocked_our = Der Mitarbeiter konnte nicht hinzugefügt werden, weil der Repository-Besitzer ihn blockiert hat.
|
||||
issues.blocked_by_user = Du kannst kein Issue in diesem Repository erstellen, weil du vom Repository-Besitzer blockiert wurdest.
|
||||
|
@ -2850,6 +2850,7 @@ diff.git-notes.remove-body = Diese Anmerkung wird entfernt.
|
|||
issues.num_reviews_one = %d Review
|
||||
issues.summary_card_alt = Zusammenfassung eines Issues mit dem Titel „%s“ im Repository %s
|
||||
issues.num_reviews_few = %d Reviews
|
||||
editor.add_tmpl.filename = Dateiname
|
||||
|
||||
[graphs]
|
||||
component_loading_failed = Konnte %s nicht laden
|
||||
|
@ -3512,7 +3513,7 @@ notices.type_2=Aufgabe
|
|||
notices.desc=Beschreibung
|
||||
notices.op=Aktion
|
||||
notices.delete_success=Diese Systemmeldung wurde gelöscht.
|
||||
self_check.database_fix_mysql = Für MySQL-/MariaDB-Benutzer: Du kannst den Befehl „gitea doctor convert“ verwenden, um die Collation-Probleme zu lösen, oder du kannst das Problem mit „ALTER … COLLATE …“-SQLs manuell lösen.
|
||||
self_check.database_fix_mysql = Für MySQL-/MariaDB-Benutzer: Du kannst den Befehl „forgejo doctor convert“ verwenden, um die Collation-Probleme zu lösen, oder du kannst das Problem mit „ALTER … COLLATE …“-SQLs manuell lösen.
|
||||
dashboard.sync_tag.started = Tag-Synchronisierung gestartet
|
||||
self_check.database_collation_case_insensitive = Datenbank benutzt eine Collation %s, welcher der Groß-/Kleinschreibung egal ist. Obwohl Forgejo damit arbeiten könnte, könnte es ein paar seltene Fälle geben, bei denen es nicht wie erwartet funktioniert.
|
||||
self_check = Selbstprüfung
|
||||
|
@ -3685,12 +3686,12 @@ conan.registry=Diese Registry über die Kommandozeile einrichten:
|
|||
conan.install=Um das Paket mit Conan zu installieren, führe den folgenden Befehl aus:
|
||||
conda.registry=Richte diese Registry als Conda-Repository in deiner <code>.condarc</code>-Datei ein:
|
||||
conda.install=Um das Paket mit Conda zu installieren, führe den folgenden Befehl aus:
|
||||
container.details.type=Container-Image Typ
|
||||
container.details.type=Abbildtyp
|
||||
container.details.platform=Plattform
|
||||
container.pull=Downloade das Container-Image aus der Kommandozeile:
|
||||
container.digest=Digest:
|
||||
container.digest=Digest
|
||||
container.multi_arch=Betriebsystem / Architektur
|
||||
container.layers=Container-Image Ebenen
|
||||
container.layers=Abbildebenen
|
||||
container.labels=Labels
|
||||
container.labels.key=Schlüssel
|
||||
container.labels.value=Wert
|
||||
|
@ -3803,6 +3804,7 @@ arch.version.conflicts = Konflikte
|
|||
arch.version.replaces = Ersetzt
|
||||
arch.version.backup = Backup
|
||||
arch.version.optdepends = Optionale Abhängigkeit
|
||||
container.images.title = Bilder
|
||||
|
||||
[secrets]
|
||||
secrets=Secrets
|
||||
|
|
|
@ -2247,6 +2247,7 @@ settings.pulls_desc = Enable repository pull requests
|
|||
settings.pulls.ignore_whitespace = Ignore whitespace for conflicts
|
||||
settings.pulls.enable_autodetect_manual_merge = Enable autodetect manual merge (Note: In some special cases, misjudgments can occur)
|
||||
settings.pulls.allow_rebase_update = Enable updating pull request branch by rebase
|
||||
settings.default_update_style_desc=Default update style used for updating pull requests that are behind the base branch.
|
||||
settings.pulls.default_delete_branch_after_merge = Delete pull request branch after merge by default
|
||||
settings.pulls.default_allow_edits_from_maintainers = Allow edits from maintainers by default
|
||||
settings.releases_desc = Enable repository releases
|
||||
|
|
|
@ -165,6 +165,7 @@ filter.is_template = Mallipohjat
|
|||
filter.not_fork = Ei forkkeja
|
||||
filter.not_template = Ei mallipohjat
|
||||
filter.not_mirror = Ei peilattu
|
||||
copy_path = Kopioi polku
|
||||
|
||||
[aria]
|
||||
footer.links = Linkit
|
||||
|
@ -290,7 +291,7 @@ disable_gravatar=Poista Gravatar käytöstä
|
|||
disable_gravatar.description=Poista Gravatar ja kolmannen osapuolen avaratir käytöstä. Oletus-avatar näytetään, ellei käyttäjä ole ladannut omaansa.
|
||||
federated_avatar_lookup=Käytä federoituja profiilikuvia
|
||||
federated_avatar_lookup.description=Käytä Libravatar-palvelua profiilikuvien hakemiseen.
|
||||
disable_registration=Poista rekisteröinti käytöstä
|
||||
disable_registration=Poista omatoiminen rekisteröityminen käytöstä
|
||||
disable_registration.description=Poista käyttäjän itse-rekisteröinti, vain ylläpito voi luoda tilejä.
|
||||
allow_only_external_registration.description=Käyttäjät voivat luoda uusia käyttäjiä vain erikseen konfiguroituja ulkoisia palveluja käyttäen.
|
||||
openid_signin=Ota OpenID-kirjautuminen käyttöön
|
||||
|
@ -318,7 +319,7 @@ default_keep_email_private=Piilota sähköpostiosoitteet oletuksena
|
|||
default_keep_email_private.description=Piilota oletusarvoisesti uusien käyttäjätilien sähköpostiosoitteet estääksesi tietojen vuotamisen rekisteröinnin yhteydessä.
|
||||
default_enable_timetracking=Ota ajanseuranta oletusarvoisesti käyttöön
|
||||
default_enable_timetracking.description=Salli uusien repositorioiden aikaseurannan käyttöönotto oletusarvoisesti.
|
||||
no_reply_address=Piilotettu sähköpostin verkkotunnus
|
||||
no_reply_address=Piilotetun sähköpostin verkkotunnus
|
||||
no_reply_address_helper=Verkkotunnuksen nimi käyttäjille, joilla on piilotettu sähköpostiosoite. Esimerkiksi käyttäjätunnus 'joe' kirjataan Git-palveluun nimellä 'joe@noreply.example.org' jos piilotetun sähköpostiosoitteen arvoksi on asetettu 'noreply.example.org'.
|
||||
password_algorithm=Salasanan hajautusalgoritmi
|
||||
enable_update_checker_helper_forgejo = Se tarkistaa tietyin väliajoin uusia Forgejo-versioita tutkimalla sen TXT DNS record -tietoja osoitteesta release.forgejo.org .
|
||||
|
@ -343,6 +344,7 @@ enable_update_checker = Ota päivitystentarkistus käyttöön
|
|||
app_slogan = Instanssin tunnuslause
|
||||
app_slogan_helper = Syötä instanssin tunnuslause tähän. Jätä tyhjäksi poistaaksesi käytöstä.
|
||||
domain_helper = Palvelimen verkkotunnus tai isäntänimi.
|
||||
smtp_from_invalid = "Lähetä sähköpostit osoitteella"-osoite on virheellinen
|
||||
|
||||
[home]
|
||||
uname_holder=Käyttäjätunnus tai sähköpostiosoite
|
||||
|
@ -389,6 +391,7 @@ relevant_repositories = Vain relevantit repositoriot näytetään, <a href="%s">
|
|||
forks_one = %d forkki
|
||||
forks_few = %d forkkia
|
||||
go_to = Siirry
|
||||
relevant_repositories_tooltip = Repot, jotka ovat forkkeja, joilla ei ole aiheita, ei kuvakkeita ja ei kuvausta, ovat piilotettuja.
|
||||
|
||||
[auth]
|
||||
create_new_account=Rekisteröi tili
|
||||
|
@ -406,12 +409,12 @@ allow_password_change=Vaadi käyttäjää vaihtamaan salasanansa (suositeltava)
|
|||
reset_password_mail_sent_prompt=Varmistussähköposti on lähetetty osoitteeseen <b>%s</b>. Tarkista sähköpostisi ja seuraa annettua linkkiä seuraavan %s aikana saadaksesi tilin palauttamisen valmiiksi.
|
||||
active_your_account=Aktivoi tilisi
|
||||
account_activated=Tili on aktivoitu
|
||||
prohibit_login=Kirjautuminen estetty
|
||||
prohibit_login=Tili on jäädytetty
|
||||
resent_limit_prompt=Olet jo tilannut aktivointisähköpostin hetki sitten. Ole hyvä ja odota 3 minuuttia ja yritä sitten uudelleen.
|
||||
has_unconfirmed_mail=Hei %s, sinulla on varmistamaton sähköposti osoite (<b>%s</b>). Jos et ole saanut varmistus sähköpostia tai tarvitset uudelleenlähetyksen, ole hyvä ja klikkaa allaolevaa painiketta.
|
||||
resend_mail=Klikkaa tästä uudelleenlähettääksesi aktivointi sähköpostisi
|
||||
email_not_associate=Tätä sähköpostiosoitetta ei ole liitetty mihinkään tiliin.
|
||||
send_reset_mail=Lähetä tilin palautussähköposti
|
||||
send_reset_mail=Lähetä palautussähköposti
|
||||
reset_password=Tilin palautus
|
||||
invalid_code=Vahvistusavain on virheellinen tai vanhentunut.
|
||||
reset_password_helper=Palauta käyttäjätili
|
||||
|
@ -450,10 +453,21 @@ hint_login = Onko sinulla jo käyttäjätili? <a href="%s">Kirjaudu sisään!</a
|
|||
hint_register = Tarvitsetko käyttäjätilin? <a href="%s">Rekisteröidy nyt.</a>
|
||||
sign_up_button = Rekisteröidy nyt.
|
||||
manual_activation_only = Ota yhteyttä järjestelmänvalvojaanne viimeistelläksesi aktivoinnin.
|
||||
change_unconfirmed_email_error = Sähköpostiosoitteen vaihtaminen ei onnistu: %v
|
||||
invalid_password = Salasanasi ei vastaa tilin luomisen yhteydessä käytettyä salasanaa.
|
||||
back_to_sign_in = Takaisin kirjautumiseen
|
||||
sign_in_openid = Jatka OpenID:llä
|
||||
change_unconfirmed_email = Jos annoit väärän sähköpostiosoitteen rekisteröitymisen yhteydessä, voit vaihtaa sen alapuolella, ja vahvistus lähetetään uuteen osoitteeseen.
|
||||
invalid_code_forgot_password = Vahvistuskoodisi on virheellinen tai vanhentunut. Napsauta <a href="%s">tästä</a> aloittaaksesi uuden istunnon.
|
||||
openid_signin_desc = Kirjoita OpenID-URI:si. Esimerkki: alice.openid.example.org tai https://openid.example.org/alice.
|
||||
change_unconfirmed_email_summary = Vaihda sähköpostiosoite, johon aktivointisähköposti lähetetään.
|
||||
reset_password_wrong_user = Olet kirjautuneena tilillä %s, mutta tilin palautuslinkki on tarkoitettu tilille %s
|
||||
last_admin = Et voi poistaa viimeistä ylläpitäjää. Ylläpitäjiä tulee olla vähintään yksi.
|
||||
password_pwned = Valitsemasi salasana on <a target="_blank" rel="noopener noreferrer" href="%s">varastettujen salasanojen listalla</a>, eli se on paljastanut jossain julkisessa tietovuodossa. Kokeile asettaa eri salasana, ja jos käytät samaa salasanaa muissa palveluissa, vaihda kyseinen salasana.
|
||||
|
||||
[mail]
|
||||
view_it_on=Näytä %s
|
||||
link_not_working_do_paste=Eikö toimi? Yritä kopioida ja liittää se selaimeesi.
|
||||
link_not_working_do_paste=Eikö linkki toimi? Yritä kopioida ja liittää se selaimesi osoitepalkkiin.
|
||||
hi_user_x=Hei <b>%s</b>,
|
||||
|
||||
activate_account=Ole hyvä ja aktivoi tilisi
|
||||
|
@ -494,6 +508,15 @@ admin.new_user.user_info = Käyttäjätiedot
|
|||
activate_email.text = Vahvista sähköpostiosoitteesi napsauttamalla linkkiä aikaikkunan <b>%s</b> sisällä:
|
||||
admin.new_user.subject = Uusi käyttäjä %s rekisteröityi juuri
|
||||
register_notify.text_3 = Jos joku muu teki tämän tilin puolestasi, <a href="%s">aseta salasana</a> ensin.
|
||||
repo.transfer.subject_to_you = %s haluaa siirtää repon "%s" sinulle
|
||||
reply = tai vastaa tähän sähköpostiin suoraan
|
||||
issue.action.new = <b>@%[1]s</b> loi #%[2]d.
|
||||
team_invite.subject = %[1]s kutsui sinut liittymään organisaatioon %[2]s
|
||||
account_security_caution.text_2 = Jos se et ollut sinä, tilisi on vaarantunut. Ota yhteys tämän sivuston ylläpitoon.
|
||||
account_security_caution.text_1 = Jos se olit sinä, voit jättää tämän viestin huomiotta.
|
||||
issue.action.approve = <b>@%[1]s</b> hyväksyi tämän vetopyynnön.
|
||||
issue.action.review = <b>@%[1]s</b> kommentoi tätä vetopyyntöä.
|
||||
issue.action.ready_for_review = <b>@%[1]s</b> merkitsi tämän vetopyynnön valmiiksi katselmointia varten.
|
||||
|
||||
|
||||
|
||||
|
@ -561,6 +584,22 @@ auth_failed=Todennus epäonnistui: %v
|
|||
|
||||
target_branch_not_exist=Kohde branchia ei ole olemassa.
|
||||
Pronouns = Pronomini
|
||||
FullName = Koko nimi
|
||||
Description = Kuvaus
|
||||
Biography = Biografia
|
||||
Website = Verkkosivusto
|
||||
Location = Sijainti
|
||||
To = Haaran nimi
|
||||
still_own_repo = Tilisi omistaa yhden tai useamman repon, poista tai siirrä ne ensin.
|
||||
organization_leave_success = Olet poistunut organisaatiosta %s.
|
||||
enterred_invalid_repo_name = Kirjoittamasi repon nimi on virheellinen.
|
||||
openid_been_used = OpenID-osoite "%s" on jo käytetty.
|
||||
password_complexity = Salasana ei täytä monimutkaisuusvaatimuksia:
|
||||
still_has_org = Tilisi on jäsen yhdessä tai useamassa organisaatiossa, poistu niistä ensin.
|
||||
unable_verify_ssh_key = SSH-avainta ei voi vahvistaa, tarkista se mahdollisten virheiden varalta.
|
||||
url_error = `"%s" ei ole kelvollinen URL-osoite.`
|
||||
must_use_public_key = Antamasi avain on yksityinen avain. Älä lähetä yksityistä avaintasi mihinkään. Käytä sen sijaan julkista avaintasi.
|
||||
still_own_packages = Tilisi omistaa yhden tai useamman paketin, poista ne ensin.
|
||||
|
||||
|
||||
[user]
|
||||
|
@ -585,6 +624,16 @@ following.title.one = Seurataan
|
|||
following.title.few = Seurataan
|
||||
joined_on = Liittynyt %s
|
||||
public_activity.visibility_hint.self_private = Toimintasi näkyy vain sinulle ja instanssin ylläpitäjille. <a href="%s">Määritä</a>.
|
||||
block = Estä
|
||||
block_user = Estä käyttäjä
|
||||
code = Koodi
|
||||
unblock = Poista esto
|
||||
following_one = %d seurataan
|
||||
block_user.detail = Huomaa, että käyttäjän estämisellä on muita vaikutuksia, kuten:
|
||||
show_on_map = Näytä paikka kartalla
|
||||
form.name_chars_not_allowed = Käyttäjätunnus "%s" sisältää virheellisiä merkkejä.
|
||||
follow_blocked_user = Et voi seurata tätä käyttäjää, koska olet estänyt kyseisen käyttäjän tai kyseinen käyttäjä on estänyt sinut.
|
||||
disabled_public_activity = Käyttäjä on poistanut käytöstä toiminnan julkisen näkyvyyden.
|
||||
|
||||
|
||||
[settings]
|
||||
|
@ -597,10 +646,10 @@ avatar=Profiilikuva
|
|||
ssh_gpg_keys=SSH-/GPG-avaimet
|
||||
social=Sosiaaliset tilit
|
||||
applications=Sovellukset
|
||||
orgs=Hallitse organisaatioita
|
||||
orgs=Organisaatiot
|
||||
repos=Repot
|
||||
delete=Poista tili
|
||||
twofa=Kaksivaiheinen todennus
|
||||
twofa=Kaksivaiheinen todennus (TOTP)
|
||||
account_link=Linkitetyt tilit
|
||||
organization=Organisaatiot
|
||||
webauthn=Kaksivaiheinen todennus (Turva-avaimet)
|
||||
|
@ -610,9 +659,9 @@ password_username_disabled=Ei-paikalliset käyttäjät eivät voi muuttaa käytt
|
|||
full_name=Koko nimi
|
||||
website=Nettisivut
|
||||
location=Sijainti
|
||||
update_theme=Päivitä teema
|
||||
update_theme=Vaihda teema
|
||||
update_profile=Päivitä profiili
|
||||
update_language=Päivitä kieli
|
||||
update_language=Vaihda kieli
|
||||
update_language_success=Kieli on päivitetty.
|
||||
update_profile_success=Profiilisi on päivitetty.
|
||||
change_username=Käyttäjätunnuksesi on muutettu.
|
||||
|
@ -627,7 +676,7 @@ comment_type_group_milestone=Merkkipaalu
|
|||
comment_type_group_assignee=Osoitettu henkilölle
|
||||
comment_type_group_title=Otsikko
|
||||
comment_type_group_branch=Haara
|
||||
comment_type_group_time_tracking=Ajan seuranta
|
||||
comment_type_group_time_tracking=Ajanseuranta
|
||||
comment_type_group_deadline=Määräaika
|
||||
comment_type_group_dependency=Riippuvuus
|
||||
comment_type_group_lock=Lukituksen tila
|
||||
|
@ -640,7 +689,7 @@ keep_activity_private_popup=Tekee toiminnon näkyvän vain sinulle ja ylläpitä
|
|||
|
||||
lookup_avatar_by_mail=Hae profiilikuva sähköpostin perusteella
|
||||
federated_avatar_lookup=Ulkopuolinen profiilikuvan haku
|
||||
enable_custom_avatar=Ota käyttöön mukautettu profiilikuva
|
||||
enable_custom_avatar=Käytä mukautettua profiilikuvaa
|
||||
choose_new_avatar=Valitse uusi profiilikuva
|
||||
update_avatar=Päivitä profiilikuva
|
||||
delete_current_avatar=Poista nykyinen profiilikuva
|
||||
|
@ -655,9 +704,9 @@ password_change_disabled=Ei-lokaalit käyttäjät eivät voi päivittää salasa
|
|||
|
||||
emails=Sähköposti osoitteet
|
||||
manage_emails=Hallitse sähköpostiosoitteita
|
||||
manage_themes=Valitse oletusteema
|
||||
manage_openid=Hallitse OpenID osoitteita
|
||||
theme_desc=Tämä on sivuston oletusteemasi.
|
||||
manage_themes=Oletusteema
|
||||
manage_openid=OpenID-osoitteet
|
||||
theme_desc=Tätä teemaa käytetään verkkosivuston käyttöliittymässä, kun olet sisäänkirjautuneena.
|
||||
primary=Ensisijainen
|
||||
activated=Aktivoitu
|
||||
requires_activation=Vaatii aktivoinnin
|
||||
|
@ -673,7 +722,7 @@ theme_update_error=Valittua teemaa ei löydy.
|
|||
openid_deletion=Poista OpenID-osoite
|
||||
openid_deletion_success=OpenID-osoite on poistettu.
|
||||
add_new_email=Lisää uusi sähköpostiosoite
|
||||
add_new_openid=Lisää uusi OpenID URI
|
||||
add_new_openid=Lisää uusi OpenID-URI
|
||||
add_email=Lisää sähköpostiosoite
|
||||
add_openid=Lisää OpenID URI
|
||||
add_email_success=Uusi sähköpostiosoite on lisätty.
|
||||
|
@ -685,14 +734,14 @@ openid_desc=OpenID mahdollistaa todentamisen delegoinnin ulkopuoliselle palvelun
|
|||
manage_ssh_keys=Hallitse SSH-avaimia
|
||||
manage_gpg_keys=Hallitse GPG-avaimia
|
||||
add_key=Lisää avain
|
||||
ssh_desc=Nämä julkiset SSH-avaimet on liitetty tiliisi. Vastaavat yksityiset avaimet antavat täyden pääsyn repoihisi.
|
||||
gpg_desc=Nämä julkiset GPG-avaimet on liitetty tiliisi. Pidä yksityiset avaimet turvassa, koska ne mahdollistavat committien todentamisen.
|
||||
ssh_desc=Nämä julkiset SSH-avaimet on liitetty tiliisi. Vastaavat yksityiset avaimet antavat täyden pääsyn repoihisi. Vahvistettuja SSH-avaimia voi käyttää SSH-allekirjoitettujen Git-kommittien vahvistamiseen.
|
||||
gpg_desc=Nämä julkiset GPG-avaimet on liitetty tiliisi, ja niitä käytetään kommittien vahvistamiseen. Pidä yksityiset avaimet turvassa, koska ne mahdollistavat kommittien allekirjoittamisen sinun nimissä.
|
||||
ssh_helper=<strong>Tarvitsetko apua?</strong> Tutustu GitHubin oppaaseen <a href="%s">omien SSH-avainten luonnista</a> tai <a href="%s">yleisistä ongelmista</a>, joita voit kohdata SSH:n kanssa.
|
||||
gpg_helper=<strong>Tarvitsetko apua?</strong> Katso GitHubin opas <a href="%s">GPG</a>:stä.
|
||||
add_new_key=Lisää SSH avain
|
||||
add_new_gpg_key=Lisää GPG-avain
|
||||
key_content_ssh_placeholder=Alkaa sanoilla 'ssh-ed25519', 'ssh-rsa', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com', tai 'sk-ssh-ed25519@openssh.com'
|
||||
key_content_gpg_placeholder=Alkaa sanoilla '-----BEGIN PGP PUBLIC KEY BLOCK-----'
|
||||
key_content_ssh_placeholder=Alkaa sanoilla "ssh-ed25519", "ssh-rsa", "ecdsa-sha2-nistp256", "ecdsa-sha2-nistp384", "ecdsa-sha2-nistp521", "sk-ecdsa-sha2-nistp256@openssh.com" tai "sk-ssh-ed25519@openssh.com"
|
||||
key_content_gpg_placeholder=Alkaa sanoilla "-----BEGIN PGP PUBLIC KEY BLOCK-----"
|
||||
ssh_key_name_used=Samanniminen SSH avain on jo olemassa tililläsi.
|
||||
gpg_key_id_used=Julkinen GPG-avain samalla tunnuksella on jo olemassa.
|
||||
gpg_no_key_email_found=Tämä GPG-avain ei vastaa mitään tiliisi liitettyä aktivoitua sähköpostiosoitetta. Se voidaan silti lisätä, jos allekirjoitat annetun pääsymerkin.
|
||||
|
@ -704,7 +753,7 @@ gpg_token=Pääsymerkki
|
|||
gpg_token_help=Voit luoda allekirjoituksen käyttäen:
|
||||
gpg_token_code=echo "%s" | gpg -a --default-key %s --detach-sig
|
||||
gpg_token_signature=Panssaroitu GPG-allekirjoitus
|
||||
key_signature_gpg_placeholder=Alkaa sanoilla '-----BEGIN PGP SIGNATURE-----'
|
||||
key_signature_gpg_placeholder=Alkaa sanoilla "-----BEGIN PGP SIGNATURE-----"
|
||||
ssh_key_verified=Vahvistettu avain
|
||||
ssh_key_verified_long=Avain on vahvistettu pääsymerkillä ja sitä voidaan käyttää todentamaan commitit, jotka vastaavat tämän käyttäjän aktivoituja sähköpostiosoitteita.
|
||||
ssh_key_verify=Vahvista
|
||||
|
@ -712,7 +761,7 @@ ssh_token_required=Sinun täytyy antaa allekirjoitus alla olevalle pääsymerkil
|
|||
ssh_token=Pääsymerkki
|
||||
ssh_token_help=Voit luoda allekirjoituksen käyttäen:
|
||||
ssh_token_signature=Panssaroitu SSH-allekirjoitus
|
||||
key_signature_ssh_placeholder=Alkaa sanoilla '-----BEGIN SSH SIGNATURE-----'
|
||||
key_signature_ssh_placeholder=Alkaa sanoilla "-----BEGIN SSH SIGNATURE-----"
|
||||
subkeys=Aliavaimet
|
||||
key_id=Avain ID
|
||||
key_name=Avaimen nimi
|
||||
|
@ -730,7 +779,7 @@ can_read_info=Luku
|
|||
can_write_info=Kirjoitus
|
||||
show_openid=Näytä profiilissa
|
||||
hide_openid=Piilota profiilista
|
||||
ssh_disabled=SSH pois käytöstä
|
||||
ssh_disabled=SSH on pois käytöstä
|
||||
manage_social=Hallitse liitettyjä sosiaalisia tilejä
|
||||
|
||||
manage_access_token=Hallitse pääsymerkkejä
|
||||
|
@ -751,7 +800,7 @@ create_oauth2_application=Luo uusi OAuth2-sovellus
|
|||
create_oauth2_application_button=Luo sovellus
|
||||
oauth2_application_name=Sovelluksen nimi
|
||||
save_application=Tallenna
|
||||
oauth2_regenerate_secret=Luo secret uudelleen
|
||||
oauth2_regenerate_secret=Luo salaisuus uudelleen
|
||||
oauth2_regenerate_secret_hint=Kadotitko secretin?
|
||||
oauth2_application_edit=Muokkaa
|
||||
|
||||
|
@ -767,10 +816,10 @@ twofa_enrolled=Tiliisi on otettu käyttöön kaksivaiheinen vahvistus. Ota palau
|
|||
|
||||
webauthn_nickname=Nimimerkki
|
||||
|
||||
manage_account_links=Hallitse linkitettyjä tilejä
|
||||
manage_account_links=Yhdistetyt tilit
|
||||
manage_account_links_desc=Nämä ulkoiset tilit on linkitetty Forgejo tiliisi.
|
||||
link_account=Yhdistä tili
|
||||
remove_account_link=Poista linkitetty tili
|
||||
remove_account_link=Poista yhdistetty tili
|
||||
remove_account_link_desc=Linkitetyn tilin poistaminen peruuttaa pääsyn Forgejo-tiliisi linkitetyn tili kautta. Jatketaanko?
|
||||
remove_account_link_success=Linkitetty tili on poistettu.
|
||||
|
||||
|
@ -790,7 +839,7 @@ visibility.limited=Rajattu
|
|||
visibility.private=Yksityinen
|
||||
hints = Vihjeet
|
||||
user_block_success = Käyttäjä on estetty.
|
||||
biography_placeholder = Kerro jotain itsestäsi! (Voit käyttää Markdownia)
|
||||
biography_placeholder = Kerro jotain itsestäsi! (Markdown on tuettu)
|
||||
keep_activity_private = Piilota toiminta profiilisivulla
|
||||
update_oauth2_application_success = Päivitit OAuth2-sovelluksen.
|
||||
webauthn_delete_key = Poista turva-avain
|
||||
|
@ -810,7 +859,7 @@ location_placeholder = Jaa likimääräinen sijaintisi muiden kanssa
|
|||
retype_new_password = Vahvista uusi salasana
|
||||
create_oauth2_application_success = Loit uuden OAuth2-sovelluksen.
|
||||
repos_none = Et omista yhtäkään repositoriota.
|
||||
visibility.limited_tooltip = Näkyvissä vain tunnistautuneille käyttäjille
|
||||
visibility.limited_tooltip = Näkyvissä vain kirjautuneille käyttäjille
|
||||
email_notifications.disable = Poista sähköposti-ilmoitukset käytöstä
|
||||
webauthn_register_key = Lisää turva-avain
|
||||
blocked_users = Estetyt käyttäjät
|
||||
|
@ -846,6 +895,30 @@ hidden_comment_types_description = Tässä valittuja kommenttityyppejä ei näyt
|
|||
webauthn_alternative_tip = Saatat haluta määrittää lisätodennusmenetelmän.
|
||||
twofa_disable = Poista kaksivaiheinen todennus käytöstä
|
||||
twofa_disable_desc = Kaksivaiheisen todennuksen poistaminen asettaa tilisi aiempaa suurempaan uhkaan. Jatketaanko?
|
||||
update_language_not_found = Kieli "%s" ei ole käytettävissä.
|
||||
change_username_prompt = Huomio: Käyttäjätunnuksen vaihtaminen muuttaa myös tilisi URL-osoitteen.
|
||||
oauth2_client_secret_hint = Tätä salaisuutta ei näytetä uudelleen, kun olet poistunut sivulta tai päivittänyt sivun. Varmista, että olet ottanut salaisuuden talteen.
|
||||
blocked_since = Estetty %s lähtien
|
||||
user_unblock_success = Käyttäjän esto on poistettu.
|
||||
oauth2_redirect_uris = Uudelleenohjaus-URI:t. Käytä uutta riviä (newline) jokaista URI:a kohden.
|
||||
oauth2_client_secret = Asiakkaan salaisuus
|
||||
verify_ssh_key_success = SSH-avain "%s" on vahvistettu.
|
||||
change_username_redirect_prompt = Vanha käyttäjätunnus uudelleenohjaa, kunnes joku muu ottaa käyttäjätunnuksen käyttönsä.
|
||||
uploaded_avatar_is_too_big = Lähetetyn tiedoston koko (%d KiB) ylittää enimmäiskoon (%d KiB).
|
||||
ssh_key_been_used = Tämä SSH-avain on jo lisätty palvelimelle.
|
||||
verify_gpg_key_success = GPG-avain "%s" on vahvistettu.
|
||||
add_key_success = SSH-avain "%s" on lisätty.
|
||||
add_gpg_key_success = GPG-avain "%s" on lisätty.
|
||||
ssh_key_deletion_success = SSH-avain on poistettu.
|
||||
valid_until_date = Kelvollinen %s asti
|
||||
oauth2_client_id = Asiakkaan tunniste
|
||||
email_notifications.onmention = Ilmoitus vain maininnasta
|
||||
email_notifications.submit = Aseta valinta
|
||||
email_notifications.andyourown = Ja omat ilmoitukset
|
||||
key_state_desc = Tätä avainta on käytetty viimeisen 7 päivän aikana
|
||||
oauth2_application_create_description = OAuth2-sovellukset mahdollistavat kolmannen osapuolen sovelluksen pääsyn tilillesi tässä instanssissa.
|
||||
oauth2_confidential_client = Luottamuksellinen sovellus. Valitse sovelluksille, jotka pitävät salaisuuden luottamuksellisena, kuten web-sovelluksille. Älä valitse natiiveille sovelluksille mukaan lukien työpöytä- ja mobiilisovellukset.
|
||||
ssh_key_deletion_desc = SSH-avaimen poistaminen kumoaa pääsyn tilillesi kyseistä avainta käyttäen. Jatketaanko?
|
||||
|
||||
[repo]
|
||||
owner=Omistaja
|
||||
|
@ -871,7 +944,7 @@ repo_gitignore_helper=Valitse .gitignore-mallit
|
|||
issue_labels=Ongelmien tunnisteet
|
||||
issue_labels_helper=Valitse pohja ongelmien nimilapuille.
|
||||
license=Lisenssi
|
||||
license_helper=Valitse lisenssitiedosto.
|
||||
license_helper=Valitse lisenssitiedosto
|
||||
readme=README
|
||||
auto_init=Alusta repo (Luo .gitignore, License ja README)
|
||||
create_repo=Luo repo
|
||||
|
@ -935,7 +1008,7 @@ filter_branch_and_tag=Suodata haara tai tagi
|
|||
branches=Branchit
|
||||
tags=Tagit
|
||||
issues=Ongelmat
|
||||
pulls=Pull-pyynnöt
|
||||
pulls=Vetopyynnöt
|
||||
project_board=Projektit
|
||||
packages=Paketit
|
||||
labels=Tunnisteet
|
||||
|
@ -1270,7 +1343,7 @@ activity.new_issues_count_1=Uusi ongelma
|
|||
activity.new_issues_count_n=uutta ongelmaa
|
||||
activity.new_issue_label=Avoinna
|
||||
activity.unresolved_conv_label=Auki
|
||||
activity.published_release_label=Julkaistu
|
||||
activity.published_release_label=Julkaisu
|
||||
activity.git_stats_pushed_1=on työntänyt
|
||||
activity.git_stats_file_1=%d tiedosto
|
||||
activity.git_stats_file_n=%d tiedostoa
|
||||
|
@ -1308,16 +1381,16 @@ settings.external_wiki_url_desc=Wiki-välilehden klikkaus ohjaa vierailijat ulko
|
|||
settings.tracker_url_format=Ulkoisen vikaseurannan URL muoto
|
||||
settings.tracker_issue_style.numeric=Numeerinen
|
||||
settings.tracker_issue_style.alphanumeric=Aakkosnumeerinen
|
||||
settings.enable_timetracker=Ota käyttöön ajan seuranta
|
||||
settings.enable_timetracker=Käytä ajan seurantaa
|
||||
settings.danger_zone=Vaaravyöhyke
|
||||
settings.new_owner_has_same_repo=Uudella omistajalla on jo samanniminen repo. Ole hyvä ja valitse toinen nimi.
|
||||
settings.transfer.title=Siirrä omistajuus
|
||||
settings.transfer_form_title=Syötä repon nimi vahvistuksena:
|
||||
settings.transfer_notices_3=- Jos arkisto on yksityinen ja se siirretään yksittäiselle käyttäjälle, tämä toiminto varmistaa, että käyttäjällä on ainakin lukuoikeudet (ja muuttaa käyttöoikeuksia tarvittaessa).
|
||||
settings.transfer_owner=Uusi omistaja
|
||||
settings.wiki_delete=Poista Wiki data
|
||||
settings.wiki_delete=Poista wikidata
|
||||
settings.wiki_delete_desc=Repon wikin data poistaminen on pysyvä eikä voi peruuttaa.
|
||||
settings.confirm_wiki_delete=Wiki datan poistaminen
|
||||
settings.confirm_wiki_delete=Poista wikidata
|
||||
settings.wiki_deletion_success=Repon wiki data on poistettu.
|
||||
settings.delete=Poista tämä repo
|
||||
settings.delete_desc=Repon poistaminen on pysyvä eikä voi peruuttaa.
|
||||
|
@ -1338,7 +1411,7 @@ settings.webhook.body=Sisältö
|
|||
settings.githook_edit_desc=Jos koukku ei ole käytössä, esitellään esimerkkisisältö. Sisällön jättäminen tyhjäksi arvoksi poistaa tämän koukun käytöstä.
|
||||
settings.githook_name=Koukun nimi
|
||||
settings.githook_content=Koukun sisältö
|
||||
settings.update_githook=Päivitys koukku
|
||||
settings.update_githook=Päivitä koukku
|
||||
settings.payload_url=Kohde URL
|
||||
settings.http_method=HTTP-menetelmä
|
||||
settings.secret=Salaus
|
||||
|
@ -1360,7 +1433,7 @@ settings.event_push_desc=Git push repoon.
|
|||
settings.event_repository=Repo
|
||||
settings.event_repository_desc=Repo luotu tai poistettu.
|
||||
settings.event_header_issue=Ongelmien tapahtumat
|
||||
settings.event_issues=Ongelmat
|
||||
settings.event_issues=Muokkaus
|
||||
settings.event_issues_desc=Ongelma avattu, suljettu, avattu uudelleen tai muokattu.
|
||||
settings.event_issue_assign=Ongelma määritetty
|
||||
settings.event_issue_assign_desc=Ongelma osoitettu tai osoitus poistettu.
|
||||
|
@ -1368,7 +1441,7 @@ settings.event_issue_label_desc=Ongelman tunnisteet päivitetty tai tyhjennetty.
|
|||
settings.event_issue_milestone_desc=Merkkipaalu lisätty, poistettu tai muokattu.
|
||||
settings.event_issue_comment_desc=Ongelman kommentti luotu, muokattu tai poistettu.
|
||||
settings.event_header_pull_request=Vetopyyntöjen tapahtumat
|
||||
settings.event_pull_request=Vetopyyntö
|
||||
settings.event_pull_request=Muokkaus
|
||||
settings.event_package_desc=Paketti on luotu tai poistettu repossa.
|
||||
settings.active_helper=Tiedot käynnistetyistä tapahtumista lähetetään tähän webkoukun URL-osoitteeseen.
|
||||
settings.add_hook_success=Uusi webkoukku on lisätty.
|
||||
|
@ -1436,7 +1509,7 @@ settings.lfs=LFS
|
|||
settings.lfs_filelist=LFS-tiedostot tallennettu tähän repoon
|
||||
settings.lfs_no_lfs_files=LFS-tiedostoja ei ole tallennettu tähän repoon.
|
||||
settings.lfs_findcommits=Etsi commitit
|
||||
settings.lfs_lfs_file_no_commits=LFS-tiedostolle ei löytynyt committeja
|
||||
settings.lfs_lfs_file_no_commits=LFS-tiedostolle ei löytynyt kommitteja
|
||||
settings.lfs_noattribute=Tällä polulla ei ole lukittavaa attribuuttia oletushaarassa
|
||||
settings.lfs_delete=Poista LFS-tiedosto OID:lla %s
|
||||
settings.lfs_delete_warning=LFS-tiedoston poistaminen voi aiheuttaa 'object does not exists'-virheitä checkouttattaessa. Oletko varma?
|
||||
|
@ -1474,7 +1547,7 @@ diff.view_file=Näytä tiedosto
|
|||
diff.file_image_width=Leveys
|
||||
diff.file_image_height=Korkeus
|
||||
diff.file_byte_size=Koko
|
||||
diff.comment.markdown_info=Muotoilu markdownilla tuettu.
|
||||
diff.comment.markdown_info=Muotoilu Markdownilla on tuettu.
|
||||
diff.comment.add_single_comment=Lisää yksittäinen kommentti
|
||||
diff.comment.add_review_comment=Lisää kommentti
|
||||
diff.comment.start_review=Aloita tarkistus
|
||||
|
@ -1837,7 +1910,7 @@ migrate.gitlab.description = Tee migraatio gitlab.comista tai muista GitLab-inst
|
|||
migrate.gitea.description = Tee migraatio gitea.comista tai muista Gitea-instansseista.
|
||||
repo_gitignore_helper_desc = Valitse mitä tiedostoja ei seurata yleisimpien kielten mallipohjista. Tyypilliset artefaktit, joita eri kielten koostamistyökalut tuottavat, lisätään .gitignore-tiedostoon oletusarvoisesti.
|
||||
milestones.filter_sort.latest_due_date = Kaukaisin määräpäivä
|
||||
license_helper_desc = Lisenssi määrää, mitä muut voivat ja eivät voi tehdä koodillasi. Etkö ole varma, mikä lisenssi soveltuu projektillesi? Lue <a target="_blank" rel="noopener noreferrer" href="%s">ohje lisenssin valinnasta.</a>
|
||||
license_helper_desc = Lisenssi määrää, mitä muut voivat ja eivät voi tehdä koodillasi. Etkö ole varma, mikä lisenssi soveltuu projektillesi? Lue <a target="_blank" rel="noopener noreferrer" href="%s">ohje lisenssin valinnasta</a>.
|
||||
milestones.filter_sort.earliest_due_data = Lähin määräpäivä
|
||||
issues.filter_type.reviewed_by_you = Katselmoitu toimestasi
|
||||
settings.units.overview = Yleisnäkymä
|
||||
|
@ -1847,6 +1920,97 @@ settings.units.units = Yksiköt
|
|||
settings.update_settings_no_unit = Repositorion tulisi sallia edes jonkinlainen vuorovaikutus.
|
||||
settings.units.add_more = Ota lisää käyttöön
|
||||
settings.add_team_success = Tiimillä on nyt pääsy repositorioon.
|
||||
settings.use_external_issue_tracker = Käytä ulkoista ongelmienseurantaa
|
||||
settings.transfer_started = Tämä repositorio on merkitty siirrettäväksi ja se odottaa vahvistusta käyttäjältä "%s"
|
||||
signing.wont_sign.pubkey = Kommittia ei allekirjoiteta, koska sinulla ei ole yhtäkään julkista avainta liitetty tiliisi.
|
||||
settings.transfer_succeed = Repositorio on siirretty.
|
||||
activity.git_stats_on_default_branch = Haarassa %s,
|
||||
settings.tracker_issue_style.regexp = Säännöllinen lauseke
|
||||
wiki.reserved_page = Wikisivun nimi "%s" on varattu.
|
||||
pulls.recently_pushed_new_branches = Työnsit haaraan <a href="%[3]s"><strong>%[1]s</strong></a> %[2]s
|
||||
signing.will_sign = Tämä kommitti allekirjoitetaan avaimella "%s".
|
||||
signing.wont_sign.never = Kommitit eivät ole koskaan allekirjoitettuja.
|
||||
settings.mirror_settings.direction = Suunta
|
||||
settings.mirror_settings.push_mirror.remote_url = Git-etärepon URL-osoite
|
||||
settings.issues_desc = Käytä repositorion ongelmienseurantaa
|
||||
settings.use_internal_issue_tracker = Käytä sisäänrakennettua ongelmienseurantaa
|
||||
settings.external_tracker_url = Ulkoisen ongelmienseurannan URL-osoite
|
||||
settings.transfer_abort_success = Repositorion siirto käyttäjälle %s peruttiin.
|
||||
settings.transfer_quota_exceeded = Uuden omistajan (%s) tilakiintiö on täynnä. Repositoriota ei ole siirretty.
|
||||
settings.projects_desc = Käytä repositorion projekteja
|
||||
settings.releases_desc = Käytä repositorion julkaisuja
|
||||
settings.packages_desc = Käytä repositorion pakettirekisteriä
|
||||
activity.git_stats_push_to_branch = haaraan %s ja
|
||||
wiki.wiki_page_revisions = Sivun versiot
|
||||
settings.wiki_desc = Käytä repositorion wikiä
|
||||
signing.wont_sign.always = Kommitit ovat aina allekirjoitettuja.
|
||||
milestones.edit_subheader = Merkkipaalut järjestävät ongelmia ja seuraavat edistymistä.
|
||||
view_git_blame = Näytä git blame
|
||||
editor.push_rejected = Tämä muutos hylättiin palvelimen toimesta. Tarkista Git-koukut.
|
||||
editor.push_rejected_no_message = Tämä muutos hylättiin palvelimen toimesta ilman viestiä. Tarkista Git-koukut.
|
||||
editor.upload_file_is_locked = Tiedoston "%s" on lukinnut %s.
|
||||
editor.fail_to_update_file = Tiedoston "%s" päivittäminen/luominen epäonnistui.
|
||||
diff.protected = Suojattu
|
||||
releases.desc = Seuraa projektin versioita ja latauksia.
|
||||
settings.protect_patterns = Kaavat
|
||||
branch.new_branch_from = Luo uusi haara kohteesta "%s"
|
||||
settings.matrix.message_type = Viestin tyyppi
|
||||
diff.committed_by = kommitoinut
|
||||
invisible_runes_line = `Tällä rivillä on näkymättömiä Unicode-merkkejä`
|
||||
editor.fork_before_edit = Sinun täytyy forkata tämä repo tehdäksesi tai ehdottaaksesi muutoksia tähän tiedostoon.
|
||||
editor.file_deleting_no_longer_exists = Poistettava tiedosto, "%s", ei ole enää olemassa tässä repossa.
|
||||
editor.add_tmpl.filename = tiedostonimi
|
||||
editor.fail_to_apply_patch = Ei voitu toteuttaa paikkaa "%s"
|
||||
editor.propose_file_change = Ehdota tiedostomuutosta
|
||||
editor.new_branch_name = Nimeä uusi haara tätä kommittia varten
|
||||
editor.new_branch_name_desc = Uuden haaran nimi…
|
||||
editor.file_editing_no_longer_exists = Muokattava tiedosto, "%s", ei ole enää olemassa tässä repossa.
|
||||
editor.cannot_commit_to_protected_branch = Suojattuun haaraan "%s" ei voi kommitoida.
|
||||
issues.remove_request_review = Poista katselmointipyyntö
|
||||
issues.remove_request_review_block = Katselmointipyyntöä ei voi poistaa
|
||||
pulls.require_signed_wont_sign = Tämä haara vaatii allekirjoitetut kommitit, mutta tätä yhdistämistä ei allekirjoiteta
|
||||
pulls.push_rejected_summary = Koko hylkäysviesti
|
||||
settings.unarchive.button = Poista repon arkistointi
|
||||
release.type_attachment = Liite
|
||||
tag.create_tag_from = Luo uusi tagi kohteesta"%s"
|
||||
topic.count_prompt = Voit valita korkeintaan 25 aihetta
|
||||
settings.require_signed_commits = Vaadi allekirjoitetut kommitit
|
||||
editor.push_rejected_summary = Koko hylkäysviesti:
|
||||
release.title = Julkaisun nimi
|
||||
release.tag_helper_existing = Olemassa oleva tagi.
|
||||
file_view_source = Näytä lähde
|
||||
diff.bin_not_shown = Binääritiedostoa ei näytetä.
|
||||
release.system_generated = Tämä liite on luotu automaattisesti.
|
||||
invisible_runes_header = `Tämä tiedosto sisältää näkymättömiä Unicode-merkkejä`
|
||||
editor.must_have_write_access = Sinulla täytyy olla kirjoitusoikeus tehdäksesi tai ehdottaaksesi muutoksia tähän tiedostoon.
|
||||
issues.re_request_review = Pyydä katselmointia uudelleen
|
||||
pulls.status_checks_details = Yksityiskohdat
|
||||
release.title_empty = Nimi ei voi olla tyhjä.
|
||||
archive.title = Tämä repo on arkistoitu. Voit katsella sen sisältämiä tiedostoja ja kloonata repon, mutta et voi pushata, avata ongelmia tai luoda vetopyyntöjä.
|
||||
reactions_more = ja %d lisää
|
||||
mirror_address = Kloonaa URL-osoitteesta
|
||||
migrate_items_merge_requests = Yhdistämispyynnöt
|
||||
stars_remove_warning = Tämä poistaa kaikki tähdet tästä reposta.
|
||||
archive.issue.nocomment = Tämä repo on arkistoitu. Et voi kommentoida ongelmia.
|
||||
archive.pull.nocomment = Tämä repo on arkistoitu. Et voi kommentoida vetopyyntöjä.
|
||||
settings.webhook_deletion_desc = Webkoukun poistaminen poistaa sen asetukset ja toimitushistorian. Jatketaanko?
|
||||
settings.discord_icon_url.exceeds_max_length = Kuvakkeen URL-osoite voi sisältää enintään 2048 merkkiä
|
||||
settings.event_wiki_desc = Wiki-sivu luotu, nimetty uudelleen, muokattu tai poistettu.
|
||||
settings.event_pull_request_desc = Vetopyyntö avattu, suljettu, avattu uudelleen tai muokattu.
|
||||
settings.protect_branch_name_pattern = Suojatun haaran nimen kaava
|
||||
issues.dependency.add_error_dep_not_same_repo = Molempien ongelmien tulee olla samassa repossa.
|
||||
settings.event_release = Julkaisu
|
||||
pulls.merge_pull_request = Luo yhdistämiskommitti
|
||||
settings.pull_mirror_sync_quota_exceeded = Kiintiö ylitetty, ei vedetä muutoksia.
|
||||
settings.wiki_rename_branch_main_notices_1 = Tätä toimintoa <strong>EI VOI</strong> perua.
|
||||
settings.webhook.test_delivery_desc_disabled = Aktivoi webkoukku testataksesi sitä tekaistulla tapahtumalla.
|
||||
settings.discord_icon_url = Kuvakkeen URL-osoite
|
||||
settings.archive.branchsettings_unavailable = Haaran asetukset eivät ole saatavilla arkistoiduissa repoissa.
|
||||
pulls.ready_for_review = Valmiina katselmointiin?
|
||||
issues.time_spent_total = Käytetty kokonaisaika
|
||||
settings.webhook.test_delivery_desc = Testaa tätä webkoukkua tekaistulla tapahtumalla.
|
||||
pulls.switch_comparison_type = Vaihda vertailutyyppiä
|
||||
settings.hooks_desc = Webkoukut tekevät automaattisesti HTTP POST -pyyntöjä palvelimelle, kun jotkin Forgejo-tapahtumat käynnistyvät. Lue lisää <a target="_blank" rel="noopener noreferrer" href="%s">webkoukkujen oppaasta</a>.
|
||||
|
||||
|
||||
|
||||
|
@ -1854,6 +2018,10 @@ settings.add_team_success = Tiimillä on nyt pääsy repositorioon.
|
|||
component_loading_info = Tämä saattaa kestää hetken…
|
||||
component_failed_to_load = Odottamaton virhe.
|
||||
component_loading = Ladataan %s...
|
||||
contributors.what = kontribuutiot
|
||||
recent_commits.what = viimeisimmät kommitit
|
||||
code_frequency.what = koodifrekvenssi
|
||||
component_loading_failed = Ei voitu ladata %s
|
||||
|
||||
[org]
|
||||
org_name_holder=Organisaation nimi
|
||||
|
@ -1925,7 +2093,7 @@ teams.members=Tiimin jäsenet
|
|||
teams.update_settings=Päivitä asetukset
|
||||
teams.delete_team=Poista tiimi
|
||||
teams.add_team_member=Lisää tiimin jäsen
|
||||
teams.delete_team_title=Tiimin poisto
|
||||
teams.delete_team_title=Poista tiimi
|
||||
teams.delete_team_desc=Tiimin poisto peruuttaa sen jäseniltä oikeuden päästä tiimin varastoihin. Jatketaanko?
|
||||
teams.delete_team_success=Tiimi on poistettu.
|
||||
teams.read_permission_desc=Tämä tiimi myöntää jäsenille <strong>Luku</strong> oikeudet: tiimin jäsenet voivat katsella ja kloonata tiimin varastoja.
|
||||
|
@ -1944,7 +2112,7 @@ form.create_org_not_allowed = Sinulla ei ole oikeutta luoda organisaatiota.
|
|||
teams.leave.detail = Haluatko varmasti poistua tiimistä "%s"?
|
||||
teams.invite.title = Sinut on kutsuttu tiimiin <strong>%s</strong> organisaatiossa <strong>%s</strong>.
|
||||
teams.add_duplicate_users = Käyttäjä on jo tiimijäsen.
|
||||
settings.visibility.limited = Rajattu (näkyvissä vain tunnistautuneille käyttäjille)
|
||||
settings.visibility.limited = Rajattu (näkyvissä vain kirjautuneille käyttäjille)
|
||||
code = Koodi
|
||||
teams.remove_all_repos_title = Poista kaikki tiimin repot
|
||||
form.name_reserved = Organisaation nimi "%s" on varattu.
|
||||
|
@ -1952,6 +2120,17 @@ settings.delete_org_desc = Organisaatio poistetaan pysyvästi. Jatketaanko?
|
|||
team_access_desc = Repositorion käyttö
|
||||
teams.specific_repositories = Määritetyt repositoriot
|
||||
open_dashboard = Avaa kojelauta
|
||||
teams.remove_all_repos_desc = Tämä poistaa kaikki repot tiimiltä.
|
||||
teams.add_all_repos_desc = Tämä lisää kaikki organisaation repot tiimille.
|
||||
team_unit_disabled = (Pois käytöstä)
|
||||
follow_blocked_user = Et voi seurata tätä organisaatiota, koska organisaatio on estänyt sinut.
|
||||
teams.can_create_org_repo = Luo repoja
|
||||
teams.none_access = Ei pääsyä
|
||||
form.name_pattern_not_allowed = Kaava "%s" ei ole sallittu organisaation nimessä.
|
||||
settings.email = Yhteydenoton sähköposti
|
||||
teams.general_access = Mukautettu pääsy
|
||||
settings.change_orgname_redirect_prompt = Vanha nimi uudelleenohjaa, kunnes nimi otetaan uudelleen käyttöön.
|
||||
settings.change_orgname_prompt = Huomio: organisaation nimen vaihtaminen vaihtaa myös organisaation URL-osoitteen ja vapauttaa vanhan nimen.
|
||||
|
||||
[admin]
|
||||
dashboard=Kojelauta
|
||||
|
@ -1975,8 +2154,8 @@ dashboard.operation_switch=Vaihda
|
|||
dashboard.operation_run=Suorita
|
||||
dashboard.delete_inactive_accounts=Poista kaikki aktivoimattomat käyttäjät
|
||||
dashboard.delete_repo_archives=Poista kaikki repojen arkistot (ZIP, TAR.GZ, jne..)
|
||||
dashboard.server_uptime=Palvelimen Uptime
|
||||
dashboard.current_goroutine=Nykyiset Goroutinet
|
||||
dashboard.server_uptime=Palvelimen uptime
|
||||
dashboard.current_goroutine=Nykyiset goroutinet
|
||||
dashboard.current_memory_usage=Nykyinen muistinkäyttö
|
||||
dashboard.total_memory_allocated=Yhteensä muistia varattu
|
||||
dashboard.memory_obtained=Muistia saatu
|
||||
|
@ -2152,7 +2331,7 @@ config.default_visibility_organization=Uuden organisaation oletusnäkyvyys
|
|||
|
||||
config.webhook_config=Webkoukkujen asetukset
|
||||
config.queue_length=Jonon pituus
|
||||
config.deliver_timeout=Toimitus aikakatkaisu
|
||||
config.deliver_timeout=Toimituksen aikakatkaisu
|
||||
|
||||
config.mailer_enabled=Käytössä
|
||||
config.mailer_name=Nimi
|
||||
|
@ -2290,6 +2469,17 @@ config.custom_conf = Asetustiedoston polku
|
|||
config.reset_password_code_lives = Palautuskoodin vanhenemisaika
|
||||
monitor.processes_count = %d prosessia
|
||||
config.default_allow_create_organization = Salli organisaatioiden luominen oletuksena
|
||||
config.test_mail_sent = Testisähköposti on lähetetty osoitteeseen "%s".
|
||||
config.mailer_sendmail_timeout = Sendmailin aikakatkaisu
|
||||
dashboard.cron.started = Käynnistetty Cron: %[1]s
|
||||
dashboard.task.process = Tehtävä: %[1]s
|
||||
dashboard.task.error = Virhe tehtävässä: %[1]s: %[3]s
|
||||
dashboard.task.unknown = Tuntematon tehtävä: %[1]s
|
||||
dashboard.cron.error = Virhe Cronissa: %s: %[3]s
|
||||
dashboard.task.started = Käynnistetty tehtävä: %[1]s
|
||||
dashboard.cron.finished = Cron: %[1]s on valmistunut
|
||||
dashboard.resync_all_sshkeys = Päivitä ".ssh/authorized_keys"-tiedosto Forgejo:n SSH-avaimilla.
|
||||
dashboard.cleanup_packages = Siivoa vanhentuneet paketit
|
||||
|
||||
|
||||
[action]
|
||||
|
@ -2328,6 +2518,7 @@ raw_minutes=minuuttia
|
|||
default_message=Pudota tiedostot tähän tai klikkaa aluetta ladataksesi tiedoston.
|
||||
invalid_input_type=Tämäntyyppisiä tiedostoja ei voi ladata.
|
||||
remove_file=Poista tiedosto
|
||||
file_too_big = Tiedoston koko ({{filesize}} Mt) ylittää enimmäisrajan ({{maxFilesize}} Mt).
|
||||
|
||||
[notification]
|
||||
notifications=Ilmoitukset
|
||||
|
@ -2345,9 +2536,10 @@ subscriptions = Tilaukset
|
|||
|
||||
[gpg]
|
||||
error.no_committer_account=Committaajan sähköpostiosoitteeseen ei ole linkitetty tiliä
|
||||
error.not_signed_commit=Ei allekirjoitettu committi
|
||||
error.not_signed_commit=Kommitti ei ole allekirjoitettu
|
||||
error.extract_sign = Allekirjoituksen purkaminen epäonnistui
|
||||
default_key = Allekirjoitettu oletusavaimella
|
||||
error.failed_retrieval_gpg_keys = Ei saatu yhtäkään kommitin tekijän tiliin liitettyä avainta
|
||||
|
||||
[units]
|
||||
unit = Yksikkö
|
||||
|
@ -2452,6 +2644,26 @@ settings.link.success = Repositorion linkki päivitettiin onnistuneesti.
|
|||
settings.link.button = Päivitä repositorion linkki
|
||||
owner.settings.cleanuprules.preview.overview = %d pakettia on ajastettu poistettavaksi.
|
||||
owner.settings.cargo.initialize.success = Cargo-indeksi luotiin onnistuneesti.
|
||||
vagrant.install = Lisää Vagrant-boksi suorittamalla seuraava komento:
|
||||
rubygems.dependencies.development = Kehitysriippuvuudet
|
||||
owner.settings.cleanuprules.preview = Siivoussäännön esikatselu
|
||||
npm.dependencies.development = Kehitysriippuvuudet
|
||||
composer.dependencies.development = Kehitysriippuvuudet
|
||||
owner.settings.cleanuprules.success.update = Siivoussääntö on päivitetty.
|
||||
owner.settings.cleanuprules.success.delete = Siivoussääntö on poistettu.
|
||||
settings.link = Linkitä tämä paketti repositorioon
|
||||
maven.download = Lataa riippuvuus suorittamalla komentorivillä:
|
||||
registry.documentation = Lisätietoja %s-rekisteristä on <a target="_blank" rel="noopener noreferrer" href="%s">dokumentaatiossa</a>.
|
||||
owner.settings.chef.keypair.description = Avainpari vaaditaan Chef-rekisteriin tunnistautumista varten. Jos olet luonut avainparin aiemmin, uuden avainparin luominen hylkää aiemman avainparin.
|
||||
owner.settings.cleanuprules.keep.pattern = Säilytä kaavaa vastaavat versiot
|
||||
owner.settings.cleanuprules.pattern_full_match = Toteuta kaavio paketin koko nimeen
|
||||
owner.settings.cleanuprules.keep.title = Näitä sääntöjä vastaavat versiot säilytetään, vaikka ne vastaisivat alla olevaa poistosääntöä.
|
||||
owner.settings.cleanuprules.keep.count = Säilytä viimeisimmät
|
||||
owner.settings.cleanuprules.remove.pattern = Poista kaavaa vastaavat versiot
|
||||
owner.settings.cleanuprules.keep.pattern.container = Viimeisin (<code>latest</code>) versio säilytetään aina Container-paketeista.
|
||||
owner.settings.cleanuprules.remove.title = Näitä sääntöjä vastaavat versiot poistetaan, ellei sääntö yläpuolella käske säilyttää niitä.
|
||||
owner.settings.cleanuprules.remove.days = Poista versiot, jotka ovat vanhempia kuin
|
||||
arch.pacman.helper.gpg = Lisää luottamusvarmenne pacmanille:
|
||||
|
||||
[secrets]
|
||||
creation.failed = Salaisuuden lisääminen epäonnistui.
|
||||
|
@ -2593,3 +2805,4 @@ pull_kind = Etsi pull-vetoja...
|
|||
commit_kind = Etsi kommitteja...
|
||||
fuzzy = Sumea
|
||||
runner_kind = Etsi ajajia...
|
||||
code_search_by_git_grep = Nykyiset koodin hakutulokset pohjautuvat komentoon "git grep". Parempia tuloksia on mahdollista saada, jos sivuston ylläpitäjä ottaa käyttöön koodin indeksoijan.
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -165,6 +165,7 @@ error413 = Votre quota est épuisé.
|
|||
new_repo.title = Nouveau dépôt
|
||||
new_migrate.link = Nouvelle migration
|
||||
new_org.link = Nouvelle organisation
|
||||
copy_path = Copier le chemin
|
||||
|
||||
[aria]
|
||||
navbar=Barre de navigation
|
||||
|
@ -811,7 +812,7 @@ manage_emails=Gérer les adresses courriels
|
|||
manage_themes=Thème par défaut
|
||||
manage_openid=Adresses OpenID
|
||||
email_desc=Votre adresse courriel principale sera utilisée pour les notifications, la récupération de mot de passe et, à condition qu'elle ne soit pas cachée, les opérations Git basées sur le Web.
|
||||
theme_desc=Ce sera votre thème par défaut sur le site.
|
||||
theme_desc=Ce thème sera utilisé pour l'interface web lorsque vous êtes authentifié.
|
||||
primary=Principale
|
||||
activated=Activé
|
||||
requires_activation=Nécessite une activation
|
||||
|
@ -1055,7 +1056,7 @@ language.localization_project = Aidez-nous à traduire Forgejo dans votre langue
|
|||
language.description = Cette langue sera enregistrée dans votre compte et utilisée comme langue par défaut après votre connexion.
|
||||
|
||||
[repo]
|
||||
new_repo_helper=Un dépôt contient tous les fichiers d’un projet, ainsi que l’historique de leurs modifications. Vous avez déjà ça ailleurs ? <a href="%s">Migrez-le ici.</a>
|
||||
new_repo_helper=Un dépôt contient tous les fichiers d’un projet, ainsi que l’historique de leurs modifications. Vous avez déjà ça ailleurs ? <a href="%s">Migrez-le ici.</a>.
|
||||
owner=Propriétaire
|
||||
owner_helper=Certaines organisations peuvent ne pas apparaître dans la liste déroulante en raison d'une limite maximale du nombre de dépôts.
|
||||
repo_name=Nom du dépôt
|
||||
|
@ -1095,7 +1096,7 @@ issue_labels=Étiquettes
|
|||
issue_labels_helper=Sélectionner un jeu d'étiquettes
|
||||
license=Licence
|
||||
license_helper=Sélectionner une licence
|
||||
license_helper_desc=Une licence réglemente ce que les autres peuvent ou ne peuvent pas faire avec votre code. Vous ne savez pas laquelle est la bonne pour votre projet ? Comment <a target="_blank" rel="noopener noreferrer" href="%s">choisir une licence.</a>
|
||||
license_helper_desc=Une licence réglemente ce que les autres peuvent ou ne peuvent pas faire avec votre code. Vous ne savez pas laquelle est la bonne pour votre projet ? Comment <a target="_blank" rel="noopener noreferrer" href="%s">choisir une licence.</a>.
|
||||
readme=LISEZMOI
|
||||
readme_helper=Choisissez un modèle de fichier LISEZMOI
|
||||
readme_helper_desc=Le README est l'endroit idéal pour décrire votre projet et accueillir des contributeurs.
|
||||
|
@ -2508,7 +2509,7 @@ settings.archive.error=Une erreur s'est produite lors de l'archivage du dépôt.
|
|||
settings.archive.error_ismirror=Vous ne pouvez pas archiver un dépôt en miroir.
|
||||
settings.archive.branchsettings_unavailable=Le paramétrage des branches n'est pas disponible quand le dépôt est archivé.
|
||||
settings.archive.tagsettings_unavailable=Le paramétrage des étiquettes n'est pas disponible si le dépôt est archivé.
|
||||
settings.archive.mirrors_unavailable = Les mirroirs ne sont pas disponibles si le dépôt a été archivé.
|
||||
settings.archive.mirrors_unavailable = Les miroirs ne sont pas disponibles si le dépôt a été archivé.
|
||||
settings.unarchive.button=Désarchiver ce dépôt
|
||||
settings.unarchive.header=Réhabiliter ce dépôt
|
||||
settings.unarchive.text=Réhabiliter un dépôt dégèle les actions de révisions et de soumissions, la gestion des tickets et des demandes d'ajouts.
|
||||
|
@ -2844,6 +2845,10 @@ diff.git-notes.remove-body = Cette note sera supprimée.
|
|||
diff.git-notes.add = Ajouter une note
|
||||
diff.git-notes.remove-header = Supprimer la note
|
||||
issues.summary_card_alt = Fiche de synthèse d'un ticket nommé "%s" dans le dépôt %s
|
||||
editor.add_tmpl.filename = fichier
|
||||
issues.num_reviews_one = %d revue
|
||||
issues.num_reviews_few = %d revues
|
||||
settings.default_update_style_desc = Style de mise à jour des demandes de fusion qui sont en retard par rapport à la branche de base.
|
||||
|
||||
[graphs]
|
||||
component_loading = Chargement %s...
|
||||
|
@ -3662,7 +3667,7 @@ alpine.registry=Configurez ce registre en ajoutant l’URL dans votre fichier <c
|
|||
alpine.registry.key=Téléchargez la clé RSA publique du registre dans le dossier <code>/etc/apk/keys/</code> pour vérifier la signature de l'index :
|
||||
alpine.registry.info=Choisissez $branch et $repository dans la liste ci-dessous.
|
||||
alpine.install=Pour installer le paquet, exécutez la commande suivante :
|
||||
alpine.repository=Informations sur le Dépôt
|
||||
alpine.repository=Informations sur le dépôt
|
||||
alpine.repository.branches=Branches
|
||||
alpine.repository.repositories=Dépôts
|
||||
alpine.repository.architectures=Architectures
|
||||
|
@ -3682,7 +3687,7 @@ conda.install=Pour installer le paquet en utilisant Conda, exécutez la commande
|
|||
container.details.type=Type d'image
|
||||
container.details.platform=Plateforme
|
||||
container.pull=Tirez l'image depuis un terminal :
|
||||
container.digest=Empreinte :
|
||||
container.digest=Empreinte
|
||||
container.multi_arch=SE / Arch
|
||||
container.layers=Calques d'image
|
||||
container.labels=Labels
|
||||
|
@ -3797,6 +3802,7 @@ arch.version.conflicts = Conflits
|
|||
arch.version.replaces = Remplace
|
||||
arch.version.backup = Sauvegarde
|
||||
arch.version.makedepends = Faire des dépendances
|
||||
container.images.title = Images
|
||||
|
||||
[secrets]
|
||||
secrets=Secrets
|
||||
|
|
|
@ -9,7 +9,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 = Vincular conta
|
||||
register = Rexistro
|
||||
version = Vesión
|
||||
powered_by = Desenvolvido por %s
|
||||
|
@ -18,8 +18,8 @@ template = Modelo
|
|||
notifications = Notificacións
|
||||
active_stopwatch = Activar Rastrexador de Tempo
|
||||
create_new = Crear…
|
||||
user_profile_and_more = Perfil e Configuración…
|
||||
signed_in_as = Inicia Sesión como
|
||||
user_profile_and_more = Perfil e configuración…
|
||||
signed_in_as = Sesión iniciada como
|
||||
enable_javascript = Este sitio web require JavaScript.
|
||||
toc = Táboa de Contidos
|
||||
licenses = Licenzas
|
||||
|
@ -29,17 +29,17 @@ email = Enderezo Electrónico
|
|||
password = Contrasinal
|
||||
re_type = Confirme o contrasinal
|
||||
captcha = CAPTCHA
|
||||
twofa = Autenticación de Dous Factores
|
||||
passcode = Código de Acceso
|
||||
webauthn_insert_key = Insira a súa Chave de Seguranza
|
||||
webauthn_press_button = Preme o botón da súa Chave de Seguranza…
|
||||
twofa = Autenticación de dobre factor
|
||||
passcode = Código de acceso
|
||||
webauthn_insert_key = Insira a súa clave de seguridade
|
||||
webauthn_press_button = Prema o botón da súa clave de seguridade…
|
||||
webauthn_use_twofa = Use o Código de Dous Factores do seu Teléfono
|
||||
webauthn_error = Non se Puido Ler a súa Chave de Seguranza.
|
||||
webauthn_unsupported_browser = O seu Navegador non Soporta Actualmente WebAuthn.
|
||||
webauthn_error_unknown = Produciuse un Erro Descoñecido.Téntao de novo.
|
||||
webauthn_error_unable_to_process = O Servidor non Puido Procesar a súa Solicitude.
|
||||
webauthn_error_duplicated = A Chave de Seguranza non está Permitida para esta Solicitude. Asegúrese de que a Chave non Estea Rexistrada.
|
||||
webauthn_error_empty = Debes Definir un Nome para esta Chave.
|
||||
webauthn_error = Non se puido ler a súa clave de seguridade.
|
||||
webauthn_unsupported_browser = O seu navegador non soporta WebAuthn actualmente.
|
||||
webauthn_error_unknown = Produciuse un erro descoñecido. Ténteo de novo.
|
||||
webauthn_error_unable_to_process = O servidor non puido procesar a súa solicitude.
|
||||
webauthn_error_duplicated = A clave de seguridade non está permitida para esta solicitude. Asegúrese de que a clave non estea xa rexistrada.
|
||||
webauthn_error_empty = Debe definir un nome para esta clave.
|
||||
webauthn_reload = Recarga
|
||||
repository = Repositorio
|
||||
organization = Organización
|
||||
|
@ -49,21 +49,21 @@ new_migrate = Nova Migración
|
|||
new_mirror = Novo Espello
|
||||
new_fork = Nova Bifurcación do Repositorio
|
||||
new_org = Nova Organización
|
||||
new_project = Novo Proxecto
|
||||
new_project_column = Nova Columna
|
||||
new_project = Novo proxecto
|
||||
new_project_column = Nova columna
|
||||
manage_org = Xestionar Organizacións
|
||||
admin_panel = Administración do Sitio
|
||||
admin_panel = Administración da páxina
|
||||
account_settings = Axustes da Conta
|
||||
settings = Configuración
|
||||
your_profile = Perfil
|
||||
your_starred = Destacado
|
||||
your_settings = Configuracións
|
||||
your_settings = Configuración
|
||||
all = Todo
|
||||
sources = Fontes
|
||||
mirrors = Espellos
|
||||
collaborative = Colaborativo
|
||||
forks = Derivacións
|
||||
pull_requests = Pull Requests
|
||||
pull_requests = Solicitudes de fusión
|
||||
milestones = Fitos
|
||||
ok = OK
|
||||
cancel = Cancelar
|
||||
|
@ -71,57 +71,57 @@ retry = Volve Tentar
|
|||
rerun = Volve Executar
|
||||
rerun_all = Volve Executar Todos os Traballos
|
||||
add = Engadir
|
||||
add_all = Engadir Todo
|
||||
remove_all = Quitar Todo
|
||||
remove_label_str = Eliminar Elemento "%s"
|
||||
add_all = Engadir todo
|
||||
remove_all = Quitar todo
|
||||
remove_label_str = Eliminar elemento "%s"
|
||||
edit = Editar
|
||||
enabled = Activado
|
||||
locked = Bloqueado
|
||||
copy = Copiar
|
||||
copy_url = Copiar URL
|
||||
copy_branch = Copiar o Nome da Rama
|
||||
copy_branch = Copiar o nome da rama
|
||||
copy_success = Copiado!
|
||||
copy_error = Erro na Copia
|
||||
copy_error = Erro na copia
|
||||
write = Escribir
|
||||
preview = Vista Previa
|
||||
preview = Vista previa
|
||||
loading = Cargando…
|
||||
error = Erro
|
||||
go_back = Volver Atrás
|
||||
go_back = Volver atrás
|
||||
never = Nunca
|
||||
unknown = Descoñecido
|
||||
rss_feed = Feed RSS
|
||||
unpin = Desprender
|
||||
artifacts = Artefactos
|
||||
confirm_delete_artifact = Estás seguro de que queres eliminar o Artefacto '%s' ?
|
||||
confirm_delete_artifact = Está seguro de querer eliminar o artefacto "%s"?
|
||||
archived = Arquivado
|
||||
concept_system_global = Global
|
||||
access_token = Token de Acceso
|
||||
activities = Actividades
|
||||
save = Gardar
|
||||
copy_content = Copiar Contido
|
||||
copy_content = Copiar contido
|
||||
language = Linguaxe
|
||||
copy_hash = Copiar hash
|
||||
twofa_scratch = Código Scratch de Dous Factores
|
||||
webauthn_sign_in = Preme o botón da súa Chave de Seguranza. Se a súa Chave de Seguranza non ten ningún botón, insírela de novo.
|
||||
issues = Problemas
|
||||
webauthn_sign_in = Prema o botón da súa clave de seguridade. Se a súa clave de seguridade non ten ningún botón, insíraa de novo.
|
||||
issues = Incidencias
|
||||
disabled = Desactivado
|
||||
error404 = A páxina á que estás tentando acceder <strong>Non Existe</strong> ou <strong>Non tes Autorización</strong> para vela.
|
||||
tracked_time_summary = Resumo do tempo de seguimento baseado nos filtros da lista de problemas
|
||||
webauthn_error_insecure = WebAuthn só Admite Conexións Seguras. Para probar a través de HTTP, pode usar a orixe "localhost" ou "127.0.0.1"
|
||||
webauthn_error_timeout = Alcanzouse o tempo de espera antes de que se Pidese Ler a súa Chave. Volve cargar esta Páxina e Téntao de Novo.
|
||||
error404 = A páxina á que estás tentando acceder <strong>non existe</strong> ou <strong>non tes autorización</strong> para vela.
|
||||
tracked_time_summary = Resumo do tempo de seguimento baseado nos filtros da lista de incidencias
|
||||
webauthn_error_insecure = WebAuthn só admite conexións seguras. Para probar a través de HTTP, pode usar a orixe "localhost" ou "127.0.0.1"
|
||||
webauthn_error_timeout = Alcanzouse o límite de tempo antes de que se puidera ler a súa clave. Volva cargar esta páxina e ténteo de novo.
|
||||
remove = Quitar
|
||||
view = Vista
|
||||
view = Ver
|
||||
copy_type_unsupported = Este tipo de ficheiro non se pode copiar
|
||||
concept_user_organization = Organización
|
||||
show_timestamps = Mostrar M0arcas de Tempo
|
||||
show_log_seconds = Mostrar Segundos
|
||||
download_logs = Descargar Rexistros
|
||||
show_timestamps = Mostrar marcas de tempo
|
||||
show_log_seconds = Mostrar segundos
|
||||
download_logs = Descargar rexistros
|
||||
name = Nome
|
||||
value = Valor
|
||||
confirm_delete_selected = Confirmar a eliminación de todos os elementos seleccionados?
|
||||
confirm_delete_selected = Confirmar a eliminación de tódolos elementos seleccionados?
|
||||
show_full_screen = Mostrar Pantalla Completa
|
||||
more_items = Máis items
|
||||
toggle_menu = Alternar Menú
|
||||
more_items = Máis elementos
|
||||
toggle_menu = Alternar menú
|
||||
filter = Filtro
|
||||
filter.clear = Borrar filtros
|
||||
filter.is_archived = Arquivado
|
||||
|
@ -140,6 +140,14 @@ pin = Aproximada
|
|||
filter.private = Privado
|
||||
copy_generic = Copiar ao portapapeis
|
||||
test = Test
|
||||
copy_path = Copiar ruta
|
||||
error413 = Esgotou a súa cota.
|
||||
new_repo.title = Novo repositorio
|
||||
new_migrate.title = Nova migración
|
||||
new_org.title = Nova organización
|
||||
new_repo.link = Novo repositorio
|
||||
new_migrate.link = Nova migración
|
||||
new_org.link = Nova organización
|
||||
|
||||
[aria]
|
||||
navbar = Barra de Navegación
|
||||
|
@ -170,9 +178,23 @@ buttons.ref.tooltip = Referencia un problema ou pull request
|
|||
|
||||
[search]
|
||||
search = Buscar...
|
||||
type_tooltip = Tipo de busca
|
||||
type_tooltip = Tipo de procura
|
||||
repo_kind = Buscar repositorios...
|
||||
user_kind = Buscar usuarios...
|
||||
regexp = RegExp
|
||||
regexp_tooltip = Interpretar o termo da procura como expresión regular
|
||||
org_kind = Procurar organizacións...
|
||||
team_kind = Procurar equipos...
|
||||
code_kind = Procurar código...
|
||||
code_search_unavailable = A procura de código non está dispoñible neste momento. Por favor contacte coa persoa responsable da administración da páxina.
|
||||
package_kind = Buscar paquetes...
|
||||
fuzzy = Difusa
|
||||
fuzzy_tooltip = Incluír resultados que tamén coincidan estreitamente co termo da procura
|
||||
union = Palabras clave
|
||||
union_tooltip = Incluír resultados correspondentes a calquera dal palabras clave separadas por espazos en branco
|
||||
exact = Exacta
|
||||
exact_tooltip = Incluír só resultados correspondentes ao termo exacto da procura
|
||||
issue_kind = Procurar incidencias...
|
||||
|
||||
[startpage]
|
||||
platform = Multiplataforma
|
||||
|
|
|
@ -3469,7 +3469,7 @@ monitor.queue.settings.remove_all_items = Rimuovi tutto
|
|||
monitor.queue.settings.desc = Le piscine crescono dinamicamente in risposta al blocco dei lavoratori in coda.
|
||||
monitor.queue.settings.remove_all_items_done = Tutti gli elementi in coda sono stati rimossi.
|
||||
self_check.database_collation_mismatch = Pretendi che la base di dati usi la collazione: %s
|
||||
self_check.database_fix_mysql = Per utenti MySQL/MariaDB, potresti usare il comando "gitea doctor convert" per risolvere problemi di collazione, o potresti risolvere il problema manualmente tramite SQL con "ALTER ... COLLATE ...".
|
||||
self_check.database_fix_mysql = Per utenti MySQL/MariaDB, potresti usare il comando "forgejo doctor convert" per risolvere problemi di collazione, o potresti risolvere il problema manualmente tramite SQL con "ALTER ... COLLATE ...".
|
||||
self_check.database_collation_case_insensitive = La base di dati sta usando la collazione %s, che è una collazione insensibile. Nonostante Forgejo potrebbe lavorarci, ci potrebbero essere rari casi che non vanno come previsto.
|
||||
auths.tip.gitlab_new = Registra una nuova applicazione su %s
|
||||
config_summary = Riepilogo
|
||||
|
|
|
@ -337,7 +337,7 @@ allow_password_change=사용자에게 비밀번호 변경을 요청 (권장됨)
|
|||
reset_password_mail_sent_prompt=확인 메일이 <b>%s</b>로 전송되었습니다. 받은 편지함으로 도착한 메일을 %s 안에 확인해서 비밀번호 찾기 절차를 완료하십시오.
|
||||
active_your_account=계정 활성화
|
||||
account_activated=계정이 활성화 되었습니다
|
||||
prohibit_login =
|
||||
prohibit_login =
|
||||
resent_limit_prompt=활성화를 위한 이메일을 이미 전송했습니다. 3분 내로 이메일을 받지 못한 경우 재시도해주세요.
|
||||
has_unconfirmed_mail=안녕하세요 %s, 이메일 주소(<b>%s</b>)가 확인되지 않았습니다. 확인 메일을 받으시지 못하겼거나 새로운 확인 메일이 필요하다면, 아래 버튼을 클릭해 재발송하실 수 있습니다.
|
||||
resend_mail=여기를 눌러 확인 메일 재전송
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -39,7 +39,7 @@ webauthn_error_empty = Du muttst de Slötel eenen Naam geven.
|
|||
repository = Repositorium
|
||||
organization = Vereenigung
|
||||
new_fork = Neje Repositoriums-Gabel
|
||||
dashboard = Mien Disk
|
||||
dashboard = Kontor
|
||||
logo = Logo
|
||||
active_stopwatch = Aktive Tied-Erfatens
|
||||
password = Passwoord
|
||||
|
@ -150,7 +150,7 @@ fuzzy = um de Slag
|
|||
fuzzy_tooltip = Ok Resultaten wiesen, wat dicht to de Söökwoorden passen
|
||||
union = Passt
|
||||
union_tooltip = Resultaten wiesen, wat to eets of anner vun de mit Leegtekens trennt Söökwoorden passen
|
||||
exact = Akkeraat
|
||||
exact = akkeraat
|
||||
exact_tooltip = Blots Resultaten wiesen, wat akkeraat to de Söökwoord passen
|
||||
regexp = RegEx
|
||||
regexp_tooltip = De Söökwoord as Regel-Utdruck behanneln
|
||||
|
@ -235,7 +235,7 @@ install_desc = Du kannst dat Programm eenfach <a target="_blank" rel="noopener n
|
|||
|
||||
[home]
|
||||
uname_holder = Brukernaam of E-Mail-Adress
|
||||
switch_dashboard_context = Mien-Disk-Umgeven wesseln
|
||||
switch_dashboard_context = Kontor-Umgeven wesseln
|
||||
my_repos = Repositoriums
|
||||
my_orgs = Vereenigungen
|
||||
view_home = %s wiesen
|
||||
|
@ -521,8 +521,8 @@ followers.title.few = Nagahers
|
|||
following.title.one = Gaht na
|
||||
followers_one = %d Nagaher
|
||||
followers_few = %d Nagahers
|
||||
following_one = %d gaht na
|
||||
following_few = %d gahn na
|
||||
following_one = gaht %d na
|
||||
following_few = gaht %d na
|
||||
follow = Nagahn
|
||||
unfollow = Nich mehr nagahn
|
||||
block_user = Bruker blockeren
|
||||
|
@ -600,7 +600,7 @@ change_password = Passwoord ännern
|
|||
update_password = Passwoord vernejen
|
||||
old_password = Stedenwies Passwoord
|
||||
new_password = Nejes Passwoord
|
||||
theme_desc = Dat word dien normaales Thema all över de Sied wesen.
|
||||
theme_desc = Deeses Thema word in de Brukerschnittstee bruukt, wenn du anmellt büst.
|
||||
primary = Höövd
|
||||
activated = Aktiveert
|
||||
requires_activation = Mutt aktiveert worden
|
||||
|
@ -841,7 +841,7 @@ email_deletion_desc = De E-Mail-Adress un daarmit verbunnen Informatioon word ut
|
|||
principal_desc = Deese SSH-Zertifikaat-Höövdmannen sünd mit dienem Konto verbunnen un geven kumpleten Togriep up diene Repositoriums.
|
||||
add_email_confirmation_sent = Eene Utwiesens-E-Mail is an »%s« schickt worden. Um diene E-Mail-Adress uttowiesen, kiek bidde in dienen E-Mail-Ingang un folg de Verwies daarin in de anner %s.
|
||||
ssh_desc = Deese publiken SSH-Slötels sünd mit dienem Konto verbunnen. De tohörig privaate Slötel gifft kumpleten Togriep up diene Repositoriums. SSH-Slötels, wat utwiest worden sünd, könen bruukt worden, um SSH-unnerschreven Git-Kommitterens uttowiesen.
|
||||
keep_email_private_popup = Dat word diene E-Mail-Adress vun dienem Profil verburgen. Dann is dat nich mehr de Normaalweert för Kommitterens, wat du över de Internett-Schnittstee maakst, so as Datei-Upladens un Bewarkens, un word nich in Tosamenföhrens-Kommitterens bruukt. In Stee daarvun kann eene besünnere Adress %s bruukt worden, um Kommitterens mit dienem Konto to verbinnen. Wees wiss, dat dat Ännern vun deeser Instellen bestahn Kommitterens nich ännert.
|
||||
keep_email_private_popup = Dat word diene E-Mail-Adress vun dienem Profil verbargen. Dann is dat nich mehr de Normaalweert för Kommitterens, wat du över de Internett-Schnittstee maakst, so as Datei-Upladens un Bewarkens, un word nich in Tosamenföhrens-Kommitterens bruukt. In Stee daarvun kann eene besünnere Adress %s bruukt worden, um Kommitterens mit dienem Konto to verbinnen. Wees wiss, dat dat Ännern vun deeser Instellen bestahn Kommitterens nich ännert.
|
||||
ssh_helper = <strong>Bruukst du Hülp?</strong> Kiek de Inföhren an, wo du <a href="%s">diene eegenen SSH-Slötels maakst</a> of hülp <a href="%s">gewohnten Probleemen</a> of, över wat man mit SSH mennigmaal strukelt.
|
||||
access_token_desc = Utköört Teken-Verlöövnissen begrenzen dat Anmellen blots up de tohörig <a href="%[1]s" target="_blank">API</a>-Padden. Lees de <a href="%[2]s" target="_blank">Dokumenteren</a> för mehr Informatioonen.
|
||||
oauth2_confidential_client = Diskreeter Klient. Köör dat för Programmen ut, wat dat Geheemst diskreet behanneln, as Internett-Sieden. Köör dat nich för stedenwies Programmen ut, as Schrievdisk- un Telefoon-Programmens.
|
||||
|
@ -876,7 +876,7 @@ generate_repo = Repositorium maken
|
|||
generate_from = Maken ut
|
||||
repo_desc = Beschrieven
|
||||
admin.update_flags = Flaggen vernejen
|
||||
new_repo_helper = In eenem Repositorium sünd all Dateien vun eenem Projekt, ok hör Versioons-Histoorje. Hest du al annerwaar eens? <a href="%s">Treck een Repositorium um.</a>
|
||||
new_repo_helper = In eenem Repositorium sünd all Dateien vun eenem Projekt, ok hör Versioons-Histoorje. Hest du al annerwaar eens? <a href="%s">Treck een Repositorium um</a>.
|
||||
owner_helper = Eenige Vereenigungen worden in de List villicht nich wiest, denn ’t gifft eene Grenz, wo völe Repositoriums man hebben kann.
|
||||
admin.enabled_flags = Flaggen, wat för deeses Repositorium anknipst sünd:
|
||||
admin.failed_to_replace_flags = Kunn Repositoriums-Flaggen nich utwesseln
|
||||
|
@ -2286,7 +2286,7 @@ settings.matrix.homeserver_url = Heimaadserver-URL
|
|||
settings.matrix.room_id = Ruum-ID
|
||||
settings.archive.header = Deeses Repo archiveren
|
||||
settings.archive.error_ismirror = Du kannst een spegelt Repo nich archiveren.
|
||||
settings.archive.tagsettings_unavailable = Mark-Instellens sünd nich verföögbaar, wenn dat Repo archiveert is.
|
||||
settings.archive.tagsettings_unavailable = Mark-Instellens sünd in archiveert Repos nich verföögbaar.
|
||||
settings.unarchive.button = Repo ut Archiv torügghalen
|
||||
settings.unarchive.success = Dat Repo is nu nich mehr archiveert.
|
||||
settings.unarchive.error = Een Fehler is bi’m Torügghalen vum Repo ut de Archiv uptreden. Kiek in de Utgaav för mehr Informatioonen.
|
||||
|
@ -2301,14 +2301,14 @@ settings.unarchive.header = Deeses Repo as nich mehr archiveert setten
|
|||
settings.update_avatar_success = Dat Repositoriums-Kontobill is verneeit worden.
|
||||
settings.lfs_findcommits = Kommitterens finnen
|
||||
settings.protected_branch_required_approvals_min = Nödige Tostimmens könen nich negativ wesen.
|
||||
settings.archive.mirrors_unavailable = Spegels sünd nich verföögbar, wenn dat Repo archiveert is.
|
||||
settings.archive.mirrors_unavailable = Spegels sünd in archiveert Repos nich verföögbaar.
|
||||
settings.tags.protection.create = Örder hentofögen
|
||||
settings.bot_token = Bot-Teken
|
||||
settings.matrix.message_type = Narichten-Aard
|
||||
settings.archive.text = Wenn dat Repo archiveert word, kann man daar blots noch lesen. Dat word vum Disk verburgen. Nüms (ok nich du sülvst!) kann noch neje Kommitterens maken of Gefallens of Haalvörslagen opmaken.
|
||||
settings.archive.text = Wenn dat Repo archiveert word, kann man daar blots noch lesen. Dat word vum Kontor verburgen. Nüms (ok nich du sülvst!) kann noch neje Kommitterens maken of Gefallens of Haalvörslagen opmaken.
|
||||
settings.archive.success = Dat Repo is archiveert worden.
|
||||
settings.archive.error = Een Fehler is bi’m Archiveren vum Repo uptreden. Kiek in de Utgaav för mehr Informatioonen.
|
||||
settings.archive.branchsettings_unavailable = Twieg-Instellens sünd nich verföögbaar, wenn dat Repo archiveert is.
|
||||
settings.archive.branchsettings_unavailable = Twieg-Instellens sünd in archiveert Repos nich verföögbaar.
|
||||
settings.unarchive.text = Wenn dat Repo nich mehr archiveert is, kann dat weer Kommitterens un Schuvens kriegen un ok neje Gefallens un Haalvörslagens.
|
||||
settings.lfs_no_lfs_files = In deesem Repositorium sünd keene LFS-Dateien verwahrt
|
||||
settings.lfs_noattribute = Deeser Padd is im Höövd-Twieg nich as toslutbaar markeert
|
||||
|
@ -2548,6 +2548,7 @@ diff.git-notes.remove-body = Deeses Anmarken word wegdaan.
|
|||
issues.num_reviews_one = %d Nakieken
|
||||
issues.summary_card_alt = Tosamenfatens-Kaart vun eenem Gefall mit de Naam »%s« im Repositorium %s
|
||||
issues.num_reviews_few = %d Nakiekens
|
||||
settings.default_update_style_desc = Normaale Vernejens-Aard, wat bruukt word, um Haalvörslagens to vernejen, wat achter de Grund-Twieg torügg sünd.
|
||||
|
||||
[repo.permissions]
|
||||
code.read = <b>Lesen:</b> De Quelltext vun deesem Repositorium ankieken un klonen.
|
||||
|
@ -2583,7 +2584,7 @@ org_name_holder = Vereenigungs-Naam
|
|||
org_full_name_holder = Kumpleter Naam vun de Vereenigung
|
||||
org_name_helper = Vereenigungs-Namen sallen kört un lich to marken wesen.
|
||||
create_org = Vereenigung maken
|
||||
open_dashboard = »Mien Disk« opmaken
|
||||
open_dashboard = Kontor opmaken
|
||||
repo_updated = %s verneeit
|
||||
members = Liddmaten
|
||||
teams = Klottjen
|
||||
|
@ -2693,7 +2694,7 @@ teams.specific_repositories_helper = Liddmaten hebben blots Togriep up Repositor
|
|||
teams.all_repositories = All Repositoriums
|
||||
|
||||
[admin]
|
||||
dashboard = Mien Disk
|
||||
dashboard = Kontor
|
||||
self_check = Sülvst-Överprüfen
|
||||
identity_access = Sülvst & Togang
|
||||
users = Brukerkonten
|
||||
|
@ -3183,7 +3184,7 @@ notices.view_detail_header = Naricht-Informatioonen
|
|||
self_check.no_problem_found = Noch keen Probleem funnen.
|
||||
self_check.database_collation_mismatch = Verwacht, dat de Datenbank deese Kollatioon bruukt: %s
|
||||
self_check.database_collation_case_insensitive = Datenbank bruukt eene Kollatioon %s, wat eene unklünige Kollatioon is. Forgejo kann twaar daarmit warken, aver dat kann rare Fallen geven, waar dat nich so warkt as verwacht.
|
||||
self_check.database_fix_mysql = Brukers vun MySQL of MariaDB könen de Oorder »gitea doctor convert« bruken, um de Kollatioons-Problemen oftohelpen, of du kannst dat Probleem ofhelpen, indeem du vun Hand de SQL-Oorders »ALTER … COLLATE …« bruukst.
|
||||
self_check.database_fix_mysql = Brukers vun MySQL of MariaDB könen de Oorder »forgejo doctor convert« bruken, um de Kollatioons-Problemen oftohelpen, of du kannst dat Probleem ofhelpen, indeem du vun Hand de SQL-Oorders »ALTER … COLLATE …« bruukst.
|
||||
self_check.database_inconsistent_collation_columns = Datenbank bruukt Kollatioon %s, aver deese Striepen bruken unpassend Kollatioonen. Dat kann unverwachte Problemen maken.
|
||||
auths.sspi_auto_create_users_helper = Verlöövt de SSPI-Anmellens-Aard, automatisk een Konto för Brukers to maken, well sik tum eersten Maal anmellen
|
||||
config.log_file_root_path = Utgaav-Padd
|
||||
|
@ -3561,7 +3562,7 @@ conda.install = Um dat Paket mit Conda to installeren, föhr deese Oorder ut:
|
|||
container.details.type = Avbill-Aard
|
||||
container.details.platform = Plattfoorm
|
||||
container.pull = Haal deeses Avbill vun de Oorderreeg:
|
||||
container.digest = Prüüfsumm:
|
||||
container.digest = Prüüfsumm
|
||||
container.multi_arch = BS / Arch
|
||||
container.layers = Avbill-Schichten
|
||||
cran.registry = Richt deese Paketlist in diener <code>Rprofile.site</code>-Datei in:
|
||||
|
@ -3599,6 +3600,7 @@ owner.settings.chef.title = Chef-Paketlist
|
|||
owner.settings.chef.keypair = Slötelpaar maken
|
||||
owner.settings.chef.keypair.description = Een Slötelpaar is nödig, um sik bi de Chef-Paketlist antomellen. Wenn du al een Slötelpaar maakt hest, word dat olle Slötelpaar wegdaan, wenn du een nejes Slötelpaar maakst.
|
||||
conan.install = Um dat Paket mit Conan to installeren, föhr deese Oorder ut:
|
||||
container.images.title = Avbillers
|
||||
|
||||
[secrets]
|
||||
secrets = Geheemsten
|
||||
|
@ -3611,9 +3613,9 @@ deletion = Geheemst wegdoon
|
|||
deletion.success = Dat Geheemst is wegdaan worden.
|
||||
deletion.failed = Kunn Geheemst nich wegdoon.
|
||||
management = Geheemsten verwalten
|
||||
creation.value_placeholder = Giff elkeen Inholl in. Leegtekens am Begünn un Enn word ofsneden.
|
||||
creation.value_placeholder = Giff elkeen Inholl in. Leegtekens am Begünn un Enn worden ofsneden.
|
||||
deletion.description = Een Geheemst wegtodoon is för all Tieden un kann nich torüggnohmen worden. Wiedermaken?
|
||||
creation.name_placeholder = Blots alphanumerisk Boostavens (dat word nich tüsken Groot- un Kleenbookstavens unnerscheden) un Unnerstrekens; kann nich mit GITEA_ of GITHUB_ begünnen
|
||||
creation.name_placeholder = Blots alphanumerisk Bookstavens (’t word nich tüsken Groot- un Kleenbookstavens unnerscheden) un Unnerstrekens; kann nich mit GITEA_ of GITHUB_ begünnen
|
||||
|
||||
[actions]
|
||||
actions = Aktioonen
|
||||
|
|
|
@ -166,6 +166,7 @@ new_repo.link = Nieuwe repository
|
|||
new_repo.title = Nieuwe repository
|
||||
new_migrate.link = Nieuwe migratie
|
||||
new_org.link = Nieuwe organisatie
|
||||
copy_path = Kopieer bestandspad
|
||||
|
||||
[aria]
|
||||
navbar = Navigatiebalk
|
||||
|
@ -3476,7 +3477,7 @@ self_check.database_inconsistent_collation_columns = Database gebruikt collatie
|
|||
monitor.stacktrace = Stacktrace
|
||||
monitor.download_diagnosis_report = Diagnoserapport downloaden
|
||||
self_check.database_collation_case_insensitive = Database gebruikt collatie %s, wat een ongevoelige collatie is. Hoewel Forgejo ermee kan werken, kunnen er enkele zeldzame gevallen zijn die niet werken zoals verwacht.
|
||||
self_check.database_fix_mysql = Voor MySQL/MariaDB gebruikers zou je het "gitea doctor convert" commando kunnen gebruiken om de collatieproblemen op te lossen, of je zou het probleem ook kunnen oplossen door "ALTER ... COLLATE ..." SQL's handmatig op te lossen.
|
||||
self_check.database_fix_mysql = Voor MySQL/MariaDB gebruikers zou je het "forgejo doctor convert" commando kunnen gebruiken om de collatieproblemen op te lossen, of je zou het probleem ook kunnen oplossen door "ALTER ... COLLATE ..." SQL's handmatig op te lossen.
|
||||
dashboard.gc_lfs = LFS meta-objecten afval opruimen
|
||||
auths.map_group_to_team = Breng LDAP-groepen in kaart voor organisatieteams (laat het veld leeg om over te slaan)
|
||||
auths.oauth2_required_claim_name = Verplichte claimnaam
|
||||
|
@ -3672,7 +3673,7 @@ conda.registry = Stel dit register in als een Conda repository in je <code>.cond
|
|||
container.details.type = Afbeelding Type
|
||||
container.details.platform = Platform
|
||||
container.pull = Haal de afbeelding op vanaf de terminal:
|
||||
container.digest = Digest:
|
||||
container.digest = Digest
|
||||
container.multi_arch = Besturingssysteem / Arch
|
||||
container.layers = Afbeelding Lagen
|
||||
container.labels = Labels
|
||||
|
@ -3800,6 +3801,7 @@ arch.version.conflicts = Conflicten
|
|||
arch.version.replaces = Vervangt
|
||||
arch.version.backup = Back-up
|
||||
arch.version.makedepends = Maken is afhankelijk van
|
||||
container.images.title = Afbeeldingen
|
||||
|
||||
[secrets]
|
||||
secrets = Geheimen
|
||||
|
|
|
@ -166,6 +166,7 @@ new_migrate.link = Nova migração
|
|||
new_org.link = Nova organização
|
||||
test = Teste
|
||||
error413 = Você esgotou sua cota.
|
||||
copy_path = Copiar caminho
|
||||
|
||||
[aria]
|
||||
navbar=Barra de navegação
|
||||
|
@ -812,7 +813,7 @@ manage_emails=Gerenciar endereços de e-mail
|
|||
manage_themes=Tema padrão
|
||||
manage_openid=Endereços OpenID
|
||||
email_desc=Seu endereço de e-mail principal será usado para notificações, recuperação de senha e, desde que não esteja oculto, para operações do Git baseadas na Web.
|
||||
theme_desc=Este será o seu tema padrão em todo o site.
|
||||
theme_desc=Este tema será usado para a interface web quando você fizer login.
|
||||
primary=Principal
|
||||
activated=Ativado
|
||||
requires_activation=Requer ativação
|
||||
|
@ -1093,7 +1094,7 @@ issue_labels=Etiquetas
|
|||
issue_labels_helper=Selecione um conjunto de etiquetas
|
||||
license=Licença
|
||||
license_helper=Selecione um arquivo de licença
|
||||
license_helper_desc=Uma licença define o que os outros podem e não podem fazer com o seu código. Não tem certeza qual é a mais adequada para o seu projeto? Veja <a target="_blank" rel="noopener noreferrer" href="%s">Escolher uma licença.</a>
|
||||
license_helper_desc=Uma licença define o que os outros podem e não podem fazer com o seu código. Não tem certeza qual é a mais adequada para o seu projeto? Veja <a target="_blank" rel="noopener noreferrer" href="%s">Escolher uma licença</a>.
|
||||
readme=LEIA-ME
|
||||
readme_helper=Selecione um modelo de arquivo README
|
||||
readme_helper_desc=Aqui você pode escrever uma descrição completa para o seu projeto.
|
||||
|
@ -2439,8 +2440,8 @@ settings.archive.header=Arquivar este repositório
|
|||
settings.archive.success=O repositório foi arquivado com sucesso.
|
||||
settings.archive.error=Um erro ocorreu enquanto estava sendo arquivado o repositório. Veja o log para mais detalhes.
|
||||
settings.archive.error_ismirror=Você não pode arquivar um repositório espelhado.
|
||||
settings.archive.branchsettings_unavailable=Configurações do branch não estão disponíveis quando o repositório está arquivado.
|
||||
settings.archive.tagsettings_unavailable=As configurações de tag não estão disponíveis se o repositório estiver arquivado.
|
||||
settings.archive.branchsettings_unavailable=Configurações de branch não estão disponíveis em repositórios arquivados.
|
||||
settings.archive.tagsettings_unavailable=Configurações de tag não estão disponíveis em repositórios arquivados.
|
||||
settings.update_avatar_success=O avatar do repositório foi atualizado.
|
||||
settings.lfs=LFS
|
||||
settings.lfs_filelist=Arquivos LFS armazenados neste repositório
|
||||
|
@ -2640,7 +2641,7 @@ settings.unarchive.success = O repositório foi desarquivado.
|
|||
settings.unarchive.button = Desarquivar repositório
|
||||
settings.unarchive.header = Desarquivar este repositório
|
||||
diff.comment.add_line_comment = Adicionar comentário na linha
|
||||
new_repo_helper = Um repositório contém todos os arquivos de projeto, incluindo o histórico de revisões. Já hospeda um repositório em outra plataforma? <a href="%s">Migrar repositório</a>
|
||||
new_repo_helper = Um repositório contém todos os arquivos de projeto, incluindo o histórico de revisões. Já hospeda um repositório em outra plataforma? <a href="%s">Migrar repositório</a>.
|
||||
blame.ignore_revs.failed = Falha ao ignorar as revisões em <a href="%s">.git-blame-ignore-revs</a>.
|
||||
migrate.forgejo.description = Migrar dados do codeberg.org ou outras servidores Forgejo.
|
||||
commits.browse_further = Ver mais
|
||||
|
@ -2725,7 +2726,7 @@ comments.edit.already_changed = Falha ao salvar as alterações ao comentá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.
|
||||
settings.archive.mirrors_unavailable = Réplicas não estão disponíveis em repositórios arquivados.
|
||||
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:
|
||||
|
@ -3514,7 +3515,7 @@ packages.cleanup.success = Os dados expirados foram limpos com sucesso
|
|||
monitor.queue.activeworkers = Processos ativos
|
||||
systemhooks.desc = Os webhooks fazem automaticamente solicitações HTTP POST para um servidor quando certos eventos Forgejo são acionados. Os webhooks definidos aqui atuarão em todos os repositórios do sistema, então, considere quaisquer implicações de desempenho que isso possa ter. Leia mais no <a target="_blank" rel="noopener" href="%s">guia de webhooks</a>.
|
||||
defaulthooks.desc = Os webhooks fazem automaticamente solicitações HTTP POST para um servidor quando certos eventos Forgejo são acionados. Os webhooks definidos aqui são padrões e serão copiados para todos os novos repositórios. Leia mais no <a target="_blank" rel="noopener" href="%s">guia de webhooks</a>.
|
||||
self_check.database_fix_mysql = Para usuários do MySQL/MariaDB, você pode usar o comando "gitea doctor convert" para corrigir os problemas de ordenamento, ou também pode corrigir o problema usando "ALTER ... COLLATE ..." SQLs manualmente.
|
||||
self_check.database_fix_mysql = Para usuários do MySQL/MariaDB, você pode usar o comando "forgejo doctor convert" para corrigir os problemas de ordenamento, ou também pode corrigir o problema usando "ALTER ... COLLATE ..." SQLs manualmente.
|
||||
monitor.queue.settings.desc = Os pools crescem dinamicamente quando as filas de seus workers ficam bloqueadas.
|
||||
config.cache_test_succeeded = Teste de cache bem-sucedido, obteve uma resposta em %s.
|
||||
self_check.database_inconsistent_collation_columns = O banco de dados está usando o ordenamento %s, mas essas colunas estão usando ordenamentos incompatíveis. Isso pode causar alguns problemas inesperados.
|
||||
|
@ -3674,18 +3675,18 @@ chef.install=Para instalar o pacote, execute o seguinte comando:
|
|||
composer.registry=Configure este registro em seu arquivo <code>~/.composer/config.json</code>:
|
||||
composer.install=Para instalar o pacote usando o Composer, execute o seguinte comando:
|
||||
composer.dependencies=Dependências
|
||||
composer.dependencies.development=Dependências de Desenvolvimento
|
||||
composer.dependencies.development=Dependências de desenvolvimento
|
||||
conan.details.repository=Repositório
|
||||
conan.registry=Configure este registro pela linha de comando:
|
||||
conan.install=Para instalar o pacote usando o Conan, execute o seguinte comando:
|
||||
conda.registry=Configure este registro como um repositório Conda no arquivo <code>.condarc</code>:
|
||||
conda.install=Para instalar o pacote usando o Conda, execute o seguinte comando:
|
||||
container.details.type=Tipo de Imagem
|
||||
container.details.type=Tipo de imagem
|
||||
container.details.platform=Plataforma
|
||||
container.pull=Puxe a imagem pela linha de comando:
|
||||
container.digest=Digest:
|
||||
container.digest=Digest
|
||||
container.multi_arch=S.O. / Arquitetura
|
||||
container.layers=Camadas da Imagem
|
||||
container.layers=Camadas da imagem
|
||||
container.labels=Rótulos
|
||||
container.labels.key=Chave
|
||||
container.labels.value=Valor
|
||||
|
@ -3713,9 +3714,9 @@ npm.registry=Configure este registro no arquivo <code>.npmrc</code> do seu proje
|
|||
npm.install=Para instalar o pacote usando o npm, execute o seguinte comando:
|
||||
npm.install2=ou adicione-o ao arquivo package.json:
|
||||
npm.dependencies=Dependências
|
||||
npm.dependencies.development=Dependências de Desenvolvimento
|
||||
npm.dependencies.peer=Dependências Peer
|
||||
npm.dependencies.optional=Dependências Opcionais
|
||||
npm.dependencies.development=Dependências de desenvolvimento
|
||||
npm.dependencies.peer=Dependências peer
|
||||
npm.dependencies.optional=Dependências opcionais
|
||||
npm.details.tag=Tag
|
||||
pub.install=Para instalar o pacote usando Dart, execute o seguinte comando:
|
||||
pypi.requires=Requer Python
|
||||
|
@ -3728,8 +3729,8 @@ rpm.repository = Informações do repositório
|
|||
rpm.repository.architectures = Arquiteturas
|
||||
rubygems.install=Para instalar o pacote usando gem, execute o seguinte comando:
|
||||
rubygems.install2=ou adicione-o ao Gemfile:
|
||||
rubygems.dependencies.runtime=Dependências de Execução
|
||||
rubygems.dependencies.development=Dependências de Desenvolvimento
|
||||
rubygems.dependencies.runtime=Dependências de tempo de execução
|
||||
rubygems.dependencies.development=Dependências de desenvolvimento
|
||||
rubygems.required.ruby=Requer o Ruby versão
|
||||
rubygems.required.rubygems=Requer o RubyGem versão
|
||||
swift.registry=Configure este registro pela linha de comando:
|
||||
|
@ -3776,11 +3777,11 @@ owner.settings.cleanuprules.success.delete=Regra de limpeza foi excluída.
|
|||
owner.settings.chef.title=Registro Chef
|
||||
owner.settings.chef.keypair=Gerar par de chaves
|
||||
rpm.repository.multiple_groups = Este pacote está disponível em vários grupos.
|
||||
npm.dependencies.bundle = Dependências empacotadas
|
||||
npm.dependencies.bundle = Dependências em bundle
|
||||
registry.documentation = Para mais informações sobre o registro %s, veja <a target="_blank" rel="noopener noreferrer" href="%s">a documentação</a>.
|
||||
arch.version.replaces = Substitui
|
||||
arch.version.conflicts = Conflitos
|
||||
arch.version.properties = Propriedades de Versão
|
||||
arch.version.properties = Propriedades da versão
|
||||
arch.version.description = Descrição
|
||||
arch.version.groups = Grupo
|
||||
arch.version.provides = Fornece
|
||||
|
@ -3799,6 +3800,7 @@ arch.version.makedepends = Dependências do make
|
|||
arch.version.checkdepends = Verificar dependências
|
||||
owner.settings.cargo.initialize.description = É necessário um repositório Git especial de índice para usar o registro Cargo. Usar esta opção irá (re-)criar o repositório e configurá-lo automaticamente.
|
||||
owner.settings.chef.keypair.description = É necessário um par de chaves para autenticar no registro Chef. Se você já gerou um par de chaves, gere um novo par e descarte o antigo.
|
||||
container.images.title = Imagens
|
||||
|
||||
[secrets]
|
||||
secrets=Segredos
|
||||
|
|
|
@ -166,6 +166,7 @@ new_org.title = Nova organização
|
|||
new_repo.link = Novo repositório
|
||||
new_migrate.link = Nova migração
|
||||
new_org.link = Nova organização
|
||||
copy_path = Copiar caminho
|
||||
|
||||
[aria]
|
||||
navbar=Barra de navegação
|
||||
|
@ -2847,6 +2848,7 @@ pulls.delete_after_merge.head_branch.insufficient_branch = Não tem permissão p
|
|||
issues.summary_card_alt = Sumário de uma questão com o título "%s" no repositório %s
|
||||
issues.num_reviews_one = %d revisão
|
||||
issues.num_reviews_few = %d revisões
|
||||
editor.add_tmpl.filename = nome do ficheiro
|
||||
|
||||
[graphs]
|
||||
component_loading=A carregar %s...
|
||||
|
@ -3517,7 +3519,7 @@ self_check.no_problem_found=Nenhum problema encontrado até agora.
|
|||
self_check.database_collation_mismatch=Supor que a base de dados usa a colação: %s
|
||||
self_check.database_collation_case_insensitive=A base de dados está a usar a colação %s, que é insensível à diferença entre maiúsculas e minúsculas. Embora o Gitea possa trabalhar com ela, pode haver alguns casos raros que não funcionem como esperado.
|
||||
self_check.database_inconsistent_collation_columns=A base de dados está a usar a colação %s, mas estas colunas estão a usar colações diferentes. Isso poderá causar alguns problemas inesperados.
|
||||
self_check.database_fix_mysql=Para utilizadores do MySQL/MariaDB, pode usar o comando "gitea doctor convert" para resolver os problemas de colação. Também pode resolver o problema com comandos SQL "ALTER ... COLLATE ..." aplicados manualmente.
|
||||
self_check.database_fix_mysql=Para utilizadores do MySQL/MariaDB, pode usar o comando "forgejo doctor convert" para resolver os problemas de colação. Também pode resolver o problema com comandos SQL "ALTER ... COLLATE ..." aplicados manualmente.
|
||||
config_summary = Resumo
|
||||
auths.tips.gmail_settings = Configurações do Gmail:
|
||||
config_settings = Configurações
|
||||
|
@ -3799,6 +3801,7 @@ arch.version.checkdepends = Verificar dependências
|
|||
arch.version.conflicts = Conflitos
|
||||
arch.version.backup = Cópia de segurança
|
||||
arch.version.replaces = Substitui
|
||||
container.images.title = Imagens
|
||||
|
||||
[secrets]
|
||||
secrets=Segredos
|
||||
|
|
|
@ -234,7 +234,7 @@ license_desc=Всё это на <a target="_blank" rel="noopener noreferrer" hre
|
|||
[install]
|
||||
install=Установка
|
||||
title=Начальная конфигурация
|
||||
docker_helper=Если вы запускаете Forgejo под Docker, пожалуйста, ознакомьтесь с <a target="_blank" rel="noopener noreferrer" href="%s">документацией</a>, прежде чем изменять любые настройки.
|
||||
docker_helper=Если вы запускаете Forgejo под Docker, прежде чем изменять любые настройки, пожалуйста, ознакомьтесь с <a target="_blank" rel="noopener noreferrer" href="%s">документацией</a>.
|
||||
require_db_desc=Forgejo требуется MySQL, PostgreSQL, SQLite3 или TiDB (по протоколу MySQL).
|
||||
db_title=Настройки базы данных
|
||||
db_type=Тип базы данных
|
||||
|
@ -267,16 +267,16 @@ repo_path=Путь до каталога репозиториев
|
|||
repo_path_helper=Все удалённые Git репозитории будут сохранены в этом каталоге.
|
||||
lfs_path=Путь до корневого каталога Git LFS
|
||||
lfs_path_helper=В этом каталоге будут храниться файлы Git LFS. Оставьте пустым, чтобы отключить LFS.
|
||||
run_user=Выполнение под пользователем
|
||||
run_user=Работа под пользователем
|
||||
run_user_helper=Имя пользователя операционной системы, под которым работает Forgejo. Обратите внимание, что этот пользователь должен иметь доступ к корневому пути репозиториев.
|
||||
domain=Домен сервера
|
||||
domain_helper=Домен или адрес хоста для сервера.
|
||||
ssh_port=Порт SSH-сервера
|
||||
ssh_port_helper=Номер порта, используемый SSH-сервером. Оставьте пустым для отключения доступа по SSH.
|
||||
ssh_port_helper=Номер порта, используемый для входящих подключений по SSH. Оставьте пустым для отключения доступа по SSH.
|
||||
http_port=Порт HTTP-сервера
|
||||
http_port_helper=Номер порта, используемый веб-сервером Forgejo.
|
||||
app_url=Базовый URL Forgejo
|
||||
app_url_helper=Этот параметр влияет на URL для клонирования по HTTP/HTTPS и на некоторые уведомления по эл. почте.
|
||||
app_url=Базовый URL
|
||||
app_url_helper=Этот параметр влияет на URL клонирования по HTTP/HTTPS и на ссылки в уведомлениях по эл. почте.
|
||||
log_root_path=Путь журналов
|
||||
log_root_path_helper=Файлы журнала будут записываться в этот каталог.
|
||||
|
||||
|
@ -284,9 +284,9 @@ optional_title=Дополнительные настройки
|
|||
email_title=Настройки эл. почты
|
||||
smtp_addr=Адрес SMTP
|
||||
smtp_port=Порт SMTP
|
||||
smtp_from=Отправлять письма от
|
||||
smtp_from=Отправитель
|
||||
smtp_from_helper=Адрес эл. почты, который будет использоваться Forgejo. Введите обычный адрес эл. почты или используйте формат "Имя" <email@example.com>.
|
||||
mailer_user=Логин SMTP
|
||||
mailer_user=Имя пользователя SMTP
|
||||
mailer_password=Пароль SMTP
|
||||
register_confirm=Требовать подтверждение по эл. почте для регистрации
|
||||
mail_notify=Уведомления по эл. почте
|
||||
|
@ -316,7 +316,7 @@ confirm_password=Подтверждение пароля
|
|||
admin_email=Адрес эл. почты
|
||||
install_btn_confirm=Установить Forgejo
|
||||
test_git_failed=Не удалось проверить команду «git»: %v
|
||||
sqlite3_not_available=Эта версия Forgejo не поддерживает SQLite3. Пожалуйста, загрузите официальную бинарную сборку из %s (не сборку «gobuild»).
|
||||
sqlite3_not_available=Эта версия Forgejo не поддерживает SQLite3. Пожалуйста, скачайте официальную сборку из %s (не версию «gobuild»).
|
||||
invalid_db_setting=Некорректные настройки базы данных: %v
|
||||
invalid_db_table=Таблица «%s» базы данных некорректна: %v
|
||||
invalid_repo_path=Недопустимый путь к корню репозитория: %v
|
||||
|
@ -360,7 +360,7 @@ my_orgs=Организации
|
|||
my_mirrors=Мои зеркала
|
||||
view_home=Показать %s
|
||||
search_repos=Поиск репозитория…
|
||||
filter=Другие фильтры
|
||||
filter=Прочие фильтры
|
||||
filter_by_team_repositories=Фильтровать по репозиториям команды
|
||||
feed_of=Лента «%s»
|
||||
|
||||
|
@ -687,13 +687,13 @@ change_avatar=Изменить изображение профиля…
|
|||
joined_on=Регистрация %s
|
||||
repositories=Репозитории
|
||||
activity=Публичная активность
|
||||
followers_few=%d подписчики
|
||||
followers_few=%d подписчиков
|
||||
starred=Избранные репозитории
|
||||
watched=Отслеживаемые репозитории
|
||||
code=Код
|
||||
projects=Проекты
|
||||
overview=Обзор
|
||||
following_few=%d подписки
|
||||
following_few=%d подписок
|
||||
follow=Подписаться
|
||||
unfollow=Отписаться
|
||||
user_bio=О себе
|
||||
|
@ -810,10 +810,10 @@ password_change_disabled=Нелокальные учётные записи не
|
|||
|
||||
emails=Адреса эл. почты
|
||||
manage_emails=Управление адресами эл. почты
|
||||
manage_themes=Тема по умолчанию
|
||||
manage_themes=Тема интерфейса
|
||||
manage_openid=Адреса OpenID
|
||||
email_desc=Ваш основной адрес эл. почты будет использоваться для уведомлений, восстановления пароля и, если он не скрыт, для действий с Git в веб-интерфейсе.
|
||||
theme_desc=Это будет темой по умолчанию для всего сайта.
|
||||
theme_desc=Эта тема оформления будет использоваться при входе на сайт под этой учётной записью.
|
||||
primary=Основной
|
||||
activated=Активирован
|
||||
requires_activation=Требуется активация
|
||||
|
@ -941,7 +941,7 @@ select_permissions=Выбрать разрешения
|
|||
permission_no_access=Нет доступа
|
||||
permission_read=Чтение
|
||||
permission_write=Чтение и запись
|
||||
access_token_desc=Выбранные области действия токена ограничивают авторизацию только соответствующими маршрутами <a href="%[1]s" target="_blank">API</a>. Читайте <a href="%[2]s" target="_blank">документацию</a> для получения дополнительной информации.
|
||||
access_token_desc=Выбранные области действия токена ограничивают его использование до соответствующих маршрутов <a href="%[1]s" target="_blank">API</a>. Для получения подробностей ознакомьтесь с <a href="%[2]s" target="_blank">документацией</a> .
|
||||
at_least_one_permission=Необходимо выбрать хотя бы одно разрешение для создания токена
|
||||
permissions_list=Разрешения:
|
||||
|
||||
|
@ -949,7 +949,7 @@ manage_oauth2_applications=Управление приложениями OAuth2
|
|||
edit_oauth2_application=Изменить приложение OAuth2
|
||||
oauth2_applications_desc=Приложения OAuth2 позволяет стороннему приложению к безопасно аутентифицировать пользователей данной установки Forgejo.
|
||||
remove_oauth2_application=Удаление приложения OAuth2
|
||||
remove_oauth2_application_desc=Удаление приложения OAuth2 отменит доступ ко всем подписанным токенам доступа. Продолжить?
|
||||
remove_oauth2_application_desc=Удаление этого приложения отменит доступ ко всем подписанным токенам доступа. Продолжить?
|
||||
remove_oauth2_application_success=Приложение было успешно удалено.
|
||||
create_oauth2_application=Создать новое приложение OAuth2
|
||||
create_oauth2_application_button=Создать приложение
|
||||
|
@ -1051,7 +1051,7 @@ additional_repo_units_hint_description = Показывать подсказку
|
|||
pronouns_custom = Другие
|
||||
pronouns = Местоимения
|
||||
pronouns_unspecified = Не указаны
|
||||
language.title = Язык по умолчанию
|
||||
language.title = Язык интерфейса
|
||||
keep_activity_private.description = Ваша <a href="%s">публичная активность</a> будет видна только вам и администраторам сервера.
|
||||
language.description = Выбранный язык будет сохранён в вашей уч. записи и будет использован по умолчанию после входа.
|
||||
language.localization_project = Помогите с переводом Forgejo на свой язык! <a href="%s">Подробнее</a>.
|
||||
|
@ -1065,11 +1065,11 @@ repo_size=Размер репозитория
|
|||
size_format = `%[1]s: %[2]s; %[3]s: %[4]s`
|
||||
template=Шаблон
|
||||
template_select=Выберите шаблон
|
||||
template_helper=Сделать репозиторий шаблоном
|
||||
template_helper=Пометить репозиторий как шаблон
|
||||
template_description=Шаблонные репозитории дают возможность пользователям создавать новые репозитории с той же структурой каталогов, файлами и дополнительными настройками.
|
||||
visibility=Видимость
|
||||
visibility_description=Это увидят только владелец организации или участники при наличии прав.
|
||||
visibility_helper=Сделать репозиторий приватным
|
||||
visibility_description=Он будет видим только владельцу организации и её участникам при наличии прав.
|
||||
visibility_helper=Частный репозиторий
|
||||
visibility_helper_forced=Администратор сайта настроил параметр видимости новых репозиториев. Репозиторий приватный по умолчанию.
|
||||
visibility_fork_helper=(Это изменит видимость всех ответвлений.)
|
||||
clone_helper=Нужна помощь в клонировании? Посетите страницу <a target="_blank" rel="noopener noreferrer" href="%s">помощи</a>.
|
||||
|
@ -1091,12 +1091,12 @@ repo_desc=Описание
|
|||
repo_desc_helper=Добавьте краткое описание (необязательно)
|
||||
repo_lang=Язык
|
||||
repo_gitignore_helper=Выберите шаблоны .gitignore
|
||||
repo_gitignore_helper_desc=Выберите из списка шаблонов для популярных языков , какие файлы не надо отслеживать. По умолчанию в .gitignore включены типичные артефакты, создаваемые инструментами сборки каждого языка.
|
||||
repo_gitignore_helper_desc=Выберите шаблоны из списка для популярных языков. .gitignore определяет, какие файлы не надо отслеживать в проекте. По умолчанию в него включены типичные артефакты, создаваемые инструментами сборки каждого языка.
|
||||
issue_labels=Метки
|
||||
issue_labels_helper=Выберите набор меток
|
||||
license=Лицензия
|
||||
license_helper=Выберите лицензию
|
||||
license_helper_desc=Лицензия определяет, что другие люди могут, а что не могут делать с вашим кодом. Не уверены, какая лицензия подходит для вашего проекта? Смотрите <a target="_blank" rel="noopener noreferrer" href="%s">Выберите лицензию.</a>
|
||||
license_helper_desc=Лицензия определяет, что другие могут и не могут делать с вашим кодом. Не знаете, какая лицензия подойдёт для вашего проекта? Ознакомьтесь с <a target="_blank" rel="noopener noreferrer" href="%s">Выбором лицензии</a>.
|
||||
readme=README
|
||||
readme_helper=Выберите шаблон README
|
||||
readme_helper_desc=Это место, где вы можете написать подробное описание вашего проекта.
|
||||
|
@ -1719,8 +1719,8 @@ issues.due_date_form_add=Добавить срок выполнения
|
|||
issues.due_date_form_edit=Изменить
|
||||
issues.due_date_form_remove=Удалить
|
||||
issues.due_date_not_set=Срок выполнения не установлен.
|
||||
issues.due_date_added=добавлен срок выполнения %s %s
|
||||
issues.due_date_modified=срок выполнения передвинут с %[2]s на %[1]s %[3]s
|
||||
issues.due_date_added=добавлен срок выполнения – %s, %s
|
||||
issues.due_date_modified=срок выполнения изменён с %[2]s на %[1]s %[3]s
|
||||
issues.due_date_remove=убран срок выполнения %s %s
|
||||
issues.due_date_overdue=Просроченные
|
||||
issues.due_date_invalid=Срок выполнения недействителен или находится за пределами допустимого диапазона. Пожалуйста, используйте формат «гггг-мм-дд».
|
||||
|
@ -2463,11 +2463,11 @@ settings.archive.header=Архивация репозитория
|
|||
settings.archive.success=Репозиторий был успешно архивирован.
|
||||
settings.archive.error=Ошибка при попытке архивировать репозиторий. Смотрите логи для получения подробностей.
|
||||
settings.archive.error_ismirror=Вы не можете поместить зеркалируемый репозиторий в архив.
|
||||
settings.archive.branchsettings_unavailable=Настройки ветви недоступны, если репозиторий архивирован.
|
||||
settings.archive.tagsettings_unavailable=Настройки тегов недоступны, если репозиторий архивирован.
|
||||
settings.archive.branchsettings_unavailable=Настройки ветвей недоступны в архивированных репозиториях.
|
||||
settings.archive.tagsettings_unavailable=Настройки тегов недоступны в архивированных репозиториях.
|
||||
settings.unarchive.button=Разархивировать
|
||||
settings.unarchive.header=Вернуть этот репозиторий из архива
|
||||
settings.unarchive.text=Разархивирование репозитория восстановит его способность принимать изменения, а также новые задачи и запросы на слияние.
|
||||
settings.unarchive.text=Разархивация репозитория восстановит возможность отправлять в него изменения, а также создавать новые задачи и запросы на слияние.
|
||||
settings.unarchive.success=Репозиторий был успешно разархивирован.
|
||||
settings.update_avatar_success=Картинка репозитория изменена.
|
||||
settings.lfs=LFS
|
||||
|
@ -2661,7 +2661,7 @@ error.csv.unexpected=Не удается отобразить этот файл,
|
|||
error.csv.invalid_field_count=Не удается отобразить этот файл, потому что он имеет неправильное количество полей в строке %d.
|
||||
mirror_address_protocol_invalid = Эта ссылка недействительна. Для зеркалирования можно использовать только расположения http(s):// и git:// .
|
||||
fork_no_valid_owners = Невозможно создать ответвление этого репозитория, т.к. здесь нет действующих владельцев.
|
||||
new_repo_helper = Репозиторий содержит все файлы проекта и историю изменений. Уже где-то есть репозиторий? <a href="%s">Выполните перенос.</a>
|
||||
new_repo_helper = Репозиторий содержит все файлы проекта и историю изменений. Уже где-то есть репозиторий? <a href="%s">Выполните перенос</a>.
|
||||
mirror_address_url_invalid = Эта ссылка недействительна. Необходимо правильно указать все части адреса.
|
||||
issues.comment.blocked_by_user = Вы не можете комментировать под этой задачей, т.к. вы заблокированы владельцем репозитория или автором задачи.
|
||||
pulls.blocked_by_user = Невозможно создать запрос на слияние в этом репозитории, т.к. вы заблокированы его владельцем.
|
||||
|
@ -2707,7 +2707,7 @@ pulls.recently_pushed_new_branches = Вы отправили коммиты в
|
|||
milestones.new_subheader = Этапы полезны для систематизации задач и отслеживания их выполнения.
|
||||
wiki.cancel = Отмена
|
||||
settings.unarchive.error = При распаковке репозитория произошла ошибка. Подробности доступны в логе.
|
||||
settings.archive.mirrors_unavailable = Зеркалирование недоступно для архивированных репозиториев.
|
||||
settings.archive.mirrors_unavailable = Настройки зеркалирования недоступны в архивированных репозиториях.
|
||||
issues.role.contributor_helper = В репозитории присутствуют коммиты за авторством этого пользователя.
|
||||
settings.wiki_rename_branch_main = Нормализовать название ветви вики
|
||||
settings.wiki_rename_branch_main_notices_2 = Внутренняя ветвь вики репозитория %s будет переименована. Несохранённые изменения потребуют обновления.
|
||||
|
@ -2849,6 +2849,8 @@ diff.git-notes.add = Добавить заметку
|
|||
issues.num_reviews_few = %d рецензий
|
||||
issues.num_reviews_one = %d рецензия
|
||||
issues.summary_card_alt = Карточка со сводкой задачи "%s" в репозитории %s
|
||||
editor.add_tmpl.filename = имя файла
|
||||
settings.default_update_style_desc = Стиль обновления отстающих ветвей запросов на слияние по умолчанию.
|
||||
|
||||
[graphs]
|
||||
component_loading_failed = Не удалось загрузить %s
|
||||
|
@ -3314,13 +3316,13 @@ auths.invalid_openIdConnectAutoDiscoveryURL=Неверный URL для авто
|
|||
config.server_config=Конфигурация сервера
|
||||
config.app_name=Название сервера
|
||||
config.app_ver=Версия Forgejo
|
||||
config.app_url=Базовый URL Forgejo
|
||||
config.app_url=Базовый URL
|
||||
config.custom_conf=Путь к файлу конфигурации
|
||||
config.custom_file_root_path=Путь до каталога с файлами для персонализации
|
||||
config.domain=Домен сервера
|
||||
config.offline_mode=Локальный режим
|
||||
config.disable_router_log=Отключение журнала маршрутизатора
|
||||
config.run_user=Выполнение под пользователем
|
||||
config.run_user=Работа под пользователем
|
||||
config.run_mode=Режим работы
|
||||
config.git_version=Версия git
|
||||
config.app_data_path=Путь к данным приложения
|
||||
|
@ -3504,7 +3506,7 @@ notices.delete_success=Уведомления системы были удале
|
|||
self_check.no_problem_found = Пока проблем не обнаружено.
|
||||
auths.tip.gitea = Зарегистрируйте новое приложение OAuth2. Доступна инструкция: %s
|
||||
auths.tips.oauth2.general.tip = При регистрации нового приложения OAuth2 ссылка обратного перенаправления должна быть:
|
||||
self_check.database_fix_mysql = Пользователи MySQL и MariaDB могут исправить проблемы с сопоставлением командой "gitea doctor convert". Также можно вручную вписать "ALTER ... COLLATE ..." в SQL.
|
||||
self_check.database_fix_mysql = Пользователи MySQL и MariaDB могут исправить проблемы с сопоставлением командой "forgejo doctor convert". Также можно вручную вписать "ALTER ... COLLATE ..." в SQL.
|
||||
dashboard.cleanup_actions = Очистить устаревшие журналы и артефакты Действий
|
||||
dashboard.sync_repo_branches = Синхронизировать ветви из Git в базу данных
|
||||
assets = Кодовые объекты
|
||||
|
@ -3696,7 +3698,7 @@ conda.install=Чтобы установить пакет с помощью Conda
|
|||
container.details.type=Тип образа
|
||||
container.details.platform=Платформа
|
||||
container.pull=Загрузите образ из командной строки:
|
||||
container.digest=Отпечаток:
|
||||
container.digest=Отпечаток
|
||||
container.multi_arch=ОС / архитектура
|
||||
container.layers=Слои образа
|
||||
container.labels=Метки
|
||||
|
@ -3811,6 +3813,7 @@ arch.version.replaces = Заменяет
|
|||
arch.version.backup = Рез. копия
|
||||
arch.version.conflicts = Конфликтует с
|
||||
arch.version.checkdepends = Проверочные зависимости
|
||||
container.images.title = Образы
|
||||
|
||||
[secrets]
|
||||
secrets=Секреты
|
||||
|
@ -3954,28 +3957,28 @@ fuzzy_tooltip = Включает результаты, достаточно по
|
|||
type_tooltip = Тип поиска
|
||||
fuzzy = Приблизительный
|
||||
match = Точный
|
||||
repo_kind = Поиск репозиториев...
|
||||
user_kind = Поиск пользователей...
|
||||
org_kind = Поиск организаций...
|
||||
team_kind = Поиск команд...
|
||||
code_kind = Поиск по коду...
|
||||
package_kind = Поиск пакетов...
|
||||
project_kind = Поиск проектов...
|
||||
branch_kind = Поиск ветвей...
|
||||
commit_kind = Поиск коммитов...
|
||||
repo_kind = Найти репозитории...
|
||||
user_kind = Найти пользователей...
|
||||
org_kind = Найти организации...
|
||||
team_kind = Найти команды...
|
||||
code_kind = Найти в коде...
|
||||
package_kind = Найти пакеты...
|
||||
project_kind = Найти проекты...
|
||||
branch_kind = Найти ветви...
|
||||
commit_kind = Найти коммиты...
|
||||
no_results = По запросу ничего не найдено.
|
||||
keyword_search_unavailable = Поиск по ключевым словам недоступен. Уточните подробности у администратора.
|
||||
keyword_search_unavailable = Поиск по ключевым словам недоступен. Уточните подробности у администратора сервера.
|
||||
match_tooltip = Включать только результаты, точно соответствующие запросу
|
||||
code_search_unavailable = Поиск по коду сейчас недоступен. Уточните подробности у администратора.
|
||||
runner_kind = Поиск исполнителей...
|
||||
code_search_by_git_grep = Эти результаты получены через «git grep». Результатов может быть больше, если администратор сервера включит индексатор кода.
|
||||
code_search_unavailable = Поиск в коде недоступен. Уточните подробности у администратора сервера.
|
||||
runner_kind = Найти исполнителей...
|
||||
code_search_by_git_grep = Эти результаты получены через «git grep». Результатов может быть больше, если на сервере будет включен индексатор кода.
|
||||
exact = Точный
|
||||
exact_tooltip = Включает только результаты, в точности соответствующие запросу
|
||||
issue_kind = Поиск задач...
|
||||
pull_kind = Поиск слияний...
|
||||
issue_kind = Найти задачи...
|
||||
pull_kind = Найти слияния...
|
||||
union_tooltip = Включает результаты с совпавшими ключевыми словами, разделёнными пробелами
|
||||
union = Обычный
|
||||
milestone_kind = Поиск этапов...
|
||||
milestone_kind = Найти этапы...
|
||||
regexp = Регулярное выражение
|
||||
regexp_tooltip = Интерпретировать поисковый запрос как регулярное выражение
|
||||
|
||||
|
@ -3986,7 +3989,7 @@ filepreview.lines = Строки с %[1]d по %[2]d в %[3]s
|
|||
filepreview.truncated = Предпросмотр был обрезан
|
||||
|
||||
[translation_meta]
|
||||
test = ура :)
|
||||
test = forgejo :)
|
||||
|
||||
[repo.permissions]
|
||||
code.write = <b>Запись:</b> отправка изменений в репозиторий, создание веток и тегов.
|
||||
|
|
|
@ -240,7 +240,7 @@ smtp_from_helper = e-poštni naslov, ki ga bo uporabljal Forgejo. Vnesite navade
|
|||
[admin]
|
||||
users.allow_git_hook_tooltip = Kljuke Git se izvajajo kot uporabnik operacijskega sistema, v katerem je nameščen program Forgejo, in imajo enako raven dostopa do gostitelja. Uporabniki s tem posebnim privilegijem Git Hook lahko dostopajo do vseh skladišč Forgejo in spreminjajo vse zbirke Forgejo ter podatkovno bazo, ki jo uporablja Forgejo. Posledično lahko pridobijo tudi skrbniške privilegije Forgejo.
|
||||
auths.force_smtps_helper = SMTPS se vedno uporablja na vratih 465. Če želite, da se SMTPS uporablja tudi na drugih vratih, to nastavite. (V nasprotnem primeru se bo STARTTLS uporabljal na drugih vratih, če ga gostitelj podpira.)
|
||||
self_check.database_fix_mysql = Uporabniki MySQL/MariaDB lahko za odpravo težav s kollacijo uporabite ukaz "gitea doctor convert", lahko pa težavo odpravite tudi z ukazom "ALTER ... COLLATE ..." SQL ročno.
|
||||
self_check.database_fix_mysql = Uporabniki MySQL/MariaDB lahko za odpravo težav s kollacijo uporabite ukaz "forgejo doctor convert", lahko pa težavo odpravite tudi z ukazom "ALTER ... COLLATE ..." SQL ročno.
|
||||
users.purge_help = Prisilno izbrišite uporabnika in vsa skladišča, organizacije in pakete, ki so v njegovi lasti. Izbrisani bodo tudi vsi komentarji in vprašanja, ki jih je objavil ta uporabnik.
|
||||
auths.sspi_default_language_helper = Privzet jezik za uporabnike, samodejno ustvarjene z metodo avtentikacije SSPI. Pustite prazno, če želite, da se jezik zazna samodejno.
|
||||
auths.restricted_filter_helper = Pustite prazno, če ne želite nastaviti nobenega uporabnika kot omejenega. Uporabite zvezdico ("*"), če želite vse uporabnike, ki se ne ujemajo z administratorskim filtrom, nastaviti kot omejene.
|
||||
|
|
|
@ -143,13 +143,13 @@ filter.clear = Очистити фільтри
|
|||
filter.is_archived = Архівовано
|
||||
filter = Фільтри
|
||||
toggle_menu = Перемкнути видимість меню
|
||||
confirm_delete_artifact = Ви впевнені, що хочете видалити артефакт "%s"?
|
||||
confirm_delete_artifact = Ви впевнені, що хочете видалити артефакт «%s»?
|
||||
artifacts = Артефакти
|
||||
filter.not_archived = Не архівовано
|
||||
filter.public = Загальнодоступні
|
||||
filter.private = Приватні
|
||||
more_items = Більше пунктів
|
||||
remove_label_str = Видалити об'єкт "%s"
|
||||
remove_label_str = Видалити об'єкт «%s»
|
||||
new_repo.title = Новий репозиторій
|
||||
new_migrate.title = Нова міграція
|
||||
new_org.title = Нова організація
|
||||
|
@ -334,7 +334,7 @@ password_algorithm=Алгоритм хешування пароля
|
|||
config_location_hint = Ці опції налаштувань будуть збережені в:
|
||||
env_config_keys = Конфігурація середовища
|
||||
env_config_keys_prompt = Ці змінні середовища будуть також застосовані до вашого файлу конфігурації:
|
||||
invalid_db_table = База даних "%s" недійсна: %v
|
||||
invalid_db_table = База даних «%s» недійсна: %v
|
||||
enable_update_checker = Увімкнути перевірку оновлень
|
||||
require_db_desc = Forgejo вимагає MySQL, PostgreSQL, SQLite3 чи TiDB (протокол MySQL).
|
||||
allow_only_external_registration = Дозволити реєстрацію тільки через зовнішні сервіси
|
||||
|
@ -645,7 +645,7 @@ Pronouns = Займенники
|
|||
Biography = Про себе
|
||||
FullName = Повне ім'я
|
||||
Website = Вебсайт
|
||||
url_error = `"%s" є недійсним посиланням.`
|
||||
url_error = `«%s» є недійсним посиланням.`
|
||||
To = Назва гілки
|
||||
Location = Розташування
|
||||
AccessToken = Токен доступу
|
||||
|
@ -749,7 +749,7 @@ emails=Адреса електронної пошти
|
|||
manage_emails=Керування адресами ел. пошти
|
||||
manage_themes=Тема за замовчуванням
|
||||
manage_openid=Адреси OpenID
|
||||
theme_desc=Ця тема буде типовою для всього сайту.
|
||||
theme_desc=Ця тема буде типовою для веб-інтерфейсу, коли ви ввійдете в систему.
|
||||
primary=Основний
|
||||
activated=Активовано
|
||||
requires_activation=Потрібна активація
|
||||
|
@ -861,7 +861,7 @@ oauth2_applications_desc=Програми OAuth2 дають можливість
|
|||
remove_oauth2_application=Видалити програму OAuth2
|
||||
remove_oauth2_application_desc=Видалення програми OAuth2 скасовує доступ до всіх підписаних маркерів доступу. Продовжити?
|
||||
remove_oauth2_application_success=Програму видалено.
|
||||
create_oauth2_application=Створити нову програму OAuth2
|
||||
create_oauth2_application=Створити новий додаток OAuth2
|
||||
create_oauth2_application_button=Створити програму
|
||||
oauth2_application_name=Назва програми
|
||||
save_application=Зберегти
|
||||
|
@ -965,6 +965,7 @@ comment_type_group_pull_request_push = Додані коміти
|
|||
permissions_public_only = Тільки публічні
|
||||
select_permissions = Виберіть дозволи
|
||||
permissions_access_all = Усі (публічні, приватні й обмежені)
|
||||
create_oauth2_application_success = Ви успішно створили новий додаток OAuth2.
|
||||
|
||||
[repo]
|
||||
owner=Власник
|
||||
|
@ -1000,7 +1001,7 @@ issue_labels=Мітки
|
|||
issue_labels_helper=Виберіть набір міток
|
||||
license=Ліцензія
|
||||
license_helper=Виберіть файл ліцензії
|
||||
license_helper_desc=Ліцензія регулює те, що інші можуть і не можуть робити з вашим кодом. Не впевнені, що саме підходить для вашого проєкту? Дивіться <a target="_blank" rel="noopener noreferrer" href="%s">Виберіть ліцензію.</a>
|
||||
license_helper_desc=Ліцензія регулює те, що інші можуть і не можуть робити з вашим кодом. Не впевнені, що саме підходить для вашого проєкту? Дивіться <a target="_blank" rel="noopener noreferrer" href="%s">Виберіть ліцензію</a>.
|
||||
readme=README
|
||||
readme_helper=Виберіть шаблон README
|
||||
readme_helper_desc=Це місце, де ви можете написати повний опис вашого проєкту.
|
||||
|
@ -1088,7 +1089,7 @@ migrate_items_merge_requests=Запити на об'єднання
|
|||
migrate_items_releases=Релізи
|
||||
migrate_repo=Перенести репозиторій
|
||||
migrate.clone_address=Міграція / клонувати з URL-адреси
|
||||
migrate.clone_address_desc=URL-адреса HTTP(S) або Git "clone" існуючого репозиторія
|
||||
migrate.clone_address_desc=URL-адреса HTTP(S) або Git «clone» існуючого репозиторію
|
||||
migrate.clone_local_path=або шлях до локального серверу
|
||||
migrate.permission_denied=Вам не дозволено імпортувати локальні репозиторії.
|
||||
migrate.permission_denied_blocked=Ви не можете імпортувати з заборонених вузлів, будь ласка, попросіть адміністратора перевірити налаштування ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS.
|
||||
|
@ -2060,8 +2061,8 @@ settings.archive.header=Архівувати цей репозиторій
|
|||
settings.archive.success=Репозиторію успішно присвоєно статус архівного.
|
||||
settings.archive.error=Сталася помилка при спробі архівувати репозиторій. Докладнішу інформацію див. у журналі.
|
||||
settings.archive.error_ismirror=Неможливо архівувати дзеркальний репозиротрій.
|
||||
settings.archive.branchsettings_unavailable=Параметри гілки не доступні, якщо репозиторій архівний.
|
||||
settings.archive.tagsettings_unavailable=Параметри міток недоступні, якщо репозиторій архівний.
|
||||
settings.archive.branchsettings_unavailable=Параметри гілки недоступні в архівованих репозиторіях.
|
||||
settings.archive.tagsettings_unavailable=Параметри міток недоступні в архівованих репозиторіях.
|
||||
settings.update_avatar_success=Аватар репозиторію оновлений.
|
||||
settings.lfs=LFS
|
||||
settings.lfs_filelist=Файли LFS, які зберігаються в цьому репозиторії
|
||||
|
@ -2070,7 +2071,7 @@ settings.lfs_findcommits=Знайти коміти
|
|||
settings.lfs_lfs_file_no_commits=Не знайдено комітів для цього файлу LFS
|
||||
settings.lfs_noattribute=Цей шлях не має атрибуту блокування в гілці за замовчуванням
|
||||
settings.lfs_delete=Видалити файл LFS з OID %s
|
||||
settings.lfs_delete_warning=Видалення файлу LFS може спричинити помилки "Об'єкт не існує" під час перевірки. Ви впевнені?
|
||||
settings.lfs_delete_warning=Видалення файлу LFS може спричинити помилки «Об'єкт не існує» під час перевірки. Ви впевнені?
|
||||
settings.lfs_findpointerfiles=Знайти файли-посилання
|
||||
settings.lfs_locks=Блокування
|
||||
settings.lfs_invalid_locking_path=Неприпустимий шлях: %s
|
||||
|
@ -2418,6 +2419,10 @@ contributors.contribution_type.additions = Додавання
|
|||
settings.add_web_hook_desc = Інтегрувати <a target="_blank" rel="noreferrer" href="%s">%s</a> у цей репозиторій.
|
||||
settings.event_wiki_desc = Вікі-сторінку створено, перейменовано, відредаговано або видалено.
|
||||
settings.mirror_settings.push_mirror.copy_public_key = Копіювати публічний ключ
|
||||
editor.add_tmpl.filename = назва файлу
|
||||
settings.unarchive.button = Розархівувати репозиторій
|
||||
object_format = Формат об'єкта
|
||||
settings.archive.mirrors_unavailable = Дзеркала недоступні в архівованих репозиторіях.
|
||||
|
||||
[graphs]
|
||||
contributors.what = внески
|
||||
|
@ -2793,15 +2798,15 @@ auths.tips.oauth2.general=Автентифікація OAuth2
|
|||
auths.tip.oauth2_provider=Постачальник OAuth2
|
||||
auths.tip.bitbucket=Створіть OAuth URI на сторінці %s
|
||||
auths.tip.nextcloud=`Зареєструйте нового споживача OAuth у вашому екземплярі за допомогою наступного меню "Налаштування -> Безпека -> клієнт OAuth 2.0"`
|
||||
auths.tip.dropbox=Додайте новий додаток на %s
|
||||
auths.tip.facebook=`Створіть новий додаток на %s і додайте модуль "Facebook Login"`
|
||||
auths.tip.github=Додайте OAuth додаток на %s
|
||||
auths.tip.dropbox=Створіть новий додаток на %s
|
||||
auths.tip.facebook=Зареєструйте новий додаток на %s і додайте модуль «Facebook Login»
|
||||
auths.tip.github=Зареєструйте новий додаток OAuth на %s
|
||||
auths.tip.gitlab=Додайте новий додаток на https://gitlab.com/profile/applications
|
||||
auths.tip.google_plus=Отримайте облікові дані клієнта OAuth2 в консолі Google API на сторінці %s
|
||||
auths.tip.openid_connect=Використовуйте OpenID Connect Discovery URL (<server>/.well-known/openid-configuration) для автоматичної настройки входу OAuth
|
||||
auths.tip.twitter=Перейдіть на %s, створіть програму і переконайтеся, що включена опція «Дозволити цю програму для входу в систему за допомогою Twitter»
|
||||
auths.tip.discord=Зареєструйте новий додаток на %s
|
||||
auths.tip.yandex=`Створіть нову програму в %s. Виберіть наступні дозволи з "Yandex. assport API": "Доступ до адреси електронної пошти", "Доступ до аватара" і "Доступ до імені користувача, імені та прізвища, статі"`
|
||||
auths.tip.yandex=Створіть новий додаток на %s. Виберіть наступні дозволи з «Yandex. assport API»: «Доступ до адреси електронної пошти», «Доступ до аватара» і «Доступ до імені користувача, імені та прізвища, статі»
|
||||
auths.tip.mastodon=Введіть URL спеціального екземпляра для екземпляра mastodon, який ви хочете автентифікувати за допомогою (або використовувати за замовчуванням)
|
||||
auths.edit=Редагувати джерело автентифікації
|
||||
auths.activated=Це джерело авторизації активоване
|
||||
|
@ -2826,7 +2831,7 @@ config.disable_router_log=Вимкнути логування роутеру
|
|||
config.run_user=Користувач, від якого запустити
|
||||
config.run_mode=Режим виконання
|
||||
config.git_version=Версія Git
|
||||
config.repo_root_path=Кореневий шлях репозиторія
|
||||
config.repo_root_path=Шлях до кореня репозиторію
|
||||
config.lfs_root_path=Кореневий шлях LFS
|
||||
config.log_file_root_path=Шлях до лог файлу
|
||||
config.script_type=Тип скрипта
|
||||
|
@ -2908,7 +2913,7 @@ config.cache_item_ttl=Час зберігання даних кешу
|
|||
config.session_config=Конфігурація сесії
|
||||
config.session_provider=Провайдер сесії
|
||||
config.provider_config=Конфігурація постачальника
|
||||
config.cookie_name=Ім'я файлу cookie
|
||||
config.cookie_name=Назва файлу cookie
|
||||
config.gc_interval_time=Інтервал запуску збирача сміття (GC)
|
||||
config.session_life_time=Час життя сесії
|
||||
config.https_only=Тільки HTTPS
|
||||
|
@ -3016,6 +3021,8 @@ monitor.queue.settings.desc = Пули динамічно зростають у
|
|||
monitor.queue.settings.remove_all_items_done = Усі елементи в черзі видалено.
|
||||
monitor.queue.settings.remove_all_items = Видалити всі
|
||||
config.app_slogan = Гасло екземпляра
|
||||
auths.tip.gitea = Зареєструйте новий додаток OAuth. Інструкцію можна знайти на %s
|
||||
auths.tip.gitlab_new = Зареєструйте новий додаток на %s
|
||||
|
||||
|
||||
[action]
|
||||
|
@ -3184,6 +3191,10 @@ settings.delete.error = Не вдалося видалити пакунок.
|
|||
settings.delete.success = Пакунок видалено.
|
||||
npm.dependencies = Залежності
|
||||
settings.delete = Видалити пакунок
|
||||
npm.dependencies.development = Залежності розробки
|
||||
rubygems.dependencies.development = Залежності розробки
|
||||
npm.dependencies.optional = Необов'язкові залежності
|
||||
container.images.title = Образи
|
||||
|
||||
[secrets]
|
||||
deletion = Видалити секрет
|
||||
|
@ -3299,7 +3310,7 @@ milestone_kind = Шукати віхи...
|
|||
commit_kind = Шукати коментарі...
|
||||
no_results = Не знайдено відповідних результатів.
|
||||
keyword_search_unavailable = Пошук за ключовими словами наразі недоступний. Будь ласка, зв'яжіться з адміністратором сайту.
|
||||
code_search_by_git_grep = Поточні результати пошуку коду надаються з "git grep". Тут можуть бути кращі результати, якщо адміністратор сайту ввімкнув індексацію коду.
|
||||
code_search_by_git_grep = Поточні результати пошуку коду надаються з «git grep». Тут можуть бути кращі результати, якщо адміністратор сайту ввімкнув індексацію коду.
|
||||
package_kind = Шукати пакунки...
|
||||
project_kind = Шукати проєкти...
|
||||
branch_kind = Шукати гілки...
|
||||
|
|
|
@ -812,7 +812,7 @@ manage_emails=管理邮箱地址
|
|||
manage_themes=默认主题
|
||||
manage_openid=OpenID 地址
|
||||
email_desc=您的主要电子邮件地址将用于通知、密码恢复,基于网页界面的Git操作(只要它不是设置为隐藏的)。
|
||||
theme_desc=这将是您在整个网站上的默认主题。
|
||||
theme_desc=此主题将在您已登录时被用于网页界面。
|
||||
primary=主要
|
||||
activated=已激活
|
||||
requires_activation=需要激活
|
||||
|
@ -1056,7 +1056,7 @@ language.description = 此语言将保存到您的账号中,并在您登录后
|
|||
language.localization_project = 帮助我们将 Forgejo 翻译成您的语言!<a href="%s">了解更多</a>。
|
||||
|
||||
[repo]
|
||||
new_repo_helper=代码仓库包含了所有的项目文件,包括版本历史记录。已经在其他地方托管了?<a href="%s">迁移仓库。</a>
|
||||
new_repo_helper=代码仓库包含了所有的项目文件,包括版本历史记录。已经在其他地方托管了?<a href="%s">迁移仓库</a>。
|
||||
owner=拥有者
|
||||
owner_helper=由于最大仓库数量限制,一些组织可能不会显示在下拉列表中。
|
||||
repo_name=仓库名称
|
||||
|
@ -1096,7 +1096,7 @@ issue_labels=标签
|
|||
issue_labels_helper=选择标签集
|
||||
license=授权许可
|
||||
license_helper=选择授权许可文件
|
||||
license_helper_desc=许可证说明了其他人可以和不可以用您的代码做什么。不确定哪一个适合你的项目?见 <a target="_blank" rel="noopener noreferrer" href="%s">选择一个许可证</a>
|
||||
license_helper_desc=许可证说明了其他人可以和不可以用您的代码做什么。不确定哪一个适合你的项目?请见 <a target="_blank" rel="noopener noreferrer" href="%s">选择一个许可证</a>。
|
||||
object_format = 对象格式
|
||||
object_format_helper = 仓库的对象格式,一旦设置无法更改。SHA1 的兼容性最强。
|
||||
readme=自述
|
||||
|
@ -1624,7 +1624,7 @@ issues.reopened_at=`重新打开此问题 <a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
|||
issues.commit_ref_at=`于 <a id="%[1]s" href="#%[1]s">%[2]s</a> 在代码提交中引用了该工单`
|
||||
issues.ref_issue_from=`<a href="%[3]s">引用了工单 %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||
issues.ref_pull_from=`<a href="%[3]s">引用了合并请求 %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||
issues.ref_closing_from=`于 <a id="%[1]s" href="#%[1]s">%[2]s</a> <a href="%[3]s">引用了合并请求 %[4]s 将关闭此工单</a>`
|
||||
issues.ref_closing_from=`于 <a id="%[1]s" href="#%[1]s">%[2]s</a> <a href="%[3]s">从合并请求 %[4]s引用了此工单,将关闭此工单</a>`
|
||||
issues.ref_reopening_from=`于 <a id="%[1]s" href="#%[1]s">%[2]s</a> <a href="%[3]s"> 引用了合并请求 %[4]s 将重新讨论此工单</a> `
|
||||
issues.ref_closed_from=`<a href="%[3]s">关闭了这个工单 %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||
issues.ref_reopened_from=`<a href="%[3]s">重新打开这个工单 %[4]s</a> <a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||
|
@ -1744,7 +1744,7 @@ issues.due_date_remove=于 %[2]s 删除了到期时间 %[1]s
|
|||
issues.due_date_overdue=超期
|
||||
issues.due_date_invalid=到期日期无效或超出范围。请使用“yyyy-mm-dd”格式。
|
||||
issues.dependency.title=依赖工单
|
||||
issues.dependency.issue_no_dependencies=没有设置依赖项。
|
||||
issues.dependency.issue_no_dependencies=未设置依赖项。
|
||||
issues.dependency.pr_no_dependencies=没有设置依赖项。
|
||||
issues.dependency.no_permission_1=您没有读取 %d 依赖关系的权限
|
||||
issues.dependency.no_permission_n=您没有读取 %d 依赖关系的权限
|
||||
|
@ -1782,7 +1782,7 @@ issues.review.dismissed=于 %[2]s 取消了 %[1]s 的评审
|
|||
issues.review.dismissed_label=已取消
|
||||
issues.review.left_comment=留下了一条评论
|
||||
issues.review.content.empty=您需要留下一个注释,表明需要的更改。
|
||||
issues.review.reject=于 %s 请求变更
|
||||
issues.review.reject=于 %s 请求更改
|
||||
issues.review.wait=于 %s 请求评审
|
||||
issues.review.add_review_request=于 %[2]s 请求 %[1]s 评审
|
||||
issues.review.remove_review_request=于 %[2]s 取消对 %[1]s 的评审请求
|
||||
|
@ -1799,8 +1799,8 @@ issues.review.show_outdated=显示过时的
|
|||
issues.review.hide_outdated=隐藏过时的
|
||||
issues.review.show_resolved=显示已解决的
|
||||
issues.review.hide_resolved=隐藏已解决的
|
||||
issues.review.resolve_conversation=已解决问题
|
||||
issues.review.un_resolve_conversation=未解决问题
|
||||
issues.review.resolve_conversation=已解决
|
||||
issues.review.un_resolve_conversation=未解决
|
||||
issues.review.resolved_by=标记问题为已解决
|
||||
issues.assignee.error=因为未知原因,并非所有的指派都成功。
|
||||
issues.reference_issue.body=内容
|
||||
|
@ -1810,7 +1810,7 @@ issues.content_history.created=创建于
|
|||
issues.content_history.delete_from_history=从历史记录中删除
|
||||
issues.content_history.delete_from_history_confirm=从历史记录中删除吗?
|
||||
issues.content_history.options=选项
|
||||
issues.reference_link=参考:%s
|
||||
issues.reference_link=引用:%s
|
||||
|
||||
compare.compare_base=基准
|
||||
compare.compare_head=比较
|
||||
|
@ -1849,7 +1849,7 @@ pulls.create=创建合并请求
|
|||
pulls.title_desc_few=请求将 %[1]d 次代码提交从 <code>%[2]s</code> 合并至 <code id="%[4]s">%[3]s</code>
|
||||
pulls.merged_title_desc_few=于 %[4]s 将 %[1]d 次代码提交从 <code>%[2]s</code>合并至 <code>%[3]s</code>
|
||||
pulls.change_target_branch_at=将目标分支从 <b>%s</b> 更改为 <b>%s</b> %s
|
||||
pulls.tab_conversation=对话内容
|
||||
pulls.tab_conversation=对话
|
||||
pulls.tab_commits=代码提交
|
||||
pulls.tab_files=文件变动
|
||||
pulls.reopen_to_merge=请重新创建此合并请求。
|
||||
|
@ -1872,7 +1872,7 @@ pulls.is_ancestor=此分支已经包含在目标分支中,没有更改可以
|
|||
pulls.is_empty=此分支上的更改已经在目标分支上。这将是一个空提交。
|
||||
pulls.required_status_check_failed=一些必要的检查没有成功。
|
||||
pulls.required_status_check_missing=缺少一些必要的检查。
|
||||
pulls.required_status_check_administrator=作为管理员,您仍可合并此合并请求
|
||||
pulls.required_status_check_administrator=作为管理员,您仍可合并此合并请求。
|
||||
pulls.blocked_by_approvals=此合并请求当前还没有通过审批。已获取审批数%d个,共需要审批数%d个。
|
||||
pulls.blocked_by_rejection=此合并请求有官方评审员请求的更改。
|
||||
pulls.blocked_by_official_review_requests=此合并请求需要一名或多名评审员审阅批准。
|
||||
|
@ -1881,7 +1881,7 @@ pulls.blocked_by_changed_protected_files_1=此合并请求因修改了下列被
|
|||
pulls.blocked_by_changed_protected_files_n=此合并请求因修改了下列被保护的文件而被阻止:
|
||||
pulls.can_auto_merge_desc=该合并请求可以进行自动合并操作。
|
||||
pulls.cannot_auto_merge_desc=该合并请求存在冲突,无法进行自动合并操作。
|
||||
pulls.cannot_auto_merge_helper=手动合并解决此冲突
|
||||
pulls.cannot_auto_merge_helper=手动合并以解决冲突。
|
||||
pulls.num_conflicting_files_1=%d 个冲突文件
|
||||
pulls.num_conflicting_files_n=%d 个冲突文件
|
||||
pulls.approve_count_1=%d 项批准
|
||||
|
@ -2012,7 +2012,7 @@ ext_wiki.desc=链接到外部 wiki。
|
|||
wiki=百科
|
||||
wiki.welcome=欢迎来到百科。
|
||||
wiki.welcome_desc=百科允许你撰写并与协作者分享文档。
|
||||
wiki.desc=撰写和与协作者分享文档
|
||||
wiki.desc=撰写并与协作者共享文档。
|
||||
wiki.create_first_page=创建第一个页面
|
||||
wiki.page=页面
|
||||
wiki.filter_page=过滤页面
|
||||
|
@ -2169,16 +2169,16 @@ settings.wiki_desc=启用仓库百科
|
|||
settings.use_internal_wiki=使用内置百科
|
||||
settings.use_external_wiki=使用外部百科
|
||||
settings.external_wiki_url=外部百科链接
|
||||
settings.external_wiki_url_error=外部百科链接无效
|
||||
settings.external_wiki_url_error=外部百科链接不是有效的 URL。
|
||||
settings.external_wiki_url_desc=当点击百科标签时,访问者将被重定向到外部百科系统的URL。
|
||||
settings.issues_desc=启用仓库工单系统
|
||||
settings.use_internal_issue_tracker=使用内置的工单系统
|
||||
settings.use_external_issue_tracker=使用外部的工单系统
|
||||
settings.external_tracker_url=外部工单系统 URL
|
||||
settings.external_tracker_url_error=外部百科链接无效
|
||||
settings.external_tracker_url_error=外部百科链接无效。
|
||||
settings.external_tracker_url_desc=当点击工单标签时,访问者将被重定向到外部工单系统的URL。
|
||||
settings.tracker_url_format=外部工单系统的 URL 格式
|
||||
settings.tracker_url_format_error=外部工单链接无效
|
||||
settings.tracker_url_format_error=外部工单追踪器链接无效
|
||||
settings.tracker_issue_style=外部工单系统的编号格式
|
||||
settings.tracker_issue_style.numeric=纯数字形式
|
||||
settings.tracker_issue_style.alphanumeric=英文字母数字组合形式
|
||||
|
@ -2255,7 +2255,7 @@ settings.confirm_wiki_delete=删除百科数据
|
|||
settings.wiki_deletion_success=已成功删除仓库百科数据。
|
||||
settings.delete=删除本仓库
|
||||
settings.delete_desc=删除仓库是永久性的, 无法撤消。
|
||||
settings.delete_notices_1=- 此操作 <strong>不可以</strong> 被回滚。
|
||||
settings.delete_notices_1=- 此操作<strong>不可</strong>被回滚。
|
||||
settings.delete_notices_2=- 此操作将永久删除仓库 <strong>%s</strong>,包括 Git 数据、 工单、评论、百科和协作者的操作权限。
|
||||
settings.delete_notices_fork_1=- 在此仓库删除后,它的派生仓库将变成独立仓库。
|
||||
settings.deletion_success=仓库已被删除。
|
||||
|
@ -2321,7 +2321,7 @@ settings.event_send_everything=所有事件
|
|||
settings.event_choose=自定义事件…
|
||||
settings.event_header_repository=仓库事件
|
||||
settings.event_create=创建
|
||||
settings.event_create_desc=创建分支或标签
|
||||
settings.event_create_desc=创建分支或标签。
|
||||
settings.event_delete=刪除
|
||||
settings.event_delete_desc=分支或标签已删除。
|
||||
settings.event_fork=派生
|
||||
|
@ -2331,9 +2331,9 @@ settings.event_wiki_desc=创建、重命名、编辑或删除了百科页面。
|
|||
settings.event_release=版本发布
|
||||
settings.event_release_desc=发布、更新或删除版本时。
|
||||
settings.event_push=推送
|
||||
settings.event_push_desc=Git 仓库推送
|
||||
settings.event_push_desc=推送到 Git 仓库。
|
||||
settings.event_repository=仓库
|
||||
settings.event_repository_desc=创建或删除仓库
|
||||
settings.event_repository_desc=创建或删除仓库。
|
||||
settings.event_header_issue=工单事件
|
||||
settings.event_issues=修改
|
||||
settings.event_issues_desc=工单已打开、已关闭、已重新打开或已编辑。
|
||||
|
@ -2511,9 +2511,9 @@ settings.archive.text=归档仓库将使其完全只读。它将在首页隐藏
|
|||
settings.archive.success=仓库已成功归档。
|
||||
settings.archive.error=仓库在归档时出现异常。请通过日志获取详细信息。
|
||||
settings.archive.error_ismirror=不能归档镜像仓库。
|
||||
settings.archive.branchsettings_unavailable=已归档仓库无法进行分支设置。
|
||||
settings.archive.tagsettings_unavailable=已归档仓库的Git标签设置不可用。
|
||||
settings.archive.mirrors_unavailable = 不能镜像已归档的仓库。
|
||||
settings.archive.branchsettings_unavailable=分支设置对已归档的仓库不可用。
|
||||
settings.archive.tagsettings_unavailable=标签设置对已归档的仓库不可用。
|
||||
settings.archive.mirrors_unavailable = 镜像对已归档的仓库不可用。
|
||||
settings.unarchive.button=撤销仓库归档
|
||||
settings.unarchive.header=撤销此仓库归档
|
||||
settings.unarchive.text=撤销归档将恢复仓库接收提交、推送,以及新工单和合并请求的能力。
|
||||
|
@ -2598,7 +2598,7 @@ diff.review.placeholder=评审意见
|
|||
diff.review.comment=评论
|
||||
diff.review.approve=批准
|
||||
diff.review.self_reject=合并请求作者不能对自己的合并请求更改
|
||||
diff.review.reject=请求变更
|
||||
diff.review.reject=请求更改
|
||||
diff.review.self_approve=合并请求作者不能批准自己的合并请求
|
||||
diff.committed_by=提交者
|
||||
diff.protected=受保护的
|
||||
|
@ -2750,12 +2750,12 @@ pulls.made_using_agit = AGit
|
|||
activity.navbar.pulse = 动态
|
||||
activity.navbar.code_frequency = 代码频率
|
||||
activity.navbar.recent_commits = 近期提交
|
||||
pulls.agit_explanation = 该合并请求是用 AGit 创建的。AGit 是一种可以让贡献者直接通过 “git push” 提出更改代码而不需要派生或建立新分支。
|
||||
pulls.agit_explanation = 该合并请求是用 AGit 工作流创建的。使用 AGit,贡献者无需派生或创建分支就可以直接通过 “git push” 提出更改代码。
|
||||
error.broken_git_hook = 该仓库的 Git 钩子似乎已经损坏,请按照 <a target="_blank" rel="noreferrer" href="%s">此文档</a>来修复这些问题,然后推送一些提交来刷新状态。
|
||||
pulls.merged_title_desc_one = 已将来自 <code>%[2]s</code> 的 %[1]d 提交合并入 <code>%[3]s</code> %[4]s
|
||||
commits.search_branch = 此分支
|
||||
open_with_editor = 使用 %s 打开
|
||||
pulls.title_desc_one = 想要将来自 <code>%[2]s</code> 的 %[1]d 提交合并到 <code id="%[4]s">%[3]s</code>
|
||||
pulls.title_desc_one = 想要将来自 <code>%[2]s</code> 的 %[1]d 笔提交合并到 <code id="%[4]s">%[3]s</code>
|
||||
settings.rename_branch_failed_protected = 无法重命名受保护的分支 %s。
|
||||
stars = 点赞
|
||||
settings.confirmation_string = 确认输入
|
||||
|
@ -2766,7 +2766,7 @@ n_branch_few = %s 分支
|
|||
n_tag_one = %s 标签
|
||||
n_tag_few = %s 标签
|
||||
editor.commit_id_not_matching = 您在编辑文件时该文件已被更改。请提交到一个新的分支,然后再将这个新的分支合并回当前分支。
|
||||
issues.num_participants_one = %d 个参与者
|
||||
issues.num_participants_one = %d 位参与者
|
||||
issues.archived_label_description = (已归档)%s
|
||||
editor.push_out_of_date = 推送似乎已过期。
|
||||
settings.enforce_on_admins = 对仓库的管理员适用该规则
|
||||
|
@ -2848,6 +2848,7 @@ diff.git-notes.remove-body = 此注释将被移除。
|
|||
issues.num_reviews_one = %d 评审
|
||||
issues.num_reviews_few = %d 评审
|
||||
issues.summary_card_alt = 仓库 %[2]s 中标题为 %[1]s 的工单的摘要卡片
|
||||
editor.add_tmpl.filename = 文件名
|
||||
|
||||
[graphs]
|
||||
component_loading=正在加载 %s...
|
||||
|
@ -3518,7 +3519,7 @@ self_check.no_problem_found=尚未发现问题。
|
|||
self_check.database_collation_mismatch=期望数据库使用的校验方式:%s
|
||||
self_check.database_collation_case_insensitive=数据库正在使用一个校验 %s, 这是一个不敏感的校验. 虽然Gitea可以与它合作,但可能有一些罕见的情况不如预期的那样起作用。
|
||||
self_check.database_inconsistent_collation_columns=数据库正在使用%s的排序规则,但是这些列使用了不匹配的排序规则。这可能会造成一些意外问题。
|
||||
self_check.database_fix_mysql=对于MySQL/MariaDB用户,您可以使用“gitea doctor convert”命令来解决校验问题。 或者您也可以通过 "ALTER ... COLLATE ..." 这样的SQL 来手动解决这个问题。
|
||||
self_check.database_fix_mysql=对于 MySQL/MariaDB 用户,您可以使用“forgejo doctor convert”命令来修复排序规则问题,或者您也可以手动通过“ALTER ... COLLATE ...” SQL 修复该问题。
|
||||
auths.tips.gmail_settings = Gmail 设置:
|
||||
auths.tip.gitlab_new = 在 %s 上注册新应用
|
||||
config_settings = 设置
|
||||
|
@ -3595,7 +3596,7 @@ raw_seconds=秒
|
|||
raw_minutes=分钟
|
||||
|
||||
[dropzone]
|
||||
default_message=拖动文件或者点击此处上传。
|
||||
default_message=拖放文件或点击此处上传。
|
||||
invalid_input_type=您不能上传该类型的文件
|
||||
file_too_big=文件体积({{filesize}} MB)超过了最大允许体积({{maxFilesize}} MB)
|
||||
remove_file=移除文件
|
||||
|
@ -3684,9 +3685,9 @@ conda.install=要使用 Conda 安装软件包,请运行以下命令:
|
|||
container.details.type=镜像类型
|
||||
container.details.platform=平台
|
||||
container.pull=从命令行拉取镜像:
|
||||
container.digest=摘要:
|
||||
container.digest=摘要
|
||||
container.multi_arch=操作系统 / 架构
|
||||
container.layers=镜像层
|
||||
container.layers=镜像分层
|
||||
container.labels=标签
|
||||
container.labels.key=键
|
||||
container.labels.value=值
|
||||
|
@ -3715,7 +3716,7 @@ npm.install=要使用 npm 安装软件包,请运行以下命令:
|
|||
npm.install2=或将其添加到 package.json 文件:
|
||||
npm.dependencies=依赖项
|
||||
npm.dependencies.development=开发依赖
|
||||
npm.dependencies.peer=Peer 依赖
|
||||
npm.dependencies.peer=同等依赖
|
||||
npm.dependencies.optional=可选依赖
|
||||
npm.details.tag=标签
|
||||
pub.install=要使用 Dart 安装软件包,请运行以下命令:
|
||||
|
@ -3799,6 +3800,7 @@ arch.version.replaces = 替换
|
|||
arch.version.backup = 备份
|
||||
arch.version.checkdepends = 检查依赖
|
||||
arch.version.makedepends = 编译依赖
|
||||
container.images.title = 镜像
|
||||
|
||||
[secrets]
|
||||
secrets=密钥
|
||||
|
|
1427
package-lock.json
generated
1427
package-lock.json
generated
File diff suppressed because it is too large
Load diff
10
package.json
10
package.json
|
@ -55,7 +55,7 @@
|
|||
"vue-loader": "17.4.2",
|
||||
"vue3-calendar-heatmap": "2.0.5",
|
||||
"webpack": "5.97.1",
|
||||
"webpack-cli": "5.1.4",
|
||||
"webpack-cli": "6.0.1",
|
||||
"wrap-ansi": "9.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
@ -65,15 +65,15 @@
|
|||
"@stoplight/spectral-cli": "6.14.2",
|
||||
"@stylistic/eslint-plugin-js": "2.12.1",
|
||||
"@stylistic/stylelint-plugin": "3.1.1",
|
||||
"@typescript-eslint/parser": "8.18.1",
|
||||
"@typescript-eslint/parser": "8.18.2",
|
||||
"@vitejs/plugin-vue": "5.1.5",
|
||||
"@vitest/coverage-v8": "2.1.8",
|
||||
"@vitest/eslint-plugin": "1.1.16",
|
||||
"@vitest/eslint-plugin": "1.1.20",
|
||||
"@vue/test-utils": "2.4.6",
|
||||
"eslint": "9.17.0",
|
||||
"eslint-import-resolver-typescript": "3.7.0",
|
||||
"eslint-plugin-array-func": "5.0.2",
|
||||
"eslint-plugin-import-x": "4.5.1",
|
||||
"eslint-plugin-import-x": "4.6.1",
|
||||
"eslint-plugin-no-jquery": "3.1.0",
|
||||
"eslint-plugin-no-use-extend-native": "0.7.2",
|
||||
"eslint-plugin-playwright": "2.1.0",
|
||||
|
@ -95,7 +95,7 @@
|
|||
"stylelint-value-no-unknown-custom-properties": "6.0.1",
|
||||
"svgo": "3.2.0",
|
||||
"typescript": "5.7.2",
|
||||
"typescript-eslint": "8.18.1",
|
||||
"typescript-eslint": "8.18.2",
|
||||
"vite-string-plugin": "1.3.4",
|
||||
"vitest": "2.1.8"
|
||||
},
|
||||
|
|
79
poetry.lock
generated
79
poetry.lock
generated
|
@ -2,13 +2,13 @@
|
|||
|
||||
[[package]]
|
||||
name = "click"
|
||||
version = "8.1.7"
|
||||
version = "8.1.8"
|
||||
description = "Composable command line interface toolkit"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
|
||||
{file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
|
||||
{file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"},
|
||||
{file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
@ -59,33 +59,33 @@ six = ">=1.13.0"
|
|||
|
||||
[[package]]
|
||||
name = "djlint"
|
||||
version = "1.36.3"
|
||||
version = "1.36.4"
|
||||
description = "HTML Template Linter and Formatter"
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
files = [
|
||||
{file = "djlint-1.36.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2ae7c620b58e16d6bf003bd7de3f71376a7a3daa79dc02e77f3726d5a75243f2"},
|
||||
{file = "djlint-1.36.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e155ce0970d4a28d0a2e9f2e106733a2ad05910eee90e056b056d48049e4a97b"},
|
||||
{file = "djlint-1.36.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e8bb0406e60cc696806aa6226df137618f3889c72f2dbdfa76c908c99151579"},
|
||||
{file = "djlint-1.36.3-cp310-cp310-win_amd64.whl", hash = "sha256:76d32faf988ad58ef2e7a11d04046fc984b98391761bf1b61f9a6044da53d414"},
|
||||
{file = "djlint-1.36.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:32f7a5834000fff22e94d1d35f95aaf2e06f2af2cae18af0ed2a4e215d60e730"},
|
||||
{file = "djlint-1.36.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3eb1b9c0be499e63e8822a051e7e55f188ff1ab8172a85d338a8ae21c872060e"},
|
||||
{file = "djlint-1.36.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c2e0dd1f26eb472b8c84eb70d6482877b6497a1fd031d7534864088f016d5ea"},
|
||||
{file = "djlint-1.36.3-cp311-cp311-win_amd64.whl", hash = "sha256:a06b531ab9d049c46ad4d2365d1857004a1a9dd0c23c8eae94aa0d233c6ec00d"},
|
||||
{file = "djlint-1.36.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e66361a865e5e5a4bbcb40f56af7f256fd02cbf9d48b763a40172749cc294084"},
|
||||
{file = "djlint-1.36.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:36e102b80d83e9ac2e6be9a9ded32fb925945f6dbc7a7156e4415de1b0aa0dba"},
|
||||
{file = "djlint-1.36.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ac4b7370d80bd82281e57a470de8923ac494ffb571b89d8787cef57c738c69a"},
|
||||
{file = "djlint-1.36.3-cp312-cp312-win_amd64.whl", hash = "sha256:107cc56bbef13d60cc0ae774a4d52881bf98e37c02412e573827a3e549217e3a"},
|
||||
{file = "djlint-1.36.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2a9f51971d6e63c41ea9b3831c928e1f21ae6fe57e87a3452cfe672d10232433"},
|
||||
{file = "djlint-1.36.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:080c98714b55d8f0fef5c42beaee8247ebb2e3d46b0936473bd6c47808bb6302"},
|
||||
{file = "djlint-1.36.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f65a80e0b5cb13d357ea51ca6570b34c2d9d18974c1e57142de760ea27d49ed0"},
|
||||
{file = "djlint-1.36.3-cp313-cp313-win_amd64.whl", hash = "sha256:95ef6b67ef7f2b90d9434bba37d572031079001dc8524add85c00ef0386bda1e"},
|
||||
{file = "djlint-1.36.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8e2317a32094d525bc41cd11c8dc064bf38d1b442c99cc3f7c4a2616b5e6ce6e"},
|
||||
{file = "djlint-1.36.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e82266c28793cd15f97b93535d72bfbc77306eaaf6b210dd90910383a814ee6c"},
|
||||
{file = "djlint-1.36.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01b2101c2d1b079e8d545e6d9d03487fcca14d2371e44cbfdedee15b0bf4567c"},
|
||||
{file = "djlint-1.36.3-cp39-cp39-win_amd64.whl", hash = "sha256:15cde63ef28beb5194ff4137883025f125676ece1b574b64a3e1c6daed734639"},
|
||||
{file = "djlint-1.36.3-py3-none-any.whl", hash = "sha256:0c05cd5b76785de2c41a2420c06ffd112800bfc0f9c0f399cc7cea7c42557f4c"},
|
||||
{file = "djlint-1.36.3.tar.gz", hash = "sha256:d85735da34bc7ac93ad8ef9b4822cc2a23d5f0ce33f25438737b8dca1d404f78"},
|
||||
{file = "djlint-1.36.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a2dfb60883ceb92465201bfd392291a7597c6752baede6fbb6f1980cac8d6c5c"},
|
||||
{file = "djlint-1.36.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4bc6a1320c0030244b530ac200642f883d3daa451a115920ef3d56d08b644292"},
|
||||
{file = "djlint-1.36.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3164a048c7bb0baf042387b1e33f9bbbf99d90d1337bb4c3d66eb0f96f5400a1"},
|
||||
{file = "djlint-1.36.4-cp310-cp310-win_amd64.whl", hash = "sha256:3196d5277da5934962d67ad6c33a948ba77a7b6eadf064648bef6ee5f216b03c"},
|
||||
{file = "djlint-1.36.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d68da0ed10ee9ca1e32e225cbb8e9b98bf7e6f8b48a8e4836117b6605b88cc7"},
|
||||
{file = "djlint-1.36.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c0478d5392247f1e6ee29220bbdbf7fb4e1bc0e7e83d291fda6fb926c1787ba7"},
|
||||
{file = "djlint-1.36.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:962f7b83aee166e499eff916d631c6dde7f1447d7610785a60ed2a75a5763483"},
|
||||
{file = "djlint-1.36.4-cp311-cp311-win_amd64.whl", hash = "sha256:53cbc450aa425c832f09bc453b8a94a039d147b096740df54a3547fada77ed08"},
|
||||
{file = "djlint-1.36.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ff9faffd7d43ac20467493fa71d5355b5b330a00ade1c4d1e859022f4195223b"},
|
||||
{file = "djlint-1.36.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:79489e262b5ac23a8dfb7ca37f1eea979674cfc2d2644f7061d95bea12c38f7e"},
|
||||
{file = "djlint-1.36.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e58c5fa8c6477144a0be0a87273706a059e6dd0d6efae01146ae8c29cdfca675"},
|
||||
{file = "djlint-1.36.4-cp312-cp312-win_amd64.whl", hash = "sha256:bb6903777bf3124f5efedcddf1f4716aef097a7ec4223fc0fa54b865829a6e08"},
|
||||
{file = "djlint-1.36.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ead475013bcac46095b1bbc8cf97ed2f06e83422335734363f8a76b4ba7e47c2"},
|
||||
{file = "djlint-1.36.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6c601dfa68ea253311deb4a29a7362b7a64933bdfcfb5a06618f3e70ad1fa835"},
|
||||
{file = "djlint-1.36.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bda5014f295002363381969864addeb2db13955f1b26e772657c3b273ed7809f"},
|
||||
{file = "djlint-1.36.4-cp313-cp313-win_amd64.whl", hash = "sha256:16ce37e085afe5a30953b2bd87cbe34c37843d94c701fc68a2dda06c1e428ff4"},
|
||||
{file = "djlint-1.36.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:89678661888c03d7bc6cadd75af69db29962b5ecbf93a81518262f5c48329f04"},
|
||||
{file = "djlint-1.36.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5b01a98df3e1ab89a552793590875bc6e954cad661a9304057db75363d519fa0"},
|
||||
{file = "djlint-1.36.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dabbb4f7b93223d471d09ae34ed515fef98b2233cbca2449ad117416c44b1351"},
|
||||
{file = "djlint-1.36.4-cp39-cp39-win_amd64.whl", hash = "sha256:7a483390d17e44df5bc23dcea29bdf6b63f3ed8b4731d844773a4829af4f5e0b"},
|
||||
{file = "djlint-1.36.4-py3-none-any.whl", hash = "sha256:e9699b8ac3057a6ed04fb90835b89bee954ed1959c01541ce4f8f729c938afdd"},
|
||||
{file = "djlint-1.36.4.tar.gz", hash = "sha256:17254f218b46fe5a714b224c85074c099bcb74e3b2e1f15c2ddc2cf415a408a1"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
@ -99,15 +99,17 @@ pyyaml = ">=6"
|
|||
regex = ">=2023"
|
||||
tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""}
|
||||
tqdm = ">=4.62.2"
|
||||
typing-extensions = {version = ">=3.6.6", markers = "python_version < \"3.11\""}
|
||||
|
||||
[[package]]
|
||||
name = "editorconfig"
|
||||
version = "0.12.4"
|
||||
version = "0.17.0"
|
||||
description = "EditorConfig File Locator and Interpreter for Python"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
files = [
|
||||
{file = "EditorConfig-0.12.4.tar.gz", hash = "sha256:24857fa1793917dd9ccf0c7810a07e05404ce9b823521c7dce22a4fb5d125f80"},
|
||||
{file = "EditorConfig-0.17.0-py3-none-any.whl", hash = "sha256:fe491719c5f65959ec00b167d07740e7ffec9a3f362038c72b289330b9991dfc"},
|
||||
{file = "editorconfig-0.17.0.tar.gz", hash = "sha256:8739052279699840065d3a9f5c125d7d5a98daeefe53b0e5274261d77cb49aa2"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -316,13 +318,13 @@ files = [
|
|||
|
||||
[[package]]
|
||||
name = "six"
|
||||
version = "1.16.0"
|
||||
version = "1.17.0"
|
||||
description = "Python 2 and 3 compatibility utilities"
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
|
||||
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
|
||||
files = [
|
||||
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
|
||||
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
|
||||
{file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"},
|
||||
{file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -387,6 +389,17 @@ notebook = ["ipywidgets (>=6)"]
|
|||
slack = ["slack-sdk"]
|
||||
telegram = ["requests"]
|
||||
|
||||
[[package]]
|
||||
name = "typing-extensions"
|
||||
version = "4.12.2"
|
||||
description = "Backported and Experimental Type Hints for Python 3.8+"
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
files = [
|
||||
{file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"},
|
||||
{file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "yamllint"
|
||||
version = "1.35.1"
|
||||
|
@ -408,4 +421,4 @@ dev = ["doc8", "flake8", "flake8-import-order", "rstcheck[sphinx]", "sphinx"]
|
|||
[metadata]
|
||||
lock-version = "2.0"
|
||||
python-versions = "^3.10"
|
||||
content-hash = "23017e1bfd215dcbb046aaf68d4d2668737e17c687e6655be46e9bfd9a3df4c5"
|
||||
content-hash = "64588702d556674c109df1bacaac08353a40f0863e7e72513d22f197f0c340c4"
|
||||
|
|
|
@ -5,7 +5,7 @@ package-mode = false
|
|||
python = "^3.10"
|
||||
|
||||
[tool.poetry.group.dev.dependencies]
|
||||
djlint = "1.36.3"
|
||||
djlint = "1.36.4"
|
||||
yamllint = "1.35.1"
|
||||
codespell = "^2.2.6"
|
||||
|
||||
|
|
0
release-notes-published/10.0.0.md
Normal file
0
release-notes-published/10.0.0.md
Normal file
|
@ -9,8 +9,8 @@
|
|||
"baseBranches": [
|
||||
"$default",
|
||||
"/^v7\\.\\d+/forgejo$/",
|
||||
"/^v9\\.\\d+/forgejo$/",
|
||||
"/^v10\\.\\d+/forgejo$/"
|
||||
"/^v10\\.\\d+/forgejo$/",
|
||||
"/^v11\\.\\d+/forgejo$/"
|
||||
],
|
||||
"postUpdateOptions": ["gomodTidy", "gomodUpdateImportPaths", "npmDedupe"],
|
||||
"prConcurrentLimit": 10,
|
||||
|
|
|
@ -937,6 +937,7 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
|
|||
AllowRebaseUpdate: true,
|
||||
DefaultDeleteBranchAfterMerge: false,
|
||||
DefaultMergeStyle: repo_model.MergeStyleMerge,
|
||||
DefaultUpdateStyle: repo_model.UpdateStyleMerge,
|
||||
DefaultAllowMaintainerEdit: false,
|
||||
}
|
||||
} else {
|
||||
|
@ -976,6 +977,9 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
|
|||
if opts.DefaultMergeStyle != nil {
|
||||
config.DefaultMergeStyle = repo_model.MergeStyle(*opts.DefaultMergeStyle)
|
||||
}
|
||||
if opts.DefaultUpdateStyle != nil {
|
||||
config.DefaultUpdateStyle = repo_model.UpdateStyle(*opts.DefaultUpdateStyle)
|
||||
}
|
||||
if opts.DefaultAllowMaintainerEdit != nil {
|
||||
config.DefaultAllowMaintainerEdit = *opts.DefaultAllowMaintainerEdit
|
||||
}
|
||||
|
|
|
@ -35,6 +35,7 @@ func Code(ctx *context.Context) {
|
|||
|
||||
language := ctx.FormTrim("l")
|
||||
keyword := ctx.FormTrim("q")
|
||||
path := ctx.FormTrim("path")
|
||||
|
||||
isFuzzy := ctx.FormOptionalBool("fuzzy").ValueOrDefault(true)
|
||||
if mode := ctx.FormTrim("mode"); len(mode) > 0 {
|
||||
|
@ -91,6 +92,7 @@ func Code(ctx *context.Context) {
|
|||
Keyword: keyword,
|
||||
IsKeywordFuzzy: isFuzzy,
|
||||
Language: language,
|
||||
Filename: path,
|
||||
Paginator: &db.ListOptions{
|
||||
Page: page,
|
||||
PageSize: setting.UI.RepoSearchPagingNum,
|
||||
|
|
|
@ -5,6 +5,7 @@ package actions
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
stdCtx "context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"slices"
|
||||
|
@ -224,7 +225,7 @@ func List(ctx *context.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
if err := loadIsRefDeleted(ctx, runs); err != nil {
|
||||
if err := loadIsRefDeleted(ctx, ctx.Repo.Repository.ID, runs); err != nil {
|
||||
log.Error("LoadIsRefDeleted", err)
|
||||
}
|
||||
|
||||
|
@ -254,7 +255,7 @@ func List(ctx *context.Context) {
|
|||
|
||||
// loadIsRefDeleted loads the IsRefDeleted field for each run in the list.
|
||||
// TODO: move this function to models/actions/run_list.go but now it will result in a circular import.
|
||||
func loadIsRefDeleted(ctx *context.Context, runs actions_model.RunList) error {
|
||||
func loadIsRefDeleted(ctx stdCtx.Context, repoID int64, runs actions_model.RunList) error {
|
||||
branches := make(container.Set[string], len(runs))
|
||||
for _, run := range runs {
|
||||
refName := git.RefName(run.Ref)
|
||||
|
@ -266,14 +267,14 @@ func loadIsRefDeleted(ctx *context.Context, runs actions_model.RunList) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
branchInfos, err := git_model.GetBranches(ctx, ctx.Repo.Repository.ID, branches.Values(), false)
|
||||
branchInfos, err := git_model.GetBranches(ctx, repoID, branches.Values(), false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
branchSet := git_model.BranchesToNamesSet(branchInfos)
|
||||
for _, run := range runs {
|
||||
refName := git.RefName(run.Ref)
|
||||
if refName.IsBranch() && !branchSet.Contains(run.Ref) {
|
||||
if refName.IsBranch() && !branchSet.Contains(refName.ShortName()) {
|
||||
run.IsRefDeleted = true
|
||||
}
|
||||
}
|
||||
|
|
33
routers/web/repo/actions/actions_test.go
Normal file
33
routers/web/repo/actions/actions_test.go
Normal file
|
@ -0,0 +1,33 @@
|
|||
// Copyright 2022 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package actions
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
actions_model "code.gitea.io/gitea/models/actions"
|
||||
"code.gitea.io/gitea/models/db"
|
||||
unittest "code.gitea.io/gitea/models/unittest"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func Test_loadIsRefDeleted(t *testing.T) {
|
||||
unittest.PrepareTestEnv(t)
|
||||
|
||||
runs, total, err := db.FindAndCount[actions_model.ActionRun](db.DefaultContext,
|
||||
actions_model.FindRunOptions{RepoID: 4, Ref: "refs/heads/test"})
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, runs, 1)
|
||||
assert.EqualValues(t, 1, total)
|
||||
for _, run := range runs {
|
||||
assert.False(t, run.IsRefDeleted)
|
||||
}
|
||||
|
||||
require.NoError(t, loadIsRefDeleted(db.DefaultContext, 4, runs))
|
||||
for _, run := range runs {
|
||||
assert.True(t, run.IsRefDeleted)
|
||||
}
|
||||
}
|
14
routers/web/repo/actions/main_test.go
Normal file
14
routers/web/repo/actions/main_test.go
Normal file
|
@ -0,0 +1,14 @@
|
|||
// Copyright 2024 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package actions
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"code.gitea.io/gitea/models/unittest"
|
||||
)
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
unittest.MainTest(m)
|
||||
}
|
|
@ -1912,6 +1912,21 @@ func ViewIssue(ctx *context.Context) {
|
|||
|
||||
ctx.Data["MergeStyle"] = mergeStyle
|
||||
|
||||
var updateStyle repo_model.UpdateStyle
|
||||
// Check correct values and select default
|
||||
if ms, ok := ctx.Data["UpdateStyle"].(repo_model.UpdateStyle); !ok ||
|
||||
!prConfig.IsUpdateStyleAllowed(ms) {
|
||||
defaultUpdateStyle := prConfig.GetDefaultUpdateStyle()
|
||||
if prConfig.IsUpdateStyleAllowed(defaultUpdateStyle) && !ok {
|
||||
updateStyle = defaultUpdateStyle
|
||||
} else if prConfig.AllowMerge {
|
||||
updateStyle = repo_model.UpdateStyleMerge
|
||||
} else if prConfig.AllowRebase {
|
||||
updateStyle = repo_model.UpdateStyleRebase
|
||||
}
|
||||
}
|
||||
ctx.Data["UpdateStyle"] = updateStyle
|
||||
|
||||
defaultMergeMessage, defaultMergeBody, err := pull_service.GetDefaultMergeMessage(ctx, ctx.Repo.GitRepo, pull, mergeStyle)
|
||||
if err != nil {
|
||||
ctx.ServerError("GetDefaultMergeMessage", err)
|
||||
|
|
|
@ -54,6 +54,7 @@ func Search(ctx *context.Context) {
|
|||
language := ctx.FormTrim("l")
|
||||
keyword := ctx.FormTrim("q")
|
||||
|
||||
path := ctx.FormTrim("path")
|
||||
mode := ExactSearchMode
|
||||
if modeStr := ctx.FormString("mode"); len(modeStr) > 0 {
|
||||
mode = searchModeFromString(modeStr)
|
||||
|
@ -63,6 +64,7 @@ func Search(ctx *context.Context) {
|
|||
|
||||
ctx.Data["Keyword"] = keyword
|
||||
ctx.Data["Language"] = language
|
||||
ctx.Data["CodeSearchPath"] = path
|
||||
ctx.Data["CodeSearchMode"] = mode.String()
|
||||
ctx.Data["PageIsViewCode"] = true
|
||||
|
||||
|
@ -86,6 +88,7 @@ func Search(ctx *context.Context) {
|
|||
Keyword: keyword,
|
||||
IsKeywordFuzzy: mode == FuzzySearchMode,
|
||||
Language: language,
|
||||
Filename: path,
|
||||
Paginator: &db.ListOptions{
|
||||
Page: page,
|
||||
PageSize: setting.UI.RepoSearchPagingNum,
|
||||
|
@ -100,11 +103,12 @@ func Search(ctx *context.Context) {
|
|||
} else {
|
||||
ctx.Data["CodeIndexerUnavailable"] = !code_indexer.IsAvailable(ctx)
|
||||
}
|
||||
ctx.Data["CodeSearchOptions"] = []string{"exact", "fuzzy"}
|
||||
ctx.Data["CodeSearchOptions"] = code_indexer.CodeSearchOptions
|
||||
} else {
|
||||
grepOpt := git.GrepOptions{
|
||||
ContextLineNumber: 1,
|
||||
RefName: ctx.Repo.RefName,
|
||||
Filename: path,
|
||||
}
|
||||
switch mode {
|
||||
case FuzzySearchMode:
|
||||
|
@ -130,10 +134,12 @@ func Search(ctx *context.Context) {
|
|||
// UpdatedUnix: not supported yet
|
||||
// Language: not supported yet
|
||||
// Color: not supported yet
|
||||
Lines: code_indexer.HighlightSearchResultCode(r.Filename, r.LineNumbers, r.HighlightedRanges, strings.Join(r.LineCodes, "\n")),
|
||||
Lines: code_indexer.HighlightSearchResultCode(
|
||||
r.Filename, r.LineNumbers, r.HighlightedRanges,
|
||||
strings.Join(r.LineCodes, "\n")),
|
||||
})
|
||||
}
|
||||
ctx.Data["CodeSearchOptions"] = []string{"exact", "union", "regexp"}
|
||||
ctx.Data["CodeSearchOptions"] = git.GrepSearchOptions
|
||||
}
|
||||
|
||||
ctx.Data["CodeIndexerDisabled"] = !setting.Indexer.RepoIndexerEnabled
|
||||
|
|
|
@ -262,6 +262,7 @@ func UnitsPost(ctx *context.Context) {
|
|||
AllowRebaseUpdate: form.PullsAllowRebaseUpdate,
|
||||
DefaultDeleteBranchAfterMerge: form.DefaultDeleteBranchAfterMerge,
|
||||
DefaultMergeStyle: repo_model.MergeStyle(form.PullsDefaultMergeStyle),
|
||||
DefaultUpdateStyle: repo_model.UpdateStyle(form.PullsDefaultUpdateStyle),
|
||||
DefaultAllowMaintainerEdit: form.DefaultAllowMaintainerEdit,
|
||||
},
|
||||
})
|
||||
|
|
|
@ -39,6 +39,7 @@ import (
|
|||
"code.gitea.io/gitea/modules/git"
|
||||
"code.gitea.io/gitea/modules/gitrepo"
|
||||
"code.gitea.io/gitea/modules/highlight"
|
||||
code_indexer "code.gitea.io/gitea/modules/indexer/code"
|
||||
"code.gitea.io/gitea/modules/lfs"
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
"code.gitea.io/gitea/modules/markup"
|
||||
|
@ -1152,6 +1153,12 @@ PostRecentBranchCheck:
|
|||
ctx.Data["TreeNames"] = treeNames
|
||||
ctx.Data["BranchLink"] = branchLink
|
||||
ctx.Data["CodeIndexerDisabled"] = !setting.Indexer.RepoIndexerEnabled
|
||||
if setting.Indexer.RepoIndexerEnabled {
|
||||
ctx.Data["CodeIndexerUnavailable"] = !code_indexer.IsAvailable(ctx)
|
||||
ctx.Data["CodeSearchOptions"] = code_indexer.CodeSearchOptions
|
||||
} else {
|
||||
ctx.Data["CodeSearchOptions"] = git.GrepSearchOptions
|
||||
}
|
||||
ctx.HTML(http.StatusOK, tplRepoHome)
|
||||
}
|
||||
|
||||
|
|
|
@ -39,6 +39,7 @@ func CodeSearch(ctx *context.Context) {
|
|||
|
||||
language := ctx.FormTrim("l")
|
||||
keyword := ctx.FormTrim("q")
|
||||
path := ctx.FormTrim("path")
|
||||
|
||||
isFuzzy := ctx.FormOptionalBool("fuzzy").ValueOrDefault(true)
|
||||
if mode := ctx.FormTrim("mode"); len(mode) > 0 {
|
||||
|
@ -88,6 +89,7 @@ func CodeSearch(ctx *context.Context) {
|
|||
Keyword: keyword,
|
||||
IsKeywordFuzzy: isFuzzy,
|
||||
Language: language,
|
||||
Filename: path,
|
||||
Paginator: &db.ListOptions{
|
||||
Page: page,
|
||||
PageSize: setting.UI.RepoSearchPagingNum,
|
||||
|
|
|
@ -29,6 +29,11 @@ func ToAPIPullRequest(ctx context.Context, pr *issues_model.PullRequest, doer *u
|
|||
err error
|
||||
)
|
||||
|
||||
if err = pr.LoadIssue(ctx); err != nil {
|
||||
log.Error("pr.LoadIssue[%d]: %v", pr.ID, err)
|
||||
return nil
|
||||
}
|
||||
|
||||
if err = pr.Issue.LoadRepo(ctx); err != nil {
|
||||
log.Error("pr.Issue.LoadRepo[%d]: %v", pr.ID, err)
|
||||
return nil
|
||||
|
|
|
@ -101,6 +101,7 @@ func innerToRepo(ctx context.Context, repo *repo_model.Repository, permissionInR
|
|||
allowRebaseUpdate := false
|
||||
defaultDeleteBranchAfterMerge := false
|
||||
defaultMergeStyle := repo_model.MergeStyleMerge
|
||||
defaultUpdateStyle := repo_model.UpdateStyleMerge
|
||||
defaultAllowMaintainerEdit := false
|
||||
if unit, err := repo.GetUnit(ctx, unit_model.TypePullRequests); err == nil {
|
||||
config := unit.PullRequestsConfig()
|
||||
|
@ -114,6 +115,7 @@ func innerToRepo(ctx context.Context, repo *repo_model.Repository, permissionInR
|
|||
allowRebaseUpdate = config.AllowRebaseUpdate
|
||||
defaultDeleteBranchAfterMerge = config.DefaultDeleteBranchAfterMerge
|
||||
defaultMergeStyle = config.GetDefaultMergeStyle()
|
||||
defaultUpdateStyle = config.GetDefaultUpdateStyle()
|
||||
defaultAllowMaintainerEdit = config.DefaultAllowMaintainerEdit
|
||||
}
|
||||
hasProjects := false
|
||||
|
@ -231,6 +233,7 @@ func innerToRepo(ctx context.Context, repo *repo_model.Repository, permissionInR
|
|||
AllowRebaseUpdate: allowRebaseUpdate,
|
||||
DefaultDeleteBranchAfterMerge: defaultDeleteBranchAfterMerge,
|
||||
DefaultMergeStyle: string(defaultMergeStyle),
|
||||
DefaultUpdateStyle: string(defaultUpdateStyle),
|
||||
DefaultAllowMaintainerEdit: defaultAllowMaintainerEdit,
|
||||
AvatarURL: repo.AvatarLink(ctx),
|
||||
Internal: !repo.IsPrivate && repo.Owner.Visibility == api.VisibleTypePrivate,
|
||||
|
|
|
@ -189,6 +189,7 @@ type RepoUnitSettingForm struct {
|
|||
PullsAllowFastForwardOnly bool
|
||||
PullsAllowManualMerge bool
|
||||
PullsDefaultMergeStyle string
|
||||
PullsDefaultUpdateStyle string
|
||||
EnableAutodetectManualMerge bool
|
||||
PullsAllowRebaseUpdate bool
|
||||
DefaultDeleteBranchAfterMerge bool
|
||||
|
|
|
@ -72,7 +72,8 @@ func ReviewRequest(ctx context.Context, issue *issues_model.Issue, doer, reviewe
|
|||
return nil, err
|
||||
}
|
||||
|
||||
if comment != nil {
|
||||
// don't notify if the user is requesting itself as reviewer
|
||||
if comment != nil && doer.ID != reviewer.ID {
|
||||
notify_service.PullRequestReviewRequest(ctx, doer, issue, reviewer, isAdd, comment)
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@ import (
|
|||
"fmt"
|
||||
"io"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"code.gitea.io/gitea/models/db"
|
||||
repo_model "code.gitea.io/gitea/models/repo"
|
||||
|
@ -107,7 +106,18 @@ func RemoveRandomAvatars(ctx context.Context) error {
|
|||
|
||||
// generateAvatar generates the avatar from a template repository
|
||||
func generateAvatar(ctx context.Context, templateRepo, generateRepo *repo_model.Repository) error {
|
||||
generateRepo.Avatar = strings.Replace(templateRepo.Avatar, strconv.FormatInt(templateRepo.ID, 10), strconv.FormatInt(generateRepo.ID, 10), 1)
|
||||
file, err := storage.RepoAvatars.Open(templateRepo.CustomAvatarRelativePath())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
data, err := io.ReadAll(file)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
generateRepo.Avatar = avatar.HashAvatar(generateRepo.ID, data)
|
||||
if _, err := storage.Copy(storage.RepoAvatars, generateRepo.CustomAvatarRelativePath(), storage.RepoAvatars, templateRepo.CustomAvatarRelativePath()); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ func TestUploadAvatar(t *testing.T) {
|
|||
|
||||
err := UploadAvatar(db.DefaultContext, repo, buff.Bytes())
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, avatar.HashAvatar(10, buff.Bytes()), repo.Avatar)
|
||||
assert.Equal(t, avatar.HashAvatar(repo.ID, buff.Bytes()), repo.Avatar)
|
||||
}
|
||||
|
||||
func TestUploadBigAvatar(t *testing.T) {
|
||||
|
@ -62,3 +62,27 @@ func TestDeleteAvatar(t *testing.T) {
|
|||
|
||||
assert.Equal(t, "", repo.Avatar)
|
||||
}
|
||||
|
||||
func TestTemplateGenerateAvatar(t *testing.T) {
|
||||
// Generate image
|
||||
myImage := image.NewRGBA(image.Rect(0, 0, 1, 1))
|
||||
var buff bytes.Buffer
|
||||
png.Encode(&buff, myImage)
|
||||
|
||||
require.NoError(t, unittest.PrepareTestDatabase())
|
||||
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 10})
|
||||
|
||||
// Upload Avatar
|
||||
err := UploadAvatar(db.DefaultContext, repo, buff.Bytes())
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, avatar.HashAvatar(repo.ID, buff.Bytes()), repo.Avatar)
|
||||
|
||||
// Generate the Avatar for Another Repo
|
||||
genRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 11})
|
||||
err = generateAvatar(db.DefaultContext, repo, genRepo)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, avatar.HashAvatar(genRepo.ID, buff.Bytes()), genRepo.Avatar)
|
||||
|
||||
// Make sure The 2 Hashes are not the same
|
||||
assert.NotEqual(t, repo.Avatar, genRepo.Avatar)
|
||||
}
|
||||
|
|
|
@ -126,24 +126,32 @@ func (gt *GiteaTemplate) Globs() []glob.Glob {
|
|||
}
|
||||
|
||||
func checkGiteaTemplate(tmpDir string) (*GiteaTemplate, error) {
|
||||
gtPath := filepath.Join(tmpDir, ".gitea", "template")
|
||||
if _, err := os.Stat(gtPath); os.IsNotExist(err) {
|
||||
return nil, nil
|
||||
} else if err != nil {
|
||||
return nil, err
|
||||
configDirs := []string{".forgejo", ".gitea"}
|
||||
var templateFilePath string
|
||||
|
||||
for _, dir := range configDirs {
|
||||
candidatePath := filepath.Join(tmpDir, dir, "template")
|
||||
if _, err := os.Stat(candidatePath); err == nil {
|
||||
templateFilePath = candidatePath
|
||||
break
|
||||
} else if !os.IsNotExist(err) {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
content, err := os.ReadFile(gtPath)
|
||||
if templateFilePath == "" {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
content, err := os.ReadFile(templateFilePath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
gt := &GiteaTemplate{
|
||||
Path: gtPath,
|
||||
return &GiteaTemplate{
|
||||
Path: templateFilePath,
|
||||
Content: content,
|
||||
}
|
||||
|
||||
return gt, nil
|
||||
}, nil
|
||||
}
|
||||
|
||||
func generateRepoCommit(ctx context.Context, repo, templateRepo, generateRepo *repo_model.Repository, tmpDir string) error {
|
||||
|
|
|
@ -409,6 +409,10 @@ func (m *webhookNotifier) CreateIssueComment(ctx context.Context, doer *user_mod
|
|||
var pullRequest *api.PullRequest
|
||||
if issue.IsPull {
|
||||
eventType = webhook_module.HookEventPullRequestComment
|
||||
if err := issue.LoadPullRequest(ctx); err != nil {
|
||||
log.Error("LoadPullRequest: %v", err)
|
||||
return
|
||||
}
|
||||
pullRequest = convert.ToAPIPullRequest(ctx, issue.PullRequest, doer)
|
||||
} else {
|
||||
eventType = webhook_module.HookEventIssueComment
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue