Compare commits
48 Commits
master
...
release/v1
Author | SHA1 | Date | |
---|---|---|---|
|
09bd05732d | ||
|
de7a76a995 | ||
|
357d5a5a3d | ||
|
d81cf34e37 | ||
|
9902317679 | ||
|
33e164168f | ||
|
f40ba68d57 | ||
|
cb0c8b8ae4 | ||
|
eba5945d2f | ||
|
4c67925531 | ||
|
3c60121ca7 | ||
|
46bb1cf026 | ||
|
13013e90f3 | ||
|
785ba171f4 | ||
|
fb80265b52 | ||
|
6fae585d28 | ||
|
670562a9c5 | ||
|
ed07d8a308 | ||
|
74399f333f | ||
|
d1cec5ecfa | ||
|
73ad7d2ef3 | ||
|
5b36379172 | ||
|
e38e502e20 | ||
|
3cc5b11b0d | ||
|
4c9bf91a2c | ||
|
03ff7687e0 | ||
|
f646154ead | ||
|
a6d2f47a2b | ||
|
1837194882 | ||
|
9ca26432f6 | ||
|
67595c0d0b | ||
|
6d03cf831e | ||
|
e232c49b10 | ||
|
25e71ad41e | ||
|
f014e42a06 | ||
|
d14a724b53 | ||
|
91788e0200 | ||
|
fc0c6f48c7 | ||
|
002fa73460 | ||
|
2fdc649202 | ||
|
0c910afe11 | ||
|
1cbe502cc2 | ||
|
f916aa0fe3 | ||
|
04728b5b91 | ||
|
bbb0b8c17c | ||
|
0938a2dca3 | ||
|
9df0eafa25 | ||
|
e13eef8cfe |
91
.drone.yml
91
.drone.yml
|
@ -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
500
CHANGELOG.md
500
CHANGELOG.md
|
@ -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
|
||||
|
||||
|
|
11
Makefile
11
Makefile
|
@ -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
|
||||
|
||||
|
|
16
cmd/hook.go
16
cmd/hook.go
|
@ -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), "")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
260
integrations/api_gpg_keys_test.go
Normal file
260
integrations/api_gpg_keys_test.go
Normal 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-----`)
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
ref: refs/heads/master
|
|
@ -0,0 +1,4 @@
|
|||
[core]
|
||||
repositoryformatversion = 0
|
||||
filemode = true
|
||||
bare = true
|
|
@ -0,0 +1 @@
|
|||
Unnamed repository; edit this file 'description' to name the repository.
|
|
@ -0,0 +1,15 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# An example hook script to check the commit log message taken by
|
||||
# applypatch from an e-mail message.
|
||||
#
|
||||
# The hook should exit with non-zero status after issuing an
|
||||
# appropriate message if it wants to stop the commit. The hook is
|
||||
# allowed to edit the commit message file.
|
||||
#
|
||||
# To enable this hook, rename this file to "applypatch-msg".
|
||||
|
||||
. git-sh-setup
|
||||
commitmsg="$(git rev-parse --git-path hooks/commit-msg)"
|
||||
test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"}
|
||||
:
|
|
@ -0,0 +1,24 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# An example hook script to check the commit log message.
|
||||
# Called by "git commit" with one argument, the name of the file
|
||||
# that has the commit message. The hook should exit with non-zero
|
||||
# status after issuing an appropriate message if it wants to stop the
|
||||
# commit. The hook is allowed to edit the commit message file.
|
||||
#
|
||||
# To enable this hook, rename this file to "commit-msg".
|
||||
|
||||
# Uncomment the below to add a Signed-off-by line to the message.
|
||||
# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
|
||||
# hook is more suited to it.
|
||||
#
|
||||
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
|
||||
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
|
||||
|
||||
# This example catches duplicate Signed-off-by lines.
|
||||
|
||||
test "" = "$(grep '^Signed-off-by: ' "$1" |
|
||||
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
|
||||
echo >&2 Duplicate Signed-off-by lines.
|
||||
exit 1
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# An example hook script to prepare a packed repository for use over
|
||||
# dumb transports.
|
||||
#
|
||||
# To enable this hook, rename this file to "post-update".
|
||||
|
||||
exec git update-server-info
|
|
@ -0,0 +1,14 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# An example hook script to verify what is about to be committed
|
||||
# by applypatch from an e-mail message.
|
||||
#
|
||||
# The hook should exit with non-zero status after issuing an
|
||||
# appropriate message if it wants to stop the commit.
|
||||
#
|
||||
# To enable this hook, rename this file to "pre-applypatch".
|
||||
|
||||
. git-sh-setup
|
||||
precommit="$(git rev-parse --git-path hooks/pre-commit)"
|
||||
test -x "$precommit" && exec "$precommit" ${1+"$@"}
|
||||
:
|
|
@ -0,0 +1,49 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# An example hook script to verify what is about to be committed.
|
||||
# Called by "git commit" with no arguments. The hook should
|
||||
# exit with non-zero status after issuing an appropriate message if
|
||||
# it wants to stop the commit.
|
||||
#
|
||||
# To enable this hook, rename this file to "pre-commit".
|
||||
|
||||
if git rev-parse --verify HEAD >/dev/null 2>&1
|
||||
then
|
||||
against=HEAD
|
||||
else
|
||||
# Initial commit: diff against an empty tree object
|
||||
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
|
||||
fi
|
||||
|
||||
# If you want to allow non-ASCII filenames set this variable to true.
|
||||
allownonascii=$(git config --bool hooks.allownonascii)
|
||||
|
||||
# Redirect output to stderr.
|
||||
exec 1>&2
|
||||
|
||||
# Cross platform projects tend to avoid non-ASCII filenames; prevent
|
||||
# them from being added to the repository. We exploit the fact that the
|
||||
# printable range starts at the space character and ends with tilde.
|
||||
if [ "$allownonascii" != "true" ] &&
|
||||
# Note that the use of brackets around a tr range is ok here, (it's
|
||||
# even required, for portability to Solaris 10's /usr/bin/tr), since
|
||||
# the square bracket bytes happen to fall in the designated range.
|
||||
test $(git diff --cached --name-only --diff-filter=A -z $against |
|
||||
LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
|
||||
then
|
||||
cat <<\EOF
|
||||
Error: Attempt to add a non-ASCII file name.
|
||||
|
||||
This can cause problems if you want to work with people on other platforms.
|
||||
|
||||
To be portable it is advisable to rename the file.
|
||||
|
||||
If you know what you are doing you can disable this check using:
|
||||
|
||||
git config hooks.allownonascii true
|
||||
EOF
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# If there are whitespace errors, print the offending file names and fail.
|
||||
exec git diff-index --check --cached $against --
|
|
@ -0,0 +1,53 @@
|
|||
#!/bin/sh
|
||||
|
||||
# An example hook script to verify what is about to be pushed. Called by "git
|
||||
# push" after it has checked the remote status, but before anything has been
|
||||
# pushed. If this script exits with a non-zero status nothing will be pushed.
|
||||
#
|
||||
# This hook is called with the following parameters:
|
||||
#
|
||||
# $1 -- Name of the remote to which the push is being done
|
||||
# $2 -- URL to which the push is being done
|
||||
#
|
||||
# If pushing without using a named remote those arguments will be equal.
|
||||
#
|
||||
# Information about the commits which are being pushed is supplied as lines to
|
||||
# the standard input in the form:
|
||||
#
|
||||
# <local ref> <local sha1> <remote ref> <remote sha1>
|
||||
#
|
||||
# This sample shows how to prevent push of commits where the log message starts
|
||||
# with "WIP" (work in progress).
|
||||
|
||||
remote="$1"
|
||||
url="$2"
|
||||
|
||||
z40=0000000000000000000000000000000000000000
|
||||
|
||||
while read local_ref local_sha remote_ref remote_sha
|
||||
do
|
||||
if [ "$local_sha" = $z40 ]
|
||||
then
|
||||
# Handle delete
|
||||
:
|
||||
else
|
||||
if [ "$remote_sha" = $z40 ]
|
||||
then
|
||||
# New branch, examine all commits
|
||||
range="$local_sha"
|
||||
else
|
||||
# Update to existing branch, examine new commits
|
||||
range="$remote_sha..$local_sha"
|
||||
fi
|
||||
|
||||
# Check for WIP commit
|
||||
commit=`git rev-list -n 1 --grep '^WIP' "$range"`
|
||||
if [ -n "$commit" ]
|
||||
then
|
||||
echo >&2 "Found WIP commit in $local_ref, not pushing"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
exit 0
|
|
@ -0,0 +1,169 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2006, 2008 Junio C Hamano
|
||||
#
|
||||
# The "pre-rebase" hook is run just before "git rebase" starts doing
|
||||
# its job, and can prevent the command from running by exiting with
|
||||
# non-zero status.
|
||||
#
|
||||
# The hook is called with the following parameters:
|
||||
#
|
||||
# $1 -- the upstream the series was forked from.
|
||||
# $2 -- the branch being rebased (or empty when rebasing the current branch).
|
||||
#
|
||||
# This sample shows how to prevent topic branches that are already
|
||||
# merged to 'next' branch from getting rebased, because allowing it
|
||||
# would result in rebasing already published history.
|
||||
|
||||
publish=next
|
||||
basebranch="$1"
|
||||
if test "$#" = 2
|
||||
then
|
||||
topic="refs/heads/$2"
|
||||
else
|
||||
topic=`git symbolic-ref HEAD` ||
|
||||
exit 0 ;# we do not interrupt rebasing detached HEAD
|
||||
fi
|
||||
|
||||
case "$topic" in
|
||||
refs/heads/??/*)
|
||||
;;
|
||||
*)
|
||||
exit 0 ;# we do not interrupt others.
|
||||
;;
|
||||
esac
|
||||
|
||||
# Now we are dealing with a topic branch being rebased
|
||||
# on top of master. Is it OK to rebase it?
|
||||
|
||||
# Does the topic really exist?
|
||||
git show-ref -q "$topic" || {
|
||||
echo >&2 "No such branch $topic"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Is topic fully merged to master?
|
||||
not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
|
||||
if test -z "$not_in_master"
|
||||
then
|
||||
echo >&2 "$topic is fully merged to master; better remove it."
|
||||
exit 1 ;# we could allow it, but there is no point.
|
||||
fi
|
||||
|
||||
# Is topic ever merged to next? If so you should not be rebasing it.
|
||||
only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
|
||||
only_next_2=`git rev-list ^master ${publish} | sort`
|
||||
if test "$only_next_1" = "$only_next_2"
|
||||
then
|
||||
not_in_topic=`git rev-list "^$topic" master`
|
||||
if test -z "$not_in_topic"
|
||||
then
|
||||
echo >&2 "$topic is already up-to-date with master"
|
||||
exit 1 ;# we could allow it, but there is no point.
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
else
|
||||
not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
|
||||
/usr/bin/perl -e '
|
||||
my $topic = $ARGV[0];
|
||||
my $msg = "* $topic has commits already merged to public branch:\n";
|
||||
my (%not_in_next) = map {
|
||||
/^([0-9a-f]+) /;
|
||||
($1 => 1);
|
||||
} split(/\n/, $ARGV[1]);
|
||||
for my $elem (map {
|
||||
/^([0-9a-f]+) (.*)$/;
|
||||
[$1 => $2];
|
||||
} split(/\n/, $ARGV[2])) {
|
||||
if (!exists $not_in_next{$elem->[0]}) {
|
||||
if ($msg) {
|
||||
print STDERR $msg;
|
||||
undef $msg;
|
||||
}
|
||||
print STDERR " $elem->[1]\n";
|
||||
}
|
||||
}
|
||||
' "$topic" "$not_in_next" "$not_in_master"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
exit 0
|
||||
|
||||
################################################################
|
||||
|
||||
This sample hook safeguards topic branches that have been
|
||||
published from being rewound.
|
||||
|
||||
The workflow assumed here is:
|
||||
|
||||
* Once a topic branch forks from "master", "master" is never
|
||||
merged into it again (either directly or indirectly).
|
||||
|
||||
* Once a topic branch is fully cooked and merged into "master",
|
||||
it is deleted. If you need to build on top of it to correct
|
||||
earlier mistakes, a new topic branch is created by forking at
|
||||
the tip of the "master". This is not strictly necessary, but
|
||||
it makes it easier to keep your history simple.
|
||||
|
||||
* Whenever you need to test or publish your changes to topic
|
||||
branches, merge them into "next" branch.
|
||||
|
||||
The script, being an example, hardcodes the publish branch name
|
||||
to be "next", but it is trivial to make it configurable via
|
||||
$GIT_DIR/config mechanism.
|
||||
|
||||
With this workflow, you would want to know:
|
||||
|
||||
(1) ... if a topic branch has ever been merged to "next". Young
|
||||
topic branches can have stupid mistakes you would rather
|
||||
clean up before publishing, and things that have not been
|
||||
merged into other branches can be easily rebased without
|
||||
affecting other people. But once it is published, you would
|
||||
not want to rewind it.
|
||||
|
||||
(2) ... if a topic branch has been fully merged to "master".
|
||||
Then you can delete it. More importantly, you should not
|
||||
build on top of it -- other people may already want to
|
||||
change things related to the topic as patches against your
|
||||
"master", so if you need further changes, it is better to
|
||||
fork the topic (perhaps with the same name) afresh from the
|
||||
tip of "master".
|
||||
|
||||
Let's look at this example:
|
||||
|
||||
o---o---o---o---o---o---o---o---o---o "next"
|
||||
/ / / /
|
||||
/ a---a---b A / /
|
||||
/ / / /
|
||||
/ / c---c---c---c B /
|
||||
/ / / \ /
|
||||
/ / / b---b C \ /
|
||||
/ / / / \ /
|
||||
---o---o---o---o---o---o---o---o---o---o---o "master"
|
||||
|
||||
|
||||
A, B and C are topic branches.
|
||||
|
||||
* A has one fix since it was merged up to "next".
|
||||
|
||||
* B has finished. It has been fully merged up to "master" and "next",
|
||||
and is ready to be deleted.
|
||||
|
||||
* C has not merged to "next" at all.
|
||||
|
||||
We would want to allow C to be rebased, refuse A, and encourage
|
||||
B to be deleted.
|
||||
|
||||
To compute (1):
|
||||
|
||||
git rev-list ^master ^topic next
|
||||
git rev-list ^master next
|
||||
|
||||
if these match, topic has not merged in next at all.
|
||||
|
||||
To compute (2):
|
||||
|
||||
git rev-list master..topic
|
||||
|
||||
if this is empty, it is fully merged to "master".
|
|
@ -0,0 +1,24 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# An example hook script to make use of push options.
|
||||
# The example simply echoes all push options that start with 'echoback='
|
||||
# and rejects all pushes when the "reject" push option is used.
|
||||
#
|
||||
# To enable this hook, rename this file to "pre-receive".
|
||||
|
||||
if test -n "$GIT_PUSH_OPTION_COUNT"
|
||||
then
|
||||
i=0
|
||||
while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"
|
||||
do
|
||||
eval "value=\$GIT_PUSH_OPTION_$i"
|
||||
case "$value" in
|
||||
echoback=*)
|
||||
echo "echo from the pre-receive-hook: ${value#*=}" >&2
|
||||
;;
|
||||
reject)
|
||||
exit 1
|
||||
esac
|
||||
i=$((i + 1))
|
||||
done
|
||||
fi
|
|
@ -0,0 +1,36 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# An example hook script to prepare the commit log message.
|
||||
# Called by "git commit" with the name of the file that has the
|
||||
# commit message, followed by the description of the commit
|
||||
# message's source. The hook's purpose is to edit the commit
|
||||
# message file. If the hook fails with a non-zero status,
|
||||
# the commit is aborted.
|
||||
#
|
||||
# To enable this hook, rename this file to "prepare-commit-msg".
|
||||
|
||||
# This hook includes three examples. The first comments out the
|
||||
# "Conflicts:" part of a merge commit.
|
||||
#
|
||||
# The second includes the output of "git diff --name-status -r"
|
||||
# into the message, just before the "git status" output. It is
|
||||
# commented because it doesn't cope with --amend or with squashed
|
||||
# commits.
|
||||
#
|
||||
# The third example adds a Signed-off-by line to the message, that can
|
||||
# still be edited. This is rarely a good idea.
|
||||
|
||||
case "$2,$3" in
|
||||
merge,)
|
||||
/usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
|
||||
|
||||
# ,|template,)
|
||||
# /usr/bin/perl -i.bak -pe '
|
||||
# print "\n" . `git diff --cached --name-status -r`
|
||||
# if /^#/ && $first++ == 0' "$1" ;;
|
||||
|
||||
*) ;;
|
||||
esac
|
||||
|
||||
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
|
||||
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
|
|
@ -0,0 +1,128 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# An example hook script to block unannotated tags from entering.
|
||||
# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
|
||||
#
|
||||
# To enable this hook, rename this file to "update".
|
||||
#
|
||||
# Config
|
||||
# ------
|
||||
# hooks.allowunannotated
|
||||
# This boolean sets whether unannotated tags will be allowed into the
|
||||
# repository. By default they won't be.
|
||||
# hooks.allowdeletetag
|
||||
# This boolean sets whether deleting tags will be allowed in the
|
||||
# repository. By default they won't be.
|
||||
# hooks.allowmodifytag
|
||||
# This boolean sets whether a tag may be modified after creation. By default
|
||||
# it won't be.
|
||||
# hooks.allowdeletebranch
|
||||
# This boolean sets whether deleting branches will be allowed in the
|
||||
# repository. By default they won't be.
|
||||
# hooks.denycreatebranch
|
||||
# This boolean sets whether remotely creating branches will be denied
|
||||
# in the repository. By default this is allowed.
|
||||
#
|
||||
|
||||
# --- Command line
|
||||
refname="$1"
|
||||
oldrev="$2"
|
||||
newrev="$3"
|
||||
|
||||
# --- Safety check
|
||||
if [ -z "$GIT_DIR" ]; then
|
||||
echo "Don't run this script from the command line." >&2
|
||||
echo " (if you want, you could supply GIT_DIR then run" >&2
|
||||
echo " $0 <ref> <oldrev> <newrev>)" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
|
||||
echo "usage: $0 <ref> <oldrev> <newrev>" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# --- Config
|
||||
allowunannotated=$(git config --bool hooks.allowunannotated)
|
||||
allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
|
||||
denycreatebranch=$(git config --bool hooks.denycreatebranch)
|
||||
allowdeletetag=$(git config --bool hooks.allowdeletetag)
|
||||
allowmodifytag=$(git config --bool hooks.allowmodifytag)
|
||||
|
||||
# check for no description
|
||||
projectdesc=$(sed -e '1q' "$GIT_DIR/description")
|
||||
case "$projectdesc" in
|
||||
"Unnamed repository"* | "")
|
||||
echo "*** Project description file hasn't been set" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# --- Check types
|
||||
# if $newrev is 0000...0000, it's a commit to delete a ref.
|
||||
zero="0000000000000000000000000000000000000000"
|
||||
if [ "$newrev" = "$zero" ]; then
|
||||
newrev_type=delete
|
||||
else
|
||||
newrev_type=$(git cat-file -t $newrev)
|
||||
fi
|
||||
|
||||
case "$refname","$newrev_type" in
|
||||
refs/tags/*,commit)
|
||||
# un-annotated tag
|
||||
short_refname=${refname##refs/tags/}
|
||||
if [ "$allowunannotated" != "true" ]; then
|
||||
echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
|
||||
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
refs/tags/*,delete)
|
||||
# delete tag
|
||||
if [ "$allowdeletetag" != "true" ]; then
|
||||
echo "*** Deleting a tag is not allowed in this repository" >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
refs/tags/*,tag)
|
||||
# annotated tag
|
||||
if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
|
||||
then
|
||||
echo "*** Tag '$refname' already exists." >&2
|
||||
echo "*** Modifying a tag is not allowed in this repository." >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
refs/heads/*,commit)
|
||||
# branch
|
||||
if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
|
||||
echo "*** Creating a branch is not allowed in this repository" >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
refs/heads/*,delete)
|
||||
# delete branch
|
||||
if [ "$allowdeletebranch" != "true" ]; then
|
||||
echo "*** Deleting a branch is not allowed in this repository" >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
refs/remotes/*,commit)
|
||||
# tracking branch
|
||||
;;
|
||||
refs/remotes/*,delete)
|
||||
# delete tracking branch
|
||||
if [ "$allowdeletebranch" != "true" ]; then
|
||||
echo "*** Deleting a tracking branch is not allowed in this repository" >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
# Anything else (is there anything else?)
|
||||
echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# --- Finished
|
||||
exit 0
|
|
@ -0,0 +1,6 @@
|
|||
# git ls-files --others --exclude-from=.git/info/exclude
|
||||
# Lines that start with '#' are comments.
|
||||
# For a project mostly in C, the following would be a good set of
|
||||
# exclude patterns (uncomment them if you want to use them):
|
||||
# *.[oa]
|
||||
# *~
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
x+)JMU06g040031Q(JMLÉMÕËMaXbR¶”10<31>-&ªéCüÕþË’‘Ý=À,
|
Binary file not shown.
|
@ -0,0 +1,2 @@
|
|||
xŤŤQ
|
||||
B!Eűvó„ŽO'!˘M´€Q‡×<E280A1>Ěđů ĺgÔúş‡çŢTKY:v˝‰€N6»<36>…‘b f›˘÷š<C3B7>&—‰19ĂÄÇhoýV\Wi§íyqyŢĺ<C5A2>j9<6A>qő„FŘŇj´ăŞË?Ůź¤ćZ3¬Ëü<C38B>ßő*S6#
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
f27c2b2b03dcab38beaf89b0ab4ff61f6de63441
|
|
@ -0,0 +1 @@
|
|||
27566bd5738fc8b4e3fef3c5e72cce608537bd95
|
|
@ -0,0 +1 @@
|
|||
69554a64c1e6030f051e5c3f94bfbd773cd6a324
|
|
@ -0,0 +1 @@
|
|||
69554a64c1e6030f051e5c3f94bfbd773cd6a324
|
|
@ -17,7 +17,7 @@ import (
|
|||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
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)
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 =
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
|
|
|
@ -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]
|
||||
|
|
2
main.go
2
main.go
|
@ -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 = ""
|
||||
|
|
|
@ -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})
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -613,6 +613,7 @@ func findComments(e Engine, opts FindCommentsOptions) ([]*Comment, error) {
|
|||
}
|
||||
return comments, sess.
|
||||
Asc("comment.created_unix").
|
||||
Asc("comment.id").
|
||||
Find(&comments)
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
57
models/migrations/v42.go
Normal 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
18
models/migrations/v43.go
Normal 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
69
models/migrations/v44.go
Normal 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()
|
||||
}
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
// ________ .__ ____ __.
|
||||
|
|
123
models/update.go
123
models/update.go
|
@ -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,
|
||||
|
|
|
@ -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{
|
||||
|
|
|
@ -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}",
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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=Порт за слушане
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 l’effacement.
|
||||
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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>の権限を持ち: メンバーはチームのリポジトリに対して、読み取り、プッシュや共同編集者の追加ができます。
|
||||
|
|
|
@ -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=수신 대기 포트
|
||||
|
|
|
@ -36,6 +36,7 @@ settings=Nustatymai
|
|||
your_profile=Jūsų profilis
|
||||
your_settings=Jūsų parametrai
|
||||
|
||||
|
||||
activities=Veiklos
|
||||
issues=Problemos
|
||||
|
||||
|
|
|
@ -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 tā 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ē.
|
||||
|
|
|
@ -39,6 +39,7 @@ admin_panel=Administrasjonspanel
|
|||
account_settings=Kontoinstillinger
|
||||
settings=Innstillinger
|
||||
|
||||
|
||||
issues=Problemer
|
||||
|
||||
cancel=Avbryt
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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=Включено
|
||||
|
|
|
@ -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=Порт за слушање
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
Loading…
Reference in New Issue
Block a user