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
path: src/code.gitea.io/gitea
pipeline:
clone:
image: plugins/git
clone:
git:
image: plugins/git:1
depth: 50
tags: true
pipeline:
build:
image: webhippie/golang:edge
pull: true
@ -15,7 +16,6 @@ pipeline:
TAGS: bindata sqlite
GOPATH: /srv/app
commands:
- apk -U add openssh-client
- make clean
- make generate
- make vet
@ -34,35 +34,21 @@ pipeline:
TAGS: bindata sqlite
GOPATH: /srv/app
commands:
- apk -U add openssh-client
- make test
when:
event: [ tag, pull_request ]
test-coverage:
image: webhippie/golang:edge
pull: true
environment:
TAGS: bindata sqlite
GOPATH: /srv/app
commands:
- apk -U add openssh-client
- go get github.com/wadey/gocovmerge
- make test-coverage
when:
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 ]
# Commented until db locking have been resolved!
# test-sqlite:
# image: webhippie/golang:edge
# pull: true
# environment:
# TAGS: bindata
# GOPATH: /srv/app
# commands:
# - make test-sqlite
# when:
# event: [ push, tag, pull_request ]
test-mysql:
image: webhippie/golang:edge
@ -97,25 +83,19 @@ pipeline:
when:
event: [ push, tag ]
# coverage:
# image: plugins/coverage
# server: https://coverage.gitea.io
# when:
# event: [ push ]
# branch: master
docker:
image: plugins/docker
image: plugins/docker:17.05
pull: true
secrets: [ docker_username, docker_password ]
repo: gitea/gitea
tags: [ '${DRONE_TAG##v}' ]
when:
event: [ tag ]
branch: [ refs/tags/* ]
docker:
image: plugins/docker
image: plugins/docker:17.05
pull: true
secrets: [ docker_username, docker_password ]
repo: gitea/gitea
tags: [ '${DRONE_BRANCH##release/v}' ]
when:
@ -123,8 +103,9 @@ pipeline:
branch: [ release/* ]
docker:
image: plugins/docker
image: plugins/docker:17.05
pull: true
secrets: [ docker_username, docker_password ]
repo: gitea/gitea
tags: [ 'latest' ]
when:
@ -132,17 +113,24 @@ pipeline:
branch: [ master ]
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
strip_prefix: dist/release/
source: dist/release/*
target: /gitea/${DRONE_TAG##v}
when:
event: [ tag ]
branch: [ refs/tags/* ]
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
strip_prefix: dist/release/
source: dist/release/*
@ -152,7 +140,11 @@ pipeline:
branch: [ 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
strip_prefix: dist/release/
source: dist/release/*
@ -162,17 +154,18 @@ pipeline:
branch: [ master ]
github:
image: plugins/github-release
image: plugins/github-release:1
pull: true
secrets: [ github_token ]
files:
- dist/release/*
when:
event: [ tag ]
branch: [ refs/tags/* ]
discord:
image: appleboy/drone-discord:0.0.4
webhook_id: ${WEBHOOK_ID}
webhook_token: ${WEBHOOK_TOKEN}
image: appleboy/drone-discord:1.0.0
pull: true
secrets: [ discord_webhook_id, discord_webhook_token ]
when:
event: [ push, tag, pull_request ]
status: [ changed, failure ]

File diff suppressed because one or more lines are too long

View File

@ -1,10 +1,504 @@
# 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
* Password reset URL changed from `/user/forget_password` to `/user/forgot_password`
* SSH keys management URL changed from `/user/settings/ssh` to `/user/settings/keys`
* Rename /forget_password url to /forgot_password (#1219)
* 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

View File

@ -56,11 +56,8 @@ clean:
$(GO) clean -i ./...
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
fmt: required-gofmt-version
fmt:
$(GOFMT) -w $(GOFILES)
.PHONY: vet
@ -112,7 +109,7 @@ misspell:
misspell -w -i unknwon $(GOFILES)
.PHONY: fmt-check
fmt-check: required-gofmt-version
fmt-check:
# get all go files and run go fmt on them
@diff=$$($(GOFMT) -d $(GOFILES)); \
if [ -n "$$diff" ]; then \
@ -285,9 +282,9 @@ public/css/index.css: $(STYLESHEETS)
.PHONY: 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
mv $(TMPDIR)/swagger-ui/dist public/assets/swagger-ui
mv $(TMPDIR)/swagger-ui/dist public/vendor/assets/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

View File

@ -126,15 +126,13 @@ func runHookPreReceive(c *cli.Context) error {
log.GitLogger.Fatal(2, "retrieve protected branches information failed")
}
if protectBranch != nil {
if !protectBranch.CanPush {
// check and deletion
if newCommitID == git.EmptySHA {
fail(fmt.Sprintf("branch %s is protected from deletion", branchName), "")
} else {
fail(fmt.Sprintf("protected branch %s can not be pushed to", branchName), "")
//fail(fmt.Sprintf("branch %s is protected from force push", branchName), "")
}
if protectBranch != nil && protectBranch.IsProtected() {
// check and deletion
if newCommitID == git.EmptySHA {
fail(fmt.Sprintf("branch %s is protected from deletion", branchName), "")
} else if !protectBranch.CanPush {
fail(fmt.Sprintf("protected branch %s can not be pushed to", 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{
"_csrf": csrf,
"branchName": "master",
"canPush": "true",
"canPush": "false",
})
resp := session.MakeRequest(t, req, http.StatusOK)
// 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"
)
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))
req := NewRequest(t, "GET", reqURL)
t.Log(reqURL)
@ -31,14 +31,14 @@ func assertProtectedBranch(t *testing.T, repoID int64, branchName string, isErr,
var branch models.ProtectedBranch
t.Log(string(resp.Body))
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) {
prepareTestEnv(t)
assertProtectedBranch(t, 1, "master", false, true)
assertProtectedBranch(t, 1, "dev", false, true)
assertProtectedBranch(t, 1, "lunny/dev", false, true)
assertProtectedBranch(t, 1, "master", false, false)
assertProtectedBranch(t, 1, "dev", false, false)
assertProtectedBranch(t, 1, "lunny/dev", false, false)
}

View File

@ -28,7 +28,7 @@ func TestLinksNoLogin(t *testing.T) {
"/user/forgot_password",
"/swagger",
// TODO: follow this page and test every link
"/assets/librejs/librejs.html",
"/vendor/librejs.html",
}
for _, link := range links {

View File

@ -3,7 +3,7 @@ RUN_MODE = prod
[database]
DB_TYPE = mysql
HOST = 127.0.0.1:3306
HOST = mysql:3306
NAME = testgitea
USER = root
PASSWD =

View File

@ -3,7 +3,7 @@ RUN_MODE = prod
[database]
DB_TYPE = postgres
HOST = 127.0.0.1:5432
HOST = pgsql:5432
NAME = testgitea
USER = 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) {
prepareTestEnv(t)
session := loginUser(t, "user1")
testRepoFork(t, session)
testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
testEditFile(t, session, "user1", "repo1", "master", "README.md")
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) {
prepareTestEnv(t)
session := loginUser(t, "user1")
testRepoFork(t, session)
testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
testEditFile(t, session, "user1", "repo1", "master", "README.md")
resp := testPullCreate(t, session, "user1", "repo1", "master")
@ -61,7 +61,7 @@ func TestPullMerge(t *testing.T) {
func TestPullCleanUpAfterMerge(t *testing.T) {
prepareTestEnv(t)
session := loginUser(t, "user1")
testRepoFork(t, session)
testRepoFork(t, session, "user2", "repo1", "user1", "repo1")
testEditFileToNewBranch(t, session, "user1", "repo1", "master", "feature/test", "README.md")
resp := testPullCreate(t, session, "user1", "repo1", "feature/test")

View File

@ -5,19 +5,24 @@
package integrations
import (
"fmt"
"net/http"
"testing"
"code.gitea.io/gitea/models"
"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
req := NewRequest(t, "GET", "/user1/repo1")
req := NewRequestf(t, "GET", "/%s/%s", forkOwnerName, forkRepoName)
resp := session.MakeRequest(t, req, http.StatusNotFound)
// 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)
// Step2: click the fork button
@ -31,15 +36,17 @@ func testRepoFork(t *testing.T, session *TestSession) *TestResponse {
htmlDoc = NewHTMLParser(t, resp.Body)
link, exists = htmlDoc.doc.Find("form.ui.form[action^=\"/repo/fork/\"]").Attr("action")
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{
"_csrf": htmlDoc.GetCSRF(),
"uid": "1",
"repo_name": "repo1",
"uid": fmt.Sprintf("%d", forkOwner.ID),
"repo_name": forkRepoName,
})
resp = session.MakeRequest(t, req, http.StatusFound)
// 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)
return resp
@ -48,5 +55,19 @@ func testRepoFork(t *testing.T, session *TestSession) *TestResponse {
func TestRepoFork(t *testing.T) {
prepareTestEnv(t)
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]
DB_TYPE = sqlite3
HOST = 127.0.0.1:3306
NAME = testgitea
USER = gitea
PASSWD =
SSL_MODE = disable
PATH = :memory:
[repository]

View File

@ -17,7 +17,7 @@ import (
)
// Version holds the current Gitea version
var Version = "1.1.0+dev"
var Version = "1.2.0-dev"
// Tags holds the build tags used
var Tags = ""

View File

@ -713,7 +713,6 @@ type GetFeedsOptions struct {
IncludePrivate bool // include private actions
OnlyPerformedBy bool // only actions performed by requested user
IncludeDeleted bool // include deleted actions
Collaborate bool // Include collaborative repositories
}
// 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))
}
var userIDCond builder.Cond = 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)
cond = cond.And(builder.Eq{"user_id": opts.RequestedUser.ID})
if opts.OnlyPerformedBy {
cond = cond.And(builder.Eq{"act_user_id": opts.RequestedUser.ID})

View File

@ -17,10 +17,10 @@ const (
// ProtectedBranch struct
type ProtectedBranch struct {
ID int64 `xorm:"pk autoincr"`
RepoID int64 `xorm:"UNIQUE(s)"`
BranchName string `xorm:"UNIQUE(s)"`
CanPush bool
ID int64 `xorm:"pk autoincr"`
RepoID int64 `xorm:"UNIQUE(s)"`
BranchName string `xorm:"UNIQUE(s)"`
CanPush bool `xorm:"NOT NULL DEFAULT false"`
Created time.Time `xorm:"-"`
CreatedUnix int64
Updated time.Time `xorm:"-"`
@ -38,6 +38,11 @@ func (protectBranch *ProtectedBranch) BeforeUpdate() {
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
func GetProtectedBranchByRepoID(RepoID int64) ([]*ProtectedBranch, error) {
protectedBranches := make([]*ProtectedBranch, 0)

View File

@ -4,9 +4,7 @@
package models
import (
"fmt"
)
import "fmt"
// ErrNameReserved represents a "reserved name" error.
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)
}
// ErrGPGEmailNotFound represents a "ErrGPGEmailNotFound" kind of error.
type ErrGPGEmailNotFound struct {
Email string
// ErrGPGNoEmailFound represents a "ErrGPGNoEmailFound" kind of error.
type ErrGPGNoEmailFound struct {
FailedEmails []string
}
// IsErrGPGEmailNotFound checks if an error is a ErrGPGEmailNotFound.
func IsErrGPGEmailNotFound(err error) bool {
_, ok := err.(ErrGPGEmailNotFound)
// IsErrGPGNoEmailFound checks if an error is a ErrGPGNoEmailFound.
func IsErrGPGNoEmailFound(err error) bool {
_, ok := err.(ErrGPGNoEmailFound)
return ok
}
func (err ErrGPGEmailNotFound) Error() string {
return fmt.Sprintf("failed to found email or is not confirmed : %s", err.Email)
func (err ErrGPGNoEmailFound) Error() string {
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.

View File

@ -176,3 +176,15 @@
lower_name: repo15
name: repo15
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
avatar: avatar2
avatar_email: user2@example.com
num_repos: 3
num_repos: 4
num_stars: 2
num_followers: 2
num_following: 1

View File

@ -208,21 +208,27 @@ func parseGPGKey(ownerID int64, e *openpgp.Entity) (*GPGKey, error) {
if err != nil {
return nil, err
}
emails := make([]*EmailAddress, len(e.Identities))
n := 0
emails := make([]*EmailAddress, 0, len(e.Identities))
for _, ident := range e.Identities {
email := strings.ToLower(strings.TrimSpace(ident.UserId.Email))
for _, e := range userEmails {
if e.Email == email && e.IsActivated {
emails[n] = e
if e.Email == email {
emails = append(emails, e)
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)
if err != nil {
return nil, err
@ -276,11 +282,7 @@ func DeleteGPGKey(doer *User, id int64) (err error) {
return err
}
if err = sess.Commit(); err != nil {
return err
}
return nil
return sess.Commit()
}
// CommitVerification represents a commit validation of signature
@ -380,8 +382,8 @@ func ParseCommitWithSignature(c *git.Commit) *CommitVerification {
}
//Find Committer account
committer, err := GetUserByEmail(c.Committer.Email)
if err != nil { //Skipping not user for commiter
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
log.Error(3, "NoCommitterAccount: %v", err)
return &CommitVerification{
Verified: false,
@ -399,6 +401,19 @@ func ParseCommitWithSignature(c *git.Commit) *CommitVerification {
}
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
hash, err := populateHash(sig.Hash, []byte(c.Signature.Payload))
if err != nil { //Skipping ailed to generate hash

View File

@ -572,11 +572,7 @@ func (issue *Issue) ReadBy(userID int64) error {
return err
}
if err := setNotificationStatusReadIfUnread(x, userID, issue.ID); err != nil {
return err
}
return nil
return setNotificationStatusReadIfUnread(x, userID, issue.ID)
}
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.
Asc("comment.created_unix").
Asc("comment.id").
Find(&comments)
}

View File

@ -509,10 +509,7 @@ func SMTPAuth(a smtp.Auth, cfg *SMTPConfig) error {
}
if ok, _ := c.Extension("AUTH"); ok {
if err = c.Auth(a); err != nil {
return err
}
return nil
return c.Auth(a)
}
return ErrUnsupportedLoginType
}

View File

@ -166,7 +166,7 @@ func composeIssueCommentMessage(issue *Issue, doer *User, comment *Comment, tplN
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)
return msg
}

View File

@ -126,6 +126,12 @@ var migrations = []Migration{
NewMigration("unescape user full names", unescapeUserFullNames),
// v38 -> v39
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

View File

@ -10,20 +10,15 @@ import (
"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 {
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)
} 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 nil

View File

@ -13,17 +13,6 @@ import (
"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
const (
V16UnitTypeCode = iota + 1 // 1 code
@ -37,14 +26,25 @@ const (
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 {
// 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
err := x.Table("repository").Select("*").Find(&repos)
if err != nil {
@ -95,7 +95,7 @@ func addUnitsToTables(x *xorm.Engine) error {
continue
}
var config = make(map[string]string)
var config = make(map[string]interface{})
switch i {
case V16UnitTypeExternalTracker:
config["ExternalTrackerURL"] = repo.ExternalTrackerURL
@ -119,9 +119,5 @@ func addUnitsToTables(x *xorm.Engine) error {
}
}
if err := sess.Commit(); err != nil {
return err
}
return nil
return sess.Commit()
}

View File

@ -51,8 +51,5 @@ func useNewPublickeyFormat(x *xorm.Engine) error {
}
f.Close()
if err = os.Rename(tmpPath, fpath); err != nil {
return err
}
return nil
return os.Rename(tmpPath, fpath)
}

View File

@ -7,16 +7,19 @@ package migrations
import (
"html"
"code.gitea.io/gitea/models"
"github.com/go-xorm/xorm"
)
func unescapeUserFullNames(x *xorm.Engine) (err error) {
type User struct {
ID int64 `xorm:"pk autoincr"`
FullName string
}
const batchSize = 100
for start := 0; ; start += batchSize {
users := make([]*models.User, 0, batchSize)
if err := x.Limit(start, batchSize).Find(users); err != nil {
users := make([]*User, 0, batchSize)
if err := x.Limit(batchSize, start).Find(&users); err != nil {
return err
}
if len(users) == 0 {
@ -24,7 +27,7 @@ func unescapeUserFullNames(x *xorm.Engine) (err error) {
}
for _, user := range users {
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
}
}

View File

@ -5,12 +5,26 @@
package migrations
import (
"time"
"code.gitea.io/gitea/models"
"github.com/go-xorm/core"
"github.com/go-xorm/xorm"
)
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
const batchSize = 100
for start := 0; ; start += batchSize {
@ -33,7 +47,7 @@ func removeCommitsUnitType(x *xorm.Engine) (err error) {
}
}
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
}
}

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 err
}
return nil
return sess.Commit()
}
func deleteOrg(e *xorm.Session, u *User) error {
@ -675,7 +671,7 @@ func (env *accessibleReposEnv) MirrorRepoIDs() ([]int64, error) {
Table("repository").
Join("INNER", "team_repo", "`team_repo`.repo_id=`repository`.id AND `repository`.is_mirror=?", true).
Where(env.cond()).
GroupBy("`repository`.id").
GroupBy("`repository`.id, `repository`.updated_unix").
OrderBy("updated_unix DESC").
Cols("`repository`.id").
Find(&repoIDs)

View File

@ -34,7 +34,8 @@ type Release struct {
NumCommitsBehind int64 `xorm:"-"`
Note string `xorm:"TEXT"`
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:"-"`
@ -139,17 +140,18 @@ func createTag(gitRepo *git.Repository, rel *Release) error {
}
return err
}
} else {
commit, err := gitRepo.GetTagCommit(rel.TagName)
if err != nil {
return fmt.Errorf("GetTagCommit: %v", err)
}
rel.LowerTagName = strings.ToLower(rel.TagName)
}
commit, err := gitRepo.GetTagCommit(rel.TagName)
if err != nil {
return fmt.Errorf("GetTagCommit: %v", err)
}
rel.Sha1 = commit.ID.String()
rel.NumCommits, err = commit.CommitsCount()
if err != nil {
return fmt.Errorf("CommitsCount: %v", err)
}
rel.Sha1 = commit.ID.String()
rel.CreatedUnix = commit.Author.When.Unix()
rel.NumCommits, err = commit.CommitsCount()
if err != nil {
return fmt.Errorf("CommitsCount: %v", err)
}
}
return nil
@ -236,6 +238,7 @@ func GetReleaseByID(id int64) (*Release, error) {
// FindReleasesOptions describes the conditions to Find releases
type FindReleasesOptions struct {
IncludeDrafts bool
IncludeTags bool
TagNames []string
}
@ -246,6 +249,9 @@ func (opts *FindReleasesOptions) toConds(repoID int64) builder.Cond {
if !opts.IncludeDrafts {
cond = cond.And(builder.Eq{"is_draft": false})
}
if !opts.IncludeTags {
cond = cond.And(builder.Eq{"is_tag": false})
}
if len(opts.TagNames) > 0 {
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 {
return err
}
rel.LowerTagName = strings.ToLower(rel.TagName)
_, err = x.Id(rel.ID).AllCols().Update(rel)
if err != nil {
return err
@ -397,11 +405,64 @@ func DeleteReleaseByID(id int64, u *User, delTag bool) error {
if err != nil && !strings.Contains(stderr, "not found") {
return fmt.Errorf("git tag -d: %v - %s", err, stderr)
}
}
if _, err = x.Id(rel.ID).Delete(new(Release)); err != nil {
return fmt.Errorf("Delete: %v", err)
if _, err = x.Id(rel.ID).Delete(new(Release)); err != nil {
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
}
// 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"`
NumClosedMilestones int `xorm:"NOT NULL DEFAULT 0"`
NumOpenMilestones int `xorm:"-"`
NumTags int `xorm:"-"`
NumReleases int `xorm:"-"`
IsPrivate bool `xorm:"INDEX"`
IsBare bool `xorm:"INDEX"`
@ -409,6 +409,21 @@ func (repo *Repository) UnitEnabled(tp UnitType) bool {
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 (
// ErrUnitNotExist organization 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.
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.
@ -912,6 +946,10 @@ func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) {
if headBranch != nil {
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 {

View File

@ -120,10 +120,12 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
opts.Page = 1
}
var starJoin bool
if opts.Starred && opts.OwnerID > 0 {
cond = builder.Eq{
"star.uid": opts.OwnerID,
}
starJoin = true
}
opts.Keyword = strings.ToLower(opts.Keyword)
@ -133,34 +135,34 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
// Append conditions
if !opts.Starred && opts.OwnerID > 0 {
cond = cond.And(builder.Eq{"owner_id": opts.OwnerID})
}
if !opts.Private {
cond = cond.And(builder.Eq{"is_private": false})
}
var searcherReposCond builder.Cond = builder.Eq{"owner_id": opts.OwnerID}
if opts.Searcher != nil {
var ownerIds []int64
if opts.Searcher != nil {
var ownerIds []int64
ownerIds = append(ownerIds, opts.Searcher.ID)
err = opts.Searcher.GetOrganizations(true)
ownerIds = append(ownerIds, opts.Searcher.ID)
err = opts.Searcher.GetOrganizations(true)
if err != nil {
return nil, 0, fmt.Errorf("Organization: %v", err)
}
if err != nil {
return nil, 0, fmt.Errorf("Organization: %v", err)
}
for _, org := range opts.Searcher.Orgs {
ownerIds = append(ownerIds, org.ID)
}
for _, org := range opts.Searcher.Orgs {
ownerIds = append(ownerIds, org.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))
searcherReposCond = searcherReposCond.Or(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)
}
if !opts.Private {
cond = cond.And(builder.Eq{"is_private": false})
}
if len(opts.OrderBy) == 0 {
opts.OrderBy = "name ASC"
}
@ -168,7 +170,7 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
sess := x.NewSession()
defer sess.Close()
if opts.Starred && opts.OwnerID > 0 {
if starJoin {
count, err = sess.
Join("INNER", "star", "star.repo_id = repository.id").
Where(cond).

View File

@ -13,6 +13,7 @@ import (
"github.com/go-xorm/xorm"
"gopkg.in/ini.v1"
"code.gitea.io/git"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/process"
"code.gitea.io/gitea/modules/setting"
@ -148,6 +149,15 @@ func (m *Mirror) runSync() bool {
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 {
log.Error(4, "Failed to update size for mirror repository: %v", err)
}

View File

@ -609,11 +609,7 @@ func RewriteAllPublicKeys() error {
defer f.Close()
}
if err = os.Rename(tmpPath, fPath); err != nil {
return err
}
return nil
return os.Rename(tmpPath, fPath)
}
// ________ .__ ____ __.

View File

@ -9,6 +9,7 @@ import (
"fmt"
"os/exec"
"strings"
"time"
"code.gitea.io/git"
@ -81,6 +82,108 @@ func PushUpdate(branch string, opt PushUpdateOptions) error {
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) {
isNewRef := opts.OldCommitID == 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)
}
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)
if err != nil {
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 {
log.Error(4, "Failed to update size for repository: %v", err)
}
// Push tags.
if strings.HasPrefix(opts.RefFullName, git.TagPrefix) {
pushUpdateAddTag(repo, gitRepo, opts.RefFullName[len(git.TagPrefix):])
if err := CommitRepoAction(CommitRepoActionOptions{
PusherName: opts.PusherName,
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.
func ValidateCommitWithEmail(c *git.Commit) *User {
if c.Author == nil {
return nil
}
u, err := GetUserByEmail(c.Author.Email)
if err != nil {
return nil
@ -1223,11 +1226,15 @@ func ValidateCommitsWithEmails(oldCommits *list.List) *list.List {
for e != nil {
c := e.Value.(*git.Commit)
if v, ok := emails[c.Author.Email]; !ok {
u, _ = GetUserByEmail(c.Author.Email)
emails[c.Author.Email] = u
if c.Author != nil {
if v, ok := emails[c.Author.Email]; !ok {
u, _ = GetUserByEmail(c.Author.Email)
emails[c.Author.Email] = u
} else {
u = v
}
} else {
u = v
u = nil
}
newCommits.PushBack(UserCommit{

View File

@ -194,7 +194,7 @@ func Contexter() macaron.Handler {
</body>
</html>
`, map[string]string{
"GoGetImport": path.Join(setting.Domain, setting.AppSubURL, ctx.Link),
"GoGetImport": ComposeGoGetImport(ownerName, strings.TrimSuffix(repoName, ".git")),
"CloneLink": models.ComposeHTTPSCloneURL(ownerName, repoName),
"GoDocDirectory": prefix + "{/dir}",
"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.
func composeGoGetImport(owner, repo string) string {
// ComposeGoGetImport returns go-get-import meta content.
func ComposeGoGetImport(owner, repo string) string {
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,
// or the owner or repository does not exist at all.
// This is particular a workaround for "go get" command which does not respect
// .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}">`,
map[string]string{
"GoGetImport": composeGoGetImport(ctx.Params(":username"), strings.TrimSuffix(ctx.Params(":reponame"), ".git")),
"CloneLink": models.ComposeHTTPSCloneURL(ctx.Params(":username"), ctx.Params(":reponame")),
"GoGetImport": ComposeGoGetImport(username, strings.TrimSuffix(reponame, ".git")),
"CloneLink": models.ComposeHTTPSCloneURL(username, reponame),
})))
}
@ -162,6 +164,75 @@ func RedirectToRepo(ctx *Context, redirectRepoID int64) {
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
func RepoAssignment() macaron.Handler {
return func(ctx *Context) {
@ -181,7 +252,7 @@ func RepoAssignment() macaron.Handler {
if err != nil {
if models.IsErrUserNotExist(err) {
if ctx.Query("go-get") == "1" {
earlyResponseForGoGetMeta(ctx)
EarlyResponseForGoGetMeta(ctx)
return
}
ctx.Handle(404, "GetUserByName", nil)
@ -203,7 +274,7 @@ func RepoAssignment() macaron.Handler {
RedirectToRepo(ctx, redirectRepoID)
} else if models.IsErrRepoRedirectNotExist(err) {
if ctx.Query("go-get") == "1" {
earlyResponseForGoGetMeta(ctx)
EarlyResponseForGoGetMeta(ctx)
return
}
ctx.Handle(404, "GetRepositoryByName", nil)
@ -236,7 +307,7 @@ func RepoAssignment() macaron.Handler {
// Check access.
if ctx.Repo.AccessMode == models.AccessModeNone {
if ctx.Query("go-get") == "1" {
earlyResponseForGoGetMeta(ctx)
EarlyResponseForGoGetMeta(ctx)
return
}
ctx.Handle(404, "no access right", err)
@ -275,7 +346,16 @@ func RepoAssignment() macaron.Handler {
return
}
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["Repository"] = repo
@ -284,6 +364,11 @@ func RepoAssignment() macaron.Handler {
ctx.Data["IsRepositoryAdmin"] = ctx.Repo.IsAdmin()
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["ExposeAnonSSH"] = setting.SSH.ExposeAnonymous
ctx.Data["DisableHTTP"] = setting.Repository.DisableHTTPGit
@ -355,7 +440,7 @@ func RepoAssignment() macaron.Handler {
ctx.Data["PullRequestCtx"] = ctx.Repo.PullRequest
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)
ctx.Data["GoDocDirectory"] = prefix + "{/dir}"
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.
func GitHookService() macaron.Handler {
return func(ctx *Context) {

View File

@ -70,10 +70,7 @@ func (s *ContentStore) Put(meta *models.LFSMetaObject, r io.Reader) error {
return errHashMismatch
}
if err := os.Rename(tmpPath, path); err != nil {
return err
}
return nil
return os.Rename(tmpPath, path)
}
// Exists returns true if the object exists in the content store.

View File

@ -110,10 +110,7 @@ func (w *FileLogWriter) StartLogger() error {
return err
}
w.mw.SetFd(fd)
if err = w.initFd(); err != nil {
return err
}
return nil
return w.initFd()
}
func (w *FileLogWriter) docheck(size int) {

View File

@ -16,6 +16,7 @@ import (
"strings"
"time"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
@ -30,18 +31,18 @@ type Message struct {
}
// 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)
msg := gomail.NewMessage()
msg.SetHeader("From", from)
msg.SetAddressHeader("From", fromAddress, fromDisplayName)
msg.SetHeader("To", to...)
msg.SetHeader("Subject", subject)
msg.SetDateHeader("Date", time.Now())
plainBody, err := html2text.FromString(body)
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.")
}
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.
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 {

View File

@ -10,6 +10,7 @@ import (
"encoding/base64"
"fmt"
"io"
"net"
"net/mail"
"net/url"
"os"
@ -431,7 +432,7 @@ var (
}{
DisableDiffHighlight: false,
MaxGitDiffLines: 1000,
MaxGitDiffLineCharacters: 500,
MaxGitDiffLineCharacters: 5000,
MaxGitDiffFiles: 100,
GCArgs: []string{},
Timeout: struct {
@ -657,6 +658,12 @@ func NewContext() {
// This value is empty if site does not have sub-url.
AppSubURL = strings.TrimSuffix(url.Path, "/")
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
switch Protocol {
@ -1274,6 +1281,7 @@ type Mailer struct {
QueueLength int
Name string
From string
FromName string
FromEmail string
SendAsPlainText bool
@ -1332,6 +1340,7 @@ func newMailService() {
if err != nil {
log.Fatal(4, "Invalid mailer.FROM (%s): %v", MailService.From, err)
}
MailService.FromName = parsed.Name
MailService.FromEmail = parsed.Address
log.Info("Mail Service Enabled")

View File

@ -66,6 +66,7 @@ func NewFuncMap() []template.FuncMap {
},
"AvatarLink": base.AvatarLink,
"Safe": Safe,
"SafeJS": SafeJS,
"Sanitize": bluemonday.UGCPolicy().Sanitize,
"Str2html": Str2html,
"TimeSince": base.TimeSince,
@ -162,6 +163,11 @@ func Safe(raw string) template.HTML {
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
func Str2html(raw string) template.HTML {
return template.HTML(markdown.Sanitize(raw))

View File

@ -36,6 +36,7 @@ settings=Настройки
your_profile=Вашият профил
your_settings=Вашите настройки
activities=Активности
pull_requests=Заявки за сливане
issues=Задачи
@ -553,7 +554,6 @@ settings.wiki_delete_notices_1=- Това ще изтрие и ще деакти
settings.delete=Изтрий това хранилище
settings.delete_desc=След като изтриете хранилището, няма връщане назад. Моля, бъдете сигурни.
settings.delete_notices_1=- Тази операция <strong>НЕ МОЖЕ</strong> да бъде отменена в последствие.
settings.delete_notices_fork_1=- Всички разклонения ще станат независими след изтриването.
settings.transfer_owner=Нов притежател
settings.make_transfer=Прехвърли
settings.confirm_delete=Потвърди изтриването
@ -640,7 +640,6 @@ release.ahead=<strong>%d</strong> ревизии на %s след тази ве
release.source_code=Изходен код
release.tag_name=Име на маркера
release.target=Цел
release.tag_helper=Изберете съществуващ маркер или създайте нов маркер по време на публикуване.
release.title=Заглавие
release.content=Съдържание
release.write=Редактор
@ -689,7 +688,6 @@ settings.delete_account=Изтриване на тази организация
settings.delete_prompt=Организацията ще бъде изтрита и операцията <strong>НЕ МОЖЕ</strong> да бъде отменена в последствие!
settings.confirm_delete_account=Потвърди изтриването
settings.delete_org_title=Изтрий организацията
settings.hooks_desc=Добави уеб-куки, които ще бъдат използвани от <strong>всички хранилища</strong> в тази организация.
members.membership_visibility=Видимост:
members.public=Публични
@ -718,7 +716,6 @@ teams.update_settings=Запази настройките
teams.delete_team=Изтриване на този екип
teams.add_team_member=Добави участник в екипа
teams.delete_team_title=Изтрий екипа
teams.delete_team_desc=Тъй като този екип ще бъдат изтрит, участниците му може да загубят достъп до някои хранилища. Желаете ли да продължите?
teams.read_permission_desc=Този екип предоставя достъп за <strong>четене</strong>: участниците могат да разглеждат и клонират хранилищата на този екип.
teams.write_permission_desc=Този екип предоставя достъп за <strong>писане</strong>: участниците могат да четат от и да предават към хранилищата на този екип.
teams.admin_permission_desc=Този екип предоставя <strong>администраторски</strong> достъп: участниците могат да четат от, да предават към и да добавя нови сътрудници към хранилищата на този екип.
@ -838,7 +835,6 @@ auths.smtp_auth=SMTP удостоверяване
auths.smtphost=SMTP сървър
auths.smtpport=SMTP порт
auths.allowed_domains=Разрешени домейни
auths.allowed_domains_helper=Оставете празно за да не се ограничават домейните. За множество домейни използвайте запетая за разделител.
auths.enable_tls=Включи TLS криптиране
auths.skip_tls_verify=Пропусни проверка на TLS сертификат
auths.pam_service_name=Име на PAM услуга
@ -864,7 +860,6 @@ config.reverse_auth_user=Потребителско име при обратно
config.ssh_config=SSH конфигурация
config.ssh_enabled=Активен
config.ssh_start_builtin_server=Стартирай вграден сървър
config.ssh_domain=Домейн
config.ssh_port=Порт
config.ssh_listen_port=Порт за слушане

View File

@ -37,6 +37,7 @@ settings=Nastavení
your_profile=Váš profil
your_settings=Vaše nastavení
activities=Aktivity
pull_requests=Požadavek na natažení
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_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_fork_1=- Po smazání se všechny forky se stanou nezávislé.
settings.transfer_owner=Nový vlastník
settings.make_transfer=Předat
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.tag_name=Název značky
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.content=Obsah
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.confirm_delete_account=Potvrdit smazání
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.public=Veřejný
@ -719,7 +717,6 @@ teams.update_settings=Upravit nastavení
teams.delete_team=Smazat tento tým
teams.add_team_member=Přidat člena 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.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.
@ -838,7 +835,6 @@ auths.smtp_auth=Typ ověření SMTP
auths.smtphost=Server SMTP
auths.smtpport=Port SMTP
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.skip_tls_verify=Přeskočit ověření TLS
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_enabled=Zapnutý
config.ssh_start_builtin_server=Spustit vestavěný server
config.ssh_domain=Doména
config.ssh_listen_port=Port pro naslouchání
config.ssh_root_path=Kořenová cesta

View File

@ -5,7 +5,7 @@ dashboard=Übersicht
explore=Erkunden
help=Hilfe
sign_in=Anmelden
sign_in_with=Einloggen mit
sign_in_with=Anmelden mit
sign_out=Abmelden
sign_up=Registrieren
link_account=Account verbinden
@ -46,6 +46,12 @@ your_profile=Profil
your_starred=Deine Favoriten
your_settings=Einstellungen
all=Alle
sources=Quellen
mirrors=Mirrors
collaborative=Kollaborativ
forks=Forks
activities=Aktivitäten
pull_requests=Pull-Requests
issues=Issues
@ -251,6 +257,7 @@ username_been_taken=Benutzername ist bereits vergeben.
repo_name_been_taken=Dieser Repository-Name wird schon verwendet.
org_name_been_taken=Name der Organisation wird bereits verwendet.
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.
openid_been_used=OpenID-Adresse "%s" wurde bereits verwendet.
username_password_incorrect=Falscher Benutzername oder Passwort.
@ -303,7 +310,7 @@ uid=Uid
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.
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
website=Webseite
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_success=Dein neue E-Mail-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.
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
forked_from=geforkt von
fork_from_self=Du kannst kein Repository forken, das dir gehört!
copy_link=Kopieren
copy_link_success=Kopiert!
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.
code=Code
code.desc=Code ist der Speicherort des Codes
branch=Branch
tree=Struktur
filter_branch_and_tag=Nach Branch oder Tag filtern
@ -580,6 +589,8 @@ commits.message=Nachricht
commits.date=Datum
commits.older=Älter
commits.newer=Neuer
commits.signed_by=Signiert von
commits.gpg_key_id=GPG Schlüssel ID
ext_issues=Ext Issues
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.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.compare_changes=Änderungen vergleichen
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_helper=Bitte manuell zusammenführen, um die Konflikte zu lösen.
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.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.create_success=Meilenstein '%s' wurde erfolgreich erstellt!
milestones.edit=Meilenstein bearbeiten
milestones.edit_subheader=Verwende eine aussagekräftige Beschreibung für Meilensteine, um Missverständnisse zu vermeiden.
milestones.cancel=Abbrechen
milestones.modify=Meilenstein ändern
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.transfer_owner=Neuer Besitzer
settings.make_transfer=Transfer starten
settings.transfer_succeed=Repository-Eigentum wurde übertragen.
settings.confirm_delete=Löschen
settings.add_collaborator=Mitarbeiter hinzufügen
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.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_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.branches=Branches
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.parent=Ursprung
diff.commit=Commit
diff.data_not_available=Keine Diff-Daten verfügbar
diff.show_diff_stats=Diff-Statistik anzeigen
diff.show_split_view=Geteilte Ansicht
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.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.new_release=Neues Release
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.tag_name=Tag-Name
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.content=Inhalt
release.write=Schreiben
@ -947,12 +965,17 @@ release.save_draft=Entwurf speichern
release.edit_release=Release bearbeiten
release.delete_release=Dieses 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_invalid=Tag-Name ist nicht gültig.
release.downloads=Downloads
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_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.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
team_name=Teamname
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_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_pattern_not_allowed=Organisationsnamen der Form '%s' sind nicht erlaubt.
@ -983,11 +1009,15 @@ settings.full_name=Vollständiger Name
settings.website=Webseite
settings.location=Standort
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_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.confirm_delete_account=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.
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.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_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.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.
@ -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_switch=Wechseln
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_success=Alle deaktivierten Konten wurden erfolgreich gelöscht.
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_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_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_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_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.current_goroutine=Aktuelle Goroutines
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.gc_times=Anzahl GC
users.user_manage_panel=Benutzerverwaltung
users.new_account=Neues Konto erstellen
users.name=Name
users.activated=Aktiviert
@ -1096,26 +1138,35 @@ users.created=Erstellt am
users.last_login=Letzte Anmeldung
users.never_login=Niemals eingeloggt
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.auth_source=Authentifizierungsquelle
users.local=Lokal
users.auth_login_name=Anmeldename zur Authentifizierung
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.max_repo_creation=Maximale Anzahl erstellbarer Repositories
users.max_repo_creation_desc=(Auf -1 setzen, um das globale Standardlimit zu verwenden)
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.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_create_organization=Mit diesem Konto ist das Erstellen von Organisationen erlaubt
users.update_profile=Konto aktualisieren
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.teams=Teams
orgs.members=Mitglieder
orgs.new_orga=Organisation erstellen
repos.repo_manage_panel=Repositoryverwaltung
repos.owner=Besitzer
repos.name=Name
repos.private=Privat
@ -1124,10 +1175,12 @@ repos.stars=Favoriten
repos.issues=Issues
repos.size=Größe
auths.auth_manage_panel=Authentifizierung
auths.new=Neue Quelle hinzufügen
auths.name=Name
auths.type=Typ
auths.enabled=Aktiviert
auths.syncenabled=Benutzersynchronisation aktivieren
auths.updated=Aktualisiert
auths.auth_type=Authentifizierungstyp
auths.auth_name=Authentifizierungsname
@ -1137,6 +1190,7 @@ auths.host=Host
auths.port=Port
auths.bind_dn=DN 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_dn=Benutzer DN
auths.attribute_username=Attribut Benutzername
@ -1152,16 +1206,40 @@ auths.smtp_auth=SMTP-Authentifizierung
auths.smtphost=SMTP-Host
auths.smtpport=SMTP-Port
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.skip_tls_verify=TLS-Prüfung überspringen
auths.pam_service_name=PAM Dienstname
auths.oauth2_provider=OAuth2 Anbieter
auths.oauth2_clientID=Client-ID (Schlüssel)
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.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.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_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.deletion_success=Authentifizierung wurde erfolgreich gelöscht!
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.enable_captcha=Captcha aktivieren
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_allow_create_organization=Standardmäßige Erlaubnis eine Organisation zu erstellen
config.no_reply_address=No-Reply Adresse
config.webhook_config=Webhook-Konfiguration
config.queue_length=Warteschlangenlänge
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_enabled=Aktiviert
@ -1231,6 +1312,7 @@ config.mailer_name=Name
config.mailer_host=Host
config.mailer_user=Benutzer
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.oauth_config=OAuth-Konfiguration
@ -1283,6 +1365,7 @@ monitor.start=Startzeit
monitor.execute_time=Ausführungszeit
notices.system_notice_list=Systemmitteilungen
notices.view_detail_header=Meldungsdetails ansehen
notices.actions=Aktionen
notices.select_all=Alles auswählen
notices.deselect_all=Alles abwählen
@ -1293,6 +1376,7 @@ notices.type=Typ
notices.type_1=Repository
notices.desc=Beschreibung
notices.op=Aktion
notices.delete_success=Diese Systemmeldung wurde gelöscht.
[action]
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`
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
compare_commits=Vergleiche %d Commits
[tool]
ago=vor %s
from_now=in %s
now=jetzt
future=Zukunft
1s=1 Sekunde
1m=1 Minute
1h=1 Stunde
@ -1331,6 +1417,7 @@ raw_seconds=Sekunden
raw_minutes=Minuten
[dropzone]
default_message=Zum Hochladen hier klicken oder Datei hier ablegen.
invalid_input_type=Dateien dieses Dateityps können nicht hochgeladen werden.
file_too_big=Dateigröße ({{filesize}} MB) überschreitet die Maximalgröße ({{maxFilesize}} MB).
remove_file=Datei entfernen
@ -1338,7 +1425,7 @@ remove_file=Datei entfernen
[notification]
notifications=Nachrichten
unread=Ungelesen
read=Lesen
read=Gelesen
no_unread=Du hast momentan keine ungelesenen Benachrichtigungen.
no_read=Du hast momentan keine gelesenen Benachrichtigungen.
pin=Benachrichtigung pinnen
@ -1348,8 +1435,12 @@ mark_as_unread=Als ungelesen markieren
[gpg]
error.extract_sign=Die Signatur konnte nicht extrahiert 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.not_signed_commit=Kein signierter Commit
error.failed_retrieval_gpg_keys=Fehler beim Abrufen eines Keys des Commiter-Accounts
[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_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_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
key_id = Key ID
key_name = Key Name

View File

@ -41,6 +41,7 @@ your_profile=Tu perfil
your_starred=Tus favoritos
your_settings=Tu configuración
activities=Actividad
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_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_fork_1=- Todos los forks se convertirán en independientes tras el borrado.
settings.transfer_owner=Nuevo Propietario
settings.make_transfer=Transferir
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.tag_name=Nombre de la etiqueta
release.target=Destino
release.tag_helper=Escoge una etiqueta o crea una nueva al publicar.
release.title=Título
release.content=Contenido
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.confirm_delete_account=Confirmar eliminació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.public=Público
@ -743,7 +741,6 @@ teams.update_settings=Actualizar configuración
teams.delete_team=Eliminar este equipo
teams.add_team_member=Añadir miembro al 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.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.
@ -862,7 +859,6 @@ auths.admin_filter=Filtro de aministrador
auths.smtp_auth=Tipo de autenticación SMTP
auths.smtpport=Puerto SMTP
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.skip_tls_verify=Omitir la verificación TLS
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_enabled=Habilitado
config.ssh_start_builtin_server=Iniciar servidor integrado
config.ssh_domain=Dominio
config.ssh_port=Puerto
config.ssh_listen_port=Puerto de escucha

View File

@ -40,6 +40,7 @@ settings=Asetukset
your_profile=Profiilisi
your_settings=Asetuksesi
activities=Toimet
pull_requests=Pull requestit
issues=Ongelmat
@ -610,7 +611,6 @@ release.ahead=<strong>%d</strong> committia kohteeseen %s version jälkeen
release.source_code=Lähdekoodi
release.tag_name=Taginimi
release.target=Kohde
release.tag_helper=Valitse olemassaoleva tagi, tai luo uusi tagi julkaistaessa.
release.title=Otsikko
release.content=Sisältö
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.confirm_delete_account=Vahvista poisto
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.public=Julkinen
@ -689,7 +688,6 @@ teams.update_settings=Päivitä asetukset
teams.delete_team=Poista tämä ryhmä
teams.add_team_member=Lisää tiimin jäsen
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.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.
@ -811,7 +809,6 @@ auths.smtp_auth=SMTP todennustyyppi
auths.smtphost=SMTP isäntä
auths.smtpport=SMTP portti
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.skip_tls_verify=Ohita TLS tarkistaminen
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_enabled=Käytössä
config.ssh_start_builtin_server=Käynnistä sisäänrakennettu palvelin
config.ssh_domain=Verkkotunnus
config.ssh_port=Portti
config.ssh_listen_port=Kuuntele porttia

View File

@ -45,6 +45,7 @@ your_profile=Votre profil
your_starred=Vos favoris
your_settings=Vos paramètres
activities=Activités
pull_requests=Demandes d'ajout
issues=Tickets
@ -269,7 +270,7 @@ form.name_pattern_not_allowed=Motif '%s' interdit pour les noms d'utilisateur.
[settings]
profile=Profil
password=Mot de Passe
password=Mot de passe
avatar=Avatar
ssh_gpg_keys=Clés SSH / GPG
social=Réseaux Sociaux
@ -439,7 +440,7 @@ branches=Branches
tags=Tags
issues=Tickets
pulls=Demandes d'ajout
labels=Etiquettes
labels=Étiquettes
milestones=Jalons
commits=Révisions
releases=Publications
@ -450,7 +451,7 @@ file_permalink=Lien permanent
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.
stored_lfs=Stocké avec Git LFS
commit_graph=Graphique des Commits
commit_graph=Graphique des révisions
editor.new_file=Nouveau fichier
editor.upload_file=Téléverser un fichier
@ -501,7 +502,7 @@ commits.newer=Récemment
issues.new=Nouveau ticket
issues.new.labels=Etiquettes
issues.new.labels=Étiquettes
issues.new.no_label=Pas d'étiquette
issues.new.clear_labels=Effacer les étiquettes
issues.new.milestone=Jalon
@ -517,8 +518,9 @@ issues.new_label=Nouvelle étiquette
issues.new_label_placeholder=Nom de l'étiquette...
issues.create_label=Créer une étiquette
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.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.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`
@ -533,7 +535,7 @@ issues.delete_branch_at=`a supprimé la branche <b>%s</b> %s`
issues.open_tab=%d Ouvert
issues.close_tab=%d Fermé
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_no_select=Aucun jalon sélectionné
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.cancel=Annuler
issues.save=Enregistrer
issues.label_title=Nom du Label
issues.label_color=Couleur du Label
issues.label_title=Nom de l'étiquette
issues.label_color=Couleur de l'étiquette
issues.label_count=%d étiquettes
issues.label_open_issues=%d tickets ouverts
issues.label_edit=Éditer
issues.label_delete=Supprimer
issues.label_modify=Modification du Label
issues.label_deletion=Suppression du Label
issues.label_modify=Modification de l'étiquette
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.reverse_alphabetically=Par ordre alphabétique inversé
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.merge_pull_request=Fusionner la demande d'ajout
milestones.new=Nouveau Jalon
milestones.new=Nouveau jalon
milestones.open_tab=%d Ouvert
milestones.close_tab=%d 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_notices_1=- Cela va supprimer et désactiver le wiki pour %s
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_fork_1=- Toutes les bifurcations deviendront indépendantes après leffacement.
settings.transfer_owner=Nouveau propriétaire
settings.make_transfer=Transférer
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.tag_name=Nom du tag
release.target=Cible
release.tag_helper=Choisissez un tag existant ou créez-en un nouveau lors de la publication.
release.title=Titre
release.content=Contenu
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.confirm_delete_account=Confirmez la suppression
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.public=Public
@ -882,10 +882,10 @@ members.invite_now=Envoyer une invitation
teams.join=Rejoindre
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.write_access=Accès en Écriture
teams.admin_access=Accès Administrateur
teams.write_access=Accès en écriture
teams.admin_access=Accès administrateur
teams.no_desc=Aucune description
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.
@ -894,7 +894,6 @@ teams.update_settings=Valider
teams.delete_team=Supprimer cette Équipe
teams.add_team_member=Ajouter un Membre
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.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.
@ -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_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.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.update_profile=Mettre à jour le profil
users.delete_account=Supprimer ce Compte
@ -1024,7 +1023,6 @@ auths.smtp_auth=Type d'authentification SMTP
auths.smtphost=Hôte SMTP
auths.smtpport=Port SMTP
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.skip_tls_verify=Ne pas vérifier TLS
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.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_ver=Version 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_enabled=Activé
config.ssh_start_builtin_server=Démarrer le serveur intégré
config.ssh_domain=Domaine
config.ssh_port=Port
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_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_host=Hôte
config.db_name=Nom
@ -1073,7 +1070,7 @@ config.db_ssl_mode_helper=("postgres" uniquement)
config.db_path=Emplacement
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.disable_register=Désactiver les inscriptions
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_enabled=Activé
config.cache_config=Configuration du Cache
config.cache_config=Configuration du cache
config.cache_adapter=Adaptateur du Cache
config.cache_interval=Intervales 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_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
monitor.cron=Tâches Cron
@ -1141,10 +1138,10 @@ monitor.name=Nom
monitor.schedule=Planification
monitor.next=Suivant
monitor.previous=Précédent
monitor.execute_times=Nombre d'Éxécutions
monitor.process=Processus en cours d'éxécution
monitor.execute_times=Nombre d'exécutions
monitor.process=Processus en cours d'exécution
monitor.desc=Description
monitor.start=Heure de Démarrage
monitor.start=Heure de démarrage
monitor.execute_time=Heure d'Éxécution
notices.system_notice_list=Notes Systèmes

View File

@ -46,6 +46,12 @@ your_profile=Saját Profil
your_starred=Csillagozottjaid
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
pull_requests=Egyesítési Kérések
issues=Hibajegyek
@ -86,7 +92,7 @@ domain_helper=Ez befolyásolja az SSH klónozási URL-jeit.
ssh_port=SSH port
ssh_port_helper=SSH port amit a szervered használni fog, vagy hagyd üresen a kikapcsoláshoz.
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_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
@ -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.
org_name_been_taken=A szervezet neve 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.
openid_been_used=Az OpenID cím "%s" már használatban van.
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
last_used=Utolsó használat:
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
show_openid=Megjelenítés a profilon
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:
forked_from=másolva innen:
fork_from_self=Nem fork-olhat önmaga által birtokolt tárolót!
copy_link=Másolás
copy_link_success=Másolva!
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
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
push_exist_repo=Meglévő tároló feltöltése parancssorból
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.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.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.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.older=Régebbi
commits.newer=Újabb
commits.signed_by=Aláírta
commits.gpg_key_id=GPG kulcs azonosító
ext_issues=Külső hibajegyek
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
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.collaboration=Együttműködés
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_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_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.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_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.
@ -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_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_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.update_settings_success=A tároló beállításai firssítve lettek.
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_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_desc=Git push egy tárolóhoz
settings.event_push_desc=Push-olás egy tárolóba
settings.active=Aktív
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.update_webhook=Webhook frissítése
settings.update_hook_success=A Webhook frissítve.
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.add_slack_hook_desc=<a href="%s">Slack</a> integráció hozzáadása a tárolójához.
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.title=Cím
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.add_key_success=Az új Deploy kulcs '%s' sikeresen hozzáadva!
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_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_missing_repos=Az összes olyan tároló bejegyzés törlése, 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.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.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.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_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_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_started=Külső felhasználó szinkronizálása elkezdődött
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.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.memory_allocate_times=Memória Foglalá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.update_profile=Fiók profiljának frissíté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_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_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 előbb törölni kell.
users.deletion_success=Fiók sikeresen törölve.
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.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_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.deletion_success=Hitelesítési forrás sikeresen törölve!
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.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_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.webhook_config=Webhook Beállítása

View File

@ -40,6 +40,7 @@ settings=Impostazioni
your_profile=Il tuo profilo
your_settings=Impostazioni
activities=Attivitá
pull_requests=Pull Request
issues=Problemi
@ -569,7 +570,6 @@ release.ahead=<strong>%d</strong> commits da %s da questo rilascio
release.source_code=Codice Sorgente
release.tag_name=Nome tag
release.target=Obbiettivo
release.tag_helper=Scegli un tag esistente o crea un nuovo tag una volta pubblicato.
release.title=Titolo
release.content=Contenuto
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.confirm_delete_account=Conferma Eliminazione
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_helper=rendi privato
@ -645,7 +644,6 @@ teams.update_settings=Aggiorna Impostazioni
teams.delete_team=Elimina questo Team
teams.add_team_member=Aggiungere un Membro al 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.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.
@ -780,7 +778,6 @@ config.reverse_auth_user=Autenticazione Utente Inversa
config.ssh_config=Configurazione SSH
config.ssh_enabled=Attivo
config.ssh_start_builtin_server=Avvia server builtin
config.ssh_domain=Dominio
config.ssh_port=Porta
config.ssh_listen_port=Porta in ascolto

View File

@ -37,6 +37,7 @@ settings=設定
your_profile=プロフィール
your_settings=設定
activities=アクティビティ
pull_requests=プルリクエスト
issues=課題
@ -549,7 +550,6 @@ release.ahead=このリリース以降 %s へ <strong>%d</strong> コミット
release.source_code=ソース コード
release.tag_name=タグ名
release.target=ターゲット
release.tag_helper=既存のタグを選択するか、新しいタグを作成し発行します。
release.title=タイトル
release.content=コンテント
release.write=書込み
@ -596,7 +596,6 @@ settings.delete_account=この組織を削除
settings.delete_prompt=この操作をすると組織が完全に削除され、<strong>二度と元に戻すことができなくなります</strong>
settings.confirm_delete_account=削除を確認
settings.delete_org_title=組織の削除
settings.hooks_desc=この組織のもとで <strong>すべてのリポジトリ</strong> に対してトリガーされる webhook を追加します。
members.public=パブリック
members.public_helper=プライベートにする
@ -624,7 +623,6 @@ teams.update_settings=設定の更新
teams.delete_team=このチームを削除
teams.add_team_member=チーム メンバーを追加
teams.delete_team_title=チームの削除
teams.delete_team_desc=このチームを削除します、継続しますか?このチームのメンバーはいくつかのリポジトリへのアクセスを失う可能性があります。
teams.read_permission_desc=このチームは<strong>読み取り</strong>権限を持ち: メンバーはリポジトリの表示及びクローンの作成ができます。
teams.write_permission_desc=このチームは<strong>書き込み</strong>権限を持ち: メンバーはリポジトリの表示及リポジトリへのプッシュができます。
teams.admin_permission_desc=このチームは<strong>管理者</strong>の権限を持ち: メンバーはチームのリポジトリに対して、読み取り、プッシュや共同編集者の追加ができます。

View File

@ -37,6 +37,7 @@ settings=설정
your_profile=프로필
your_settings=설정
activities=활동
pull_requests=풀 리퀘스트
issues=이슈들
@ -542,7 +543,6 @@ settings.wiki_delete_notices_1=- 이것은 %s의 Wiki를 비활성화 시키고
settings.delete=이 저장소 삭제
settings.delete_desc=저장소를 지우고 나면 되돌릴 수 없습니다. 다시 한번 확인하세요.
settings.delete_notices_1=- 이 작업은 취소할 수 <strong>없습니다.</strong>
settings.delete_notices_fork_1=- 모든 포크들은 삭제 후에도 독립적으로 유지됩니다.
settings.transfer_owner=새 소유자
settings.make_transfer=저장소 전송
settings.confirm_delete=삭제 확인
@ -629,7 +629,6 @@ release.ahead=이 릴리스 이후로 <strong>%d</strong> %s에 커밋합니다.
release.source_code=소스 코드
release.tag_name=태그 이름
release.target=대상
release.tag_helper=태그를 선택하거나 새로운 태그를 만들어 게시
release.title=제목
release.content=컨텐츠
release.write=쓰기
@ -678,7 +677,6 @@ settings.delete_account=이 조직을 삭제합니다.
settings.delete_prompt=조직이 영구적으로 삭제됩니다. 그리고 취소할 수 <strong>없습니다.</strong>
settings.confirm_delete_account=삭제 승인
settings.delete_org_title=조직 삭제
settings.hooks_desc=이 조직의 <strong>모든 저장소</strong>에서 실행되는 웹훅을 추가합니다.
members.membership_visibility=회원 표시:
members.public=공개
@ -707,7 +705,6 @@ teams.update_settings=설정 업데이트
teams.delete_team=이 팀을 삭제하기
teams.add_team_member=팀 구성원 추가
teams.delete_team_title=팀 삭제
teams.delete_team_desc=이 팀을 삭제하면 몇몇 저장소에대해 팀 구성원이 접근 권한을 잃게됩니다. 계속하시겠습니까?
teams.read_permission_desc=이 팀의 <strong>읽기</strong> 권한을 부여: 회원은 이 팀의 저장소를 보거나 복제할 수 있습니다.
teams.write_permission_desc=이 팀의 <strong>쓰기</strong> 권한을 부여: 회원은 이 팀의 저장소를 읽거나 푸시할 수 있습니다.
teams.admin_permission_desc=이 팀의 <strong>관리자</strong> 권한을 부여: 회원은 이 팀의 저장소를 읽거나 푸시하거나 추가하고 공동 작업자를 추가할 수 있습니다.
@ -826,7 +823,6 @@ auths.smtp_auth=SMTP 인증 유형
auths.smtphost=SMTP 호스트
auths.smtpport=SMTP 포트
auths.allowed_domains=허용된 도메인
auths.allowed_domains_helper=도메인을 제안하지 않으려면 비워둡니다. 여러 도메인은 ',' 콤마를 이용해 구분합니다.
auths.enable_tls=TLS 암호화 활성화
auths.skip_tls_verify=TLS 검증 건너뛰기
auths.pam_service_name=PAM 서비스 명
@ -852,7 +848,6 @@ config.reverse_auth_user=역방향 사용자 인증
config.ssh_config=SSH 설정
config.ssh_enabled=활성화됨
config.ssh_start_builtin_server=빌트인 서버 시작
config.ssh_domain=도메인
config.ssh_port=포트
config.ssh_listen_port=수신 대기 포트

View File

@ -36,6 +36,7 @@ settings=Nustatymai
your_profile=Jūsų profilis
your_settings=Jūsų parametrai
activities=Veiklos
issues=Problemos

View File

@ -46,6 +46,12 @@ your_profile=Tavs profils
your_starred=Tavi atzīmētie ar zvaigznīti
your_settings=Tavi iestatījumi
all=Visi
sources=Avoti
mirrors=Spoguļi
collaborative=Sadarbības
forks=Atdalītie
activities=Aktivitāte
pull_requests=Izmaiņu pieprasījumi
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.
org_name_been_taken=Organizācijas 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.
openid_been_used=OpenID adrese '%s' jau ir izmantota.
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.
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.
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ē
@ -491,6 +498,7 @@ migrate.lfs_mirror_unsupported=LFS objektu spoguļošana netiek atbalstīta - iz
mirror_from=spogulis 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_success=Nokopēts!
copy_link_error=Nospiediet ⌘-C vai Ctrl-C, lai nokopētu
@ -581,6 +589,8 @@ commits.message=Ziņojums
commits.date=Datums
commits.older=Vecā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.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_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_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_fork_1=- Visi atdalītie repozitoriji kļūs neatkarīgi pēc dzēšanas.
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 repozitoriju pēc dzēšanas kļūs neatkarīgi.
settings.deletion_success=Repozitorijs tika izdzēsts.
settings.update_settings_success=Repozitorija iestatījumi tika saglabāti.
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.tag_name=Taga nosaukums
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.content=Saturs
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.deletion_success=Atzars '%s' tika izdzēsts.
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_name_holder=Organizācijas nosaukums
@ -1039,7 +1049,7 @@ teams.update_settings=Saglabāt iestatījumus
teams.delete_team=Dzēst komandu
teams.add_team_member=Pievienot komandas biedru
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.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.
@ -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_repo_archives=Dzēst visu repozitoriju arhīvus
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_success=Visi repozitoriju ieraksti, kam bija pazaudēti Git repozitoriji, tika izdzēsti.
dashboard.delete_missing_repos=Dzēst visus repozitorijus, kuriem trūkst Git faili
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_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)
@ -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.update_profile=Mainīt konta profilu
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.deletion_success=Konts tika veiksmīgi izdzēsts.
@ -1196,7 +1206,7 @@ auths.smtp_auth=SMTP autentifikācijas tips
auths.smtphost=SMTP resursdators
auths.smtpport=SMTP ports
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.skip_tls_verify=Izlaist TLS verifikāciju
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.delete=Dzēst šo 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.deletion_success=Autentifikācija tika veiksmīgi izdzēsta!
auths.login_source_exist=Pieteikšanās avots '%s' jau eksistē.

View File

@ -39,6 +39,7 @@ admin_panel=Administrasjonspanel
account_settings=Kontoinstillinger
settings=Innstillinger
issues=Problemer
cancel=Avbryt

View File

@ -46,6 +46,7 @@ your_profile=Uw profiel
your_starred=Jouw Sterren
your_settings=Uw instellingen
activities=Activiteiten
pull_requests=Pull requests
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_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_fork_1=-Alle forks zullen onafhankelijk geworden na verwijdering.
settings.deletion_success=De repository is verwijderd.
settings.update_settings_success=Repository opties zijn verwijderd.
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.tag_name=Tagnaam
release.target=Doel
release.tag_helper=Kies een bestaande tag, of creëer een nieuwe tag bij publiceren.
release.title=Titel
release.content=Inhoud
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.delete_org_title=Verwijderen organsiatie
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.public=Openbaar
@ -910,7 +908,6 @@ teams.update_settings=Instellingen bijwerken
teams.delete_team=Verwijder deze team
teams.add_team_member=Nieuwe team lid aanmaken
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.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.
@ -1048,7 +1045,6 @@ auths.smtp_auth=SMTP-authenticatietype
auths.smtphost=SMTP host
auths.smtpport=SMTP poort
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.skip_tls_verify=TLS-verificatie overslaan
auths.pam_service_name=PAM servicenaam
@ -1083,7 +1079,6 @@ config.reverse_auth_user=Omgekeerde verificatie gebruiker
config.ssh_config=SSH-configuratie
config.ssh_enabled=Ingeschakeld
config.ssh_start_builtin_server=Ingebouwde server starten
config.ssh_domain=Domein
config.ssh_port=Poort
config.ssh_listen_port=Luister op poort

View File

@ -36,6 +36,7 @@ settings=Ustawienia
your_profile=Twój profil
your_settings=Twoje ustawienia
activities=Aktywności
pull_requests=Oczekujące zmiany
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_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_fork_1=Wszystkie forki staną się niezależne po usunięciu.
settings.transfer_owner=Nowy właściciel
settings.make_transfer=Przenieś
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.tag_name=Nazwa tagu
release.target=Cel
release.tag_helper=Wybierz istniejący tag, bądź utwórz nowy podczas publikacji.
release.title=Tytuł
release.content=Treść
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.confirm_delete_account=Potwierdź usunięcie
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.public=Publiczne
@ -708,7 +706,6 @@ teams.update_settings=Aktualizuj ustawienia
teams.delete_team=Usuń ten zespół
teams.add_team_member=Dodaj członka 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.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.
@ -824,7 +821,6 @@ auths.smtp_auth=Typ uwierzytelnienia SMTP
auths.smtphost=Serwer SMTP
auths.smtpport=Port SMTP
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.skip_tls_verify=Pomiń weryfikację protokołu TLS
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_enabled=Aktywne
config.ssh_start_builtin_server=Uruchom serwer wbudowany
config.ssh_domain=Domena
config.ssh_listen_port=Port nasłuchu
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_up=Cadastrar
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
website=Site
version=Versão
@ -45,6 +46,7 @@ your_profile=Seu perfil
your_starred=Você favoritou
your_settings=Suas configurações
activities=Atividades
pull_requests=Pull requests
issues=Issues
@ -53,6 +55,9 @@ cancel=Cancelar
[install]
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_type=Tipo de banco de dados
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.
ssl_mode=Modo SSL
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_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.
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_helper=Você pode colocar o nome de sua organização aqui.
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_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
@ -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_helper=Isto afeta URLs para o clone via 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_helper=Número da porta em que a aplicação irá executar.
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_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
smtp_host=Host SMTP
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_password=Senha do remetente
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
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_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
@ -101,6 +115,7 @@ enable_captcha=Habilitar captcha
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_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_name=Nome de usuário
admin_password=Senha
@ -108,11 +123,18 @@ confirm_password=Confirmar senha
admin_email=E-mail do administrador
install_btn_confirm=Instalar Gitea
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
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
install_success=Bem-vindo! Obrigado por escolher o Gitea. Divirta-se!
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_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_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
switch_dashboard_context=Trocar contexto do painel de controle
my_repos=Meus repositórios
show_more_repos=Mostrar mais repositórios...
collaborative_repos=Repositórios colaborativos
my_orgs=Minhas organizações
my_mirrors=Meus mirrors
@ -134,9 +157,14 @@ repos=Repositórios
users=Usuários
organizations=Organizações
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]
create_new_account=Criar conta
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_mail=Desculpe, a confirmação de registro por e-mail foi desabilitada.
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.
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
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
invalid_code=Desculpe, seu código de confirmação expirou ou não é válido.
reset_password_helper=Clique aqui para redefinir sua senha
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.
@ -157,6 +188,8 @@ verify=Verificar
scratch_code=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_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_openid=OpenID
openid_connect_submit=Conectar
@ -170,6 +203,7 @@ activate_account=Por favor, ative sua conta
activate_email=Verifique seu endereço de e-mail
reset_password=Resetar sua senha
register_success=Registro bem-sucedido
register_notify=Bem-vindo ao Gitea
[modal]
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.`
include_error=` deve conter '%s'.`
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
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.
@ -237,14 +293,19 @@ orgs=Organizações
delete=Excluir conta
twofa=Autenticação de dois fatores
account_link=Contas externas
organization=Organização
uid=Uid
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
website=Site
location=Localização
update_profile=Atualizar o perfil
update_profile_success=Seu perfil foi atualizado.
change_username=Nome de usuário alterado
change_username_prompt=Esta mudança vai alterar os links para sua conta.
continue=Continuar
cancel=Cancelar
@ -260,6 +321,7 @@ change_password=Mudança de senha
old_password=Senha Atual
new_password=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.
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_email=Definir como principal
delete_email=Excluir
email_deletion=Excluir e-mail
email_deletion_success=O e-mail foi excluído com sucesso!
openid_deletion=Deleção de OpenID
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_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_fork_1=-Todos os forks se tornarão independentes após a exclusão.
settings.transfer_owner=Novo dono
settings.make_transfer=Fazer transferência
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.tag_name=Nome da tag
release.target=Destino
release.tag_helper=Escolha uma tag existente, ou crie uma nova tag em publicar.
release.title=Título
release.content=Conteúdo
release.write=Escrever
@ -815,7 +876,6 @@ release.downloads=Downloads
branch.delete=Excluir branch %s
branch.delete_notices_1=- Esta operação <strong>NÃO PODE</strong> ser desfeita.
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_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.confirm_delete_account=Confirmar exclusã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.public=Público
@ -880,7 +939,6 @@ teams.update_settings=Atualizar configurações
teams.delete_team=Excluir esta equipe
teams.add_team_member=Adicionar membro na 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.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.
@ -912,11 +970,9 @@ dashboard.operation_switch=Trocar
dashboard.operation_run=Executar
dashboard.delete_inactivate_accounts=Excluir todas as contas inativas
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.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.reinit_missing_repos=Reinicializar todos os repositórios Git perdidos cujos registros existem
dashboard.server_uptime=Uptime do Servidor
dashboard.current_goroutine=Goroutines Atuais
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.smtpport=Porta SMTP
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.skip_tls_verify=Ignorar verificação de TLS
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_enabled=Habilitado
config.ssh_start_builtin_server=Iniciar servidor embutido
config.ssh_domain=Domínio
config.ssh_port=Porta
config.ssh_listen_port=Porta de escuta

View File

@ -34,6 +34,7 @@ mirror=Зеркало
new_repo=Новый репозиторий
new_migrate=Новая миграция
new_mirror=Новое зеркало
new_fork=Новый форк репозитория
new_org=Новая организация
manage_org=Управление организациями
admin_panel=Панель администратора
@ -43,6 +44,11 @@ your_profile=Ваш профиль
your_starred=Ваше избранное
your_settings=Ваши настройки
all=Все
sources=Источники
mirrors=Зеркала
forks=Ответвления
activities=Активность
pull_requests=Запросы на слияние
issues=Задачи
@ -51,6 +57,7 @@ cancel=Отмена
[install]
install=Установка
title=Начальная конфигурация
docker_helper=Если вы запускаете Gitea внутри Docker, пожалуйста прочтите <a target="_blank" rel="noopener" href="%s">эти советы</a> внимательно перед тем как что-либо изменить на этой странице.
requite_db_desc=Gitea требует MySQL, PostgreSQL, SQLite3 или TiDB.
db_title=Настройки базы данных
@ -68,8 +75,10 @@ err_invalid_tidb_name=Имя базы данных TiDB не может соде
no_admin_and_disable_registration=Вы не можете отключить регистрацию до создания учетной записи администратора.
err_empty_admin_password=Пароль администратора не может быть пустым.
general_title=Общие параметры приложения
app_name=Имя приложения
repo_path=Путь корня репозитория
repo_path_helper=Все удаленные Git репозиториии будут сохранены в этот каталог.
lfs_path=Корень LFS
lfs_path_helper=В этой папке будут храниться файлы, хранящиеся Git LFS. Оставьте пустым, чтобы отключить LFS.
run_user=Пользователь
@ -118,6 +127,7 @@ save_config_failed=Не удалось сохранить конфигураци
invalid_admin_setting=Указан недопустимый параметр учетной записи администратора: %v
invalid_log_root_path=Недопустимый путь для логов: %v
default_keep_email_private_popup=Это значение по умолчанию видимости адреса электронной почты пользователей. Если задано значение true, адрес электронной почты всех новых пользователей будет скрыт до того, как пользователь сам изменит настройки приватности.
no_reply_address=No-reply адрес
[home]
uname_holder=Имя пользователя или E-mail
@ -162,11 +172,16 @@ reset_password_helper=Нажмите здесь, чтобы сбросить с
password_too_short=Длина пароля не менее %d символов.
verify=Проверить
scratch_code=Одноразовый пароль
login_userpass=Пользователь / пароль
login_openid=OpenID
openid_register_title=Создать новый аккаунт
[mail]
activate_account=Пожалуйста активируйте свой аккаунт
activate_email=Подтвердите адрес своей электронной почты
reset_password=Восстановите ваш пароль
register_success=Регистрация прошла успешно
register_notify=Добро пожаловать на Gitea
[modal]
yes=Да
@ -201,8 +216,23 @@ email_error=«не является адресом электронной поч
url_error=` не является допустимым URL-адресом.`
include_error=` должен содержать '%s'.`
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
@ -219,16 +249,21 @@ following=Подписан
follow=Подписаться
unfollow=Отписаться
form.name_reserved=Имя пользователя '%s' зарезервировано.
form.name_pattern_not_allowed=Шаблон имени пользователя '%s' не допускается.
[settings]
profile=Профиль
password=Пароль
avatar=Аватар
ssh_gpg_keys=SSH / GPG ключи
social=Учетные записи в соцсетях
applications=Приложения
orgs=Организации
delete=Удалить аккаунт
twofa=Двухфакторная аутентификация
account_link=Внешние учетные записи
organization=Организация
uid=UID
public_profile=Открытый профиль
@ -236,7 +271,9 @@ full_name=ФИО
website=Веб-сайт
location=Местоположение
update_profile=Обновить профиль
update_profile_success=Ваш профиль успешно обновлен.
change_username=Имя пользователя изменено
change_username_prompt=Это изменение изменит ссылки на ваш аккаунт.
continue=Далее
cancel=Отмена
@ -247,11 +284,13 @@ choose_new_avatar=Выбрать новый аватар
update_avatar=Обновить настройку аватара
delete_current_avatar=Удалить текущий аватар
uploaded_avatar_not_a_image=Загружаемый файл не является изображением.
update_avatar_success=Настройка вашего аватара обновлена.
change_password=Сменить пароль
old_password=Текущий пароль
new_password=Новый пароль
retype_new_password=Подтверждение нового пароля
password_incorrect=Текущий пароль неправильный.
emails=Адреса электронной почты
manage_emails=Управление адресами электронной почты
@ -267,13 +306,26 @@ add_email_success=Новый адрес электронной почты усп
manage_ssh_keys=Управление SSH ключами
add_key=Добавить ключ
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_content=Содержимое
delete_key=Удалить
ssh_key_deletion=Удаление ключа SSH
ssh_key_deletion_success=SSH ключ был удален.
gpg_key_deletion_success=GPG ключ был удален.
add_on=Добавлено
valid_until=Действителен до
valid_forever=Действителен навсегда
last_used=Последний раз использовался
no_activity=Еще не применялся
key_state_desc=Этот ключ использовался в течение последних 7 дней
token_state_desc=Этот токен использовался в течение последних 7 дней
show_openid=Показывать в профиле
hide_openid=Скрыть из профиля
manage_social=Управление привязанными учетными записями в соцсетях
unbind=Отвязать
@ -622,7 +674,6 @@ settings.wiki_delete_notices_1=-Это будет удалено и отключ
settings.delete=Удалить этот репозиторий
settings.delete_desc=Будьте внимательны! Как только вы удалите репозиторий — пути назад не будет.
settings.delete_notices_1=- Эта операция <strong>НЕ МОЖЕТ</strong> быть отменена.
settings.delete_notices_fork_1=- Все отвлетвления станут независимыми после удаления.
settings.transfer_owner=Новый владелец
settings.make_transfer=Выполнить передачу
settings.confirm_delete=Подтвердить удаление
@ -708,7 +759,6 @@ release.ahead=<strong>%d</strong> коммитов %s начиная с этог
release.source_code=Исходный код
release.tag_name=Имя тега
release.target=Цель
release.tag_helper=Выберите существующий тег, или создайте новый.
release.title=Заголовок
release.content=Содержимое
release.write=Запись
@ -757,7 +807,6 @@ settings.delete_account=Удалить Эту Организацию
settings.delete_prompt=Это действие безвозвратно удалит эту организацию навсегда.
settings.confirm_delete_account=Подтвердить удаление
settings.delete_org_title=Удаление Организации
settings.hooks_desc=Добавьте автоматическое обновление, который будет вызываться для <strong>всех репозиций</strong> под этой Группой.
members.membership_visibility=Видимость участника команды:
members.public=Публичный
@ -786,7 +835,6 @@ teams.update_settings=Обновить настройки
teams.delete_team=Удалить эту группу разработки
teams.add_team_member=Добавление члена группы разработки
teams.delete_team_title=Удалить группу разработки
teams.delete_team_desc=Эта команда будет удалена. Вы хотите продолжить? Члены этой группы могут потерять доступ к некоторым репозиториям.
teams.read_permission_desc=Эта команда предоставляет доступ на <strong>Чтение</strong>: члены могут просматривать и клонировать репозитории команды.
teams.write_permission_desc=Эта команда предоставляет доступ на <strong>Запись</strong>: члены могут получать и выполнять push команды в репозитории.
teams.admin_permission_desc=Эта команда дает <strong>административный</strong> доступ: участники могут читать, пушить и добавлять соавторов к ее репозиториям.
@ -906,7 +954,6 @@ auths.smtp_auth=Тип аутентификации SMTP
auths.smtphost=Узел SMTP
auths.smtpport=SMTP-порт
auths.allowed_domains=Разрешенные домены
auths.allowed_domains_helper=Оставьте пустым чтобы не ограничивать домены. Несколько доменов должны быть разделены запятыми ','.
auths.enable_tls=Включение шифрования TLS
auths.skip_tls_verify=Пропустить проверку TLS
auths.pam_service_name=Имя службы PAM
@ -934,7 +981,6 @@ config.reverse_auth_user=Заголовок с именем пользовате
config.ssh_config=Конфигурация SSH
config.ssh_enabled=Включено
config.ssh_start_builtin_server=Запустить встроенный сервер
config.ssh_domain=Домен
config.ssh_port=Порт
config.ssh_listen_port=Прослушиваемый порт
@ -967,6 +1013,7 @@ config.active_code_lives=Время жизни кода для активаци
config.webhook_config=Настройка автоматического обновления репозиции
config.queue_length=Длина очереди
config.deliver_timeout=Задержка доставки
config.skip_tls_verify=Пропустить проверку TLS
config.mailer_config=Настройки почты
config.mailer_enabled=Включено

View File

@ -36,6 +36,7 @@ settings=Подешавања
your_profile=Ваш профил
your_settings=Ваша подешавања
activities=Активности
pull_requests=Захтеви за спајање
issues=Дискусије
@ -551,7 +552,6 @@ settings.wiki_delete_notices_1=- Ова операција је избрисат
settings.delete=Уклони ово спремиште
settings.delete_desc=Нећете мочи повратити спремиште после брисања. Молимо вас, будите сигурни.
settings.delete_notices_1=- Ова операција <strong>НЕЋЕ МОЧИ</strong> бити укинута.
settings.delete_notices_fork_1=- Сви огранци ће постати независни после уклањање.
settings.transfer_owner=Нови власник
settings.make_transfer=Изврши пренос
settings.confirm_delete=Потврдите брисање
@ -637,7 +637,6 @@ release.ahead=<strong>%d</strong> комита на %s почев од овог
release.source_code=Изворни код
release.tag_name=Име ознаке
release.target=Циљ
release.tag_helper=Изаберите посујућу ознаку, или креирај нову.
release.title=Наслов
release.content=Садржај
release.write=Напиши
@ -686,7 +685,6 @@ settings.delete_account=Уклони ову организацију
settings.delete_prompt=Ова организација ће бото избрисана и операција <strong>НЕ МОЖЕ</strong> бити отказана у будућности!
settings.confirm_delete_account=Потврди брисање
settings.delete_org_title=Брисање организација
settings.hooks_desc=Додајте аутоматско ажурирање, које ће важити за <strong>сва спремишта</strong> под овој организацији.
members.membership_visibility=Видљивост:
members.public=Јавно
@ -715,7 +713,6 @@ teams.update_settings=Примени промене
teams.delete_team=Уклони овај тим
teams.add_team_member=Додај члан тиму
teams.delete_team_title=Уклони тим
teams.delete_team_desc=Овај потез ће чинити да чланови ове групе ће можта изгубе приступ неким спремиштима. Да ли желите да наставите?
teams.read_permission_desc=Овај тим даје приступ на <strong>Читање</strong>: чланови могу да виде и да клонира спремишта.
teams.write_permission_desc=Овај тим даје приступ на <strong>Писање</strong>: чланови могу да виде и врше push операције на спремишта.
teams.admin_permission_desc=Овај тим даје <strong>администраторки</strong> приступ: чланови могу да виде, врше push операције, и додавају сараднике.
@ -833,7 +830,6 @@ auths.smtp_auth=Тип SMTP аутентикације
auths.smtphost=SMTP хост
auths.smtpport=SMTP порт
auths.allowed_domains=Дозвољени домени
auths.allowed_domains_helper=Оставите празно да не ограничавају домени. Више домена морају да буду одвојени зарезима ','.
auths.enable_tls=Омогући TLS шифровање
auths.skip_tls_verify=Прескочи TLS проверу
auths.pam_service_name=Назив PAM сервиса
@ -859,7 +855,6 @@ config.reverse_auth_user=Корисничко име при обрнуту ау
config.ssh_config=SSH конфигурација
config.ssh_enabled=Омогућено
config.ssh_start_builtin_server=Покрени уграђени сервер
config.ssh_domain=Домен
config.ssh_port=Порт
config.ssh_listen_port=Порт за слушање

View File

@ -46,6 +46,7 @@ your_profile=Din profil
your_starred=Dina Stjärnmärkta
your_settings=Dina inställningar
activities=Aktiviteter
pull_requests=Pull förfrågningar
issues=Problem
@ -779,7 +780,6 @@ settings.wiki_deletion_success=Repots wikidata har tagits bort.
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_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.make_transfer=Överför
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.tag_name=Taggnamn
release.target=Mål
release.tag_helper=Välj en befintlig tagg, eller skapa en ny tagg på publicera.
release.title=Titel
release.content=Innehåll
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.confirm_delete_account=Bekräfta borttagning
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.public=Publik
@ -955,7 +953,6 @@ teams.update_settings=Uppdatera inställningar
teams.delete_team=Ta bort detta team
teams.add_team_member=Lägg till teammedlem
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.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.
@ -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.update_profile=Uppdatera kontoprofil
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.
orgs.org_manage_panel=Organisationshantering
@ -1091,7 +1087,6 @@ auths.smtp_auth=SMTP Autentiseringstyp
auths.smtphost=SMTP-server
auths.smtpport=SMTP-port
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.skip_tls_verify=Skippa verifikation av TLS
auths.pam_service_name=PAM Tjänstnamn
@ -1129,7 +1124,6 @@ config.script_type=Script-typ
config.ssh_config=SSH-konfiguration
config.ssh_enabled=Aktiverad
config.ssh_start_builtin_server=Starta Inbyggd Server
config.ssh_domain=Domän
config.ssh_port=Port
config.ssh_listen_port=Lyssningsport

View File

@ -36,6 +36,7 @@ settings=Ayarlar
your_profile=Profiliniz
your_settings=Ayarlarınız
activities=Aktiviteler
pull_requests=Değişiklik İsteği
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_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_fork_1=Silme işleminden sonra bütün çatallar bağımsız hale gelir.
settings.transfer_owner=Yeni Sahip
settings.make_transfer=Transfer Et
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.tag_name=Biçim imi adı
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.content=İçerik
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.confirm_delete_account=Silmeyi Onaylıyorum
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.public=Herkese Açık
@ -660,7 +658,6 @@ teams.update_settings=Ayarları Güncelle
teams.delete_team=Bu Ekibi Sil
teams.add_team_member=Ekip Üyesi Ekle
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.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.
@ -779,7 +776,6 @@ auths.smtp_auth=SMTP Yetkilendirme Türü
auths.smtphost=SMTP Sunucusu
auths.smtpport=SMTP Portu
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.skip_tls_verify=TLS Doğrulamasını Atla
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_enabled=Aktif
config.ssh_start_builtin_server=Hazır Sunucuyu Başlat
config.ssh_domain=Alan Adı
config.ssh_listen_port=Port'u Dinle
config.ssh_root_path=Kök Yol

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