Compare commits

...

48 Commits

Author SHA1 Message Date
Lauris BH
09bd05732d Changelog for release 1.2.3 (#2840) 2017-11-03 21:40:46 +08:00
Morlinest
de7a76a995 Fix order of comments (#2835) (#2839) 2017-11-03 13:16:26 +02:00
Antoine GIRARD
357d5a5a3d Backport to v1.2 of PR 2266 2467 2663 (#2788)
* Only check at least one email gpg key (#2266)

* Only require one email (possibly not yet validated)

* Update message error and check validation of commit

* Add integrations tests

* Complete integration for import

* Add pre-check/optimization

* Add some test (not finished)

* Finish

* Fix fixtures

* Fix typo

* Don't guess key ID

* Make repo private to no interfere with other tests (#2467)

* GPG key email verification no longer case sensitive (#2661) (#2663)

* GPG key email verification no longer case sensitive (#2661)

* case insensitive GPG key email verification now cached (#2661)

Signed-off-by: Julian Scholle <julian.scholle@googlemail.com>
2017-10-27 12:36:14 +08:00
Lauris BH
d81cf34e37 Changelog for release v1.2.2 (#2786) 2017-10-26 18:34:30 +03:00
Lauris BH
9902317679 Add checks for commits with missing author and time (#2771) (#2785)
* Add checks for commits with missing author and time

* Fix validate commits with emails if it has no Author
2017-10-26 22:24:11 +08:00
Paul Tötterman
33e164168f Fix sending mail with a non-latin display name. #2102 (#2559) (#2783)
* Fix sending mail with a non-latin display name. #2102

Signed-off-by: Rémi Saurel <contact@remi-saurel.com>

* Take into account the possibility that setting.MailService.From is in `name <email@address>` format. #2102

Signed-off-by: Rémi Saurel <contact@remi-saurel.com>
2017-10-26 10:44:20 +03:00
Michael Kuhn
f40ba68d57 Sync MaxGitDiffLineCharacters with conf/app.ini (#2779) (#2780)
MAX_GIT_DIFF_LINE_CHARACTERS was updated in #1845 but the corresponding
default value of MaxGitDiffLineCharacters was not changed. This can lead
to inconsistencies.
2017-10-25 12:45:29 +03:00
Lunny Xiao
cb0c8b8ae4
fix imports 2017-10-25 13:49:06 +08:00
Lunny Xiao
eba5945d2f
some fixes 2017-10-25 13:28:47 +08:00
Lauris BH
4c67925531 Update vendor git (#2765) (#2772) 2017-10-24 02:04:22 +03:00
Lauris BH
3c60121ca7 Fix emojify image URL (#2769) (#2773) 2017-10-24 00:26:51 +02:00
Lauris BH
46bb1cf026 Changelog for v1.2.1 (#2716) 2017-10-16 16:27:22 +02:00
Lauris BH
13013e90f3 Fix PR, milestone and label functionality if issue unit is disabled (#2710) (#2714)
* Fix PR, milestone and label functionality if issue unit is disabled or not assigned to user

* Fix multi-actions in PR page

* Change error message

* Fix comment update and delete functionality in PR
2017-10-16 16:59:01 +03:00
Lunny Xiao
785ba171f4 Fix plain readme didn't render correctly on repo home page (#2705) (#2712)
* fix plain readme didn't render correctly on repo home page

* fix missing render

* remove unused template variables
2017-10-16 03:30:11 -05:00
Lauris BH
fb80265b52 Fix so that user can still fork his own repository to owned organizations (#2699) (#2707)
* Fix so that user can still fork his own repository to his organizations

* Fix to only use owned organizations

* Add integration test for forking own repository to owned organization
2017-10-15 19:40:33 +03:00
David Schneiderbauer
6fae585d28 fix .netrc authentication (#2700) (#2708)
* provide both possible authentication solutions

Signed-off-by: David Schneiderbauer <dschneiderbauer@gmail.com>
2017-10-15 18:50:28 +03:00
Lunny Xiao
670562a9c5 Fix slice out of bounds error in mailer (#2479) (#2696) 2017-10-13 22:59:03 +03:00
Lunny Xiao
ed07d8a308 Add release notes for v1.2.0 (#2683)
* add release notes for v1.2.0

* improve release notes for v1.2.0
2017-10-12 14:13:12 +08:00
David Schneiderbauer
74399f333f Backport of migration fixes (#2604) (#2677)
* Rewrite migrations to not depend on future code changes (#2604)

* v38 migration used an outdated version of RepoUnit model (#2602)

* change repoUnit model in migration

* fix v16 migration repo_unit table

* fix lint error

* move type definition inside function

* Fix migration from Gogs

* Refactor code

* add error check

* Additiomal fixes for migrations

* Add back nil check

* replace deprecated .Id with .ID

Signed-off-by: David Schneiderbauer <dschneiderbauer@gmail.com>

* change string map to interface map

Signed-off-by: David Schneiderbauer <dschneiderbauer@gmail.com>
2017-10-09 16:08:22 +03:00
David Schneiderbauer
d1cec5ecfa fix panic on gogs webhook creation (#2675) (#2676)
* fix panic on gogs webhook creation

Signed-off-by: David Schneiderbauer <dschneiderbauer@gmail.com>

* fix panic in gogs webhook edit

Signed-off-by: David Schneiderbauer <dschneiderbauer@gmail.com>
2017-10-09 08:58:49 +08:00
Lauris BH
73ad7d2ef3 Fixes 500 error on dashboard when using MSSQL (#2504) (#2662)
MSSQL rejects the query:
  SELECT "repository"."id" FROM "repository"
  INNER JOIN "team_repo" ON "team_repo".repo_id="repository".id AND
  "repository".is_mirror=1
  WHERE (
    ("repository".owner_id=2 AND "repository".is_private=0)
        OR team_repo.team_id IN (1)
        )
        GROUP BY "repository".id ORDER BY updated_unix DESC

when the order by term (updated_unix) is not included in the group by
term.
2017-10-05 21:08:40 +03:00
Lauris BH
5b36379172 Fix go get response if only app URL is custom in configuration (#2634) (#2640)
* Fix go get response if only app URL is custom in configuration

* Rewrite to update Domain setting to match AppURL
2017-10-03 06:29:19 +03:00
David Schneiderbauer
e38e502e20 Fix deletion of unprotected branches (#2630)
* fix deletion of unprotected branches

* fmt fix

* changed internal protected branch api

* fix lint error

Signed-off-by: David Schneiderbauer <dschneiderbauer@gmail.com>
2017-10-02 23:23:41 +03:00
David Schneiderbauer
3cc5b11b0d Backport of 2611 / Fix doubled issue tab introduced in migration v16 (#2622)
Signed-off-by: David Schneiderbauer <dschneiderbauer@gmail.com>
2017-10-01 09:18:49 +03:00
David Schneiderbauer
4c9bf91a2c v38 migration used an outdated version of RepoUnit model (#2602)
* change repoUnit model in migration

* fix v16 migration repo_unit table

* fix lint error

* move type definition inside function

Signed-off-by: David Schneiderbauer <dschneiderbauer@gmail.com>
2017-09-25 19:53:55 +03:00
Lunny Xiao
03ff7687e0 fix go get subpackage bug (#2584) (#2589)
* fix go get subpackage bug

* merge the duplicated funtions
2017-09-23 16:58:17 +03:00
Lunny Xiao
f646154ead add secrets for github release (#2588) 2017-09-23 20:17:51 +08:00
Lauris BH
a6d2f47a2b Add changelog for v1.2.0-rc4 (#2587) 2017-09-23 13:50:35 +03:00
Lauris BH
1837194882 Backport changes for latest drone (#2586) 2017-09-23 17:33:52 +08:00
Jonas Franz
9ca26432f6 Removing .drone.yml.sig (#2579)
Signed-off-by: Jonas Franz <info@jonasfranz.software>
2017-09-23 09:17:32 +08:00
Lauris BH
67595c0d0b Fix drone for tags (#2573) (#2576) 2017-09-22 20:00:52 +03:00
Lauris BH
6d03cf831e Add changelog for v1.2.0-rc3 (#2563) 2017-09-21 10:00:37 +03:00
Lauris BH
e232c49b10 Sync releases table with tags on push and for mirrors (#2459) (#2554)
* Sync releases table with tags on push and for mirrors

* Code style fixes

* Fix api to return only releases

* Optimize release creation and update
Minimize posibility of race conditions

* Fix release lower tag name updating

* handle tag reference update by addionally comparing commit id
2017-09-21 01:08:22 +03:00
Lauris BH
25e71ad41e Fix adding branch as protected to not allow pushing to it (#2556)
* Fix adding branch as protected to not allow pushing to it

* Fix can_push value to false in protected_branch (#2560)

* Fix integration test
2017-09-20 20:14:09 +03:00
Ethan Koenig
f014e42a06 Backport: Fix lint, fmt and integration testing errors (#2553)
* Fix lint errors

* Fix fmt errors (#2544)

* Hotfix for integration testing (#2473)

* Hotfix for integration testing
2017-09-20 19:30:20 +03:00
Lauris BH
d14a724b53 Remove go version check for make fmt (#2558) (#2561) 2017-09-20 20:42:08 +08:00
Jonas Franz
91788e0200 Restricting access to fork functioanlity to users with Code access (#2542)
Signed-off-by: Jonas Franz <info@jonasfranz.software>
2017-09-19 01:12:29 +02:00
Lauris BH
fc0c6f48c7 Add changelog for release v1.2.0-rc2 (#2469) 2017-09-06 14:05:35 +03:00
Lauris BH
002fa73460 Fix migration from pre-v15 to 1.2.0 (#2460) (#2465) 2017-09-05 21:03:30 +08:00
Lunny Xiao
2fdc649202
bug fixed 2017-09-04 14:28:50 +08:00
Lauris BH
0c910afe11 Fix releases to be counted from database not tags (#2389) (#2424) 2017-08-30 09:31:32 +08:00
Lunny Xiao
1cbe502cc2 fix duplicated feed (#2370) 2017-08-28 19:16:25 +02:00
Sandro Santilli
f916aa0fe3 Set version to 1.2.0-dev
1.2.0-dev is less than 1.2.0, according to semver
2017-08-27 23:02:48 +02:00
Lunny Xiao
04728b5b91 fix wrong changelog title (#2395) 2017-08-25 22:34:50 +08:00
Lunny Xiao
bbb0b8c17c add change log for release v1.2.0-rc1 (#2388) 2017-08-25 16:54:41 +08:00
Lunny Xiao
0938a2dca3 Fix missing collabrative repos (#2367) (#2382)
* fix missing collabrative repos

* fix bug of collabrative

* fix SQL quotes
2017-08-25 10:25:37 +08:00
Michael Lustfield
9df0eafa25 Move 3rd party js/css into public/vendor and document sources (#2383)
This commit cherry picks the following commits (master -> v1.2):
  a915a09
  874f9be
  233bbcf

Ref: https://github.com/go-gitea/gitea/issues/1484
Signed-off-by: Michael Lustfield <michael@lustfield.net>
2017-08-25 10:01:17 +08:00
Lunny Xiao
e13eef8cfe update translation from crowdin (#2368) (#2380) 2017-08-24 21:57:17 +08:00
1485 changed files with 3888 additions and 901 deletions

View File

@ -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: git:
image: plugins/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

View File

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

View File

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

View File

@ -126,15 +126,13 @@ 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 if !protectBranch.CanPush {
} else { 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), "")
}
} }
} }
} }

View File

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

View File

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

View File

@ -0,0 +1 @@
ref: refs/heads/master

View File

@ -0,0 +1,4 @@
[core]
repositoryformatversion = 0
filemode = true
bare = true

View File

@ -0,0 +1 @@
Unnamed repository; edit this file 'description' to name the repository.

View File

@ -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+"$@"}
:

View File

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

View File

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

View File

@ -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+"$@"}
:

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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]
# *~

View File

@ -0,0 +1 @@
x+)JMU06g040031Q(JMLÉMÕËMaXbR¶”10<31>-&ªéCüÕþËÝ,

View File

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

View File

@ -0,0 +1 @@
f27c2b2b03dcab38beaf89b0ab4ff61f6de63441

View File

@ -0,0 +1 @@
27566bd5738fc8b4e3fef3c5e72cce608537bd95

View File

@ -0,0 +1 @@
69554a64c1e6030f051e5c3f94bfbd773cd6a324

View File

@ -0,0 +1 @@
69554a64c1e6030f051e5c3f94bfbd773cd6a324

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -17,10 +17,10 @@ const (
// ProtectedBranch struct // ProtectedBranch struct
type ProtectedBranch struct { 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)

View File

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

View File

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

View File

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

View File

@ -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,8 +382,8 @@ 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{
Verified: false, Verified: false,
@ -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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -10,20 +10,15 @@ import (
"github.com/go-xorm/xorm" "github.com/go-xorm/xorm"
) )
// UserV15 describes the added field for User
type UserV15 struct {
AllowCreateOrganization bool
}
// TableName will be invoked by XORM to customrize the table name
func (*UserV15) TableName() string {
return "user"
}
func createAllowCreateOrganizationColumn(x *xorm.Engine) error { func createAllowCreateOrganizationColumn(x *xorm.Engine) error {
if err := x.Sync2(new(UserV15)); err != nil { type User struct {
KeepEmailPrivate bool
AllowCreateOrganization bool
}
if err := x.Sync2(new(User)); 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

View File

@ -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,14 +26,25 @@ const (
V16UnitTypeExternalTracker // 9 ExternalTracker V16UnitTypeExternalTracker // 9 ExternalTracker
) )
// Repo describes a repository
type Repo struct {
ID int64
EnableWiki, EnableExternalWiki, EnableIssues, EnableExternalTracker, EnablePulls bool
ExternalWikiURL, ExternalTrackerURL, ExternalTrackerFormat, ExternalTrackerStyle string
}
func addUnitsToTables(x *xorm.Engine) error { 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
type Repo struct {
ID int64
EnableWiki, EnableExternalWiki, EnableIssues, EnableExternalTracker, EnablePulls bool
ExternalWikiURL, ExternalTrackerURL, ExternalTrackerFormat, ExternalTrackerStyle string
}
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
} }

View File

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

View File

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

View File

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

57
models/migrations/v42.go Normal file
View File

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

18
models/migrations/v43.go Normal file
View File

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

69
models/migrations/v44.go Normal file
View File

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

View File

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

View File

@ -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,17 +140,18 @@ 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) }
if err != nil { commit, err := gitRepo.GetTagCommit(rel.TagName)
return fmt.Errorf("GetTagCommit: %v", err) if err != nil {
} return fmt.Errorf("GetTagCommit: %v", err)
}
rel.Sha1 = commit.ID.String() rel.Sha1 = commit.ID.String()
rel.NumCommits, err = commit.CommitsCount() rel.CreatedUnix = commit.Author.When.Unix()
if err != nil { rel.NumCommits, err = commit.CommitsCount()
return fmt.Errorf("CommitsCount: %v", err) if err != nil {
} 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
}

View File

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

View File

@ -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,34 +135,34 @@ 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.Searcher != nil {
if !opts.Private { var ownerIds []int64
cond = cond.And(builder.Eq{"is_private": false})
}
if opts.Searcher != nil { ownerIds = append(ownerIds, opts.Searcher.ID)
var ownerIds []int64 err = opts.Searcher.GetOrganizations(true)
ownerIds = append(ownerIds, opts.Searcher.ID) if err != nil {
err = opts.Searcher.GetOrganizations(true) return nil, 0, fmt.Errorf("Organization: %v", err)
}
if err != nil { for _, org := range opts.Searcher.Orgs {
return nil, 0, fmt.Errorf("Organization: %v", err) ownerIds = append(ownerIds, org.ID)
} }
for _, org := range opts.Searcher.Orgs { searcherReposCond = searcherReposCond.Or(builder.In("owner_id", ownerIds))
ownerIds = append(ownerIds, org.ID) if opts.Collaborate {
} 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))
searcherReposCond := builder.In("owner_id", ownerIds) }
if opts.Collaborate {
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))
} }
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).

View File

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

View File

@ -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
} }
// ________ .__ ____ __. // ________ .__ ____ __.

View File

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

View File

@ -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,11 +1226,15 @@ func ValidateCommitsWithEmails(oldCommits *list.List) *list.List {
for e != nil { for e != nil {
c := e.Value.(*git.Commit) c := e.Value.(*git.Commit)
if v, ok := emails[c.Author.Email]; !ok { if c.Author != nil {
u, _ = GetUserByEmail(c.Author.Email) if v, ok := emails[c.Author.Email]; !ok {
emails[c.Author.Email] = u u, _ = GetUserByEmail(c.Author.Email)
emails[c.Author.Email] = u
} else {
u = v
}
} else { } else {
u = v u = nil
} }
newCommits.PushBack(UserCommit{ newCommits.PushBack(UserCommit{

View File

@ -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}",

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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=Порт за слушане

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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>の権限を持ち: メンバーはチームのリポジトリに対して、読み取り、プッシュや共同編集者の追加ができます。

View File

@ -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=수신 대기 포트

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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=Включено

View File

@ -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=Порт за слушање

View File

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

View File

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