Compare commits
48 Commits
main
...
release/v1
Author | SHA1 | Date |
---|---|---|
Lauris BH | 09bd05732d | |
Morlinest | de7a76a995 | |
Antoine GIRARD | 357d5a5a3d | |
Lauris BH | d81cf34e37 | |
Lauris BH | 9902317679 | |
Paul Tötterman | 33e164168f | |
Michael Kuhn | f40ba68d57 | |
Lunny Xiao | cb0c8b8ae4 | |
Lunny Xiao | eba5945d2f | |
Lauris BH | 4c67925531 | |
Lauris BH | 3c60121ca7 | |
Lauris BH | 46bb1cf026 | |
Lauris BH | 13013e90f3 | |
Lunny Xiao | 785ba171f4 | |
Lauris BH | fb80265b52 | |
David Schneiderbauer | 6fae585d28 | |
Lunny Xiao | 670562a9c5 | |
Lunny Xiao | ed07d8a308 | |
David Schneiderbauer | 74399f333f | |
David Schneiderbauer | d1cec5ecfa | |
Lauris BH | 73ad7d2ef3 | |
Lauris BH | 5b36379172 | |
David Schneiderbauer | e38e502e20 | |
David Schneiderbauer | 3cc5b11b0d | |
David Schneiderbauer | 4c9bf91a2c | |
Lunny Xiao | 03ff7687e0 | |
Lunny Xiao | f646154ead | |
Lauris BH | a6d2f47a2b | |
Lauris BH | 1837194882 | |
Jonas Franz | 9ca26432f6 | |
Lauris BH | 67595c0d0b | |
Lauris BH | 6d03cf831e | |
Lauris BH | e232c49b10 | |
Lauris BH | 25e71ad41e | |
Ethan Koenig | f014e42a06 | |
Lauris BH | d14a724b53 | |
Jonas Franz | 91788e0200 | |
Lauris BH | fc0c6f48c7 | |
Lauris BH | 002fa73460 | |
Lunny Xiao | 2fdc649202 | |
Lauris BH | 0c910afe11 | |
Lunny Xiao | 1cbe502cc2 | |
Sandro Santilli | f916aa0fe3 | |
Lunny Xiao | 04728b5b91 | |
Lunny Xiao | bbb0b8c17c | |
Lunny Xiao | 0938a2dca3 | |
Michael Lustfield | 9df0eafa25 | |
Lunny Xiao | e13eef8cfe |
89
.drone.yml
89
.drone.yml
|
@ -2,12 +2,13 @@ workspace:
|
||||||
base: /srv/app
|
base: /srv/app
|
||||||
path: src/code.gitea.io/gitea
|
path: src/code.gitea.io/gitea
|
||||||
|
|
||||||
pipeline:
|
|
||||||
clone:
|
clone:
|
||||||
image: plugins/git
|
git:
|
||||||
|
image: plugins/git:1
|
||||||
depth: 50
|
depth: 50
|
||||||
tags: true
|
tags: true
|
||||||
|
|
||||||
|
pipeline:
|
||||||
build:
|
build:
|
||||||
image: webhippie/golang:edge
|
image: webhippie/golang:edge
|
||||||
pull: true
|
pull: true
|
||||||
|
@ -15,7 +16,6 @@ pipeline:
|
||||||
TAGS: bindata sqlite
|
TAGS: bindata sqlite
|
||||||
GOPATH: /srv/app
|
GOPATH: /srv/app
|
||||||
commands:
|
commands:
|
||||||
- apk -U add openssh-client
|
|
||||||
- make clean
|
- make clean
|
||||||
- make generate
|
- make generate
|
||||||
- make vet
|
- make vet
|
||||||
|
@ -34,35 +34,21 @@ pipeline:
|
||||||
TAGS: bindata sqlite
|
TAGS: bindata sqlite
|
||||||
GOPATH: /srv/app
|
GOPATH: /srv/app
|
||||||
commands:
|
commands:
|
||||||
- apk -U add openssh-client
|
|
||||||
- make test
|
- make test
|
||||||
when:
|
when:
|
||||||
event: [ tag, pull_request ]
|
event: [ tag, pull_request ]
|
||||||
|
|
||||||
test-coverage:
|
# Commented until db locking have been resolved!
|
||||||
image: webhippie/golang:edge
|
# test-sqlite:
|
||||||
pull: true
|
# image: webhippie/golang:edge
|
||||||
environment:
|
# pull: true
|
||||||
TAGS: bindata sqlite
|
# environment:
|
||||||
GOPATH: /srv/app
|
# TAGS: bindata
|
||||||
commands:
|
# GOPATH: /srv/app
|
||||||
- apk -U add openssh-client
|
# commands:
|
||||||
- go get github.com/wadey/gocovmerge
|
# - make test-sqlite
|
||||||
- make test-coverage
|
# when:
|
||||||
when:
|
# event: [ push, tag, pull_request ]
|
||||||
event: [ push ]
|
|
||||||
branch: master
|
|
||||||
|
|
||||||
test-sqlite:
|
|
||||||
image: webhippie/golang:edge
|
|
||||||
pull: true
|
|
||||||
environment:
|
|
||||||
TAGS: bindata
|
|
||||||
GOPATH: /srv/app
|
|
||||||
commands:
|
|
||||||
- echo "Needs to be fixed" # make test-sqlite
|
|
||||||
when:
|
|
||||||
event: [ push, tag, pull_request ]
|
|
||||||
|
|
||||||
test-mysql:
|
test-mysql:
|
||||||
image: webhippie/golang:edge
|
image: webhippie/golang:edge
|
||||||
|
@ -97,25 +83,19 @@ pipeline:
|
||||||
when:
|
when:
|
||||||
event: [ push, tag ]
|
event: [ push, tag ]
|
||||||
|
|
||||||
# coverage:
|
|
||||||
# image: plugins/coverage
|
|
||||||
# server: https://coverage.gitea.io
|
|
||||||
# when:
|
|
||||||
# event: [ push ]
|
|
||||||
# branch: master
|
|
||||||
|
|
||||||
docker:
|
docker:
|
||||||
image: plugins/docker
|
image: plugins/docker:17.05
|
||||||
pull: true
|
pull: true
|
||||||
|
secrets: [ docker_username, docker_password ]
|
||||||
repo: gitea/gitea
|
repo: gitea/gitea
|
||||||
tags: [ '${DRONE_TAG##v}' ]
|
tags: [ '${DRONE_TAG##v}' ]
|
||||||
when:
|
when:
|
||||||
event: [ tag ]
|
event: [ tag ]
|
||||||
branch: [ refs/tags/* ]
|
|
||||||
|
|
||||||
docker:
|
docker:
|
||||||
image: plugins/docker
|
image: plugins/docker:17.05
|
||||||
pull: true
|
pull: true
|
||||||
|
secrets: [ docker_username, docker_password ]
|
||||||
repo: gitea/gitea
|
repo: gitea/gitea
|
||||||
tags: [ '${DRONE_BRANCH##release/v}' ]
|
tags: [ '${DRONE_BRANCH##release/v}' ]
|
||||||
when:
|
when:
|
||||||
|
@ -123,8 +103,9 @@ pipeline:
|
||||||
branch: [ release/* ]
|
branch: [ release/* ]
|
||||||
|
|
||||||
docker:
|
docker:
|
||||||
image: plugins/docker
|
image: plugins/docker:17.05
|
||||||
pull: true
|
pull: true
|
||||||
|
secrets: [ docker_username, docker_password ]
|
||||||
repo: gitea/gitea
|
repo: gitea/gitea
|
||||||
tags: [ 'latest' ]
|
tags: [ 'latest' ]
|
||||||
when:
|
when:
|
||||||
|
@ -132,17 +113,24 @@ pipeline:
|
||||||
branch: [ master ]
|
branch: [ master ]
|
||||||
|
|
||||||
release:
|
release:
|
||||||
image: plugins/s3
|
image: plugins/s3:1
|
||||||
|
pull: true
|
||||||
|
secrets: [ aws_access_key_id, aws_secret_access_key ]
|
||||||
|
bucket: releases
|
||||||
|
endpoint: https://storage.gitea.io
|
||||||
path_style: true
|
path_style: true
|
||||||
strip_prefix: dist/release/
|
strip_prefix: dist/release/
|
||||||
source: dist/release/*
|
source: dist/release/*
|
||||||
target: /gitea/${DRONE_TAG##v}
|
target: /gitea/${DRONE_TAG##v}
|
||||||
when:
|
when:
|
||||||
event: [ tag ]
|
event: [ tag ]
|
||||||
branch: [ refs/tags/* ]
|
|
||||||
|
|
||||||
release:
|
release:
|
||||||
image: plugins/s3
|
image: plugins/s3:1
|
||||||
|
pull: true
|
||||||
|
secrets: [ aws_access_key_id, aws_secret_access_key ]
|
||||||
|
bucket: releases
|
||||||
|
endpoint: https://storage.gitea.io
|
||||||
path_style: true
|
path_style: true
|
||||||
strip_prefix: dist/release/
|
strip_prefix: dist/release/
|
||||||
source: dist/release/*
|
source: dist/release/*
|
||||||
|
@ -152,7 +140,11 @@ pipeline:
|
||||||
branch: [ release/* ]
|
branch: [ release/* ]
|
||||||
|
|
||||||
release:
|
release:
|
||||||
image: plugins/s3
|
image: plugins/s3:1
|
||||||
|
pull: true
|
||||||
|
secrets: [ aws_access_key_id, aws_secret_access_key ]
|
||||||
|
bucket: releases
|
||||||
|
endpoint: https://storage.gitea.io
|
||||||
path_style: true
|
path_style: true
|
||||||
strip_prefix: dist/release/
|
strip_prefix: dist/release/
|
||||||
source: dist/release/*
|
source: dist/release/*
|
||||||
|
@ -162,17 +154,18 @@ pipeline:
|
||||||
branch: [ master ]
|
branch: [ master ]
|
||||||
|
|
||||||
github:
|
github:
|
||||||
image: plugins/github-release
|
image: plugins/github-release:1
|
||||||
|
pull: true
|
||||||
|
secrets: [ github_token ]
|
||||||
files:
|
files:
|
||||||
- dist/release/*
|
- dist/release/*
|
||||||
when:
|
when:
|
||||||
event: [ tag ]
|
event: [ tag ]
|
||||||
branch: [ refs/tags/* ]
|
|
||||||
|
|
||||||
discord:
|
discord:
|
||||||
image: appleboy/drone-discord:0.0.4
|
image: appleboy/drone-discord:1.0.0
|
||||||
webhook_id: ${WEBHOOK_ID}
|
pull: true
|
||||||
webhook_token: ${WEBHOOK_TOKEN}
|
secrets: [ discord_webhook_id, discord_webhook_token ]
|
||||||
when:
|
when:
|
||||||
event: [ push, tag, pull_request ]
|
event: [ push, tag, pull_request ]
|
||||||
status: [ changed, failure ]
|
status: [ changed, failure ]
|
||||||
|
|
File diff suppressed because one or more lines are too long
500
CHANGELOG.md
500
CHANGELOG.md
|
@ -1,10 +1,504 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
## [1.2.3](https://github.com/go-gitea/gitea/releases/tag/v1.2.3) - 2017-11-03
|
||||||
|
* BUGFIXES
|
||||||
|
* Only require one email when validating GPG key (#2266, #2467, #2663) (#2788)
|
||||||
|
* Fix order of comments (#2835) (#2839)
|
||||||
|
|
||||||
## Unreleased
|
## [1.2.2](https://github.com/go-gitea/gitea/releases/tag/v1.2.2) - 2017-10-26
|
||||||
|
* BUGFIXES
|
||||||
|
* Add checks for commits with missing author and time (#2771) (#2785)
|
||||||
|
* Fix sending mail with a non-latin display name (#2559) (#2783)
|
||||||
|
* Sync MaxGitDiffLineCharacters with conf/app.ini (#2779) (#2780)
|
||||||
|
* Update vendor git (#2765) (#2772)
|
||||||
|
* Fix emojify image URL (#2769) (#2773)
|
||||||
|
|
||||||
|
## [1.2.1](https://github.com/go-gitea/gitea/releases/tag/v1.2.1) - 2017-10-16
|
||||||
|
* BUGFIXES
|
||||||
|
* Fix PR, milestone and label functionality if issue unit is disabled (#2710) (#2714)
|
||||||
|
* Fix plain readme didn't render correctly on repo home page (#2705) (#2712)
|
||||||
|
* Fix so that user can still fork his own repository to his organizations (#2699) (#2707)
|
||||||
|
* Fix .netrc authentication (#2700) (#2708)
|
||||||
|
* Fix slice out of bounds error in mailer (#2479) (#2696)
|
||||||
|
|
||||||
|
## [1.2.0](https://github.com/go-gitea/gitea/releases/tag/v1.2.0) - 2017-10-10
|
||||||
|
* SECURITY
|
||||||
|
* Sanitation fix from Gogs (#1461)
|
||||||
* BREAKING
|
* BREAKING
|
||||||
* Password reset URL changed from `/user/forget_password` to `/user/forgot_password`
|
* Rename /forget_password url to /forgot_password (#1219)
|
||||||
* SSH keys management URL changed from `/user/settings/ssh` to `/user/settings/keys`
|
* FEATURE
|
||||||
|
* Logo: Add task to generate images from SVG and change to new logo (#2194)
|
||||||
|
* Status-API (#1332)
|
||||||
|
* Show commit status icon in commits table (#1688)
|
||||||
|
* Additional OAuth2 providers (#1010)
|
||||||
|
* GPG commit validation (#1150)
|
||||||
|
* Rework SSH key management UI to add GPG (#1293)
|
||||||
|
* Implement GPG api (#710)
|
||||||
|
* Login via OpenID-2.0 (#618)
|
||||||
|
* Add units to team (#947)
|
||||||
|
* Batch updates for issues (#926)
|
||||||
|
* Add Gitea Webhook (#1755)
|
||||||
|
* API: support '/orgs/:org/repos' (#2047)
|
||||||
|
* Display all organization from user settings (#1739)
|
||||||
|
* LDAP user synchronization (#1478)
|
||||||
|
* Adding #issuecomment to the URL in E-Mail notifications (#1674)
|
||||||
|
* Add download count field and unit testing for attachment. (#1512)
|
||||||
|
* Add repo mirror sync API endpoint (#1508)
|
||||||
|
* Add markup package to prepare for org markup format (#1493)
|
||||||
|
* Support for custom html meta (#1423)
|
||||||
|
* Per issue/PR watch/unwatch (#1410)
|
||||||
|
* Allow ENABLE_OPENID_SIGNUP to depend on DISABLE_REGISTRATION (#1369)
|
||||||
|
* Repo size in admin panel (#1482)
|
||||||
|
* Show user OpenID URIs in their profile (#1314)
|
||||||
|
* Add change-password admin command (#1304)
|
||||||
|
* Only use issue and wiki on repo. (#1297)
|
||||||
|
* Allow push to init a wiki repo (#1279)
|
||||||
|
* ENHANCEMENT
|
||||||
|
* Make time diff translatable (#2057)
|
||||||
|
* Smaller watch, star, and fork buttons (#2052)
|
||||||
|
* Display config file path on admin panel (#2030)
|
||||||
|
* Only show SSH clone URL if signed in (#2169) (#2170)
|
||||||
|
* Only show "No Description" to repo admins (#2167)
|
||||||
|
* Always return valid go-get meta, even if unauthorized (#2010)
|
||||||
|
* Enable assignee e-mail notification (#2003)
|
||||||
|
* Let not-logged-in users view releases (#1999)
|
||||||
|
* No highlighting for .txt files (#1922)
|
||||||
|
* Make side nav on dashboard stackable (#1778)
|
||||||
|
* Setting to disable authorized_keys backup (#1856)
|
||||||
|
* Hide the create organization button (in dashboard/organization section) (#1705)
|
||||||
|
* LFS: Return 404 for unimplemented endpoints (#1330)
|
||||||
|
* Show a link to password reset from user settings requiring a password (#862)
|
||||||
|
* Reserve the "explore" user/org name (#1222)
|
||||||
|
* Send notifications to partecipants in issue comments (#1217)
|
||||||
|
* Improve style of user OpenID setting page (#1324)
|
||||||
|
* Use font-awesome OpenID icon more (#1320)
|
||||||
|
* Use readonly input form to show the validated OpenID URI (#1308)
|
||||||
|
* Add captcha support to OpenID based signup (#1307)
|
||||||
|
* Minor improvements on commit graph UI (#1380)
|
||||||
|
* Mirror sync interval specified as duration string (#1407)
|
||||||
|
* Make issue in commit graph "clickable" (#1392)
|
||||||
|
* Use whole button (commit graph) as link (#1390)
|
||||||
|
* Autofocus on 2fa passcode fields (#1460)
|
||||||
|
* Sort on repo size in admin panel (#1654)
|
||||||
|
* Improve dashboard repo search (#1652)
|
||||||
|
* Use a better default MAX_GIT_DIFF_LINE_CHARACTERS (#1845)
|
||||||
|
* Adds Parent property to the repo API (#1687)
|
||||||
|
* Add configuration option for default permission to create Organizations (#1686)
|
||||||
|
* Remove sha1 hash display in repository table (#1678)
|
||||||
|
* Download files to their original filename (#1676)
|
||||||
|
* Exposes in API the Repo entity's Size and IsBare property (#1668)
|
||||||
|
* Change two factor code entry box from text to number (#1733)
|
||||||
|
* Directly show error if user hit repository limit (#1767)
|
||||||
|
* Generate small and large logos at 4x resolution (#2233)
|
||||||
|
* Tags listed in releases tab (#2389) (#2424)
|
||||||
|
* BUGFIXES
|
||||||
|
* Fix adding branch as protected to not allow pushing to it (#2556)
|
||||||
|
* Orgs: fix org page title when full name is not defined (#1495)
|
||||||
|
* Fix double borders on edit page (#1152) (#1153)
|
||||||
|
* Search bar fixes for #1187 and #1205 (#1207)
|
||||||
|
* Fix upgrade failed after ever rollback (#1194)
|
||||||
|
* Fix FCGI (over TCP) support (#1368)
|
||||||
|
* Backport of migration fixes (#2604) (#2677)
|
||||||
|
* fix panic on gogs webhook creation (#2675) (#2676)
|
||||||
|
* Backport: Fixes 500 error on dashboard when using MSSQL (#2504) (#2662)
|
||||||
|
* Fix go get response if only app URL is custom in configuration (#2634) (#2640)
|
||||||
|
* Fix deletion of unprotected branches (#2630)
|
||||||
|
* Backport of 2611 / Fix doubled issue tab introduced in migration v16 (#2622)
|
||||||
|
* v38 migration used an outdated version of RepoUnit model (#2602)
|
||||||
|
* fix go get subpackage bug (#2584) (#2589)
|
||||||
|
* Backport: Sync releases table with tags on push and for mirrors (#2459) (#2554)
|
||||||
|
* Backport: Restricting access to fork functioanlity to users with Code access (#2542)
|
||||||
|
* Fix migration from pre-v15 to 1.2.0 (#2460) (#2465)
|
||||||
|
* Fix migration from pre-v15 to 1.2.0 (#2460)
|
||||||
|
* fix duplicated feed (#2370) (#2413)
|
||||||
|
* Fix releases to be counted from database not tags (#2389)
|
||||||
|
* Fix missing collabrative repos (#2367) (#2382)
|
||||||
|
* Add more test for login links and fix a bug on action retrieve (#2361)
|
||||||
|
* Fix SQL condition bug in GetFeeds(..) (#2360)
|
||||||
|
* fix bug on create repo link on dashboard (#2359)
|
||||||
|
* Fix order of elements in dashboard html (#2344)
|
||||||
|
* Fix repo-search template errors for go1.7 (#2336)
|
||||||
|
* Add missing forks key for dashboard repository component (#2325)
|
||||||
|
* fix template error on explore repos (#2319)
|
||||||
|
* Trigger sync webhooks on UI commit (#2302)
|
||||||
|
* fix 500 error when view an issue which's milestone deleted (#2297)
|
||||||
|
* Only update needed columns when update user (#2296)
|
||||||
|
* Fix rendering of external links (#2292)
|
||||||
|
* Fix and improve dashboard repo UI (#2285)
|
||||||
|
* Make short link pattern greedy (#2259)
|
||||||
|
* Temporarily patch go-ini/ini with fork (#2255)
|
||||||
|
* Convert xorm literal queries to method calls (#2253)
|
||||||
|
* update code.gitea.io/git in vendor to fix delete branch fails (#2250)
|
||||||
|
* Replace calls to xorm UseBool with Where (#2237)
|
||||||
|
* rhel7 has a git version with four digits (1.8.3.1) (#2236)
|
||||||
|
* Fix internal requests when gitea listens to unix socket or only external IP (#2234)
|
||||||
|
* Check for access in /repositories/:id (#2227)
|
||||||
|
* Fixed robots.txt 404 error (#2226)
|
||||||
|
* Fix counts on issues dashboard (#2215)
|
||||||
|
* Fix unclosed session bug (#2214)
|
||||||
|
* Add collaborative repositories to the dashboard (#2205)
|
||||||
|
* Fix issue updated_unix bug (#2204)
|
||||||
|
* Fix Commits nil pointer dereference (#2203)
|
||||||
|
* Fix bare-repo bugs (#2199)
|
||||||
|
* Fix PR nil-dereference bug (#2195)
|
||||||
|
* Allow only single fork per user/organization (#2193)
|
||||||
|
* Fix key usage time update if the key is used in parallel for multiple operations (#2185)
|
||||||
|
* Only allow token authentication with 2FA enabled (#2184)
|
||||||
|
* Fix profile update for non-local users (#2178)
|
||||||
|
* Fix compiling without sqlite and gcc (#2177)
|
||||||
|
* Make compare button URL aware if current repo is a fork (#2162) (#2163)
|
||||||
|
* Remove unit types commits and settings (#2161)
|
||||||
|
* Fix OpenID registration route (#2160)
|
||||||
|
* Fix repository settings collobration list display (#2151)
|
||||||
|
* Ignore invalid issue numbers in commit messages. Fixes #2022 (#2150)
|
||||||
|
* Fix SHA1 hash linking (#2143)
|
||||||
|
* Fix repo API bug (#2133)
|
||||||
|
* Use POSIX complaint ! operator in find (#2132)
|
||||||
|
* Fix GET /users/:username/repos endpoint (#2125)
|
||||||
|
* Fix username rendering bug (#2122)
|
||||||
|
* Fix wiki preview links (#2119)
|
||||||
|
* vendor: update sqlite to fix "database is locked" errors (#2116)
|
||||||
|
* Fix unchecked error bug (#2110)
|
||||||
|
* Fix missing-return bug (#2109)
|
||||||
|
* Fix API for branches with slashes (#2096)
|
||||||
|
* Fix git hooks update to receive required arguments (#2095)
|
||||||
|
* upgrade git source code. (#2094)
|
||||||
|
* Fix SQL bug in models.PullRequests (#2092)
|
||||||
|
* Don't ignore gravatar error (#2083)
|
||||||
|
* Fix release display and correct paging (#2080)
|
||||||
|
* remove unnecessary blank lines and wrong error log (#2079)
|
||||||
|
* Check for valid renamed usernames (#2077)
|
||||||
|
* Update git module (#2074)
|
||||||
|
* Fix org hooks UI (#2072)
|
||||||
|
* Fix #1271: Call location.reload after XHR finishes (#2071)
|
||||||
|
* Fix default ghost assignee bug (#2069)
|
||||||
|
* Fix bug in issue labels API (#2048)
|
||||||
|
* Load label ID in NewLabels (#2045)
|
||||||
|
* Fix: `http: multiple response.WriteHeader calls` (#2038)
|
||||||
|
* Pagination on releases page (#2035)
|
||||||
|
* repo/editor: fix breadcrumb path cuts parent dirs (#3859) (#2032)
|
||||||
|
* Fix displaying commits and files of PR created from now deleted fork (#2023)
|
||||||
|
* Fix #2001 and fix issue comments hidden (#2016)
|
||||||
|
* Update code.gitea.io/git (#2014)
|
||||||
|
* Keep sort when switching page (#2013)
|
||||||
|
* Important: wrong PR merge commit ID saved (#2007)
|
||||||
|
* Don't show non-comments in comments API (#2001)
|
||||||
|
* Fix "Dashboard shows deleted comments" (#1995)
|
||||||
|
* Make branch deletion URL more like GitHub's, fixes #1397 (#1994)
|
||||||
|
* Fix fast-forward PR bug (#1989)
|
||||||
|
* Fix GPG email checking to be case insensitive (#1988)
|
||||||
|
* fix bug for normal user visit public repo (#1984)
|
||||||
|
* fix collborators lack of units on orgnization repositories (#1968)
|
||||||
|
* Fix diff of renamed and modified file (#1967)
|
||||||
|
* Fix uppercase default branch bug (#1965)
|
||||||
|
* Fix bug in Action.loadRepo() (#1959)
|
||||||
|
* Fix deleted milestone bug (#1942)
|
||||||
|
* Fix engine bug in getIssueByID (#1934)
|
||||||
|
* Switch to keybase go-crypto (for some elliptic curve key) + test (#1925)
|
||||||
|
* Fix setting.AppPath for integration tests (#1923)
|
||||||
|
* Fix search by issue type (#1914)
|
||||||
|
* Fix ghost user bug (#1913)
|
||||||
|
* Require token before checking membership/ownership (#1905)
|
||||||
|
* Bug fixes for org member API (#1904)
|
||||||
|
* A missing / to provide a correct endpoint (#1903)
|
||||||
|
* Fix 500 in public activity page (#1901)
|
||||||
|
* Center-aligned login topbar (#1880)
|
||||||
|
* Migration to fix existing owner team units (#1873)
|
||||||
|
* Fix paginater length (#1866)
|
||||||
|
* Fix bug in removeOrgRepo (#1858)
|
||||||
|
* Display draft releases (#1854)
|
||||||
|
* Fix 404 for external tracking issues (#1852)
|
||||||
|
* Update code.gitea.io/git (#1849)
|
||||||
|
* Fix user profile activity feed (#1848)
|
||||||
|
* Don't ignore error in getMergeCommit (#1843)
|
||||||
|
* Fix locking bug in removeOrgRepo (#1842)
|
||||||
|
* Fix status table race condition (#1835)
|
||||||
|
* Fix PR template error (#1834)
|
||||||
|
* Fix pull request compare link (#1832)
|
||||||
|
* Use ghost users in issues/PRs (#1831)
|
||||||
|
* Commitless repos should be bare (#1829)
|
||||||
|
* Update code.gitea.io/git (#1824)
|
||||||
|
* Fix invalid reference in feeds template (#1820)
|
||||||
|
* fix bug to deny to add orgnization as a member of an orgnization or team (#1815)
|
||||||
|
* xxx_active_code_live setting in printed in hours and minutes instead … (#1814)
|
||||||
|
* Fix deadlock in updateRepository (#1813)
|
||||||
|
* Give all units to owner team (#1812)
|
||||||
|
* Fix 500 for GET /teams/:id endpoints (#1811)
|
||||||
|
* fix bug not to trim space of login username (#1796)
|
||||||
|
* Fix renaming bug (#1786)
|
||||||
|
* Fix activity feed (#1779)
|
||||||
|
* Make navbar scroll on overflow (#1777)
|
||||||
|
* Delete repo redirects on repo deletion (#1776)
|
||||||
|
* Fix unloaded owner bug (#1770)
|
||||||
|
* Admin should always be allowed to create repositories even if hit limit (#1765)
|
||||||
|
* Update HighlightJS and fix YAML files highlighting (#1764)
|
||||||
|
* fix: #1757 fix set MAX_CREATION_LIMIT as zero. (#1762)
|
||||||
|
* fix admin lost permission caused by #947 (#1753)
|
||||||
|
* More fixes for dashboard search (#1750)
|
||||||
|
* fixes wrong after field in webhook payload (#1746)
|
||||||
|
* fix avatar update bug (#1729)
|
||||||
|
* Fix FOUC on Firefox (#1728)
|
||||||
|
* Fix changes introduce by update of go-swagger. (#1727)
|
||||||
|
* Fix #1719 (#1722)
|
||||||
|
* Correct flash after sending password reset email (#1718)
|
||||||
|
* Fix and test for delete user (#1713)
|
||||||
|
* Fix rendering of issue checkboxes (#1709)
|
||||||
|
* Enforce netgo build tag while cross-compilation (#1690)
|
||||||
|
* fix bug when push a branch name with / & fix an integration test bug (#1689)
|
||||||
|
* fix potential sqlite lock (#1680)
|
||||||
|
* Fix commit sha1 URL rendering in markdown (#1677)
|
||||||
|
* Fix static files permission under public/ (#1675)
|
||||||
|
* fix: tag contain character ) will http 500 on release page (#1670)
|
||||||
|
* Fix CSS for code in wiki markdown (#1660)
|
||||||
|
* fix multiple readme file rendering and fix #1657 (#1658)
|
||||||
|
* Add primary key and index to external login user table (#1656)
|
||||||
|
* fix #1643 and improve integration test (#1645)
|
||||||
|
* Fix version in Makefile (#1636)
|
||||||
|
* Handle display of GPG key without end date (#1628)
|
||||||
|
* fix bug on issue view when not login (#1624)
|
||||||
|
* bug fixed for API to get user's repos (#1622)
|
||||||
|
* fix lost text color on button on set as primary email (#1621)
|
||||||
|
* Add create_at and updated_at in PR json (#1616)
|
||||||
|
* update git and fix #1133 (#1614)
|
||||||
|
* fix bug on status API (#1533)
|
||||||
|
* Do not show empty collaborators segment (#1531)
|
||||||
|
* Fix markdown rendering (#1530)
|
||||||
|
* fix go get sub package and add domain on installation to let go get work defaultly (#1518)
|
||||||
|
* fix #1501 ssh hangs caused by #1461 (#1513)
|
||||||
|
* Fix empty file download (#1506)
|
||||||
|
* Fix broken v27 migration - change mirror interval from int to bigint (#1504)
|
||||||
|
* Do not allow commiting to protected branch from online editor (#1502)
|
||||||
|
* Add internal routes for ssh hook comands (#1471)
|
||||||
|
* Fix races within code.gitea.io/git.(*Command).RunInDirTimeoutPipeline (#1465)
|
||||||
|
* Simple quick fix for #1418 (#1456)
|
||||||
|
* fix gpg API panic when no verification (#1451)
|
||||||
|
* fix migrate failed and org dashboard failed on MSSQL database (#1448)
|
||||||
|
* Optimize and fix autolink function (#1442) (#1444)
|
||||||
|
* Fix and simplify repo branches (settings) UI (#1435)
|
||||||
|
* Fix disabled fields in repo settings UI (#1431)
|
||||||
|
* fixes pull request hanging when it contains normal and LFS files (#1425)
|
||||||
|
* Fix races in the log module by using syncmap (#1421)
|
||||||
|
* Add length check for the return string (#1420)
|
||||||
|
* Fix "Error: No issue number specified" when pushing (#1393)
|
||||||
|
* Corrected Mirror.NextUpdate not set (#1388)
|
||||||
|
* fix: remove `str2html` from org full name (#1360)
|
||||||
|
* Correct broken unaligned load/store in armv5 (#1355)
|
||||||
|
* Remove href on first/last link when on first/last page (#1345)
|
||||||
|
* Fix broken table layout (#1344)
|
||||||
|
* LFS: Fix SSH authentication for trailing arguments (#1328)
|
||||||
|
* Remove empty file (#1326)
|
||||||
|
* Fix delete user failed on sqlite (#1321)
|
||||||
|
* Fix inconsistency in layout (#1316)
|
||||||
|
* Fix gpg wrong column types (#1303)
|
||||||
|
* Fix wiki bugs (#1294)
|
||||||
|
* Fix missing less sources for oauth (#1288)
|
||||||
|
* Make sure both scripts/ can live side by side (#1264)
|
||||||
|
* Fix nil-dereference bug (#1258)
|
||||||
|
* rewrite pre-commit, post-commit and options hooks (fixes #1250) (#1257)
|
||||||
|
* Commit search appearence fixes (#1254)
|
||||||
|
* Fix forget migration for wiki hooks (#1227)
|
||||||
|
* Fix repo settings external tracker failed and check external urls (#1215)
|
||||||
|
* Fix 500 caused by branches settings introduced by #1198 (#1214)
|
||||||
|
* fix #1189, commit messages containing a pipe (#1203)
|
||||||
|
* Bug fixed for delete repo failed (#1193)
|
||||||
|
* Fix migration failed when authorized_keys is not exist (#1180)
|
||||||
|
* Fix ini format incomiptable with crowdin (#1177)
|
||||||
|
* TESTING
|
||||||
|
* Integration tests for issues API (#2059)
|
||||||
|
* Add integration tests for signin (#2363)
|
||||||
|
* Add INTERNAL_TOKEN to integration .ini file (#2346)
|
||||||
|
* Add public links check (#2323)
|
||||||
|
* Fix hooks for integration repo (#2216)
|
||||||
|
* More integration tests for comment API (#2156)
|
||||||
|
* Cache session cookies in tests (#2128)
|
||||||
|
* Less verbose integration tests (#2123)
|
||||||
|
* Fix improper setup for integration tests (#2050)
|
||||||
|
* Improve integration test helper functions (#2049)
|
||||||
|
* Add integration test for issue creating (#2002)
|
||||||
|
* Use testing/benchmark interface (#1993)
|
||||||
|
* Add integration test for repository migration (#1983)
|
||||||
|
* Consolidate boilerplate in integration tests (#1979)
|
||||||
|
* Set console to debug for integration tests (#1976)
|
||||||
|
* Add pull-create integration test (#1972)
|
||||||
|
* Coverage reports for integration tests (#1960)
|
||||||
|
* Add integration test for pull-request merge (#1912)
|
||||||
|
* Add integration test for file editing (#1907)
|
||||||
|
* Add integration test for repository forking (#1896)
|
||||||
|
* Run unused test (#1875)
|
||||||
|
* Don't recreate database in integration tests (#1697)
|
||||||
|
* remove sqlite tag when integration test with mysql/postgres and recreate database when init integration test (#1693)
|
||||||
|
* MySQL, Postgres integration tests in drone (#1638)
|
||||||
|
* improve integration test to resue models/fixtures and store git repos with tests (#1627)
|
||||||
|
* Improve govendor testing (#1623)
|
||||||
|
* Integration test framework (#1290)
|
||||||
|
* Unit tests for issue_list (#1209)
|
||||||
|
* Add integration test for signup (#1135)
|
||||||
|
* TRANSLATION
|
||||||
|
* update translation from crowdin (#2368) (#2380)
|
||||||
|
* Small fixes (#2144)
|
||||||
|
* Missing signed commit display translations (#2134)
|
||||||
|
* Sync latest translations from crowdin (#2104)
|
||||||
|
* Add make command update-translations for update translations from crodwin (#2097)
|
||||||
|
* Fix some mistakes (#1833)
|
||||||
|
* Improve clarity between is_activated and prohibit_login (#1788)
|
||||||
|
* Improve grammar (#1775)
|
||||||
|
* Fix bad grammar and wordiness (#1741)
|
||||||
|
* Make strings translatable (#1188) (#1198)
|
||||||
|
* BUILD
|
||||||
|
* Dockerfile for aarch64 (#1128) (#1130)
|
||||||
|
* backport from v1.2 branch: add secrets for github release (#2588) (#2598)
|
||||||
|
* Add secrets for github release to fix drone failed (#2588)
|
||||||
|
* Backport changes for latest drone (#2586)
|
||||||
|
* Removing .drone.yml.sig (#2579)
|
||||||
|
* Fix drone for tags (#2573) (#2576)
|
||||||
|
* Backport: Remove go version check for make fmt (#2558) (#2561)
|
||||||
|
* Backport: Fix lint, fmt and integration testing errors (#2553)
|
||||||
|
* update latest xorm version to vendor (#2353)
|
||||||
|
* Remove integration test executables on `make clean` (#2340)
|
||||||
|
* refactor(Makefile): allow overriding default go program (#2310)
|
||||||
|
* Revert to upstream ini dependency (#2304)
|
||||||
|
* Use /dev/urandom to create random password (#2298)
|
||||||
|
* update drone sig file. (#2262)
|
||||||
|
* go get github.com/wadey/gocovmerge when needed (#2235)
|
||||||
|
* fix typo (#2145)
|
||||||
|
* Revert "Reduce number of layer" (#2086)
|
||||||
|
* Reduce number of layer (#2078)
|
||||||
|
* Skip sqlite integration in CI (#2058)
|
||||||
|
* fix golint error and rename func for suggestion. (#1997)
|
||||||
|
* fix misspell (#1996)
|
||||||
|
* update drone sig file (#1981)
|
||||||
|
* send notification if status changed (#1973)
|
||||||
|
* switch gitter to discord for drone. (#1971)
|
||||||
|
* Fix missing backslash in Dockerfile.rpi (#1952)
|
||||||
|
* Don't run 'make release' on PRs (#1908)
|
||||||
|
* Update code.gitea.io/git (#1892)
|
||||||
|
* Use production version of vuejs (#1869)
|
||||||
|
* Add a variable for docker tag (#1825)
|
||||||
|
* resign drone and fix #1816 (#1819)
|
||||||
|
* Separate generate swagger + fix sed os specific (#1791)
|
||||||
|
* Only run coverage on merges/pushes to master (#1783)
|
||||||
|
* Remove stale rule from Makefile (#1782)
|
||||||
|
* feat: upgrade drone docker image to support multi-stage build. (#1732)
|
||||||
|
* Realy don't cache apk index (#1694)
|
||||||
|
* Limit clone depth when drone-building (#1644)
|
||||||
|
* Refactor Dockerfile (#1632)
|
||||||
|
* Check if missing/modified/unused deps in vendor and fix errors (#1468)
|
||||||
|
* Add GOFLAGS and EXTRA_GOFLAGS (#1438)
|
||||||
|
* Include formatting check to the `make test` (and thus also `check`) rule (#1366)
|
||||||
|
* DOCS
|
||||||
|
* fix wrong changelog title (#2395)
|
||||||
|
* fix webhook link (#2289)
|
||||||
|
* Improve swagger doc (#2274)
|
||||||
|
* Add link to forum in issue template (#2070)
|
||||||
|
* add missing lfs config on example file (#2039)
|
||||||
|
* Add discourse link (#2027)
|
||||||
|
* Fix wording (#2024)
|
||||||
|
* Fix typo (#1974)
|
||||||
|
* Swagger docs for list/create forks (#1941)
|
||||||
|
* Update links to Discord server (#1940)
|
||||||
|
* [ci skip] update discord badge. (#1930)
|
||||||
|
* Change join chat from gitter to discord (#1929)
|
||||||
|
* Update changelog with v1.1.1 (#1926)
|
||||||
|
* Correct grammar in APIEmpty documentation (#1748)
|
||||||
|
* Add swagger comment for MirrorSync (#1747)
|
||||||
|
* Add "Table of Contents" in CONTRIBUTING.md (#1634)
|
||||||
|
* Fix service description in Debian init file (#1538)
|
||||||
|
* Use MAINTAINERS file in repository in CONTRIBUTING (#1489)
|
||||||
|
* Generate swagger json (#1402)
|
||||||
|
* Changed text when password reset disabled. (#1364)
|
||||||
|
* Removed email copyright year (#1348)
|
||||||
|
* Specify that time interval units are seconds (#1311)
|
||||||
|
* Gitea OpenID-2.0 login has been tested with livejournal.com too (#1306)
|
||||||
|
* Make wording of commit search more clear (#1291)
|
||||||
|
* Add notice that LFS mirroring is not supported (#1251)
|
||||||
|
* Fix typos in models/ and modules/ (#1248)
|
||||||
|
* Refactor and fix incorrect comment (#1247)
|
||||||
|
* Fix migration comment (#1241)
|
||||||
|
* Update locale_en-US.ini (#1235)
|
||||||
|
* Add LibreJS support (#1201)
|
||||||
|
* rename OSX to macOS (#1176)
|
||||||
|
* add mssql to app.ini db config comment (#1172)
|
||||||
|
* Add MSSQL to issues template (#1171)
|
||||||
|
* MISC
|
||||||
|
* Add badge and link to the Matrix room (#2348)
|
||||||
|
* ignore coverage steps. (#2257)
|
||||||
|
* Use sqlite3 database as default for Docker image (#2182)
|
||||||
|
* update drone discord plugin to 0.0.4 version (#1992)
|
||||||
|
* fix typo (#1990)
|
||||||
|
* Move 3rd party js/css into `public/vendor` and document sources (#2383)
|
||||||
|
* Prevent conflicting TOTP accounts by adding AppURL to issuer parameter (#2335)
|
||||||
|
* Fix variable name typo (#2327)
|
||||||
|
* Make use of Vue more universal (#2318)
|
||||||
|
* Remove (almost) server side data rendering from repo-search component (#2317)
|
||||||
|
* Add OpenID configuration in install page (#2276)
|
||||||
|
* More tweaks to repo top panel (#2267)
|
||||||
|
* File path tweaks in UI (#2264)
|
||||||
|
* Make SHOW_USER_EMAIL also apply to profiles (#2258)
|
||||||
|
* EnableUnit() -> UnitEnabled() (#2242)
|
||||||
|
* Prevent selection of diff line numbers (#2240)
|
||||||
|
* Remove unused variable on makefile (#2225)
|
||||||
|
* No error log entries for repo 404 (#2200)
|
||||||
|
* Refactor vue delimeters to use es6 template delimeters (#2171)
|
||||||
|
* Replace tmp with TMPDIR. (#2152)
|
||||||
|
* Remove unused files (#2124)
|
||||||
|
* Improve org error handling (#2117)
|
||||||
|
* Absolute path for setting.CustomConf (#2085)
|
||||||
|
* remove deprecated code for Gogs compitable (#2041)
|
||||||
|
* Refactor session close as xorm already does everything needed internally (#2020)
|
||||||
|
* SQLite has a query timeout. Hopefully fixes most 'database locked' errors (#1961)
|
||||||
|
* Use monospace font in githook editor (#1958)
|
||||||
|
* Fix import order (#1951)
|
||||||
|
* Gracefully handle bare repositories on API operations. (#1932)
|
||||||
|
* Fix errors caused by force push (#1927)
|
||||||
|
* Display URLs in integration test logs (#1924)
|
||||||
|
* Set TMPDIR enviroment variable for dump command (#1915)
|
||||||
|
* Cache ctx.User in retrieveFeeds (#1902)
|
||||||
|
* Make `LocalCopyPath` a setting instead of a hard-coded path (#1881)
|
||||||
|
* Add check misspelling (#1877)
|
||||||
|
* Fix misspelled variables (#1874)
|
||||||
|
* Gofmt (#1868, #1710, #1662)
|
||||||
|
* Rename misnamed migration (#1867)
|
||||||
|
* Support CRLF when splitting code lines for display (#1862)
|
||||||
|
* Add convert less css file step. (#1861)
|
||||||
|
* Prevent accidential selection of line numbers in code view (#1860)
|
||||||
|
* Delete Public SSH Key tmp file after calculating fingerprint (#1855)
|
||||||
|
* Remove annoying difference in button heights. (#1853)
|
||||||
|
* Only run test coverage on master branch. (#1838)
|
||||||
|
* Error from mktemp command in MacOS. (#1837)
|
||||||
|
* Use writeTmpKeyFile in calcFingerprint (#1828)
|
||||||
|
* ROOT_URL setting use the default as shown in conf/app.ini (#1823)
|
||||||
|
* Rename RepoCreationNum -> MaxCreationLimit (#1766)
|
||||||
|
* Add button to admin ui (#1738)
|
||||||
|
* Correct spelling mistakes (#1703)
|
||||||
|
* Make openid support default false for compitable with v1.1 (#1650)
|
||||||
|
* Send mails as HTML as default. Setting for send as plain text. (#1648)
|
||||||
|
* fix potential lock when sqlite (#1647)
|
||||||
|
* Optimize png images via Google zopflipng [ci skip] (#1639)
|
||||||
|
* Upgrade alpine to v3.5 in Dockerfile (#1633)
|
||||||
|
* remove unused vendor packages (#1620)
|
||||||
|
* markup: microoptimise for many short filenames in directory (#1534)
|
||||||
|
* support health check via / and fix #969 (#1520)
|
||||||
|
* Remove env user salt since no need to use (#1515)
|
||||||
|
* Drop db operations from hook commands (#1514)
|
||||||
|
* Better URL validation (#1507)
|
||||||
|
* Migrate WatchInfo struct to api (#1492)
|
||||||
|
* refactor: show command help message. (#1486)
|
||||||
|
* refactor update ssh key use time (#1466)
|
||||||
|
* Set VERSION from git once, in a variable (#1447)
|
||||||
|
* Remove unused mutex field (#1440)
|
||||||
|
* Simplify settings pages with item list (#1389)
|
||||||
|
* Clean-up PostgreSQL Tests (#1361)
|
||||||
|
* refactor: remove workaround after the golang 1.7 release. (#1349)
|
||||||
|
* Delete the useless code (#1335)
|
||||||
|
* Run "make fmt" with go-1.6 (#1333)
|
||||||
|
* Refactor admin/auth/new.tmpl (#1277)
|
||||||
|
* Refactor repo/issue/view_content.tmpl (#1276)
|
||||||
|
* Cleaner ui for admin, repo settings, and user settings page (#1269) (#1270)
|
||||||
|
* Cleaner UI for explore page (#1253) (#1255)
|
||||||
|
* Synced licenses with github repo (#1246)
|
||||||
|
* Synced gitignores with github repo (#1245)
|
||||||
|
* Simplify RepositoryList.loadAttributes() (#1211)
|
||||||
|
* Move user_follow to separate file (#1210)
|
||||||
|
* Reduce conditionals in signin/signup inner forms (#1138)
|
||||||
|
|
||||||
## [1.1.3](https://github.com/go-gitea/gitea/releases/tag/v1.1.3) - 2017-08-03
|
## [1.1.3](https://github.com/go-gitea/gitea/releases/tag/v1.1.3) - 2017-08-03
|
||||||
|
|
||||||
|
|
11
Makefile
11
Makefile
|
@ -56,11 +56,8 @@ clean:
|
||||||
$(GO) clean -i ./...
|
$(GO) clean -i ./...
|
||||||
rm -rf $(EXECUTABLE) $(DIST) $(BINDATA) integrations*.test
|
rm -rf $(EXECUTABLE) $(DIST) $(BINDATA) integrations*.test
|
||||||
|
|
||||||
required-gofmt-version:
|
|
||||||
@$(GO) version | grep -q '\(1.7\|1.8\)' || { echo "We require go version 1.7 or 1.8 to format code" >&2 && exit 1; }
|
|
||||||
|
|
||||||
.PHONY: fmt
|
.PHONY: fmt
|
||||||
fmt: required-gofmt-version
|
fmt:
|
||||||
$(GOFMT) -w $(GOFILES)
|
$(GOFMT) -w $(GOFILES)
|
||||||
|
|
||||||
.PHONY: vet
|
.PHONY: vet
|
||||||
|
@ -112,7 +109,7 @@ misspell:
|
||||||
misspell -w -i unknwon $(GOFILES)
|
misspell -w -i unknwon $(GOFILES)
|
||||||
|
|
||||||
.PHONY: fmt-check
|
.PHONY: fmt-check
|
||||||
fmt-check: required-gofmt-version
|
fmt-check:
|
||||||
# get all go files and run go fmt on them
|
# get all go files and run go fmt on them
|
||||||
@diff=$$($(GOFMT) -d $(GOFILES)); \
|
@diff=$$($(GOFMT) -d $(GOFILES)); \
|
||||||
if [ -n "$$diff" ]; then \
|
if [ -n "$$diff" ]; then \
|
||||||
|
@ -285,9 +282,9 @@ public/css/index.css: $(STYLESHEETS)
|
||||||
|
|
||||||
.PHONY: swagger-ui
|
.PHONY: swagger-ui
|
||||||
swagger-ui:
|
swagger-ui:
|
||||||
rm -Rf public/assets/swagger-ui
|
rm -Rf public/vendor/assets/swagger-ui
|
||||||
git clone --depth=10 -b v3.0.7 --single-branch https://github.com/swagger-api/swagger-ui.git $(TMPDIR)/swagger-ui
|
git clone --depth=10 -b v3.0.7 --single-branch https://github.com/swagger-api/swagger-ui.git $(TMPDIR)/swagger-ui
|
||||||
mv $(TMPDIR)/swagger-ui/dist public/assets/swagger-ui
|
mv $(TMPDIR)/swagger-ui/dist public/vendor/assets/swagger-ui
|
||||||
rm -Rf $(TMPDIR)/swagger-ui
|
rm -Rf $(TMPDIR)/swagger-ui
|
||||||
$(SED_INPLACE) "s;http://petstore.swagger.io/v2/swagger.json;../../swagger.v1.json;g" public/assets/swagger-ui/index.html
|
$(SED_INPLACE) "s;http://petstore.swagger.io/v2/swagger.json;../../swagger.v1.json;g" public/assets/swagger-ui/index.html
|
||||||
|
|
||||||
|
|
|
@ -126,18 +126,16 @@ func runHookPreReceive(c *cli.Context) error {
|
||||||
log.GitLogger.Fatal(2, "retrieve protected branches information failed")
|
log.GitLogger.Fatal(2, "retrieve protected branches information failed")
|
||||||
}
|
}
|
||||||
|
|
||||||
if protectBranch != nil {
|
if protectBranch != nil && protectBranch.IsProtected() {
|
||||||
if !protectBranch.CanPush {
|
|
||||||
// check and deletion
|
// check and deletion
|
||||||
if newCommitID == git.EmptySHA {
|
if newCommitID == git.EmptySHA {
|
||||||
fail(fmt.Sprintf("branch %s is protected from deletion", branchName), "")
|
fail(fmt.Sprintf("branch %s is protected from deletion", branchName), "")
|
||||||
} else {
|
} else if !protectBranch.CanPush {
|
||||||
fail(fmt.Sprintf("protected branch %s can not be pushed to", branchName), "")
|
fail(fmt.Sprintf("protected branch %s can not be pushed to", branchName), "")
|
||||||
//fail(fmt.Sprintf("branch %s is protected from force push", branchName), "")
|
//fail(fmt.Sprintf("branch %s is protected from force push", branchName), "")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,260 @@
|
||||||
|
// Copyright 2017 The Gogs Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package integrations
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
|
api "code.gitea.io/sdk/gitea"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestGPGKeys(t *testing.T) {
|
||||||
|
prepareTestEnv(t)
|
||||||
|
session := loginUser(t, "user2")
|
||||||
|
|
||||||
|
tt := []struct {
|
||||||
|
name string
|
||||||
|
reqBuilder func(testing.TB, *http.Request, int) *TestResponse
|
||||||
|
results []int
|
||||||
|
}{
|
||||||
|
{name: "NoLogin", reqBuilder: MakeRequest,
|
||||||
|
results: []int{http.StatusUnauthorized, http.StatusUnauthorized, http.StatusUnauthorized, http.StatusUnauthorized, http.StatusUnauthorized, http.StatusUnauthorized, http.StatusUnauthorized, http.StatusUnauthorized},
|
||||||
|
},
|
||||||
|
{name: "LoggedAsUser2", reqBuilder: session.MakeRequest,
|
||||||
|
results: []int{http.StatusOK, http.StatusOK, http.StatusNotFound, http.StatusNoContent, http.StatusInternalServerError, http.StatusInternalServerError, http.StatusCreated, http.StatusCreated}},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range tt {
|
||||||
|
|
||||||
|
//Basic test on result code
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
t.Run("ViewOwnGPGKeys", func(t *testing.T) {
|
||||||
|
testViewOwnGPGKeys(t, tc.reqBuilder, tc.results[0])
|
||||||
|
})
|
||||||
|
t.Run("ViewGPGKeys", func(t *testing.T) {
|
||||||
|
testViewGPGKeys(t, tc.reqBuilder, tc.results[1])
|
||||||
|
})
|
||||||
|
t.Run("GetGPGKey", func(t *testing.T) {
|
||||||
|
testGetGPGKey(t, tc.reqBuilder, tc.results[2])
|
||||||
|
})
|
||||||
|
t.Run("DeleteGPGKey", func(t *testing.T) {
|
||||||
|
testDeleteGPGKey(t, tc.reqBuilder, tc.results[3])
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("CreateInvalidGPGKey", func(t *testing.T) {
|
||||||
|
testCreateInvalidGPGKey(t, tc.reqBuilder, tc.results[4])
|
||||||
|
})
|
||||||
|
t.Run("CreateNoneRegistredEmailGPGKey", func(t *testing.T) {
|
||||||
|
testCreateNoneRegistredEmailGPGKey(t, tc.reqBuilder, tc.results[5])
|
||||||
|
})
|
||||||
|
t.Run("CreateValidGPGKey", func(t *testing.T) {
|
||||||
|
testCreateValidGPGKey(t, tc.reqBuilder, tc.results[6])
|
||||||
|
})
|
||||||
|
t.Run("CreateValidSecondaryEmailGPGKey", func(t *testing.T) {
|
||||||
|
testCreateValidSecondaryEmailGPGKey(t, tc.reqBuilder, tc.results[7])
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check state after basic add
|
||||||
|
t.Run("CheckState", func(t *testing.T) {
|
||||||
|
|
||||||
|
var keys []*api.GPGKey
|
||||||
|
|
||||||
|
req := NewRequest(t, "GET", "/api/v1/user/gpg_keys") //GET all keys
|
||||||
|
resp := session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
DecodeJSON(t, resp, &keys)
|
||||||
|
|
||||||
|
primaryKey1 := keys[0] //Primary key 1
|
||||||
|
assert.EqualValues(t, "38EA3BCED732982C", primaryKey1.KeyID)
|
||||||
|
assert.EqualValues(t, 1, len(primaryKey1.Emails))
|
||||||
|
assert.EqualValues(t, "user2@example.com", primaryKey1.Emails[0].Email)
|
||||||
|
assert.EqualValues(t, true, primaryKey1.Emails[0].Verified)
|
||||||
|
|
||||||
|
subKey := primaryKey1.SubsKey[0] //Subkey of 38EA3BCED732982C
|
||||||
|
assert.EqualValues(t, "70D7C694D17D03AD", subKey.KeyID)
|
||||||
|
assert.EqualValues(t, 0, len(subKey.Emails))
|
||||||
|
|
||||||
|
primaryKey2 := keys[1] //Primary key 2
|
||||||
|
assert.EqualValues(t, "FABF39739FE1E927", primaryKey2.KeyID)
|
||||||
|
assert.EqualValues(t, 1, len(primaryKey2.Emails))
|
||||||
|
assert.EqualValues(t, "user21@example.com", primaryKey2.Emails[0].Email)
|
||||||
|
assert.EqualValues(t, false, primaryKey2.Emails[0].Verified)
|
||||||
|
|
||||||
|
var key api.GPGKey
|
||||||
|
req = NewRequest(t, "GET", "/api/v1/user/gpg_keys/"+strconv.FormatInt(primaryKey1.ID, 10)) //Primary key 1
|
||||||
|
resp = session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
DecodeJSON(t, resp, &key)
|
||||||
|
assert.EqualValues(t, "38EA3BCED732982C", key.KeyID)
|
||||||
|
assert.EqualValues(t, 1, len(key.Emails))
|
||||||
|
assert.EqualValues(t, "user2@example.com", key.Emails[0].Email)
|
||||||
|
assert.EqualValues(t, true, key.Emails[0].Verified)
|
||||||
|
|
||||||
|
req = NewRequest(t, "GET", "/api/v1/user/gpg_keys/"+strconv.FormatInt(subKey.ID, 10)) //Subkey of 38EA3BCED732982C
|
||||||
|
resp = session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
DecodeJSON(t, resp, &key)
|
||||||
|
assert.EqualValues(t, "70D7C694D17D03AD", key.KeyID)
|
||||||
|
assert.EqualValues(t, 0, len(key.Emails))
|
||||||
|
|
||||||
|
req = NewRequest(t, "GET", "/api/v1/user/gpg_keys/"+strconv.FormatInt(primaryKey2.ID, 10)) //Primary key 2
|
||||||
|
resp = session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
DecodeJSON(t, resp, &key)
|
||||||
|
assert.EqualValues(t, "FABF39739FE1E927", key.KeyID)
|
||||||
|
assert.EqualValues(t, 1, len(key.Emails))
|
||||||
|
assert.EqualValues(t, "user21@example.com", key.Emails[0].Email)
|
||||||
|
assert.EqualValues(t, false, key.Emails[0].Verified)
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
//Check state after basic add
|
||||||
|
t.Run("CheckCommits", func(t *testing.T) {
|
||||||
|
t.Run("NotSigned", func(t *testing.T) {
|
||||||
|
var branch api.Branch
|
||||||
|
req := NewRequest(t, "GET", "/api/v1/repos/user2/repo16/branches/not-signed")
|
||||||
|
resp := session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
DecodeJSON(t, resp, &branch)
|
||||||
|
assert.EqualValues(t, false, branch.Commit.Verification.Verified)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("SignedWithNotValidatedEmail", func(t *testing.T) {
|
||||||
|
var branch api.Branch
|
||||||
|
req := NewRequest(t, "GET", "/api/v1/repos/user2/repo16/branches/good-sign-not-yet-validated")
|
||||||
|
resp := session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
DecodeJSON(t, resp, &branch)
|
||||||
|
assert.EqualValues(t, false, branch.Commit.Verification.Verified)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("SignedWithValidEmail", func(t *testing.T) {
|
||||||
|
var branch api.Branch
|
||||||
|
req := NewRequest(t, "GET", "/api/v1/repos/user2/repo16/branches/good-sign")
|
||||||
|
resp := session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
DecodeJSON(t, resp, &branch)
|
||||||
|
assert.EqualValues(t, true, branch.Commit.Verification.Verified)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func testViewOwnGPGKeys(t *testing.T, reqBuilder func(testing.TB, *http.Request, int) *TestResponse, expected int) {
|
||||||
|
req := NewRequest(t, "GET", "/api/v1/user/gpg_keys")
|
||||||
|
reqBuilder(t, req, expected)
|
||||||
|
}
|
||||||
|
|
||||||
|
func testViewGPGKeys(t *testing.T, reqBuilder func(testing.TB, *http.Request, int) *TestResponse, expected int) {
|
||||||
|
req := NewRequest(t, "GET", "/api/v1/users/user2/gpg_keys")
|
||||||
|
reqBuilder(t, req, expected)
|
||||||
|
}
|
||||||
|
|
||||||
|
func testGetGPGKey(t *testing.T, reqBuilder func(testing.TB, *http.Request, int) *TestResponse, expected int) {
|
||||||
|
req := NewRequest(t, "GET", "/api/v1/user/gpg_keys/1")
|
||||||
|
reqBuilder(t, req, expected)
|
||||||
|
}
|
||||||
|
|
||||||
|
func testDeleteGPGKey(t *testing.T, reqBuilder func(testing.TB, *http.Request, int) *TestResponse, expected int) {
|
||||||
|
req := NewRequest(t, "DELETE", "/api/v1/user/gpg_keys/1")
|
||||||
|
reqBuilder(t, req, expected)
|
||||||
|
}
|
||||||
|
|
||||||
|
func testCreateGPGKey(t *testing.T, reqBuilder func(testing.TB, *http.Request, int) *TestResponse, expected int, publicKey string) {
|
||||||
|
req := NewRequestWithJSON(t, "POST", "/api/v1/user/gpg_keys", api.CreateGPGKeyOption{
|
||||||
|
ArmoredKey: publicKey,
|
||||||
|
})
|
||||||
|
reqBuilder(t, req, expected)
|
||||||
|
}
|
||||||
|
|
||||||
|
func testCreateInvalidGPGKey(t *testing.T, reqBuilder func(testing.TB, *http.Request, int) *TestResponse, expected int) {
|
||||||
|
testCreateGPGKey(t, reqBuilder, expected, "invalid_key")
|
||||||
|
}
|
||||||
|
|
||||||
|
func testCreateNoneRegistredEmailGPGKey(t *testing.T, reqBuilder func(testing.TB, *http.Request, int) *TestResponse, expected int) {
|
||||||
|
testCreateGPGKey(t, reqBuilder, expected, `-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
mQENBFmGUygBCACjCNbKvMGgp0fd5vyFW9olE1CLCSyyF9gQN2hSuzmZLuAZF2Kh
|
||||||
|
dCMCG2T1UwzUB/yWUFWJ2BtCwSjuaRv+cGohqEy6bhEBV90peGA33lHfjx7wP25O
|
||||||
|
7moAphDOTZtDj1AZfCh/PTcJut8Lc0eRDMhNyp/bYtO7SHNT1Hr6rrCV/xEtSAvR
|
||||||
|
3b148/tmIBiSadaLwc558KU3ucjnW5RVGins3AjBZ+TuT4XXVH/oeLSeXPSJ5rt1
|
||||||
|
rHwaseslMqZ4AbvwFLx5qn1OC9rEQv/F548QsA8m0IntLjoPon+6wcubA9Gra21c
|
||||||
|
Fp6aRYl9x7fiqXDLg8i3s2nKdV7+e6as6Tp9ABEBAAG0FG5vdGtub3duQGV4YW1w
|
||||||
|
bGUuY29tiQEcBBABAgAGBQJZhlMoAAoJEC8+pvYULDtte/wH/2JNrhmHwDY+hMj0
|
||||||
|
batIK4HICnkKxjIgbha80P2Ao08NkzSge58fsxiKDFYAQjHui+ZAw4dq79Ax9AOO
|
||||||
|
Iv2GS9+DUfWhrb6RF+vNuJldFzcI0rTW/z2q+XGKrUCwN3khJY5XngHfQQrdBtMK
|
||||||
|
qsoUXz/5B8g422RTbo/SdPsyYAV6HeLLeV3rdgjI1fpaW0seZKHeTXQb/HvNeuPg
|
||||||
|
qz+XV1g6Gdqa1RjDOaX7A8elVKxrYq3LBtc93FW+grBde8n7JL0zPM3DY+vJ0IJZ
|
||||||
|
INx/MmBfmtCq05FqNclvU+sj2R3N1JJOtBOjZrJHQbJhzoILou8AkxeX1A+q9OAz
|
||||||
|
1geiY5E=
|
||||||
|
=TkP3
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----`)
|
||||||
|
}
|
||||||
|
|
||||||
|
func testCreateValidGPGKey(t *testing.T, reqBuilder func(testing.TB, *http.Request, int) *TestResponse, expected int) {
|
||||||
|
//User2 <user2@example.com> //primary & activated
|
||||||
|
testCreateGPGKey(t, reqBuilder, expected, `-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
mQENBFmGVsMBCACuxgZ7W7rI9xN08Y4M7B8yx/6/I4Slm94+wXf8YNRvAyqj30dW
|
||||||
|
VJhyBcnfNRDLKSQp5o/hhfDkCgdqBjLa1PnHlGS3PXJc0hP/FyYPD2BFvNMPpCYS
|
||||||
|
eu3T1qKSNXm6X0XOWD2LIrdiDC8HaI9FqZVMI/srMK2CF8XCL2m67W1FuoPlWzod
|
||||||
|
5ORy0IZB7spoF0xihmcgnEGElRmdo5w/vkGH8U7Zyn9Eb57UVFeafgeskf4wqB23
|
||||||
|
BjbMdW2YaB+yzMRwYgOnD5lnBD4uqSmvjaV9C0kxn7x+oJkkiRV8/z1cNcO+BaeQ
|
||||||
|
Akh/yTTeTzYGSc/ZOqCX1O+NOPgSeixVlqenABEBAAG0GVVzZXIyIDx1c2VyMkBl
|
||||||
|
eGFtcGxlLmNvbT6JAVQEEwEIAD4WIQRXgbSh0TtGbgRd7XI46jvO1zKYLAUCWYZW
|
||||||
|
wwIbAwUJA8JnAAULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRA46jvO1zKYLF/e
|
||||||
|
B/91wm2KLMIQBZBA9WA2/+9rQWTo9EqgYrXN60rEzX3cYJWXZiE4DrKR1oWDGNLi
|
||||||
|
KXOCW62snvJldolBqq0ZqaKvPKzl0Y5TRqbYEc9AjUSqgRin1b+G2DevLGT4ibq+
|
||||||
|
7ocQvz0XkASEUAgHahp0Ubiiib1521WwT/duL+AG8Gg0+DK09RfV3eX5/EOkQCKv
|
||||||
|
8cutqgsd2Smz40A8wXuJkRcipZBtrB/GkUaZ/eJdwEeSYZjEA9GWF61LJT2stvRN
|
||||||
|
HCk7C3z3pVEek1PluiFs/4VN8BG8yDzW4c0tLty4Fj3VwPqwIbB5AJbquVfhQCb4
|
||||||
|
Eep2lm3Lc9b1OwO5N3coPJkouQENBFmGVsMBCADAGba2L6NCOE1i3WIP6CPzbdOo
|
||||||
|
N3gdTfTgccAx9fNeon9jor+3tgEjlo9/6cXiRoksOV6W4wFab/ZwWgwN6JO4CGvZ
|
||||||
|
Wi7EQwMMMp1E36YTojKQJrcA9UvMnTHulqQQ88F5E845DhzFQM3erv42QZZMBAX3
|
||||||
|
kXCgy1GNFocl6tLUvJdEqs+VcJGGANMpmzE4WLa8KhSYnxipwuQ62JBy9R+cHyKT
|
||||||
|
OARk8znRqSu5bT3LtlrZ/HXu+6Oy4+2uCdNzZIh5J5tPS7CPA6ptl88iGVBte/CJ
|
||||||
|
7cjgJWSQqeYp2Y5QvsWAivkQ4Ww9plHbbwV0A2eaHsjjWzlUl3HoJ/snMOhBABEB
|
||||||
|
AAGJATwEGAEIACYWIQRXgbSh0TtGbgRd7XI46jvO1zKYLAUCWYZWwwIbDAUJA8Jn
|
||||||
|
AAAKCRA46jvO1zKYLBwLCACQOpeRVrwIKVaWcPMYjVHHJsGscaLKpgpARAUgbiG6
|
||||||
|
Cbc2WI8Sm3fRwrY0VAfN+u9QwrtvxANcyB3vTgTzw7FimfhOimxiTSO8HQCfjDZF
|
||||||
|
Xly8rq+Fua7+ClWUpy21IekW41VvZYjH2sL6EVP+UcEOaGAyN53XfhaRVZPhNtZN
|
||||||
|
NKAE9N5EG3rbsZ33LzJj40rEKlzFSseAAPft8qA3IXjzFBx+PQXHMpNCagL79he6
|
||||||
|
lqockTJ+oPmta4CF/J0U5LUr1tOZXheL3TP6m8d08gDrtn0YuGOPk87i9sJz+jR9
|
||||||
|
uy6MA3VSB99SK9ducGmE1Jv8mcziREroz2TEGr0zPs6h
|
||||||
|
=J59D
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----`)
|
||||||
|
}
|
||||||
|
|
||||||
|
func testCreateValidSecondaryEmailGPGKey(t *testing.T, reqBuilder func(testing.TB, *http.Request, int) *TestResponse, expected int) {
|
||||||
|
//User2 <user21@example.com> //secondary and not activated
|
||||||
|
testCreateGPGKey(t, reqBuilder, expected, `-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
mQENBFmGWN4BCAC18V4tVGO65VLCV7p14FuXJlUtZ5CuYMvgEkcOqrvRaBSW9ao4
|
||||||
|
PGESOhJpfWpnW3QgJniYndLzPpsmdHEclEER6aZjiNgReWPOjHD5tykWocZAJqXD
|
||||||
|
eY1ym59gvVMLcfbV2yQsyR2hbJlc+dJsl16tigSEe3nwxZSw2IsW92pgEzT9JNUr
|
||||||
|
Q+mC8dw4dqY0tYmFazYUGNxufUc/twgQT/Or1aNs0az5Q6Jft4rrTRsh/S7We0VB
|
||||||
|
COKGkdcQyYgAls7HJBuPjQRi6DM9VhgBSHLAgSLyaUcZvhZBJr8Qe/q4PP3/kYDJ
|
||||||
|
wm4RMnjOLz2pFZPgtRqgcAwpmFtLrACbEB3JABEBAAG0GlVzZXIyIDx1c2VyMjFA
|
||||||
|
ZXhhbXBsZS5jb20+iQFUBBMBCAA+FiEEPOLHOjPSO42DWM57+r85c5/h6ScFAlmG
|
||||||
|
WN4CGwMFCQPCZwAFCwkIBwIGFQgJCgsCBBYCAwECHgECF4AACgkQ+r85c5/h6Sfx
|
||||||
|
Lgf/dq64NBV8+X9an3seaLxePRviva48e4K67/wV/JxtXNO5Z/DhMGz5kHXCsG9D
|
||||||
|
CXuWYO8ehlTjEnMZ6qqdDnY+H6bQsb2OS5oPn4RwpPXslAjEKtojPAr0dDsMS2DB
|
||||||
|
dUuIm1AoOnewOVO0OFRf1EqX1bivxnN0FVMcO0m8AczfnKDaGb0y/qg/Y9JAsKqp
|
||||||
|
j5pZNMWUkntRtGySeJ4CVJMmkVKJAHsa1Qj6MKdFeid4h4y94cBJ4ZdyBxNdpQOx
|
||||||
|
ydf0doicovfeqGNO4oWzsGP4RBK2CqGPCUT+EFl20jPvMkKwOjxgqc8p0z3b2UT9
|
||||||
|
+9bnmCGHgF/fW1HJ3iKmfFPqnLkBDQRZhljeAQgA5AirU/NJGgm19ZJYFOiHftjS
|
||||||
|
azbrPxGeD3cSqmvDPIMc1DNZGfQV5D4EVumnVbQBtL6xHFoGKz9KisUMbe4a/X2J
|
||||||
|
S8JmIphQWG0vMJX1DaZIzr2gT71MnPD7JMGsSUCh5dIKpTNTZX4w+oGPGOu0/UlL
|
||||||
|
x0448AryKwp30J2p6D4GeI0nb03n35S2lTOpnHDn1wj7Jl/8LS2fdFOdNaNHXSZe
|
||||||
|
twdSwJKhyBEiScgeHBDyKqo8zWkYoSb9eA2HiYlbVaiNtp24KP1mIEpiUdrRjWno
|
||||||
|
zauYSZGHZlOFMgF4dKWuetPiuH9m7UYZGKyMLfQ9vYFb+xcPh2bLCQHJ1OEmMQAR
|
||||||
|
AQABiQE8BBgBCAAmFiEEPOLHOjPSO42DWM57+r85c5/h6ScFAlmGWN4CGwwFCQPC
|
||||||
|
ZwAACgkQ+r85c5/h6Sfjfwf+O4WEjRdvPJLxNy7mfAGoAqDMHIwyH/tVzYgyVhnG
|
||||||
|
h/+cfRxJbGc3rpjYdr8dmvghzjEAout8uibPWaIqs63RCAPGPqgWLfxNO5c8+y8V
|
||||||
|
LZMVOTV26l2olkkdBWAuhLqKTNh6TiQva03yhOgHWj4XDvFfxICWPFXVd6t5ELpD
|
||||||
|
iApGu1OAj8JfhmzbG03Yzx+Ku7bWDxMonx3V/IDEu5LS5zrboHYDKCA53bXXghoi
|
||||||
|
Aceqql+PKrDwEjoY4bptwMHLmcjGjdCQ//Qx1neho7nZcS7xjTucY8gQuulwCyXF
|
||||||
|
y6wM+wMz8dunIG9gw4+Re6c4Rz9tX1kzxLrU7Pl21tMqfg==
|
||||||
|
=0N/9
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----`)
|
||||||
|
}
|
|
@ -46,7 +46,7 @@ func TestCreateFileOnProtectedBranch(t *testing.T) {
|
||||||
req := NewRequestWithValues(t, "POST", "/user2/repo1/settings/branches?action=protected_branch", map[string]string{
|
req := NewRequestWithValues(t, "POST", "/user2/repo1/settings/branches?action=protected_branch", map[string]string{
|
||||||
"_csrf": csrf,
|
"_csrf": csrf,
|
||||||
"branchName": "master",
|
"branchName": "master",
|
||||||
"canPush": "true",
|
"canPush": "false",
|
||||||
})
|
})
|
||||||
resp := session.MakeRequest(t, req, http.StatusOK)
|
resp := session.MakeRequest(t, req, http.StatusOK)
|
||||||
// Check if master branch has been locked successfully
|
// Check if master branch has been locked successfully
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
ref: refs/heads/master
|
|
@ -0,0 +1,4 @@
|
||||||
|
[core]
|
||||||
|
repositoryformatversion = 0
|
||||||
|
filemode = true
|
||||||
|
bare = true
|
|
@ -0,0 +1 @@
|
||||||
|
Unnamed repository; edit this file 'description' to name the repository.
|
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to check the commit log message taken by
|
||||||
|
# applypatch from an e-mail message.
|
||||||
|
#
|
||||||
|
# The hook should exit with non-zero status after issuing an
|
||||||
|
# appropriate message if it wants to stop the commit. The hook is
|
||||||
|
# allowed to edit the commit message file.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "applypatch-msg".
|
||||||
|
|
||||||
|
. git-sh-setup
|
||||||
|
commitmsg="$(git rev-parse --git-path hooks/commit-msg)"
|
||||||
|
test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"}
|
||||||
|
:
|
|
@ -0,0 +1,24 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to check the commit log message.
|
||||||
|
# Called by "git commit" with one argument, the name of the file
|
||||||
|
# that has the commit message. The hook should exit with non-zero
|
||||||
|
# status after issuing an appropriate message if it wants to stop the
|
||||||
|
# commit. The hook is allowed to edit the commit message file.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "commit-msg".
|
||||||
|
|
||||||
|
# Uncomment the below to add a Signed-off-by line to the message.
|
||||||
|
# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
|
||||||
|
# hook is more suited to it.
|
||||||
|
#
|
||||||
|
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
|
||||||
|
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
|
||||||
|
|
||||||
|
# This example catches duplicate Signed-off-by lines.
|
||||||
|
|
||||||
|
test "" = "$(grep '^Signed-off-by: ' "$1" |
|
||||||
|
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
|
||||||
|
echo >&2 Duplicate Signed-off-by lines.
|
||||||
|
exit 1
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to prepare a packed repository for use over
|
||||||
|
# dumb transports.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "post-update".
|
||||||
|
|
||||||
|
exec git update-server-info
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to verify what is about to be committed
|
||||||
|
# by applypatch from an e-mail message.
|
||||||
|
#
|
||||||
|
# The hook should exit with non-zero status after issuing an
|
||||||
|
# appropriate message if it wants to stop the commit.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "pre-applypatch".
|
||||||
|
|
||||||
|
. git-sh-setup
|
||||||
|
precommit="$(git rev-parse --git-path hooks/pre-commit)"
|
||||||
|
test -x "$precommit" && exec "$precommit" ${1+"$@"}
|
||||||
|
:
|
|
@ -0,0 +1,49 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to verify what is about to be committed.
|
||||||
|
# Called by "git commit" with no arguments. The hook should
|
||||||
|
# exit with non-zero status after issuing an appropriate message if
|
||||||
|
# it wants to stop the commit.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "pre-commit".
|
||||||
|
|
||||||
|
if git rev-parse --verify HEAD >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
against=HEAD
|
||||||
|
else
|
||||||
|
# Initial commit: diff against an empty tree object
|
||||||
|
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If you want to allow non-ASCII filenames set this variable to true.
|
||||||
|
allownonascii=$(git config --bool hooks.allownonascii)
|
||||||
|
|
||||||
|
# Redirect output to stderr.
|
||||||
|
exec 1>&2
|
||||||
|
|
||||||
|
# Cross platform projects tend to avoid non-ASCII filenames; prevent
|
||||||
|
# them from being added to the repository. We exploit the fact that the
|
||||||
|
# printable range starts at the space character and ends with tilde.
|
||||||
|
if [ "$allownonascii" != "true" ] &&
|
||||||
|
# Note that the use of brackets around a tr range is ok here, (it's
|
||||||
|
# even required, for portability to Solaris 10's /usr/bin/tr), since
|
||||||
|
# the square bracket bytes happen to fall in the designated range.
|
||||||
|
test $(git diff --cached --name-only --diff-filter=A -z $against |
|
||||||
|
LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
|
||||||
|
then
|
||||||
|
cat <<\EOF
|
||||||
|
Error: Attempt to add a non-ASCII file name.
|
||||||
|
|
||||||
|
This can cause problems if you want to work with people on other platforms.
|
||||||
|
|
||||||
|
To be portable it is advisable to rename the file.
|
||||||
|
|
||||||
|
If you know what you are doing you can disable this check using:
|
||||||
|
|
||||||
|
git config hooks.allownonascii true
|
||||||
|
EOF
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If there are whitespace errors, print the offending file names and fail.
|
||||||
|
exec git diff-index --check --cached $against --
|
|
@ -0,0 +1,53 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# An example hook script to verify what is about to be pushed. Called by "git
|
||||||
|
# push" after it has checked the remote status, but before anything has been
|
||||||
|
# pushed. If this script exits with a non-zero status nothing will be pushed.
|
||||||
|
#
|
||||||
|
# This hook is called with the following parameters:
|
||||||
|
#
|
||||||
|
# $1 -- Name of the remote to which the push is being done
|
||||||
|
# $2 -- URL to which the push is being done
|
||||||
|
#
|
||||||
|
# If pushing without using a named remote those arguments will be equal.
|
||||||
|
#
|
||||||
|
# Information about the commits which are being pushed is supplied as lines to
|
||||||
|
# the standard input in the form:
|
||||||
|
#
|
||||||
|
# <local ref> <local sha1> <remote ref> <remote sha1>
|
||||||
|
#
|
||||||
|
# This sample shows how to prevent push of commits where the log message starts
|
||||||
|
# with "WIP" (work in progress).
|
||||||
|
|
||||||
|
remote="$1"
|
||||||
|
url="$2"
|
||||||
|
|
||||||
|
z40=0000000000000000000000000000000000000000
|
||||||
|
|
||||||
|
while read local_ref local_sha remote_ref remote_sha
|
||||||
|
do
|
||||||
|
if [ "$local_sha" = $z40 ]
|
||||||
|
then
|
||||||
|
# Handle delete
|
||||||
|
:
|
||||||
|
else
|
||||||
|
if [ "$remote_sha" = $z40 ]
|
||||||
|
then
|
||||||
|
# New branch, examine all commits
|
||||||
|
range="$local_sha"
|
||||||
|
else
|
||||||
|
# Update to existing branch, examine new commits
|
||||||
|
range="$remote_sha..$local_sha"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check for WIP commit
|
||||||
|
commit=`git rev-list -n 1 --grep '^WIP' "$range"`
|
||||||
|
if [ -n "$commit" ]
|
||||||
|
then
|
||||||
|
echo >&2 "Found WIP commit in $local_ref, not pushing"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
exit 0
|
|
@ -0,0 +1,169 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 2008 Junio C Hamano
|
||||||
|
#
|
||||||
|
# The "pre-rebase" hook is run just before "git rebase" starts doing
|
||||||
|
# its job, and can prevent the command from running by exiting with
|
||||||
|
# non-zero status.
|
||||||
|
#
|
||||||
|
# The hook is called with the following parameters:
|
||||||
|
#
|
||||||
|
# $1 -- the upstream the series was forked from.
|
||||||
|
# $2 -- the branch being rebased (or empty when rebasing the current branch).
|
||||||
|
#
|
||||||
|
# This sample shows how to prevent topic branches that are already
|
||||||
|
# merged to 'next' branch from getting rebased, because allowing it
|
||||||
|
# would result in rebasing already published history.
|
||||||
|
|
||||||
|
publish=next
|
||||||
|
basebranch="$1"
|
||||||
|
if test "$#" = 2
|
||||||
|
then
|
||||||
|
topic="refs/heads/$2"
|
||||||
|
else
|
||||||
|
topic=`git symbolic-ref HEAD` ||
|
||||||
|
exit 0 ;# we do not interrupt rebasing detached HEAD
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$topic" in
|
||||||
|
refs/heads/??/*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
exit 0 ;# we do not interrupt others.
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Now we are dealing with a topic branch being rebased
|
||||||
|
# on top of master. Is it OK to rebase it?
|
||||||
|
|
||||||
|
# Does the topic really exist?
|
||||||
|
git show-ref -q "$topic" || {
|
||||||
|
echo >&2 "No such branch $topic"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Is topic fully merged to master?
|
||||||
|
not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
|
||||||
|
if test -z "$not_in_master"
|
||||||
|
then
|
||||||
|
echo >&2 "$topic is fully merged to master; better remove it."
|
||||||
|
exit 1 ;# we could allow it, but there is no point.
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Is topic ever merged to next? If so you should not be rebasing it.
|
||||||
|
only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
|
||||||
|
only_next_2=`git rev-list ^master ${publish} | sort`
|
||||||
|
if test "$only_next_1" = "$only_next_2"
|
||||||
|
then
|
||||||
|
not_in_topic=`git rev-list "^$topic" master`
|
||||||
|
if test -z "$not_in_topic"
|
||||||
|
then
|
||||||
|
echo >&2 "$topic is already up-to-date with master"
|
||||||
|
exit 1 ;# we could allow it, but there is no point.
|
||||||
|
else
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
|
||||||
|
/usr/bin/perl -e '
|
||||||
|
my $topic = $ARGV[0];
|
||||||
|
my $msg = "* $topic has commits already merged to public branch:\n";
|
||||||
|
my (%not_in_next) = map {
|
||||||
|
/^([0-9a-f]+) /;
|
||||||
|
($1 => 1);
|
||||||
|
} split(/\n/, $ARGV[1]);
|
||||||
|
for my $elem (map {
|
||||||
|
/^([0-9a-f]+) (.*)$/;
|
||||||
|
[$1 => $2];
|
||||||
|
} split(/\n/, $ARGV[2])) {
|
||||||
|
if (!exists $not_in_next{$elem->[0]}) {
|
||||||
|
if ($msg) {
|
||||||
|
print STDERR $msg;
|
||||||
|
undef $msg;
|
||||||
|
}
|
||||||
|
print STDERR " $elem->[1]\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
' "$topic" "$not_in_next" "$not_in_master"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
################################################################
|
||||||
|
|
||||||
|
This sample hook safeguards topic branches that have been
|
||||||
|
published from being rewound.
|
||||||
|
|
||||||
|
The workflow assumed here is:
|
||||||
|
|
||||||
|
* Once a topic branch forks from "master", "master" is never
|
||||||
|
merged into it again (either directly or indirectly).
|
||||||
|
|
||||||
|
* Once a topic branch is fully cooked and merged into "master",
|
||||||
|
it is deleted. If you need to build on top of it to correct
|
||||||
|
earlier mistakes, a new topic branch is created by forking at
|
||||||
|
the tip of the "master". This is not strictly necessary, but
|
||||||
|
it makes it easier to keep your history simple.
|
||||||
|
|
||||||
|
* Whenever you need to test or publish your changes to topic
|
||||||
|
branches, merge them into "next" branch.
|
||||||
|
|
||||||
|
The script, being an example, hardcodes the publish branch name
|
||||||
|
to be "next", but it is trivial to make it configurable via
|
||||||
|
$GIT_DIR/config mechanism.
|
||||||
|
|
||||||
|
With this workflow, you would want to know:
|
||||||
|
|
||||||
|
(1) ... if a topic branch has ever been merged to "next". Young
|
||||||
|
topic branches can have stupid mistakes you would rather
|
||||||
|
clean up before publishing, and things that have not been
|
||||||
|
merged into other branches can be easily rebased without
|
||||||
|
affecting other people. But once it is published, you would
|
||||||
|
not want to rewind it.
|
||||||
|
|
||||||
|
(2) ... if a topic branch has been fully merged to "master".
|
||||||
|
Then you can delete it. More importantly, you should not
|
||||||
|
build on top of it -- other people may already want to
|
||||||
|
change things related to the topic as patches against your
|
||||||
|
"master", so if you need further changes, it is better to
|
||||||
|
fork the topic (perhaps with the same name) afresh from the
|
||||||
|
tip of "master".
|
||||||
|
|
||||||
|
Let's look at this example:
|
||||||
|
|
||||||
|
o---o---o---o---o---o---o---o---o---o "next"
|
||||||
|
/ / / /
|
||||||
|
/ a---a---b A / /
|
||||||
|
/ / / /
|
||||||
|
/ / c---c---c---c B /
|
||||||
|
/ / / \ /
|
||||||
|
/ / / b---b C \ /
|
||||||
|
/ / / / \ /
|
||||||
|
---o---o---o---o---o---o---o---o---o---o---o "master"
|
||||||
|
|
||||||
|
|
||||||
|
A, B and C are topic branches.
|
||||||
|
|
||||||
|
* A has one fix since it was merged up to "next".
|
||||||
|
|
||||||
|
* B has finished. It has been fully merged up to "master" and "next",
|
||||||
|
and is ready to be deleted.
|
||||||
|
|
||||||
|
* C has not merged to "next" at all.
|
||||||
|
|
||||||
|
We would want to allow C to be rebased, refuse A, and encourage
|
||||||
|
B to be deleted.
|
||||||
|
|
||||||
|
To compute (1):
|
||||||
|
|
||||||
|
git rev-list ^master ^topic next
|
||||||
|
git rev-list ^master next
|
||||||
|
|
||||||
|
if these match, topic has not merged in next at all.
|
||||||
|
|
||||||
|
To compute (2):
|
||||||
|
|
||||||
|
git rev-list master..topic
|
||||||
|
|
||||||
|
if this is empty, it is fully merged to "master".
|
|
@ -0,0 +1,24 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to make use of push options.
|
||||||
|
# The example simply echoes all push options that start with 'echoback='
|
||||||
|
# and rejects all pushes when the "reject" push option is used.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "pre-receive".
|
||||||
|
|
||||||
|
if test -n "$GIT_PUSH_OPTION_COUNT"
|
||||||
|
then
|
||||||
|
i=0
|
||||||
|
while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"
|
||||||
|
do
|
||||||
|
eval "value=\$GIT_PUSH_OPTION_$i"
|
||||||
|
case "$value" in
|
||||||
|
echoback=*)
|
||||||
|
echo "echo from the pre-receive-hook: ${value#*=}" >&2
|
||||||
|
;;
|
||||||
|
reject)
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
i=$((i + 1))
|
||||||
|
done
|
||||||
|
fi
|
|
@ -0,0 +1,36 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to prepare the commit log message.
|
||||||
|
# Called by "git commit" with the name of the file that has the
|
||||||
|
# commit message, followed by the description of the commit
|
||||||
|
# message's source. The hook's purpose is to edit the commit
|
||||||
|
# message file. If the hook fails with a non-zero status,
|
||||||
|
# the commit is aborted.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "prepare-commit-msg".
|
||||||
|
|
||||||
|
# This hook includes three examples. The first comments out the
|
||||||
|
# "Conflicts:" part of a merge commit.
|
||||||
|
#
|
||||||
|
# The second includes the output of "git diff --name-status -r"
|
||||||
|
# into the message, just before the "git status" output. It is
|
||||||
|
# commented because it doesn't cope with --amend or with squashed
|
||||||
|
# commits.
|
||||||
|
#
|
||||||
|
# The third example adds a Signed-off-by line to the message, that can
|
||||||
|
# still be edited. This is rarely a good idea.
|
||||||
|
|
||||||
|
case "$2,$3" in
|
||||||
|
merge,)
|
||||||
|
/usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
|
||||||
|
|
||||||
|
# ,|template,)
|
||||||
|
# /usr/bin/perl -i.bak -pe '
|
||||||
|
# print "\n" . `git diff --cached --name-status -r`
|
||||||
|
# if /^#/ && $first++ == 0' "$1" ;;
|
||||||
|
|
||||||
|
*) ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
|
||||||
|
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
|
|
@ -0,0 +1,128 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to block unannotated tags from entering.
|
||||||
|
# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "update".
|
||||||
|
#
|
||||||
|
# Config
|
||||||
|
# ------
|
||||||
|
# hooks.allowunannotated
|
||||||
|
# This boolean sets whether unannotated tags will be allowed into the
|
||||||
|
# repository. By default they won't be.
|
||||||
|
# hooks.allowdeletetag
|
||||||
|
# This boolean sets whether deleting tags will be allowed in the
|
||||||
|
# repository. By default they won't be.
|
||||||
|
# hooks.allowmodifytag
|
||||||
|
# This boolean sets whether a tag may be modified after creation. By default
|
||||||
|
# it won't be.
|
||||||
|
# hooks.allowdeletebranch
|
||||||
|
# This boolean sets whether deleting branches will be allowed in the
|
||||||
|
# repository. By default they won't be.
|
||||||
|
# hooks.denycreatebranch
|
||||||
|
# This boolean sets whether remotely creating branches will be denied
|
||||||
|
# in the repository. By default this is allowed.
|
||||||
|
#
|
||||||
|
|
||||||
|
# --- Command line
|
||||||
|
refname="$1"
|
||||||
|
oldrev="$2"
|
||||||
|
newrev="$3"
|
||||||
|
|
||||||
|
# --- Safety check
|
||||||
|
if [ -z "$GIT_DIR" ]; then
|
||||||
|
echo "Don't run this script from the command line." >&2
|
||||||
|
echo " (if you want, you could supply GIT_DIR then run" >&2
|
||||||
|
echo " $0 <ref> <oldrev> <newrev>)" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
|
||||||
|
echo "usage: $0 <ref> <oldrev> <newrev>" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Config
|
||||||
|
allowunannotated=$(git config --bool hooks.allowunannotated)
|
||||||
|
allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
|
||||||
|
denycreatebranch=$(git config --bool hooks.denycreatebranch)
|
||||||
|
allowdeletetag=$(git config --bool hooks.allowdeletetag)
|
||||||
|
allowmodifytag=$(git config --bool hooks.allowmodifytag)
|
||||||
|
|
||||||
|
# check for no description
|
||||||
|
projectdesc=$(sed -e '1q' "$GIT_DIR/description")
|
||||||
|
case "$projectdesc" in
|
||||||
|
"Unnamed repository"* | "")
|
||||||
|
echo "*** Project description file hasn't been set" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# --- Check types
|
||||||
|
# if $newrev is 0000...0000, it's a commit to delete a ref.
|
||||||
|
zero="0000000000000000000000000000000000000000"
|
||||||
|
if [ "$newrev" = "$zero" ]; then
|
||||||
|
newrev_type=delete
|
||||||
|
else
|
||||||
|
newrev_type=$(git cat-file -t $newrev)
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$refname","$newrev_type" in
|
||||||
|
refs/tags/*,commit)
|
||||||
|
# un-annotated tag
|
||||||
|
short_refname=${refname##refs/tags/}
|
||||||
|
if [ "$allowunannotated" != "true" ]; then
|
||||||
|
echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
|
||||||
|
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/tags/*,delete)
|
||||||
|
# delete tag
|
||||||
|
if [ "$allowdeletetag" != "true" ]; then
|
||||||
|
echo "*** Deleting a tag is not allowed in this repository" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/tags/*,tag)
|
||||||
|
# annotated tag
|
||||||
|
if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
|
||||||
|
then
|
||||||
|
echo "*** Tag '$refname' already exists." >&2
|
||||||
|
echo "*** Modifying a tag is not allowed in this repository." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/heads/*,commit)
|
||||||
|
# branch
|
||||||
|
if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
|
||||||
|
echo "*** Creating a branch is not allowed in this repository" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/heads/*,delete)
|
||||||
|
# delete branch
|
||||||
|
if [ "$allowdeletebranch" != "true" ]; then
|
||||||
|
echo "*** Deleting a branch is not allowed in this repository" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/remotes/*,commit)
|
||||||
|
# tracking branch
|
||||||
|
;;
|
||||||
|
refs/remotes/*,delete)
|
||||||
|
# delete tracking branch
|
||||||
|
if [ "$allowdeletebranch" != "true" ]; then
|
||||||
|
echo "*** Deleting a tracking branch is not allowed in this repository" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Anything else (is there anything else?)
|
||||||
|
echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# --- Finished
|
||||||
|
exit 0
|
|
@ -0,0 +1,6 @@
|
||||||
|
# git ls-files --others --exclude-from=.git/info/exclude
|
||||||
|
# Lines that start with '#' are comments.
|
||||||
|
# For a project mostly in C, the following would be a good set of
|
||||||
|
# exclude patterns (uncomment them if you want to use them):
|
||||||
|
# *.[oa]
|
||||||
|
# *~
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
||||||
|
x+)JMU06g040031Q(JMLÉMÕËMaXbR¶”10<31>-&ªéCüÕþË’‘Ý=À,
|
Binary file not shown.
|
@ -0,0 +1,2 @@
|
||||||
|
xŤŤQ
|
||||||
|
B!Eűvó„ŽO'!˘M´€Q‡×<E280A1>Ěđů ĺgÔúş‡çŢTKY:v˝‰€N6»<36>…‘b f›˘÷š<C3B7>&—‰19ĂÄÇhoýV\Wi§íyqyŢĺ<C5A2>j9<6A>qő„FŘŇj´ăŞË?Ůź¤ćZ3¬Ëü<C38B>ßő*S6#
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
||||||
|
f27c2b2b03dcab38beaf89b0ab4ff61f6de63441
|
|
@ -0,0 +1 @@
|
||||||
|
27566bd5738fc8b4e3fef3c5e72cce608537bd95
|
|
@ -0,0 +1 @@
|
||||||
|
69554a64c1e6030f051e5c3f94bfbd773cd6a324
|
|
@ -0,0 +1 @@
|
||||||
|
69554a64c1e6030f051e5c3f94bfbd773cd6a324
|
|
@ -17,7 +17,7 @@ import (
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func assertProtectedBranch(t *testing.T, repoID int64, branchName string, isErr, canPush bool) {
|
func assertProtectedBranch(t *testing.T, repoID int64, branchName string, isErr, isProtected bool) {
|
||||||
reqURL := fmt.Sprintf("/api/internal/branch/%d/%s", repoID, url.QueryEscape(branchName))
|
reqURL := fmt.Sprintf("/api/internal/branch/%d/%s", repoID, url.QueryEscape(branchName))
|
||||||
req := NewRequest(t, "GET", reqURL)
|
req := NewRequest(t, "GET", reqURL)
|
||||||
t.Log(reqURL)
|
t.Log(reqURL)
|
||||||
|
@ -31,14 +31,14 @@ func assertProtectedBranch(t *testing.T, repoID int64, branchName string, isErr,
|
||||||
var branch models.ProtectedBranch
|
var branch models.ProtectedBranch
|
||||||
t.Log(string(resp.Body))
|
t.Log(string(resp.Body))
|
||||||
assert.NoError(t, json.Unmarshal(resp.Body, &branch))
|
assert.NoError(t, json.Unmarshal(resp.Body, &branch))
|
||||||
assert.Equal(t, canPush, branch.CanPush)
|
assert.Equal(t, isProtected, branch.IsProtected())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestInternal_GetProtectedBranch(t *testing.T) {
|
func TestInternal_GetProtectedBranch(t *testing.T) {
|
||||||
prepareTestEnv(t)
|
prepareTestEnv(t)
|
||||||
|
|
||||||
assertProtectedBranch(t, 1, "master", false, true)
|
assertProtectedBranch(t, 1, "master", false, false)
|
||||||
assertProtectedBranch(t, 1, "dev", false, true)
|
assertProtectedBranch(t, 1, "dev", false, false)
|
||||||
assertProtectedBranch(t, 1, "lunny/dev", false, true)
|
assertProtectedBranch(t, 1, "lunny/dev", false, false)
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ func TestLinksNoLogin(t *testing.T) {
|
||||||
"/user/forgot_password",
|
"/user/forgot_password",
|
||||||
"/swagger",
|
"/swagger",
|
||||||
// TODO: follow this page and test every link
|
// TODO: follow this page and test every link
|
||||||
"/assets/librejs/librejs.html",
|
"/vendor/librejs.html",
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, link := range links {
|
for _, link := range links {
|
||||||
|
|
|
@ -3,7 +3,7 @@ RUN_MODE = prod
|
||||||
|
|
||||||
[database]
|
[database]
|
||||||
DB_TYPE = mysql
|
DB_TYPE = mysql
|
||||||
HOST = 127.0.0.1:3306
|
HOST = mysql:3306
|
||||||
NAME = testgitea
|
NAME = testgitea
|
||||||
USER = root
|
USER = root
|
||||||
PASSWD =
|
PASSWD =
|
||||||
|
|
|
@ -3,7 +3,7 @@ RUN_MODE = prod
|
||||||
|
|
||||||
[database]
|
[database]
|
||||||
DB_TYPE = postgres
|
DB_TYPE = postgres
|
||||||
HOST = 127.0.0.1:5432
|
HOST = pgsql:5432
|
||||||
NAME = testgitea
|
NAME = testgitea
|
||||||
USER = postgres
|
USER = postgres
|
||||||
PASSWD = postgres
|
PASSWD = postgres
|
||||||
|
|
|
@ -46,7 +46,7 @@ func testPullCreate(t *testing.T, session *TestSession, user, repo, branch strin
|
||||||
func TestPullCreate(t *testing.T) {
|
func TestPullCreate(t *testing.T) {
|
||||||
prepareTestEnv(t)
|
prepareTestEnv(t)
|
||||||
session := loginUser(t, "user1")
|
session := loginUser(t, "user1")
|
||||||
testRepoFork(t, session)
|
testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
|
||||||
testEditFile(t, session, "user1", "repo1", "master", "README.md")
|
testEditFile(t, session, "user1", "repo1", "master", "README.md")
|
||||||
testPullCreate(t, session, "user1", "repo1", "master")
|
testPullCreate(t, session, "user1", "repo1", "master")
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,7 @@ func testPullCleanUp(t *testing.T, session *TestSession, user, repo, pullnum str
|
||||||
func TestPullMerge(t *testing.T) {
|
func TestPullMerge(t *testing.T) {
|
||||||
prepareTestEnv(t)
|
prepareTestEnv(t)
|
||||||
session := loginUser(t, "user1")
|
session := loginUser(t, "user1")
|
||||||
testRepoFork(t, session)
|
testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
|
||||||
testEditFile(t, session, "user1", "repo1", "master", "README.md")
|
testEditFile(t, session, "user1", "repo1", "master", "README.md")
|
||||||
|
|
||||||
resp := testPullCreate(t, session, "user1", "repo1", "master")
|
resp := testPullCreate(t, session, "user1", "repo1", "master")
|
||||||
|
@ -61,7 +61,7 @@ func TestPullMerge(t *testing.T) {
|
||||||
func TestPullCleanUpAfterMerge(t *testing.T) {
|
func TestPullCleanUpAfterMerge(t *testing.T) {
|
||||||
prepareTestEnv(t)
|
prepareTestEnv(t)
|
||||||
session := loginUser(t, "user1")
|
session := loginUser(t, "user1")
|
||||||
testRepoFork(t, session)
|
testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
|
||||||
testEditFileToNewBranch(t, session, "user1", "repo1", "master", "feature/test", "README.md")
|
testEditFileToNewBranch(t, session, "user1", "repo1", "master", "feature/test", "README.md")
|
||||||
|
|
||||||
resp := testPullCreate(t, session, "user1", "repo1", "feature/test")
|
resp := testPullCreate(t, session, "user1", "repo1", "feature/test")
|
||||||
|
|
|
@ -5,19 +5,24 @@
|
||||||
package integrations
|
package integrations
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"code.gitea.io/gitea/models"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func testRepoFork(t *testing.T, session *TestSession) *TestResponse {
|
func testRepoFork(t *testing.T, session *TestSession, ownerName, repoName, forkOwnerName, forkRepoName string) *TestResponse {
|
||||||
|
forkOwner := models.AssertExistsAndLoadBean(t, &models.User{Name: forkOwnerName}).(*models.User)
|
||||||
|
|
||||||
// Step0: check the existence of the to-fork repo
|
// Step0: check the existence of the to-fork repo
|
||||||
req := NewRequest(t, "GET", "/user1/repo1")
|
req := NewRequestf(t, "GET", "/%s/%s", forkOwnerName, forkRepoName)
|
||||||
resp := session.MakeRequest(t, req, http.StatusNotFound)
|
resp := session.MakeRequest(t, req, http.StatusNotFound)
|
||||||
|
|
||||||
// Step1: go to the main page of repo
|
// Step1: go to the main page of repo
|
||||||
req = NewRequest(t, "GET", "/user2/repo1")
|
req = NewRequestf(t, "GET", "/%s/%s", ownerName, repoName)
|
||||||
resp = session.MakeRequest(t, req, http.StatusOK)
|
resp = session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
|
||||||
// Step2: click the fork button
|
// Step2: click the fork button
|
||||||
|
@ -31,15 +36,17 @@ func testRepoFork(t *testing.T, session *TestSession) *TestResponse {
|
||||||
htmlDoc = NewHTMLParser(t, resp.Body)
|
htmlDoc = NewHTMLParser(t, resp.Body)
|
||||||
link, exists = htmlDoc.doc.Find("form.ui.form[action^=\"/repo/fork/\"]").Attr("action")
|
link, exists = htmlDoc.doc.Find("form.ui.form[action^=\"/repo/fork/\"]").Attr("action")
|
||||||
assert.True(t, exists, "The template has changed")
|
assert.True(t, exists, "The template has changed")
|
||||||
|
_, exists = htmlDoc.doc.Find(fmt.Sprintf(".owner.dropdown .item[data-value=\"%d\"]", forkOwner.ID)).Attr("data-value")
|
||||||
|
assert.True(t, exists, fmt.Sprintf("Fork owner '%s' is not present in select box", forkOwnerName))
|
||||||
req = NewRequestWithValues(t, "POST", link, map[string]string{
|
req = NewRequestWithValues(t, "POST", link, map[string]string{
|
||||||
"_csrf": htmlDoc.GetCSRF(),
|
"_csrf": htmlDoc.GetCSRF(),
|
||||||
"uid": "1",
|
"uid": fmt.Sprintf("%d", forkOwner.ID),
|
||||||
"repo_name": "repo1",
|
"repo_name": forkRepoName,
|
||||||
})
|
})
|
||||||
resp = session.MakeRequest(t, req, http.StatusFound)
|
resp = session.MakeRequest(t, req, http.StatusFound)
|
||||||
|
|
||||||
// Step4: check the existence of the forked repo
|
// Step4: check the existence of the forked repo
|
||||||
req = NewRequest(t, "GET", "/user1/repo1")
|
req = NewRequestf(t, "GET", "/%s/%s", forkOwnerName, forkRepoName)
|
||||||
resp = session.MakeRequest(t, req, http.StatusOK)
|
resp = session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
|
||||||
return resp
|
return resp
|
||||||
|
@ -48,5 +55,19 @@ func testRepoFork(t *testing.T, session *TestSession) *TestResponse {
|
||||||
func TestRepoFork(t *testing.T) {
|
func TestRepoFork(t *testing.T) {
|
||||||
prepareTestEnv(t)
|
prepareTestEnv(t)
|
||||||
session := loginUser(t, "user1")
|
session := loginUser(t, "user1")
|
||||||
testRepoFork(t, session)
|
testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRepoForkToOrg(t *testing.T) {
|
||||||
|
prepareTestEnv(t)
|
||||||
|
session := loginUser(t, "user2")
|
||||||
|
testRepoFork(t, session, "user2", "repo1", "user3", "repo1")
|
||||||
|
|
||||||
|
// Check that no more forking is allowed as user2 owns repository
|
||||||
|
// and user3 organization that owner user2 is also now has forked this repository
|
||||||
|
req := NewRequest(t, "GET", "/user2/repo1")
|
||||||
|
resp := session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
htmlDoc := NewHTMLParser(t, resp.Body)
|
||||||
|
_, exists := htmlDoc.doc.Find("a.ui.button[href^=\"/repo/fork/\"]").Attr("href")
|
||||||
|
assert.False(t, exists, "Forking should not be allowed anymore")
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,11 +3,6 @@ RUN_MODE = prod
|
||||||
|
|
||||||
[database]
|
[database]
|
||||||
DB_TYPE = sqlite3
|
DB_TYPE = sqlite3
|
||||||
HOST = 127.0.0.1:3306
|
|
||||||
NAME = testgitea
|
|
||||||
USER = gitea
|
|
||||||
PASSWD =
|
|
||||||
SSL_MODE = disable
|
|
||||||
PATH = :memory:
|
PATH = :memory:
|
||||||
|
|
||||||
[repository]
|
[repository]
|
||||||
|
|
2
main.go
2
main.go
|
@ -17,7 +17,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// Version holds the current Gitea version
|
// Version holds the current Gitea version
|
||||||
var Version = "1.1.0+dev"
|
var Version = "1.2.0-dev"
|
||||||
|
|
||||||
// Tags holds the build tags used
|
// Tags holds the build tags used
|
||||||
var Tags = ""
|
var Tags = ""
|
||||||
|
|
|
@ -713,7 +713,6 @@ type GetFeedsOptions struct {
|
||||||
IncludePrivate bool // include private actions
|
IncludePrivate bool // include private actions
|
||||||
OnlyPerformedBy bool // only actions performed by requested user
|
OnlyPerformedBy bool // only actions performed by requested user
|
||||||
IncludeDeleted bool // include deleted actions
|
IncludeDeleted bool // include deleted actions
|
||||||
Collaborate bool // Include collaborative repositories
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetFeeds returns actions according to the provided options
|
// GetFeeds returns actions according to the provided options
|
||||||
|
@ -733,13 +732,7 @@ func GetFeeds(opts GetFeedsOptions) ([]*Action, error) {
|
||||||
cond = cond.And(builder.In("repo_id", repoIDs))
|
cond = cond.And(builder.In("repo_id", repoIDs))
|
||||||
}
|
}
|
||||||
|
|
||||||
var userIDCond builder.Cond = builder.Eq{"user_id": opts.RequestedUser.ID}
|
cond = cond.And(builder.Eq{"user_id": opts.RequestedUser.ID})
|
||||||
if opts.Collaborate {
|
|
||||||
userIDCond = userIDCond.Or(builder.Expr(
|
|
||||||
"repo_id IN (SELECT repo_id FROM `access` WHERE access.user_id = ?)",
|
|
||||||
opts.RequestedUser.ID))
|
|
||||||
}
|
|
||||||
cond = cond.And(userIDCond)
|
|
||||||
|
|
||||||
if opts.OnlyPerformedBy {
|
if opts.OnlyPerformedBy {
|
||||||
cond = cond.And(builder.Eq{"act_user_id": opts.RequestedUser.ID})
|
cond = cond.And(builder.Eq{"act_user_id": opts.RequestedUser.ID})
|
||||||
|
|
|
@ -20,7 +20,7 @@ type ProtectedBranch struct {
|
||||||
ID int64 `xorm:"pk autoincr"`
|
ID int64 `xorm:"pk autoincr"`
|
||||||
RepoID int64 `xorm:"UNIQUE(s)"`
|
RepoID int64 `xorm:"UNIQUE(s)"`
|
||||||
BranchName string `xorm:"UNIQUE(s)"`
|
BranchName string `xorm:"UNIQUE(s)"`
|
||||||
CanPush bool
|
CanPush bool `xorm:"NOT NULL DEFAULT false"`
|
||||||
Created time.Time `xorm:"-"`
|
Created time.Time `xorm:"-"`
|
||||||
CreatedUnix int64
|
CreatedUnix int64
|
||||||
Updated time.Time `xorm:"-"`
|
Updated time.Time `xorm:"-"`
|
||||||
|
@ -38,6 +38,11 @@ func (protectBranch *ProtectedBranch) BeforeUpdate() {
|
||||||
protectBranch.UpdatedUnix = time.Now().Unix()
|
protectBranch.UpdatedUnix = time.Now().Unix()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsProtected returns if the branch is protected
|
||||||
|
func (protectBranch *ProtectedBranch) IsProtected() bool {
|
||||||
|
return protectBranch.ID > 0
|
||||||
|
}
|
||||||
|
|
||||||
// GetProtectedBranchByRepoID getting protected branch by repo ID
|
// GetProtectedBranchByRepoID getting protected branch by repo ID
|
||||||
func GetProtectedBranchByRepoID(RepoID int64) ([]*ProtectedBranch, error) {
|
func GetProtectedBranchByRepoID(RepoID int64) ([]*ProtectedBranch, error) {
|
||||||
protectedBranches := make([]*ProtectedBranch, 0)
|
protectedBranches := make([]*ProtectedBranch, 0)
|
||||||
|
|
|
@ -4,9 +4,7 @@
|
||||||
|
|
||||||
package models
|
package models
|
||||||
|
|
||||||
import (
|
import "fmt"
|
||||||
"fmt"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ErrNameReserved represents a "reserved name" error.
|
// ErrNameReserved represents a "reserved name" error.
|
||||||
type ErrNameReserved struct {
|
type ErrNameReserved struct {
|
||||||
|
@ -260,19 +258,19 @@ func (err ErrKeyNameAlreadyUsed) Error() string {
|
||||||
return fmt.Sprintf("public key already exists [owner_id: %d, name: %s]", err.OwnerID, err.Name)
|
return fmt.Sprintf("public key already exists [owner_id: %d, name: %s]", err.OwnerID, err.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ErrGPGEmailNotFound represents a "ErrGPGEmailNotFound" kind of error.
|
// ErrGPGNoEmailFound represents a "ErrGPGNoEmailFound" kind of error.
|
||||||
type ErrGPGEmailNotFound struct {
|
type ErrGPGNoEmailFound struct {
|
||||||
Email string
|
FailedEmails []string
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsErrGPGEmailNotFound checks if an error is a ErrGPGEmailNotFound.
|
// IsErrGPGNoEmailFound checks if an error is a ErrGPGNoEmailFound.
|
||||||
func IsErrGPGEmailNotFound(err error) bool {
|
func IsErrGPGNoEmailFound(err error) bool {
|
||||||
_, ok := err.(ErrGPGEmailNotFound)
|
_, ok := err.(ErrGPGNoEmailFound)
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
|
||||||
func (err ErrGPGEmailNotFound) Error() string {
|
func (err ErrGPGNoEmailFound) Error() string {
|
||||||
return fmt.Sprintf("failed to found email or is not confirmed : %s", err.Email)
|
return fmt.Sprintf("none of the emails attached to the GPG key could be found: %v", err.FailedEmails)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ErrGPGKeyParsing represents a "ErrGPGKeyParsing" kind of error.
|
// ErrGPGKeyParsing represents a "ErrGPGKeyParsing" kind of error.
|
||||||
|
|
|
@ -176,3 +176,15 @@
|
||||||
lower_name: repo15
|
lower_name: repo15
|
||||||
name: repo15
|
name: repo15
|
||||||
is_bare: true
|
is_bare: true
|
||||||
|
|
||||||
|
-
|
||||||
|
id: 16
|
||||||
|
owner_id: 2
|
||||||
|
lower_name: repo16
|
||||||
|
name: repo16
|
||||||
|
is_private: true
|
||||||
|
num_issues: 0
|
||||||
|
num_closed_issues: 0
|
||||||
|
num_pulls: 0
|
||||||
|
num_closed_pulls: 0
|
||||||
|
num_watches: 0
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
is_admin: false
|
is_admin: false
|
||||||
avatar: avatar2
|
avatar: avatar2
|
||||||
avatar_email: user2@example.com
|
avatar_email: user2@example.com
|
||||||
num_repos: 3
|
num_repos: 4
|
||||||
num_stars: 2
|
num_stars: 2
|
||||||
num_followers: 2
|
num_followers: 2
|
||||||
num_following: 1
|
num_following: 1
|
||||||
|
|
|
@ -208,21 +208,27 @@ func parseGPGKey(ownerID int64, e *openpgp.Entity) (*GPGKey, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
emails := make([]*EmailAddress, len(e.Identities))
|
|
||||||
n := 0
|
emails := make([]*EmailAddress, 0, len(e.Identities))
|
||||||
for _, ident := range e.Identities {
|
for _, ident := range e.Identities {
|
||||||
email := strings.ToLower(strings.TrimSpace(ident.UserId.Email))
|
email := strings.ToLower(strings.TrimSpace(ident.UserId.Email))
|
||||||
for _, e := range userEmails {
|
for _, e := range userEmails {
|
||||||
if e.Email == email && e.IsActivated {
|
if e.Email == email {
|
||||||
emails[n] = e
|
emails = append(emails, e)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if emails[n] == nil {
|
|
||||||
return nil, ErrGPGEmailNotFound{ident.UserId.Email}
|
|
||||||
}
|
}
|
||||||
n++
|
|
||||||
|
//In the case no email as been found
|
||||||
|
if len(emails) == 0 {
|
||||||
|
failedEmails := make([]string, 0, len(e.Identities))
|
||||||
|
for _, ident := range e.Identities {
|
||||||
|
failedEmails = append(failedEmails, ident.UserId.Email)
|
||||||
}
|
}
|
||||||
|
return nil, ErrGPGNoEmailFound{failedEmails}
|
||||||
|
}
|
||||||
|
|
||||||
content, err := base64EncPubKey(pubkey)
|
content, err := base64EncPubKey(pubkey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -276,11 +282,7 @@ func DeleteGPGKey(doer *User, id int64) (err error) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = sess.Commit(); err != nil {
|
return sess.Commit()
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// CommitVerification represents a commit validation of signature
|
// CommitVerification represents a commit validation of signature
|
||||||
|
@ -380,7 +382,7 @@ func ParseCommitWithSignature(c *git.Commit) *CommitVerification {
|
||||||
}
|
}
|
||||||
|
|
||||||
//Find Committer account
|
//Find Committer account
|
||||||
committer, err := GetUserByEmail(c.Committer.Email)
|
committer, err := GetUserByEmail(c.Committer.Email) //This find the user by primary email or activated email so commit will not be valid if email is not
|
||||||
if err != nil { //Skipping not user for commiter
|
if err != nil { //Skipping not user for commiter
|
||||||
log.Error(3, "NoCommitterAccount: %v", err)
|
log.Error(3, "NoCommitterAccount: %v", err)
|
||||||
return &CommitVerification{
|
return &CommitVerification{
|
||||||
|
@ -399,6 +401,19 @@ func ParseCommitWithSignature(c *git.Commit) *CommitVerification {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, k := range keys {
|
for _, k := range keys {
|
||||||
|
//Pre-check (& optimization) that emails attached to key can be attached to the commiter email and can validate
|
||||||
|
canValidate := false
|
||||||
|
lowerCommiterEmail := strings.ToLower(c.Committer.Email)
|
||||||
|
for _, e := range k.Emails {
|
||||||
|
if e.IsActivated && strings.ToLower(e.Email) == lowerCommiterEmail {
|
||||||
|
canValidate = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !canValidate {
|
||||||
|
continue //Skip this key
|
||||||
|
}
|
||||||
|
|
||||||
//Generating hash of commit
|
//Generating hash of commit
|
||||||
hash, err := populateHash(sig.Hash, []byte(c.Signature.Payload))
|
hash, err := populateHash(sig.Hash, []byte(c.Signature.Payload))
|
||||||
if err != nil { //Skipping ailed to generate hash
|
if err != nil { //Skipping ailed to generate hash
|
||||||
|
|
|
@ -572,11 +572,7 @@ func (issue *Issue) ReadBy(userID int64) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := setNotificationStatusReadIfUnread(x, userID, issue.ID); err != nil {
|
return setNotificationStatusReadIfUnread(x, userID, issue.ID)
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateIssueCols(e Engine, issue *Issue, cols ...string) error {
|
func updateIssueCols(e Engine, issue *Issue, cols ...string) error {
|
||||||
|
|
|
@ -613,6 +613,7 @@ func findComments(e Engine, opts FindCommentsOptions) ([]*Comment, error) {
|
||||||
}
|
}
|
||||||
return comments, sess.
|
return comments, sess.
|
||||||
Asc("comment.created_unix").
|
Asc("comment.created_unix").
|
||||||
|
Asc("comment.id").
|
||||||
Find(&comments)
|
Find(&comments)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -509,10 +509,7 @@ func SMTPAuth(a smtp.Auth, cfg *SMTPConfig) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ok, _ := c.Extension("AUTH"); ok {
|
if ok, _ := c.Extension("AUTH"); ok {
|
||||||
if err = c.Auth(a); err != nil {
|
return c.Auth(a)
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
return ErrUnsupportedLoginType
|
return ErrUnsupportedLoginType
|
||||||
}
|
}
|
||||||
|
|
|
@ -166,7 +166,7 @@ func composeIssueCommentMessage(issue *Issue, doer *User, comment *Comment, tplN
|
||||||
log.Error(3, "Template: %v", err)
|
log.Error(3, "Template: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
msg := mailer.NewMessageFrom(tos, fmt.Sprintf(`"%s" <%s>`, doer.DisplayName(), setting.MailService.FromEmail), subject, content.String())
|
msg := mailer.NewMessageFrom(tos, doer.DisplayName(), setting.MailService.FromEmail, subject, content.String())
|
||||||
msg.Info = fmt.Sprintf("Subject: %s, %s", subject, info)
|
msg.Info = fmt.Sprintf("Subject: %s, %s", subject, info)
|
||||||
return msg
|
return msg
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,6 +126,12 @@ var migrations = []Migration{
|
||||||
NewMigration("unescape user full names", unescapeUserFullNames),
|
NewMigration("unescape user full names", unescapeUserFullNames),
|
||||||
// v38 -> v39
|
// v38 -> v39
|
||||||
NewMigration("remove commits and settings unit types", removeCommitsUnitType),
|
NewMigration("remove commits and settings unit types", removeCommitsUnitType),
|
||||||
|
// v43 -> v44
|
||||||
|
NewMigration("fix protected branch can push value to false", fixProtectedBranchCanPushValue),
|
||||||
|
// v42 -> v43
|
||||||
|
NewMigration("add tags to releases and sync existing repositories", releaseAddColumnIsTagAndSyncTags),
|
||||||
|
// v44 -> v45
|
||||||
|
NewMigration("remove duplicate unit types", removeDuplicateUnitTypes),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Migrate database to current version
|
// Migrate database to current version
|
||||||
|
|
|
@ -10,20 +10,15 @@ import (
|
||||||
"github.com/go-xorm/xorm"
|
"github.com/go-xorm/xorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
// UserV15 describes the added field for User
|
func createAllowCreateOrganizationColumn(x *xorm.Engine) error {
|
||||||
type UserV15 struct {
|
type User struct {
|
||||||
|
KeepEmailPrivate bool
|
||||||
AllowCreateOrganization bool
|
AllowCreateOrganization bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// TableName will be invoked by XORM to customrize the table name
|
if err := x.Sync2(new(User)); err != nil {
|
||||||
func (*UserV15) TableName() string {
|
|
||||||
return "user"
|
|
||||||
}
|
|
||||||
|
|
||||||
func createAllowCreateOrganizationColumn(x *xorm.Engine) error {
|
|
||||||
if err := x.Sync2(new(UserV15)); err != nil {
|
|
||||||
return fmt.Errorf("Sync2: %v", err)
|
return fmt.Errorf("Sync2: %v", err)
|
||||||
} else if _, err = x.Where("type=0").Cols("allow_create_organization").Update(&UserV15{AllowCreateOrganization: true}); err != nil {
|
} else if _, err = x.Where("`type` = 0").Cols("allow_create_organization").Update(&User{AllowCreateOrganization: true}); err != nil {
|
||||||
return fmt.Errorf("set allow_create_organization: %v", err)
|
return fmt.Errorf("set allow_create_organization: %v", err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -13,17 +13,6 @@ import (
|
||||||
"github.com/go-xorm/xorm"
|
"github.com/go-xorm/xorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
// RepoUnit describes all units of a repository
|
|
||||||
type RepoUnit struct {
|
|
||||||
ID int64
|
|
||||||
RepoID int64 `xorm:"INDEX(s)"`
|
|
||||||
Type int `xorm:"INDEX(s)"`
|
|
||||||
Index int
|
|
||||||
Config map[string]string `xorm:"JSON"`
|
|
||||||
CreatedUnix int64 `xorm:"INDEX CREATED"`
|
|
||||||
Created time.Time `xorm:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enumerate all the unit types
|
// Enumerate all the unit types
|
||||||
const (
|
const (
|
||||||
V16UnitTypeCode = iota + 1 // 1 code
|
V16UnitTypeCode = iota + 1 // 1 code
|
||||||
|
@ -37,6 +26,18 @@ const (
|
||||||
V16UnitTypeExternalTracker // 9 ExternalTracker
|
V16UnitTypeExternalTracker // 9 ExternalTracker
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func addUnitsToTables(x *xorm.Engine) error {
|
||||||
|
// RepoUnit describes all units of a repository
|
||||||
|
type RepoUnit struct {
|
||||||
|
ID int64
|
||||||
|
RepoID int64 `xorm:"INDEX(s)"`
|
||||||
|
Type int `xorm:"INDEX(s)"`
|
||||||
|
Index int
|
||||||
|
Config map[string]interface{} `xorm:"JSON"`
|
||||||
|
CreatedUnix int64 `xorm:"INDEX CREATED"`
|
||||||
|
Created time.Time `xorm:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
// Repo describes a repository
|
// Repo describes a repository
|
||||||
type Repo struct {
|
type Repo struct {
|
||||||
ID int64
|
ID int64
|
||||||
|
@ -44,7 +45,6 @@ type Repo struct {
|
||||||
ExternalWikiURL, ExternalTrackerURL, ExternalTrackerFormat, ExternalTrackerStyle string
|
ExternalWikiURL, ExternalTrackerURL, ExternalTrackerFormat, ExternalTrackerStyle string
|
||||||
}
|
}
|
||||||
|
|
||||||
func addUnitsToTables(x *xorm.Engine) error {
|
|
||||||
var repos []Repo
|
var repos []Repo
|
||||||
err := x.Table("repository").Select("*").Find(&repos)
|
err := x.Table("repository").Select("*").Find(&repos)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -95,7 +95,7 @@ func addUnitsToTables(x *xorm.Engine) error {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
var config = make(map[string]string)
|
var config = make(map[string]interface{})
|
||||||
switch i {
|
switch i {
|
||||||
case V16UnitTypeExternalTracker:
|
case V16UnitTypeExternalTracker:
|
||||||
config["ExternalTrackerURL"] = repo.ExternalTrackerURL
|
config["ExternalTrackerURL"] = repo.ExternalTrackerURL
|
||||||
|
@ -119,9 +119,5 @@ func addUnitsToTables(x *xorm.Engine) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := sess.Commit(); err != nil {
|
return sess.Commit()
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,8 +51,5 @@ func useNewPublickeyFormat(x *xorm.Engine) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
f.Close()
|
f.Close()
|
||||||
if err = os.Rename(tmpPath, fpath); err != nil {
|
return os.Rename(tmpPath, fpath)
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,16 +7,19 @@ package migrations
|
||||||
import (
|
import (
|
||||||
"html"
|
"html"
|
||||||
|
|
||||||
"code.gitea.io/gitea/models"
|
|
||||||
|
|
||||||
"github.com/go-xorm/xorm"
|
"github.com/go-xorm/xorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
func unescapeUserFullNames(x *xorm.Engine) (err error) {
|
func unescapeUserFullNames(x *xorm.Engine) (err error) {
|
||||||
|
type User struct {
|
||||||
|
ID int64 `xorm:"pk autoincr"`
|
||||||
|
FullName string
|
||||||
|
}
|
||||||
|
|
||||||
const batchSize = 100
|
const batchSize = 100
|
||||||
for start := 0; ; start += batchSize {
|
for start := 0; ; start += batchSize {
|
||||||
users := make([]*models.User, 0, batchSize)
|
users := make([]*User, 0, batchSize)
|
||||||
if err := x.Limit(start, batchSize).Find(users); err != nil {
|
if err := x.Limit(batchSize, start).Find(&users); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if len(users) == 0 {
|
if len(users) == 0 {
|
||||||
|
@ -24,7 +27,7 @@ func unescapeUserFullNames(x *xorm.Engine) (err error) {
|
||||||
}
|
}
|
||||||
for _, user := range users {
|
for _, user := range users {
|
||||||
user.FullName = html.UnescapeString(user.FullName)
|
user.FullName = html.UnescapeString(user.FullName)
|
||||||
if _, err := x.Cols("full_name").Update(user); err != nil {
|
if _, err := x.ID(user.ID).Cols("full_name").Update(user); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,12 +5,26 @@
|
||||||
package migrations
|
package migrations
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
"code.gitea.io/gitea/models"
|
"code.gitea.io/gitea/models"
|
||||||
|
|
||||||
|
"github.com/go-xorm/core"
|
||||||
"github.com/go-xorm/xorm"
|
"github.com/go-xorm/xorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
func removeCommitsUnitType(x *xorm.Engine) (err error) {
|
func removeCommitsUnitType(x *xorm.Engine) (err error) {
|
||||||
|
// RepoUnit describes all units of a repository
|
||||||
|
type RepoUnit struct {
|
||||||
|
ID int64
|
||||||
|
RepoID int64 `xorm:"INDEX(s)"`
|
||||||
|
Type int `xorm:"INDEX(s)"`
|
||||||
|
Index int
|
||||||
|
Config core.Conversion `xorm:"TEXT"`
|
||||||
|
CreatedUnix int64 `xorm:"INDEX CREATED"`
|
||||||
|
Created time.Time `xorm:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
// Update team unit types
|
// Update team unit types
|
||||||
const batchSize = 100
|
const batchSize = 100
|
||||||
for start := 0; ; start += batchSize {
|
for start := 0; ; start += batchSize {
|
||||||
|
@ -33,7 +47,7 @@ func removeCommitsUnitType(x *xorm.Engine) (err error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
team.UnitTypes = ut
|
team.UnitTypes = ut
|
||||||
if _, err := x.Id(team.ID).Cols("unit_types").Update(team); err != nil {
|
if _, err := x.ID(team.ID).Cols("unit_types").Update(team); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
// Copyright 2017 The Gitea Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package migrations
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"code.gitea.io/git"
|
||||||
|
"code.gitea.io/gitea/models"
|
||||||
|
"code.gitea.io/gitea/modules/log"
|
||||||
|
|
||||||
|
"github.com/go-xorm/xorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ReleaseV39 describes the added field for Release
|
||||||
|
type ReleaseV39 struct {
|
||||||
|
IsTag bool `xorm:"NOT NULL DEFAULT false"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableName will be invoked by XORM to customrize the table name
|
||||||
|
func (*ReleaseV39) TableName() string {
|
||||||
|
return "release"
|
||||||
|
}
|
||||||
|
|
||||||
|
func releaseAddColumnIsTagAndSyncTags(x *xorm.Engine) error {
|
||||||
|
if err := x.Sync2(new(ReleaseV39)); err != nil {
|
||||||
|
return fmt.Errorf("Sync2: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// For the sake of SQLite3, we can't use x.Iterate here.
|
||||||
|
offset := 0
|
||||||
|
pageSize := 20
|
||||||
|
for {
|
||||||
|
repos := make([]*models.Repository, 0, pageSize)
|
||||||
|
if err := x.Table("repository").Asc("id").Limit(pageSize, offset).Find(&repos); err != nil {
|
||||||
|
return fmt.Errorf("select repos [offset: %d]: %v", offset, err)
|
||||||
|
}
|
||||||
|
for _, repo := range repos {
|
||||||
|
gitRepo, err := git.OpenRepository(repo.RepoPath())
|
||||||
|
if err != nil {
|
||||||
|
log.Warn("OpenRepository: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = models.SyncReleasesWithTags(repo, gitRepo); err != nil {
|
||||||
|
log.Warn("SyncReleasesWithTags: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(repos) < pageSize {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
offset += pageSize
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
// Copyright 2017 The Gitea Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package migrations
|
||||||
|
|
||||||
|
import (
|
||||||
|
"code.gitea.io/gitea/models"
|
||||||
|
|
||||||
|
"github.com/go-xorm/xorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
func fixProtectedBranchCanPushValue(x *xorm.Engine) error {
|
||||||
|
_, err := x.Cols("can_push").Update(&models.ProtectedBranch{
|
||||||
|
CanPush: false,
|
||||||
|
})
|
||||||
|
return err
|
||||||
|
}
|
|
@ -0,0 +1,69 @@
|
||||||
|
// Copyright 2017 The Gitea Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package migrations
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/go-xorm/xorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
func removeDuplicateUnitTypes(x *xorm.Engine) error {
|
||||||
|
// RepoUnit describes all units of a repository
|
||||||
|
type RepoUnit struct {
|
||||||
|
RepoID int64
|
||||||
|
Type int
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enumerate all the unit types
|
||||||
|
const (
|
||||||
|
UnitTypeCode = iota + 1 // 1 code
|
||||||
|
UnitTypeIssues // 2 issues
|
||||||
|
UnitTypePullRequests // 3 PRs
|
||||||
|
UnitTypeReleases // 4 Releases
|
||||||
|
UnitTypeWiki // 5 Wiki
|
||||||
|
UnitTypeExternalWiki // 6 ExternalWiki
|
||||||
|
UnitTypeExternalTracker // 7 ExternalTracker
|
||||||
|
)
|
||||||
|
|
||||||
|
var externalIssueRepoUnits []RepoUnit
|
||||||
|
err := x.Where("type = ?", UnitTypeExternalTracker).Find(&externalIssueRepoUnits)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Query repositories: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var externalWikiRepoUnits []RepoUnit
|
||||||
|
err = x.Where("type = ?", UnitTypeExternalWiki).Find(&externalWikiRepoUnits)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Query repositories: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sess := x.NewSession()
|
||||||
|
defer sess.Close()
|
||||||
|
|
||||||
|
if err := sess.Begin(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, repoUnit := range externalIssueRepoUnits {
|
||||||
|
if _, err = sess.Delete(&RepoUnit{
|
||||||
|
RepoID: repoUnit.RepoID,
|
||||||
|
Type: UnitTypeIssues,
|
||||||
|
}); err != nil {
|
||||||
|
return fmt.Errorf("Delete repo unit: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, repoUnit := range externalWikiRepoUnits {
|
||||||
|
if _, err = sess.Delete(&RepoUnit{
|
||||||
|
RepoID: repoUnit.RepoID,
|
||||||
|
Type: UnitTypeWiki,
|
||||||
|
}); err != nil {
|
||||||
|
return fmt.Errorf("Delete repo unit: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sess.Commit()
|
||||||
|
}
|
|
@ -235,11 +235,7 @@ func DeleteOrganization(org *User) (err error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = sess.Commit(); err != nil {
|
return sess.Commit()
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func deleteOrg(e *xorm.Session, u *User) error {
|
func deleteOrg(e *xorm.Session, u *User) error {
|
||||||
|
@ -675,7 +671,7 @@ func (env *accessibleReposEnv) MirrorRepoIDs() ([]int64, error) {
|
||||||
Table("repository").
|
Table("repository").
|
||||||
Join("INNER", "team_repo", "`team_repo`.repo_id=`repository`.id AND `repository`.is_mirror=?", true).
|
Join("INNER", "team_repo", "`team_repo`.repo_id=`repository`.id AND `repository`.is_mirror=?", true).
|
||||||
Where(env.cond()).
|
Where(env.cond()).
|
||||||
GroupBy("`repository`.id").
|
GroupBy("`repository`.id, `repository`.updated_unix").
|
||||||
OrderBy("updated_unix DESC").
|
OrderBy("updated_unix DESC").
|
||||||
Cols("`repository`.id").
|
Cols("`repository`.id").
|
||||||
Find(&repoIDs)
|
Find(&repoIDs)
|
||||||
|
|
|
@ -34,7 +34,8 @@ type Release struct {
|
||||||
NumCommitsBehind int64 `xorm:"-"`
|
NumCommitsBehind int64 `xorm:"-"`
|
||||||
Note string `xorm:"TEXT"`
|
Note string `xorm:"TEXT"`
|
||||||
IsDraft bool `xorm:"NOT NULL DEFAULT false"`
|
IsDraft bool `xorm:"NOT NULL DEFAULT false"`
|
||||||
IsPrerelease bool
|
IsPrerelease bool `xorm:"NOT NULL DEFAULT false"`
|
||||||
|
IsTag bool `xorm:"NOT NULL DEFAULT false"`
|
||||||
|
|
||||||
Attachments []*Attachment `xorm:"-"`
|
Attachments []*Attachment `xorm:"-"`
|
||||||
|
|
||||||
|
@ -139,19 +140,20 @@ func createTag(gitRepo *git.Repository, rel *Release) error {
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
rel.LowerTagName = strings.ToLower(rel.TagName)
|
||||||
|
}
|
||||||
commit, err := gitRepo.GetTagCommit(rel.TagName)
|
commit, err := gitRepo.GetTagCommit(rel.TagName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("GetTagCommit: %v", err)
|
return fmt.Errorf("GetTagCommit: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
rel.Sha1 = commit.ID.String()
|
rel.Sha1 = commit.ID.String()
|
||||||
|
rel.CreatedUnix = commit.Author.When.Unix()
|
||||||
rel.NumCommits, err = commit.CommitsCount()
|
rel.NumCommits, err = commit.CommitsCount()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("CommitsCount: %v", err)
|
return fmt.Errorf("CommitsCount: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -236,6 +238,7 @@ func GetReleaseByID(id int64) (*Release, error) {
|
||||||
// FindReleasesOptions describes the conditions to Find releases
|
// FindReleasesOptions describes the conditions to Find releases
|
||||||
type FindReleasesOptions struct {
|
type FindReleasesOptions struct {
|
||||||
IncludeDrafts bool
|
IncludeDrafts bool
|
||||||
|
IncludeTags bool
|
||||||
TagNames []string
|
TagNames []string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -246,6 +249,9 @@ func (opts *FindReleasesOptions) toConds(repoID int64) builder.Cond {
|
||||||
if !opts.IncludeDrafts {
|
if !opts.IncludeDrafts {
|
||||||
cond = cond.And(builder.Eq{"is_draft": false})
|
cond = cond.And(builder.Eq{"is_draft": false})
|
||||||
}
|
}
|
||||||
|
if !opts.IncludeTags {
|
||||||
|
cond = cond.And(builder.Eq{"is_tag": false})
|
||||||
|
}
|
||||||
if len(opts.TagNames) > 0 {
|
if len(opts.TagNames) > 0 {
|
||||||
cond = cond.And(builder.In("tag_name", opts.TagNames))
|
cond = cond.And(builder.In("tag_name", opts.TagNames))
|
||||||
}
|
}
|
||||||
|
@ -361,6 +367,8 @@ func UpdateRelease(gitRepo *git.Repository, rel *Release, attachmentUUIDs []stri
|
||||||
if err = createTag(gitRepo, rel); err != nil {
|
if err = createTag(gitRepo, rel); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
rel.LowerTagName = strings.ToLower(rel.TagName)
|
||||||
|
|
||||||
_, err = x.Id(rel.ID).AllCols().Update(rel)
|
_, err = x.Id(rel.ID).AllCols().Update(rel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -397,11 +405,64 @@ func DeleteReleaseByID(id int64, u *User, delTag bool) error {
|
||||||
if err != nil && !strings.Contains(stderr, "not found") {
|
if err != nil && !strings.Contains(stderr, "not found") {
|
||||||
return fmt.Errorf("git tag -d: %v - %s", err, stderr)
|
return fmt.Errorf("git tag -d: %v - %s", err, stderr)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if _, err = x.Id(rel.ID).Delete(new(Release)); err != nil {
|
if _, err = x.Id(rel.ID).Delete(new(Release)); err != nil {
|
||||||
return fmt.Errorf("Delete: %v", err)
|
return fmt.Errorf("Delete: %v", err)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
rel.IsTag = true
|
||||||
|
rel.IsDraft = false
|
||||||
|
rel.IsPrerelease = false
|
||||||
|
rel.Title = ""
|
||||||
|
rel.Note = ""
|
||||||
|
|
||||||
|
if _, err = x.Id(rel.ID).AllCols().Update(rel); err != nil {
|
||||||
|
return fmt.Errorf("Update: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SyncReleasesWithTags synchronizes release table with repository tags
|
||||||
|
func SyncReleasesWithTags(repo *Repository, gitRepo *git.Repository) error {
|
||||||
|
existingRelTags := make(map[string]struct{})
|
||||||
|
opts := FindReleasesOptions{IncludeDrafts: true, IncludeTags: true}
|
||||||
|
for page := 1; ; page++ {
|
||||||
|
rels, err := GetReleasesByRepoID(repo.ID, opts, page, 100)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("GetReleasesByRepoID: %v", err)
|
||||||
|
}
|
||||||
|
if len(rels) == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
for _, rel := range rels {
|
||||||
|
if rel.IsDraft {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
commitID, err := gitRepo.GetTagCommitID(rel.TagName)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("GetTagCommitID: %v", err)
|
||||||
|
}
|
||||||
|
if !gitRepo.IsTagExist(rel.TagName) || commitID != rel.Sha1 {
|
||||||
|
if err := pushUpdateDeleteTag(repo, gitRepo, rel.TagName); err != nil {
|
||||||
|
return fmt.Errorf("pushUpdateDeleteTag: %v", err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
existingRelTags[strings.ToLower(rel.TagName)] = struct{}{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tags, err := gitRepo.GetTags()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("GetTags: %v", err)
|
||||||
|
}
|
||||||
|
for _, tagName := range tags {
|
||||||
|
if _, ok := existingRelTags[strings.ToLower(tagName)]; !ok {
|
||||||
|
if err := pushUpdateAddTag(repo, gitRepo, tagName); err != nil {
|
||||||
|
return fmt.Errorf("pushUpdateAddTag: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -193,7 +193,7 @@ type Repository struct {
|
||||||
NumMilestones int `xorm:"NOT NULL DEFAULT 0"`
|
NumMilestones int `xorm:"NOT NULL DEFAULT 0"`
|
||||||
NumClosedMilestones int `xorm:"NOT NULL DEFAULT 0"`
|
NumClosedMilestones int `xorm:"NOT NULL DEFAULT 0"`
|
||||||
NumOpenMilestones int `xorm:"-"`
|
NumOpenMilestones int `xorm:"-"`
|
||||||
NumTags int `xorm:"-"`
|
NumReleases int `xorm:"-"`
|
||||||
|
|
||||||
IsPrivate bool `xorm:"INDEX"`
|
IsPrivate bool `xorm:"INDEX"`
|
||||||
IsBare bool `xorm:"INDEX"`
|
IsBare bool `xorm:"INDEX"`
|
||||||
|
@ -409,6 +409,21 @@ func (repo *Repository) UnitEnabled(tp UnitType) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AnyUnitEnabled if this repository has the any of the given units enabled
|
||||||
|
func (repo *Repository) AnyUnitEnabled(tps ...UnitType) bool {
|
||||||
|
if err := repo.getUnits(x); err != nil {
|
||||||
|
log.Warn("Error loading repository (ID: %d) units: %s", repo.ID, err.Error())
|
||||||
|
}
|
||||||
|
for _, unit := range repo.Units {
|
||||||
|
for _, tp := range tps {
|
||||||
|
if unit.Type == tp {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// ErrUnitNotExist organization does not exist
|
// ErrUnitNotExist organization does not exist
|
||||||
ErrUnitNotExist = errors.New("Unit does not exist")
|
ErrUnitNotExist = errors.New("Unit does not exist")
|
||||||
|
@ -648,7 +663,26 @@ func (repo *Repository) UpdateSize() error {
|
||||||
|
|
||||||
// CanBeForked returns true if repository meets the requirements of being forked.
|
// CanBeForked returns true if repository meets the requirements of being forked.
|
||||||
func (repo *Repository) CanBeForked() bool {
|
func (repo *Repository) CanBeForked() bool {
|
||||||
return !repo.IsBare
|
return !repo.IsBare && repo.UnitEnabled(UnitTypeCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CanUserFork returns true if specified user can fork repository.
|
||||||
|
func (repo *Repository) CanUserFork(user *User) (bool, error) {
|
||||||
|
if user == nil {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
if repo.OwnerID != user.ID && !user.HasForkedRepo(repo.ID) {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
if err := user.GetOwnedOrganizations(); err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
for _, org := range user.OwnedOrgs {
|
||||||
|
if repo.OwnerID != org.ID && !org.HasForkedRepo(repo.ID) {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// CanEnablePulls returns true if repository meets the requirements of accepting pulls.
|
// CanEnablePulls returns true if repository meets the requirements of accepting pulls.
|
||||||
|
@ -912,6 +946,10 @@ func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) {
|
||||||
if headBranch != nil {
|
if headBranch != nil {
|
||||||
repo.DefaultBranch = headBranch.Name
|
repo.DefaultBranch = headBranch.Name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err = SyncReleasesWithTags(repo, gitRepo); err != nil {
|
||||||
|
log.Error(4, "Failed to synchronize tags to releases for repository: %v", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = repo.UpdateSize(); err != nil {
|
if err = repo.UpdateSize(); err != nil {
|
||||||
|
|
|
@ -120,10 +120,12 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
|
||||||
opts.Page = 1
|
opts.Page = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var starJoin bool
|
||||||
if opts.Starred && opts.OwnerID > 0 {
|
if opts.Starred && opts.OwnerID > 0 {
|
||||||
cond = builder.Eq{
|
cond = builder.Eq{
|
||||||
"star.uid": opts.OwnerID,
|
"star.uid": opts.OwnerID,
|
||||||
}
|
}
|
||||||
|
starJoin = true
|
||||||
}
|
}
|
||||||
|
|
||||||
opts.Keyword = strings.ToLower(opts.Keyword)
|
opts.Keyword = strings.ToLower(opts.Keyword)
|
||||||
|
@ -133,12 +135,7 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
|
||||||
|
|
||||||
// Append conditions
|
// Append conditions
|
||||||
if !opts.Starred && opts.OwnerID > 0 {
|
if !opts.Starred && opts.OwnerID > 0 {
|
||||||
cond = cond.And(builder.Eq{"owner_id": opts.OwnerID})
|
var searcherReposCond builder.Cond = builder.Eq{"owner_id": opts.OwnerID}
|
||||||
}
|
|
||||||
if !opts.Private {
|
|
||||||
cond = cond.And(builder.Eq{"is_private": false})
|
|
||||||
}
|
|
||||||
|
|
||||||
if opts.Searcher != nil {
|
if opts.Searcher != nil {
|
||||||
var ownerIds []int64
|
var ownerIds []int64
|
||||||
|
|
||||||
|
@ -153,14 +150,19 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
|
||||||
ownerIds = append(ownerIds, org.ID)
|
ownerIds = append(ownerIds, org.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
searcherReposCond := builder.In("owner_id", ownerIds)
|
searcherReposCond = searcherReposCond.Or(builder.In("owner_id", ownerIds))
|
||||||
if opts.Collaborate {
|
if opts.Collaborate {
|
||||||
searcherReposCond = searcherReposCond.Or(builder.Expr(`id IN (SELECT repo_id FROM "access" WHERE access.user_id = ? AND owner_id != ?)`,
|
searcherReposCond = searcherReposCond.Or(builder.Expr("id IN (SELECT repo_id FROM `access` WHERE access.user_id = ? AND owner_id != ?)",
|
||||||
opts.Searcher.ID, opts.Searcher.ID))
|
opts.Searcher.ID, opts.Searcher.ID))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
cond = cond.And(searcherReposCond)
|
cond = cond.And(searcherReposCond)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !opts.Private {
|
||||||
|
cond = cond.And(builder.Eq{"is_private": false})
|
||||||
|
}
|
||||||
|
|
||||||
if len(opts.OrderBy) == 0 {
|
if len(opts.OrderBy) == 0 {
|
||||||
opts.OrderBy = "name ASC"
|
opts.OrderBy = "name ASC"
|
||||||
}
|
}
|
||||||
|
@ -168,7 +170,7 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
|
||||||
sess := x.NewSession()
|
sess := x.NewSession()
|
||||||
defer sess.Close()
|
defer sess.Close()
|
||||||
|
|
||||||
if opts.Starred && opts.OwnerID > 0 {
|
if starJoin {
|
||||||
count, err = sess.
|
count, err = sess.
|
||||||
Join("INNER", "star", "star.repo_id = repository.id").
|
Join("INNER", "star", "star.repo_id = repository.id").
|
||||||
Where(cond).
|
Where(cond).
|
||||||
|
|
|
@ -13,6 +13,7 @@ import (
|
||||||
"github.com/go-xorm/xorm"
|
"github.com/go-xorm/xorm"
|
||||||
"gopkg.in/ini.v1"
|
"gopkg.in/ini.v1"
|
||||||
|
|
||||||
|
"code.gitea.io/git"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/process"
|
"code.gitea.io/gitea/modules/process"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
@ -148,6 +149,15 @@ func (m *Mirror) runSync() bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gitRepo, err := git.OpenRepository(repoPath)
|
||||||
|
if err != nil {
|
||||||
|
log.Error(4, "OpenRepository: %v", err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if err = SyncReleasesWithTags(m.Repo, gitRepo); err != nil {
|
||||||
|
log.Error(4, "Failed to synchronize tags to releases for repository: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
if err := m.Repo.UpdateSize(); err != nil {
|
if err := m.Repo.UpdateSize(); err != nil {
|
||||||
log.Error(4, "Failed to update size for mirror repository: %v", err)
|
log.Error(4, "Failed to update size for mirror repository: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -609,11 +609,7 @@ func RewriteAllPublicKeys() error {
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = os.Rename(tmpPath, fPath); err != nil {
|
return os.Rename(tmpPath, fPath)
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ________ .__ ____ __.
|
// ________ .__ ____ __.
|
||||||
|
|
123
models/update.go
123
models/update.go
|
@ -9,6 +9,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"code.gitea.io/git"
|
"code.gitea.io/git"
|
||||||
|
|
||||||
|
@ -81,6 +82,108 @@ func PushUpdate(branch string, opt PushUpdateOptions) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func pushUpdateDeleteTag(repo *Repository, gitRepo *git.Repository, tagName string) error {
|
||||||
|
rel, err := GetRelease(repo.ID, tagName)
|
||||||
|
if err != nil {
|
||||||
|
if IsErrReleaseNotExist(err) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return fmt.Errorf("GetRelease: %v", err)
|
||||||
|
}
|
||||||
|
if rel.IsTag {
|
||||||
|
if _, err = x.Id(rel.ID).Delete(new(Release)); err != nil {
|
||||||
|
return fmt.Errorf("Delete: %v", err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
rel.IsDraft = true
|
||||||
|
rel.NumCommits = 0
|
||||||
|
rel.Sha1 = ""
|
||||||
|
if _, err = x.Id(rel.ID).AllCols().Update(rel); err != nil {
|
||||||
|
return fmt.Errorf("Update: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func pushUpdateAddTag(repo *Repository, gitRepo *git.Repository, tagName string) error {
|
||||||
|
rel, err := GetRelease(repo.ID, tagName)
|
||||||
|
if err != nil && !IsErrReleaseNotExist(err) {
|
||||||
|
return fmt.Errorf("GetRelease: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
tag, err := gitRepo.GetTag(tagName)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("GetTag: %v", err)
|
||||||
|
}
|
||||||
|
commit, err := tag.Commit()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Commit: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sig := tag.Tagger
|
||||||
|
if sig == nil {
|
||||||
|
sig = commit.Author
|
||||||
|
}
|
||||||
|
if sig == nil {
|
||||||
|
sig = commit.Committer
|
||||||
|
}
|
||||||
|
|
||||||
|
var author *User
|
||||||
|
var createdAt = time.Unix(1, 0)
|
||||||
|
|
||||||
|
if sig != nil {
|
||||||
|
author, err = GetUserByEmail(sig.Email)
|
||||||
|
if err != nil && !IsErrUserNotExist(err) {
|
||||||
|
return fmt.Errorf("GetUserByEmail: %v", err)
|
||||||
|
}
|
||||||
|
createdAt = sig.When
|
||||||
|
}
|
||||||
|
|
||||||
|
commitsCount, err := commit.CommitsCount()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("CommitsCount: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if rel == nil {
|
||||||
|
rel = &Release{
|
||||||
|
RepoID: repo.ID,
|
||||||
|
Title: "",
|
||||||
|
TagName: tagName,
|
||||||
|
LowerTagName: strings.ToLower(tagName),
|
||||||
|
Target: "",
|
||||||
|
Sha1: commit.ID.String(),
|
||||||
|
NumCommits: commitsCount,
|
||||||
|
Note: "",
|
||||||
|
IsDraft: false,
|
||||||
|
IsPrerelease: false,
|
||||||
|
IsTag: true,
|
||||||
|
Created: createdAt,
|
||||||
|
CreatedUnix: createdAt.Unix(),
|
||||||
|
}
|
||||||
|
if author != nil {
|
||||||
|
rel.PublisherID = author.ID
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err = x.InsertOne(rel); err != nil {
|
||||||
|
return fmt.Errorf("InsertOne: %v", err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
rel.Sha1 = commit.ID.String()
|
||||||
|
rel.Created = createdAt
|
||||||
|
rel.CreatedUnix = createdAt.Unix()
|
||||||
|
rel.NumCommits = commitsCount
|
||||||
|
rel.IsDraft = false
|
||||||
|
if rel.IsTag && author != nil {
|
||||||
|
rel.PublisherID = author.ID
|
||||||
|
}
|
||||||
|
if _, err = x.Id(rel.ID).AllCols().Update(rel); err != nil {
|
||||||
|
return fmt.Errorf("Update: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func pushUpdate(opts PushUpdateOptions) (repo *Repository, err error) {
|
func pushUpdate(opts PushUpdateOptions) (repo *Repository, err error) {
|
||||||
isNewRef := opts.OldCommitID == git.EmptySHA
|
isNewRef := opts.OldCommitID == git.EmptySHA
|
||||||
isDelRef := opts.NewCommitID == git.EmptySHA
|
isDelRef := opts.NewCommitID == git.EmptySHA
|
||||||
|
@ -106,23 +209,31 @@ func pushUpdate(opts PushUpdateOptions) (repo *Repository, err error) {
|
||||||
return nil, fmt.Errorf("GetRepositoryByName: %v", err)
|
return nil, fmt.Errorf("GetRepositoryByName: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if isDelRef {
|
|
||||||
log.GitLogger.Info("Reference '%s' has been deleted from '%s/%s' by %s",
|
|
||||||
opts.RefFullName, opts.RepoUserName, opts.RepoName, opts.PusherName)
|
|
||||||
return repo, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
gitRepo, err := git.OpenRepository(repoPath)
|
gitRepo, err := git.OpenRepository(repoPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("OpenRepository: %v", err)
|
return nil, fmt.Errorf("OpenRepository: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if isDelRef {
|
||||||
|
// Tag has been deleted
|
||||||
|
if strings.HasPrefix(opts.RefFullName, git.TagPrefix) {
|
||||||
|
err = pushUpdateDeleteTag(repo, gitRepo, opts.RefFullName[len(git.TagPrefix):])
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("pushUpdateDeleteTag: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.GitLogger.Info("Reference '%s' has been deleted from '%s/%s' by %s",
|
||||||
|
opts.RefFullName, opts.RepoUserName, opts.RepoName, opts.PusherName)
|
||||||
|
return repo, nil
|
||||||
|
}
|
||||||
|
|
||||||
if err = repo.UpdateSize(); err != nil {
|
if err = repo.UpdateSize(); err != nil {
|
||||||
log.Error(4, "Failed to update size for repository: %v", err)
|
log.Error(4, "Failed to update size for repository: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Push tags.
|
// Push tags.
|
||||||
if strings.HasPrefix(opts.RefFullName, git.TagPrefix) {
|
if strings.HasPrefix(opts.RefFullName, git.TagPrefix) {
|
||||||
|
pushUpdateAddTag(repo, gitRepo, opts.RefFullName[len(git.TagPrefix):])
|
||||||
if err := CommitRepoAction(CommitRepoActionOptions{
|
if err := CommitRepoAction(CommitRepoActionOptions{
|
||||||
PusherName: opts.PusherName,
|
PusherName: opts.PusherName,
|
||||||
RepoOwnerID: owner.ID,
|
RepoOwnerID: owner.ID,
|
||||||
|
|
|
@ -1205,6 +1205,9 @@ type UserCommit struct {
|
||||||
|
|
||||||
// ValidateCommitWithEmail check if author's e-mail of commit is corresponding to a user.
|
// ValidateCommitWithEmail check if author's e-mail of commit is corresponding to a user.
|
||||||
func ValidateCommitWithEmail(c *git.Commit) *User {
|
func ValidateCommitWithEmail(c *git.Commit) *User {
|
||||||
|
if c.Author == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
u, err := GetUserByEmail(c.Author.Email)
|
u, err := GetUserByEmail(c.Author.Email)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil
|
return nil
|
||||||
|
@ -1223,12 +1226,16 @@ func ValidateCommitsWithEmails(oldCommits *list.List) *list.List {
|
||||||
for e != nil {
|
for e != nil {
|
||||||
c := e.Value.(*git.Commit)
|
c := e.Value.(*git.Commit)
|
||||||
|
|
||||||
|
if c.Author != nil {
|
||||||
if v, ok := emails[c.Author.Email]; !ok {
|
if v, ok := emails[c.Author.Email]; !ok {
|
||||||
u, _ = GetUserByEmail(c.Author.Email)
|
u, _ = GetUserByEmail(c.Author.Email)
|
||||||
emails[c.Author.Email] = u
|
emails[c.Author.Email] = u
|
||||||
} else {
|
} else {
|
||||||
u = v
|
u = v
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
u = nil
|
||||||
|
}
|
||||||
|
|
||||||
newCommits.PushBack(UserCommit{
|
newCommits.PushBack(UserCommit{
|
||||||
User: u,
|
User: u,
|
||||||
|
|
|
@ -194,7 +194,7 @@ func Contexter() macaron.Handler {
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
`, map[string]string{
|
`, map[string]string{
|
||||||
"GoGetImport": path.Join(setting.Domain, setting.AppSubURL, ctx.Link),
|
"GoGetImport": ComposeGoGetImport(ownerName, strings.TrimSuffix(repoName, ".git")),
|
||||||
"CloneLink": models.ComposeHTTPSCloneURL(ownerName, repoName),
|
"CloneLink": models.ComposeHTTPSCloneURL(ownerName, repoName),
|
||||||
"GoDocDirectory": prefix + "{/dir}",
|
"GoDocDirectory": prefix + "{/dir}",
|
||||||
"GoDocFile": prefix + "{/dir}/{file}#L{line}",
|
"GoDocFile": prefix + "{/dir}/{file}#L{line}",
|
||||||
|
|
|
@ -124,21 +124,23 @@ func RetrieveBaseRepo(ctx *Context, repo *models.Repository) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// composeGoGetImport returns go-get-import meta content.
|
// ComposeGoGetImport returns go-get-import meta content.
|
||||||
func composeGoGetImport(owner, repo string) string {
|
func ComposeGoGetImport(owner, repo string) string {
|
||||||
return path.Join(setting.Domain, setting.AppSubURL, owner, repo)
|
return path.Join(setting.Domain, setting.AppSubURL, owner, repo)
|
||||||
}
|
}
|
||||||
|
|
||||||
// earlyResponseForGoGetMeta responses appropriate go-get meta with status 200
|
// EarlyResponseForGoGetMeta responses appropriate go-get meta with status 200
|
||||||
// if user does not have actual access to the requested repository,
|
// if user does not have actual access to the requested repository,
|
||||||
// or the owner or repository does not exist at all.
|
// or the owner or repository does not exist at all.
|
||||||
// This is particular a workaround for "go get" command which does not respect
|
// This is particular a workaround for "go get" command which does not respect
|
||||||
// .netrc file.
|
// .netrc file.
|
||||||
func earlyResponseForGoGetMeta(ctx *Context) {
|
func EarlyResponseForGoGetMeta(ctx *Context) {
|
||||||
|
username := ctx.Params(":username")
|
||||||
|
reponame := ctx.Params(":reponame")
|
||||||
ctx.PlainText(200, []byte(com.Expand(`<meta name="go-import" content="{GoGetImport} git {CloneLink}">`,
|
ctx.PlainText(200, []byte(com.Expand(`<meta name="go-import" content="{GoGetImport} git {CloneLink}">`,
|
||||||
map[string]string{
|
map[string]string{
|
||||||
"GoGetImport": composeGoGetImport(ctx.Params(":username"), strings.TrimSuffix(ctx.Params(":reponame"), ".git")),
|
"GoGetImport": ComposeGoGetImport(username, strings.TrimSuffix(reponame, ".git")),
|
||||||
"CloneLink": models.ComposeHTTPSCloneURL(ctx.Params(":username"), ctx.Params(":reponame")),
|
"CloneLink": models.ComposeHTTPSCloneURL(username, reponame),
|
||||||
})))
|
})))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,6 +164,75 @@ func RedirectToRepo(ctx *Context, redirectRepoID int64) {
|
||||||
ctx.Redirect(redirectPath)
|
ctx.Redirect(redirectPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RepoIDAssignment returns an macaron handler which assigns the repo to the context.
|
||||||
|
func RepoIDAssignment() macaron.Handler {
|
||||||
|
return func(ctx *Context) {
|
||||||
|
var (
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
|
||||||
|
repoID := ctx.ParamsInt64(":repoid")
|
||||||
|
|
||||||
|
// Get repository.
|
||||||
|
repo, err := models.GetRepositoryByID(repoID)
|
||||||
|
if err != nil {
|
||||||
|
if models.IsErrRepoNotExist(err) {
|
||||||
|
ctx.Handle(404, "GetRepositoryByID", nil)
|
||||||
|
} else {
|
||||||
|
ctx.Handle(500, "GetRepositoryByID", err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = repo.GetOwner(); err != nil {
|
||||||
|
ctx.Handle(500, "GetOwner", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Admin has super access.
|
||||||
|
if ctx.IsSigned && ctx.User.IsAdmin {
|
||||||
|
ctx.Repo.AccessMode = models.AccessModeOwner
|
||||||
|
} else {
|
||||||
|
var userID int64
|
||||||
|
if ctx.User != nil {
|
||||||
|
userID = ctx.User.ID
|
||||||
|
}
|
||||||
|
mode, err := models.AccessLevel(userID, repo)
|
||||||
|
if err != nil {
|
||||||
|
ctx.Handle(500, "AccessLevel", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ctx.Repo.AccessMode = mode
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check access.
|
||||||
|
if ctx.Repo.AccessMode == models.AccessModeNone {
|
||||||
|
if ctx.Query("go-get") == "1" {
|
||||||
|
EarlyResponseForGoGetMeta(ctx)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ctx.Handle(404, "no access right", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ctx.Data["HasAccess"] = true
|
||||||
|
|
||||||
|
if repo.IsMirror {
|
||||||
|
ctx.Repo.Mirror, err = models.GetMirrorByRepoID(repo.ID)
|
||||||
|
if err != nil {
|
||||||
|
ctx.Handle(500, "GetMirror", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ctx.Data["MirrorEnablePrune"] = ctx.Repo.Mirror.EnablePrune
|
||||||
|
ctx.Data["MirrorInterval"] = ctx.Repo.Mirror.Interval
|
||||||
|
ctx.Data["Mirror"] = ctx.Repo.Mirror
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.Repo.Repository = repo
|
||||||
|
ctx.Data["RepoName"] = ctx.Repo.Repository.Name
|
||||||
|
ctx.Data["IsBareRepo"] = ctx.Repo.Repository.IsBare
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// RepoAssignment returns a macaron to handle repository assignment
|
// RepoAssignment returns a macaron to handle repository assignment
|
||||||
func RepoAssignment() macaron.Handler {
|
func RepoAssignment() macaron.Handler {
|
||||||
return func(ctx *Context) {
|
return func(ctx *Context) {
|
||||||
|
@ -181,7 +252,7 @@ func RepoAssignment() macaron.Handler {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if models.IsErrUserNotExist(err) {
|
if models.IsErrUserNotExist(err) {
|
||||||
if ctx.Query("go-get") == "1" {
|
if ctx.Query("go-get") == "1" {
|
||||||
earlyResponseForGoGetMeta(ctx)
|
EarlyResponseForGoGetMeta(ctx)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.Handle(404, "GetUserByName", nil)
|
ctx.Handle(404, "GetUserByName", nil)
|
||||||
|
@ -203,7 +274,7 @@ func RepoAssignment() macaron.Handler {
|
||||||
RedirectToRepo(ctx, redirectRepoID)
|
RedirectToRepo(ctx, redirectRepoID)
|
||||||
} else if models.IsErrRepoRedirectNotExist(err) {
|
} else if models.IsErrRepoRedirectNotExist(err) {
|
||||||
if ctx.Query("go-get") == "1" {
|
if ctx.Query("go-get") == "1" {
|
||||||
earlyResponseForGoGetMeta(ctx)
|
EarlyResponseForGoGetMeta(ctx)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.Handle(404, "GetRepositoryByName", nil)
|
ctx.Handle(404, "GetRepositoryByName", nil)
|
||||||
|
@ -236,7 +307,7 @@ func RepoAssignment() macaron.Handler {
|
||||||
// Check access.
|
// Check access.
|
||||||
if ctx.Repo.AccessMode == models.AccessModeNone {
|
if ctx.Repo.AccessMode == models.AccessModeNone {
|
||||||
if ctx.Query("go-get") == "1" {
|
if ctx.Query("go-get") == "1" {
|
||||||
earlyResponseForGoGetMeta(ctx)
|
EarlyResponseForGoGetMeta(ctx)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.Handle(404, "no access right", err)
|
ctx.Handle(404, "no access right", err)
|
||||||
|
@ -275,7 +346,16 @@ func RepoAssignment() macaron.Handler {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.Data["Tags"] = tags
|
ctx.Data["Tags"] = tags
|
||||||
ctx.Repo.Repository.NumTags = len(tags)
|
|
||||||
|
count, err := models.GetReleaseCountByRepoID(ctx.Repo.Repository.ID, models.FindReleasesOptions{
|
||||||
|
IncludeDrafts: false,
|
||||||
|
IncludeTags: true,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
ctx.Handle(500, "GetReleaseCountByRepoID", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ctx.Repo.Repository.NumReleases = int(count)
|
||||||
|
|
||||||
ctx.Data["Title"] = owner.Name + "/" + repo.Name
|
ctx.Data["Title"] = owner.Name + "/" + repo.Name
|
||||||
ctx.Data["Repository"] = repo
|
ctx.Data["Repository"] = repo
|
||||||
|
@ -284,6 +364,11 @@ func RepoAssignment() macaron.Handler {
|
||||||
ctx.Data["IsRepositoryAdmin"] = ctx.Repo.IsAdmin()
|
ctx.Data["IsRepositoryAdmin"] = ctx.Repo.IsAdmin()
|
||||||
ctx.Data["IsRepositoryWriter"] = ctx.Repo.IsWriter()
|
ctx.Data["IsRepositoryWriter"] = ctx.Repo.IsWriter()
|
||||||
|
|
||||||
|
if ctx.Data["CanSignedUserFork"], err = ctx.Repo.Repository.CanUserFork(ctx.User); err != nil {
|
||||||
|
ctx.Handle(500, "CanUserFork", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
ctx.Data["DisableSSH"] = setting.SSH.Disabled
|
ctx.Data["DisableSSH"] = setting.SSH.Disabled
|
||||||
ctx.Data["ExposeAnonSSH"] = setting.SSH.ExposeAnonymous
|
ctx.Data["ExposeAnonSSH"] = setting.SSH.ExposeAnonymous
|
||||||
ctx.Data["DisableHTTP"] = setting.Repository.DisableHTTPGit
|
ctx.Data["DisableHTTP"] = setting.Repository.DisableHTTPGit
|
||||||
|
@ -355,7 +440,7 @@ func RepoAssignment() macaron.Handler {
|
||||||
ctx.Data["PullRequestCtx"] = ctx.Repo.PullRequest
|
ctx.Data["PullRequestCtx"] = ctx.Repo.PullRequest
|
||||||
|
|
||||||
if ctx.Query("go-get") == "1" {
|
if ctx.Query("go-get") == "1" {
|
||||||
ctx.Data["GoGetImport"] = composeGoGetImport(owner.Name, repo.Name)
|
ctx.Data["GoGetImport"] = ComposeGoGetImport(owner.Name, repo.Name)
|
||||||
prefix := setting.AppURL + path.Join(owner.Name, repo.Name, "src", ctx.Repo.BranchName)
|
prefix := setting.AppURL + path.Join(owner.Name, repo.Name, "src", ctx.Repo.BranchName)
|
||||||
ctx.Data["GoDocDirectory"] = prefix + "{/dir}"
|
ctx.Data["GoDocDirectory"] = prefix + "{/dir}"
|
||||||
ctx.Data["GoDocFile"] = prefix + "{/dir}/{file}#L{line}"
|
ctx.Data["GoDocFile"] = prefix + "{/dir}/{file}#L{line}"
|
||||||
|
@ -529,6 +614,15 @@ func CheckUnit(unitType models.UnitType) macaron.Handler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CheckAnyUnit will check whether any of the unit types are enabled
|
||||||
|
func CheckAnyUnit(unitTypes ...models.UnitType) macaron.Handler {
|
||||||
|
return func(ctx *Context) {
|
||||||
|
if !ctx.Repo.Repository.AnyUnitEnabled(unitTypes...) {
|
||||||
|
ctx.Handle(404, "CheckAnyUnit", fmt.Errorf("%s: %v", ctx.Tr("units.error.unit_not_allowed"), unitTypes))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// GitHookService checks if repository Git hooks service has been enabled.
|
// GitHookService checks if repository Git hooks service has been enabled.
|
||||||
func GitHookService() macaron.Handler {
|
func GitHookService() macaron.Handler {
|
||||||
return func(ctx *Context) {
|
return func(ctx *Context) {
|
||||||
|
|
|
@ -70,10 +70,7 @@ func (s *ContentStore) Put(meta *models.LFSMetaObject, r io.Reader) error {
|
||||||
return errHashMismatch
|
return errHashMismatch
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.Rename(tmpPath, path); err != nil {
|
return os.Rename(tmpPath, path)
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Exists returns true if the object exists in the content store.
|
// Exists returns true if the object exists in the content store.
|
||||||
|
|
|
@ -110,10 +110,7 @@ func (w *FileLogWriter) StartLogger() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
w.mw.SetFd(fd)
|
w.mw.SetFd(fd)
|
||||||
if err = w.initFd(); err != nil {
|
return w.initFd()
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *FileLogWriter) docheck(size int) {
|
func (w *FileLogWriter) docheck(size int) {
|
||||||
|
|
|
@ -16,6 +16,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"code.gitea.io/gitea/modules/base"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
|
||||||
|
@ -30,18 +31,18 @@ type Message struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewMessageFrom creates new mail message object with custom From header.
|
// NewMessageFrom creates new mail message object with custom From header.
|
||||||
func NewMessageFrom(to []string, from, subject, body string) *Message {
|
func NewMessageFrom(to []string, fromDisplayName, fromAddress, subject, body string) *Message {
|
||||||
log.Trace("NewMessageFrom (body):\n%s", body)
|
log.Trace("NewMessageFrom (body):\n%s", body)
|
||||||
|
|
||||||
msg := gomail.NewMessage()
|
msg := gomail.NewMessage()
|
||||||
msg.SetHeader("From", from)
|
msg.SetAddressHeader("From", fromAddress, fromDisplayName)
|
||||||
msg.SetHeader("To", to...)
|
msg.SetHeader("To", to...)
|
||||||
msg.SetHeader("Subject", subject)
|
msg.SetHeader("Subject", subject)
|
||||||
msg.SetDateHeader("Date", time.Now())
|
msg.SetDateHeader("Date", time.Now())
|
||||||
|
|
||||||
plainBody, err := html2text.FromString(body)
|
plainBody, err := html2text.FromString(body)
|
||||||
if err != nil || setting.MailService.SendAsPlainText {
|
if err != nil || setting.MailService.SendAsPlainText {
|
||||||
if strings.Contains(body[:100], "<html>") {
|
if strings.Contains(base.TruncateString(body, 100), "<html>") {
|
||||||
log.Warn("Mail contains HTML but configured to send as plain text.")
|
log.Warn("Mail contains HTML but configured to send as plain text.")
|
||||||
}
|
}
|
||||||
msg.SetBody("text/plain", plainBody)
|
msg.SetBody("text/plain", plainBody)
|
||||||
|
@ -57,7 +58,7 @@ func NewMessageFrom(to []string, from, subject, body string) *Message {
|
||||||
|
|
||||||
// NewMessage creates new mail message object with default From header.
|
// NewMessage creates new mail message object with default From header.
|
||||||
func NewMessage(to []string, subject, body string) *Message {
|
func NewMessage(to []string, subject, body string) *Message {
|
||||||
return NewMessageFrom(to, setting.MailService.From, subject, body)
|
return NewMessageFrom(to, setting.MailService.FromName, setting.MailService.FromEmail, subject, body)
|
||||||
}
|
}
|
||||||
|
|
||||||
type loginAuth struct {
|
type loginAuth struct {
|
||||||
|
|
|
@ -10,6 +10,7 @@ import (
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"net"
|
||||||
"net/mail"
|
"net/mail"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
@ -431,7 +432,7 @@ var (
|
||||||
}{
|
}{
|
||||||
DisableDiffHighlight: false,
|
DisableDiffHighlight: false,
|
||||||
MaxGitDiffLines: 1000,
|
MaxGitDiffLines: 1000,
|
||||||
MaxGitDiffLineCharacters: 500,
|
MaxGitDiffLineCharacters: 5000,
|
||||||
MaxGitDiffFiles: 100,
|
MaxGitDiffFiles: 100,
|
||||||
GCArgs: []string{},
|
GCArgs: []string{},
|
||||||
Timeout: struct {
|
Timeout: struct {
|
||||||
|
@ -657,6 +658,12 @@ func NewContext() {
|
||||||
// This value is empty if site does not have sub-url.
|
// This value is empty if site does not have sub-url.
|
||||||
AppSubURL = strings.TrimSuffix(url.Path, "/")
|
AppSubURL = strings.TrimSuffix(url.Path, "/")
|
||||||
AppSubURLDepth = strings.Count(AppSubURL, "/")
|
AppSubURLDepth = strings.Count(AppSubURL, "/")
|
||||||
|
// Check if Domain differs from AppURL domain than update it to AppURL's domain
|
||||||
|
// TODO: Can be replaced with url.Hostname() when minimal GoLang version is 1.8
|
||||||
|
urlHostname := strings.SplitN(url.Host, ":", 2)[0]
|
||||||
|
if urlHostname != Domain && net.ParseIP(urlHostname) == nil {
|
||||||
|
Domain = urlHostname
|
||||||
|
}
|
||||||
|
|
||||||
var defaultLocalURL string
|
var defaultLocalURL string
|
||||||
switch Protocol {
|
switch Protocol {
|
||||||
|
@ -1274,6 +1281,7 @@ type Mailer struct {
|
||||||
QueueLength int
|
QueueLength int
|
||||||
Name string
|
Name string
|
||||||
From string
|
From string
|
||||||
|
FromName string
|
||||||
FromEmail string
|
FromEmail string
|
||||||
SendAsPlainText bool
|
SendAsPlainText bool
|
||||||
|
|
||||||
|
@ -1332,6 +1340,7 @@ func newMailService() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(4, "Invalid mailer.FROM (%s): %v", MailService.From, err)
|
log.Fatal(4, "Invalid mailer.FROM (%s): %v", MailService.From, err)
|
||||||
}
|
}
|
||||||
|
MailService.FromName = parsed.Name
|
||||||
MailService.FromEmail = parsed.Address
|
MailService.FromEmail = parsed.Address
|
||||||
|
|
||||||
log.Info("Mail Service Enabled")
|
log.Info("Mail Service Enabled")
|
||||||
|
|
|
@ -66,6 +66,7 @@ func NewFuncMap() []template.FuncMap {
|
||||||
},
|
},
|
||||||
"AvatarLink": base.AvatarLink,
|
"AvatarLink": base.AvatarLink,
|
||||||
"Safe": Safe,
|
"Safe": Safe,
|
||||||
|
"SafeJS": SafeJS,
|
||||||
"Sanitize": bluemonday.UGCPolicy().Sanitize,
|
"Sanitize": bluemonday.UGCPolicy().Sanitize,
|
||||||
"Str2html": Str2html,
|
"Str2html": Str2html,
|
||||||
"TimeSince": base.TimeSince,
|
"TimeSince": base.TimeSince,
|
||||||
|
@ -162,6 +163,11 @@ func Safe(raw string) template.HTML {
|
||||||
return template.HTML(raw)
|
return template.HTML(raw)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SafeJS renders raw as JS
|
||||||
|
func SafeJS(raw string) template.JS {
|
||||||
|
return template.JS(raw)
|
||||||
|
}
|
||||||
|
|
||||||
// Str2html render Markdown text to HTML
|
// Str2html render Markdown text to HTML
|
||||||
func Str2html(raw string) template.HTML {
|
func Str2html(raw string) template.HTML {
|
||||||
return template.HTML(markdown.Sanitize(raw))
|
return template.HTML(markdown.Sanitize(raw))
|
||||||
|
|
|
@ -36,6 +36,7 @@ settings=Настройки
|
||||||
your_profile=Вашият профил
|
your_profile=Вашият профил
|
||||||
your_settings=Вашите настройки
|
your_settings=Вашите настройки
|
||||||
|
|
||||||
|
|
||||||
activities=Активности
|
activities=Активности
|
||||||
pull_requests=Заявки за сливане
|
pull_requests=Заявки за сливане
|
||||||
issues=Задачи
|
issues=Задачи
|
||||||
|
@ -553,7 +554,6 @@ settings.wiki_delete_notices_1=- Това ще изтрие и ще деакти
|
||||||
settings.delete=Изтрий това хранилище
|
settings.delete=Изтрий това хранилище
|
||||||
settings.delete_desc=След като изтриете хранилището, няма връщане назад. Моля, бъдете сигурни.
|
settings.delete_desc=След като изтриете хранилището, няма връщане назад. Моля, бъдете сигурни.
|
||||||
settings.delete_notices_1=- Тази операция <strong>НЕ МОЖЕ</strong> да бъде отменена в последствие.
|
settings.delete_notices_1=- Тази операция <strong>НЕ МОЖЕ</strong> да бъде отменена в последствие.
|
||||||
settings.delete_notices_fork_1=- Всички разклонения ще станат независими след изтриването.
|
|
||||||
settings.transfer_owner=Нов притежател
|
settings.transfer_owner=Нов притежател
|
||||||
settings.make_transfer=Прехвърли
|
settings.make_transfer=Прехвърли
|
||||||
settings.confirm_delete=Потвърди изтриването
|
settings.confirm_delete=Потвърди изтриването
|
||||||
|
@ -640,7 +640,6 @@ release.ahead=<strong>%d</strong> ревизии на %s след тази ве
|
||||||
release.source_code=Изходен код
|
release.source_code=Изходен код
|
||||||
release.tag_name=Име на маркера
|
release.tag_name=Име на маркера
|
||||||
release.target=Цел
|
release.target=Цел
|
||||||
release.tag_helper=Изберете съществуващ маркер или създайте нов маркер по време на публикуване.
|
|
||||||
release.title=Заглавие
|
release.title=Заглавие
|
||||||
release.content=Съдържание
|
release.content=Съдържание
|
||||||
release.write=Редактор
|
release.write=Редактор
|
||||||
|
@ -689,7 +688,6 @@ settings.delete_account=Изтриване на тази организация
|
||||||
settings.delete_prompt=Организацията ще бъде изтрита и операцията <strong>НЕ МОЖЕ</strong> да бъде отменена в последствие!
|
settings.delete_prompt=Организацията ще бъде изтрита и операцията <strong>НЕ МОЖЕ</strong> да бъде отменена в последствие!
|
||||||
settings.confirm_delete_account=Потвърди изтриването
|
settings.confirm_delete_account=Потвърди изтриването
|
||||||
settings.delete_org_title=Изтрий организацията
|
settings.delete_org_title=Изтрий организацията
|
||||||
settings.hooks_desc=Добави уеб-куки, които ще бъдат използвани от <strong>всички хранилища</strong> в тази организация.
|
|
||||||
|
|
||||||
members.membership_visibility=Видимост:
|
members.membership_visibility=Видимост:
|
||||||
members.public=Публични
|
members.public=Публични
|
||||||
|
@ -718,7 +716,6 @@ teams.update_settings=Запази настройките
|
||||||
teams.delete_team=Изтриване на този екип
|
teams.delete_team=Изтриване на този екип
|
||||||
teams.add_team_member=Добави участник в екипа
|
teams.add_team_member=Добави участник в екипа
|
||||||
teams.delete_team_title=Изтрий екипа
|
teams.delete_team_title=Изтрий екипа
|
||||||
teams.delete_team_desc=Тъй като този екип ще бъдат изтрит, участниците му може да загубят достъп до някои хранилища. Желаете ли да продължите?
|
|
||||||
teams.read_permission_desc=Този екип предоставя достъп за <strong>четене</strong>: участниците могат да разглеждат и клонират хранилищата на този екип.
|
teams.read_permission_desc=Този екип предоставя достъп за <strong>четене</strong>: участниците могат да разглеждат и клонират хранилищата на този екип.
|
||||||
teams.write_permission_desc=Този екип предоставя достъп за <strong>писане</strong>: участниците могат да четат от и да предават към хранилищата на този екип.
|
teams.write_permission_desc=Този екип предоставя достъп за <strong>писане</strong>: участниците могат да четат от и да предават към хранилищата на този екип.
|
||||||
teams.admin_permission_desc=Този екип предоставя <strong>администраторски</strong> достъп: участниците могат да четат от, да предават към и да добавя нови сътрудници към хранилищата на този екип.
|
teams.admin_permission_desc=Този екип предоставя <strong>администраторски</strong> достъп: участниците могат да четат от, да предават към и да добавя нови сътрудници към хранилищата на този екип.
|
||||||
|
@ -838,7 +835,6 @@ auths.smtp_auth=SMTP удостоверяване
|
||||||
auths.smtphost=SMTP сървър
|
auths.smtphost=SMTP сървър
|
||||||
auths.smtpport=SMTP порт
|
auths.smtpport=SMTP порт
|
||||||
auths.allowed_domains=Разрешени домейни
|
auths.allowed_domains=Разрешени домейни
|
||||||
auths.allowed_domains_helper=Оставете празно за да не се ограничават домейните. За множество домейни използвайте запетая за разделител.
|
|
||||||
auths.enable_tls=Включи TLS криптиране
|
auths.enable_tls=Включи TLS криптиране
|
||||||
auths.skip_tls_verify=Пропусни проверка на TLS сертификат
|
auths.skip_tls_verify=Пропусни проверка на TLS сертификат
|
||||||
auths.pam_service_name=Име на PAM услуга
|
auths.pam_service_name=Име на PAM услуга
|
||||||
|
@ -864,7 +860,6 @@ config.reverse_auth_user=Потребителско име при обратно
|
||||||
|
|
||||||
config.ssh_config=SSH конфигурация
|
config.ssh_config=SSH конфигурация
|
||||||
config.ssh_enabled=Активен
|
config.ssh_enabled=Активен
|
||||||
config.ssh_start_builtin_server=Стартирай вграден сървър
|
|
||||||
config.ssh_domain=Домейн
|
config.ssh_domain=Домейн
|
||||||
config.ssh_port=Порт
|
config.ssh_port=Порт
|
||||||
config.ssh_listen_port=Порт за слушане
|
config.ssh_listen_port=Порт за слушане
|
||||||
|
|
|
@ -37,6 +37,7 @@ settings=Nastavení
|
||||||
your_profile=Váš profil
|
your_profile=Váš profil
|
||||||
your_settings=Vaše nastavení
|
your_settings=Vaše nastavení
|
||||||
|
|
||||||
|
|
||||||
activities=Aktivity
|
activities=Aktivity
|
||||||
pull_requests=Požadavek na natažení
|
pull_requests=Požadavek na natažení
|
||||||
issues=Úkoly
|
issues=Úkoly
|
||||||
|
@ -553,7 +554,6 @@ settings.wiki_delete_notices_1=- Toto smaže a vypne Wiki pro %s
|
||||||
settings.delete=Smazat tento repositář
|
settings.delete=Smazat tento repositář
|
||||||
settings.delete_desc=Jakmile smažete repositář, není možné se vrátit. Buďte si, prosím, jist.
|
settings.delete_desc=Jakmile smažete repositář, není možné se vrátit. Buďte si, prosím, jist.
|
||||||
settings.delete_notices_1=- Tuto operaci <strong>nelze</strong> zvrátit.
|
settings.delete_notices_1=- Tuto operaci <strong>nelze</strong> zvrátit.
|
||||||
settings.delete_notices_fork_1=- Po smazání se všechny forky se stanou nezávislé.
|
|
||||||
settings.transfer_owner=Nový vlastník
|
settings.transfer_owner=Nový vlastník
|
||||||
settings.make_transfer=Předat
|
settings.make_transfer=Předat
|
||||||
settings.confirm_delete=Potvrdit smazání
|
settings.confirm_delete=Potvrdit smazání
|
||||||
|
@ -641,7 +641,6 @@ release.ahead=<strong>%d</strong> revizí do větve %s od tohoto vydání
|
||||||
release.source_code=Zdrojový kód
|
release.source_code=Zdrojový kód
|
||||||
release.tag_name=Název značky
|
release.tag_name=Název značky
|
||||||
release.target=Cíl
|
release.target=Cíl
|
||||||
release.tag_helper=Vyberte existující značku nebo vytvořte novou značku při vydání.
|
|
||||||
release.title=Název
|
release.title=Název
|
||||||
release.content=Obsah
|
release.content=Obsah
|
||||||
release.write=Zapsat
|
release.write=Zapsat
|
||||||
|
@ -690,7 +689,6 @@ settings.delete_account=Smazat tuto organizaci
|
||||||
settings.delete_prompt=Organizace bude trvale smazána a tato změna <strong>nemůže</strong> být vrácena!
|
settings.delete_prompt=Organizace bude trvale smazána a tato změna <strong>nemůže</strong> být vrácena!
|
||||||
settings.confirm_delete_account=Potvrdit smazání
|
settings.confirm_delete_account=Potvrdit smazání
|
||||||
settings.delete_org_title=Smazání organizace
|
settings.delete_org_title=Smazání organizace
|
||||||
settings.hooks_desc=Přidejte webového háčky, které budou spouštěny nad <strong>všemi repositáři</strong> této organizace.
|
|
||||||
|
|
||||||
members.membership_visibility=Viditelnost členství:
|
members.membership_visibility=Viditelnost členství:
|
||||||
members.public=Veřejný
|
members.public=Veřejný
|
||||||
|
@ -719,7 +717,6 @@ teams.update_settings=Upravit nastavení
|
||||||
teams.delete_team=Smazat tento tým
|
teams.delete_team=Smazat tento tým
|
||||||
teams.add_team_member=Přidat člena týmu
|
teams.add_team_member=Přidat člena týmu
|
||||||
teams.delete_team_title=Smazání týmu
|
teams.delete_team_title=Smazání týmu
|
||||||
teams.delete_team_desc=Jelikož bude tento tým smazán, jeho členové mohou ztratit přístup do některých repositářů. Chcete pokračovat?
|
|
||||||
teams.read_permission_desc=Členství v tom týmu poskytuje právo <strong>čtení</strong>: členové mohou číst z a vytvářet klony repositářů týmu.
|
teams.read_permission_desc=Členství v tom týmu poskytuje právo <strong>čtení</strong>: členové mohou číst z a vytvářet klony repositářů týmu.
|
||||||
teams.write_permission_desc=Členství v tom týmu poskytuje právo <strong>zápisu</strong>: členové mohou číst z a nahrávat do repositářů týmu.
|
teams.write_permission_desc=Členství v tom týmu poskytuje právo <strong>zápisu</strong>: členové mohou číst z a nahrávat do repositářů týmu.
|
||||||
teams.admin_permission_desc=Členství v tom týmu poskytuje právo <strong>správce</strong>: členové mohou číst z, nahrávat do a přidávat spolupracovníky do repositářů týmu.
|
teams.admin_permission_desc=Členství v tom týmu poskytuje právo <strong>správce</strong>: členové mohou číst z, nahrávat do a přidávat spolupracovníky do repositářů týmu.
|
||||||
|
@ -838,7 +835,6 @@ auths.smtp_auth=Typ ověření SMTP
|
||||||
auths.smtphost=Server SMTP
|
auths.smtphost=Server SMTP
|
||||||
auths.smtpport=Port SMTP
|
auths.smtpport=Port SMTP
|
||||||
auths.allowed_domains=Povolené domény
|
auths.allowed_domains=Povolené domény
|
||||||
auths.allowed_domains_helper=Zanechte prázdné, pokud nechcete omezit jakékoliv domény. Domény musí být od sebe odděleny čárkou ','.
|
|
||||||
auths.enable_tls=Povolit šifrování TLS
|
auths.enable_tls=Povolit šifrování TLS
|
||||||
auths.skip_tls_verify=Přeskočit ověření TLS
|
auths.skip_tls_verify=Přeskočit ověření TLS
|
||||||
auths.pam_service_name=Název služby PAM
|
auths.pam_service_name=Název služby PAM
|
||||||
|
@ -864,7 +860,6 @@ config.reverse_auth_user=Uživatel obráceného ověření
|
||||||
|
|
||||||
config.ssh_config=Nastavení SSH
|
config.ssh_config=Nastavení SSH
|
||||||
config.ssh_enabled=Zapnutý
|
config.ssh_enabled=Zapnutý
|
||||||
config.ssh_start_builtin_server=Spustit vestavěný server
|
|
||||||
config.ssh_domain=Doména
|
config.ssh_domain=Doména
|
||||||
config.ssh_listen_port=Port pro naslouchání
|
config.ssh_listen_port=Port pro naslouchání
|
||||||
config.ssh_root_path=Kořenová cesta
|
config.ssh_root_path=Kořenová cesta
|
||||||
|
|
|
@ -5,7 +5,7 @@ dashboard=Übersicht
|
||||||
explore=Erkunden
|
explore=Erkunden
|
||||||
help=Hilfe
|
help=Hilfe
|
||||||
sign_in=Anmelden
|
sign_in=Anmelden
|
||||||
sign_in_with=Einloggen mit
|
sign_in_with=Anmelden mit
|
||||||
sign_out=Abmelden
|
sign_out=Abmelden
|
||||||
sign_up=Registrieren
|
sign_up=Registrieren
|
||||||
link_account=Account verbinden
|
link_account=Account verbinden
|
||||||
|
@ -46,6 +46,12 @@ your_profile=Profil
|
||||||
your_starred=Deine Favoriten
|
your_starred=Deine Favoriten
|
||||||
your_settings=Einstellungen
|
your_settings=Einstellungen
|
||||||
|
|
||||||
|
all=Alle
|
||||||
|
sources=Quellen
|
||||||
|
mirrors=Mirrors
|
||||||
|
collaborative=Kollaborativ
|
||||||
|
forks=Forks
|
||||||
|
|
||||||
activities=Aktivitäten
|
activities=Aktivitäten
|
||||||
pull_requests=Pull-Requests
|
pull_requests=Pull-Requests
|
||||||
issues=Issues
|
issues=Issues
|
||||||
|
@ -251,6 +257,7 @@ username_been_taken=Benutzername ist bereits vergeben.
|
||||||
repo_name_been_taken=Dieser Repository-Name wird schon verwendet.
|
repo_name_been_taken=Dieser Repository-Name wird schon verwendet.
|
||||||
org_name_been_taken=Name der Organisation wird bereits verwendet.
|
org_name_been_taken=Name der Organisation wird bereits verwendet.
|
||||||
team_name_been_taken=Teamname ist bereits vorhanden.
|
team_name_been_taken=Teamname ist bereits vorhanden.
|
||||||
|
team_no_units_error=Das Team muss mindestens eine Einheit aktiviert haben.
|
||||||
email_been_used=E-Mail-Adresse wird bereits verwendet.
|
email_been_used=E-Mail-Adresse wird bereits verwendet.
|
||||||
openid_been_used=OpenID-Adresse "%s" wurde bereits verwendet.
|
openid_been_used=OpenID-Adresse "%s" wurde bereits verwendet.
|
||||||
username_password_incorrect=Falscher Benutzername oder Passwort.
|
username_password_incorrect=Falscher Benutzername oder Passwort.
|
||||||
|
@ -303,7 +310,7 @@ uid=Uid
|
||||||
|
|
||||||
public_profile=Öffentliches Profil
|
public_profile=Öffentliches Profil
|
||||||
profile_desc=Deine E-Mail-Adresse ist öffentlich einsehbar und dient dazu, dir Benachrichtigungen bezüglich deines Kontos sowie Aktivitäten auf der Webseite zukommen zu lassen.
|
profile_desc=Deine E-Mail-Adresse ist öffentlich einsehbar und dient dazu, dir Benachrichtigungen bezüglich deines Kontos sowie Aktivitäten auf der Webseite zukommen zu lassen.
|
||||||
password_username_disabled=Nutzer die nicht von Gitea verwaltet sind, können ihren Benutzernamen nicht ändern. Bitte kontaktiere den Gitea-Administrator für mehr Details.
|
password_username_disabled=Nutzer, die nicht von Gitea verwaltet sind, können ihren Benutzernamen nicht ändern. Bitte kontaktiere den Gitea-Administrator für mehr Details.
|
||||||
full_name=Vollständiger Name
|
full_name=Vollständiger Name
|
||||||
website=Webseite
|
website=Webseite
|
||||||
location=Standort
|
location=Standort
|
||||||
|
@ -351,7 +358,7 @@ add_openid=OpenID-URI hinzufügen
|
||||||
add_email_confirmation_sent=Eine neue Bestätigungs-E-Mail wurde an '%s' gesendet. Kontrolliere dein Postfach innerhalb der nächsten %s, um die Verifizierung abzuschließen.
|
add_email_confirmation_sent=Eine neue Bestätigungs-E-Mail wurde an '%s' gesendet. Kontrolliere dein Postfach innerhalb der nächsten %s, um die Verifizierung abzuschließen.
|
||||||
add_email_success=Dein neue E-Mail-Adresse wurde erfolgreich hinzugefügt.
|
add_email_success=Dein neue E-Mail-Adresse wurde erfolgreich hinzugefügt.
|
||||||
add_openid_success=Deine neue OpenID-Adresse wurde erfolgreich hinzugefügt.
|
add_openid_success=Deine neue OpenID-Adresse wurde erfolgreich hinzugefügt.
|
||||||
keep_email_private=Private E-Mail-Adressen
|
keep_email_private=E-Mail-Adresse nicht veröffentlichen
|
||||||
keep_email_private_popup=Deine E-Mail-Adresse wird vor anderen Benutzern versteckt, wenn diese Option gesetzt ist.
|
keep_email_private_popup=Deine E-Mail-Adresse wird vor anderen Benutzern versteckt, wenn diese Option gesetzt ist.
|
||||||
openid_desc=Mit deinen OpenID-Adressen kannst du die Authentifizierung an einen provider deiner Wahl delegieren
|
openid_desc=Mit deinen OpenID-Adressen kannst du die Authentifizierung an einen provider deiner Wahl delegieren
|
||||||
|
|
||||||
|
@ -491,6 +498,7 @@ migrate.lfs_mirror_unsupported=Spiegelung von LFS-Objekten wird nicht unterstüt
|
||||||
|
|
||||||
mirror_from=Mirror von
|
mirror_from=Mirror von
|
||||||
forked_from=geforkt von
|
forked_from=geforkt von
|
||||||
|
fork_from_self=Du kannst kein Repository forken, das dir gehört!
|
||||||
copy_link=Kopieren
|
copy_link=Kopieren
|
||||||
copy_link_success=Kopiert!
|
copy_link_success=Kopiert!
|
||||||
copy_link_error=Drücke ⌘-C oder Strg-C zum Kopieren
|
copy_link_error=Drücke ⌘-C oder Strg-C zum Kopieren
|
||||||
|
@ -510,6 +518,7 @@ push_exist_repo=Bestehendes Repository via Kommandozeile pushen
|
||||||
bare_message=Diese Repository hat noch keinen Inhalt.
|
bare_message=Diese Repository hat noch keinen Inhalt.
|
||||||
|
|
||||||
code=Code
|
code=Code
|
||||||
|
code.desc=Code ist der Speicherort des Codes
|
||||||
branch=Branch
|
branch=Branch
|
||||||
tree=Struktur
|
tree=Struktur
|
||||||
filter_branch_and_tag=Nach Branch oder Tag filtern
|
filter_branch_and_tag=Nach Branch oder Tag filtern
|
||||||
|
@ -580,6 +589,8 @@ commits.message=Nachricht
|
||||||
commits.date=Datum
|
commits.date=Datum
|
||||||
commits.older=Älter
|
commits.older=Älter
|
||||||
commits.newer=Neuer
|
commits.newer=Neuer
|
||||||
|
commits.signed_by=Signiert von
|
||||||
|
commits.gpg_key_id=GPG Schlüssel ID
|
||||||
|
|
||||||
ext_issues=Ext Issues
|
ext_issues=Ext Issues
|
||||||
ext_issues.desc=Externe Issues zu einer externen Website zuweisen
|
ext_issues.desc=Externe Issues zu einer externen Website zuweisen
|
||||||
|
@ -689,6 +700,7 @@ issues.attachment.download=`Klicken um "%s" herunterzuladen`
|
||||||
issues.subscribe=Abonnieren
|
issues.subscribe=Abonnieren
|
||||||
issues.unsubscribe=Abbestellen
|
issues.unsubscribe=Abbestellen
|
||||||
|
|
||||||
|
pulls.desc=Pull-Requests helfen dir deinen Code zu überprüfen und neuen Code mit der Codebasis zusammenzuführen
|
||||||
pulls.new=Neuer Pull-Request
|
pulls.new=Neuer Pull-Request
|
||||||
pulls.compare_changes=Änderungen vergleichen
|
pulls.compare_changes=Änderungen vergleichen
|
||||||
pulls.compare_changes_desc=Zwei Branches vergleichen und einen Pull-Request für die Änderungen erstellen.
|
pulls.compare_changes_desc=Zwei Branches vergleichen und einen Pull-Request für die Änderungen erstellen.
|
||||||
|
@ -713,6 +725,7 @@ pulls.can_auto_merge_desc=Dieser Pull-Request kann automatisch zusammengeführt
|
||||||
pulls.cannot_auto_merge_desc=Dieser Pull-Request kann nicht automatisch zusammengeführt werden, da es Konflikte gibt.
|
pulls.cannot_auto_merge_desc=Dieser Pull-Request kann nicht automatisch zusammengeführt werden, da es Konflikte gibt.
|
||||||
pulls.cannot_auto_merge_helper=Bitte manuell zusammenführen, um die Konflikte zu lösen.
|
pulls.cannot_auto_merge_helper=Bitte manuell zusammenführen, um die Konflikte zu lösen.
|
||||||
pulls.merge_pull_request=Pull-Request zusammenführen
|
pulls.merge_pull_request=Pull-Request zusammenführen
|
||||||
|
pulls.open_unmerged_pull_exists=`Du kannst diesen Pull-Request nicht wieder öffnen, da bereits ein offener Pull-Request (#%d) aus dem selben Repository mit den gleichen Merge-Informationen existiert und auf das Zusammenführen wartet.`
|
||||||
|
|
||||||
milestones.new=Neuer Meilenstein
|
milestones.new=Neuer Meilenstein
|
||||||
milestones.open_tab=%d offen
|
milestones.open_tab=%d offen
|
||||||
|
@ -730,6 +743,7 @@ milestones.clear=Feld leeren
|
||||||
milestones.invalid_due_date_format=Format des Fälligkeitsdatums ist ungültig. Es muss das Format 'JJJJ-MM-TT' haben.
|
milestones.invalid_due_date_format=Format des Fälligkeitsdatums ist ungültig. Es muss das Format 'JJJJ-MM-TT' haben.
|
||||||
milestones.create_success=Meilenstein '%s' wurde erfolgreich erstellt!
|
milestones.create_success=Meilenstein '%s' wurde erfolgreich erstellt!
|
||||||
milestones.edit=Meilenstein bearbeiten
|
milestones.edit=Meilenstein bearbeiten
|
||||||
|
milestones.edit_subheader=Verwende eine aussagekräftige Beschreibung für Meilensteine, um Missverständnisse zu vermeiden.
|
||||||
milestones.cancel=Abbrechen
|
milestones.cancel=Abbrechen
|
||||||
milestones.modify=Meilenstein ändern
|
milestones.modify=Meilenstein ändern
|
||||||
milestones.edit_success=Änderungen des Meilensteins '%s' wurden erfolgreich gespeichert!
|
milestones.edit_success=Änderungen des Meilensteins '%s' wurden erfolgreich gespeichert!
|
||||||
|
@ -825,6 +839,7 @@ settings.deletion_success=Das Repository würde gelöscht.
|
||||||
settings.update_settings_success=Repository Einstellungen wurden aktualisiert.
|
settings.update_settings_success=Repository Einstellungen wurden aktualisiert.
|
||||||
settings.transfer_owner=Neuer Besitzer
|
settings.transfer_owner=Neuer Besitzer
|
||||||
settings.make_transfer=Transfer starten
|
settings.make_transfer=Transfer starten
|
||||||
|
settings.transfer_succeed=Repository-Eigentum wurde übertragen.
|
||||||
settings.confirm_delete=Löschen
|
settings.confirm_delete=Löschen
|
||||||
settings.add_collaborator=Mitarbeiter hinzufügen
|
settings.add_collaborator=Mitarbeiter hinzufügen
|
||||||
settings.add_collaborator_success=Neuer Mitarbeiter wurde hinzugefügt.
|
settings.add_collaborator_success=Neuer Mitarbeiter wurde hinzugefügt.
|
||||||
|
@ -892,6 +907,7 @@ settings.key_been_used=Deploy-Schlüssel wurde verwendet.
|
||||||
settings.key_name_used=Ein Deploy-Schlüssel mit diesem Namen existiert bereits.
|
settings.key_name_used=Ein Deploy-Schlüssel mit diesem Namen existiert bereits.
|
||||||
settings.add_key_success=Der Deploy-Schlüssel '%s' wurde erfolgreich hinzugefügt!
|
settings.add_key_success=Der Deploy-Schlüssel '%s' wurde erfolgreich hinzugefügt!
|
||||||
settings.deploy_key_deletion=Deploy-Schlüssel löschen
|
settings.deploy_key_deletion=Deploy-Schlüssel löschen
|
||||||
|
settings.deploy_key_deletion_desc=Durch das Löschen dieses Keys wird ein Zugriff damit nicht mehr möglich sein. Fortfahren?
|
||||||
settings.deploy_key_deletion_success=Der Deploy-Schlüssel wurde erfolgreich gelöscht!
|
settings.deploy_key_deletion_success=Der Deploy-Schlüssel wurde erfolgreich gelöscht!
|
||||||
settings.branches=Branches
|
settings.branches=Branches
|
||||||
settings.protected_branch=Branch-Schutz
|
settings.protected_branch=Branch-Schutz
|
||||||
|
@ -912,6 +928,7 @@ settings.no_protected_branch=Es gibt keine geschützten Branches
|
||||||
diff.browse_source=Quellcode durchsuchen
|
diff.browse_source=Quellcode durchsuchen
|
||||||
diff.parent=Ursprung
|
diff.parent=Ursprung
|
||||||
diff.commit=Commit
|
diff.commit=Commit
|
||||||
|
diff.data_not_available=Keine Diff-Daten verfügbar
|
||||||
diff.show_diff_stats=Diff-Statistik anzeigen
|
diff.show_diff_stats=Diff-Statistik anzeigen
|
||||||
diff.show_split_view=Geteilte Ansicht
|
diff.show_split_view=Geteilte Ansicht
|
||||||
diff.show_unified_view=Gesamtansicht
|
diff.show_unified_view=Gesamtansicht
|
||||||
|
@ -921,6 +938,7 @@ diff.view_file=Datei anzeigen
|
||||||
diff.file_suppressed=Datei-Diff unterdrückt, da er zu groß ist
|
diff.file_suppressed=Datei-Diff unterdrückt, da er zu groß ist
|
||||||
diff.too_many_files=Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.
|
diff.too_many_files=Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.
|
||||||
|
|
||||||
|
releases.desc=Unter Releases kannst du die Versionen deines Projekts verwalten
|
||||||
release.releases=Releases
|
release.releases=Releases
|
||||||
release.new_release=Neues Release
|
release.new_release=Neues Release
|
||||||
release.draft=Entwurf
|
release.draft=Entwurf
|
||||||
|
@ -933,7 +951,7 @@ release.new_subheader=Veröffentliche Versionen um Projektversionen zu verfolgen
|
||||||
release.edit_subheader=Ein ausführliche Changelog kann helfen, Benutzer verstehen, was sich geändert hat.
|
release.edit_subheader=Ein ausführliche Changelog kann helfen, Benutzer verstehen, was sich geändert hat.
|
||||||
release.tag_name=Tag-Name
|
release.tag_name=Tag-Name
|
||||||
release.target=Ziel
|
release.target=Ziel
|
||||||
release.tag_helper=Wähle einen existierenden Tag, oder erstelle einen neuen Tag bei der Veröffentlichung.
|
release.tag_helper=Wähle einen existierenden oder erstelle einen neuen Tag.
|
||||||
release.title=Titel
|
release.title=Titel
|
||||||
release.content=Inhalt
|
release.content=Inhalt
|
||||||
release.write=Schreiben
|
release.write=Schreiben
|
||||||
|
@ -947,12 +965,17 @@ release.save_draft=Entwurf speichern
|
||||||
release.edit_release=Release bearbeiten
|
release.edit_release=Release bearbeiten
|
||||||
release.delete_release=Dieses Release löschen
|
release.delete_release=Dieses Release löschen
|
||||||
release.deletion=Release löschen
|
release.deletion=Release löschen
|
||||||
|
release.deletion_desc=Beim Löschen dieses Releases wird das entsprechende Git-Tag gelöscht. Möchtest du fortfahren?
|
||||||
|
release.deletion_success=Das Release wurde gelöscht.
|
||||||
release.tag_name_already_exist=Ein Release mit diesem Tag existiert bereits.
|
release.tag_name_already_exist=Ein Release mit diesem Tag existiert bereits.
|
||||||
release.tag_name_invalid=Tag-Name ist nicht gültig.
|
release.tag_name_invalid=Tag-Name ist nicht gültig.
|
||||||
release.downloads=Downloads
|
release.downloads=Downloads
|
||||||
|
|
||||||
branch.delete=Branch %s löschen
|
branch.delete=Branch %s löschen
|
||||||
|
branch.delete_desc=Das Löschen eines Branches kann nicht Rückgängig gemacht werden.
|
||||||
branch.delete_notices_1=- Diese Operation <strong>kann nicht</strong> rückgängig gemacht werden.
|
branch.delete_notices_1=- Diese Operation <strong>kann nicht</strong> rückgängig gemacht werden.
|
||||||
|
branch.delete_notices_2=- Diese Operation wird permanent alle Inhalte des Branches %s löschen.
|
||||||
|
branch.deletion_success=%s wurde gelöscht.
|
||||||
branch.deletion_failed=Branch %s konnte nicht gelöscht werden.
|
branch.deletion_failed=Branch %s konnte nicht gelöscht werden.
|
||||||
branch.delete_branch_has_new_commits=%s kann nicht gelöscht weden, da es ungemergte Commits gibt.
|
branch.delete_branch_has_new_commits=%s kann nicht gelöscht weden, da es ungemergte Commits gibt.
|
||||||
|
|
||||||
|
@ -971,7 +994,10 @@ create_new_team=Neues Team erstellen
|
||||||
org_desc=Beschreibung
|
org_desc=Beschreibung
|
||||||
team_name=Teamname
|
team_name=Teamname
|
||||||
team_desc=Beschreibung
|
team_desc=Beschreibung
|
||||||
|
team_name_helper=Unter diesem Namen kannst du in Diskussionen auf das Team verweisen.
|
||||||
team_desc_helper=Wofür ist dieses Team da?
|
team_desc_helper=Wofür ist dieses Team da?
|
||||||
|
team_permission_desc=Welche Berechtigungsstufe soll das Team haben?
|
||||||
|
team_unit_desc=Auf welche Bestandteile sollte dieses Team Zugriff haben?
|
||||||
|
|
||||||
form.name_reserved=Organisationsname '%s' ist bereits vergeben.
|
form.name_reserved=Organisationsname '%s' ist bereits vergeben.
|
||||||
form.name_pattern_not_allowed=Organisationsnamen der Form '%s' sind nicht erlaubt.
|
form.name_pattern_not_allowed=Organisationsnamen der Form '%s' sind nicht erlaubt.
|
||||||
|
@ -983,11 +1009,15 @@ settings.full_name=Vollständiger Name
|
||||||
settings.website=Webseite
|
settings.website=Webseite
|
||||||
settings.location=Standort
|
settings.location=Standort
|
||||||
settings.update_settings=Einstellungen speichern
|
settings.update_settings=Einstellungen speichern
|
||||||
|
settings.update_setting_success=Organisationseinstellungen wurden aktualisiert.
|
||||||
|
settings.change_orgname_prompt=Diese Änderung wird die Links zur Organisation ändern.
|
||||||
|
settings.update_avatar_success=Der Organisationsavatar wurde aktualisiert.
|
||||||
settings.delete=Organisation löschen
|
settings.delete=Organisation löschen
|
||||||
settings.delete_account=Diese Organisation löschen
|
settings.delete_account=Diese Organisation löschen
|
||||||
settings.delete_prompt=Die Organisation wird dauerhaft gelöscht. Dies kann <strong>NICHT</strong> rückgängig gemacht werden!
|
settings.delete_prompt=Die Organisation wird dauerhaft gelöscht. Dies kann <strong>NICHT</strong> rückgängig gemacht werden!
|
||||||
settings.confirm_delete_account=Löschen
|
settings.confirm_delete_account=Löschen
|
||||||
settings.delete_org_title=Organisation löschen
|
settings.delete_org_title=Organisation löschen
|
||||||
|
settings.delete_org_desc=Diese Organisation wird dauerhaft gelöscht. Möchtest du fortfahren?
|
||||||
settings.hooks_desc=Webhooks hinzufügen, die für <strong>alle</strong> Repositories dieser Organisation ausgelöst werden.
|
settings.hooks_desc=Webhooks hinzufügen, die für <strong>alle</strong> Repositories dieser Organisation ausgelöst werden.
|
||||||
|
|
||||||
members.membership_visibility=Sichtbarkeit der Mitgliedschaft:
|
members.membership_visibility=Sichtbarkeit der Mitgliedschaft:
|
||||||
|
@ -1020,6 +1050,7 @@ teams.delete_team=Dieses Team löschen
|
||||||
teams.add_team_member=Teammitglied hinzufügen
|
teams.add_team_member=Teammitglied hinzufügen
|
||||||
teams.delete_team_title=Team löschen
|
teams.delete_team_title=Team löschen
|
||||||
teams.delete_team_desc=Mitglieder dieses Teams verlieren möglicherweise ihren Zugang zu einigen Repositories, wenn dieses Team gelöscht wird. Möchtest du fortfahren?
|
teams.delete_team_desc=Mitglieder dieses Teams verlieren möglicherweise ihren Zugang zu einigen Repositories, wenn dieses Team gelöscht wird. Möchtest du fortfahren?
|
||||||
|
teams.delete_team_success=Das Team wurde gelöscht.
|
||||||
teams.read_permission_desc=Dieses Team hat <strong>Lesezugriff</strong>: Mitglieder können Team-Repositories einsehen und klonen.
|
teams.read_permission_desc=Dieses Team hat <strong>Lesezugriff</strong>: Mitglieder können Team-Repositories einsehen und klonen.
|
||||||
teams.write_permission_desc=Dieses Team hat <strong>Schreibzugriff</strong>: Mitglieder können Team-Repositories einsehen und darauf pushen.
|
teams.write_permission_desc=Dieses Team hat <strong>Schreibzugriff</strong>: Mitglieder können Team-Repositories einsehen und darauf pushen.
|
||||||
teams.admin_permission_desc=Dieses Team hat <strong>Adminzugriff</strong>: Mitglieder dieses Teams können pullen, pushen und Mitarbeiter zu Team-Repositories hinzufügen.
|
teams.admin_permission_desc=Dieses Team hat <strong>Adminzugriff</strong>: Mitglieder dieses Teams können pullen, pushen und Mitarbeiter zu Team-Repositories hinzufügen.
|
||||||
|
@ -1049,14 +1080,24 @@ dashboard.statistic_info=Gitea Datenbank hat <b>%d</b> Benutzer, <b>%d</b> Organ
|
||||||
dashboard.operation_name=Name der Operation
|
dashboard.operation_name=Name der Operation
|
||||||
dashboard.operation_switch=Wechseln
|
dashboard.operation_switch=Wechseln
|
||||||
dashboard.operation_run=Ausführen
|
dashboard.operation_run=Ausführen
|
||||||
|
dashboard.clean_unbind_oauth=Nicht verbundene OAuths Verbindungen löschen
|
||||||
|
dashboard.clean_unbind_oauth_success=Alle unverbundene OAuth-Verbindungen wurden gelöscht.
|
||||||
dashboard.delete_inactivate_accounts=Deaktivierte Konten löschen
|
dashboard.delete_inactivate_accounts=Deaktivierte Konten löschen
|
||||||
|
dashboard.delete_inactivate_accounts_success=Alle deaktivierten Konten wurden erfolgreich gelöscht.
|
||||||
dashboard.delete_repo_archives=Alle Repository-Archive löschen
|
dashboard.delete_repo_archives=Alle Repository-Archive löschen
|
||||||
dashboard.delete_missing_repos=Alle Repositorys löschen, welche ihre zugehörigen Git-Dateien verloren haben
|
dashboard.delete_repo_archives_success=Alle Repository-Archive wurden gelöscht.
|
||||||
|
dashboard.delete_missing_repos=Alle Repository-Datensätze mit verlorenen gegangenen Git-Dateien löschen
|
||||||
|
dashboard.delete_missing_repos_success=Alle Repository-Datensätze mit verlorenen Git-Dateien wurden erfolgreich gelöscht.
|
||||||
dashboard.git_gc_repos=Garbage Collection auf allen Repositories ausführen
|
dashboard.git_gc_repos=Garbage Collection auf allen Repositories ausführen
|
||||||
|
dashboard.git_gc_repos_success=Alle Repositories haben garbage collection erfolgreich beendet.
|
||||||
dashboard.resync_all_sshkeys=Datei '.ssh/Authorized_keys' neuschreiben (für Gitea SSH-Schlüssel)
|
dashboard.resync_all_sshkeys=Datei '.ssh/Authorized_keys' neuschreiben (für Gitea SSH-Schlüssel)
|
||||||
dashboard.resync_all_sshkeys_success=Alle öffentlichen Keys wurden erfolgreich neu geschrieben.
|
dashboard.resync_all_sshkeys_success=Alle öffentlichen Keys wurden erfolgreich neu geschrieben.
|
||||||
dashboard.resync_all_hooks=Synchronisiere pre-receive, update und post-receive Hooks für alle Repositories.
|
dashboard.resync_all_hooks=Synchronisiere pre-receive, update und post-receive Hooks für alle Repositories.
|
||||||
|
dashboard.resync_all_hooks_success=Pre-receive, update und post-receive Hooks aller Repositories wurden erfolgreich synchronisiert.
|
||||||
dashboard.reinit_missing_repos=Alle Git-Repositories für welche Einträge existieren neu einlesen
|
dashboard.reinit_missing_repos=Alle Git-Repositories für welche Einträge existieren neu einlesen
|
||||||
|
dashboard.reinit_missing_repos_success=Alle verlorenen Git-Repositories mit existierenden Einträgen wurden erfolgreich aktualisiert.
|
||||||
|
dashboard.sync_external_users=Externe Benutzerdaten synchronisieren
|
||||||
|
dashboard.sync_external_users_started=Externe Benutzer Synchronisation gestartet
|
||||||
dashboard.server_uptime=Server-Uptime
|
dashboard.server_uptime=Server-Uptime
|
||||||
dashboard.current_goroutine=Aktuelle Goroutines
|
dashboard.current_goroutine=Aktuelle Goroutines
|
||||||
dashboard.current_memory_usage=Aktuelle Speichernutzung
|
dashboard.current_memory_usage=Aktuelle Speichernutzung
|
||||||
|
@ -1087,6 +1128,7 @@ dashboard.total_gc_pause=Gesamte GC-Pause
|
||||||
dashboard.last_gc_pause=Letzte GC-Pause
|
dashboard.last_gc_pause=Letzte GC-Pause
|
||||||
dashboard.gc_times=Anzahl GC
|
dashboard.gc_times=Anzahl GC
|
||||||
|
|
||||||
|
users.user_manage_panel=Benutzerverwaltung
|
||||||
users.new_account=Neues Konto erstellen
|
users.new_account=Neues Konto erstellen
|
||||||
users.name=Name
|
users.name=Name
|
||||||
users.activated=Aktiviert
|
users.activated=Aktiviert
|
||||||
|
@ -1096,26 +1138,35 @@ users.created=Erstellt am
|
||||||
users.last_login=Letzte Anmeldung
|
users.last_login=Letzte Anmeldung
|
||||||
users.never_login=Niemals eingeloggt
|
users.never_login=Niemals eingeloggt
|
||||||
users.send_register_notify=Bei der Registrierung eine Benachrichtigung an den Benutzer senden
|
users.send_register_notify=Bei der Registrierung eine Benachrichtigung an den Benutzer senden
|
||||||
|
users.new_success=Der Account '%s' wurde erfolgreich erstellt.
|
||||||
users.edit=Bearbeiten
|
users.edit=Bearbeiten
|
||||||
users.auth_source=Authentifizierungsquelle
|
users.auth_source=Authentifizierungsquelle
|
||||||
users.local=Lokal
|
users.local=Lokal
|
||||||
users.auth_login_name=Anmeldename zur Authentifizierung
|
users.auth_login_name=Anmeldename zur Authentifizierung
|
||||||
users.password_helper=Leer lassen um es unverändert zu lassen.
|
users.password_helper=Leer lassen um es unverändert zu lassen.
|
||||||
|
users.update_profile_success=Kontoprofil wurde erfolgreich aktualisiert.
|
||||||
users.edit_account=Konto bearbeiten
|
users.edit_account=Konto bearbeiten
|
||||||
users.max_repo_creation=Maximale Anzahl erstellbarer Repositories
|
users.max_repo_creation=Maximale Anzahl erstellbarer Repositories
|
||||||
users.max_repo_creation_desc=(Auf -1 setzen, um das globale Standardlimit zu verwenden)
|
users.max_repo_creation_desc=(Auf -1 setzen, um das globale Standardlimit zu verwenden)
|
||||||
users.is_activated=Dieses Konto hat die Aktivierung abgeschlossen
|
users.is_activated=Dieses Konto hat die Aktivierung abgeschlossen
|
||||||
users.prohibit_login=Der Anmeldevorgang für dieses Konto wurde verweigert
|
users.prohibit_login=Diesem Konto den Login verweigern
|
||||||
users.is_admin=Dieses Konto hat Administratorrechte
|
users.is_admin=Dieses Konto hat Administratorrechte
|
||||||
users.allow_git_hook=Dieses Konto ist berechtigt, Git-Hooks zu erstellen
|
users.allow_git_hook=Dieses Konto ist berechtigt, Git-Hooks zu erstellen
|
||||||
users.allow_import_local=Dieses Konto ist berechtigt, lokale Repositories zu importieren
|
users.allow_import_local=Dieses Konto ist berechtigt, lokale Repositories zu importieren
|
||||||
|
users.allow_create_organization=Mit diesem Konto ist das Erstellen von Organisationen erlaubt
|
||||||
users.update_profile=Konto aktualisieren
|
users.update_profile=Konto aktualisieren
|
||||||
users.delete_account=Dieses Konto löschen
|
users.delete_account=Dieses Konto löschen
|
||||||
|
users.still_own_repo=Dieses Konto besitzt noch Repositories. Diese müssen zuerst gelöscht oder übertragen werden.
|
||||||
|
users.still_has_org=Dieses Konto ist noch Mitglied von mindestens einer Organisation. Du musst alle Organisationen erst verlassen oder löschen.
|
||||||
|
users.deletion_success=Das Konto wurde erfolgreich gelöscht.
|
||||||
|
|
||||||
|
orgs.org_manage_panel=Organisationsverwaltung
|
||||||
orgs.name=Name
|
orgs.name=Name
|
||||||
orgs.teams=Teams
|
orgs.teams=Teams
|
||||||
orgs.members=Mitglieder
|
orgs.members=Mitglieder
|
||||||
|
orgs.new_orga=Organisation erstellen
|
||||||
|
|
||||||
|
repos.repo_manage_panel=Repositoryverwaltung
|
||||||
repos.owner=Besitzer
|
repos.owner=Besitzer
|
||||||
repos.name=Name
|
repos.name=Name
|
||||||
repos.private=Privat
|
repos.private=Privat
|
||||||
|
@ -1124,10 +1175,12 @@ repos.stars=Favoriten
|
||||||
repos.issues=Issues
|
repos.issues=Issues
|
||||||
repos.size=Größe
|
repos.size=Größe
|
||||||
|
|
||||||
|
auths.auth_manage_panel=Authentifizierung
|
||||||
auths.new=Neue Quelle hinzufügen
|
auths.new=Neue Quelle hinzufügen
|
||||||
auths.name=Name
|
auths.name=Name
|
||||||
auths.type=Typ
|
auths.type=Typ
|
||||||
auths.enabled=Aktiviert
|
auths.enabled=Aktiviert
|
||||||
|
auths.syncenabled=Benutzersynchronisation aktivieren
|
||||||
auths.updated=Aktualisiert
|
auths.updated=Aktualisiert
|
||||||
auths.auth_type=Authentifizierungstyp
|
auths.auth_type=Authentifizierungstyp
|
||||||
auths.auth_name=Authentifizierungsname
|
auths.auth_name=Authentifizierungsname
|
||||||
|
@ -1137,6 +1190,7 @@ auths.host=Host
|
||||||
auths.port=Port
|
auths.port=Port
|
||||||
auths.bind_dn=DN binden
|
auths.bind_dn=DN binden
|
||||||
auths.bind_password=Passwort binden
|
auths.bind_password=Passwort binden
|
||||||
|
auths.bind_password_helper=Achtung: Das Passwort wird im Klartext gespeichert. Benutze kein Konto mit hoher Berechtigungsstufe.
|
||||||
auths.user_base=Basis für Benutzersuche
|
auths.user_base=Basis für Benutzersuche
|
||||||
auths.user_dn=Benutzer DN
|
auths.user_dn=Benutzer DN
|
||||||
auths.attribute_username=Attribut Benutzername
|
auths.attribute_username=Attribut Benutzername
|
||||||
|
@ -1152,16 +1206,40 @@ auths.smtp_auth=SMTP-Authentifizierung
|
||||||
auths.smtphost=SMTP-Host
|
auths.smtphost=SMTP-Host
|
||||||
auths.smtpport=SMTP-Port
|
auths.smtpport=SMTP-Port
|
||||||
auths.allowed_domains=Erlaubte Domains
|
auths.allowed_domains=Erlaubte Domains
|
||||||
auths.allowed_domains_helper=Leer lassen für keine Einschränkungen. Mehrere Domains können durch Komma "," getrennt werden.
|
auths.allowed_domains_helper=Leer lassen um alle Domains zu erlauben. Mehrere Domains können durch Komma "," getrennt werden.
|
||||||
auths.enable_tls=TLS-Verschlüsselung aktivieren
|
auths.enable_tls=TLS-Verschlüsselung aktivieren
|
||||||
auths.skip_tls_verify=TLS-Prüfung überspringen
|
auths.skip_tls_verify=TLS-Prüfung überspringen
|
||||||
auths.pam_service_name=PAM Dienstname
|
auths.pam_service_name=PAM Dienstname
|
||||||
|
auths.oauth2_provider=OAuth2 Anbieter
|
||||||
auths.oauth2_clientID=Client-ID (Schlüssel)
|
auths.oauth2_clientID=Client-ID (Schlüssel)
|
||||||
auths.oauth2_clientSecret=Client-Secret
|
auths.oauth2_clientSecret=Client-Secret
|
||||||
|
auths.openIdConnectAutoDiscoveryURL=OpenID Connect Auto Discovery URL
|
||||||
|
auths.oauth2_use_custom_url=Benutzerdefinierte URLs anstelle von Standard-URLs verwenden
|
||||||
|
auths.oauth2_tokenURL=Token-URL
|
||||||
|
auths.oauth2_authURL=Authorisier-URL
|
||||||
|
auths.oauth2_profileURL=Profil-URL
|
||||||
|
auths.oauth2_emailURL=E-Mail-URL
|
||||||
auths.enable_auto_register=Automatische Registrierung aktivieren
|
auths.enable_auto_register=Automatische Registrierung aktivieren
|
||||||
auths.tips=Tipps
|
auths.tips=Tipps
|
||||||
|
auths.tips.oauth2.general=OAuth2 Authentifizierung
|
||||||
|
auths.tips.oauth2.general.tip=Beim Registrieren einer neuen OAuth2 Authentifizierung sollte die callback/weiterleitungs-URL <host>/user/oauth2/<Authentication Name>/callback sein
|
||||||
|
auths.tip.oauth2_provider=OAuth2 Anbieter
|
||||||
|
auths.tip.bitbucket=Registriere einen neuen OAuth consumer unter https://bitbucket.org/account/user/<your username>/oauth-consumers/new und füge die Berechtigung "Account"-"Read" hinzu
|
||||||
|
auths.tip.dropbox=Erstelle unter https://www.dropbox.com/developers/apps eine neue App
|
||||||
|
auths.tip.facebook=Registriere unter https://developers.facebook.com/apps eine neue App und füge das Produkt "Facebook Login" hinzu
|
||||||
|
auths.tip.github=Registriere unter https://github.com/settings/applications/new eine neue OAuth Anwendung
|
||||||
|
auths.tip.gitlab=Registriere unter https://gitlab.com/profile/applications eine neue Anwendung
|
||||||
|
auths.tip.google_plus=Du erhälst die OAuth2 Client Zugangsdaten in der Google API Console (https://console.developers.google.com)
|
||||||
|
auths.tip.openid_connect=Benutze die OpenID Connect Discovery URL (<server>/.well-known/openid-configuration), um den Endpunkt zu spezifizieren
|
||||||
|
auths.tip.twitter=Gehe auf https://dev.twitter.com/apps, erstelle eine Anwendung und stelle sicher, dass die Option “Allow this application to be used to Sign in with Twitter” aktiviert ist.
|
||||||
|
auths.edit=Authentifizierungseinstellungen bearbeiten
|
||||||
auths.activated=Diese Authentifizierung ist aktiv
|
auths.activated=Diese Authentifizierung ist aktiv
|
||||||
|
auths.new_success=Die Authentifizierung "%s" wurde hinzugefügt.
|
||||||
|
auths.update_success=Die Authentifizierungseinstellungen wurden aktualisiert.
|
||||||
|
auths.update=Authentifizierungseinstellungen aktualisieren
|
||||||
auths.delete=Diese Authentifizierungsquelle löschen
|
auths.delete=Diese Authentifizierungsquelle löschen
|
||||||
|
auths.delete_auth_title=Authentifizierungsquelle löschen
|
||||||
|
auths.delete_auth_desc=Diese Authentifizierung wird gelöscht. Möchtest du fortfahren?
|
||||||
auths.still_in_used=Diese Authentifizierung wird noch von einigen Benutzern verwendet. Bitte lösche diese Benutzer oder ändere deren Anmeldetyp.
|
auths.still_in_used=Diese Authentifizierung wird noch von einigen Benutzern verwendet. Bitte lösche diese Benutzer oder ändere deren Anmeldetyp.
|
||||||
auths.deletion_success=Authentifizierung wurde erfolgreich gelöscht!
|
auths.deletion_success=Authentifizierung wurde erfolgreich gelöscht!
|
||||||
auths.login_source_exist=Login-Quelle '%s' ist bereits vorhanden.
|
auths.login_source_exist=Login-Quelle '%s' ist bereits vorhanden.
|
||||||
|
@ -1217,12 +1295,15 @@ config.mail_notify=E-Mail-Benachrichtigung
|
||||||
config.disable_key_size_check=Prüfung der Mindestschlüssellänge deaktiveren
|
config.disable_key_size_check=Prüfung der Mindestschlüssellänge deaktiveren
|
||||||
config.enable_captcha=Captcha aktivieren
|
config.enable_captcha=Captcha aktivieren
|
||||||
config.active_code_lives=Aktivierungscode Lebensdauer
|
config.active_code_lives=Aktivierungscode Lebensdauer
|
||||||
|
config.reset_password_code_lives=Ablaufdatum des Passworts zurücksetzen
|
||||||
config.default_keep_email_private=Standard-Wert für "Private E-Mail-Adressen
|
config.default_keep_email_private=Standard-Wert für "Private E-Mail-Adressen
|
||||||
|
config.default_allow_create_organization=Standardmäßige Erlaubnis eine Organisation zu erstellen
|
||||||
config.no_reply_address=No-Reply Adresse
|
config.no_reply_address=No-Reply Adresse
|
||||||
|
|
||||||
config.webhook_config=Webhook-Konfiguration
|
config.webhook_config=Webhook-Konfiguration
|
||||||
config.queue_length=Warteschlangenlänge
|
config.queue_length=Warteschlangenlänge
|
||||||
config.deliver_timeout=Zeitlimit für Zustellung
|
config.deliver_timeout=Zeitlimit für Zustellung
|
||||||
|
config.skip_tls_verify=Überspringe die Überprüfung des TLS-Zertifikats
|
||||||
|
|
||||||
config.mailer_config=Mailer-Konfiguration
|
config.mailer_config=Mailer-Konfiguration
|
||||||
config.mailer_enabled=Aktiviert
|
config.mailer_enabled=Aktiviert
|
||||||
|
@ -1231,6 +1312,7 @@ config.mailer_name=Name
|
||||||
config.mailer_host=Host
|
config.mailer_host=Host
|
||||||
config.mailer_user=Benutzer
|
config.mailer_user=Benutzer
|
||||||
config.send_test_mail=Test-E-Mail senden
|
config.send_test_mail=Test-E-Mail senden
|
||||||
|
config.test_mail_failed=Das Senden der Test-E-Mail an '%s' ist fehlgeschlagen: %v
|
||||||
config.test_mail_sent=Test-E-Mail wurde an '%s' gesendet.
|
config.test_mail_sent=Test-E-Mail wurde an '%s' gesendet.
|
||||||
|
|
||||||
config.oauth_config=OAuth-Konfiguration
|
config.oauth_config=OAuth-Konfiguration
|
||||||
|
@ -1283,6 +1365,7 @@ monitor.start=Startzeit
|
||||||
monitor.execute_time=Ausführungszeit
|
monitor.execute_time=Ausführungszeit
|
||||||
|
|
||||||
notices.system_notice_list=Systemmitteilungen
|
notices.system_notice_list=Systemmitteilungen
|
||||||
|
notices.view_detail_header=Meldungsdetails ansehen
|
||||||
notices.actions=Aktionen
|
notices.actions=Aktionen
|
||||||
notices.select_all=Alles auswählen
|
notices.select_all=Alles auswählen
|
||||||
notices.deselect_all=Alles abwählen
|
notices.deselect_all=Alles abwählen
|
||||||
|
@ -1293,6 +1376,7 @@ notices.type=Typ
|
||||||
notices.type_1=Repository
|
notices.type_1=Repository
|
||||||
notices.desc=Beschreibung
|
notices.desc=Beschreibung
|
||||||
notices.op=Aktion
|
notices.op=Aktion
|
||||||
|
notices.delete_success=Diese Systemmeldung wurde gelöscht.
|
||||||
|
|
||||||
[action]
|
[action]
|
||||||
create_repo=hat das Repository <a href="%s">%s</a> erstellt
|
create_repo=hat das Repository <a href="%s">%s</a> erstellt
|
||||||
|
@ -1308,11 +1392,13 @@ comment_issue=`hat Issue <a href="%s/issues/%s">%s#%[2]s</a> kommentiert`
|
||||||
merge_pull_request=`hat Pull-Request <a href="%s/pulls/%s">%s#%[2]s</a> zuammengeführt`
|
merge_pull_request=`hat Pull-Request <a href="%s/pulls/%s">%s#%[2]s</a> zuammengeführt`
|
||||||
transfer_repo=hat Repository <code>%s</code> transferiert an <a href="%s">%s</a>
|
transfer_repo=hat Repository <code>%s</code> transferiert an <a href="%s">%s</a>
|
||||||
push_tag=hat Tag <a href="%s/src/%s">%[2]s</a> auf <a href="%[1]s">%[3]s</a> gepusht
|
push_tag=hat Tag <a href="%s/src/%s">%[2]s</a> auf <a href="%[1]s">%[3]s</a> gepusht
|
||||||
|
compare_commits=Vergleiche %d Commits
|
||||||
|
|
||||||
[tool]
|
[tool]
|
||||||
ago=vor %s
|
ago=vor %s
|
||||||
from_now=in %s
|
from_now=in %s
|
||||||
now=jetzt
|
now=jetzt
|
||||||
|
future=Zukunft
|
||||||
1s=1 Sekunde
|
1s=1 Sekunde
|
||||||
1m=1 Minute
|
1m=1 Minute
|
||||||
1h=1 Stunde
|
1h=1 Stunde
|
||||||
|
@ -1331,6 +1417,7 @@ raw_seconds=Sekunden
|
||||||
raw_minutes=Minuten
|
raw_minutes=Minuten
|
||||||
|
|
||||||
[dropzone]
|
[dropzone]
|
||||||
|
default_message=Zum Hochladen hier klicken oder Datei hier ablegen.
|
||||||
invalid_input_type=Dateien dieses Dateityps können nicht hochgeladen werden.
|
invalid_input_type=Dateien dieses Dateityps können nicht hochgeladen werden.
|
||||||
file_too_big=Dateigröße ({{filesize}} MB) überschreitet die Maximalgröße ({{maxFilesize}} MB).
|
file_too_big=Dateigröße ({{filesize}} MB) überschreitet die Maximalgröße ({{maxFilesize}} MB).
|
||||||
remove_file=Datei entfernen
|
remove_file=Datei entfernen
|
||||||
|
@ -1338,7 +1425,7 @@ remove_file=Datei entfernen
|
||||||
[notification]
|
[notification]
|
||||||
notifications=Nachrichten
|
notifications=Nachrichten
|
||||||
unread=Ungelesen
|
unread=Ungelesen
|
||||||
read=Lesen
|
read=Gelesen
|
||||||
no_unread=Du hast momentan keine ungelesenen Benachrichtigungen.
|
no_unread=Du hast momentan keine ungelesenen Benachrichtigungen.
|
||||||
no_read=Du hast momentan keine gelesenen Benachrichtigungen.
|
no_read=Du hast momentan keine gelesenen Benachrichtigungen.
|
||||||
pin=Benachrichtigung pinnen
|
pin=Benachrichtigung pinnen
|
||||||
|
@ -1348,8 +1435,12 @@ mark_as_unread=Als ungelesen markieren
|
||||||
[gpg]
|
[gpg]
|
||||||
error.extract_sign=Die Signatur konnte nicht extrahiert werden
|
error.extract_sign=Die Signatur konnte nicht extrahiert werden
|
||||||
error.generate_hash=Es konnte kein Hash vom Commit generiert werden
|
error.generate_hash=Es konnte kein Hash vom Commit generiert werden
|
||||||
|
error.no_committer_account=Es ist kein Account mit dieser Commiter-Email verbunden
|
||||||
error.no_gpg_keys_found=Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
|
error.no_gpg_keys_found=Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
|
||||||
error.not_signed_commit=Kein signierter Commit
|
error.not_signed_commit=Kein signierter Commit
|
||||||
|
error.failed_retrieval_gpg_keys=Fehler beim Abrufen eines Keys des Commiter-Accounts
|
||||||
|
|
||||||
[units]
|
[units]
|
||||||
|
error.no_unit_allowed_repo=Es konnte kein Bestandteil in dieser Repository gefunden werden auf den der Zugriff erlaubt ist
|
||||||
|
error.unit_not_allowed=Du bist nicht berechtigt diesen Repository-Bestandteil zu benutzen
|
||||||
|
|
||||||
|
|
|
@ -378,7 +378,7 @@ add_new_gpg_key = Add GPG Key
|
||||||
ssh_key_been_used = This public key has already been used.
|
ssh_key_been_used = This public key has already been used.
|
||||||
ssh_key_name_used = A public key with same name already exists.
|
ssh_key_name_used = A public key with same name already exists.
|
||||||
gpg_key_id_used = A public GPG key with same id already exists.
|
gpg_key_id_used = A public GPG key with same id already exists.
|
||||||
gpg_key_email_not_found = The email attached to the GPG key couldn't be found or is not confirmed yet: %s
|
gpg_no_key_email_found = None of the emails attached to the GPG key could be found.
|
||||||
subkeys = Subkeys
|
subkeys = Subkeys
|
||||||
key_id = Key ID
|
key_id = Key ID
|
||||||
key_name = Key Name
|
key_name = Key Name
|
||||||
|
|
|
@ -41,6 +41,7 @@ your_profile=Tu perfil
|
||||||
your_starred=Tus favoritos
|
your_starred=Tus favoritos
|
||||||
your_settings=Tu configuración
|
your_settings=Tu configuración
|
||||||
|
|
||||||
|
|
||||||
activities=Actividad
|
activities=Actividad
|
||||||
issues=Incidencias
|
issues=Incidencias
|
||||||
|
|
||||||
|
@ -580,7 +581,6 @@ settings.wiki_delete_notices_1=- Esto eliminará y deshabilitará la wiki para %
|
||||||
settings.delete=Eliminar este repositorio
|
settings.delete=Eliminar este repositorio
|
||||||
settings.delete_desc=Una vez has eliminado un repositorio, no hay vuelta atrás. Por favor, asegúrate de que es lo que quieres.
|
settings.delete_desc=Una vez has eliminado un repositorio, no hay vuelta atrás. Por favor, asegúrate de que es lo que quieres.
|
||||||
settings.delete_notices_1=- Esta operación <strong>NO PUEDE</strong> revertirse.
|
settings.delete_notices_1=- Esta operación <strong>NO PUEDE</strong> revertirse.
|
||||||
settings.delete_notices_fork_1=- Todos los forks se convertirán en independientes tras el borrado.
|
|
||||||
settings.transfer_owner=Nuevo Propietario
|
settings.transfer_owner=Nuevo Propietario
|
||||||
settings.make_transfer=Transferir
|
settings.make_transfer=Transferir
|
||||||
settings.confirm_delete=Confirmar eliminación
|
settings.confirm_delete=Confirmar eliminación
|
||||||
|
@ -663,7 +663,6 @@ release.ahead=<strong>%d</strong> commits en %s desde esta release
|
||||||
release.source_code=Código Fuente
|
release.source_code=Código Fuente
|
||||||
release.tag_name=Nombre de la etiqueta
|
release.tag_name=Nombre de la etiqueta
|
||||||
release.target=Destino
|
release.target=Destino
|
||||||
release.tag_helper=Escoge una etiqueta o crea una nueva al publicar.
|
|
||||||
release.title=Título
|
release.title=Título
|
||||||
release.content=Contenido
|
release.content=Contenido
|
||||||
release.write=Escribir
|
release.write=Escribir
|
||||||
|
@ -714,7 +713,6 @@ settings.delete_account=Eliminar esta organización
|
||||||
settings.delete_prompt=Esta operación eliminará esta organización de manera permanente, y ¡<strong>NO PUEDE</strong> deshacerse!
|
settings.delete_prompt=Esta operación eliminará esta organización de manera permanente, y ¡<strong>NO PUEDE</strong> deshacerse!
|
||||||
settings.confirm_delete_account=Confirmar eliminación
|
settings.confirm_delete_account=Confirmar eliminación
|
||||||
settings.delete_org_title=Eliminación de la organización
|
settings.delete_org_title=Eliminación de la organización
|
||||||
settings.hooks_desc=Añadir webhooks que serán ejecutados para <strong>todos los repositorios</strong> de esta organización.
|
|
||||||
|
|
||||||
members.membership_visibility=Visibilidad de Membresía:
|
members.membership_visibility=Visibilidad de Membresía:
|
||||||
members.public=Público
|
members.public=Público
|
||||||
|
@ -743,7 +741,6 @@ teams.update_settings=Actualizar configuración
|
||||||
teams.delete_team=Eliminar este equipo
|
teams.delete_team=Eliminar este equipo
|
||||||
teams.add_team_member=Añadir miembro al equipo
|
teams.add_team_member=Añadir miembro al equipo
|
||||||
teams.delete_team_title=Eliminar equipo
|
teams.delete_team_title=Eliminar equipo
|
||||||
teams.delete_team_desc=Este equipo va a ser eliminado, ¿seguro que quieres continuar? Los miembros de este equipo pueden perder acceso a algunos repositorios.
|
|
||||||
teams.read_permission_desc=Este equipo tiene permisos de <strong>Lectura</strong>: sus miembros pueden ver y clonar los repositorios del equipo.
|
teams.read_permission_desc=Este equipo tiene permisos de <strong>Lectura</strong>: sus miembros pueden ver y clonar los repositorios del equipo.
|
||||||
teams.write_permission_desc=Este equipo tiene permisos de <strong>Escritura</strong>: sus miembros pueden leer y hacer push a los repositorios del equipo.
|
teams.write_permission_desc=Este equipo tiene permisos de <strong>Escritura</strong>: sus miembros pueden leer y hacer push a los repositorios del equipo.
|
||||||
teams.admin_permission_desc=Este equipo tiene permisos de <strong>Administración</strong>: sus miembros pueden leer, hacer push y añadir colaboradores a los repositorios del equipo.
|
teams.admin_permission_desc=Este equipo tiene permisos de <strong>Administración</strong>: sus miembros pueden leer, hacer push y añadir colaboradores a los repositorios del equipo.
|
||||||
|
@ -862,7 +859,6 @@ auths.admin_filter=Filtro de aministrador
|
||||||
auths.smtp_auth=Tipo de autenticación SMTP
|
auths.smtp_auth=Tipo de autenticación SMTP
|
||||||
auths.smtpport=Puerto SMTP
|
auths.smtpport=Puerto SMTP
|
||||||
auths.allowed_domains=Dominios Permitidos
|
auths.allowed_domains=Dominios Permitidos
|
||||||
auths.allowed_domains_helper=Deje el campo vacío si no desea restringir ningún dominio. Para restringir más de uno, separe los dominios con una coma ','.
|
|
||||||
auths.enable_tls=Habilitar cifrado TLS
|
auths.enable_tls=Habilitar cifrado TLS
|
||||||
auths.skip_tls_verify=Omitir la verificación TLS
|
auths.skip_tls_verify=Omitir la verificación TLS
|
||||||
auths.pam_service_name=Nombre del Servicio PAM
|
auths.pam_service_name=Nombre del Servicio PAM
|
||||||
|
@ -889,7 +885,6 @@ config.reverse_auth_user=Autenticación Inversa de Usuario
|
||||||
|
|
||||||
config.ssh_config=Configuración SSH
|
config.ssh_config=Configuración SSH
|
||||||
config.ssh_enabled=Habilitado
|
config.ssh_enabled=Habilitado
|
||||||
config.ssh_start_builtin_server=Iniciar servidor integrado
|
|
||||||
config.ssh_domain=Dominio
|
config.ssh_domain=Dominio
|
||||||
config.ssh_port=Puerto
|
config.ssh_port=Puerto
|
||||||
config.ssh_listen_port=Puerto de escucha
|
config.ssh_listen_port=Puerto de escucha
|
||||||
|
|
|
@ -40,6 +40,7 @@ settings=Asetukset
|
||||||
your_profile=Profiilisi
|
your_profile=Profiilisi
|
||||||
your_settings=Asetuksesi
|
your_settings=Asetuksesi
|
||||||
|
|
||||||
|
|
||||||
activities=Toimet
|
activities=Toimet
|
||||||
pull_requests=Pull requestit
|
pull_requests=Pull requestit
|
||||||
issues=Ongelmat
|
issues=Ongelmat
|
||||||
|
@ -610,7 +611,6 @@ release.ahead=<strong>%d</strong> committia kohteeseen %s version jälkeen
|
||||||
release.source_code=Lähdekoodi
|
release.source_code=Lähdekoodi
|
||||||
release.tag_name=Taginimi
|
release.tag_name=Taginimi
|
||||||
release.target=Kohde
|
release.target=Kohde
|
||||||
release.tag_helper=Valitse olemassaoleva tagi, tai luo uusi tagi julkaistaessa.
|
|
||||||
release.title=Otsikko
|
release.title=Otsikko
|
||||||
release.content=Sisältö
|
release.content=Sisältö
|
||||||
release.write=Kirjoita
|
release.write=Kirjoita
|
||||||
|
@ -660,7 +660,6 @@ settings.delete_account=Poista tämä organisaatio
|
||||||
settings.delete_prompt=Organisaatio poistetaan pysyvästi, ja tätä <strong>EI VOI</strong> peruuttaa myöhemmin!
|
settings.delete_prompt=Organisaatio poistetaan pysyvästi, ja tätä <strong>EI VOI</strong> peruuttaa myöhemmin!
|
||||||
settings.confirm_delete_account=Vahvista poisto
|
settings.confirm_delete_account=Vahvista poisto
|
||||||
settings.delete_org_title=Organisaation poistaminen
|
settings.delete_org_title=Organisaation poistaminen
|
||||||
settings.hooks_desc=Lisää webkoukkuja jotka laukeavat <strong>kaikissa repoissa</strong> tässä organisaatiossa.
|
|
||||||
|
|
||||||
members.membership_visibility=Jäsenyyden näkyvyys:
|
members.membership_visibility=Jäsenyyden näkyvyys:
|
||||||
members.public=Julkinen
|
members.public=Julkinen
|
||||||
|
@ -689,7 +688,6 @@ teams.update_settings=Päivitä asetukset
|
||||||
teams.delete_team=Poista tämä ryhmä
|
teams.delete_team=Poista tämä ryhmä
|
||||||
teams.add_team_member=Lisää tiimin jäsen
|
teams.add_team_member=Lisää tiimin jäsen
|
||||||
teams.delete_team_title=Ryhmän poistaminen
|
teams.delete_team_title=Ryhmän poistaminen
|
||||||
teams.delete_team_desc=Kun tämä tiimi poistetaan, tiimin jäsenet voivat menettää pääsyn joihinkin repoihin. Haluatko jatkaa?
|
|
||||||
teams.read_permission_desc=Tämä tiimi myöntää <strong>lukuoikeuden</strong>: jäsenet voivat katsella ja kloonata tiimin repot.
|
teams.read_permission_desc=Tämä tiimi myöntää <strong>lukuoikeuden</strong>: jäsenet voivat katsella ja kloonata tiimin repot.
|
||||||
teams.write_permission_desc=Tämä tiimi myöntää <strong>kirjoitusoikeuden</strong>: jäsenet voivat lukea ja pushata tiimin repoihin.
|
teams.write_permission_desc=Tämä tiimi myöntää <strong>kirjoitusoikeuden</strong>: jäsenet voivat lukea ja pushata tiimin repoihin.
|
||||||
teams.admin_permission_desc=Tämä tiimi myöntää <strong>ylläpito-oikeuden</strong>: jäsenet voivat lukea, pushata, ja lisätä yhteistyökumppaneita tiimin repoihin.
|
teams.admin_permission_desc=Tämä tiimi myöntää <strong>ylläpito-oikeuden</strong>: jäsenet voivat lukea, pushata, ja lisätä yhteistyökumppaneita tiimin repoihin.
|
||||||
|
@ -811,7 +809,6 @@ auths.smtp_auth=SMTP todennustyyppi
|
||||||
auths.smtphost=SMTP isäntä
|
auths.smtphost=SMTP isäntä
|
||||||
auths.smtpport=SMTP portti
|
auths.smtpport=SMTP portti
|
||||||
auths.allowed_domains=Sallitut verkkotunnukset
|
auths.allowed_domains=Sallitut verkkotunnukset
|
||||||
auths.allowed_domains_helper=Jätä tyhjäksi jos et rajoita yhtään verkkotunnusta. Useat verkkotunnukset erotetaan pilkulla ','.
|
|
||||||
auths.enable_tls=Ota käyttöön TLS-salaus
|
auths.enable_tls=Ota käyttöön TLS-salaus
|
||||||
auths.skip_tls_verify=Ohita TLS tarkistaminen
|
auths.skip_tls_verify=Ohita TLS tarkistaminen
|
||||||
auths.pam_service_name=PAM palvelun nimi
|
auths.pam_service_name=PAM palvelun nimi
|
||||||
|
@ -837,7 +834,6 @@ config.reverse_auth_user=Käänteinen todennus käyttäjä
|
||||||
|
|
||||||
config.ssh_config=SSH asetukset
|
config.ssh_config=SSH asetukset
|
||||||
config.ssh_enabled=Käytössä
|
config.ssh_enabled=Käytössä
|
||||||
config.ssh_start_builtin_server=Käynnistä sisäänrakennettu palvelin
|
|
||||||
config.ssh_domain=Verkkotunnus
|
config.ssh_domain=Verkkotunnus
|
||||||
config.ssh_port=Portti
|
config.ssh_port=Portti
|
||||||
config.ssh_listen_port=Kuuntele porttia
|
config.ssh_listen_port=Kuuntele porttia
|
||||||
|
|
|
@ -45,6 +45,7 @@ your_profile=Votre profil
|
||||||
your_starred=Vos favoris
|
your_starred=Vos favoris
|
||||||
your_settings=Vos paramètres
|
your_settings=Vos paramètres
|
||||||
|
|
||||||
|
|
||||||
activities=Activités
|
activities=Activités
|
||||||
pull_requests=Demandes d'ajout
|
pull_requests=Demandes d'ajout
|
||||||
issues=Tickets
|
issues=Tickets
|
||||||
|
@ -269,7 +270,7 @@ form.name_pattern_not_allowed=Motif '%s' interdit pour les noms d'utilisateur.
|
||||||
|
|
||||||
[settings]
|
[settings]
|
||||||
profile=Profil
|
profile=Profil
|
||||||
password=Mot de Passe
|
password=Mot de passe
|
||||||
avatar=Avatar
|
avatar=Avatar
|
||||||
ssh_gpg_keys=Clés SSH / GPG
|
ssh_gpg_keys=Clés SSH / GPG
|
||||||
social=Réseaux Sociaux
|
social=Réseaux Sociaux
|
||||||
|
@ -439,7 +440,7 @@ branches=Branches
|
||||||
tags=Tags
|
tags=Tags
|
||||||
issues=Tickets
|
issues=Tickets
|
||||||
pulls=Demandes d'ajout
|
pulls=Demandes d'ajout
|
||||||
labels=Etiquettes
|
labels=Étiquettes
|
||||||
milestones=Jalons
|
milestones=Jalons
|
||||||
commits=Révisions
|
commits=Révisions
|
||||||
releases=Publications
|
releases=Publications
|
||||||
|
@ -450,7 +451,7 @@ file_permalink=Lien permanent
|
||||||
file_too_large=Ce fichier est trop gros pour être afficher
|
file_too_large=Ce fichier est trop gros pour être afficher
|
||||||
video_not_supported_in_browser=Votre navigateur ne supporte pas le tag video HTML5.
|
video_not_supported_in_browser=Votre navigateur ne supporte pas le tag video HTML5.
|
||||||
stored_lfs=Stocké avec Git LFS
|
stored_lfs=Stocké avec Git LFS
|
||||||
commit_graph=Graphique des Commits
|
commit_graph=Graphique des révisions
|
||||||
|
|
||||||
editor.new_file=Nouveau fichier
|
editor.new_file=Nouveau fichier
|
||||||
editor.upload_file=Téléverser un fichier
|
editor.upload_file=Téléverser un fichier
|
||||||
|
@ -501,7 +502,7 @@ commits.newer=Récemment
|
||||||
|
|
||||||
|
|
||||||
issues.new=Nouveau ticket
|
issues.new=Nouveau ticket
|
||||||
issues.new.labels=Etiquettes
|
issues.new.labels=Étiquettes
|
||||||
issues.new.no_label=Pas d'étiquette
|
issues.new.no_label=Pas d'étiquette
|
||||||
issues.new.clear_labels=Effacer les étiquettes
|
issues.new.clear_labels=Effacer les étiquettes
|
||||||
issues.new.milestone=Jalon
|
issues.new.milestone=Jalon
|
||||||
|
@ -517,8 +518,9 @@ issues.new_label=Nouvelle étiquette
|
||||||
issues.new_label_placeholder=Nom de l'étiquette...
|
issues.new_label_placeholder=Nom de l'étiquette...
|
||||||
issues.create_label=Créer une étiquette
|
issues.create_label=Créer une étiquette
|
||||||
issues.label_templates.title=Charger un ensemble prédéfini d'étiquettes
|
issues.label_templates.title=Charger un ensemble prédéfini d'étiquettes
|
||||||
|
issues.label_templates.info=Il n'y a pas encore d'étiquettes. Vous pouvez cliquer sur le bouton "Nouvelle étiquette" pour en créer une ou en utiliser une prédéfinies ci-dessous.
|
||||||
issues.label_templates.helper=Sélectionnez un ensemble d'étiquettes
|
issues.label_templates.helper=Sélectionnez un ensemble d'étiquettes
|
||||||
issues.label_templates.use=Utilisez ce jeu d'étiquettes
|
issues.label_templates.use=Utiliser ce jeu d'étiquettes
|
||||||
issues.label_templates.fail_to_load_file=Impossible de charger le fichier de modèle étiquette '%s' : %v
|
issues.label_templates.fail_to_load_file=Impossible de charger le fichier de modèle étiquette '%s' : %v
|
||||||
issues.add_label_at=`ajouté le <div class="ui label" style="color: %s" ; background-color: %s">%s</div> label %s`
|
issues.add_label_at=`ajouté le <div class="ui label" style="color: %s" ; background-color: %s">%s</div> label %s`
|
||||||
issues.remove_label_at=`supprimé le <div class="ui label" style="color: %s" ; background-color: %s">%s</div> label %s`
|
issues.remove_label_at=`supprimé le <div class="ui label" style="color: %s" ; background-color: %s">%s</div> label %s`
|
||||||
|
@ -533,7 +535,7 @@ issues.delete_branch_at=`a supprimé la branche <b>%s</b> %s`
|
||||||
issues.open_tab=%d Ouvert
|
issues.open_tab=%d Ouvert
|
||||||
issues.close_tab=%d Fermé
|
issues.close_tab=%d Fermé
|
||||||
issues.filter_label=Étiquette
|
issues.filter_label=Étiquette
|
||||||
issues.filter_label_no_select=Aucun étiquette sélectionnée
|
issues.filter_label_no_select=Aucune étiquette sélectionnée
|
||||||
issues.filter_milestone=Jalon
|
issues.filter_milestone=Jalon
|
||||||
issues.filter_milestone_no_select=Aucun jalon sélectionné
|
issues.filter_milestone_no_select=Aucun jalon sélectionné
|
||||||
issues.filter_assignee=Assigné
|
issues.filter_assignee=Assigné
|
||||||
|
@ -581,14 +583,15 @@ issues.sign_in_require_desc=<a href="%s">Connectez-vous</a> pour rejoindre cette
|
||||||
issues.edit=Modifier
|
issues.edit=Modifier
|
||||||
issues.cancel=Annuler
|
issues.cancel=Annuler
|
||||||
issues.save=Enregistrer
|
issues.save=Enregistrer
|
||||||
issues.label_title=Nom du Label
|
issues.label_title=Nom de l'étiquette
|
||||||
issues.label_color=Couleur du Label
|
issues.label_color=Couleur de l'étiquette
|
||||||
issues.label_count=%d étiquettes
|
issues.label_count=%d étiquettes
|
||||||
issues.label_open_issues=%d tickets ouverts
|
issues.label_open_issues=%d tickets ouverts
|
||||||
issues.label_edit=Éditer
|
issues.label_edit=Éditer
|
||||||
issues.label_delete=Supprimer
|
issues.label_delete=Supprimer
|
||||||
issues.label_modify=Modification du Label
|
issues.label_modify=Modification de l'étiquette
|
||||||
issues.label_deletion=Suppression du Label
|
issues.label_deletion=Suppression de l'étiquette
|
||||||
|
issues.label_deletion_success=L'étiquette a été supprimé avec succès !
|
||||||
issues.label.filter_sort.alphabetically=Par ordre alphabétique
|
issues.label.filter_sort.alphabetically=Par ordre alphabétique
|
||||||
issues.label.filter_sort.reverse_alphabetically=Par ordre alphabétique inversé
|
issues.label.filter_sort.reverse_alphabetically=Par ordre alphabétique inversé
|
||||||
issues.label.filter_sort.by_size=Taille
|
issues.label.filter_sort.by_size=Taille
|
||||||
|
@ -623,7 +626,7 @@ pulls.cannot_auto_merge_desc=Cette demande d'ajout ne peut pas être fusionnée
|
||||||
pulls.cannot_auto_merge_helper=Fusionner manuellement afin de résoudre les conflits.
|
pulls.cannot_auto_merge_helper=Fusionner manuellement afin de résoudre les conflits.
|
||||||
pulls.merge_pull_request=Fusionner la demande d'ajout
|
pulls.merge_pull_request=Fusionner la demande d'ajout
|
||||||
|
|
||||||
milestones.new=Nouveau Jalon
|
milestones.new=Nouveau jalon
|
||||||
milestones.open_tab=%d Ouvert
|
milestones.open_tab=%d Ouvert
|
||||||
milestones.close_tab=%d Fermé
|
milestones.close_tab=%d Fermé
|
||||||
milestones.closed=%s fermé
|
milestones.closed=%s fermé
|
||||||
|
@ -712,9 +715,8 @@ settings.wiki_delete=Effacer les données du Wiki
|
||||||
settings.wiki_delete_desc=Une fois que vous effacez les données du wiki, on ne peut revenir en arrière. Soyez-en sûr.
|
settings.wiki_delete_desc=Une fois que vous effacez les données du wiki, on ne peut revenir en arrière. Soyez-en sûr.
|
||||||
settings.wiki_delete_notices_1=- Cela va supprimer et désactiver le wiki pour %s
|
settings.wiki_delete_notices_1=- Cela va supprimer et désactiver le wiki pour %s
|
||||||
settings.delete=Supprimer ce dépôt
|
settings.delete=Supprimer ce dépôt
|
||||||
settings.delete_desc=Attention, cette action est action irréversible. Soyez sûr de vous.
|
settings.delete_desc=La suppression d'un dépôt est irréversible. Soyez sûr de vous.
|
||||||
settings.delete_notices_1=- Cette opération <strong>ne peut pas </strong> être annulée.
|
settings.delete_notices_1=- Cette opération <strong>ne peut pas </strong> être annulée.
|
||||||
settings.delete_notices_fork_1=- Toutes les bifurcations deviendront indépendantes après l’effacement.
|
|
||||||
settings.transfer_owner=Nouveau propriétaire
|
settings.transfer_owner=Nouveau propriétaire
|
||||||
settings.make_transfer=Transférer
|
settings.make_transfer=Transférer
|
||||||
settings.confirm_delete=Confirmer la suppression
|
settings.confirm_delete=Confirmer la suppression
|
||||||
|
@ -811,7 +813,6 @@ release.ahead=<strong>%d</strong> révisions sur %s depuis cette publication
|
||||||
release.source_code=Code source
|
release.source_code=Code source
|
||||||
release.tag_name=Nom du tag
|
release.tag_name=Nom du tag
|
||||||
release.target=Cible
|
release.target=Cible
|
||||||
release.tag_helper=Choisissez un tag existant ou créez-en un nouveau lors de la publication.
|
|
||||||
release.title=Titre
|
release.title=Titre
|
||||||
release.content=Contenu
|
release.content=Contenu
|
||||||
release.write=Écrire
|
release.write=Écrire
|
||||||
|
@ -865,7 +866,6 @@ settings.delete_account=Supprimer cette organisation
|
||||||
settings.delete_prompt=Cela supprimera cette organisation définitivement. Cette opération est <strong>IRRÉVERSIBLE</strong> !
|
settings.delete_prompt=Cela supprimera cette organisation définitivement. Cette opération est <strong>IRRÉVERSIBLE</strong> !
|
||||||
settings.confirm_delete_account=Confirmez la suppression
|
settings.confirm_delete_account=Confirmez la suppression
|
||||||
settings.delete_org_title=Suppression d'organisation
|
settings.delete_org_title=Suppression d'organisation
|
||||||
settings.hooks_desc=Ajoute des webhooks qui seront activés pour <strong>tous les dépôts</strong> de cette organisation.
|
|
||||||
|
|
||||||
members.membership_visibility=Visibilité des membres:
|
members.membership_visibility=Visibilité des membres:
|
||||||
members.public=Public
|
members.public=Public
|
||||||
|
@ -882,10 +882,10 @@ members.invite_now=Envoyer une invitation
|
||||||
|
|
||||||
teams.join=Rejoindre
|
teams.join=Rejoindre
|
||||||
teams.leave=Quitter
|
teams.leave=Quitter
|
||||||
teams.read_access=Accès en Lecture
|
teams.read_access=Accès en lecture
|
||||||
teams.read_access_helper=Cette équipe aura la possibilité de voir et cloner ses dépôts.
|
teams.read_access_helper=Cette équipe aura la possibilité de voir et cloner ses dépôts.
|
||||||
teams.write_access=Accès en Écriture
|
teams.write_access=Accès en écriture
|
||||||
teams.admin_access=Accès Administrateur
|
teams.admin_access=Accès administrateur
|
||||||
teams.no_desc=Aucune description
|
teams.no_desc=Aucune description
|
||||||
teams.settings=Paramètres
|
teams.settings=Paramètres
|
||||||
teams.owners_permission_desc=Les propriétaires possèdent <strong>les droits d'administrateur</strong> et disposent d'un accès complet à <strong>tous les dépôts</strong> de l'organisation.
|
teams.owners_permission_desc=Les propriétaires possèdent <strong>les droits d'administrateur</strong> et disposent d'un accès complet à <strong>tous les dépôts</strong> de l'organisation.
|
||||||
|
@ -894,7 +894,6 @@ teams.update_settings=Valider
|
||||||
teams.delete_team=Supprimer cette Équipe
|
teams.delete_team=Supprimer cette Équipe
|
||||||
teams.add_team_member=Ajouter un Membre
|
teams.add_team_member=Ajouter un Membre
|
||||||
teams.delete_team_title=Suppression de l'équipe
|
teams.delete_team_title=Suppression de l'équipe
|
||||||
teams.delete_team_desc=Cette équipe sera supprimée. Les membres pourraient perdre leurs accès à certains dépôts.
|
|
||||||
teams.delete_team_success=L’équipe a été supprimé.
|
teams.delete_team_success=L’équipe a été supprimé.
|
||||||
teams.read_permission_desc=Cette équipe permet l'accès en <strong>lecture</strong> : les membres peuvent voir et dupliquer ses dépôts.
|
teams.read_permission_desc=Cette équipe permet l'accès en <strong>lecture</strong> : les membres peuvent voir et dupliquer ses dépôts.
|
||||||
teams.write_permission_desc=Cette équipe permet l'accès en <strong>écriture</strong> : les membres peuvent participer à ses dépôts.
|
teams.write_permission_desc=Cette équipe permet l'accès en <strong>écriture</strong> : les membres peuvent participer à ses dépôts.
|
||||||
|
@ -979,7 +978,7 @@ users.edit_account=Modifier le Compte
|
||||||
users.max_repo_creation=Nombre maximum de dépôts créés
|
users.max_repo_creation=Nombre maximum de dépôts créés
|
||||||
users.max_repo_creation_desc=(Mettre à -1 pour utiliser la limite globale par défaut)
|
users.max_repo_creation_desc=(Mettre à -1 pour utiliser la limite globale par défaut)
|
||||||
users.is_admin=Ce compte possède un niveau d'accès administrateur
|
users.is_admin=Ce compte possède un niveau d'accès administrateur
|
||||||
users.allow_import_local=Ce compte dispose des permissions nécessaire à l'import des dépôts locaux
|
users.allow_import_local=Ce compte a l'autorisation d'importer des dépôts locaux
|
||||||
users.allow_create_organization=Ce compte a l'autorisation de créer des organisations
|
users.allow_create_organization=Ce compte a l'autorisation de créer des organisations
|
||||||
users.update_profile=Mettre à jour le profil
|
users.update_profile=Mettre à jour le profil
|
||||||
users.delete_account=Supprimer ce Compte
|
users.delete_account=Supprimer ce Compte
|
||||||
|
@ -1024,7 +1023,6 @@ auths.smtp_auth=Type d'authentification SMTP
|
||||||
auths.smtphost=Hôte SMTP
|
auths.smtphost=Hôte SMTP
|
||||||
auths.smtpport=Port SMTP
|
auths.smtpport=Port SMTP
|
||||||
auths.allowed_domains=Domaines autorisés
|
auths.allowed_domains=Domaines autorisés
|
||||||
auths.allowed_domains_helper=Laissez-le vide pour ne pas restreindre de domaines. Plusieurs domaines doivent être séparés par une virgule «, ».
|
|
||||||
auths.enable_tls=Activer le Chiffrement TLS
|
auths.enable_tls=Activer le Chiffrement TLS
|
||||||
auths.skip_tls_verify=Ne pas vérifier TLS
|
auths.skip_tls_verify=Ne pas vérifier TLS
|
||||||
auths.pam_service_name=Nom du Service PAM
|
auths.pam_service_name=Nom du Service PAM
|
||||||
|
@ -1034,7 +1032,7 @@ auths.activated=Authentification activée
|
||||||
auths.deletion_success=L'authentification a été supprimée avec succès !
|
auths.deletion_success=L'authentification a été supprimée avec succès !
|
||||||
auths.login_source_exist=La source d'authentification '%s' existe déjà.
|
auths.login_source_exist=La source d'authentification '%s' existe déjà.
|
||||||
|
|
||||||
config.server_config=Configuration du Serveur
|
config.server_config=Configuration du serveur
|
||||||
config.app_name=Nom de l'application
|
config.app_name=Nom de l'application
|
||||||
config.app_ver=Version de l'application
|
config.app_ver=Version de l'application
|
||||||
config.app_url=URL de l'application
|
config.app_url=URL de l'application
|
||||||
|
@ -1053,7 +1051,6 @@ config.reverse_auth_user=Annuler l'Authentification de l'Utilisateur
|
||||||
|
|
||||||
config.ssh_config=Configuration SSH
|
config.ssh_config=Configuration SSH
|
||||||
config.ssh_enabled=Activé
|
config.ssh_enabled=Activé
|
||||||
config.ssh_start_builtin_server=Démarrer le serveur intégré
|
|
||||||
config.ssh_domain=Domaine
|
config.ssh_domain=Domaine
|
||||||
config.ssh_port=Port
|
config.ssh_port=Port
|
||||||
config.ssh_listen_port=Port d'écoute
|
config.ssh_listen_port=Port d'écoute
|
||||||
|
@ -1063,7 +1060,7 @@ config.ssh_keygen_path=Chemin vers le générateur de clefs ("ssh-keygen")
|
||||||
config.ssh_minimum_key_size_check=Vérification de la longueur de clé minimale
|
config.ssh_minimum_key_size_check=Vérification de la longueur de clé minimale
|
||||||
config.ssh_minimum_key_sizes=Tailles de clé minimales
|
config.ssh_minimum_key_sizes=Tailles de clé minimales
|
||||||
|
|
||||||
config.db_config=Configuration de la Base de Données
|
config.db_config=Configuration de la base de données
|
||||||
config.db_type=Type
|
config.db_type=Type
|
||||||
config.db_host=Hôte
|
config.db_host=Hôte
|
||||||
config.db_name=Nom
|
config.db_name=Nom
|
||||||
|
@ -1073,7 +1070,7 @@ config.db_ssl_mode_helper=("postgres" uniquement)
|
||||||
config.db_path=Emplacement
|
config.db_path=Emplacement
|
||||||
config.db_path_helper=(pour « sqlite3 » et « TIDB »)
|
config.db_path_helper=(pour « sqlite3 » et « TIDB »)
|
||||||
|
|
||||||
config.service_config=Configuration du Service
|
config.service_config=Configuration du service
|
||||||
config.register_email_confirm=Nécessite une confirmation par e-mail
|
config.register_email_confirm=Nécessite une confirmation par e-mail
|
||||||
config.disable_register=Désactiver les inscriptions
|
config.disable_register=Désactiver les inscriptions
|
||||||
config.show_registration_button=Afficher le bouton d'enregistrement
|
config.show_registration_button=Afficher le bouton d'enregistrement
|
||||||
|
@ -1101,7 +1098,7 @@ config.test_mail_sent=Un e-mail de test à été envoyé à '%s'.
|
||||||
config.oauth_config=Configuration OAuth
|
config.oauth_config=Configuration OAuth
|
||||||
config.oauth_enabled=Activé
|
config.oauth_enabled=Activé
|
||||||
|
|
||||||
config.cache_config=Configuration du Cache
|
config.cache_config=Configuration du cache
|
||||||
config.cache_adapter=Adaptateur du Cache
|
config.cache_adapter=Adaptateur du Cache
|
||||||
config.cache_interval=Intervales du Cache
|
config.cache_interval=Intervales du Cache
|
||||||
config.cache_conn=Liaison du Cache
|
config.cache_conn=Liaison du Cache
|
||||||
|
@ -1133,7 +1130,7 @@ config.git_clone_timeout=Délai imparti pour l'opération "Clone
|
||||||
config.git_pull_timeout=Délai imparti pour l'opération "Pull
|
config.git_pull_timeout=Délai imparti pour l'opération "Pull
|
||||||
config.git_gc_timeout=Délai imparti pour l'opération "GC
|
config.git_gc_timeout=Délai imparti pour l'opération "GC
|
||||||
|
|
||||||
config.log_config=Configuration du Journal
|
config.log_config=Configuration du journal
|
||||||
config.log_mode=Mode du journal
|
config.log_mode=Mode du journal
|
||||||
|
|
||||||
monitor.cron=Tâches Cron
|
monitor.cron=Tâches Cron
|
||||||
|
@ -1141,10 +1138,10 @@ monitor.name=Nom
|
||||||
monitor.schedule=Planification
|
monitor.schedule=Planification
|
||||||
monitor.next=Suivant
|
monitor.next=Suivant
|
||||||
monitor.previous=Précédent
|
monitor.previous=Précédent
|
||||||
monitor.execute_times=Nombre d'Éxécutions
|
monitor.execute_times=Nombre d'exécutions
|
||||||
monitor.process=Processus en cours d'éxécution
|
monitor.process=Processus en cours d'exécution
|
||||||
monitor.desc=Description
|
monitor.desc=Description
|
||||||
monitor.start=Heure de Démarrage
|
monitor.start=Heure de démarrage
|
||||||
monitor.execute_time=Heure d'Éxécution
|
monitor.execute_time=Heure d'Éxécution
|
||||||
|
|
||||||
notices.system_notice_list=Notes Systèmes
|
notices.system_notice_list=Notes Systèmes
|
||||||
|
|
|
@ -46,6 +46,12 @@ your_profile=Saját Profil
|
||||||
your_starred=Csillagozottjaid
|
your_starred=Csillagozottjaid
|
||||||
your_settings=Beállításaid
|
your_settings=Beállításaid
|
||||||
|
|
||||||
|
all=Összes
|
||||||
|
sources=Források
|
||||||
|
mirrors=Tükrök
|
||||||
|
collaborative=Együttműködés
|
||||||
|
forks=Másolatok
|
||||||
|
|
||||||
activities=Tevékenységek
|
activities=Tevékenységek
|
||||||
pull_requests=Egyesítési Kérések
|
pull_requests=Egyesítési Kérések
|
||||||
issues=Hibajegyek
|
issues=Hibajegyek
|
||||||
|
@ -86,7 +92,7 @@ domain_helper=Ez befolyásolja az SSH klónozási URL-jeit.
|
||||||
ssh_port=SSH port
|
ssh_port=SSH port
|
||||||
ssh_port_helper=SSH port amit a szervered használni fog, vagy hagyd üresen a kikapcsoláshoz.
|
ssh_port_helper=SSH port amit a szervered használni fog, vagy hagyd üresen a kikapcsoláshoz.
|
||||||
http_port=HTTP port
|
http_port=HTTP port
|
||||||
http_port_helper=Ezen a porton érhető el az alkalmazás.
|
http_port_helper=Ezen a porton érhető el az alkalmazás webfelülete.
|
||||||
app_url=Alkalmazás URL-je
|
app_url=Alkalmazás URL-je
|
||||||
app_url_helper=Ez hatással van a HTTP/HTTPS-klón URL és néhány E-Mail értesítésre.
|
app_url_helper=Ez hatással van a HTTP/HTTPS-klón URL és néhány E-Mail értesítésre.
|
||||||
log_root_path=Naplófájl elérési útja
|
log_root_path=Naplófájl elérési útja
|
||||||
|
@ -251,6 +257,7 @@ username_been_taken=Felhasználónév már foglalt.
|
||||||
repo_name_been_taken=A tároló neve már foglalt.
|
repo_name_been_taken=A tároló neve már foglalt.
|
||||||
org_name_been_taken=A szervezet neve már foglalt.
|
org_name_been_taken=A szervezet neve már foglalt.
|
||||||
team_name_been_taken=A csoportnév már foglalt.
|
team_name_been_taken=A csoportnév már foglalt.
|
||||||
|
team_no_units_error=A csoportnak legalább egy egységet engedélyezni kell.
|
||||||
email_been_used=Az E-mail már használatban van.
|
email_been_used=Az E-mail már használatban van.
|
||||||
openid_been_used=Az OpenID cím "%s" már használatban van.
|
openid_been_used=Az OpenID cím "%s" már használatban van.
|
||||||
username_password_incorrect=Helytelen felhasználónév vagy jelszó.
|
username_password_incorrect=Helytelen felhasználónév vagy jelszó.
|
||||||
|
@ -386,7 +393,7 @@ valid_until=Érvényesség vége:
|
||||||
valid_forever=Érvényes örökre
|
valid_forever=Érvényes örökre
|
||||||
last_used=Utolsó használat:
|
last_used=Utolsó használat:
|
||||||
no_activity=Mostanság nem aktívan használt
|
no_activity=Mostanság nem aktívan használt
|
||||||
key_state_desc=Ez a kulcs volt használva az elmúlt 7 napban
|
key_state_desc=Ezt a kulcsot már használta az elmúlt 7 napban
|
||||||
token_state_desc=Ez a token volt használva az elmúlt 7 napban
|
token_state_desc=Ez a token volt használva az elmúlt 7 napban
|
||||||
show_openid=Megjelenítés a profilon
|
show_openid=Megjelenítés a profilon
|
||||||
hide_openid=Elrejtés a profilról
|
hide_openid=Elrejtés a profilról
|
||||||
|
@ -491,6 +498,7 @@ migrate.lfs_mirror_unsupported=LFS objektumok tükrözése nem támogatott - has
|
||||||
|
|
||||||
mirror_from=tükörképe a:
|
mirror_from=tükörképe a:
|
||||||
forked_from=másolva innen:
|
forked_from=másolva innen:
|
||||||
|
fork_from_self=Nem fork-olhat önmaga által birtokolt tárolót!
|
||||||
copy_link=Másolás
|
copy_link=Másolás
|
||||||
copy_link_success=Másolva!
|
copy_link_success=Másolva!
|
||||||
copy_link_error=Nyomja meg a ⌘-C vagy Ctrl-C gombokat a másoláshoz
|
copy_link_error=Nyomja meg a ⌘-C vagy Ctrl-C gombokat a másoláshoz
|
||||||
|
@ -504,7 +512,7 @@ download_archive=Töltse le ezt a tárolót
|
||||||
|
|
||||||
no_desc=Nincs leírás
|
no_desc=Nincs leírás
|
||||||
quick_guide=Gyors útmutató
|
quick_guide=Gyors útmutató
|
||||||
clone_this_repo=A tároló másolása
|
clone_this_repo=Tároló klónozása
|
||||||
create_new_repo_command=Egy új tároló létrehozása a parancssorból
|
create_new_repo_command=Egy új tároló létrehozása a parancssorból
|
||||||
push_exist_repo=Meglévő tároló feltöltése parancssorból
|
push_exist_repo=Meglévő tároló feltöltése parancssorból
|
||||||
bare_message=A tároló nem tartalmaz semmit, üres.
|
bare_message=A tároló nem tartalmaz semmit, üres.
|
||||||
|
@ -567,7 +575,7 @@ editor.file_already_exists=A(z) '%s' nevű fájl már létezik a tárolóban.
|
||||||
editor.no_changes_to_show=Nincsen megjeleníthető változás.
|
editor.no_changes_to_show=Nincsen megjeleníthető változás.
|
||||||
editor.fail_to_update_file=Nem sikerült létrehozni/módosítani a következő fájlt: '%s' A hiba oka: %v
|
editor.fail_to_update_file=Nem sikerült létrehozni/módosítani a következő fájlt: '%s' A hiba oka: %v
|
||||||
editor.add_subdir=Alkönyvtár hozzáadása...
|
editor.add_subdir=Alkönyvtár hozzáadása...
|
||||||
editor.unable_to_upload_files=Nem sikerült feltölteni a fájlokat a következőre: '%s' A hiba oka: %v
|
editor.unable_to_upload_files=Nem sikerült feltölteni a fájlokat a "%s" hiba: %v
|
||||||
editor.upload_files_to_dir=Fájlok feltöltése a következőre: '%s'
|
editor.upload_files_to_dir=Fájlok feltöltése a következőre: '%s'
|
||||||
editor.cannot_commit_to_protected_branch=Nem lehet a következő védett ágra commit-olni: '%s'.
|
editor.cannot_commit_to_protected_branch=Nem lehet a következő védett ágra commit-olni: '%s'.
|
||||||
|
|
||||||
|
@ -581,6 +589,8 @@ commits.message=Üzenet
|
||||||
commits.date=Dátum
|
commits.date=Dátum
|
||||||
commits.older=Régebbi
|
commits.older=Régebbi
|
||||||
commits.newer=Újabb
|
commits.newer=Újabb
|
||||||
|
commits.signed_by=Aláírta
|
||||||
|
commits.gpg_key_id=GPG kulcs azonosító
|
||||||
|
|
||||||
ext_issues=Külső hibajegyek
|
ext_issues=Külső hibajegyek
|
||||||
ext_issues.desc=Külső Hibajegy kezelő: link egy külső hibajegy kezelő rendszer oldalára
|
ext_issues.desc=Külső Hibajegy kezelő: link egy külső hibajegy kezelő rendszer oldalára
|
||||||
|
@ -770,7 +780,7 @@ wiki.pages=Oldalak
|
||||||
wiki.last_updated=Utoljára módosítva: %s
|
wiki.last_updated=Utoljára módosítva: %s
|
||||||
|
|
||||||
settings=Beállítások
|
settings=Beállítások
|
||||||
settings.desc=A beállítások menüpontban állíthatók a tároló paraméterei
|
settings.desc=A beállítások menüpontban állítható a tároló paraméterei
|
||||||
settings.options=Beállítások
|
settings.options=Beállítások
|
||||||
settings.collaboration=Együttműködés
|
settings.collaboration=Együttműködés
|
||||||
settings.collaboration.admin=Rendszergazda
|
settings.collaboration.admin=Rendszergazda
|
||||||
|
@ -809,9 +819,9 @@ settings.new_owner_has_same_repo=Az új tulajdonos már rendelkezik ilyen nevű
|
||||||
settings.convert=Hagyományos tárolóvá alakítás
|
settings.convert=Hagyományos tárolóvá alakítás
|
||||||
settings.convert_desc=Átalakíthatja ezt a tükörtárolót hagyományos tárolóvá. A művelet nem visszavonható.
|
settings.convert_desc=Átalakíthatja ezt a tükörtárolót hagyományos tárolóvá. A művelet nem visszavonható.
|
||||||
settings.convert_notices_1=- Ez a művelet át fogja konvertálni ezt a tükör-tárolót egy rendes tárolóvá, és nem lehet visszavonni.
|
settings.convert_notices_1=- Ez a művelet át fogja konvertálni ezt a tükör-tárolót egy rendes tárolóvá, és nem lehet visszavonni.
|
||||||
settings.convert_confirm=Konvertálás Megerősítése
|
settings.convert_confirm=Átalakítás Megerősítése
|
||||||
settings.convert_succeed=A tárolót egy rendes tárolóvá kell konvertálni.
|
settings.convert_succeed=A tárolót egy rendes tárolóvá kell konvertálni.
|
||||||
settings.transfer=Tulajdonosi jog átadása
|
settings.transfer=Tulajdonjog átadása
|
||||||
settings.transfer_desc=A tároló tulajdonának átruházása egy másik felhasználóra, vagy egy szervezetre ahol rendszergazdai jogai van.
|
settings.transfer_desc=A tároló tulajdonának átruházása egy másik felhasználóra, vagy egy szervezetre ahol rendszergazdai jogai van.
|
||||||
settings.transfer_notices_1=- El fogja veszteni a hozzáférését, ha az új tulajdonos egy egyéni felhasználó.
|
settings.transfer_notices_1=- El fogja veszteni a hozzáférését, ha az új tulajdonos egy egyéni felhasználó.
|
||||||
settings.transfer_notices_2=- Megmarad a hozzáférése, ha az új tulajdonos egy szervezet és te az egyik tulajdonosa vagy.
|
settings.transfer_notices_2=- Megmarad a hozzáférése, ha az új tulajdonos egy szervezet és te az egyik tulajdonosa vagy.
|
||||||
|
@ -824,7 +834,7 @@ settings.delete=A tároló törlése
|
||||||
settings.delete_desc=Ha egyszer letöröl egy tárolót, azt nem lehet visszavonni. Bizonyosodjon meg benne, hogy ezt szeretné.
|
settings.delete_desc=Ha egyszer letöröl egy tárolót, azt nem lehet visszavonni. Bizonyosodjon meg benne, hogy ezt szeretné.
|
||||||
settings.delete_notices_1=- Ezt a műveletet <strong>NEM</strong> lehet visszavonni.
|
settings.delete_notices_1=- Ezt a műveletet <strong>NEM</strong> lehet visszavonni.
|
||||||
settings.delete_notices_2=- Ez a művelet véglegesen törölni fog mindent ami a tárolóhoz tartozik, például kódot, hibajegyeket, hozzászólásokat, Wiki oldalakat és a közreműködők jogait.
|
settings.delete_notices_2=- Ez a művelet véglegesen törölni fog mindent ami a tárolóhoz tartozik, például kódot, hibajegyeket, hozzászólásokat, Wiki oldalakat és a közreműködők jogait.
|
||||||
settings.delete_notices_fork_1=- Minden másolat önállóvá válik a törlés után.
|
settings.delete_notices_fork_1=- Minden tároló másolat önállóvá válik a törlés után.
|
||||||
settings.deletion_success=A tároló törölve lett.
|
settings.deletion_success=A tároló törölve lett.
|
||||||
settings.update_settings_success=A tároló beállításai firssítve lettek.
|
settings.update_settings_success=A tároló beállításai firssítve lettek.
|
||||||
settings.transfer_owner=Új tulajdonos
|
settings.transfer_owner=Új tulajdonos
|
||||||
|
@ -874,14 +884,14 @@ settings.event_create_desc=Ág vagy címke létrehozva
|
||||||
settings.event_pull_request=Egyesítési Kérés
|
settings.event_pull_request=Egyesítési Kérés
|
||||||
settings.event_pull_request_desc=Egyesítési kérés megnyitva, lecsukva, újranyitva, szerkesztve, hozzárendelve, senkihez sem rendelve, címke frissítve, címke törölve vagy szinkronizálva.
|
settings.event_pull_request_desc=Egyesítési kérés megnyitva, lecsukva, újranyitva, szerkesztve, hozzárendelve, senkihez sem rendelve, címke frissítve, címke törölve vagy szinkronizálva.
|
||||||
settings.event_push=Feltöltés
|
settings.event_push=Feltöltés
|
||||||
settings.event_push_desc=Git push egy tárolóhoz
|
settings.event_push_desc=Push-olás egy tárolóba
|
||||||
settings.active=Aktív
|
settings.active=Aktív
|
||||||
settings.active_helper=Az információ az eseményről, amely miatt lefutott is el lesz küldve.
|
settings.active_helper=Az információ az eseményről, amely miatt lefutott is el lesz küldve.
|
||||||
settings.add_hook_success=Új Webhook hozzáadva.
|
settings.add_hook_success=Új Webhook hozzáadva.
|
||||||
settings.update_webhook=Webhook frissítése
|
settings.update_webhook=Webhook frissítése
|
||||||
settings.update_hook_success=A Webhook frissítve.
|
settings.update_hook_success=A Webhook frissítve.
|
||||||
settings.delete_webhook=Webhook törlése
|
settings.delete_webhook=Webhook törlése
|
||||||
settings.recent_deliveries=Közelmúltbeli küldések
|
settings.recent_deliveries=Legutóbbi Küldések
|
||||||
settings.hook_type=Hook típusa
|
settings.hook_type=Hook típusa
|
||||||
settings.add_slack_hook_desc=<a href="%s">Slack</a> integráció hozzáadása a tárolójához.
|
settings.add_slack_hook_desc=<a href="%s">Slack</a> integráció hozzáadása a tárolójához.
|
||||||
settings.slack_token=Token
|
settings.slack_token=Token
|
||||||
|
@ -893,7 +903,7 @@ settings.deploy_key_desc=A Deploy kulcsoknak csak olvasási joga van. Nem ugyan
|
||||||
settings.no_deploy_keys=Még nem adott hozzá egyetlen Deploy kulcsot sem.
|
settings.no_deploy_keys=Még nem adott hozzá egyetlen Deploy kulcsot sem.
|
||||||
settings.title=Cím
|
settings.title=Cím
|
||||||
settings.deploy_key_content=Tartalom
|
settings.deploy_key_content=Tartalom
|
||||||
settings.key_been_used=Deploy kulcs tartalma használva lett.
|
settings.key_been_used=Deploy kulcs tartalma már fel lett használva.
|
||||||
settings.key_name_used=Ezzel a névvel már létezik Deploy kulcs.
|
settings.key_name_used=Ezzel a névvel már létezik Deploy kulcs.
|
||||||
settings.add_key_success=Az új Deploy kulcs '%s' sikeresen hozzáadva!
|
settings.add_key_success=Az új Deploy kulcs '%s' sikeresen hozzáadva!
|
||||||
settings.deploy_key_deletion=Telepítési kulcs törlése
|
settings.deploy_key_deletion=Telepítési kulcs törlése
|
||||||
|
@ -1076,8 +1086,8 @@ dashboard.delete_inactivate_accounts=Minden inaktív fiók törlése
|
||||||
dashboard.delete_inactivate_accounts_success=Minden inaktív fiók törölve.
|
dashboard.delete_inactivate_accounts_success=Minden inaktív fiók törölve.
|
||||||
dashboard.delete_repo_archives=Összes archív tároló törlése
|
dashboard.delete_repo_archives=Összes archív tároló törlése
|
||||||
dashboard.delete_repo_archives_success=Az összes archivált tároló törölve lett.
|
dashboard.delete_repo_archives_success=Az összes archivált tároló törölve lett.
|
||||||
dashboard.delete_missing_repos=Az összes olyan tároló bejegyzés törlése, amiknek a kapcsolódó GIT fájljai elvesztek
|
dashboard.delete_missing_repos=Az összes tárolóban az elveszett Git fájl rekordok törlése
|
||||||
dashboard.delete_missing_repos_success=Az összes tároló bejegyzés törölve, amiknek a kapcsolódó GIT fájljai elvesztek.
|
dashboard.delete_missing_repos_success=Az összes tároló bejegyzés törölve, amiknek a kapcsolódó Git fájljai elvesztek.
|
||||||
dashboard.git_gc_repos=Memóriaszemét-gyűjtő (GC) futtatása az összes tárolón
|
dashboard.git_gc_repos=Memóriaszemét-gyűjtő (GC) futtatása az összes tárolón
|
||||||
dashboard.git_gc_repos_success=Minden tárolón befejezte a memóriaszemét-gyűjtő (GC) a futását.
|
dashboard.git_gc_repos_success=Minden tárolón befejezte a memóriaszemét-gyűjtő (GC) a futását.
|
||||||
dashboard.resync_all_sshkeys=A '.ssh/authorized_keys' fájl újraírása (a Gitea SSH publikus kulcsaival)
|
dashboard.resync_all_sshkeys=A '.ssh/authorized_keys' fájl újraírása (a Gitea SSH publikus kulcsaival)
|
||||||
|
@ -1085,14 +1095,14 @@ dashboard.resync_all_sshkeys_success=Minden kulcs újraírva.
|
||||||
dashboard.resync_all_hooks=pre-receive, update és post-receive hook-ok újraszinkronizálása az összes tárolóban.
|
dashboard.resync_all_hooks=pre-receive, update és post-receive hook-ok újraszinkronizálása az összes tárolóban.
|
||||||
dashboard.resync_all_hooks_success=Az összes tároló pre-receive, update és post-receive hook-ja szinkronizálva lett.
|
dashboard.resync_all_hooks_success=Az összes tároló pre-receive, update és post-receive hook-ja szinkronizálva lett.
|
||||||
dashboard.reinit_missing_repos=Az összes Git tároló újra-inicializálása amihez léteznek bejegyzések
|
dashboard.reinit_missing_repos=Az összes Git tároló újra-inicializálása amihez léteznek bejegyzések
|
||||||
dashboard.reinit_missing_repos_success=Az összes Git tároló amihez létezett bejegyzés újra lett szinkronizálva.
|
dashboard.reinit_missing_repos_success=Az összes Git tároló amihez létezett bejegyzés újra lett iniciaizálva.
|
||||||
dashboard.sync_external_users=Külső felhasználói adatok szinkronizálása
|
dashboard.sync_external_users=Külső felhasználói adatok szinkronizálása
|
||||||
dashboard.sync_external_users_started=Külső felhasználó szinkronizálása elkezdődött
|
dashboard.sync_external_users_started=Külső felhasználó szinkronizálása elkezdődött
|
||||||
dashboard.server_uptime=Kiszolgáló futási ideje
|
dashboard.server_uptime=Kiszolgáló futási ideje
|
||||||
dashboard.current_goroutine=Aktuális Gorutinok
|
dashboard.current_goroutine=Jelenlegi Goroutinok
|
||||||
dashboard.current_memory_usage=Jelenlegi memória használat
|
dashboard.current_memory_usage=Jelenlegi memória használat
|
||||||
dashboard.total_memory_allocated=Összes lefoglalt memória
|
dashboard.total_memory_allocated=Összes lefoglalt memória
|
||||||
dashboard.memory_obtained=Memória Megszerezve
|
dashboard.memory_obtained=Megszerzett Memória
|
||||||
dashboard.pointer_lookup_times=Pointer Lookup Idők
|
dashboard.pointer_lookup_times=Pointer Lookup Idők
|
||||||
dashboard.memory_allocate_times=Memória Foglalási Idők
|
dashboard.memory_allocate_times=Memória Foglalási Idők
|
||||||
dashboard.memory_free_times=Memória Felszabadítási Idők
|
dashboard.memory_free_times=Memória Felszabadítási Idők
|
||||||
|
@ -1146,8 +1156,8 @@ users.allow_import_local=Ez a fiók importálhat helyi tárolókat
|
||||||
users.allow_create_organization=Ez a fiók létrehozhat szervezeteket
|
users.allow_create_organization=Ez a fiók létrehozhat szervezeteket
|
||||||
users.update_profile=Fiók profiljának frissítése
|
users.update_profile=Fiók profiljának frissítése
|
||||||
users.delete_account=A fiók törlése
|
users.delete_account=A fiók törlése
|
||||||
users.still_own_repo=Ennek a felhasználónak legalább egy tárolója van még, le kell törölnöd, vagy valakinek átadnod.
|
users.still_own_repo=Ennek a felhasználónak legalább egy tárolója van még, le kell törölnie, vagy valakinek átadnia.
|
||||||
users.still_has_org=Ez a felhasználó még mindig tagja legalább egy szervezetnek, távoznia kell onnan, vagy a szervezetet törölni.
|
users.still_has_org=Ez a felhasználó még mindig tagja legalább egy szervezetnek, távoznia kell onnan, vagy a szervezetet előbb törölni kell.
|
||||||
users.deletion_success=Fiók sikeresen törölve.
|
users.deletion_success=Fiók sikeresen törölve.
|
||||||
|
|
||||||
orgs.org_manage_panel=Szervezetek kezelése
|
orgs.org_manage_panel=Szervezetek kezelése
|
||||||
|
@ -1229,7 +1239,7 @@ auths.update_success=A hitelesítési mód beállításai frissítve lettek.
|
||||||
auths.update=Hitelesítési forrás frissítése
|
auths.update=Hitelesítési forrás frissítése
|
||||||
auths.delete=A hitelesítési forrás törlése
|
auths.delete=A hitelesítési forrás törlése
|
||||||
auths.delete_auth_title=Hitelesítési forrás törlése
|
auths.delete_auth_title=Hitelesítési forrás törlése
|
||||||
auths.delete_auth_desc=A hitelesítési mód törlésre kerül, biztosan folytatni szeretné?
|
auths.delete_auth_desc=A hitelesítési forrás törlésre kerül, biztosan folytatni szeretné?
|
||||||
auths.still_in_used=A hitelesítési mód még használatban van, mielőtt törölné válasszon más hitelesítési módot az érintett fiókokhoz, vagy törölje őket.
|
auths.still_in_used=A hitelesítési mód még használatban van, mielőtt törölné válasszon más hitelesítési módot az érintett fiókokhoz, vagy törölje őket.
|
||||||
auths.deletion_success=Hitelesítési forrás sikeresen törölve!
|
auths.deletion_success=Hitelesítési forrás sikeresen törölve!
|
||||||
auths.login_source_exist=Bejelentkezési forrás "%s" már létezik.
|
auths.login_source_exist=Bejelentkezési forrás "%s" már létezik.
|
||||||
|
@ -1287,7 +1297,7 @@ config.enable_captcha=Captcha Engedélyezése
|
||||||
config.active_code_lives=Aktív kód életek
|
config.active_code_lives=Aktív kód életek
|
||||||
config.reset_password_code_lives=Jelszó visszaállításnál használt kód elévülési ideje
|
config.reset_password_code_lives=Jelszó visszaállításnál használt kód elévülési ideje
|
||||||
config.default_keep_email_private=Email cím ne látszódjon" alapértelmezett értéke
|
config.default_keep_email_private=Email cím ne látszódjon" alapértelmezett értéke
|
||||||
config.default_allow_create_organization=Szervezet létrehozása" jogosultság alapértelmezett értéke
|
config.default_allow_create_organization=Szervezet létrehozása jogosultság alapértelmezett értéke
|
||||||
config.no_reply_address=No-reply cím
|
config.no_reply_address=No-reply cím
|
||||||
|
|
||||||
config.webhook_config=Webhook Beállítása
|
config.webhook_config=Webhook Beállítása
|
||||||
|
|
|
@ -40,6 +40,7 @@ settings=Impostazioni
|
||||||
your_profile=Il tuo profilo
|
your_profile=Il tuo profilo
|
||||||
your_settings=Impostazioni
|
your_settings=Impostazioni
|
||||||
|
|
||||||
|
|
||||||
activities=Attivitá
|
activities=Attivitá
|
||||||
pull_requests=Pull Request
|
pull_requests=Pull Request
|
||||||
issues=Problemi
|
issues=Problemi
|
||||||
|
@ -569,7 +570,6 @@ release.ahead=<strong>%d</strong> commits da %s da questo rilascio
|
||||||
release.source_code=Codice Sorgente
|
release.source_code=Codice Sorgente
|
||||||
release.tag_name=Nome tag
|
release.tag_name=Nome tag
|
||||||
release.target=Obbiettivo
|
release.target=Obbiettivo
|
||||||
release.tag_helper=Scegli un tag esistente o crea un nuovo tag una volta pubblicato.
|
|
||||||
release.title=Titolo
|
release.title=Titolo
|
||||||
release.content=Contenuto
|
release.content=Contenuto
|
||||||
release.write=Scrivi
|
release.write=Scrivi
|
||||||
|
@ -617,7 +617,6 @@ settings.delete_account=Elimina questa organizzazione
|
||||||
settings.delete_prompt=L'organizzazione verrà rimossa definitivamente, e questa operazione <strong>NON PUÒ</strong> essere annullata!
|
settings.delete_prompt=L'organizzazione verrà rimossa definitivamente, e questa operazione <strong>NON PUÒ</strong> essere annullata!
|
||||||
settings.confirm_delete_account=Conferma Eliminazione
|
settings.confirm_delete_account=Conferma Eliminazione
|
||||||
settings.delete_org_title=Eliminazione Organizzazione
|
settings.delete_org_title=Eliminazione Organizzazione
|
||||||
settings.hooks_desc=Aggiungi i webhooks che verranno attivati per <strong>tutti i repository</strong> sotto questa organizzazione.
|
|
||||||
|
|
||||||
members.public=Pubblico
|
members.public=Pubblico
|
||||||
members.public_helper=rendi privato
|
members.public_helper=rendi privato
|
||||||
|
@ -645,7 +644,6 @@ teams.update_settings=Aggiorna Impostazioni
|
||||||
teams.delete_team=Elimina questo Team
|
teams.delete_team=Elimina questo Team
|
||||||
teams.add_team_member=Aggiungere un Membro al Team
|
teams.add_team_member=Aggiungere un Membro al Team
|
||||||
teams.delete_team_title=Eliminazione Team
|
teams.delete_team_title=Eliminazione Team
|
||||||
teams.delete_team_desc=Quando questo team verrà eliminato, i membri di questa squadra potrebbero perdere l'accesso ad alcuni repository. Si desidera continuare?
|
|
||||||
teams.read_permission_desc=Questo Team concede accesso di <strong>Lettura</strong>: i membri possono visualizzare e clonare i repository del Team.
|
teams.read_permission_desc=Questo Team concede accesso di <strong>Lettura</strong>: i membri possono visualizzare e clonare i repository del Team.
|
||||||
teams.write_permission_desc=Questo Team concede accesso di <strong>Scrittura</strong>: i membri possono leggere e pushare i repository del Team.
|
teams.write_permission_desc=Questo Team concede accesso di <strong>Scrittura</strong>: i membri possono leggere e pushare i repository del Team.
|
||||||
teams.admin_permission_desc=Questo Team concede accesso di <strong>Amministratore</strong>: i membri possono leggere i, pushare a, e aggiungere collaboratori ai repository del Team.
|
teams.admin_permission_desc=Questo Team concede accesso di <strong>Amministratore</strong>: i membri possono leggere i, pushare a, e aggiungere collaboratori ai repository del Team.
|
||||||
|
@ -780,7 +778,6 @@ config.reverse_auth_user=Autenticazione Utente Inversa
|
||||||
|
|
||||||
config.ssh_config=Configurazione SSH
|
config.ssh_config=Configurazione SSH
|
||||||
config.ssh_enabled=Attivo
|
config.ssh_enabled=Attivo
|
||||||
config.ssh_start_builtin_server=Avvia server builtin
|
|
||||||
config.ssh_domain=Dominio
|
config.ssh_domain=Dominio
|
||||||
config.ssh_port=Porta
|
config.ssh_port=Porta
|
||||||
config.ssh_listen_port=Porta in ascolto
|
config.ssh_listen_port=Porta in ascolto
|
||||||
|
|
|
@ -37,6 +37,7 @@ settings=設定
|
||||||
your_profile=プロフィール
|
your_profile=プロフィール
|
||||||
your_settings=設定
|
your_settings=設定
|
||||||
|
|
||||||
|
|
||||||
activities=アクティビティ
|
activities=アクティビティ
|
||||||
pull_requests=プルリクエスト
|
pull_requests=プルリクエスト
|
||||||
issues=課題
|
issues=課題
|
||||||
|
@ -549,7 +550,6 @@ release.ahead=このリリース以降 %s へ <strong>%d</strong> コミット
|
||||||
release.source_code=ソース コード
|
release.source_code=ソース コード
|
||||||
release.tag_name=タグ名
|
release.tag_name=タグ名
|
||||||
release.target=ターゲット
|
release.target=ターゲット
|
||||||
release.tag_helper=既存のタグを選択するか、新しいタグを作成し発行します。
|
|
||||||
release.title=タイトル
|
release.title=タイトル
|
||||||
release.content=コンテント
|
release.content=コンテント
|
||||||
release.write=書込み
|
release.write=書込み
|
||||||
|
@ -596,7 +596,6 @@ settings.delete_account=この組織を削除
|
||||||
settings.delete_prompt=この操作をすると組織が完全に削除され、<strong>二度と元に戻すことができなくなります</strong> !
|
settings.delete_prompt=この操作をすると組織が完全に削除され、<strong>二度と元に戻すことができなくなります</strong> !
|
||||||
settings.confirm_delete_account=削除を確認
|
settings.confirm_delete_account=削除を確認
|
||||||
settings.delete_org_title=組織の削除
|
settings.delete_org_title=組織の削除
|
||||||
settings.hooks_desc=この組織のもとで <strong>すべてのリポジトリ</strong> に対してトリガーされる webhook を追加します。
|
|
||||||
|
|
||||||
members.public=パブリック
|
members.public=パブリック
|
||||||
members.public_helper=プライベートにする
|
members.public_helper=プライベートにする
|
||||||
|
@ -624,7 +623,6 @@ teams.update_settings=設定の更新
|
||||||
teams.delete_team=このチームを削除
|
teams.delete_team=このチームを削除
|
||||||
teams.add_team_member=チーム メンバーを追加
|
teams.add_team_member=チーム メンバーを追加
|
||||||
teams.delete_team_title=チームの削除
|
teams.delete_team_title=チームの削除
|
||||||
teams.delete_team_desc=このチームを削除します、継続しますか?このチームのメンバーはいくつかのリポジトリへのアクセスを失う可能性があります。
|
|
||||||
teams.read_permission_desc=このチームは<strong>読み取り</strong>権限を持ち: メンバーはリポジトリの表示及びクローンの作成ができます。
|
teams.read_permission_desc=このチームは<strong>読み取り</strong>権限を持ち: メンバーはリポジトリの表示及びクローンの作成ができます。
|
||||||
teams.write_permission_desc=このチームは<strong>書き込み</strong>権限を持ち: メンバーはリポジトリの表示及リポジトリへのプッシュができます。
|
teams.write_permission_desc=このチームは<strong>書き込み</strong>権限を持ち: メンバーはリポジトリの表示及リポジトリへのプッシュができます。
|
||||||
teams.admin_permission_desc=このチームは<strong>管理者</strong>の権限を持ち: メンバーはチームのリポジトリに対して、読み取り、プッシュや共同編集者の追加ができます。
|
teams.admin_permission_desc=このチームは<strong>管理者</strong>の権限を持ち: メンバーはチームのリポジトリに対して、読み取り、プッシュや共同編集者の追加ができます。
|
||||||
|
|
|
@ -37,6 +37,7 @@ settings=설정
|
||||||
your_profile=프로필
|
your_profile=프로필
|
||||||
your_settings=설정
|
your_settings=설정
|
||||||
|
|
||||||
|
|
||||||
activities=활동
|
activities=활동
|
||||||
pull_requests=풀 리퀘스트
|
pull_requests=풀 리퀘스트
|
||||||
issues=이슈들
|
issues=이슈들
|
||||||
|
@ -542,7 +543,6 @@ settings.wiki_delete_notices_1=- 이것은 %s의 Wiki를 비활성화 시키고
|
||||||
settings.delete=이 저장소 삭제
|
settings.delete=이 저장소 삭제
|
||||||
settings.delete_desc=저장소를 지우고 나면 되돌릴 수 없습니다. 다시 한번 확인하세요.
|
settings.delete_desc=저장소를 지우고 나면 되돌릴 수 없습니다. 다시 한번 확인하세요.
|
||||||
settings.delete_notices_1=- 이 작업은 취소할 수 <strong>없습니다.</strong>
|
settings.delete_notices_1=- 이 작업은 취소할 수 <strong>없습니다.</strong>
|
||||||
settings.delete_notices_fork_1=- 모든 포크들은 삭제 후에도 독립적으로 유지됩니다.
|
|
||||||
settings.transfer_owner=새 소유자
|
settings.transfer_owner=새 소유자
|
||||||
settings.make_transfer=저장소 전송
|
settings.make_transfer=저장소 전송
|
||||||
settings.confirm_delete=삭제 확인
|
settings.confirm_delete=삭제 확인
|
||||||
|
@ -629,7 +629,6 @@ release.ahead=이 릴리스 이후로 <strong>%d</strong> %s에 커밋합니다.
|
||||||
release.source_code=소스 코드
|
release.source_code=소스 코드
|
||||||
release.tag_name=태그 이름
|
release.tag_name=태그 이름
|
||||||
release.target=대상
|
release.target=대상
|
||||||
release.tag_helper=태그를 선택하거나 새로운 태그를 만들어 게시
|
|
||||||
release.title=제목
|
release.title=제목
|
||||||
release.content=컨텐츠
|
release.content=컨텐츠
|
||||||
release.write=쓰기
|
release.write=쓰기
|
||||||
|
@ -678,7 +677,6 @@ settings.delete_account=이 조직을 삭제합니다.
|
||||||
settings.delete_prompt=조직이 영구적으로 삭제됩니다. 그리고 취소할 수 <strong>없습니다.</strong>
|
settings.delete_prompt=조직이 영구적으로 삭제됩니다. 그리고 취소할 수 <strong>없습니다.</strong>
|
||||||
settings.confirm_delete_account=삭제 승인
|
settings.confirm_delete_account=삭제 승인
|
||||||
settings.delete_org_title=조직 삭제
|
settings.delete_org_title=조직 삭제
|
||||||
settings.hooks_desc=이 조직의 <strong>모든 저장소</strong>에서 실행되는 웹훅을 추가합니다.
|
|
||||||
|
|
||||||
members.membership_visibility=회원 표시:
|
members.membership_visibility=회원 표시:
|
||||||
members.public=공개
|
members.public=공개
|
||||||
|
@ -707,7 +705,6 @@ teams.update_settings=설정 업데이트
|
||||||
teams.delete_team=이 팀을 삭제하기
|
teams.delete_team=이 팀을 삭제하기
|
||||||
teams.add_team_member=팀 구성원 추가
|
teams.add_team_member=팀 구성원 추가
|
||||||
teams.delete_team_title=팀 삭제
|
teams.delete_team_title=팀 삭제
|
||||||
teams.delete_team_desc=이 팀을 삭제하면 몇몇 저장소에대해 팀 구성원이 접근 권한을 잃게됩니다. 계속하시겠습니까?
|
|
||||||
teams.read_permission_desc=이 팀의 <strong>읽기</strong> 권한을 부여: 회원은 이 팀의 저장소를 보거나 복제할 수 있습니다.
|
teams.read_permission_desc=이 팀의 <strong>읽기</strong> 권한을 부여: 회원은 이 팀의 저장소를 보거나 복제할 수 있습니다.
|
||||||
teams.write_permission_desc=이 팀의 <strong>쓰기</strong> 권한을 부여: 회원은 이 팀의 저장소를 읽거나 푸시할 수 있습니다.
|
teams.write_permission_desc=이 팀의 <strong>쓰기</strong> 권한을 부여: 회원은 이 팀의 저장소를 읽거나 푸시할 수 있습니다.
|
||||||
teams.admin_permission_desc=이 팀의 <strong>관리자</strong> 권한을 부여: 회원은 이 팀의 저장소를 읽거나 푸시하거나 추가하고 공동 작업자를 추가할 수 있습니다.
|
teams.admin_permission_desc=이 팀의 <strong>관리자</strong> 권한을 부여: 회원은 이 팀의 저장소를 읽거나 푸시하거나 추가하고 공동 작업자를 추가할 수 있습니다.
|
||||||
|
@ -826,7 +823,6 @@ auths.smtp_auth=SMTP 인증 유형
|
||||||
auths.smtphost=SMTP 호스트
|
auths.smtphost=SMTP 호스트
|
||||||
auths.smtpport=SMTP 포트
|
auths.smtpport=SMTP 포트
|
||||||
auths.allowed_domains=허용된 도메인
|
auths.allowed_domains=허용된 도메인
|
||||||
auths.allowed_domains_helper=도메인을 제안하지 않으려면 비워둡니다. 여러 도메인은 ',' 콤마를 이용해 구분합니다.
|
|
||||||
auths.enable_tls=TLS 암호화 활성화
|
auths.enable_tls=TLS 암호화 활성화
|
||||||
auths.skip_tls_verify=TLS 검증 건너뛰기
|
auths.skip_tls_verify=TLS 검증 건너뛰기
|
||||||
auths.pam_service_name=PAM 서비스 명
|
auths.pam_service_name=PAM 서비스 명
|
||||||
|
@ -852,7 +848,6 @@ config.reverse_auth_user=역방향 사용자 인증
|
||||||
|
|
||||||
config.ssh_config=SSH 설정
|
config.ssh_config=SSH 설정
|
||||||
config.ssh_enabled=활성화됨
|
config.ssh_enabled=활성화됨
|
||||||
config.ssh_start_builtin_server=빌트인 서버 시작
|
|
||||||
config.ssh_domain=도메인
|
config.ssh_domain=도메인
|
||||||
config.ssh_port=포트
|
config.ssh_port=포트
|
||||||
config.ssh_listen_port=수신 대기 포트
|
config.ssh_listen_port=수신 대기 포트
|
||||||
|
|
|
@ -36,6 +36,7 @@ settings=Nustatymai
|
||||||
your_profile=Jūsų profilis
|
your_profile=Jūsų profilis
|
||||||
your_settings=Jūsų parametrai
|
your_settings=Jūsų parametrai
|
||||||
|
|
||||||
|
|
||||||
activities=Veiklos
|
activities=Veiklos
|
||||||
issues=Problemos
|
issues=Problemos
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,12 @@ your_profile=Tavs profils
|
||||||
your_starred=Tavi atzīmētie ar zvaigznīti
|
your_starred=Tavi atzīmētie ar zvaigznīti
|
||||||
your_settings=Tavi iestatījumi
|
your_settings=Tavi iestatījumi
|
||||||
|
|
||||||
|
all=Visi
|
||||||
|
sources=Avoti
|
||||||
|
mirrors=Spoguļi
|
||||||
|
collaborative=Sadarbības
|
||||||
|
forks=Atdalītie
|
||||||
|
|
||||||
activities=Aktivitāte
|
activities=Aktivitāte
|
||||||
pull_requests=Izmaiņu pieprasījumi
|
pull_requests=Izmaiņu pieprasījumi
|
||||||
issues=Problēmas
|
issues=Problēmas
|
||||||
|
@ -251,6 +257,7 @@ username_been_taken=Lietotājvārds jau ir aizņemts.
|
||||||
repo_name_been_taken=Jau eksistē repozitorijs ar šādu nosaukumu.
|
repo_name_been_taken=Jau eksistē repozitorijs ar šādu nosaukumu.
|
||||||
org_name_been_taken=Organizācijas nosaukums jau ir aizņemts.
|
org_name_been_taken=Organizācijas nosaukums jau ir aizņemts.
|
||||||
team_name_been_taken=Komandas nosaukums jau ir aizņemts.
|
team_name_been_taken=Komandas nosaukums jau ir aizņemts.
|
||||||
|
team_no_units_error=Komandai ir jābūt iespējotai vismaz vienai sadaļai.
|
||||||
email_been_used=E-pasta adrese jau ir izmantota.
|
email_been_used=E-pasta adrese jau ir izmantota.
|
||||||
openid_been_used=OpenID adrese '%s' jau ir izmantota.
|
openid_been_used=OpenID adrese '%s' jau ir izmantota.
|
||||||
username_password_incorrect=Nepareizs lietotājvārds vai parole.
|
username_password_incorrect=Nepareizs lietotājvārds vai parole.
|
||||||
|
@ -267,9 +274,9 @@ invalid_gpg_key=Nav iespējams pārbaudīt GPG atslēgu: %s
|
||||||
unable_verify_ssh_key=SSH atslēgu nav iespējams pārbaudīt, pārliecinieties, ka tajā nav kļūdu.
|
unable_verify_ssh_key=SSH atslēgu nav iespējams pārbaudīt, pārliecinieties, ka tajā nav kļūdu.
|
||||||
auth_failed=Autentifikācija neizdevās: %v
|
auth_failed=Autentifikācija neizdevās: %v
|
||||||
|
|
||||||
still_own_repo=Šis konts ir vismaz viena repozitorija īpašnieks, tos sākumā ir nepieciešams izdzēst vai nomainīt to īpašnieku.
|
still_own_repo=Šis konts ir vismaz viena repozitorija īpašnieks, tos sākumā ir nepieciešams izdzēst vai mainīt to īpašnieku.
|
||||||
still_has_org=Jūsu konts ir piesaistīts vismaz vienai organizācijai, sākumā nepieciešams to pamest.
|
still_has_org=Jūsu konts ir piesaistīts vismaz vienai organizācijai, sākumā nepieciešams to pamest.
|
||||||
org_still_own_repo=Organizācijai pieder repozitoriji, tos vispirms ir nepieciešams izdzēst vai pārvietot.
|
org_still_own_repo=Organizācijai pieder repozitoriji, tos sākumā ir nepieciešams izdzēst vai mainīt to īpašnieku.
|
||||||
|
|
||||||
target_branch_not_exist=Mērķa atzars neeksistē
|
target_branch_not_exist=Mērķa atzars neeksistē
|
||||||
|
|
||||||
|
@ -491,6 +498,7 @@ migrate.lfs_mirror_unsupported=LFS objektu spoguļošana netiek atbalstīta - iz
|
||||||
|
|
||||||
mirror_from=spogulis no
|
mirror_from=spogulis no
|
||||||
forked_from=atdalīts no
|
forked_from=atdalīts no
|
||||||
|
fork_from_self=Nav iespējams atdalīt repozitoriju, kuram esat īpašnieks!
|
||||||
copy_link=Kopēt
|
copy_link=Kopēt
|
||||||
copy_link_success=Nokopēts!
|
copy_link_success=Nokopēts!
|
||||||
copy_link_error=Nospiediet ⌘-C vai Ctrl-C, lai nokopētu
|
copy_link_error=Nospiediet ⌘-C vai Ctrl-C, lai nokopētu
|
||||||
|
@ -581,6 +589,8 @@ commits.message=Ziņojums
|
||||||
commits.date=Datums
|
commits.date=Datums
|
||||||
commits.older=Vecāki
|
commits.older=Vecāki
|
||||||
commits.newer=Jaunāki
|
commits.newer=Jaunāki
|
||||||
|
commits.signed_by=Parakstījis
|
||||||
|
commits.gpg_key_id=GPG atslēgas ID
|
||||||
|
|
||||||
ext_issues=Ārējās problēmas
|
ext_issues=Ārējās problēmas
|
||||||
ext_issues.desc=Ārējās problēmas ir saite uz ārējo problēmu vadības lapu
|
ext_issues.desc=Ārējās problēmas ir saite uz ārējo problēmu vadības lapu
|
||||||
|
@ -823,8 +833,8 @@ settings.wiki_deletion_success=Repozitorija vikivietnes dati tika izdzēsti.
|
||||||
settings.delete=Dzēst šo repozitoriju
|
settings.delete=Dzēst šo repozitoriju
|
||||||
settings.delete_desc=Dzēšot repozitoriju, tā datus vairs nebūs iespējams atgūt. Pirms dzēšanas pārliecinieties vai patiešām vēlaties to darīt.
|
settings.delete_desc=Dzēšot repozitoriju, tā datus vairs nebūs iespējams atgūt. Pirms dzēšanas pārliecinieties vai patiešām vēlaties to darīt.
|
||||||
settings.delete_notices_1=- Šī darbība ir <strong>NEATGRIEZENISKA</strong>.
|
settings.delete_notices_1=- Šī darbība ir <strong>NEATGRIEZENISKA</strong>.
|
||||||
settings.delete_notices_2=- Šī darbība neatgriezeniski dzēsīs visu ar šo repozitoriju saistīto informāciju, tai skaitā kodu, problēmu pieteikumus, komentārus, vikivietni un sadarbības lietotāju tiesības.
|
settings.delete_notices_2=- Šī darbība neatgriezeniski dzēsīs šī repozitorija kodu, problēmas, komentārus, vikivietni un līdzstrādnieku piekļuvi.
|
||||||
settings.delete_notices_fork_1=- Visi atdalītie repozitoriji kļūs neatkarīgi pēc dzēšanas.
|
settings.delete_notices_fork_1=- Visi atdalītie repozitoriju pēc dzēšanas kļūs neatkarīgi.
|
||||||
settings.deletion_success=Repozitorijs tika izdzēsts.
|
settings.deletion_success=Repozitorijs tika izdzēsts.
|
||||||
settings.update_settings_success=Repozitorija iestatījumi tika saglabāti.
|
settings.update_settings_success=Repozitorija iestatījumi tika saglabāti.
|
||||||
settings.transfer_owner=Jaunais īpašnieks
|
settings.transfer_owner=Jaunais īpašnieks
|
||||||
|
@ -941,7 +951,7 @@ release.new_subheader=Publicējiet laidienus, lai varētu veikt atsekošanu proj
|
||||||
release.edit_subheader=Detalizēts izmaiņu žurnāls palīdz lietotajiem saprast, kas ir ticis mainīts.
|
release.edit_subheader=Detalizēts izmaiņu žurnāls palīdz lietotajiem saprast, kas ir ticis mainīts.
|
||||||
release.tag_name=Taga nosaukums
|
release.tag_name=Taga nosaukums
|
||||||
release.target=Mērķis
|
release.target=Mērķis
|
||||||
release.tag_helper=Publicējot, izvēlieties esošu vai izveidojiet jaunu tagu.
|
release.tag_helper=Izvēlieties jau esošu tagu vai izveidojiet jaunu.
|
||||||
release.title=Virsraksts
|
release.title=Virsraksts
|
||||||
release.content=Saturs
|
release.content=Saturs
|
||||||
release.write=Rakstīt
|
release.write=Rakstīt
|
||||||
|
@ -967,7 +977,7 @@ branch.delete_notices_1=- Šī darbība ir <strong>NEATGRIEZENISKA</strong>.
|
||||||
branch.delete_notices_2=- Šī darbība neatgriezeniski izdzēsīs visu zarā %s.
|
branch.delete_notices_2=- Šī darbība neatgriezeniski izdzēsīs visu zarā %s.
|
||||||
branch.deletion_success=Atzars '%s' tika izdzēsts.
|
branch.deletion_success=Atzars '%s' tika izdzēsts.
|
||||||
branch.deletion_failed=Neizdevās izdzēst atzaru %s.
|
branch.deletion_failed=Neizdevās izdzēst atzaru %s.
|
||||||
branch.delete_branch_has_new_commits=%s nevar tikt izdzēsts, jo tam ir jaunas revīzijas pēc sapludināšanas.
|
branch.delete_branch_has_new_commits=%s nevar tikt dzēsts, jo tam ir jaunas revīzijas pēc tā sapludināšanas.
|
||||||
|
|
||||||
[org]
|
[org]
|
||||||
org_name_holder=Organizācijas nosaukums
|
org_name_holder=Organizācijas nosaukums
|
||||||
|
@ -1039,7 +1049,7 @@ teams.update_settings=Saglabāt iestatījumus
|
||||||
teams.delete_team=Dzēst komandu
|
teams.delete_team=Dzēst komandu
|
||||||
teams.add_team_member=Pievienot komandas biedru
|
teams.add_team_member=Pievienot komandas biedru
|
||||||
teams.delete_team_title=Komandas dzēšana
|
teams.delete_team_title=Komandas dzēšana
|
||||||
teams.delete_team_desc=Komanda tiks dzēsta, vai vēlaties turpināt? Komandas biedri var zaudēt piekļuvi dažiem vai pat visiem repozitorijiem.
|
teams.delete_team_desc=Dzēšot komandu, tās biedri var zaudēt piekļuvi dažiem vai pat visiem repozitorijiem. Vai vēlaties turpināt?
|
||||||
teams.delete_team_success=Komanda tika izdzēsta.
|
teams.delete_team_success=Komanda tika izdzēsta.
|
||||||
teams.read_permission_desc=Šai komandai ir <strong>lasīšanas</strong> tiesības: dalībnieki var skatīties un klonēt komandas repozitorijus.
|
teams.read_permission_desc=Šai komandai ir <strong>lasīšanas</strong> tiesības: dalībnieki var skatīties un klonēt komandas repozitorijus.
|
||||||
teams.write_permission_desc=Šai komandai ir <strong>rakstīšanas</strong> tiesības: dalībnieki var lasīt un nosūtīt izmaiņas repozitorijiem.
|
teams.write_permission_desc=Šai komandai ir <strong>rakstīšanas</strong> tiesības: dalībnieki var lasīt un nosūtīt izmaiņas repozitorijiem.
|
||||||
|
@ -1076,8 +1086,8 @@ dashboard.delete_inactivate_accounts=Dzēst visus neaktīvos kontus
|
||||||
dashboard.delete_inactivate_accounts_success=Visi neaktīvie konti tika izdzēsti.
|
dashboard.delete_inactivate_accounts_success=Visi neaktīvie konti tika izdzēsti.
|
||||||
dashboard.delete_repo_archives=Dzēst visu repozitoriju arhīvus
|
dashboard.delete_repo_archives=Dzēst visu repozitoriju arhīvus
|
||||||
dashboard.delete_repo_archives_success=Visu repozitoriju arhīvi tika izdzēsti.
|
dashboard.delete_repo_archives_success=Visu repozitoriju arhīvi tika izdzēsti.
|
||||||
dashboard.delete_missing_repos=Dzēst visus repozitoriju ierakstus, kas ir pazaudējuši attiecīgos Git failus
|
dashboard.delete_missing_repos=Dzēst visus repozitorijus, kuriem trūkst Git faili
|
||||||
dashboard.delete_missing_repos_success=Visi repozitoriju ieraksti, kam bija pazaudēti Git repozitoriji, tika izdzēsti.
|
dashboard.delete_missing_repos_success=Visi repozitoriji, kuriem trūkst Git faili, tika izdzēsti.
|
||||||
dashboard.git_gc_repos=Izpildīt visu repozitoriju datu sakārtošanu
|
dashboard.git_gc_repos=Izpildīt visu repozitoriju datu sakārtošanu
|
||||||
dashboard.git_gc_repos_success=Visiem repozitorijiem ir pabeigta datu sakārtošana.
|
dashboard.git_gc_repos_success=Visiem repozitorijiem ir pabeigta datu sakārtošana.
|
||||||
dashboard.resync_all_sshkeys=Pārrakstīt '.ssh/authorized_keys' failu (Gitea SSH atslēgām)
|
dashboard.resync_all_sshkeys=Pārrakstīt '.ssh/authorized_keys' failu (Gitea SSH atslēgām)
|
||||||
|
@ -1146,7 +1156,7 @@ users.allow_import_local=Šim kontam ir tiesības importēt lokālus repozitorij
|
||||||
users.allow_create_organization=Jums nav tiesību veidot organizācijas
|
users.allow_create_organization=Jums nav tiesību veidot organizācijas
|
||||||
users.update_profile=Mainīt konta profilu
|
users.update_profile=Mainīt konta profilu
|
||||||
users.delete_account=Dzēst šo kontu
|
users.delete_account=Dzēst šo kontu
|
||||||
users.still_own_repo=Šim kontam pieder vismaz viens repozitorijs. Sākumā to ir nepieciešams izdzēst vai nomainīt tā īpašnieku.
|
users.still_own_repo=Šim kontam pieder vismaz viens repozitorijs, tos sākumā ir nepieciešams izdzēst vai mainīt to īpašnieku.
|
||||||
users.still_has_org=Šis konts ir piesaistīts vismaz vienai organizācijai. Sākumā ir nepieciešams to atsaistīt vai izdzēst šo organizāciju.
|
users.still_has_org=Šis konts ir piesaistīts vismaz vienai organizācijai. Sākumā ir nepieciešams to atsaistīt vai izdzēst šo organizāciju.
|
||||||
users.deletion_success=Konts tika veiksmīgi izdzēsts.
|
users.deletion_success=Konts tika veiksmīgi izdzēsts.
|
||||||
|
|
||||||
|
@ -1196,7 +1206,7 @@ auths.smtp_auth=SMTP autentifikācijas tips
|
||||||
auths.smtphost=SMTP resursdators
|
auths.smtphost=SMTP resursdators
|
||||||
auths.smtpport=SMTP ports
|
auths.smtpport=SMTP ports
|
||||||
auths.allowed_domains=Atļautie domēni
|
auths.allowed_domains=Atļautie domēni
|
||||||
auths.allowed_domains_helper=Atstājiet tukšu, ja nevēlaties ierobežot domēnu vārdus. Domēna vārdus nepieciešams atdalīt ar komatu ','.
|
auths.allowed_domains_helper=Atstājiet tukšu, lai atļautu visus domēnus. Lai norādītu vairākus domēnus, tos var atdalīt ar komatu.
|
||||||
auths.enable_tls=Iespējot TLS šifrēšanu
|
auths.enable_tls=Iespējot TLS šifrēšanu
|
||||||
auths.skip_tls_verify=Izlaist TLS verifikāciju
|
auths.skip_tls_verify=Izlaist TLS verifikāciju
|
||||||
auths.pam_service_name=PAM servisa nosaukums
|
auths.pam_service_name=PAM servisa nosaukums
|
||||||
|
@ -1229,7 +1239,7 @@ auths.update_success=Autentifikācijas iestatījumi tika saglabāti.
|
||||||
auths.update=Mainīt autentifikācijas iestatījumus
|
auths.update=Mainīt autentifikācijas iestatījumus
|
||||||
auths.delete=Dzēst šo autentifikācijas avotu
|
auths.delete=Dzēst šo autentifikācijas avotu
|
||||||
auths.delete_auth_title=Dzēst autentifikācijas avotu
|
auths.delete_auth_title=Dzēst autentifikācijas avotu
|
||||||
auths.delete_auth_desc=Šis autentifikācijas avots tiks dzēsts. Vai patiešām vēlaties turpināt?
|
auths.delete_auth_desc=Šis autentificēšanas avots tiks dzēsts, vai patiešām vēlaties turpināt?
|
||||||
auths.still_in_used=Daži lietotāji joprojām izmanto šo autentifikācijas avotu. Nepieciešams veikt šo lietotāju konvertāciju vai dzēšanu.
|
auths.still_in_used=Daži lietotāji joprojām izmanto šo autentifikācijas avotu. Nepieciešams veikt šo lietotāju konvertāciju vai dzēšanu.
|
||||||
auths.deletion_success=Autentifikācija tika veiksmīgi izdzēsta!
|
auths.deletion_success=Autentifikācija tika veiksmīgi izdzēsta!
|
||||||
auths.login_source_exist=Pieteikšanās avots '%s' jau eksistē.
|
auths.login_source_exist=Pieteikšanās avots '%s' jau eksistē.
|
||||||
|
|
|
@ -39,6 +39,7 @@ admin_panel=Administrasjonspanel
|
||||||
account_settings=Kontoinstillinger
|
account_settings=Kontoinstillinger
|
||||||
settings=Innstillinger
|
settings=Innstillinger
|
||||||
|
|
||||||
|
|
||||||
issues=Problemer
|
issues=Problemer
|
||||||
|
|
||||||
cancel=Avbryt
|
cancel=Avbryt
|
||||||
|
|
|
@ -46,6 +46,7 @@ your_profile=Uw profiel
|
||||||
your_starred=Jouw Sterren
|
your_starred=Jouw Sterren
|
||||||
your_settings=Uw instellingen
|
your_settings=Uw instellingen
|
||||||
|
|
||||||
|
|
||||||
activities=Activiteiten
|
activities=Activiteiten
|
||||||
pull_requests=Pull requests
|
pull_requests=Pull requests
|
||||||
issues=Kwesties
|
issues=Kwesties
|
||||||
|
@ -721,7 +722,6 @@ settings.wiki_deletion_success=De repository met wiki data is succesvol gewist.
|
||||||
settings.delete=Verwijder deze repository
|
settings.delete=Verwijder deze repository
|
||||||
settings.delete_desc=Als u eenmaal een repository verwijderd is er geen weg terug. Gelieve zeker te zijn van uw acties.
|
settings.delete_desc=Als u eenmaal een repository verwijderd is er geen weg terug. Gelieve zeker te zijn van uw acties.
|
||||||
settings.delete_notices_1=- Deze bewerking kan <strong>NIET</strong> ongedaan gemaakt worden.
|
settings.delete_notices_1=- Deze bewerking kan <strong>NIET</strong> ongedaan gemaakt worden.
|
||||||
settings.delete_notices_fork_1=-Alle forks zullen onafhankelijk geworden na verwijdering.
|
|
||||||
settings.deletion_success=De repository is verwijderd.
|
settings.deletion_success=De repository is verwijderd.
|
||||||
settings.update_settings_success=Repository opties zijn verwijderd.
|
settings.update_settings_success=Repository opties zijn verwijderd.
|
||||||
settings.transfer_owner=Nieuwe eigenaar
|
settings.transfer_owner=Nieuwe eigenaar
|
||||||
|
@ -819,7 +819,6 @@ release.ahead=<strong>%d</strong> aanpassingen aan %s sinds deze versie
|
||||||
release.source_code=Broncode
|
release.source_code=Broncode
|
||||||
release.tag_name=Tagnaam
|
release.tag_name=Tagnaam
|
||||||
release.target=Doel
|
release.target=Doel
|
||||||
release.tag_helper=Kies een bestaande tag, of creëer een nieuwe tag bij publiceren.
|
|
||||||
release.title=Titel
|
release.title=Titel
|
||||||
release.content=Inhoud
|
release.content=Inhoud
|
||||||
release.write=Schrijf
|
release.write=Schrijf
|
||||||
|
@ -881,7 +880,6 @@ settings.delete_prompt=Deze actie zal de origanisatie permanent verwijderen. U k
|
||||||
settings.confirm_delete_account=Bevestig verwijdering
|
settings.confirm_delete_account=Bevestig verwijdering
|
||||||
settings.delete_org_title=Verwijderen organsiatie
|
settings.delete_org_title=Verwijderen organsiatie
|
||||||
settings.delete_org_desc=Deze organisatie zal permanent worden verwijderd, wilt u doorgaan?
|
settings.delete_org_desc=Deze organisatie zal permanent worden verwijderd, wilt u doorgaan?
|
||||||
settings.hooks_desc=Een webhook toevoegen die door <strong>alle repositories</strong> in deze organisatie getriggerd kan worden.
|
|
||||||
|
|
||||||
members.membership_visibility=Zichtbaarheid lidmaatschap:
|
members.membership_visibility=Zichtbaarheid lidmaatschap:
|
||||||
members.public=Openbaar
|
members.public=Openbaar
|
||||||
|
@ -910,7 +908,6 @@ teams.update_settings=Instellingen bijwerken
|
||||||
teams.delete_team=Verwijder deze team
|
teams.delete_team=Verwijder deze team
|
||||||
teams.add_team_member=Nieuwe team lid aanmaken
|
teams.add_team_member=Nieuwe team lid aanmaken
|
||||||
teams.delete_team_title=Team verwijderen
|
teams.delete_team_title=Team verwijderen
|
||||||
teams.delete_team_desc=Dit team zal worden verwijderd. De leden van dit team zullen toegang tot alle repositories van het team verliezen. Wilt u doorgaan?
|
|
||||||
teams.delete_team_success=Het team is verwijderd.
|
teams.delete_team_success=Het team is verwijderd.
|
||||||
teams.read_permission_desc=Dit team heeft <strong>Lees</strong> rechten : leden kunnen repositories lezen en klonen.
|
teams.read_permission_desc=Dit team heeft <strong>Lees</strong> rechten : leden kunnen repositories lezen en klonen.
|
||||||
teams.write_permission_desc=Dit team heeft <strong>Schrijf</strong> rechten : leden kunnen repositories lezen en push aanvragen verwerken.
|
teams.write_permission_desc=Dit team heeft <strong>Schrijf</strong> rechten : leden kunnen repositories lezen en push aanvragen verwerken.
|
||||||
|
@ -1048,7 +1045,6 @@ auths.smtp_auth=SMTP-authenticatietype
|
||||||
auths.smtphost=SMTP host
|
auths.smtphost=SMTP host
|
||||||
auths.smtpport=SMTP poort
|
auths.smtpport=SMTP poort
|
||||||
auths.allowed_domains=Toegelaten domeinen
|
auths.allowed_domains=Toegelaten domeinen
|
||||||
auths.allowed_domains_helper=Laat dit leeg om geen enkel domein te beperken. Meerdere domeinen moeten door een komma (',') gescheiden worden.
|
|
||||||
auths.enable_tls=Activeer TLS-encryptie
|
auths.enable_tls=Activeer TLS-encryptie
|
||||||
auths.skip_tls_verify=TLS-verificatie overslaan
|
auths.skip_tls_verify=TLS-verificatie overslaan
|
||||||
auths.pam_service_name=PAM servicenaam
|
auths.pam_service_name=PAM servicenaam
|
||||||
|
@ -1083,7 +1079,6 @@ config.reverse_auth_user=Omgekeerde verificatie gebruiker
|
||||||
|
|
||||||
config.ssh_config=SSH-configuratie
|
config.ssh_config=SSH-configuratie
|
||||||
config.ssh_enabled=Ingeschakeld
|
config.ssh_enabled=Ingeschakeld
|
||||||
config.ssh_start_builtin_server=Ingebouwde server starten
|
|
||||||
config.ssh_domain=Domein
|
config.ssh_domain=Domein
|
||||||
config.ssh_port=Poort
|
config.ssh_port=Poort
|
||||||
config.ssh_listen_port=Luister op poort
|
config.ssh_listen_port=Luister op poort
|
||||||
|
|
|
@ -36,6 +36,7 @@ settings=Ustawienia
|
||||||
your_profile=Twój profil
|
your_profile=Twój profil
|
||||||
your_settings=Twoje ustawienia
|
your_settings=Twoje ustawienia
|
||||||
|
|
||||||
|
|
||||||
activities=Aktywności
|
activities=Aktywności
|
||||||
pull_requests=Oczekujące zmiany
|
pull_requests=Oczekujące zmiany
|
||||||
issues=Problemy
|
issues=Problemy
|
||||||
|
@ -546,7 +547,6 @@ settings.wiki_delete_notices_1=- To usunie i wyłączy wiki dla %s
|
||||||
settings.delete=Usuń to repozytorium
|
settings.delete=Usuń to repozytorium
|
||||||
settings.delete_desc=Po usunięciu repozytorium nie ma odwrotu. Upewnij się, że tego chcesz.
|
settings.delete_desc=Po usunięciu repozytorium nie ma odwrotu. Upewnij się, że tego chcesz.
|
||||||
settings.delete_notices_1=- Ta operacja <strong>NIE MOŻE</strong> zostać cofnięta.
|
settings.delete_notices_1=- Ta operacja <strong>NIE MOŻE</strong> zostać cofnięta.
|
||||||
settings.delete_notices_fork_1=Wszystkie forki staną się niezależne po usunięciu.
|
|
||||||
settings.transfer_owner=Nowy właściciel
|
settings.transfer_owner=Nowy właściciel
|
||||||
settings.make_transfer=Przenieś
|
settings.make_transfer=Przenieś
|
||||||
settings.confirm_delete=Potwierdź usunięcie
|
settings.confirm_delete=Potwierdź usunięcie
|
||||||
|
@ -630,7 +630,6 @@ release.ahead=<strong>%d</strong> commitów w %s od tego wydania
|
||||||
release.source_code=Kod źródłowy
|
release.source_code=Kod źródłowy
|
||||||
release.tag_name=Nazwa tagu
|
release.tag_name=Nazwa tagu
|
||||||
release.target=Cel
|
release.target=Cel
|
||||||
release.tag_helper=Wybierz istniejący tag, bądź utwórz nowy podczas publikacji.
|
|
||||||
release.title=Tytuł
|
release.title=Tytuł
|
||||||
release.content=Treść
|
release.content=Treść
|
||||||
release.write=Napisz
|
release.write=Napisz
|
||||||
|
@ -679,7 +678,6 @@ settings.delete_account=Usuń tą organizację
|
||||||
settings.delete_prompt=Organizacja zostanie trwale usunięta, a to <strong>NIE MOŻE</strong> być cofnięte!
|
settings.delete_prompt=Organizacja zostanie trwale usunięta, a to <strong>NIE MOŻE</strong> być cofnięte!
|
||||||
settings.confirm_delete_account=Potwierdź usunięcie
|
settings.confirm_delete_account=Potwierdź usunięcie
|
||||||
settings.delete_org_title=Usunięcie organizacji
|
settings.delete_org_title=Usunięcie organizacji
|
||||||
settings.hooks_desc=Dodaj webhooki, uruchamiane dla <strong>wszystkich repozytoriów</strong> w tej organizacji.
|
|
||||||
|
|
||||||
members.membership_visibility=Widoczność członkostwa:
|
members.membership_visibility=Widoczność członkostwa:
|
||||||
members.public=Publiczne
|
members.public=Publiczne
|
||||||
|
@ -708,7 +706,6 @@ teams.update_settings=Aktualizuj ustawienia
|
||||||
teams.delete_team=Usuń ten zespół
|
teams.delete_team=Usuń ten zespół
|
||||||
teams.add_team_member=Dodaj członka zespołu
|
teams.add_team_member=Dodaj członka zespołu
|
||||||
teams.delete_team_title=Usuwanie zespołu
|
teams.delete_team_title=Usuwanie zespołu
|
||||||
teams.delete_team_desc=Ten zespół zostanie usunięty, czy na pewno chcesz kontynuować? Jego członkowie mogą utracić dostęp do części repozytoriów.
|
|
||||||
teams.read_permission_desc=Ten zespół daje dostęp do <strong>odczytu</strong>: członkowie mogą wyświetlać i klonować repozytoria zespołu.
|
teams.read_permission_desc=Ten zespół daje dostęp do <strong>odczytu</strong>: członkowie mogą wyświetlać i klonować repozytoria zespołu.
|
||||||
teams.write_permission_desc=Ten zespół daje dostęp do <strong>zapisu</strong>: członkowie mogą wyświetlać i wysyłać do repozytoriów zespołu.
|
teams.write_permission_desc=Ten zespół daje dostęp do <strong>zapisu</strong>: członkowie mogą wyświetlać i wysyłać do repozytoriów zespołu.
|
||||||
teams.admin_permission_desc=Ten zespół daje dostęp <strong>pełny</strong>: członkowie mogą wyświetlać, wysyłać i dodawać współpracowników do repozytoriów zespołu.
|
teams.admin_permission_desc=Ten zespół daje dostęp <strong>pełny</strong>: członkowie mogą wyświetlać, wysyłać i dodawać współpracowników do repozytoriów zespołu.
|
||||||
|
@ -824,7 +821,6 @@ auths.smtp_auth=Typ uwierzytelnienia SMTP
|
||||||
auths.smtphost=Serwer SMTP
|
auths.smtphost=Serwer SMTP
|
||||||
auths.smtpport=Port SMTP
|
auths.smtpport=Port SMTP
|
||||||
auths.allowed_domains=Dozwolone domeny
|
auths.allowed_domains=Dozwolone domeny
|
||||||
auths.allowed_domains_helper=Pozostaw puste aby nie ograniczać domen. Wiele domen powinno być oddzielone przecinkami ','.
|
|
||||||
auths.enable_tls=Włącz szyfrowanie TLS
|
auths.enable_tls=Włącz szyfrowanie TLS
|
||||||
auths.skip_tls_verify=Pomiń weryfikację protokołu TLS
|
auths.skip_tls_verify=Pomiń weryfikację protokołu TLS
|
||||||
auths.pam_service_name=Nazwa usługi PAM
|
auths.pam_service_name=Nazwa usługi PAM
|
||||||
|
@ -850,7 +846,6 @@ config.reverse_auth_user=Użytkownik dostarczony przez odwrotne proxy
|
||||||
|
|
||||||
config.ssh_config=Konfiguracja SSH
|
config.ssh_config=Konfiguracja SSH
|
||||||
config.ssh_enabled=Aktywne
|
config.ssh_enabled=Aktywne
|
||||||
config.ssh_start_builtin_server=Uruchom serwer wbudowany
|
|
||||||
config.ssh_domain=Domena
|
config.ssh_domain=Domena
|
||||||
config.ssh_listen_port=Port nasłuchu
|
config.ssh_listen_port=Port nasłuchu
|
||||||
config.ssh_root_path=Ścieżka katalogu głównego
|
config.ssh_root_path=Ścieżka katalogu głównego
|
||||||
|
|
|
@ -9,6 +9,7 @@ sign_in_with=Fazer login com
|
||||||
sign_out=Sair
|
sign_out=Sair
|
||||||
sign_up=Cadastrar
|
sign_up=Cadastrar
|
||||||
link_account=Conectar Conta
|
link_account=Conectar Conta
|
||||||
|
link_account_signin_or_signup=Faça login para conectar sua conta existente à sua nova conta, ou cadastre-se para uma nova conta
|
||||||
register=Registrar
|
register=Registrar
|
||||||
website=Site
|
website=Site
|
||||||
version=Versão
|
version=Versão
|
||||||
|
@ -45,6 +46,7 @@ your_profile=Seu perfil
|
||||||
your_starred=Você favoritou
|
your_starred=Você favoritou
|
||||||
your_settings=Suas configurações
|
your_settings=Suas configurações
|
||||||
|
|
||||||
|
|
||||||
activities=Atividades
|
activities=Atividades
|
||||||
pull_requests=Pull requests
|
pull_requests=Pull requests
|
||||||
issues=Issues
|
issues=Issues
|
||||||
|
@ -53,6 +55,9 @@ cancel=Cancelar
|
||||||
|
|
||||||
[install]
|
[install]
|
||||||
install=Instalação
|
install=Instalação
|
||||||
|
title=Configuração inicial
|
||||||
|
docker_helper=Se você está rodando o Gitea dentro do Docker, por favor leia as <a target="_blank" rel="noopener" href="%s">instruções</a> cuidadosamente antes de alterar qualquer coisa nesta página.
|
||||||
|
requite_db_desc=Gitea requer MySQL, PostgreSQL, SQLite3 ou TiDB.
|
||||||
db_title=Configurações de banco de dados
|
db_title=Configurações de banco de dados
|
||||||
db_type=Tipo de banco de dados
|
db_type=Tipo de banco de dados
|
||||||
host=Servidor
|
host=Servidor
|
||||||
|
@ -62,13 +67,17 @@ db_name=Nome do banco de dados
|
||||||
db_helper=Por favor, use InnoDB como Engine e utf8_general_ci como o charset para o MySQL.
|
db_helper=Por favor, use InnoDB como Engine e utf8_general_ci como o charset para o MySQL.
|
||||||
ssl_mode=Modo SSL
|
ssl_mode=Modo SSL
|
||||||
path=Caminho
|
path=Caminho
|
||||||
|
sqlite_helper=O caminho do arquivo de banco de dados SQLite3 ou TiDB. <br>Por favor use o caminho absoluto se rodar o Gitea como serviço.
|
||||||
err_empty_db_path=O Caminho do banco de dados SQLite3 ou TiDB não pode ser vazio.
|
err_empty_db_path=O Caminho do banco de dados SQLite3 ou TiDB não pode ser vazio.
|
||||||
err_invalid_tidb_name=Nome do banco de dados TiDB não permite os caracteres "." e "-".
|
err_invalid_tidb_name=Nome do banco de dados TiDB não permite os caracteres "." e "-".
|
||||||
no_admin_and_disable_registration=Você não pode desabilitar o registro sem criar uma conta de administrador.
|
no_admin_and_disable_registration=Você não pode desabilitar o registro sem criar uma conta de administrador.
|
||||||
err_empty_admin_password=A senha de administrador não pode ser vazia.
|
err_empty_admin_password=A senha de administrador não pode ser vazia.
|
||||||
|
|
||||||
|
general_title=Configurações gerais do aplicativo
|
||||||
app_name=Nome do aplicativo
|
app_name=Nome do aplicativo
|
||||||
|
app_name_helper=Você pode colocar o nome de sua organização aqui.
|
||||||
repo_path=Caminho raíz do repositório
|
repo_path=Caminho raíz do repositório
|
||||||
|
repo_path_helper=Todos os repositórios remotos do Git serão salvos neste diretório.
|
||||||
lfs_path=Caminho raiz do LFS
|
lfs_path=Caminho raiz do LFS
|
||||||
lfs_path_helper=Os arquivos armazenados com o Git LFS serão armazenados neste diretório. Deixe vazio para desativar o LFS.
|
lfs_path_helper=Os arquivos armazenados com o Git LFS serão armazenados neste diretório. Deixe vazio para desativar o LFS.
|
||||||
run_user=Usuário da execução
|
run_user=Usuário da execução
|
||||||
|
@ -76,9 +85,11 @@ run_user_helper=O usuário deve ter acesso ao caminho raiz do repositório e exe
|
||||||
domain=Domínio
|
domain=Domínio
|
||||||
domain_helper=Isto afeta URLs para o clone via SSH.
|
domain_helper=Isto afeta URLs para o clone via SSH.
|
||||||
ssh_port=Porta SSH
|
ssh_port=Porta SSH
|
||||||
|
ssh_port_helper=Número da porta que seu servidor SSH está usando, deixe vazio para desativar o recurso SSH.
|
||||||
http_port=Porta HTTP
|
http_port=Porta HTTP
|
||||||
http_port_helper=Número da porta em que a aplicação irá executar.
|
http_port_helper=Número da porta em que a aplicação irá executar.
|
||||||
app_url=URL do aplicativo
|
app_url=URL do aplicativo
|
||||||
|
app_url_helper=Isto afeta a URL de clone via HTTP/HTTPS e também algumas notificações por e-mail.
|
||||||
log_root_path=Caminho do log
|
log_root_path=Caminho do log
|
||||||
log_root_path_helper=Pasta dos arquivos de log.
|
log_root_path_helper=Pasta dos arquivos de log.
|
||||||
|
|
||||||
|
@ -86,11 +97,14 @@ optional_title=Configurações opcionais
|
||||||
email_title=Configurações do serviço de e-mail
|
email_title=Configurações do serviço de e-mail
|
||||||
smtp_host=Host SMTP
|
smtp_host=Host SMTP
|
||||||
smtp_from=De
|
smtp_from=De
|
||||||
|
smtp_from_helper=Endereço do remetente de e-mails, no formato RFC 5322. Pode ser apenas o endereço de e-mail ou "Nome" <email@example.com>.
|
||||||
mailer_user=Usuário do envio
|
mailer_user=Usuário do envio
|
||||||
mailer_password=Senha do remetente
|
mailer_password=Senha do remetente
|
||||||
register_confirm=Habilitar confirmação de registro
|
register_confirm=Habilitar confirmação de registro
|
||||||
|
mail_notify=Habilitar notificações de e-mail
|
||||||
server_service_title=Configurações de servidor e outros serviços
|
server_service_title=Configurações de servidor e outros serviços
|
||||||
offline_mode=Ativar modo off-line
|
offline_mode=Ativar modo off-line
|
||||||
|
offline_mode_popup=Desative o uso de CDNs para que todos os recursos sejam servidos localmente.
|
||||||
disable_gravatar=Desativar serviço Gravatar
|
disable_gravatar=Desativar serviço Gravatar
|
||||||
disable_gravatar_popup=Desabilitar o Gravatar e fontes personalizadas, todos os avatares são enviados por usuários ou padrão.
|
disable_gravatar_popup=Desabilitar o Gravatar e fontes personalizadas, todos os avatares são enviados por usuários ou padrão.
|
||||||
federated_avatar_lookup=Habilitar a busca federativa de avatares
|
federated_avatar_lookup=Habilitar a busca federativa de avatares
|
||||||
|
@ -101,6 +115,7 @@ enable_captcha=Habilitar captcha
|
||||||
enable_captcha_popup=Obrigar validação por captcha para auto-registro de usuários.
|
enable_captcha_popup=Obrigar validação por captcha para auto-registro de usuários.
|
||||||
require_sign_in_view=Obrigar login para a visualização de páginas
|
require_sign_in_view=Obrigar login para a visualização de páginas
|
||||||
require_sign_in_view_popup=Somente usuários autenticados podem ver todas as páginas, visitantes somente podem entrar ou se cadastrar.
|
require_sign_in_view_popup=Somente usuários autenticados podem ver todas as páginas, visitantes somente podem entrar ou se cadastrar.
|
||||||
|
admin_setting_desc=Você não precisa criar uma conta de administrador agora. O primeiro usuário a se registrar no site automaticamente terá acesso de administrador.
|
||||||
admin_title=Configurações da conta de administrador
|
admin_title=Configurações da conta de administrador
|
||||||
admin_name=Nome de usuário
|
admin_name=Nome de usuário
|
||||||
admin_password=Senha
|
admin_password=Senha
|
||||||
|
@ -108,11 +123,18 @@ confirm_password=Confirmar senha
|
||||||
admin_email=E-mail do administrador
|
admin_email=E-mail do administrador
|
||||||
install_btn_confirm=Instalar Gitea
|
install_btn_confirm=Instalar Gitea
|
||||||
test_git_failed=Falha ao testar o comando 'git': %v
|
test_git_failed=Falha ao testar o comando 'git': %v
|
||||||
|
sqlite3_not_available=Sua versão não suporta SQLite3, por favor faça o download do executável oficial em %s, e NÃO da versão gobuild.
|
||||||
|
invalid_db_setting=Configuração de banco de dados inválida: %v
|
||||||
invalid_repo_path=A raiz do repositório é inválida: %v
|
invalid_repo_path=A raiz do repositório é inválida: %v
|
||||||
|
run_user_not_match=O usuário configurado não é o mesmo que está executando o aplicativo no momento: %s -> %s
|
||||||
|
save_config_failed=Falha ao salvar a configuração: %v
|
||||||
invalid_admin_setting=Configuração da conta de administrador está inválida: %v
|
invalid_admin_setting=Configuração da conta de administrador está inválida: %v
|
||||||
|
install_success=Bem-vindo! Obrigado por escolher o Gitea. Divirta-se!
|
||||||
invalid_log_root_path=Pasta raíz do log é inválida: %v
|
invalid_log_root_path=Pasta raíz do log é inválida: %v
|
||||||
default_keep_email_private=Valor padrão para manter o e-mail privado
|
default_keep_email_private=Valor padrão para manter o e-mail privado
|
||||||
default_keep_email_private_popup=Esse é o valor padrão para a visibilidade do endereço de e-mail do usuário. Se definido como true, o endereço de e-mail de todos os novos usuários será ocultado até que o usuário altere sua configuração.
|
default_keep_email_private_popup=Esse é o valor padrão para a visibilidade do endereço de e-mail do usuário. Se definido como true, o endereço de e-mail de todos os novos usuários será ocultado até que o usuário altere sua configuração.
|
||||||
|
default_allow_create_organization=Permissão para que novos usuários possam criar organizações por padrão
|
||||||
|
default_allow_create_organization_popup=Este é o valor de permissão padrão que será atribuído à novos usuários. Se ativado, novos usuários poderão criar organizações.
|
||||||
no_reply_address=Endereço de sem resposta
|
no_reply_address=Endereço de sem resposta
|
||||||
no_reply_address_helper=Domínio para o endereço de e-mail do usuário nos registros do git se ele mantiver seu endereço de e-mail privado. Por exemplo. O usuário 'joe' e 'noreply.example.org' será 'joe@noreply.example.org'
|
no_reply_address_helper=Domínio para o endereço de e-mail do usuário nos registros do git se ele mantiver seu endereço de e-mail privado. Por exemplo. O usuário 'joe' e 'noreply.example.org' será 'joe@noreply.example.org'
|
||||||
|
|
||||||
|
@ -121,6 +143,7 @@ uname_holder=Nome de usuário ou e-mail
|
||||||
password_holder=Senha
|
password_holder=Senha
|
||||||
switch_dashboard_context=Trocar contexto do painel de controle
|
switch_dashboard_context=Trocar contexto do painel de controle
|
||||||
my_repos=Meus repositórios
|
my_repos=Meus repositórios
|
||||||
|
show_more_repos=Mostrar mais repositórios...
|
||||||
collaborative_repos=Repositórios colaborativos
|
collaborative_repos=Repositórios colaborativos
|
||||||
my_orgs=Minhas organizações
|
my_orgs=Minhas organizações
|
||||||
my_mirrors=Meus mirrors
|
my_mirrors=Meus mirrors
|
||||||
|
@ -134,9 +157,14 @@ repos=Repositórios
|
||||||
users=Usuários
|
users=Usuários
|
||||||
organizations=Organizações
|
organizations=Organizações
|
||||||
search=Pesquisar
|
search=Pesquisar
|
||||||
|
repo_no_results=Nenhum repositório correspondente foi encontrado.
|
||||||
|
user_no_results=Nenhum usuário correspondente foi encontrado.
|
||||||
|
org_no_results=Nenhuma organização correspondente foi encontrada.
|
||||||
|
|
||||||
[auth]
|
[auth]
|
||||||
|
create_new_account=Criar conta
|
||||||
register_helper_msg=Já tem uma conta? Entre agora!
|
register_helper_msg=Já tem uma conta? Entre agora!
|
||||||
|
social_register_helper_msg=Já tem uma conta? Entre agora!
|
||||||
disable_register_prompt=Desculpe, novos registros estão desabilitados. Por favor entre em contato com o administrador do site.
|
disable_register_prompt=Desculpe, novos registros estão desabilitados. Por favor entre em contato com o administrador do site.
|
||||||
disable_register_mail=Desculpe, a confirmação de registro por e-mail foi desabilitada.
|
disable_register_mail=Desculpe, a confirmação de registro por e-mail foi desabilitada.
|
||||||
remember_me=Lembrar de mim
|
remember_me=Lembrar de mim
|
||||||
|
@ -149,7 +177,10 @@ prohibit_login_desc=Sua conta foi proibida de fazer login, por favor contate o a
|
||||||
resent_limit_prompt=Desculpe, você já requisitou um e-mail de ativação recentemente. Por favor, espere 3 minutos para tentar novamente.
|
resent_limit_prompt=Desculpe, você já requisitou um e-mail de ativação recentemente. Por favor, espere 3 minutos para tentar novamente.
|
||||||
has_unconfirmed_mail=Oi %s, você possui um endereço de e-mail não confirmado (<b>%s</b>). Se você não recebeu um e-mail de confirmação ou precisa reenviar um novo, clique no botão abaixo.
|
has_unconfirmed_mail=Oi %s, você possui um endereço de e-mail não confirmado (<b>%s</b>). Se você não recebeu um e-mail de confirmação ou precisa reenviar um novo, clique no botão abaixo.
|
||||||
resend_mail=Clique aqui para reenviar seu e-mail de ativação
|
resend_mail=Clique aqui para reenviar seu e-mail de ativação
|
||||||
|
email_not_associate=O endereço de e-mail não está associado à nenhuma conta.
|
||||||
|
send_reset_mail=Clique aqui para re-enviar seu e-mail de redefinição de senha
|
||||||
reset_password=Redefinir sua senha
|
reset_password=Redefinir sua senha
|
||||||
|
invalid_code=Desculpe, seu código de confirmação expirou ou não é válido.
|
||||||
reset_password_helper=Clique aqui para redefinir sua senha
|
reset_password_helper=Clique aqui para redefinir sua senha
|
||||||
password_too_short=O comprimento da senha não pode ser menor que %d.
|
password_too_short=O comprimento da senha não pode ser menor que %d.
|
||||||
non_local_account=Contas não-locais não podem mudar sua senha através da interface web do Gitea.
|
non_local_account=Contas não-locais não podem mudar sua senha através da interface web do Gitea.
|
||||||
|
@ -157,6 +188,8 @@ verify=Verificar
|
||||||
scratch_code=Código de backup
|
scratch_code=Código de backup
|
||||||
use_scratch_code=Use um código de backup
|
use_scratch_code=Use um código de backup
|
||||||
twofa_scratch_used=Você usou seu código de backup. Você foi redirecionado para a página de configurações de dois fatores para que você possa remover a inscrição de seu dispositivo ou gerar um novo código de backup.
|
twofa_scratch_used=Você usou seu código de backup. Você foi redirecionado para a página de configurações de dois fatores para que você possa remover a inscrição de seu dispositivo ou gerar um novo código de backup.
|
||||||
|
twofa_passcode_incorrect=Seu código de acesso está incorreto. Se você perdeu seu dispositivo, use seu código de backup para fazer login.
|
||||||
|
twofa_scratch_token_incorrect=Seu código de backup está incorreto.
|
||||||
login_userpass=Usuário / Senha
|
login_userpass=Usuário / Senha
|
||||||
login_openid=OpenID
|
login_openid=OpenID
|
||||||
openid_connect_submit=Conectar
|
openid_connect_submit=Conectar
|
||||||
|
@ -170,6 +203,7 @@ activate_account=Por favor, ative sua conta
|
||||||
activate_email=Verifique seu endereço de e-mail
|
activate_email=Verifique seu endereço de e-mail
|
||||||
reset_password=Resetar sua senha
|
reset_password=Resetar sua senha
|
||||||
register_success=Registro bem-sucedido
|
register_success=Registro bem-sucedido
|
||||||
|
register_notify=Bem-vindo ao Gitea
|
||||||
|
|
||||||
[modal]
|
[modal]
|
||||||
yes=Sim
|
yes=Sim
|
||||||
|
@ -207,10 +241,32 @@ email_error=` não é um endereço de e-mail válido.`
|
||||||
url_error=`não é uma URL válida.`
|
url_error=`não é uma URL válida.`
|
||||||
include_error=` deve conter '%s'.`
|
include_error=` deve conter '%s'.`
|
||||||
unknown_error=Erro desconhecido:
|
unknown_error=Erro desconhecido:
|
||||||
|
captcha_incorrect=Resposta ao CAPTCHA incorreta.
|
||||||
|
password_not_match=As senhas escolhidas não coincidem.
|
||||||
|
|
||||||
|
username_been_taken=O nome de usuário já está sendo usado.
|
||||||
|
repo_name_been_taken=O nome de repositório já está sendo usado.
|
||||||
|
org_name_been_taken=O nome da organização já está sendo usado.
|
||||||
|
team_name_been_taken=O nome de equipe já está sendo usado.
|
||||||
|
email_been_used=O endereço de e-mail já está sendo usado.
|
||||||
|
openid_been_used=O endereço OpenID '%s' já está sendo usado.
|
||||||
|
username_password_incorrect=Nome de usuário ou senha incorretos.
|
||||||
|
enterred_invalid_repo_name=Por favor certifique-se de que o nome do repositório está correto.
|
||||||
|
enterred_invalid_owner_name=Por favor certifique-se de que o nome do proprietário está correto.
|
||||||
|
enterred_invalid_password=Por favor certifique-se de que a senha está correta.
|
||||||
|
user_not_exist=O usuário não existe.
|
||||||
|
last_org_owner=Não é permitido remover o último usuário da equipe de proprietários, pois deve haver pelo menos um proprietário em uma organização.
|
||||||
|
cannot_add_org_to_team=Uma organização não pode ser adicionada como membro de uma equipe.
|
||||||
|
cannot_invite_org_to_org=Uma organização não pode ser convidada a fazer parte de outra organização.
|
||||||
|
|
||||||
|
invalid_ssh_key=Desculpe, não conseguimos verificar a sua chave SSH: %s
|
||||||
|
invalid_gpg_key=Desculpe, não conseguimos verificar a sua chave GPG: %s
|
||||||
|
unable_verify_ssh_key=A chave SSH não pôde ser verificada. Por favor cheque se não há nenhum problema com ela.
|
||||||
auth_failed=A autenticação falhou: %v
|
auth_failed=A autenticação falhou: %v
|
||||||
|
|
||||||
|
still_own_repo=Sua conta ainda é proprietária de ao menos um repositório; você tem que excluí-los ou transferi-los primeiro.
|
||||||
|
still_has_org=Sua conta ainda é membro de ao menos uma organização. Você precisa deixá-las primeiro.
|
||||||
|
org_still_own_repo=Esta organização ainda é proprietária de ao menos um repositório; você tem que excluí-los ou transferi-los primeiro.
|
||||||
|
|
||||||
target_branch_not_exist=O branch de destino não existe.
|
target_branch_not_exist=O branch de destino não existe.
|
||||||
|
|
||||||
|
@ -237,14 +293,19 @@ orgs=Organizações
|
||||||
delete=Excluir conta
|
delete=Excluir conta
|
||||||
twofa=Autenticação de dois fatores
|
twofa=Autenticação de dois fatores
|
||||||
account_link=Contas externas
|
account_link=Contas externas
|
||||||
|
organization=Organização
|
||||||
uid=Uid
|
uid=Uid
|
||||||
|
|
||||||
public_profile=Perfil público
|
public_profile=Perfil público
|
||||||
|
profile_desc=Seu endereço de e-mail é publico e será usado para quaisquer notificações relacionadas à sua conta, além de operações pela interface web do Gitea.
|
||||||
|
password_username_disabled=Usuários não-locais não podem alterar seus nomes de usuário. Por favor contate o administrador do sistema para mais informações.
|
||||||
full_name=Nome completo
|
full_name=Nome completo
|
||||||
website=Site
|
website=Site
|
||||||
location=Localização
|
location=Localização
|
||||||
update_profile=Atualizar o perfil
|
update_profile=Atualizar o perfil
|
||||||
|
update_profile_success=Seu perfil foi atualizado.
|
||||||
change_username=Nome de usuário alterado
|
change_username=Nome de usuário alterado
|
||||||
|
change_username_prompt=Esta mudança vai alterar os links para sua conta.
|
||||||
continue=Continuar
|
continue=Continuar
|
||||||
cancel=Cancelar
|
cancel=Cancelar
|
||||||
|
|
||||||
|
@ -260,6 +321,7 @@ change_password=Mudança de senha
|
||||||
old_password=Senha Atual
|
old_password=Senha Atual
|
||||||
new_password=Nova senha
|
new_password=Nova senha
|
||||||
retype_new_password=Digite novamente a nova senha
|
retype_new_password=Digite novamente a nova senha
|
||||||
|
password_incorrect=A senha atual está incorreta.
|
||||||
change_password_success=Sua senha foi alterada com sucesso. Agora você pode fazer login usando sua nova conta.
|
change_password_success=Sua senha foi alterada com sucesso. Agora você pode fazer login usando sua nova conta.
|
||||||
password_change_disabled=Usuários não-locais não são permitidos mudar suas senhas pela interface web.
|
password_change_disabled=Usuários não-locais não são permitidos mudar suas senhas pela interface web.
|
||||||
|
|
||||||
|
@ -270,6 +332,7 @@ email_desc=Seu endereço de e-mail principal será usado para notificações e o
|
||||||
primary=Principal
|
primary=Principal
|
||||||
primary_email=Definir como principal
|
primary_email=Definir como principal
|
||||||
delete_email=Excluir
|
delete_email=Excluir
|
||||||
|
email_deletion=Excluir e-mail
|
||||||
email_deletion_success=O e-mail foi excluído com sucesso!
|
email_deletion_success=O e-mail foi excluído com sucesso!
|
||||||
openid_deletion=Deleção de OpenID
|
openid_deletion=Deleção de OpenID
|
||||||
openid_deletion_success=OpenID foi deletado com sucesso!
|
openid_deletion_success=OpenID foi deletado com sucesso!
|
||||||
|
@ -687,7 +750,6 @@ settings.wiki_delete_notices_1=- Isso irá excluir e desativar a wiki para %s
|
||||||
settings.delete=Excluir este repositório
|
settings.delete=Excluir este repositório
|
||||||
settings.delete_desc=Uma vez que você remova um repositório, não tem volta. Por favor, tenha certeza.
|
settings.delete_desc=Uma vez que você remova um repositório, não tem volta. Por favor, tenha certeza.
|
||||||
settings.delete_notices_1=-Esta operação <strong>NÃO PODERÁ</strong> ser desfeita.
|
settings.delete_notices_1=-Esta operação <strong>NÃO PODERÁ</strong> ser desfeita.
|
||||||
settings.delete_notices_fork_1=-Todos os forks se tornarão independentes após a exclusão.
|
|
||||||
settings.transfer_owner=Novo dono
|
settings.transfer_owner=Novo dono
|
||||||
settings.make_transfer=Fazer transferência
|
settings.make_transfer=Fazer transferência
|
||||||
settings.confirm_delete=Confirmar exclusão
|
settings.confirm_delete=Confirmar exclusão
|
||||||
|
@ -794,7 +856,6 @@ release.source_code=Código fonte
|
||||||
release.new_subheader=Publique lançamentos e gerencie as versões do projeto.
|
release.new_subheader=Publique lançamentos e gerencie as versões do projeto.
|
||||||
release.tag_name=Nome da tag
|
release.tag_name=Nome da tag
|
||||||
release.target=Destino
|
release.target=Destino
|
||||||
release.tag_helper=Escolha uma tag existente, ou crie uma nova tag em publicar.
|
|
||||||
release.title=Título
|
release.title=Título
|
||||||
release.content=Conteúdo
|
release.content=Conteúdo
|
||||||
release.write=Escrever
|
release.write=Escrever
|
||||||
|
@ -815,7 +876,6 @@ release.downloads=Downloads
|
||||||
branch.delete=Excluir branch %s
|
branch.delete=Excluir branch %s
|
||||||
branch.delete_notices_1=- Esta operação <strong>NÃO PODE</strong> ser desfeita.
|
branch.delete_notices_1=- Esta operação <strong>NÃO PODE</strong> ser desfeita.
|
||||||
branch.deletion_failed=Falha ao excluir branch %s.
|
branch.deletion_failed=Falha ao excluir branch %s.
|
||||||
branch.delete_branch_has_new_commits=%s não pode ser deletado porque há novos commit após o merge.
|
|
||||||
|
|
||||||
[org]
|
[org]
|
||||||
org_name_holder=Nome da organização
|
org_name_holder=Nome da organização
|
||||||
|
@ -849,7 +909,6 @@ settings.delete_account=Excluir esta organização
|
||||||
settings.delete_prompt=A operação irá excluir esta organização permanentemente, e <strong>NÃO PODERÁ</strong> ser desfeita!
|
settings.delete_prompt=A operação irá excluir esta organização permanentemente, e <strong>NÃO PODERÁ</strong> ser desfeita!
|
||||||
settings.confirm_delete_account=Confirmar exclusão
|
settings.confirm_delete_account=Confirmar exclusão
|
||||||
settings.delete_org_title=Exclusão da organização
|
settings.delete_org_title=Exclusão da organização
|
||||||
settings.hooks_desc=Adicionar webhooks que serão acionados para <strong>todos os repositórios</strong> dessa organização.
|
|
||||||
|
|
||||||
members.membership_visibility=Visibilidade da associação:
|
members.membership_visibility=Visibilidade da associação:
|
||||||
members.public=Público
|
members.public=Público
|
||||||
|
@ -880,7 +939,6 @@ teams.update_settings=Atualizar configurações
|
||||||
teams.delete_team=Excluir esta equipe
|
teams.delete_team=Excluir esta equipe
|
||||||
teams.add_team_member=Adicionar membro na equipe
|
teams.add_team_member=Adicionar membro na equipe
|
||||||
teams.delete_team_title=Exclusão da equipe
|
teams.delete_team_title=Exclusão da equipe
|
||||||
teams.delete_team_desc=Este equipe será excluída, você quer continuar? Membros desta equipe poderão perder acesso a alguns repositórios.
|
|
||||||
teams.read_permission_desc=Essa equipe concede acesso para <strong>Leitura</strong>: membros podem ver e clonar os repositórios da equipe.
|
teams.read_permission_desc=Essa equipe concede acesso para <strong>Leitura</strong>: membros podem ver e clonar os repositórios da equipe.
|
||||||
teams.write_permission_desc=Esta equipe concede acesso para <strong>escrita</strong>: Membros podem ler e fazer push para os repositórios da equipe.
|
teams.write_permission_desc=Esta equipe concede acesso para <strong>escrita</strong>: Membros podem ler e fazer push para os repositórios da equipe.
|
||||||
teams.admin_permission_desc=Esta equipe concede acesso de <strong>Administrador</strong>: Membros podem ler, fazer push e adicionar outros colaboradores para os repositórios da equipe.
|
teams.admin_permission_desc=Esta equipe concede acesso de <strong>Administrador</strong>: Membros podem ler, fazer push e adicionar outros colaboradores para os repositórios da equipe.
|
||||||
|
@ -912,11 +970,9 @@ dashboard.operation_switch=Trocar
|
||||||
dashboard.operation_run=Executar
|
dashboard.operation_run=Executar
|
||||||
dashboard.delete_inactivate_accounts=Excluir todas as contas inativas
|
dashboard.delete_inactivate_accounts=Excluir todas as contas inativas
|
||||||
dashboard.delete_repo_archives=Excluir todos os arquivos dos repositórios
|
dashboard.delete_repo_archives=Excluir todos os arquivos dos repositórios
|
||||||
dashboard.delete_missing_repos=Deletar todos os registros de repositórios que não possuem arquivos Git correspondentes
|
|
||||||
dashboard.git_gc_repos=Executar a coleção de lixo em todos os repositórios
|
dashboard.git_gc_repos=Executar a coleção de lixo em todos os repositórios
|
||||||
dashboard.resync_all_sshkeys=Reescrever arquivo '.ssh/authorized_keys' (para chaves SSH do Gitea)
|
dashboard.resync_all_sshkeys=Reescrever arquivo '.ssh/authorized_keys' (para chaves SSH do Gitea)
|
||||||
dashboard.resync_all_hooks=Resincronizar hooks pre-receive, update e post-receive de todos os repositórios.
|
dashboard.resync_all_hooks=Resincronizar hooks pre-receive, update e post-receive de todos os repositórios.
|
||||||
dashboard.reinit_missing_repos=Reinicializar todos os repositórios Git perdidos cujos registros existem
|
|
||||||
dashboard.server_uptime=Uptime do Servidor
|
dashboard.server_uptime=Uptime do Servidor
|
||||||
dashboard.current_goroutine=Goroutines Atuais
|
dashboard.current_goroutine=Goroutines Atuais
|
||||||
dashboard.current_memory_usage=Uso de memória atual
|
dashboard.current_memory_usage=Uso de memória atual
|
||||||
|
@ -1010,7 +1066,6 @@ auths.smtp_auth=Tipo de autenticação SMTP
|
||||||
auths.smtphost=Host SMTP
|
auths.smtphost=Host SMTP
|
||||||
auths.smtpport=Porta SMTP
|
auths.smtpport=Porta SMTP
|
||||||
auths.allowed_domains=Domínios autorizados
|
auths.allowed_domains=Domínios autorizados
|
||||||
auths.allowed_domains_helper=Deixe em branco para permitir qualquer domínio do host SMTP. Vários domínios devem ser separados por vírgula ','.
|
|
||||||
auths.enable_tls=Habilitar Criptografia TLS
|
auths.enable_tls=Habilitar Criptografia TLS
|
||||||
auths.skip_tls_verify=Ignorar verificação de TLS
|
auths.skip_tls_verify=Ignorar verificação de TLS
|
||||||
auths.pam_service_name=Nome de Serviço PAM
|
auths.pam_service_name=Nome de Serviço PAM
|
||||||
|
@ -1043,7 +1098,6 @@ config.reverse_auth_user=Usuário de autenticação reversa
|
||||||
|
|
||||||
config.ssh_config=Configuração de SSH
|
config.ssh_config=Configuração de SSH
|
||||||
config.ssh_enabled=Habilitado
|
config.ssh_enabled=Habilitado
|
||||||
config.ssh_start_builtin_server=Iniciar servidor embutido
|
|
||||||
config.ssh_domain=Domínio
|
config.ssh_domain=Domínio
|
||||||
config.ssh_port=Porta
|
config.ssh_port=Porta
|
||||||
config.ssh_listen_port=Porta de escuta
|
config.ssh_listen_port=Porta de escuta
|
||||||
|
|
|
@ -34,6 +34,7 @@ mirror=Зеркало
|
||||||
new_repo=Новый репозиторий
|
new_repo=Новый репозиторий
|
||||||
new_migrate=Новая миграция
|
new_migrate=Новая миграция
|
||||||
new_mirror=Новое зеркало
|
new_mirror=Новое зеркало
|
||||||
|
new_fork=Новый форк репозитория
|
||||||
new_org=Новая организация
|
new_org=Новая организация
|
||||||
manage_org=Управление организациями
|
manage_org=Управление организациями
|
||||||
admin_panel=Панель администратора
|
admin_panel=Панель администратора
|
||||||
|
@ -43,6 +44,11 @@ your_profile=Ваш профиль
|
||||||
your_starred=Ваше избранное
|
your_starred=Ваше избранное
|
||||||
your_settings=Ваши настройки
|
your_settings=Ваши настройки
|
||||||
|
|
||||||
|
all=Все
|
||||||
|
sources=Источники
|
||||||
|
mirrors=Зеркала
|
||||||
|
forks=Ответвления
|
||||||
|
|
||||||
activities=Активность
|
activities=Активность
|
||||||
pull_requests=Запросы на слияние
|
pull_requests=Запросы на слияние
|
||||||
issues=Задачи
|
issues=Задачи
|
||||||
|
@ -51,6 +57,7 @@ cancel=Отмена
|
||||||
|
|
||||||
[install]
|
[install]
|
||||||
install=Установка
|
install=Установка
|
||||||
|
title=Начальная конфигурация
|
||||||
docker_helper=Если вы запускаете Gitea внутри Docker, пожалуйста прочтите <a target="_blank" rel="noopener" href="%s">эти советы</a> внимательно перед тем как что-либо изменить на этой странице.
|
docker_helper=Если вы запускаете Gitea внутри Docker, пожалуйста прочтите <a target="_blank" rel="noopener" href="%s">эти советы</a> внимательно перед тем как что-либо изменить на этой странице.
|
||||||
requite_db_desc=Gitea требует MySQL, PostgreSQL, SQLite3 или TiDB.
|
requite_db_desc=Gitea требует MySQL, PostgreSQL, SQLite3 или TiDB.
|
||||||
db_title=Настройки базы данных
|
db_title=Настройки базы данных
|
||||||
|
@ -68,8 +75,10 @@ err_invalid_tidb_name=Имя базы данных TiDB не может соде
|
||||||
no_admin_and_disable_registration=Вы не можете отключить регистрацию до создания учетной записи администратора.
|
no_admin_and_disable_registration=Вы не можете отключить регистрацию до создания учетной записи администратора.
|
||||||
err_empty_admin_password=Пароль администратора не может быть пустым.
|
err_empty_admin_password=Пароль администратора не может быть пустым.
|
||||||
|
|
||||||
|
general_title=Общие параметры приложения
|
||||||
app_name=Имя приложения
|
app_name=Имя приложения
|
||||||
repo_path=Путь корня репозитория
|
repo_path=Путь корня репозитория
|
||||||
|
repo_path_helper=Все удаленные Git репозиториии будут сохранены в этот каталог.
|
||||||
lfs_path=Корень LFS
|
lfs_path=Корень LFS
|
||||||
lfs_path_helper=В этой папке будут храниться файлы, хранящиеся Git LFS. Оставьте пустым, чтобы отключить LFS.
|
lfs_path_helper=В этой папке будут храниться файлы, хранящиеся Git LFS. Оставьте пустым, чтобы отключить LFS.
|
||||||
run_user=Пользователь
|
run_user=Пользователь
|
||||||
|
@ -118,6 +127,7 @@ save_config_failed=Не удалось сохранить конфигураци
|
||||||
invalid_admin_setting=Указан недопустимый параметр учетной записи администратора: %v
|
invalid_admin_setting=Указан недопустимый параметр учетной записи администратора: %v
|
||||||
invalid_log_root_path=Недопустимый путь для логов: %v
|
invalid_log_root_path=Недопустимый путь для логов: %v
|
||||||
default_keep_email_private_popup=Это значение по умолчанию видимости адреса электронной почты пользователей. Если задано значение true, адрес электронной почты всех новых пользователей будет скрыт до того, как пользователь сам изменит настройки приватности.
|
default_keep_email_private_popup=Это значение по умолчанию видимости адреса электронной почты пользователей. Если задано значение true, адрес электронной почты всех новых пользователей будет скрыт до того, как пользователь сам изменит настройки приватности.
|
||||||
|
no_reply_address=No-reply адрес
|
||||||
|
|
||||||
[home]
|
[home]
|
||||||
uname_holder=Имя пользователя или E-mail
|
uname_holder=Имя пользователя или E-mail
|
||||||
|
@ -162,11 +172,16 @@ reset_password_helper=Нажмите здесь, чтобы сбросить с
|
||||||
password_too_short=Длина пароля не менее %d символов.
|
password_too_short=Длина пароля не менее %d символов.
|
||||||
verify=Проверить
|
verify=Проверить
|
||||||
scratch_code=Одноразовый пароль
|
scratch_code=Одноразовый пароль
|
||||||
|
login_userpass=Пользователь / пароль
|
||||||
|
login_openid=OpenID
|
||||||
|
openid_register_title=Создать новый аккаунт
|
||||||
|
|
||||||
[mail]
|
[mail]
|
||||||
activate_account=Пожалуйста активируйте свой аккаунт
|
activate_account=Пожалуйста активируйте свой аккаунт
|
||||||
activate_email=Подтвердите адрес своей электронной почты
|
activate_email=Подтвердите адрес своей электронной почты
|
||||||
reset_password=Восстановите ваш пароль
|
reset_password=Восстановите ваш пароль
|
||||||
|
register_success=Регистрация прошла успешно
|
||||||
|
register_notify=Добро пожаловать на Gitea
|
||||||
|
|
||||||
[modal]
|
[modal]
|
||||||
yes=Да
|
yes=Да
|
||||||
|
@ -201,8 +216,23 @@ email_error=«не является адресом электронной поч
|
||||||
url_error=` не является допустимым URL-адресом.`
|
url_error=` не является допустимым URL-адресом.`
|
||||||
include_error=` должен содержать '%s'.`
|
include_error=` должен содержать '%s'.`
|
||||||
unknown_error=Неизвестная ошибка:
|
unknown_error=Неизвестная ошибка:
|
||||||
|
captcha_incorrect=Капча не пройдена.
|
||||||
|
|
||||||
|
username_been_taken=Имя пользователя уже занято.
|
||||||
|
repo_name_been_taken=Имя репозитория уже используется.
|
||||||
|
org_name_been_taken=Название организации уже занято.
|
||||||
|
team_name_been_taken=Название команды уже занято.
|
||||||
|
email_been_used=Адрес электронной почты уже занят.
|
||||||
|
openid_been_used=Адрес OpenID '%s' уже используется.
|
||||||
|
username_password_incorrect=Неверное имя пользователя или пароль.
|
||||||
|
enterred_invalid_repo_name=Пожалуйста, убедитесь, что введено правильное имя репозитория.
|
||||||
|
enterred_invalid_owner_name=Убедитесь, что введенное имя владельца верное.
|
||||||
|
enterred_invalid_password=Убедитесь, что введенный пароль верен.
|
||||||
|
user_not_exist=Пользователь не существует.
|
||||||
|
last_org_owner=Удаление последнего пользователя из команды владельцев не разрешается, поскольку всегда должен быть по крайней мере один владелец в любой организации.
|
||||||
|
|
||||||
|
invalid_ssh_key=К сожалению, мы не смогли проверить ваш SSH-ключ: %s
|
||||||
|
invalid_gpg_key=К сожалению, мы не смогли проверить ваш GPG-ключ: %s
|
||||||
auth_failed=Ошибка аутентификации: %v
|
auth_failed=Ошибка аутентификации: %v
|
||||||
|
|
||||||
|
|
||||||
|
@ -219,16 +249,21 @@ following=Подписан
|
||||||
follow=Подписаться
|
follow=Подписаться
|
||||||
unfollow=Отписаться
|
unfollow=Отписаться
|
||||||
|
|
||||||
|
form.name_reserved=Имя пользователя '%s' зарезервировано.
|
||||||
|
form.name_pattern_not_allowed=Шаблон имени пользователя '%s' не допускается.
|
||||||
|
|
||||||
[settings]
|
[settings]
|
||||||
profile=Профиль
|
profile=Профиль
|
||||||
password=Пароль
|
password=Пароль
|
||||||
avatar=Аватар
|
avatar=Аватар
|
||||||
|
ssh_gpg_keys=SSH / GPG ключи
|
||||||
social=Учетные записи в соцсетях
|
social=Учетные записи в соцсетях
|
||||||
applications=Приложения
|
applications=Приложения
|
||||||
orgs=Организации
|
orgs=Организации
|
||||||
delete=Удалить аккаунт
|
delete=Удалить аккаунт
|
||||||
twofa=Двухфакторная аутентификация
|
twofa=Двухфакторная аутентификация
|
||||||
|
account_link=Внешние учетные записи
|
||||||
|
organization=Организация
|
||||||
uid=UID
|
uid=UID
|
||||||
|
|
||||||
public_profile=Открытый профиль
|
public_profile=Открытый профиль
|
||||||
|
@ -236,7 +271,9 @@ full_name=ФИО
|
||||||
website=Веб-сайт
|
website=Веб-сайт
|
||||||
location=Местоположение
|
location=Местоположение
|
||||||
update_profile=Обновить профиль
|
update_profile=Обновить профиль
|
||||||
|
update_profile_success=Ваш профиль успешно обновлен.
|
||||||
change_username=Имя пользователя изменено
|
change_username=Имя пользователя изменено
|
||||||
|
change_username_prompt=Это изменение изменит ссылки на ваш аккаунт.
|
||||||
continue=Далее
|
continue=Далее
|
||||||
cancel=Отмена
|
cancel=Отмена
|
||||||
|
|
||||||
|
@ -247,11 +284,13 @@ choose_new_avatar=Выбрать новый аватар
|
||||||
update_avatar=Обновить настройку аватара
|
update_avatar=Обновить настройку аватара
|
||||||
delete_current_avatar=Удалить текущий аватар
|
delete_current_avatar=Удалить текущий аватар
|
||||||
uploaded_avatar_not_a_image=Загружаемый файл не является изображением.
|
uploaded_avatar_not_a_image=Загружаемый файл не является изображением.
|
||||||
|
update_avatar_success=Настройка вашего аватара обновлена.
|
||||||
|
|
||||||
change_password=Сменить пароль
|
change_password=Сменить пароль
|
||||||
old_password=Текущий пароль
|
old_password=Текущий пароль
|
||||||
new_password=Новый пароль
|
new_password=Новый пароль
|
||||||
retype_new_password=Подтверждение нового пароля
|
retype_new_password=Подтверждение нового пароля
|
||||||
|
password_incorrect=Текущий пароль неправильный.
|
||||||
|
|
||||||
emails=Адреса электронной почты
|
emails=Адреса электронной почты
|
||||||
manage_emails=Управление адресами электронной почты
|
manage_emails=Управление адресами электронной почты
|
||||||
|
@ -267,13 +306,26 @@ add_email_success=Новый адрес электронной почты усп
|
||||||
manage_ssh_keys=Управление SSH ключами
|
manage_ssh_keys=Управление SSH ключами
|
||||||
add_key=Добавить ключ
|
add_key=Добавить ключ
|
||||||
add_new_key=Добавить SSH ключ
|
add_new_key=Добавить SSH ключ
|
||||||
|
add_new_gpg_key=Добавить GPG ключ
|
||||||
|
ssh_key_been_used=Этот публичный ключ уже был использован.
|
||||||
|
ssh_key_name_used=Публичный ключ с таким же именем уже существует.
|
||||||
|
gpg_key_id_used=Публичный GPG ключ с таким же идентификатором уже существует.
|
||||||
|
key_id=ИД ключа
|
||||||
key_name=Имя ключа
|
key_name=Имя ключа
|
||||||
key_content=Содержимое
|
key_content=Содержимое
|
||||||
delete_key=Удалить
|
delete_key=Удалить
|
||||||
ssh_key_deletion=Удаление ключа SSH
|
ssh_key_deletion=Удаление ключа SSH
|
||||||
|
ssh_key_deletion_success=SSH ключ был удален.
|
||||||
|
gpg_key_deletion_success=GPG ключ был удален.
|
||||||
add_on=Добавлено
|
add_on=Добавлено
|
||||||
|
valid_until=Действителен до
|
||||||
|
valid_forever=Действителен навсегда
|
||||||
last_used=Последний раз использовался
|
last_used=Последний раз использовался
|
||||||
no_activity=Еще не применялся
|
no_activity=Еще не применялся
|
||||||
|
key_state_desc=Этот ключ использовался в течение последних 7 дней
|
||||||
|
token_state_desc=Этот токен использовался в течение последних 7 дней
|
||||||
|
show_openid=Показывать в профиле
|
||||||
|
hide_openid=Скрыть из профиля
|
||||||
|
|
||||||
manage_social=Управление привязанными учетными записями в соцсетях
|
manage_social=Управление привязанными учетными записями в соцсетях
|
||||||
unbind=Отвязать
|
unbind=Отвязать
|
||||||
|
@ -622,7 +674,6 @@ settings.wiki_delete_notices_1=-Это будет удалено и отключ
|
||||||
settings.delete=Удалить этот репозиторий
|
settings.delete=Удалить этот репозиторий
|
||||||
settings.delete_desc=Будьте внимательны! Как только вы удалите репозиторий — пути назад не будет.
|
settings.delete_desc=Будьте внимательны! Как только вы удалите репозиторий — пути назад не будет.
|
||||||
settings.delete_notices_1=- Эта операция <strong>НЕ МОЖЕТ</strong> быть отменена.
|
settings.delete_notices_1=- Эта операция <strong>НЕ МОЖЕТ</strong> быть отменена.
|
||||||
settings.delete_notices_fork_1=- Все отвлетвления станут независимыми после удаления.
|
|
||||||
settings.transfer_owner=Новый владелец
|
settings.transfer_owner=Новый владелец
|
||||||
settings.make_transfer=Выполнить передачу
|
settings.make_transfer=Выполнить передачу
|
||||||
settings.confirm_delete=Подтвердить удаление
|
settings.confirm_delete=Подтвердить удаление
|
||||||
|
@ -708,7 +759,6 @@ release.ahead=<strong>%d</strong> коммитов %s начиная с этог
|
||||||
release.source_code=Исходный код
|
release.source_code=Исходный код
|
||||||
release.tag_name=Имя тега
|
release.tag_name=Имя тега
|
||||||
release.target=Цель
|
release.target=Цель
|
||||||
release.tag_helper=Выберите существующий тег, или создайте новый.
|
|
||||||
release.title=Заголовок
|
release.title=Заголовок
|
||||||
release.content=Содержимое
|
release.content=Содержимое
|
||||||
release.write=Запись
|
release.write=Запись
|
||||||
|
@ -757,7 +807,6 @@ settings.delete_account=Удалить Эту Организацию
|
||||||
settings.delete_prompt=Это действие безвозвратно удалит эту организацию навсегда.
|
settings.delete_prompt=Это действие безвозвратно удалит эту организацию навсегда.
|
||||||
settings.confirm_delete_account=Подтвердить удаление
|
settings.confirm_delete_account=Подтвердить удаление
|
||||||
settings.delete_org_title=Удаление Организации
|
settings.delete_org_title=Удаление Организации
|
||||||
settings.hooks_desc=Добавьте автоматическое обновление, который будет вызываться для <strong>всех репозиций</strong> под этой Группой.
|
|
||||||
|
|
||||||
members.membership_visibility=Видимость участника команды:
|
members.membership_visibility=Видимость участника команды:
|
||||||
members.public=Публичный
|
members.public=Публичный
|
||||||
|
@ -786,7 +835,6 @@ teams.update_settings=Обновить настройки
|
||||||
teams.delete_team=Удалить эту группу разработки
|
teams.delete_team=Удалить эту группу разработки
|
||||||
teams.add_team_member=Добавление члена группы разработки
|
teams.add_team_member=Добавление члена группы разработки
|
||||||
teams.delete_team_title=Удалить группу разработки
|
teams.delete_team_title=Удалить группу разработки
|
||||||
teams.delete_team_desc=Эта команда будет удалена. Вы хотите продолжить? Члены этой группы могут потерять доступ к некоторым репозиториям.
|
|
||||||
teams.read_permission_desc=Эта команда предоставляет доступ на <strong>Чтение</strong>: члены могут просматривать и клонировать репозитории команды.
|
teams.read_permission_desc=Эта команда предоставляет доступ на <strong>Чтение</strong>: члены могут просматривать и клонировать репозитории команды.
|
||||||
teams.write_permission_desc=Эта команда предоставляет доступ на <strong>Запись</strong>: члены могут получать и выполнять push команды в репозитории.
|
teams.write_permission_desc=Эта команда предоставляет доступ на <strong>Запись</strong>: члены могут получать и выполнять push команды в репозитории.
|
||||||
teams.admin_permission_desc=Эта команда дает <strong>административный</strong> доступ: участники могут читать, пушить и добавлять соавторов к ее репозиториям.
|
teams.admin_permission_desc=Эта команда дает <strong>административный</strong> доступ: участники могут читать, пушить и добавлять соавторов к ее репозиториям.
|
||||||
|
@ -906,7 +954,6 @@ auths.smtp_auth=Тип аутентификации SMTP
|
||||||
auths.smtphost=Узел SMTP
|
auths.smtphost=Узел SMTP
|
||||||
auths.smtpport=SMTP-порт
|
auths.smtpport=SMTP-порт
|
||||||
auths.allowed_domains=Разрешенные домены
|
auths.allowed_domains=Разрешенные домены
|
||||||
auths.allowed_domains_helper=Оставьте пустым чтобы не ограничивать домены. Несколько доменов должны быть разделены запятыми ','.
|
|
||||||
auths.enable_tls=Включение шифрования TLS
|
auths.enable_tls=Включение шифрования TLS
|
||||||
auths.skip_tls_verify=Пропустить проверку TLS
|
auths.skip_tls_verify=Пропустить проверку TLS
|
||||||
auths.pam_service_name=Имя службы PAM
|
auths.pam_service_name=Имя службы PAM
|
||||||
|
@ -934,7 +981,6 @@ config.reverse_auth_user=Заголовок с именем пользовате
|
||||||
|
|
||||||
config.ssh_config=Конфигурация SSH
|
config.ssh_config=Конфигурация SSH
|
||||||
config.ssh_enabled=Включено
|
config.ssh_enabled=Включено
|
||||||
config.ssh_start_builtin_server=Запустить встроенный сервер
|
|
||||||
config.ssh_domain=Домен
|
config.ssh_domain=Домен
|
||||||
config.ssh_port=Порт
|
config.ssh_port=Порт
|
||||||
config.ssh_listen_port=Прослушиваемый порт
|
config.ssh_listen_port=Прослушиваемый порт
|
||||||
|
@ -967,6 +1013,7 @@ config.active_code_lives=Время жизни кода для активаци
|
||||||
config.webhook_config=Настройка автоматического обновления репозиции
|
config.webhook_config=Настройка автоматического обновления репозиции
|
||||||
config.queue_length=Длина очереди
|
config.queue_length=Длина очереди
|
||||||
config.deliver_timeout=Задержка доставки
|
config.deliver_timeout=Задержка доставки
|
||||||
|
config.skip_tls_verify=Пропустить проверку TLS
|
||||||
|
|
||||||
config.mailer_config=Настройки почты
|
config.mailer_config=Настройки почты
|
||||||
config.mailer_enabled=Включено
|
config.mailer_enabled=Включено
|
||||||
|
|
|
@ -36,6 +36,7 @@ settings=Подешавања
|
||||||
your_profile=Ваш профил
|
your_profile=Ваш профил
|
||||||
your_settings=Ваша подешавања
|
your_settings=Ваша подешавања
|
||||||
|
|
||||||
|
|
||||||
activities=Активности
|
activities=Активности
|
||||||
pull_requests=Захтеви за спајање
|
pull_requests=Захтеви за спајање
|
||||||
issues=Дискусије
|
issues=Дискусије
|
||||||
|
@ -551,7 +552,6 @@ settings.wiki_delete_notices_1=- Ова операција је избрисат
|
||||||
settings.delete=Уклони ово спремиште
|
settings.delete=Уклони ово спремиште
|
||||||
settings.delete_desc=Нећете мочи повратити спремиште после брисања. Молимо вас, будите сигурни.
|
settings.delete_desc=Нећете мочи повратити спремиште после брисања. Молимо вас, будите сигурни.
|
||||||
settings.delete_notices_1=- Ова операција <strong>НЕЋЕ МОЧИ</strong> бити укинута.
|
settings.delete_notices_1=- Ова операција <strong>НЕЋЕ МОЧИ</strong> бити укинута.
|
||||||
settings.delete_notices_fork_1=- Сви огранци ће постати независни после уклањање.
|
|
||||||
settings.transfer_owner=Нови власник
|
settings.transfer_owner=Нови власник
|
||||||
settings.make_transfer=Изврши пренос
|
settings.make_transfer=Изврши пренос
|
||||||
settings.confirm_delete=Потврдите брисање
|
settings.confirm_delete=Потврдите брисање
|
||||||
|
@ -637,7 +637,6 @@ release.ahead=<strong>%d</strong> комита на %s почев од овог
|
||||||
release.source_code=Изворни код
|
release.source_code=Изворни код
|
||||||
release.tag_name=Име ознаке
|
release.tag_name=Име ознаке
|
||||||
release.target=Циљ
|
release.target=Циљ
|
||||||
release.tag_helper=Изаберите посујућу ознаку, или креирај нову.
|
|
||||||
release.title=Наслов
|
release.title=Наслов
|
||||||
release.content=Садржај
|
release.content=Садржај
|
||||||
release.write=Напиши
|
release.write=Напиши
|
||||||
|
@ -686,7 +685,6 @@ settings.delete_account=Уклони ову организацију
|
||||||
settings.delete_prompt=Ова организација ће бото избрисана и операција <strong>НЕ МОЖЕ</strong> бити отказана у будућности!
|
settings.delete_prompt=Ова организација ће бото избрисана и операција <strong>НЕ МОЖЕ</strong> бити отказана у будућности!
|
||||||
settings.confirm_delete_account=Потврди брисање
|
settings.confirm_delete_account=Потврди брисање
|
||||||
settings.delete_org_title=Брисање организација
|
settings.delete_org_title=Брисање организација
|
||||||
settings.hooks_desc=Додајте аутоматско ажурирање, које ће важити за <strong>сва спремишта</strong> под овој организацији.
|
|
||||||
|
|
||||||
members.membership_visibility=Видљивост:
|
members.membership_visibility=Видљивост:
|
||||||
members.public=Јавно
|
members.public=Јавно
|
||||||
|
@ -715,7 +713,6 @@ teams.update_settings=Примени промене
|
||||||
teams.delete_team=Уклони овај тим
|
teams.delete_team=Уклони овај тим
|
||||||
teams.add_team_member=Додај члан тиму
|
teams.add_team_member=Додај члан тиму
|
||||||
teams.delete_team_title=Уклони тим
|
teams.delete_team_title=Уклони тим
|
||||||
teams.delete_team_desc=Овај потез ће чинити да чланови ове групе ће можта изгубе приступ неким спремиштима. Да ли желите да наставите?
|
|
||||||
teams.read_permission_desc=Овај тим даје приступ на <strong>Читање</strong>: чланови могу да виде и да клонира спремишта.
|
teams.read_permission_desc=Овај тим даје приступ на <strong>Читање</strong>: чланови могу да виде и да клонира спремишта.
|
||||||
teams.write_permission_desc=Овај тим даје приступ на <strong>Писање</strong>: чланови могу да виде и врше push операције на спремишта.
|
teams.write_permission_desc=Овај тим даје приступ на <strong>Писање</strong>: чланови могу да виде и врше push операције на спремишта.
|
||||||
teams.admin_permission_desc=Овај тим даје <strong>администраторки</strong> приступ: чланови могу да виде, врше push операције, и додавају сараднике.
|
teams.admin_permission_desc=Овај тим даје <strong>администраторки</strong> приступ: чланови могу да виде, врше push операције, и додавају сараднике.
|
||||||
|
@ -833,7 +830,6 @@ auths.smtp_auth=Тип SMTP аутентикације
|
||||||
auths.smtphost=SMTP хост
|
auths.smtphost=SMTP хост
|
||||||
auths.smtpport=SMTP порт
|
auths.smtpport=SMTP порт
|
||||||
auths.allowed_domains=Дозвољени домени
|
auths.allowed_domains=Дозвољени домени
|
||||||
auths.allowed_domains_helper=Оставите празно да не ограничавају домени. Више домена морају да буду одвојени зарезима ','.
|
|
||||||
auths.enable_tls=Омогући TLS шифровање
|
auths.enable_tls=Омогући TLS шифровање
|
||||||
auths.skip_tls_verify=Прескочи TLS проверу
|
auths.skip_tls_verify=Прескочи TLS проверу
|
||||||
auths.pam_service_name=Назив PAM сервиса
|
auths.pam_service_name=Назив PAM сервиса
|
||||||
|
@ -859,7 +855,6 @@ config.reverse_auth_user=Корисничко име при обрнуту ау
|
||||||
|
|
||||||
config.ssh_config=SSH конфигурација
|
config.ssh_config=SSH конфигурација
|
||||||
config.ssh_enabled=Омогућено
|
config.ssh_enabled=Омогућено
|
||||||
config.ssh_start_builtin_server=Покрени уграђени сервер
|
|
||||||
config.ssh_domain=Домен
|
config.ssh_domain=Домен
|
||||||
config.ssh_port=Порт
|
config.ssh_port=Порт
|
||||||
config.ssh_listen_port=Порт за слушање
|
config.ssh_listen_port=Порт за слушање
|
||||||
|
|
|
@ -46,6 +46,7 @@ your_profile=Din profil
|
||||||
your_starred=Dina Stjärnmärkta
|
your_starred=Dina Stjärnmärkta
|
||||||
your_settings=Dina inställningar
|
your_settings=Dina inställningar
|
||||||
|
|
||||||
|
|
||||||
activities=Aktiviteter
|
activities=Aktiviteter
|
||||||
pull_requests=Pull förfrågningar
|
pull_requests=Pull förfrågningar
|
||||||
issues=Problem
|
issues=Problem
|
||||||
|
@ -779,7 +780,6 @@ settings.wiki_deletion_success=Repots wikidata har tagits bort.
|
||||||
settings.delete=Ta Bort Detta Repo
|
settings.delete=Ta Bort Detta Repo
|
||||||
settings.delete_desc=När du har tagit bort ett repo så finns det ingen återvändo. Var säker på vad du gör.
|
settings.delete_desc=När du har tagit bort ett repo så finns det ingen återvändo. Var säker på vad du gör.
|
||||||
settings.delete_notices_1=- Denna åtgärd kan <strong>INTE</strong> ångras.
|
settings.delete_notices_1=- Denna åtgärd kan <strong>INTE</strong> ångras.
|
||||||
settings.delete_notices_fork_1=- Alla förgreningar kommer bli oberoende efter borttagning.
|
|
||||||
settings.transfer_owner=Ny Ägare
|
settings.transfer_owner=Ny Ägare
|
||||||
settings.make_transfer=Överför
|
settings.make_transfer=Överför
|
||||||
settings.confirm_delete=Bekräfta Borttagelsen
|
settings.confirm_delete=Bekräfta Borttagelsen
|
||||||
|
@ -867,7 +867,6 @@ release.ahead=<strong>%d</strong> ändringar mot %s sedan detta släpp
|
||||||
release.source_code=Källkod
|
release.source_code=Källkod
|
||||||
release.tag_name=Taggnamn
|
release.tag_name=Taggnamn
|
||||||
release.target=Mål
|
release.target=Mål
|
||||||
release.tag_helper=Välj en befintlig tagg, eller skapa en ny tagg på publicera.
|
|
||||||
release.title=Titel
|
release.title=Titel
|
||||||
release.content=Innehåll
|
release.content=Innehåll
|
||||||
release.write=Skriv
|
release.write=Skriv
|
||||||
|
@ -926,7 +925,6 @@ settings.delete_account=Tag bort denna organisation
|
||||||
settings.delete_prompt=Organisationen kommer tas bort permanent, och det går <strong>INTE</strong> att ångra detta!
|
settings.delete_prompt=Organisationen kommer tas bort permanent, och det går <strong>INTE</strong> att ångra detta!
|
||||||
settings.confirm_delete_account=Bekräfta borttagning
|
settings.confirm_delete_account=Bekräfta borttagning
|
||||||
settings.delete_org_title=Organisation borttagen
|
settings.delete_org_title=Organisation borttagen
|
||||||
settings.hooks_desc=Lägg till webbkrokar som triggas för <strong>alla förråd</strong> under denna organisation.
|
|
||||||
|
|
||||||
members.membership_visibility=Synlighet för medlemskap:
|
members.membership_visibility=Synlighet för medlemskap:
|
||||||
members.public=Publik
|
members.public=Publik
|
||||||
|
@ -955,7 +953,6 @@ teams.update_settings=Uppdatera inställningar
|
||||||
teams.delete_team=Ta bort detta team
|
teams.delete_team=Ta bort detta team
|
||||||
teams.add_team_member=Lägg till teammedlem
|
teams.add_team_member=Lägg till teammedlem
|
||||||
teams.delete_team_title=Borttagning av team
|
teams.delete_team_title=Borttagning av team
|
||||||
teams.delete_team_desc=Eftersom detta team tas bort kan medlemmar i teamet förlora sin tillgång till visa förråd. Vill du fortsätta?
|
|
||||||
teams.read_permission_desc=Medlemskap i detta team ger <strong>läsrättigheter</strong>: medlemmar kan visa och klona teamets förråd.
|
teams.read_permission_desc=Medlemskap i detta team ger <strong>läsrättigheter</strong>: medlemmar kan visa och klona teamets förråd.
|
||||||
teams.write_permission_desc=Medlemskap i detta team ger <strong>skrivrättigheter</strong>: medlemmar kan läsa från och ladda upp till teamets förråd.
|
teams.write_permission_desc=Medlemskap i detta team ger <strong>skrivrättigheter</strong>: medlemmar kan läsa från och ladda upp till teamets förråd.
|
||||||
teams.admin_permission_desc=Medlemskap i detta team ger <strong>administratörsrättigheter</strong>: medlemmar kan läsa från, ladda upp till och lägga till deltagare till teamets förråd.
|
teams.admin_permission_desc=Medlemskap i detta team ger <strong>administratörsrättigheter</strong>: medlemmar kan läsa från, ladda upp till och lägga till deltagare till teamets förråd.
|
||||||
|
@ -1044,7 +1041,6 @@ users.allow_import_local=Detta konto har tillåtelse att importera lokal förrå
|
||||||
users.allow_create_organization=Detta konto har tillåtelse att skapa organisationer
|
users.allow_create_organization=Detta konto har tillåtelse att skapa organisationer
|
||||||
users.update_profile=Uppdatera kontoprofil
|
users.update_profile=Uppdatera kontoprofil
|
||||||
users.delete_account=Tag bort detta konto
|
users.delete_account=Tag bort detta konto
|
||||||
users.still_has_org=Detta konto är fortfarande medlem i minst en organisation, du måste lämna eller ta bort organisationen först.
|
|
||||||
users.deletion_success=Kontot har tagits bort.
|
users.deletion_success=Kontot har tagits bort.
|
||||||
|
|
||||||
orgs.org_manage_panel=Organisationshantering
|
orgs.org_manage_panel=Organisationshantering
|
||||||
|
@ -1091,7 +1087,6 @@ auths.smtp_auth=SMTP Autentiseringstyp
|
||||||
auths.smtphost=SMTP-server
|
auths.smtphost=SMTP-server
|
||||||
auths.smtpport=SMTP-port
|
auths.smtpport=SMTP-port
|
||||||
auths.allowed_domains=Tillåtna Domäner
|
auths.allowed_domains=Tillåtna Domäner
|
||||||
auths.allowed_domains_helper=Lämnas tom för att tillåta alla domäner. Multipla domäner separeras med ett kommatecken ','.
|
|
||||||
auths.enable_tls=Aktivera TLS-kryptering
|
auths.enable_tls=Aktivera TLS-kryptering
|
||||||
auths.skip_tls_verify=Skippa verifikation av TLS
|
auths.skip_tls_verify=Skippa verifikation av TLS
|
||||||
auths.pam_service_name=PAM Tjänstnamn
|
auths.pam_service_name=PAM Tjänstnamn
|
||||||
|
@ -1129,7 +1124,6 @@ config.script_type=Script-typ
|
||||||
|
|
||||||
config.ssh_config=SSH-konfiguration
|
config.ssh_config=SSH-konfiguration
|
||||||
config.ssh_enabled=Aktiverad
|
config.ssh_enabled=Aktiverad
|
||||||
config.ssh_start_builtin_server=Starta Inbyggd Server
|
|
||||||
config.ssh_domain=Domän
|
config.ssh_domain=Domän
|
||||||
config.ssh_port=Port
|
config.ssh_port=Port
|
||||||
config.ssh_listen_port=Lyssningsport
|
config.ssh_listen_port=Lyssningsport
|
||||||
|
|
|
@ -36,6 +36,7 @@ settings=Ayarlar
|
||||||
your_profile=Profiliniz
|
your_profile=Profiliniz
|
||||||
your_settings=Ayarlarınız
|
your_settings=Ayarlarınız
|
||||||
|
|
||||||
|
|
||||||
activities=Aktiviteler
|
activities=Aktiviteler
|
||||||
pull_requests=Değişiklik İsteği
|
pull_requests=Değişiklik İsteği
|
||||||
issues=Sorunlar
|
issues=Sorunlar
|
||||||
|
@ -498,7 +499,6 @@ settings.wiki_delete_notices_1=- Bu işlem %s için Wiki'yi silecek ve devre dı
|
||||||
settings.delete=Bu Depoyu Sil
|
settings.delete=Bu Depoyu Sil
|
||||||
settings.delete_desc=Bir depoyu bir kez sildiğiniz taktirde geri getiremezsiniz. Lütfen emin olun.
|
settings.delete_desc=Bir depoyu bir kez sildiğiniz taktirde geri getiremezsiniz. Lütfen emin olun.
|
||||||
settings.delete_notices_1=- Bu işlem geri <strong>ALINAMAZ</strong>.
|
settings.delete_notices_1=- Bu işlem geri <strong>ALINAMAZ</strong>.
|
||||||
settings.delete_notices_fork_1=Silme işleminden sonra bütün çatallar bağımsız hale gelir.
|
|
||||||
settings.transfer_owner=Yeni Sahip
|
settings.transfer_owner=Yeni Sahip
|
||||||
settings.make_transfer=Transfer Et
|
settings.make_transfer=Transfer Et
|
||||||
settings.confirm_delete=Silmeyi Onayla
|
settings.confirm_delete=Silmeyi Onayla
|
||||||
|
@ -582,7 +582,6 @@ release.ahead=%s son sürümden beri <strong>%d</strong> işleme
|
||||||
release.source_code=Kaynak Kodu
|
release.source_code=Kaynak Kodu
|
||||||
release.tag_name=Biçim imi adı
|
release.tag_name=Biçim imi adı
|
||||||
release.target=Hedef
|
release.target=Hedef
|
||||||
release.tag_helper=Var olan bir biçim imi seçin veya yayında yenisini oluşturun.
|
|
||||||
release.title=Başlık
|
release.title=Başlık
|
||||||
release.content=İçerik
|
release.content=İçerik
|
||||||
release.write=Yaz
|
release.write=Yaz
|
||||||
|
@ -631,7 +630,6 @@ settings.delete_account=Bu Organizasyonu Sil
|
||||||
settings.delete_prompt=Organizasyon kalıcı olarak kaldırılacaktır ve bu işlem geri <strong>ALINAMAZ</strong>!
|
settings.delete_prompt=Organizasyon kalıcı olarak kaldırılacaktır ve bu işlem geri <strong>ALINAMAZ</strong>!
|
||||||
settings.confirm_delete_account=Silmeyi Onaylıyorum
|
settings.confirm_delete_account=Silmeyi Onaylıyorum
|
||||||
settings.delete_org_title=Organizasyon Silme
|
settings.delete_org_title=Organizasyon Silme
|
||||||
settings.hooks_desc=Bu organizasyona bağlı <strong>tüm depoları</strong> tetikleyecek bir web isteği oluştur.
|
|
||||||
|
|
||||||
members.membership_visibility=Üyelik Görünürlüğü:
|
members.membership_visibility=Üyelik Görünürlüğü:
|
||||||
members.public=Herkese Açık
|
members.public=Herkese Açık
|
||||||
|
@ -660,7 +658,6 @@ teams.update_settings=Ayarları Güncelle
|
||||||
teams.delete_team=Bu Ekibi Sil
|
teams.delete_team=Bu Ekibi Sil
|
||||||
teams.add_team_member=Ekip Üyesi Ekle
|
teams.add_team_member=Ekip Üyesi Ekle
|
||||||
teams.delete_team_title=Takım Silme
|
teams.delete_team_title=Takım Silme
|
||||||
teams.delete_team_desc=Bu takımı silerseniz üyeler bazı depolara olan erişimlerini kaybedebilirler. Devam etmek istiyor musunuz?
|
|
||||||
teams.read_permission_desc=Bu takımın yetkilerinden <strong>Okuma</strong> izni: üyeler görüntüleyebilir ve takımın depolarını klonlayabilir.
|
teams.read_permission_desc=Bu takımın yetkilerinden <strong>Okuma</strong> izni: üyeler görüntüleyebilir ve takımın depolarını klonlayabilir.
|
||||||
teams.write_permission_desc=Bu takımın yetkilerinden <strong>Yazma</strong> izni: üyeler okuyabilir ve takımın depolarına push yapabilir.
|
teams.write_permission_desc=Bu takımın yetkilerinden <strong>Yazma</strong> izni: üyeler okuyabilir ve takımın depolarına push yapabilir.
|
||||||
teams.admin_permission_desc=Bu takımın yetkilerinden <strong>Yönetici</strong> izni: üyeler okuyabilir, push yapabilir ve takımın depolarına yeni katkıcılar ekleyebilir.
|
teams.admin_permission_desc=Bu takımın yetkilerinden <strong>Yönetici</strong> izni: üyeler okuyabilir, push yapabilir ve takımın depolarına yeni katkıcılar ekleyebilir.
|
||||||
|
@ -779,7 +776,6 @@ auths.smtp_auth=SMTP Yetkilendirme Türü
|
||||||
auths.smtphost=SMTP Sunucusu
|
auths.smtphost=SMTP Sunucusu
|
||||||
auths.smtpport=SMTP Portu
|
auths.smtpport=SMTP Portu
|
||||||
auths.allowed_domains=İzin Verilen Alan Adları
|
auths.allowed_domains=İzin Verilen Alan Adları
|
||||||
auths.allowed_domains_helper=Her alan adını kısıtlamak için burayı boş bırakın. Çoklu alan adları virgülle ',' ayrılmalıdır.
|
|
||||||
auths.enable_tls=TLS Şifrelemeyi Aktifleştir
|
auths.enable_tls=TLS Şifrelemeyi Aktifleştir
|
||||||
auths.skip_tls_verify=TLS Doğrulamasını Atla
|
auths.skip_tls_verify=TLS Doğrulamasını Atla
|
||||||
auths.pam_service_name=PAM Servis Adı
|
auths.pam_service_name=PAM Servis Adı
|
||||||
|
@ -805,7 +801,6 @@ config.reverse_auth_user=Tersine Yetkilendirme Kullanıcısı
|
||||||
|
|
||||||
config.ssh_config=SSH Yapılandırması
|
config.ssh_config=SSH Yapılandırması
|
||||||
config.ssh_enabled=Aktif
|
config.ssh_enabled=Aktif
|
||||||
config.ssh_start_builtin_server=Hazır Sunucuyu Başlat
|
|
||||||
config.ssh_domain=Alan Adı
|
config.ssh_domain=Alan Adı
|
||||||
config.ssh_listen_port=Port'u Dinle
|
config.ssh_listen_port=Port'u Dinle
|
||||||
config.ssh_root_path=Kök Yol
|
config.ssh_root_path=Kök Yol
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue