Compare commits

..

376 Commits

Author SHA1 Message Date
Kim "BKC" Carlbäcker
097c067fcb This is how you do it 2016-12-03 08:18:59 +01:00
Thomas Boerger
34e64ffec2 Started to integrate mail templates 2016-11-30 21:26:22 +01:00
Thomas Boerger
ce295d724f Drop the prefix from public bindata 2016-11-30 13:40:09 +01:00
Thomas Boerger
569c9af0cc Use the optional embedded templates 2016-11-30 13:39:33 +01:00
Thomas Boerger
80cf010cc1 Fixed templates import paths
Since the -prefix option of go-bindata seems to be broken I'm forced to
rewrite the paths of the templates with sed.
2016-11-30 11:42:45 +01:00
Thomas Boerger
d660fb61cc Dropped the dependency version checks
Since we have bundled all required dependencies via the vendoring we
don't need to provide these checks anymore. We make sure to have the
correct versions with that.
2016-11-30 11:16:21 +01:00
Thomas Boerger
206c8c45f2 Dropped the template version check 2016-11-30 11:14:16 +01:00
Thomas Boerger
fdca271e20 Integrated dynamic and static bindata for templates 2016-11-30 11:10:15 +01:00
Thomas Boerger
f952674fbe Ignore templates bindata 2016-11-30 00:06:48 +01:00
Thomas Boerger
6519718706 Merge pull request #298 from stroucki/20161128locale
suggested locale fixes
2016-11-29 22:49:10 +01:00
Michael Stroucken
e929ca2c41 Time values displayed are apparently single values, so use singular. 2016-11-29 14:54:10 -05:00
Thomas Boerger
ccad2cce32 Merge pull request #275 from strk/readmelink
Turn banner into a link to the github page
2016-11-29 20:38:23 +01:00
Sandro Santilli
349ecc6919 Turn banner into a link to the github gitea repository
Also use relative link to banner
2016-11-29 18:45:02 +01:00
Thomas Boerger
b6a95a8cb3 Integrate public as bindata optionally (#293)
* Dropped unused codekit config

* Integrated dynamic and static bindata for public

* Ignore public bindata

* Add a general generate make task

* Integrated flexible public assets into web command

* Updated vendoring, added all missiong govendor deps

* Made the linter happy with the bindata and dynamic code

* Moved public bindata definition to modules directory

* Ignoring the new bindata path now

* Updated to the new public modules import path

* Updated public bindata command and drop the new prefix
2016-11-30 00:26:36 +08:00
Thomas Boerger
4680c349dd Merge pull request #303 from tboerger/linting
Fixed remaining linting errors
2016-11-29 15:18:27 +01:00
Thomas Boerger
684d55e130 Reenabled lint check within drone 2016-11-29 14:15:36 +01:00
Thomas Boerger
60e3e5b4e1 Updated bindata to latest version 2016-11-29 14:14:40 +01:00
Thomas Boerger
e93d394620 Replace invaliud bindata variable names within make task 2016-11-29 14:14:22 +01:00
Thomas Boerger
6dd2c3b2db Fixed linting errors for variable definitions 2016-11-29 14:05:26 +01:00
Kim "BKC" Carlbäcker
42ec5ce740 Fix breakage from vendor-update 2016-11-29 11:50:22 +01:00
Kim "BKC" Carlbäcker
dad806d3ea CreateBranch-hook has shasum. Use the full ref for fetching shasum 2016-11-29 11:50:22 +01:00
Kim "BKC" Carlbäcker
57dc9efaae Update gitea/sdk vendor 2016-11-29 11:50:22 +01:00
Kim "BKC" Carlbäcker
f364522468 Tag-webhooks are useless without shasums 2016-11-29 11:50:22 +01:00
Lunny Xiao
abf6c3a8e3 bug fixed caused by #295 (#299) 2016-11-29 14:57:36 +08:00
Thomas Boerger
16cdbe1956 Merge pull request #288 from tboerger/docker
Docker integration
2016-11-29 07:21:47 +01:00
Michael Stroucken
36a4663393 Rebase branch onto go-gitea/gitea 2016-11-28 20:03:45 -05:00
Andrey Nering
fd53028139 Merge pull request #294 from Bwko/Lint/user.go
Lint models/user.go
2016-11-28 20:30:02 -02:00
Andrey Nering
b9b22b4a0b Merge pull request #295 from Bwko/Lint/repo_
Lint models/repo
2016-11-28 20:29:15 -02:00
Matthias Loibl
8704f48e66 Merge pull request #290 from tboerger/maintain-contribute
Project unification, updates for contributors guide and github files
2016-11-28 20:49:39 +01:00
Bwko
bad1bc6518 Lint models/repo.go 2016-11-28 18:27:55 +01:00
Bwko
a5aae1c145 Lint models/repo_* 2016-11-28 17:58:59 +01:00
Bwko
9963d61233 Lint models/user.go 2016-11-28 17:47:46 +01:00
Thomas Boerger
d7dea676fd Added -S flag to addgroup command within Dockerfiles 2016-11-28 17:37:31 +01:00
Thomas Boerger
4b0abdae9e Replaced edge with 3.4 for the alpine base image 2016-11-28 17:23:22 +01:00
Thomas Boerger
972ce6b791 Replaced shadow with addgroup and adduser 2016-11-28 17:22:22 +01:00
Thomas Boerger
65d0426b91 Use su-exec instead of gosu, much smaller 2016-11-28 17:16:13 +01:00
Thomas Boerger
8def53ffcc Add a pragraph to the k8s PR guide to contributors guide 2016-11-28 16:57:42 +01:00
Lunny Xiao
27d66855eb golint fixed for models/migrations (#291) 2016-11-28 23:44:17 +08:00
Lunny Xiao
1d0f811399 golint fixed for models/pull.go (#292) 2016-11-28 23:31:06 +08:00
Thomas Boerger
fd3f16695e Merge pull request #289 from lunny/lunny/golint_models_issue_comment
Golint fixed for models/issue_comment.go
2016-11-28 14:46:00 +01:00
Thomas Boerger
b3abc2775f Dropped more or less useless files 2016-11-28 14:36:35 +01:00
Thomas Boerger
91d6c715ea Dropped new lines from contributing, some rewording and reformatting 2016-11-28 14:35:55 +01:00
Thomas Boerger
caac5fb99d Updated maintainers file to latest status 2016-11-28 14:35:04 +01:00
Thomas Boerger
c2044e5b39 Dropped always outdated contributors file, link to it the graph on readme 2016-11-28 14:34:06 +01:00
Lunny Xiao
9fc609ce17 golint fixed for models/issue_comment.go 2016-11-28 21:33:09 +08:00
Matthias Loibl
7b6cc9244d Update link on user’s profile avatar to avatar settings (#287) 2016-11-28 21:29:39 +08:00
Thomas Boerger
9628d4fb44 Unified GitHub templates accross all projects 2016-11-28 14:28:40 +01:00
Thomas Boerger
3d2138812c Unified editorconfig accross all projects 2016-11-28 14:27:59 +01:00
Thomas Boerger
575dc69e3b Updated drone docker definitions
In order to automatically build docker images I have re-enabled the
docker building parts within our drone runs on every push to master and
on every tag.

Signed-off-by: Thomas Boerger <tboerger@suse.de>
2016-11-28 14:15:14 +01:00
Thomas Boerger
86aa8e413a Restructured docker building
I have restructured the docker build process entirely, the binary gets
built outside of the docker build command, now we are managing all
dependencies with real Alpine packages and I have dropped features like
socat or the cron daemon.

Signed-off-by: Thomas Boerger <tboerger@suse.de>
2016-11-28 14:13:18 +01:00
Thomas Boerger
9948f0daaa Merge pull request #285 from lunny/lunny/golint_models_org_team
Golint for models/org_team.go
2016-11-28 09:42:53 +01:00
Lunny Xiao
f215d78157 rename all uID -> userID on models/org_team.go 2016-11-28 16:33:08 +08:00
Lunny Xiao
bf8d90c5cc golint fixed for models/models.go (#284) 2016-11-28 15:25:16 +08:00
Lunny Xiao
21846d16e5 golint for models/org_team.go 2016-11-28 09:30:08 +08:00
Thomas Boerger
25b5722155 Merge pull request #274 from lunny/lunny/golint_modules_auth
Golint fixed for modules/auth
2016-11-27 16:21:49 +01:00
Lunny Xiao
d0bef011ad Merge branch 'lunny/golint_modules_auth' of github.com:lunny/gitea into lunny/golint_modules_auth 2016-11-27 21:41:56 +08:00
Lunny Xiao
ec87a75c00 golint fixed for modules/auth 2016-11-27 21:39:06 +08:00
Thomas Boerger
e6da2cf2cb Merge pull request #281 from Bwko/Lint/typos
Fixes typos
2016-11-27 14:01:50 +01:00
Bwko
a4ece1f223 Fixes typos 2016-11-27 12:59:12 +01:00
Thomas Boerger
5efdccd1d8 Merge pull request #264 from Bwko/lint/org.go
Lint models/org.go
2016-11-27 12:18:20 +01:00
Thomas Boerger
7a92519bd7 Merge pull request #269 from lunny/lunny/golint_modules_log
Golint fixed for modules/log
2016-11-27 12:16:35 +01:00
Thomas Boerger
9a984c0d49 Merge pull request #266 from Bwko/lint/repo_mirror
Lint models/repo_mirror.go
2016-11-27 12:15:01 +01:00
Thomas Boerger
fe3908d099 Merge pull request #268 from Bwko/lint/repo_branch
Lint models/repo_branch.go
2016-11-27 12:14:25 +01:00
Thomas Boerger
e23a9d22e5 Merge pull request #267 from Bwko/lint/ssh_key
Lint models/ssh_key.go
2016-11-27 12:13:43 +01:00
Thomas Boerger
93d527a0a4 Merge pull request #265 from Bwko/lint/access.go
Lint models/access.go
2016-11-27 12:12:56 +01:00
Thomas Boerger
8347a55cc2 Merge pull request #263 from Bwko/lint/user_email
Lint models/user_email.go
2016-11-27 12:12:02 +01:00
Thomas Boerger
bc59b8abc9 Merge pull request #273 from typeless/master
modules/process: add ExecDirEnv (next to ExecDir)
2016-11-27 12:11:04 +01:00
Mura Li
9aaf2a6d9a modules/process: add ExecDirEnv (next to ExecDir)
Add a sibling to ExecDir which is capable of specifying environment variables,
so that we can invoke `git` with GIT_INDEX_FILE, GIT_DIR, etc..

For #258
2016-11-27 18:53:57 +08:00
Andrey Nering
3ac72255fa Merge pull request #272 from andreynering/gitea/location-cherrypick-a3ea4b8
Update locales and add Swedish
2016-11-27 08:49:26 -02:00
Andrey Nering
c664ffd1db Merge pull request #270 from andreynering/gitea/http-headers-download
Fix HTTP headers for issue attachment download
2016-11-27 08:48:26 -02:00
Lunny Xiao
94da472717 Golint fixed for modules/setting (#262)
* golint fixed for modules/setting

* typo fixed and renamed UNIXSOCKET to UnixSocket
2016-11-27 18:14:25 +08:00
Lunny Xiao
5b998a6680 golint fixed for modules/auth 2016-11-27 14:03:59 +08:00
Unknwon
4cb21115dc Update locales and add Swedish
Signed-off-by: Andrey Nering <andrey.nering@gmail.com>
2016-11-26 14:22:55 -02:00
Andrey Nering
d647d02c2f Fix Chrome not liking commas 2016-11-26 11:26:03 -02:00
Andrey Nering
638dd24cec Fix HTTP headers for issue attachment download
- Download filename was wrong for files other than images. Example: It was `download` instead of `file.pdf`
- PDF was downloading instead of showing on browser
2016-11-26 10:13:25 -02:00
Lunny Xiao
3228544c31 golint fixed for modules/log 2016-11-26 19:53:29 +08:00
Bwko
0b9cf10340 Lint models/org.go & models.go 2016-11-26 11:37:50 +01:00
Bwko
7bf7042013 Lint models/repo_mirror.go 2016-11-26 11:23:55 +01:00
Bwko
ce8c9ef580 Lint models/repo_branch.go 2016-11-26 11:20:37 +01:00
Bwko
6cde041080 Lint models/ssh_key.go 2016-11-26 01:36:03 +01:00
Bwko
2bb1601d7c Lint models/access.go 2016-11-26 01:07:57 +01:00
Bwko
066f515a47 Lint models/user_email.go 2016-11-26 01:03:06 +01:00
Thomas Boerger
0a76d260fa Merge pull request #260 from tboerger/drone-latest
Dropped latest publishing from drone
2016-11-25 17:13:55 +01:00
Thomas Boerger
65549863bc Dropped latest publishing from drone 2016-11-25 13:07:19 +01:00
Thomas Boerger
574e49c854 Merge pull request #241 from Bwko/lint/admin.go
Lint models/admin.go
2016-11-25 12:55:24 +01:00
Thomas Boerger
21b7d30174 Merge pull request #245 from Bwko/lint/update&slack
Lint models/update.go, release.go & webhook_slack.go
2016-11-25 12:55:14 +01:00
Thomas Boerger
e9c6053b86 Merge pull request #246 from Bwko/fix/typo
Fix typos
2016-11-25 12:54:57 +01:00
Thomas Boerger
177a4c7385 Merge pull request #259 from tboerger/drone-fixes
Fixed s3 publishing within drone
2016-11-25 11:48:17 +01:00
Thomas Boerger
0accc935a3 Fixed s3 publishing within drone 2016-11-25 10:53:48 +01:00
Thomas Boerger
5d4333eb0d Merge pull request #240 from go-gitea/drone-additions
Additions to the Drone CI integration
2016-11-25 10:25:01 +01:00
Thomas Boerger
32f8a38f6c Merge pull request #254 from lunny/lunny/golint_modules_context
Golint fixed for modules/context
2016-11-25 10:11:52 +01:00
Thomas Boerger
3ae7955d15 Disable broken docker build for now 2016-11-25 10:11:49 +01:00
Thomas Boerger
755ed84740 Be more explicit and dropped matrix builds from drone 2016-11-25 10:11:49 +01:00
Thomas Boerger
5b17661c5d Updated badges for drone and similar to lgtm 2016-11-25 10:11:49 +01:00
Thomas Boerger
3e6f363471 Merge pull request #256 from lunny/lunny/golint_modules_avatar
Golint fixed for modules/avatar
2016-11-25 10:11:44 +01:00
Thomas Boerger
2255a9af6a Merge pull request #255 from lunny/lunny/golint_modules_cron
Golint fixed for modules/cron
2016-11-25 10:11:36 +01:00
Thomas Boerger
26ae2ff86d Merge pull request #252 from lunny/lunny/golint_fixed_modules_httplib
Golint fixed for modules/httplib
2016-11-25 10:08:49 +01:00
Thomas Boerger
d39266228c Merge pull request #251 from lunny/lunny/golint_modules_template
Golint fixed for modules/template
2016-11-25 10:08:37 +01:00
Thomas Boerger
7c5de1e393 Merge pull request #250 from lunny/lunny/golint_modules_markdown
Golint fixed for modules/markdown
2016-11-25 10:08:23 +01:00
Thomas Boerger
a321ffbcce Merge pull request #249 from lunny/lunny/golint_modules_mailer
Golint fixed for modules/mailer
2016-11-25 10:07:52 +01:00
Lunny Xiao
3c87c57d96 golint fixed for modules/avatar 2016-11-25 16:37:04 +08:00
Lunny Xiao
b47051e59b golint fixed for modules/cron 2016-11-25 16:19:24 +08:00
Thomas Boerger
900a21008c Added errcheck make task (#242) 2016-11-25 16:12:06 +08:00
Bwko
c0ca6644ad Lint/issue &mail (#243)
* Lint models/release.go

* Lint models/ issue_label, issue_mail & mail.go
2016-11-25 16:11:12 +08:00
Bwko
081c2a9395 Lint models/token.go (#244) 2016-11-25 16:03:52 +08:00
Lunny Xiao
76604d8f90 fixed test build error 2016-11-25 16:02:10 +08:00
Bwko
33a2ac3830 Lint models/update.go & webhook_slack.go 2016-11-25 07:55:08 +01:00
Lunny Xiao
faabc76fd6 Golint fixed for modules/context 2016-11-25 14:53:59 +08:00
Lunny Xiao
bd5ea3e222 Golint fixed for modules/httplib 2016-11-25 14:32:09 +08:00
Lunny Xiao
229ec927b9 Golint fixed for modules/template 2016-11-25 14:23:48 +08:00
Lunny Xiao
304bbd3f25 golint fixed for modules/markdown 2016-11-25 09:58:05 +08:00
Lunny Xiao
2e565bc1c4 Golint fixed for modules/mailer 2016-11-25 09:44:04 +08:00
Andrey Nering
6a28909f40 CONTRIBUTING.md: link to "Faster reviews" document (#229)
* CONTRIBUTING.md: link to "Faster reviews" document

* CONTRIBUTING.md: small fixes
2016-11-25 09:25:34 +08:00
Bwko
d8e11a8eaa Lint models/admin.go 2016-11-24 23:42:07 +01:00
Bwko
ece19f4a5e Lint models/release.go 2016-11-24 22:02:54 +01:00
Thomas Boerger
21e8deed89 Merge pull request #96 from metalmatze/feature/drone-config
Create a first draft for .drone.yml
2016-11-24 21:36:47 +01:00
Lunny Xiao
450969c158 test database is connect OK after db config initialized (#239) 2016-11-24 22:30:36 +08:00
Thomas Boerger
ba2e75a0ab Merge pull request #238 from go-gitea/make-install
Really use go install on make install
2016-11-24 15:29:17 +01:00
Thomas Boerger
fd090dc29b Added matrix drone builds 2016-11-24 14:48:40 +01:00
Matthias Loibl
4c03974326 Create a first draft for .drone.yml 2016-11-24 14:47:36 +01:00
Thomas Boerger
cb0b91cdc9 Dropped travis config 2016-11-24 14:41:59 +01:00
Thomas Boerger
fd13b71fb2 Added drone instead of travis detection to makefile 2016-11-24 14:41:30 +01:00
Thomas Boerger
cd7e661870 Added dummy tasks for mysql and pgsql tests 2016-11-24 14:40:56 +01:00
Thomas Boerger
cc8c57458f Really use go install on make install 2016-11-24 14:38:37 +01:00
Thomas Boerger
b6b616b336 Merge pull request #228 from Bwko/feature/short-hash-download
Added short-hash support to downloads
2016-11-24 13:38:14 +01:00
Thomas Boerger
289f819f78 Merge pull request #237 from strk/login_source-lint
Lint models/login_source.go
2016-11-24 13:37:01 +01:00
Sandro Santilli
1c3044b873 Lint models/login_source.go 2016-11-24 12:34:38 +01:00
Bwko
ff0d1bd602 Added short-hash support to downloads 2016-11-24 11:45:16 +01:00
Thomas Boerger
2ccdcda072 Merge pull request #235 from lunny/lunny/golint_modules_user
golint fixed for modules/user
2016-11-24 11:33:47 +01:00
Thomas Boerger
0a66c2a2d9 Merge pull request #234 from strk/issue-lint
Lint issue.go
2016-11-24 11:30:39 +01:00
Thomas Boerger
e512411863 Merge pull request #233 from strk/git_diff-lint
Lint git_diff.go
2016-11-24 11:29:51 +01:00
Thomas Boerger
03b6880089 Merge pull request #232 from strk/error-lint
Lint error.go
2016-11-24 11:29:15 +01:00
Thomas Boerger
8ba0ac976f Merge pull request #231 from lunny/lunny/golint_modules_base
golint fixed for modules/base
2016-11-24 11:28:31 +01:00
Thomas Boerger
1cfbfb3812 Merge pull request #212 from strk/action-lint
Lint action.go
2016-11-24 11:17:04 +01:00
Thomas Boerger
f0cfb1cb03 Merge pull request #192 from strk/make-default-target
Have the default 'all' rule just build
2016-11-24 11:13:35 +01:00
Thomas Boerger
0581210a76 Merge pull request #176 from strk/manager-lint
Lint and document manager api
2016-11-24 11:10:34 +01:00
Lunny Xiao
46ecb0a14d golint fixed for modules/user 2016-11-24 17:37:11 +08:00
Sandro Santilli
8aa960f129 Actually document the missing bits 2016-11-24 09:41:11 +01:00
Sandro Santilli
3fba29c571 Expand documentations 2016-11-24 09:30:08 +01:00
Sandro Santilli
0a61d54a9c Expand documentation a bit more 2016-11-24 09:20:28 +01:00
Sandro Santilli
dd9d0f3732 Lint action.go 2016-11-24 09:03:29 +01:00
Sandro Santilli
170f2e98cc Lint error.go
This was done semi-programmatically, not really documenting anything
2016-11-24 09:03:17 +01:00
Sandro Santilli
6e644726d0 Lint git_diff.go
Semi-automatic linting (don't really document things)
2016-11-24 09:02:58 +01:00
Sandro Santilli
4dd1eb57bd Lint issue.go 2016-11-24 09:02:44 +01:00
Sandro Santilli
5301a5db3a Have the deault 'all' rule just build
Clean and test are saner being seperate targets
2016-11-24 09:02:32 +01:00
Sandro Santilli
ad3d6b7fff Lint and document manager api 2016-11-24 09:02:10 +01:00
Lunny Xiao
6ed7f269f1 Move init functions from routers/install to routers/init (#230)
* move init functions from routers/install to routers/init

* copyright typo
2016-11-24 15:40:16 +08:00
Lunny Xiao
fb3bb69ec6 golint fixed for modules/base 2016-11-24 15:17:44 +08:00
Lunny Xiao
3917ed45de golint fixed for routers (#208) 2016-11-24 15:04:31 +08:00
stroucki
3a3782bb7f Handle ssh key import better (#224)
* Handle user ssh key input better

ssh_key: when user submitted keys had a newline at the end, strings.Split
would have created a slice with an empty last element, and the key type
check would be incorrect. Perhaps a better way is to look for 'ssh-rsa' or
'ssh-dsa' at the beginning of the string, but this is simple.

* ssh_key: correct indentation
2016-11-24 08:52:55 +08:00
Lunny Xiao
cb1602840c golint fixed for routers/repo/branch.go (#206) 2016-11-22 16:32:00 +08:00
Sandro Santilli
c25063d834 Lint webhook.go, unexports simpleMarshalJSON (#198) 2016-11-22 14:42:52 +08:00
Bwko
2a449bd4b1 Fix typos 2016-11-21 20:08:21 +01:00
Lunny Xiao
b2cce12980 golint fixed for routers/repo/wiki.go (#203) 2016-11-21 18:03:42 +08:00
Lunny Xiao
f0df8e8dfa golint fixed for routers/repo/middlewares.go (#204) 2016-11-21 18:03:37 +08:00
Lunny Xiao
18dc4f1023 golint fixed for routers/repo/view.go (#205) 2016-11-21 18:03:29 +08:00
Thomas Boerger
1d9576d5ea Merge pull request #202 from lunny/lunny/golint_fixed_routers_admin
go lint fixed for routers/admin
2016-11-21 10:37:14 +01:00
Lunny Xiao
659bc2814c go lint fixed for routers/admin 2016-11-21 11:29:25 +08:00
Andrey Nering
bd13c81684 Merge pull request #196 from Bwko/fix/commit-view-panic
Fix panic when no user is signed in
2016-11-19 14:30:37 -02:00
Bwko
7b75d93f3d Fix for anonymous users to switch views 2016-11-19 16:53:34 +01:00
Bwko
fc3ed8a1de Fix panic when no user is signed in
See #188
2016-11-19 12:43:10 +01:00
Lunny Xiao
cf045b029c golint fixed for parts of routers root, dev, user and org dirs (#167)
* golint fixed for parts of routers root, dev and org dirs

* add user/auth.go golint fixed

* rename unnecessary exported to unexported and user dir golint fixed
2016-11-18 11:03:03 +08:00
Andrey Nering
91953ae9b4 Merge pull request #187 from strk/vendor
Add vendoring section
2016-11-17 17:35:48 -02:00
Sandro Santilli
39b3fcad1d Wrap vendor/ in backtics 2016-11-17 17:06:13 +01:00
Sandro Santilli
4faf9c213e Add vendoring section
Closes #178
2016-11-17 16:49:12 +01:00
Andrey Nering
d884312223 Merge pull request #100 from ethantkoenig/develop
API endpoints for stars
2016-11-17 07:15:15 -02:00
Ethan Koenig
0834e492c0 API endpoints for stars 2016-11-16 22:51:54 -05:00
Thibault Meyer
871c964ef7 Upgrade vendor "git" (#175) 2016-11-15 23:24:08 +08:00
Matthias Loibl
7596e41027 Merge pull request #171 from andreynering/gitea/editorconfig-crlf
.editorconfig: do not specify line ending
2016-11-15 12:06:41 +01:00
Thomas Boerger
56a8cf523b fix variable assigned and not used. (#173)
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2016-11-15 07:53:16 +01:00
Bo-Yi Wu
d9ffe99972 fix variable assigned and not used.
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2016-11-15 14:16:27 +08:00
Kim "BKC" Carlbäcker
07a0753420 Merge pull request #169 from strk/allow-update-draft-releases
Allow updating draft releases while keeping them as draft
2016-11-14 21:48:21 +01:00
Andrey Nering
6cf66117e7 Merge pull request #170 from strk/wiki-lint
Fix lint errors in models/wiki (just add methods docs)
2016-11-14 17:34:16 -02:00
Andrey Nering
a285c07d5e .editorconfig: do not specify line ending
That is annoying on Windows, since the editor will change the file if
you just open it. Git will checking as LF anyway.
2016-11-14 15:48:44 -02:00
Sandro Santilli
cd339263d9 Allow updating draft releases while keeping them as draft
Closes #162
2016-11-14 18:02:21 +01:00
Sandro Santilli
592a4ec4d3 Fix lint errors in models/wiki (just add methods docs)
See #70
2016-11-14 18:01:46 +01:00
Andrey Nering
81f227eace Merge pull request #168 from appleboy/gofmt
fix gofmt error.
2016-11-14 15:00:02 -02:00
Bo-Yi Wu
5054020c1f fix gofmt error.
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2016-11-15 00:03:37 +08:00
Bo-Yi Wu
904deb7d6a Fix broken link for Contributors Guide (#166)
* Fix broken link for Contributors Guide

* remove ./
2016-11-14 08:17:15 +01:00
Andrey Nering
739f07c98e Remember diff view style (#163) 2016-11-13 10:54:04 +08:00
Lunny Xiao
bd76e156bb fixed bug #151 finally (#164) 2016-11-12 22:52:19 +08:00
LefsFlare
3ef022b071 Fixes possible vulnerabilities with keyword hijacking (#20)
- Added public entries to reserved keywords list
- Rename variables
- Derped comment
2016-11-12 13:26:45 +01:00
Lunny Xiao
3dedc027ac Bug fixed for issues (#156) 2016-11-12 13:06:33 +01:00
Thibault Meyer
54e6ed3431 Upgrade vendor "git" (#161) 2016-11-12 12:09:25 +01:00
Lunny Xiao
b339858500 replace footer gogs to gitea (#157) 2016-11-12 09:32:43 +01:00
Lunny Xiao
0baaa7728a bug fixed caused by #153 (#154) 2016-11-12 09:30:46 +01:00
Lunny Xiao
30a37311f8 use in instead string join (#155) 2016-11-12 09:29:18 +01:00
Lunny Xiao
555d8b16cb fixed bug #151 caused Find should be Get (#153) 2016-11-12 00:01:09 +01:00
Matthias Loibl
900f233b3c Merge pull request #152 from lunny/lunny/optimization_in
optimization on database IN
2016-11-11 22:09:54 +01:00
Lunny Xiao
ade6d4a20f optimization on database IN 2016-11-12 01:31:37 +08:00
Lunny Xiao
9bf28a2799 bug fixed for 500 caused by get org users (#149) 2016-11-12 00:55:06 +08:00
Lunny Xiao
a8c6698de8 Fix error 500 on organization dashboard page (#150) 2016-11-12 00:40:21 +08:00
Lunny Xiao
e2aa991e10 ask for go get from code.gitea.io/gitea and change gogs to gitea on main file (#146) 2016-11-11 14:56:35 +01:00
Thomas Boerger
5fc370e332 Merge pull request #142 from 0xbaadf00d/feature/gofmt
Normalize files with gofmt
2016-11-11 14:44:30 +01:00
Thomas Boerger
f07362b90f Merge pull request #144 from strk/install-via-go
Add instructions to install via go
2016-11-11 14:43:07 +01:00
Sandro Santilli
786cc5bbc8 Add info about installing via go 2016-11-11 13:35:58 +01:00
Thibault Meyer
ddee4c8b58 Normalize files with gofmt 2016-11-11 13:11:45 +01:00
Sandro Santilli
a1c5f02444 Fix import path of go-sdk (#141)
From code.gitea.io/go-sdk/gitea
  To code.gitea.io/sdk/gitea
2016-11-11 17:39:44 +08:00
Andrey Nering
96c9fef35f Update home page to Gitea (#138) 2016-11-11 08:50:31 +08:00
Andrey Nering
52cc3fd36a Merge pull request #136 from 0xbaadf00d/feature/rewrite-xorm-queries
Rewrite raw queries
2016-11-10 21:18:34 -02:00
Thibault Meyer
b12f2a5916 Remove unused import 2016-11-10 21:10:25 +01:00
Thibault Meyer
b0ddced2b5 Merge remote-tracking branch 'upstream/master' into feature/rewrite-xorm-queries
# Conflicts:
#	models/git_diff.go
#	models/issue.go
#	models/org.go
#	models/pull.go
#	models/repo.go
2016-11-10 21:05:52 +01:00
Thibault Meyer
a4454f5d0f Rewrite XORM queries 2016-11-10 20:59:51 +01:00
Sandro Santilli
4247304f5a Update import paths from github.com/go-gitea to code.gitea.io (#135)
- Update import paths from github.com/go-gitea to code.gitea.io
- Fix import path for travis

See https://docs.travis-ci.com/user/languages/go#Go-Import-Path
2016-11-10 17:24:48 +01:00
Andrey Nering
1c0a4e166f Merge pull request #134 from metalmatze/fix/admin-templates
Fix bug that tries to load mistyped templates
2016-11-10 13:06:54 -02:00
Matthias Loibl
63ca42d17f Fix bug that tries to load mistyped templates 2016-11-10 11:54:20 +01:00
Rachid Zarouali
c040f2fbb1 first batch of Readme updates (#65) 2016-11-10 11:52:39 +01:00
Matthias Loibl
94b2747375 Remove go version from build tags (#133) 2016-11-10 08:43:49 -02:00
Matthias Loibl
31da225309 Check unhandled errors (#128) 2016-11-10 08:02:01 -02:00
Matthias Loibl
24d7bae2b2 Merge pull request #131 from 0xbaadf00d/feature/gitignore
Add IDEA IntelliJ to .gitignore
2016-11-10 10:53:43 +01:00
Lunny Xiao
1b238fe4d5 Merge pull request #121 from joubertredrat/feature-last-login
Last Login for admin manage your users
2016-11-10 17:20:55 +08:00
Lunny Xiao
c6c840faf7 Merge pull request #129 from lunny/lunny/SQL_instead_Sql
use x.SQL instead of x.Sql
2016-11-10 17:12:14 +08:00
Thibault Meyer
7ea943d501 Add IDEA IntelliJ to .gitignore 2016-11-10 10:01:44 +01:00
Lunny Xiao
b5bfab9855 Merge pull request #130 from 0xbaadf00d/feature/ordering-org-user
Ordering organizations and users by name
2016-11-10 16:56:36 +08:00
Thibault Meyer
3a10a0c1ca Ordering organizations and users by name 2016-11-10 09:18:54 +01:00
Lunny Xiao
7dcc3bc3d7 use x.SQL instead of x.Sql 2016-11-10 15:20:48 +08:00
Lunny Xiao
145648a233 Merge pull request #127 from metalmatze/enhancement/cli
Use cli Flags directly and not some helper funcs
2016-11-10 11:31:26 +08:00
Matthias Loibl
90fb64b217 Improve formatting of admin command
Signed-off-by: Matthias Loibl <mail@matthiasloibl.com>
2016-11-09 23:32:24 +01:00
Matthias Loibl
5cd093aa46 Use cli Flags directly and not some helper funcs
Signed-off-by: Matthias Loibl <mail@matthiasloibl.com>
2016-11-09 23:18:22 +01:00
Joubert RedRat
f91cbf0fed Support to last login feature 2016-11-09 08:53:45 -02:00
Lunny Xiao
475ddd8d89 Merge pull request #116 from lunny/lunny/lang-miss
fixed lack of translation for zh-CN
2016-11-09 15:16:27 +08:00
Lunny Xiao
c511f1c6c3 Merge pull request #18 from LefsFlarey/issue/3675
Fix 500 error caused by deleted users on issues (#3675)
2016-11-09 15:14:18 +08:00
Flare
a6c487f6ca Fix err not being nil 2016-11-09 13:07:01 +08:00
Matthias Loibl
45c4539c61 Merge pull request #17 from LefsFlarey/issue/3666
Fixed 404 caused by unexpected question mark
2016-11-08 18:27:59 +01:00
Flare
01c5233b53 Fixed 404 caused by unexpected question mark
This fixes 404 caused when creating new files or wiki pages with question marks. Amended to force CI rebuild
2016-11-08 22:09:48 +08:00
Lunny Xiao
f6d53ecbc1 Merge pull request #119 from metalmatze/fix/editorconfig
Go uses ident size 8 with tabs. Nothing else.
2016-11-08 19:13:29 +08:00
Matthias Loibl
1ceb56fc7f Go uses ident size 8 with tabs. Nothing else.
We are using gofmt to format our code. This will emit tabs.
The standard is tabs which is 8 spaces.
2016-11-08 11:41:02 +01:00
Kim "BKC" Carlbäcker
85b8b7f4e1 Merge pull request #90 from metalmatze/feature/tool-tests
Start to add tests for modules/base/tool
2016-11-08 10:30:52 +01:00
Lunny Xiao
8b0576b377 lack of translation for zh-CN 2016-11-08 16:20:45 +08:00
Lunny Xiao
8857d701fb Merge pull request #115 from strk/license
Re-add "Gogs authors" copyright (togheter with "Gitea authors")
2016-11-08 15:57:46 +08:00
Lunny Xiao
e06e0f9bb9 Merge pull request #113 from avelino/update_locale
replace Gogs to Gitea on locale files
2016-11-08 15:56:00 +08:00
Sandro Santilli
4e4c0c2cd3 Fix typo 2016-11-08 08:42:05 +01:00
Sandro Santilli
dad9dbacf7 Re-add "Gogs authors" copyright (togheter with "Gitea authors") 2016-11-08 08:36:19 +01:00
Thiago Avelino
5ea257be87 update copyright gitea license (#112) 2016-11-08 07:57:25 +01:00
Avelino
b4671c9aab replace Gogs to Gitea on locale files 2016-11-08 01:21:31 -02:00
Lunny Xiao
5667d4daae Merge pull request #73 from bkcsoft/gt/2164-release-pagination
Add Pagination to Releases-page (and de-duplicate pagination templates)
2016-11-08 10:39:03 +08:00
Matthias Loibl
e74868a850 Add test for IsTextFile() 2016-11-07 23:31:40 +01:00
Matthias Loibl
95d4cd9292 Make long godoc comment 2 lines 2016-11-07 23:31:40 +01:00
Matthias Loibl
2bb188ae79 Add test for IsLetter() 2016-11-07 23:31:40 +01:00
Matthias Loibl
4235fff9ee Add test for Int64sToMap() 2016-11-07 23:31:40 +01:00
Matthias Loibl
d417aedcfa Add tests for StringsToInt64s() & Int64sToStrings() 2016-11-07 23:31:40 +01:00
Matthias Loibl
b00d82d679 Add tests for TruncateString() 2016-11-07 23:31:40 +01:00
Matthias Loibl
86c32f2706 Use TruncateString(sha1,10) in ShortSha and deprecate it. 2016-11-07 23:31:39 +01:00
Matthias Loibl
030ba2894f Add tests for EllipsisString() and fix bug if param length < 3 2016-11-07 23:31:39 +01:00
Matthias Loibl
f81711f40d Test AvatarLink and refactor with tests passing 2016-11-07 23:31:39 +01:00
Matthias Loibl
a5d0b4de5b Vendor github.com/stretchr/testify for the assert package 2016-11-07 23:31:39 +01:00
Matthias Loibl
70fb1cf9d1 Use testify/assert for all tests in tool_test.go 2016-11-07 23:29:42 +01:00
Matthias Loibl
d874a9bf6b Add unit test for base.FileSize() 2016-11-07 23:29:42 +01:00
Matthias Loibl
11c9160cd3 Start to add tests for modules/base/tool 2016-11-07 23:29:41 +01:00
Sandro Santilli
864d1b1f9f Fix type in unused constant name (#111)
* Write LDAP, SMTP, PAM, DLDAP back to all uppercase

* Fix type in unused constant name

* Other MixCased fixes

* Complete MixerCasing of template constants

* Re uppercase LTS and LDAPS suffixes

* Uppercase JSON suffix in constant names

* Proper case LoginNoType

* Prefix unexported template path constants with "tpl"
2016-11-07 18:58:22 -02:00
Matthias Loibl
c8c748aea6 Merge pull request #109 from go-gitea/lgtm
Added ignore_maintainers_file option to .lgtm
2016-11-07 20:07:47 +01:00
Sandro Santilli
01a7674b5c Merge pull request #110 from strk/MixedCaseConst
Use MixedCase constant names
2016-11-07 19:22:21 +01:00
Sandro Santilli
b7bf9dfd28 more 2016-11-07 17:55:31 +01:00
Sandro Santilli
aadd7dcdc3 And others 2016-11-07 17:53:22 +01:00
Sandro Santilli
b3828e38a5 more 2016-11-07 17:41:28 +01:00
Sandro Santilli
05fd9d3f09 Security protocols 2016-11-07 17:38:43 +01:00
Sandro Santilli
7612b5ec40 More mixage 2016-11-07 17:37:28 +01:00
Sandro Santilli
64196d4036 More overlooks 2016-11-07 17:35:34 +01:00
Sandro Santilli
f14232d2e9 This one I overlooked before 2016-11-07 17:33:03 +01:00
Sandro Santilli
60c82a8780 More... 2016-11-07 17:30:04 +01:00
Sandro Santilli
f6a11e0de1 More MixedCase consts 2016-11-07 17:24:59 +01:00
Sandro Santilli
f388661bda ACCESS_MODE_* -> AccessMode* 2016-11-07 17:20:37 +01:00
Sandro Santilli
0b62aeb495 More MixedCase consts 2016-11-07 17:08:21 +01:00
Sandro Santilli
80eea77953 Use MixedCase constant names
See https://github.com/golang/go/wiki/CodeReviewComments#mixed-caps
2016-11-07 17:05:08 +01:00
Thomas Boerger
d944bdec47 Added ignore_maintainers_file option to .lgtm 2016-11-07 16:36:37 +01:00
Thomas Boerger
5d430c9e68 Merge pull request #108 from go-gitea/go-sdk
Replaced gogits go-gogs-client with go-sdk
2016-11-07 16:31:17 +01:00
Sandro Santilli
ee963f67c1 Merge pull request #103 from strk/GOGS_drop
Replace GOGS with GITEA in variable names
2016-11-07 16:30:48 +01:00
Joubert RedRat
9c434ccc50 Change binary name from main to gitea 2016-11-07 13:26:19 -02:00
Joubert RedRat
28bee28102 Replace Gogs to Gitea in installation options 2016-11-07 13:26:19 -02:00
Sandro Santilli
f430d26f7e Hush dangerous GNU comment, mark "check" rule as phony 2016-11-07 13:25:50 -02:00
Sandro Santilli
3f18111cbe Add "check" alias for testing
Follows GNU Coding Standards, see
https://www.gnu.org/prep/standards/html_node/Standard-Targets.html#Standard-Targets
2016-11-07 13:25:50 -02:00
Thomas Boerger
4c6c16f358 Replaced go-gogs-client with go-sdk imports 2016-11-07 16:10:32 +01:00
Thomas Boerger
77f9c7e571 Fixed links to sdk docs 2016-11-07 16:10:32 +01:00
Thomas Boerger
e378648c79 Added updated go-sdk 2016-11-07 16:10:32 +01:00
Thomas Boerger
d1b14fef56 Stop ignoring gitea in general 2016-11-07 16:10:32 +01:00
Sandro Santilli
30be1f4826 Fix typo in unused constant name 2016-11-07 16:06:21 +01:00
Sandro Santilli
145ab5c89a Rename and update init files to use "gitea" instead of "gogs"
Closes #102
2016-11-07 16:06:21 +01:00
Sandro Santilli
b7263f31a5 Replace GOGS with GITEA in variable names
Still use GOGS_WORK_DIR and GOGS_CUSTOM env variables
as a fallback if the equivalent GITEA_* are not set,
warning user about the need for change.

Does not change "gogs" to "gitea" in webhook type name
Because "gogs" hook type is part of the API (routes) and used
in templates...

Closes #87
2016-11-07 16:05:18 +01:00
Thomas Boerger
6f3097f9e6 Dropped github.com/gogits/go-gogs-client vendored dep 2016-11-07 15:51:49 +01:00
Thomas Boerger
3e13e16b3f Dropped client from version check 2016-11-07 14:49:25 +01:00
Thomas Boerger
a6d683f498 Link to godoc instead of Gogs wiki 2016-11-07 14:49:25 +01:00
Thomas Boerger
ceb920802a Dropped link to Gogs docs from template 2016-11-07 14:49:25 +01:00
Thomas Boerger
6bf9910975 Set correct doc url for go-sdk 2016-11-07 14:49:25 +01:00
Lunny Xiao
1b962bac0b Merge pull request #97 from andreynering/gitea/diff-colors
CSS: Stronger colors for diffs
2016-11-07 20:39:20 +08:00
Kim "BKC" Carlbäcker
562f9b6eae Merge all pagination-templates into 'base/paginate'
to reduce code-duplicity
2016-11-07 12:44:29 +01:00
Kim "BKC" Carlbäcker
86fb1a0cb1 Add Pagination to Releases-page 2016-11-07 11:41:09 +01:00
Rachid Zarouali
be5607e510 Merge pull request #50 from 0xbaadf00d/feature/2583-disablehttpcloning
Disable HTTP cloning
2016-11-07 11:23:30 +01:00
Odin Ugedal
5a6f7edde9 Use the rev-parsed sha1 commit id (#98)
Use the rev-parsed sha1 commit id in urls to repo files,
instead of the abbreviated version.
2016-11-06 19:15:44 -02:00
Andrey Nering
ef5fc3c959 CSS: Stronger colors for diffs 2016-11-06 17:57:45 -02:00
Matthias Loibl
92c48dabe3 Merge pull request #95 from odinuge/readmeTxt
Fix rendering of non-markdown readme files
2016-11-06 19:54:46 +01:00
Odin Ugedal
530f6c1da4 Fix rendering of non-markdown readme files 2016-11-06 16:02:42 +01:00
Sandro Santilli
6e4252dad4 Replace gogits/git-module dependency with go-gitea/git (#94)
* Replace gogits/git-module dependency with go-gitea/git

Fixes #92

* Remove git alias for git module import (not needed)
2016-11-06 11:18:34 -02:00
LefsFlare
55a4d46f5d Adds checking of reserved keywords against team names (#22) 2016-11-06 10:07:03 +01:00
Thibault Meyer
fe8bfa54de Ordering team by name ascending except for 'Owners' (#48) 2016-11-06 09:59:21 +01:00
Matthias Loibl
d318f612a9 Add tests for CurrentUsername() (#88) 2016-11-06 09:47:25 +01:00
Lunny Xiao
1cb5b0e2f6 Merge pull request #83 from strk/dot.github
Review issue and pull templates, drop unused contributing file
2016-11-06 12:30:31 +08:00
Sandro Santilli
27f99a16a6 Review issue and pull templates, drop unused contributing file
The CONTRIBUTING.md from root dir will be used by github
2016-11-05 23:24:21 +01:00
Sandro Santilli
9f437eb1ab Wrap text to 80 columns (#81)
Use a list for owners (nitpick response)
2016-11-05 23:23:14 +01:00
Matthias Loibl
92f39da802 Merge pull request #85 from metalmatze/feature/goimports
Fix imports found by goimports.
2016-11-05 23:08:29 +01:00
Sandro Santilli
f36544f98d Merge branch 'master' into feature/goimports 2016-11-05 22:54:20 +01:00
Matthias Loibl
a0e54c0512 Merge pull request #84 from andreynering/gitea/fix-500-on-invalid-editorconfig
Refactor editorconfig middleware
2016-11-05 19:01:20 +01:00
Andrey Nering
bd898a10f8 Refactor editorconfig middleware 2016-11-05 15:44:14 -02:00
Matthias Loibl
953c099428 Add missing version & gogs package 2016-11-05 18:04:47 +01:00
Matthias Loibl
1f44b01e2a Fix imports found by goimports. 2016-11-05 17:56:35 +01:00
Matthias Loibl
91b589f2f0 Add myself to the MAINTAINERS (#82)
😊
2016-11-05 14:32:11 -02:00
Sandro Santilli
789dacdfbe Merge pull request #59 from andreynering/gitea/fix-500-on-invalid-editorconfig
Fix 500 when repo has invalid .editorconfig
2016-11-05 16:53:36 +01:00
Andrey Nering
984fa8d83b Fix 500 when repo has invalid .editorconfig
Creating a notice instead
2016-11-05 13:33:41 -02:00
Thomas Boerger
ab12596143 Merge pull request #79 from strk/Makefile-tabs
Use tabs in Makefiles
2016-11-05 16:13:33 +01:00
Sandro Santilli
6111e09a97 Drop indent-size from Makefile section 2016-11-05 13:26:11 +01:00
Sandro Santilli
c808e8c138 Use tabs in Makefiles 2016-11-05 12:55:27 +01:00
Thomas Boerger
b58b634e0e Merge pull request #69 from go-gitea/makefile
Refactoring of the makefile
2016-11-05 00:06:41 +01:00
Thomas Boerger
c524078d2b Extended gitignore 2016-11-04 23:46:11 +01:00
Thomas Boerger
b32776d533 Dropped outdated build scripts 2016-11-04 23:46:11 +01:00
Thomas Boerger
3dd14ee522 Fixed "net.UnixAddr composite literal uses unkeyed fields" 2016-11-04 23:45:47 +01:00
Thomas Boerger
ec054ba582 Totally refactored the makefile and adjusted travis config 2016-11-04 23:45:47 +01:00
Thomas Boerger
7a870080d6 Added a common golang gitignore 2016-11-04 23:45:06 +01:00
Thomas Boerger
eb25d1f252 Regenerated bindata 2016-11-04 23:45:06 +01:00
Thomas Boerger
5b5af7daee Made linter happy in cmd folder 2016-11-04 23:45:06 +01:00
Thomas Boerger
212a04a45e Linter doesn't like uppercase variables 2016-11-04 23:45:06 +01:00
Thomas Boerger
648c6fdd60 Vet complains about "should have signature MarshalJSON() ([]byte, error)", replaced with custom name 2016-11-04 23:45:06 +01:00
Thomas Boerger
f960b776f0 Simply made go vet happy, fixed tags 2016-11-04 23:45:06 +01:00
Thomas Boerger
e05a5ca36c Executed go fmt for all files 2016-11-04 23:45:06 +01:00
Thomas Boerger
ba4d255635 Merge pull request #33 from metalmatze/feature/main.go
Rename gogs.go to main.go with all references
2016-11-04 23:44:42 +01:00
Thomas Boerger
cda6baf02c Merge branch 'master' into feature/main.go 2016-11-04 23:24:55 +01:00
Thomas Boerger
a46efe240d Merge pull request #54 from joubertredrat/changes-less-css
Set default less and css to new default name
2016-11-04 23:24:45 +01:00
Flare
fd6be0d17e Still print error if user does not exist 2016-11-05 02:47:54 +08:00
Thomas Boerger
747f86aa23 Merge branch 'master' into changes-less-css 2016-11-04 19:23:32 +01:00
Thomas Boerger
03902bb53d Minor cleanups, look at the specific commits (#67)
* Dropped codebeat, we got go reportcard

* Dropped gopm file, we are using govendor

* Dropped chinese readme, this should be part of the docs

* Dropped bra config, not really used

* Dropped packager, we will provide our own packages
2016-11-04 14:27:33 -02:00
Thomas Boerger
6a20711afd Merge pull request #72 from go-gitea/maintainers
One more try to validate maintainers and contributors
2016-11-04 16:39:17 +01:00
Thomas Boerger
ccdbd8bf48 One more try to validate maintainers and contributors 2016-11-04 16:37:50 +01:00
Thomas Boerger
38c209e85b Merge pull request #71 from go-gitea/lgtm-fix
Use a correct format for CONTRIBUTORS and MAINTAINERS
2016-11-04 16:33:38 +01:00
Thomas Boerger
1aaa3a303d Use a correct format for CONTRIBUTORS and MAINTAINERS 2016-11-04 16:18:25 +01:00
Thomas Boerger
75ddcddd06 Merge branch 'master' into changes-less-css 2016-11-04 14:36:24 +01:00
Thomas Boerger
8e66e09cd8 Merge branch 'master' into feature/main.go 2016-11-04 14:35:45 +01:00
Thomas Boerger
4fdca026c7 Merge pull request #62 from lunny/master
Added CONTRIBUTING
2016-11-04 14:30:35 +01:00
Thomas Boerger
13c3edde05 Merge branch 'master' into master 2016-11-04 14:08:31 +01:00
Matthias Loibl
f01d927efb Rename all occurrences of gogs.go
Signed-off-by: Matthias Loibl <mail@matthiasloibl.com>
2016-11-04 13:49:10 +01:00
Matthias Loibl
a2514904cb Rename gogs.go to main.go
Signed-off-by: Matthias Loibl <mail@matthiasloibl.com>
2016-11-04 13:44:23 +01:00
Matthias Loibl
a4fa889ced Run goimports on the whole project (#34)
Signed-off-by: Matthias Loibl <mail@matthiasloibl.com>
2016-11-04 09:57:27 -02:00
Joubert RedRat
ff54e4d929 Set default less and css to new default name 2016-11-04 08:53:18 -02:00
Lunny Xiao
587d870f1e follow the advisor: add DCO and some improvements 2016-11-04 16:43:41 +08:00
Thomas Boerger
fc55182a4c Merge pull request #41 from DblK/feature-issueTrackerLink
Allow user to set an external tracker url and forward to it
2016-11-04 09:37:13 +01:00
Rémy Boulanouar
8dc49dc114 Implementation of the feature to redirect to an external issue tracker 2016-11-04 09:06:54 +01:00
Lunny Xiao
4a5faecd8f Merge pull request #58 from go-gitea/vendoring
Integrated dependency manager
2016-11-04 16:04:20 +08:00
Thomas Boerger
f8b4699a14 Dropped go get from travis config 2016-11-04 08:43:11 +01:00
Thomas Boerger
1ebb35b988 Added all required dependencies 2016-11-04 08:43:11 +01:00
Thomas Boerger
78f86abba4 Added vendoring config for govendor 2016-11-04 08:43:11 +01:00
Thomas Boerger
90402a6328 Dropped glide configs 2016-11-04 08:43:11 +01:00
Thomas Boerger
998e7452b8 Dropped vendoring from gitignore 2016-11-04 08:43:11 +01:00
Thibault Meyer
17f9ab4ff8 Use user fullname if resolved 2016-11-04 08:13:14 +01:00
Lunny Xiao
33df11e823 typo and contributing improved 2016-11-04 15:05:45 +08:00
Kim "BKC" Carlbäcker
5a8cb2dac1 Merge pull request #60 from andreynering/gitea/issue-pr-number-on-title
Show issue/PR number on title
2016-11-04 03:14:31 +01:00
Lunny Xiao
0d41394d6e diff the CONTRIBUTORS and MAINTAINERS 2016-11-04 09:54:57 +08:00
Lunny Xiao
55e804e078 Merge branch 'master' of https://github.com/go-gitea/gitea 2016-11-04 09:40:38 +08:00
Lunny Xiao
a90b25226a added CONTRIBUTING 2016-11-04 09:39:04 +08:00
Andrey Nering
87b593f93e Show issue/PR number on title 2016-11-03 20:28:05 -02:00
Sandro Santilli
137dcbf93d Merge pull request #47 from 0xbaadf00d/fix/3743-route-regexp-branchname
Fix SHA and compare regex on route file [Critical]
2016-11-03 17:51:33 +01:00
Lunny Xiao
1adde07a3f Merge branch 'master' into fix/3743-route-regexp-branchname 2016-11-04 00:11:08 +08:00
Thomas Boerger
42a744d9e6 Badges and travis testing (#40)
* Added badges to the README

* Restructured the travis config
2016-11-03 12:50:44 -02:00
Rémy Boulanouar
2d68bd1ef9 Change import reference to match gitea instead of gogs (#37) 2016-11-03 10:29:56 -02:00
Thibault Meyer
8ea63f8c50 Restore whitespace 2016-11-03 09:37:24 +01:00
Thibault Meyer
a79eb48de3 Fix SHA regexp and commit comparisons 2016-11-03 09:32:55 +01:00
Thomas Boerger
507ce134fa Merge pull request #5 from joubertredrat/title-ui-fix
Small UI fixes on full width form titles
2016-11-03 09:09:51 +01:00
Thomas Boerger
bc7e92a2b5 Merge branch 'develop' into title-ui-fix 2016-11-03 09:09:00 +01:00
Thomas Boerger
e4fe69365f Merge pull request #23 from lunny/develop
config lgtm to disable maintainer to LGTM himself's PR
2016-11-03 09:08:09 +01:00
Thomas Boerger
980282a06f Merge branch 'develop' into develop 2016-11-03 09:07:55 +01:00
Lunny Xiao
d8de2beb5b Merge pull request #2 from strk/proper-from-on-issue-mail
Fix sender of issue notifications
2016-11-03 16:06:27 +08:00
Lunny Xiao
060d10a4cb config lgtm to disable maintainer to LGTM himself's PR 2016-11-03 14:41:13 +08:00
Sandro Santilli
af03d00780 Fix sender of issue notifications
It is the FROM field in mailer configuration that needs be used,
not the USER field, which is for authentication.

Closes https://github.com/gogits/gogs/issues/3615
2016-11-02 21:00:54 +01:00
Thomas Boerger
5c54243014 Merge pull request #3 from strk/libravatar-proper-url
Use proper url for libravatar dep
2016-11-02 19:22:31 +01:00
Sandro Santilli
d59a48a255 Use proper url for libravatar dep 2016-11-02 18:18:04 +01:00
Joubert RedRat
f3321d920d Small UI fixes on full width form titles 2016-10-19 11:21:10 -02:00
Thibault Meyer
e54dec7ce5 missing space 2016-10-04 18:59:07 +02:00
Thibault Meyer
93f1eabe30 rename variable + fix wiki link 2016-10-04 18:58:14 +02:00
Flare
1b59e6f910 Fix 500 error caused by deleted users on issues (#3675) 2016-09-20 18:13:57 +08:00
Thibault Meyer
9d66497abc Can disable GIT interactions by HTTP protocol 2016-09-18 10:54:33 +02:00
1653 changed files with 821919 additions and 7355 deletions

View File

@@ -1,19 +0,0 @@
[run]
init_cmds = [
["make", "build-dev"],
["./gogs", "web"]
]
watch_all = true
watch_dirs = [
"$WORKDIR/cmd",
"$WORKDIR/models",
"$WORKDIR/modules",
"$WORKDIR/routers"
]
watch_exts = [".go"]
ignore_files = [".+_test.go"]
build_delay = 1500
cmds = [
["make", "build-dev"], # TAGS=sqlite cert pam tidb
["./gogs", "web"]
]

View File

@@ -1,7 +0,0 @@
conf/**
docker/**
modules/bindata/**
packager/**
public/**
scripts/**
templates/**

View File

@@ -1,7 +0,0 @@
{
"GOLANG": {
"TOTAL_LOC": [500, 999, 1999, 9999],
"TOO_MANY_FUNCTIONS": [50, 99, 199, 999],
"TOO_MANY_IVARS": [20, 50, 70, 99]
}
}

View File

@@ -1,19 +1,5 @@
.git
.git/**
packager
packager/**
scripts
scripts/**
.github/
.github/**
config.codekit
.dockerignore
*.yml
*.md
.bra.toml
.editorconfig
.gitignore
Dockerfile*
vendor
vendor/**
gogs
*
!docker
!bin
!public
!templates

114
.drone.yml Normal file
View File

@@ -0,0 +1,114 @@
workspace:
base: /srv/app
path: src/code.gitea.io/gitea
pipeline:
test:
image: webhippie/golang:edge
pull: true
environment:
CGO_ENABLED: 1
TAGS: cert sqlite pam miniwinsvc
commands:
- apk -U add linux-pam-dev openssh-client
- make clean
- make vet
- make lint
- make test
- make build
when:
event: [ push, tag, pull_request ]
test-mysql:
image: webhippie/golang:edge
pull: true
commands:
- make test-mysql
when:
event: [ push ]
test-pgsql:
image: webhippie/golang:edge
pull: true
commands:
- make test-pgsql
when:
event: [ push ]
coverage:
image: plugins/coverage
server: https://coverage.gitea.io
when:
event: [ push, tag, pull_request ]
updater:
image: karalabe/xgo-latest:latest
pull: true
commands:
- make publish
when:
event: [ push, tag ]
branch: [ master, refs/tags/* ]
docker:
image: plugins/docker
repo: gitea/gitea
tags: [ '${TAG}' ]
when:
event: [ tag ]
branch: [ refs/tags/* ]
docker:
image: plugins/docker
repo: gitea/gitea
tags: [ 'latest' ]
when:
event: [ push ]
branch: [ master ]
release:
image: plugins/s3
path_style: true
strip_prefix: dist/release/
source: dist/release/*
target: /gitea/master
when:
event: [ push ]
branch: [ master ]
release:
image: plugins/s3
path_style: true
strip_prefix: dist/release/
source: dist/release/*
target: /gitea/$$TAG
when:
event: [ tag ]
branch: [ refs/tags/* ]
github:
image: plugins/github-release
files:
- dist/release/*
when:
event: [ tag ]
branch: [ refs/tags/* ]
gitter:
image: plugins/gitter
services:
mysql:
image: mysql:5.7
environment:
- MYSQL_DATABASE=test
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
when:
event: [ push ]
pgsql:
image: postgres:9.5
environment:
- POSTGRES_DB=test
when:
event: [ push ]

1
.drone.yml.sig Normal file
View File

@@ -0,0 +1 @@
eyJhbGciOiJIUzI1NiJ9.d29ya3NwYWNlOgogIGJhc2U6IC9zcnYvYXBwCiAgcGF0aDogc3JjL2NvZGUuZ2l0ZWEuaW8vZ2l0ZWEKCnBpcGVsaW5lOgogIHRlc3Q6CiAgICBpbWFnZTogd2ViaGlwcGllL2dvbGFuZzplZGdlCiAgICBwdWxsOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgQ0dPX0VOQUJMRUQ6IDEKICAgICAgVEFHUzogY2VydCBzcWxpdGUgcGFtIG1pbml3aW5zdmMKICAgIGNvbW1hbmRzOgogICAgICAtIGFwayAtVSBhZGQgbGludXgtcGFtLWRldiBvcGVuc3NoLWNsaWVudAogICAgICAtIG1ha2UgY2xlYW4KICAgICAgLSBtYWtlIHZldAogICAgICAtIG1ha2UgbGludAogICAgICAtIG1ha2UgdGVzdAogICAgICAtIG1ha2UgYnVpbGQKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZywgcHVsbF9yZXF1ZXN0IF0KCiAgdGVzdC1teXNxbDoKICAgIGltYWdlOiB3ZWJoaXBwaWUvZ29sYW5nOmVkZ2UKICAgIHB1bGw6IHRydWUKICAgIGNvbW1hbmRzOgogICAgIC0gbWFrZSB0ZXN0LW15c3FsCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoIF0KCiAgdGVzdC1wZ3NxbDoKICAgIGltYWdlOiB3ZWJoaXBwaWUvZ29sYW5nOmVkZ2UKICAgIHB1bGw6IHRydWUKICAgIGNvbW1hbmRzOgogICAgIC0gbWFrZSB0ZXN0LXBnc3FsCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoIF0KCiAgY292ZXJhZ2U6CiAgICBpbWFnZTogcGx1Z2lucy9jb3ZlcmFnZQogICAgc2VydmVyOiBodHRwczovL2NvdmVyYWdlLmdpdGVhLmlvCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoLCB0YWcsIHB1bGxfcmVxdWVzdCBdCgogIHVwZGF0ZXI6CiAgICBpbWFnZToga2FyYWxhYmUveGdvLWxhdGVzdDpsYXRlc3QKICAgIHB1bGw6IHRydWUKICAgIGNvbW1hbmRzOgogICAgICAtIG1ha2UgcHVibGlzaAogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCwgdGFnIF0KICAgICAgYnJhbmNoOiBbIG1hc3RlciwgcmVmcy90YWdzLyogXQoKICBkb2NrZXI6CiAgICBpbWFnZTogcGx1Z2lucy9kb2NrZXIKICAgIHJlcG86IGdpdGVhL2dpdGVhCiAgICB0YWdzOiBbICcke1RBR30nIF0KICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHRhZyBdCiAgICAgIGJyYW5jaDogWyByZWZzL3RhZ3MvKiBdCgogIGRvY2tlcjoKICAgIGltYWdlOiBwbHVnaW5zL2RvY2tlcgogICAgcmVwbzogZ2l0ZWEvZ2l0ZWEKICAgIHRhZ3M6IFsgJ2xhdGVzdCcgXQogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCBdCiAgICAgIGJyYW5jaDogWyBtYXN0ZXIgXQoKICByZWxlYXNlOgogICAgaW1hZ2U6IHBsdWdpbnMvczMKICAgIHBhdGhfc3R5bGU6IHRydWUKICAgIHN0cmlwX3ByZWZpeDogZGlzdC9yZWxlYXNlLwogICAgc291cmNlOiBkaXN0L3JlbGVhc2UvKgogICAgdGFyZ2V0OiAvZ2l0ZWEvbWFzdGVyCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoIF0KICAgICAgYnJhbmNoOiBbIG1hc3RlciBdCgogIHJlbGVhc2U6CiAgICBpbWFnZTogcGx1Z2lucy9zMwogICAgcGF0aF9zdHlsZTogdHJ1ZQogICAgc3RyaXBfcHJlZml4OiBkaXN0L3JlbGVhc2UvCiAgICBzb3VyY2U6IGRpc3QvcmVsZWFzZS8qCiAgICB0YXJnZXQ6IC9naXRlYS8kJFRBRwogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgdGFnIF0KICAgICAgYnJhbmNoOiBbIHJlZnMvdGFncy8qIF0KCiAgZ2l0aHViOgogICAgaW1hZ2U6IHBsdWdpbnMvZ2l0aHViLXJlbGVhc2UKICAgIGZpbGVzOgogICAgICAtIGRpc3QvcmVsZWFzZS8qCiAgICB3aGVuOgogICAgICBldmVudDogWyB0YWcgXQogICAgICBicmFuY2g6IFsgcmVmcy90YWdzLyogXQoKICBnaXR0ZXI6CiAgICBpbWFnZTogcGx1Z2lucy9naXR0ZXIKCnNlcnZpY2VzOgogIG15c3FsOgogICAgaW1hZ2U6IG15c3FsOjUuNwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gTVlTUUxfREFUQUJBU0U9dGVzdAogICAgICAtIE1ZU1FMX0FMTE9XX0VNUFRZX1BBU1NXT1JEPXllcwogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCBdCgogIHBnc3FsOgogICAgaW1hZ2U6IHBvc3RncmVzOjkuNQogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gUE9TVEdSRVNfREI9dGVzdAogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCBdCg.fIX2wjyGG2j4vH7ZY2owmyND3XRjCTMgy3Vr3Q71eTE

View File

@@ -4,22 +4,24 @@ root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.go]
indent_style = tab
indent_size = 4
indent_size = 8
[*.tmpl]
[*.{tmpl,html}]
indent_style = tab
indent_size = 2
indent_size = 4
[*.{less,yml}]
indent_style = space
indent_size = 2
indent_size = 4
[*.js]
indent_style = space
indent_size = 4
[Makefile]
indent_style = tab

11
.gitattributes vendored
View File

@@ -1,11 +0,0 @@
public/conf/gitignore/* linguist-vendored
public/conf/license/* linguist-vendored
public/assets/* linguist-vendored
public/plugins/* linguist-vendored
public/plugins/* linguist-vendored
public/css/themes/* linguist-vendored
public/css/github.min.css linguist-vendored
public/css/semantic-2.2.1.min.css linguist-vendored
public/js/libs/* linguist-vendored
public/js/jquery-1.11.3.min.js linguist-vendored
public/js/semantic-2.2.1.min.js linguist-vendored

View File

@@ -1,63 +0,0 @@
# Contributing to Gogs
> This guidelines sheet is forked from [CONTRIBUTING.md](https://github.com/drone/drone/blob/8d9c7cee56d6c2eac81dc156ce27be6716d97e68/CONTRIBUTING.md).
Gogs is not perfect, and it has bugs or incomplete features in rare cases. You're welcome to tell us, or to contribute some code. This document describes details about how can you contribute to Gogs project.
## Contribution guidelines
Depends on the situation, you will:
- Find a bug and create an issue
- Need more functionality and make a feature request
- Want to contribute code and open a pull request
- Run into issue and need help
### Bug Report
If you find something you consider a bug, please create a issue on [GitHub](https://github.com/gogits/gogs/issues). To avoid wasting time and reduce back-and-forth communication with team members, please include at least the following information in a form comfortable for you:
- Bug Description
- Gogs Version
- Git Version
- System Type
- Error Log
- Other information
Please take a moment to check that an issue on [GitHub](https://github.com/gogits/gogs/issues) doesn't already exist documenting your bug report or improvement proposal. If it does, it never hurts to add a quick "+1" or "I have this problem too". This will help prioritize the most common problems and requests.
#### Bug Report Example
Gogs crashed when creating a repository with a license, using v0.5.13.0207, SQLite3, Git 1.9.0, Ubuntu 12.04.
Error log:
```
2014/09/01 07:21:49 [E] nil pointer
```
### Feature Request
There is no standard form of making a feature request. Just try to describe the feature as clearly as possible, because team members may not have experience with the functionality you're talking about.
### Pull Request
Please read detailed information on [Wiki](https://github.com/gogits/gogs/wiki/Contributing-Code).
### Ask For Help
Before opening an issue, please make sure your problem isn't already addressed on the [Troubleshooting](https://gogs.io/docs/intro/troubleshooting.html) and [FAQs](https://gogs.io/docs/intro/faqs.html) pages.
## Code of conduct
As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, age, or religion.
Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team.
Instances of abusive, harassing, or otherwise unacceptable behavior can be reported by emailing u@gogs.io
This Code of Conduct is adapted from the [Contributor Covenant](http:contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)

View File

@@ -1,25 +0,0 @@
The issue will be closed without any reasons if it does not satisfy any of following requirements:
1. Please speak English, we have forum in [Chinese](https://discuss.gogs.io/c/getting-help/getting-help-chinese).
2. Please post questions or config/deploy problems on our forum: https://discuss.gogs.io, here are bugs and feature requests only.
3. Please take a moment to search that an issue doesn't already exist.
4. Please give all relevant information below for bug reports; incomplete details considered invalid report.
**You MUST delete above content including this line before posting; too lazy to take this action considered invalid report.**
- Gogs version (or commit ref):
- Git version:
- Operating system:
- Database (use `[x]`):
- [ ] PostgreSQL
- [ ] MySQL
- [ ] SQLite
- Can you reproduce the bug at https://try.gogs.io:
- [ ] Yes (provide example URL)
- [ ] No
- [ ] Not relevant
- Log gist:
## Description
...

View File

@@ -1,9 +0,0 @@
The pull request will be closed without any reasons if it does not satisfy any of following requirements:
1. Please make sure you are targeting the `develop` branch.
2. Please read contributing guidelines:
https://github.com/gogits/gogs/wiki/Contributing-Code
3. Please describe what your pull request does and which issue you're targeting
4. ... if it is not related to any particular issues, explain why we should not reject your pull request.
**You MUST delete above content including this line before posting; too lazy to take this action considered invalid pull request.**

19
.github/issue_template.md vendored Normal file
View File

@@ -0,0 +1,19 @@
1. Please speak English, this is the language everybody of us can speak and write.
2. Please ask questions or config/deploy problems on our Gitter channel: https://gitter.im/go-gitea/gitea
3. Please take a moment to search that an issue doesn't already exist.
4. Please give all relevant information below for bug reports, incomplete details will be handled as an invalid report.
**You MUST delete the content above including this line before posting, otherwise your pull request will be invalid.**
- Gitea version (or commit ref):
- Git version:
- Operating system:
- Database (use `[x]`):
- [ ] PostgreSQL
- [ ] MySQL
- [ ] SQLite
- Log gist:
## Description
...

7
.github/pull_request_template.md vendored Normal file
View File

@@ -0,0 +1,7 @@
Please check the following:
1. Make sure you are targeting the `master` branch, pull requests on release branches are only allowed for bug fixes.
2. Read contributing guidelines: https://github.com/go-gitea/gitea/blob/master/CONTRIBUTING.md
3. Describe what your pull request does and which issue you're targeting (if any)
**You MUST delete the content above including this line before posting, otherwise your pull request will be invalid.**

60
.gitignore vendored
View File

@@ -1,20 +1,44 @@
.DS_Store
# Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so
# Folders
_obj
_test
# IntelliJ
.idea
# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out
*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*
_testmain.go
*.exe
*.test
*.prof
coverage.out
/modules/public/bindata.go
/modules/templates/bindata.go
*.db
*.log
log/
custom/
data/
.vendor/
.idea/
*.iml
public/img/avatar/
*.exe
*.exe~
/gogs
profile/
*.pem
output*
gogs.sublime-project
gogs.sublime-workspace
/release
vendor
/gitea
/bin
/dist
/custom
/data
/log
/public/img/avatar

View File

@@ -1,59 +0,0 @@
[target]
path = github.com/gogits/gogs
[deps]
github.com/bradfitz/gomemcache = commit:fb1f79c
github.com/urfave/cli = commit:1efa31f
github.com/go-macaron/binding = commit:9440f33
github.com/go-macaron/cache = commit:5617353
github.com/go-macaron/captcha = commit:8aa5919
github.com/go-macaron/csrf = commit:6a9a7df
github.com/go-macaron/gzip = commit:cad1c65
github.com/go-macaron/i18n = commit:ef57533
github.com/go-macaron/inject = commit:c5ab7bf
github.com/go-macaron/session = commit:66031fc
github.com/go-macaron/toolbox = commit:82b5115
github.com/go-sql-driver/mysql = commit:0b58b37
github.com/go-xorm/core = commit:5bf745d
github.com/go-xorm/xorm = commit:c6c7056
github.com/gogits/chardet = commit:2404f77
github.com/gogits/cron = commit:7f3990a
github.com/gogits/git-module = commit:5e0c133
github.com/gogits/go-gogs-client = commit:c52f7ee
github.com/issue9/identicon = commit:d36b545
github.com/jaytaylor/html2text = commit:52d9b78
github.com/kardianos/minwinsvc = commit:cad6b2b
github.com/klauspost/compress = commit:14eb9c4
github.com/klauspost/cpuid = commit:09cded8
github.com/klauspost/crc32 = commit:19b0b33
github.com/lib/pq = commit:80f8150
github.com/mattn/go-sqlite3 = commit:e118d44
github.com/mcuadros/go-version = commit:d52711f
github.com/microcosm-cc/bluemonday = commit:9dc1992
github.com/msteinert/pam = commit:02ccfbf
github.com/nfnt/resize = commit:891127d
github.com/russross/blackfriday = commit:93622da
github.com/satori/go.uuid = commit:0aa62d5
github.com/sergi/go-diff = commit:ec7fdbb
github.com/strk/go-libravatar = commit:5eed7bf
github.com/shurcooL/sanitized_anchor_name = commit:10ef21a
github.com/Unknwon/cae = commit:7f5e046
github.com/Unknwon/com = commit:28b053d
github.com/Unknwon/i18n = commit:39d6f27
github.com/Unknwon/paginater = commit:7748a72
golang.org/x/crypto = commit:bc89c49
golang.org/x/net = commit:57bfaa8
golang.org/x/sys = commit:a646d33
golang.org/x/text = commit:2910a50
gopkg.in/alexcesaro/quotedprintable.v3 = commit:2caba25
gopkg.in/asn1-ber.v1 = commit:4e86f43
gopkg.in/bufio.v1 = commit:567b2bf
gopkg.in/editorconfig/editorconfig-core-go.v1 = commit:a872f05
gopkg.in/gomail.v2 = commit:81ebce5
gopkg.in/ini.v1 = commit:cf53f92
gopkg.in/ldap.v2 = commit:d0a5ced
gopkg.in/macaron.v1 = commit:7564489
gopkg.in/redis.v2 = commit:e617904
[res]
include = public|scripts|templates

2
.lgtm Normal file
View File

@@ -0,0 +1,2 @@
self_approval_off = false
ignore_maintainers_file = true

View File

@@ -1,2 +0,0 @@
Unknwon <u@gogs.io> <joe2010xtmf@163.com>
Unknwon <u@gogs.io> 无闻 <u@gogs.io>

View File

@@ -1,27 +0,0 @@
targets:
debian-7: &debian
build_dependencies:
- libpam0g-dev
dependencies:
- libpam0g
- git
debian-8:
<<: *debian
ubuntu-14.04:
<<: *debian
ubuntu-12.04:
<<: *debian
centos-6: &el
build_dependencies:
- pam-devel
dependencies:
- pam
- git
centos-7:
<<: *el
before:
- mv packager/Procfile .
- mv packager/.godir .
after:
- mv bin/main gogs
after_install: ./packager/hooks/postinst

View File

@@ -1,30 +0,0 @@
language: go
go:
- 1.4
- 1.5
- 1.6
- 1.7
before_install:
- sudo apt-get update -qq
- sudo apt-get install -y libpam-dev
- go get github.com/msteinert/pam
install:
- go get -t -v ./...
script:
- go build -v -tags "pam"
- go test -v -cover -race ./...
notifications:
email:
- u@gogs.io
slack: gophercn:o5pSanyTeNhnfYc3QnG0X7Wx
webhooks:
urls:
- https://webhooks.gitter.im/e/b590f8e03882f7aedc3e
on_success: change
on_failure: always
on_start: never

86
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,86 @@
# Contribution Guidelines
## Introduction
This document explains how to contribute changes to the Gitea project. It assumes you have followed the [installation instructions](https://github.com/go-gitea/docs/tree/master/en-US/installation). Sensitive security-related issues should be reported to [security@gitea.io](mailto:security@gitea.io).
## Bug reports
Please search the issues on the issue tracker with a variety of keywords to ensure your bug is not already reported.
If unique, [open an issue](https://github.com/go-gitea/gitea/issues/new) and answer the questions so we can understand and reproduce the problematic behavior.
The burden is on you to convince us that it is actually a bug in Gitea. This is easiest to do when you write clear, concise instructions so we can reproduce the behavior (even if it seems obvious). The more detailed and specific you are, the faster we will be able to help you. Check out [How to Report Bugs Effectively](http://www.chiark.greenend.org.uk/~sgtatham/bugs.html).
Please be kind, remember that Gitea comes at no cost to you, and you're getting free help.
## Discuss your design
The project welcomes submissions but please let everyone know what you're working on if you want to change or add something to the Gitea repositories.
Before starting to write something new for the Gitea project, please [file an issue](https://github.com/go-gitea/gitea/issues/new). Significant changes must go through the [change proposal process](https://github.com/go-gitea/proposals) before they can be accepted.
This process gives everyone a chance to validate the design, helps prevent duplication of effort, and ensures that the idea fits inside the goals for the project and tools. It also checks that the design is sound before code is written; the code review tool is not the place for high-level discussions.
## Testing redux
Before sending code out for review, run all the tests for the whole tree to make sure the changes don't break other usage and keep the compatibility on upgrade. To make sure you are running the test suite exactly like we do you should install the CLI for [Drone CI](https://github.com/drone/drone) as we are using the server for continous testing, follow [these instructions](http://readme.drone.io/0.5/install/cli/). After that you can simply call `drone exec` within you working directory and it will try to run the test suite locally.
## Code review
Changes to Gitea must be reviewed before they are accepted, no matter who makes the change even if an owner or a maintainer. We use GitHub's pull request workflow to do that and we also use [LGTM](http://lgtm.co) to ensure every PR is reviewed by at least 2 maintainers.
Please try to make your pull request easy to review for us. Please read the "[How to get faster PR reviews](https://github.com/kubernetes/kubernetes/blob/master/docs/devel/faster_reviews.md)" guide, it got useful tips for any project you may want to contribute. See some of the points:
* Make small pull requests. The smaller, the faster to review and the more likely it will be merged soon.
* Don't make changes unrelated to your PR. Maybe there are typos on some comments, maybe refactoring would welcome on a function... but if that is not related to you PR, please make *another* PR for that.
* Split big pull requests in multiple. An incremental change will be faster to review than a huge PR.
## Sign your work
The sign-off is a simple line at the end of the explanation for the patch. Your signature certifies that you wrote the patch or otherwise have the right to pass it on as an open-source patch. The rules are pretty simple: If you can certify [DCO](DCO), then you just add a line to every git commit message:
```
Signed-off-by: Joe Smith <joe.smith@email.com>
```
Please use your real name, we really dislike pseudonyms or anonymous contributions. We are in the opensource world without secrets. If you set your `user.name` and `user.email` git configs, you can sign your commit automatically with `git commit -s`.
## Maintainers
To make sure every PR have been checked, we got team maintainers. Any PR MUST be reviewed and by at least two maintainers before it can get merged. Maintainers should be a contributor of Gitea (or Gogs) and contributed at least 4 accepted PRs. A contributor should apply as a maintainer in [Gitter development channel](https://gitter.im/go-gitea/develop). The owners or the team maintainers could invite the contributor. A maintainer should spend some time on code reviews. If some maintainer have no time to do that, he should apply to leave the maintainers team and we will give him an honor to be as a member of advisor team. Of course, if an advisor have time to code view, welcome it back to maintainers team. If someone have no time to code review and forget to leave the maintainers team, the owners have the power to move him from maintainers team to advisors team.
## Owners
Since Gitea is a pure community organization without any company support, to keep the development healthly we will elect the owners every year. Every time we will elect three owners. All the contributers could vote for three owners, one is the main owner, the other two are assistant owners. When the new owners have been elected, the old owners MUST move the power to the new owners. If some owner don't obey these rules, the other owners are allowed to revoke his owner status.
After the election, the new owners should say he agrees with these rules on the [CONTRIBUTING](CONTRIBUTING.md) on the [Gitter main channel](https://gitter.im/go-gitea/gitea). Below are the words to speak:
```
I'm glad to be an owner of Gitea, I agree with [CONTRIBUTING](CONTRIBUTING.md). I will spend part of my time on Gitea and lead the development of Gitea.
```
For a honor to the owners, this document will add the history owners below:
* 2016-11-04 ~ 2017-12-31
* [Lunny Xiao](https://github.com/lunny) <xiaolunwen@gmail.com>
* [Thomas Boerger](https://github.com/tboerger) <thomas@webhippie.de>
* [Kim Carlbäcker](https://github.com/bkcsoft) <kim.carlbacker@gmail.com>
## Versions
Gitea has one master as a tip branch and have version branches such as `v0.9`. `v0.9` is a release branch and we will tag `v0.9.0` for binary download. If `v0.9.0` got some bug, we will accept pull requests on the `v0.9` branch and publish a `v0.9.1` tag, afterwards we will port the bug fix also to the master branch.
The `master` branch is a tip version, so if you wish a production usage, please download the latest release tag version. All the branches will be protected via github, all the PRs to all the branches should be review by two maintainers and pass the automatic tests.
## Copyright
Code that you contribute should use the standard copyright header:
```
// Copyright 2016 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.
```
Files in the repository are copyright the year they are added and the year they are last changed. If the copyright author is changed, just copy the head below the old one.

36
DCO Normal file
View File

@@ -0,0 +1,36 @@
Developer Certificate of Origin
Version 1.1
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
660 York Street, Suite 102,
San Francisco, CA 94110 USA
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.

View File

@@ -1,22 +1,44 @@
FROM alpine:3.3
MAINTAINER jp@roemer.im
FROM alpine:3.4
MAINTAINER Thomas Boerger <thomas@webhippie.de>
# Install system utils & Gogs runtime dependencies
ADD https://github.com/tianon/gosu/releases/download/1.9/gosu-amd64 /usr/sbin/gosu
RUN chmod +x /usr/sbin/gosu \
&& apk --no-cache --no-progress add ca-certificates bash git linux-pam s6 curl openssh socat tzdata
ENV GOGS_CUSTOM /data/gogs
COPY . /app/gogs/
WORKDIR /app/gogs/
RUN ./docker/build.sh
# Configure LibC Name Service
COPY docker/nsswitch.conf /etc/nsswitch.conf
# Configure Docker Container
VOLUME ["/data"]
EXPOSE 22 3000
ENTRYPOINT ["docker/start.sh"]
CMD ["/bin/s6-svscan", "/app/gogs/docker/s6/"]
RUN apk update && \
apk add \
su-exec \
ca-certificates \
sqlite \
bash \
git \
linux-pam \
s6 \
curl \
openssh \
tzdata && \
rm -rf \
/var/cache/apk/* && \
addgroup \
-S -g 1000 \
git && \
adduser \
-S -H -D \
-h /data/git \
-s /bin/bash \
-u 1000 \
-G git \
git
ENV USER git
ENV GITEA_CUSTOM /data/gitea
ENV GODEBUG=netdns=go
VOLUME ["/data"]
ENTRYPOINT ["/usr/bin/entrypoint"]
CMD ["/bin/s6-svscan", "/etc/s6"]
COPY docker /
COPY public /app/gitea/public
COPY templates /app/gitea/templates
COPY bin/gitea /app/gitea/gitea

View File

@@ -1,25 +1,44 @@
FROM hypriot/rpi-alpine-scratch:v3.2
MAINTAINER jp@roemer.im, raxetul@gmail.com
FROM hypriot/rpi-alpine-scratch:v3.4
MAINTAINER Thomas Boerger <thomas@webhippie.de>
# Install system utils & Gogs runtime dependencies
ADD https://github.com/tianon/gosu/releases/download/1.9/gosu-armhf /usr/sbin/gosu
RUN chmod +x /usr/sbin/gosu \
&& echo "http://dl-4.alpinelinux.org/alpine/v3.3/main/" | tee /etc/apk/repositories \
&& echo "http://dl-4.alpinelinux.org/alpine/v3.3/community/" | tee -a /etc/apk/repositories \
&& apk -U --no-progress upgrade && rm -f /var/cache/apk/APKINDEX.* \
&& apk --no-cache --no-progress add ca-certificates bash git linux-pam s6 curl openssh socat tzdata
ENV GOGS_CUSTOM /data/gogs
COPY . /app/gogs/
WORKDIR /app/gogs/
RUN ./docker/build.sh
# Configure LibC Name Service
COPY docker/nsswitch.conf /etc/nsswitch.conf
# Configure Docker Container
VOLUME ["/data"]
EXPOSE 22 3000
ENTRYPOINT ["docker/start.sh"]
CMD ["/bin/s6-svscan", "/app/gogs/docker/s6/"]
RUN apk update && \
apk add \
su-exec \
ca-certificates \
sqlite \
bash \
git \
linux-pam \
s6 \
curl \
openssh \
tzdata && \
rm -rf \
/var/cache/apk/* && \
addgroup \
-S -g 1000 \
git && \
adduser \
-S -H -D \
-h /data/git \
-s /bin/bash \
-u 1000 \
-G git \
git
ENV USER git
ENV GITEA_CUSTOM /data/gitea
ENV GODEBUG=netdns=go
VOLUME ["/data"]
ENTRYPOINT ["/usr/bin/entrypoint"]
CMD ["/bin/s6-svscan", "/etc/s6"]
COPY docker /
COPY public /app/gitea/public
COPY templates /app/gitea/templates
COPY bin/gitea /app/gitea/gitea

View File

@@ -1,4 +1,5 @@
Copyright (c) The Gogs Authors
Copyright (c) 2016 The Gitea Authors
Copyright (c) 2015 The Gogs Authors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -16,4 +17,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
THE SOFTWARE.

12
MAINTAINERS Normal file
View File

@@ -0,0 +1,12 @@
Alexey Makhov <amakhov@avito.ru> (@makhov)
Andrey Nering <andrey.nering@gmail.com> (@andreynering)
Bwko <bouwko@gmail.com> (@Bwko)
Kim Carlbäcker <kim.carlbacker@gmail.com> (@bkcsoft)
LefsFlare <nobody@nobody.tld> (@LefsFlarey)
Lunny Xiao <xiaolunwen@gmail.com> (@lunny)
Matthias Loibl <mail@matthiasloibl.com> (@metalmatze)
Rachid Zarouali <nobody@nobody.tld> (@xinity)
Rémy Boulanouar <admin@dblk.org> (@DblK)
Sandro Santilli <strk@kbt.io> (@strk)
Thibault Meyer <meyer.thibault@gmail.com> (@0xbaadf00d)
Thomas Boerger <thomas@webhippie.de> (@tboerger)

200
Makefile
View File

@@ -1,74 +1,156 @@
LDFLAGS += -X "github.com/gogits/gogs/modules/setting.BuildTime=$(shell date -u '+%Y-%m-%d %I:%M:%S %Z')"
LDFLAGS += -X "github.com/gogits/gogs/modules/setting.BuildGitHash=$(shell git rev-parse HEAD)"
DIST := dist
BIN := bin
DATA_FILES := $(shell find conf | sed 's/ /\\ /g')
LESS_FILES := $(wildcard public/less/gogs.less public/less/_*.less)
GENERATED := modules/bindata/bindata.go public/css/gogs.css
EXECUTABLE := gitea
IMPORT := code.gitea.io/gitea
TAGS = ""
BUILD_FLAGS = "-v"
SHA := $(shell git rev-parse --short HEAD)
DATE := $(shell date -u '+%Y-%m-%d %I:%M:%S %Z')
RELEASE_ROOT = "release"
RELEASE_GOGS = "release/gogs"
NOW = $(shell date -u '+%Y%m%d%I%M%S')
GOVET = go tool vet -composites=false -methods=false -structtags=false
BINDATA := $(shell find conf | sed 's/ /\\ /g')
STYLESHEETS := $(wildcard public/less/index.less public/less/_*.less)
JAVASCRIPTS :=
.PHONY: build pack release bindata clean
LDFLAGS += -X "code.gitea.io/gitea/modules/setting.BuildTime=$(DATE)"
LDFLAGS += -X "code.gitea.io/gitea/modules/setting.BuildGitHash=$(SHA)"
.IGNORE: public/css/gogs.css
TARGETS ?= linux/*,darwin/*,windows/*
PACKAGES ?= $(shell go list ./... | grep -v /vendor/)
TAGS ?=
ifneq ($(DRONE_TAG),)
VERSION ?= $(DRONE_TAG)
else
ifneq ($(DRONE_BRANCH),)
VERSION ?= $(DRONE_BRANCH)
else
VERSION ?= master
endif
endif
.PHONY: all
all: build
check: test
dist: release
govet:
$(GOVET) gogs.go
$(GOVET) models modules routers
build: $(GENERATED)
go install $(BUILD_FLAGS) -ldflags '$(LDFLAGS)' -tags '$(TAGS)'
cp '$(GOPATH)/bin/gogs' .
build-dev: $(GENERATED) govet
go install $(BUILD_FLAGS) -tags '$(TAGS)'
cp '$(GOPATH)/bin/gogs' .
build-dev-race: $(GENERATED) govet
go install $(BUILD_FLAGS) -race -tags '$(TAGS)'
cp '$(GOPATH)/bin/gogs' .
pack:
rm -rf $(RELEASE_GOGS)
mkdir -p $(RELEASE_GOGS)
cp -r gogs LICENSE README.md README_ZH.md templates public scripts $(RELEASE_GOGS)
rm -rf $(RELEASE_GOGS)/public/config.codekit $(RELEASE_GOGS)/public/less
cd $(RELEASE_ROOT) && zip -r gogs.$(NOW).zip "gogs"
release: build pack
bindata: modules/bindata/bindata.go
modules/bindata/bindata.go: $(DATA_FILES)
go-bindata -o=$@ -ignore="\\.DS_Store|README.md|TRANSLATORS" -pkg=bindata conf/...
less: public/css/gogs.css
public/css/gogs.css: $(LESS_FILES)
lessc $< $@
.PHONY: clean
clean:
go clean -i ./...
rm -rf $(BIN) $(DIST)
clean-mac: clean
find . -name ".DS_Store" -print0 | xargs -0 rm
.PHONY: fmt
fmt:
go fmt $(PACKAGES)
.PHONY: vet
vet:
go vet $(PACKAGES)
.PHONY: generate
generate:
@which go-bindata > /dev/null; if [ $$? -ne 0 ]; then \
go get -u github.com/jteeuwen/go-bindata/...; \
fi
go generate $(PACKAGES)
.PHONY: errcheck
errcheck:
@which errcheck > /dev/null; if [ $$? -ne 0 ]; then \
go get -u github.com/kisielk/errcheck; \
fi
errcheck $(PACKAGES)
.PHONY: lint
lint:
@which golint > /dev/null; if [ $$? -ne 0 ]; then \
go get -u github.com/golang/lint/golint; \
fi
for PKG in $(PACKAGES); do golint -set_exit_status $$PKG || exit 1; done;
.PHONY: test
test:
go test -cover -race ./...
for PKG in $(PACKAGES); do go test -cover -coverprofile $$GOPATH/src/$$PKG/coverage.out $$PKG || exit 1; done;
fixme:
grep -rnw "FIXME" routers models modules
.PHONY: test-mysql
test-mysql:
@echo "Not integrated yet!"
todo:
grep -rnw "TODO" routers models modules
.PHONY: test-pgsql
test-pgsql:
@echo "Not integrated yet!"
.PHONY: check
check: test
.PHONY: install
install: $(wildcard *.go)
go install -v -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)'
.PHONY: build
build: $(BIN)/$(EXECUTABLE)
$(BIN)/$(EXECUTABLE): $(wildcard *.go)
go build -v -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' -o $@
.PHONY: release
release: release-build release-copy release-check
.PHONY: release-build
release-build:
@which xgo > /dev/null; if [ $$? -ne 0 ]; then \
go get -u github.com/karalabe/xgo; \
fi
xgo -dest $(BIN) -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' -targets '$(TARGETS)' -out $(EXECUTABLE)-$(VERSION) $(IMPORT)
.PHONY: release-copy
release-copy:
mkdir -p $(DIST)/release
$(foreach file,$(wildcard $(BIN)/$(EXECUTABLE)-*),cp $(file) $(DIST)/release/$(notdir $(file));)
.PHONY: release-check
release-check:
cd $(DIST)/release; $(foreach file,$(wildcard $(DIST)/release/$(EXECUTABLE)-*),sha256sum $(notdir $(file)) > $(notdir $(file)).sha256;)
.PHONY: latest
latest: release-build latest-copy latest-check
.PHONY: latest-copy
latest-copy:
mkdir -p $(DIST)/latest
$(foreach file,$(wildcard $(BIN)/$(EXECUTABLE)-*),cp $(file) $(DIST)/latest/$(subst $(EXECUTABLE)-$(VERSION),$(EXECUTABLE)-latest,$(notdir $(file)));)
.PHONY: latest-check
latest-check:
cd $(DIST)/latest; $(foreach file,$(wildcard $(DIST)/latest/$(EXECUTABLE)-*),sha256sum $(notdir $(file)) > $(notdir $(file)).sha256;)
.PHONY: publish
publish: release latest
.PHONY: bindata
bindata: modules/bindata/bindata.go
.IGNORE: modules/bindata/bindata.go
modules/bindata/bindata.go: $(BINDATA)
@which go-bindata > /dev/null; if [ $$? -ne 0 ]; then \
go get -u github.com/jteeuwen/go-bindata/...; \
fi
go-bindata -o=$@ -ignore="\\.go|README.md|TRANSLATORS" -pkg=bindata conf/...
go fmt $@
sed -i.bak 's/confLocaleLocale_/confLocaleLocale/' $@
rm $@.bak
.PHONY: javascripts
javascripts: public/js/index.js
.IGNORE: public/js/index.js
public/js/index.js: $(JAVASCRIPTS)
cat $< >| $@
.PHONY: stylesheets
stylesheets: public/css/index.css
.IGNORE: public/css/index.css
public/css/index.css: $(STYLESHEETS)
lessc $< $@
.PHONY: assets
assets: bindata javascripts stylesheets

View File

@@ -1,9 +1,17 @@
Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?branch=master)](https://travis-ci.org/gogits/gogs) [![Crowdin](https://d322cqt584bo4o.cloudfront.net/gogs/localized.svg)](https://crowdin.com/project/gogs) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/gogits/gogs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
=====================
# Gitea - Git with a cup of tea
![](https://github.com/gogits/gogs/blob/master/public/img/gogs-large-resize.png?raw=true)
[![Build Status](http://drone.gitea.io/api/badges/go-gitea/gitea/status.svg)](http://drone.gitea.io/go-gitea/gitea)
[![Join the chat at https://gitter.im/go-gitea/gitea](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/go-gitea/gitea?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![](https://images.microbadger.com/badges/image/gitea/gitea.svg)](http://microbadger.com/images/gitea/gitea "Get your own image badge on microbadger.com")
[![Coverage Status](https://coverage.gitea.io/badges/go-gitea/gitea/coverage.svg)](https://coverage.gitea.io/go-gitea/gitea)
[![Go Report Card](https://goreportcard.com/badge/code.gitea.io/gitea)](https://goreportcard.com/report/code.gitea.io/gitea)
[![GoDoc](https://godoc.org/code.gitea.io/gitea?status.svg)](https://godoc.org/code.gitea.io/gitea)
##### Current tip version: 0.9.99 (see [Releases](https://github.com/gogits/gogs/releases) for binary versions or submit a task on [alpha stage automated binary building system](https://build.gogs.io/))
[![](public/img/gitea-large-resize.png)](https://github.com/go-gitea/gitea)
##### Status
**Current version**: (see [Releases](https://github.com/go-gitea/gitea/releases))
| Web | UI | Preview |
|:-------------:|:-------:|:-------:|
@@ -13,27 +21,14 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?bra
### Important Notes
1. **YOU MUST READ [Contributing Code](https://github.com/gogits/gogs/wiki/Contributing-Code) BEFORE STARTING TO WORK ON A PULL REQUEST**.
2. Due to testing purpose, data of [try.gogs.io](https://try.gogs.io) was reset in **Jan 28, 2015** and will reset multiple times after. Please do **NOT** put your important data on the site.
3. The demo site [try.gogs.io](https://try.gogs.io) is running under `develop` branch.
4. If you think there are vulnerabilities in the project, please talk privately to **u@gogs.io**. Thanks!
5. If you're interested in using APIs, we have experimental support with [documentation](https://github.com/gogits/go-gogs-client/wiki).
6. If your team/company is using Gogs and would like to put your logo on [our website](https://gogs.io), contact us by any means.
[简体中文](README_ZH.md)
1. **YOU MUST READ THE [Contributors Guide](CONTRIBUTING.md) BEFORE STARTING TO WORK ON A PULL REQUEST**.
2. If you think there are vulnerabilities in the project, please talk privately to **security@gitea.io**. Thanks!
3. If you're interested in using APIs, we have experimental support with [documentation](https://godoc.org/github.com/go-gitea/go-sdk).
## Purpose
The goal of this project is to make the easiest, fastest, and most painless way of setting up a self-hosted Git service. With Go, this can be done with an independent binary distribution across **ALL platforms** that Go supports, including Linux, Mac OS X, Windows and ARM.
## Overview
- Please see the [Documentation](https://gogs.io/docs/intro) for common usages and change log.
- See the [Trello Board](https://trello.com/b/uxAoeLUl/gogs-go-git-service) to follow the develop team.
- Want to try it before doing anything else? Do it [online](https://try.gogs.io/gogs/gogs)!
- Having trouble? Get help with [Troubleshooting](https://gogs.io/docs/intro/troubleshooting.html) or [User Forum](https://discuss.gogs.io/).
- Want to help with localization? Check out the [guide](https://gogs.io/docs/features/i18n.html)!
## Features
- Activity timeline
@@ -51,7 +46,7 @@ The goal of this project is to make the easiest, fastest, and most painless way
- Mail service
- Administration panel
- Supports MySQL, PostgreSQL, SQLite3 and [TiDB](https://github.com/pingcap/tidb) (experimental)
- Multi-language support ([19 languages](https://crowdin.com/project/gogs))
- Multi-language support ([20 languages](https://crowdin.com/project/gogs))
## System Requirements
@@ -65,15 +60,15 @@ The goal of this project is to make the easiest, fastest, and most painless way
## Installation
Make sure you install the [prerequisites](https://gogs.io/docs/installation) first.
**Note: As Gitea is a [Gogs](https://github.com/gogits/gogs) fork, tutorials and documentation related to gogs applies to Gitea too**
There are 5 ways to install Gogs:
How to install Gitea:
- [Install from binary](https://gogs.io/docs/installation/install_from_binary.html)
- [Install from source](https://gogs.io/docs/installation/install_from_source.html)
- [Install from packages](https://gogs.io/docs/installation/install_from_packages.html)
- [Ship with Docker](https://github.com/gogits/gogs/tree/master/docker)
- [Install with Vagrant](https://github.com/geerlingguy/ansible-vagrant-examples/tree/master/gogs)
- go get code.gitea.io/gitea
- [Ship with Docker](https://github.com/go-gitea/gitea/tree/master/docker)
- [Install with Vagrant](https://github.com/go-gitea/examples/tree/master/vagrant)
**Note: binary release will be available soon**
### Tutorials
@@ -127,12 +122,17 @@ There are 5 ways to install Gogs:
- Thanks [DigitalOcean](https://www.digitalocean.com) for hosting home and demo sites.
- Thanks [KeyCDN](https://www.keycdn.com/) and [QiNiu](http://www.qiniu.com/) for providing CDN service.
## Contributors
- Ex-team members [@lunny](https://github.com/lunny), [@fuxiaohei](https://github.com/fuxiaohei) and [@slene](https://github.com/slene).
- See [contributors page](https://github.com/gogits/gogs/graphs/contributors) for full list of contributors.
- See [TRANSLATORS](conf/locale/TRANSLATORS) for public list of translators.
## Contributing
Fork -> Patch -> Push -> Pull Request
## Authors
* [Maintainers](https://github.com/orgs/go-gitea/people)
* [Contributors](https://github.com/go-gitea/gitea/graphs/contributors)
* [Translators](conf/locale/TRANSLATORS)
## License
This project is under the MIT License. See the [LICENSE](https://github.com/gogits/gogs/blob/master/LICENSE) file for the full license text.
This project is under the MIT License. See the [LICENSE](https://github.com/go-gitea/gitea/blob/master/LICENSE) file for the full license text.

View File

@@ -1,107 +0,0 @@
Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?branch=master)](https://travis-ci.org/gogits/gogs)
=====================
Gogs (Go Git Service) 是一款极易搭建的自助 Git 服务。
## 开发目的
Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 **所有平台**,包括 Linux、Mac OS X、Windows 以及 ARM 平台。
## 项目概览
- 有关基本用法和变更日志,请通过 [使用手册](https://gogs.io/docs/intro/) 查看。
- 您可以到 [Trello Board](https://trello.com/b/uxAoeLUl/gogs-go-git-service) 跟随开发团队的脚步。
- 想要先睹为快?直接去 [在线体验](https://try.gogs.io/gogs/gogs) 。
- 使用过程中遇到问题?尝试从 [故障排查](https://gogs.io/docs/intro/troubleshooting.html) 页面或 [用户论坛](https://discuss.gogs.io/) 获取帮助。
- 希望帮助多国语言界面的翻译吗?请立即访问 [详情页面](https://gogs.io/docs/features/i18n.html)
## 功能特性
- 支持活动时间线
- 支持 SSH 以及 HTTP/HTTPS 协议
- 支持 SMTP、LDAP 和反向代理的用户认证
- 支持反向代理子路径
- 支持用户、组织和仓库管理系统
- 支持添加和删除仓库协作者
- 支持仓库和组织级别 Web 钩子(包括 Slack 集成)
- 支持仓库 Git 钩子和部署密钥
- 支持仓库工单Issue、合并请求Pull Request以及 Wiki
- 支持迁移和镜像仓库以及它的 Wiki
- 支持在线编辑仓库文件和 Wiki
- 支持自定义源的 Gravatar 和 Federated Avatar
- 支持邮件服务
- 支持后台管理面板
- 支持 MySQL、PostgreSQL、SQLite3 和 [TiDB](https://github.com/pingcap/tidb)(实验性支持) 数据库
- 支持多语言本地化([19 种语言]([more](https://crowdin.com/project/gogs))
## 系统要求
- 最低的系统硬件要求为一个廉价的树莓派
- 如果用于团队项目,建议使用 2 核 CPU 及 1GB 内存
## 浏览器支持
- 请根据 [Semantic UI](https://github.com/Semantic-Org/Semantic-UI#browser-support) 查看具体支持的浏览器版本。
- 官方支持的最小 UI 尺寸为 **1024*768**UI 不一定会在更小尺寸的设备上被破坏,但我们无法保证且不会修复。
## 安装部署
在安装 Gogs 之前,您需要先安装 [基本环境](https://gogs.io/docs/installation)。
然后,您可以通过以下 5 种方式来安装 Gogs
- [二进制安装](https://gogs.io/docs/installation/install_from_binary.html)
- [源码安装](https://gogs.io/docs/installation/install_from_source.html)
- [包管理安装](https://gogs.io/docs/installation/install_from_packages.html)
- [采用 Docker 部署](https://github.com/gogits/gogs/tree/master/docker)
- [通过 Vagrant 安装](https://github.com/geerlingguy/ansible-vagrant-examples/tree/master/gogs)
### 使用教程
- [使用 Gogs 搭建自己的 Git 服务器](https://mynook.info/blog/post/host-your-own-git-server-using-gogs)
- [阿里云上 Ubuntu 14.04 64 位安装 Gogs](http://my.oschina.net/luyao/blog/375654)
### 云端部署
- [OpenShift](https://github.com/tkisme/gogs-openshift)
- [Cloudron](https://cloudron.io/appstore.html#io.gogs.cloudronapp)
- [Scaleway](https://www.scaleway.com/imagehub/gogs/)
- [Portal](https://portaldemo.xyz/cloud/)
- [Sandstorm](https://github.com/cem/gogs-sandstorm)
- [sloppy.io](https://github.com/sloppyio/quickstarters/tree/master/gogs)
- [YunoHost](https://github.com/mbugeia/gogs_ynh)
- [DPlatform](https://github.com/j8r/DPlatform)
## 软件及服务支持
- [Drone](https://github.com/drone/drone)CI
- [Fabric8](http://fabric8.io/)DevOps
- [Taiga](https://taiga.io/)(项目管理)
- [Puppet](https://forge.puppetlabs.com/Siteminds/gogs)IT
- [Kanboard](http://kanboard.net/plugin/gogs-webhook)(项目管理)
- [BearyChat](https://bearychat.com/)(团队交流)
- [HiWork](http://www.hiwork.cc/)(团队交流)
### 产品支持
- [Synology](https://www.synology.com)Docker
- [One Space](http://www.onespace.cc)(应用商店)
## 特别鸣谢
- 基于 [Macaron](https://github.com/go-macaron/macaron) 的路由与中间件机制。
- 基于 [GoBlog](https://github.com/fuxiaohei/goblog) 修改的系统监视状态。
- 感谢 [Rocker](http://weibo.com/rocker1989) 设计的 Logo。
- 感谢 [Crowdin](https://crowdin.com/project/gogs) 提供免费的开源项目本地化支持。
- 感谢 [DigitalOcean](https://www.digitalocean.com) 提供主站和体验站点的服务器赞助。
- 感谢 [KeyCDN](https://www.keycdn.com/) 和 [七牛云存储](http://www.qiniu.com/) 提供 CDN 服务赞助。
## 贡献成员
- 前团队成员 [@lunny](https://github.com/lunny)、[@fuxiaohei](https://github.com/fuxiaohei) 和 [@slene](https://github.com/slene)。
- 您可以通过查看 [贡献者页面](https://github.com/gogits/gogs/graphs/contributors) 获取完整的贡献者列表。
- 您可以通过查看 [TRANSLATORS](conf/locale/TRANSLATORS) 文件获取公开的翻译人员列表。
## 授权许可
本项目采用 MIT 开源授权许可证,完整的授权说明已放置在 [LICENSE](https://github.com/gogits/gogs/blob/master/LICENSE) 文件中。

View File

@@ -9,11 +9,12 @@ import (
"github.com/urfave/cli"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/setting"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/setting"
)
var (
// CmdAdmin represents the available admin sub-command.
CmdAdmin = cli.Command{
Name: "admin",
Usage: "Preform admin operations on command line",
@@ -29,11 +30,30 @@ to make automatic initialization process more smoothly`,
Usage: "Create a new user in database",
Action: runCreateUser,
Flags: []cli.Flag{
stringFlag("name", "", "Username"),
stringFlag("password", "", "User password"),
stringFlag("email", "", "User email address"),
boolFlag("admin", "User is an admin"),
stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
cli.StringFlag{
Name: "name",
Value: "",
Usage: "Username",
},
cli.StringFlag{
Name: "password",
Value: "",
Usage: "User password",
},
cli.StringFlag{
Name: "email",
Value: "",
Usage: "User email address",
},
cli.BoolFlag{
Name: "admin",
Usage: "User is an admin",
},
cli.StringFlag{
Name: "config, c",
Value: "custom/conf/app.ini",
Usage: "Custom configuration file path",
},
},
}
)

View File

@@ -25,19 +25,43 @@ import (
"github.com/urfave/cli"
)
// CmdCert represents the available cert sub-command.
var CmdCert = cli.Command{
Name: "cert",
Usage: "Generate self-signed certificate",
Description: `Generate a self-signed X.509 certificate for a TLS server.
Description: `Generate a self-signed X.509 certificate for a TLS server.
Outputs to 'cert.pem' and 'key.pem' and will overwrite existing files.`,
Action: runCert,
Flags: []cli.Flag{
stringFlag("host", "", "Comma-separated hostnames and IPs to generate a certificate for"),
stringFlag("ecdsa-curve", "", "ECDSA curve to use to generate a key. Valid values are P224, P256, P384, P521"),
intFlag("rsa-bits", 2048, "Size of RSA key to generate. Ignored if --ecdsa-curve is set"),
stringFlag("start-date", "", "Creation date formatted as Jan 1 15:04:05 2011"),
durationFlag("duration", 365*24*time.Hour, "Duration that certificate is valid for"),
boolFlag("ca", "whether this cert should be its own Certificate Authority"),
cli.StringFlag{
Name: "host",
Value: "",
Usage: "Comma-separated hostnames and IPs to generate a certificate for",
},
cli.StringFlag{
Name: "ecdsa-curve",
Value: "",
Usage: "ECDSA curve to use to generate a key. Valid values are P224, P256, P384, P521",
},
cli.IntFlag{
Name: "rsa-bits",
Value: 2048,
Usage: "Size of RSA key to generate. Ignored if --ecdsa-curve is set",
},
cli.StringFlag{
Name: "start-date",
Value: "",
Usage: "Creation date formatted as Jan 1 15:04:05 2011",
},
cli.DurationFlag{
Name: "duration",
Value: 365 * 24 * time.Hour,
Usage: "Duration that certificate is valid for",
},
cli.BoolFlag{
Name: "ca",
Usage: "whether this cert should be its own Certificate Authority",
},
},
}

View File

@@ -4,6 +4,7 @@
// Copyright 2014 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 cmd
import (
@@ -13,6 +14,7 @@ import (
"github.com/urfave/cli"
)
// CmdCert represents the available cert sub-command.
var CmdCert = cli.Command{
Name: "cert",
Usage: "Generate self-signed certificate",
@@ -20,7 +22,7 @@ var CmdCert = cli.Command{
Action: runCert,
}
func runCert(ctx *cli.Context) error {
func runCert(*cli.Context) error {
fmt.Println("Command cert not available, please use build tags 'cert' to rebuild.")
os.Exit(1)

View File

@@ -1,42 +0,0 @@
// Copyright 2015 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 cmd
import (
"time"
"github.com/urfave/cli"
)
func stringFlag(name, value, usage string) cli.StringFlag {
return cli.StringFlag{
Name: name,
Value: value,
Usage: usage,
}
}
func boolFlag(name, usage string) cli.BoolFlag {
return cli.BoolFlag{
Name: name,
Usage: usage,
}
}
func intFlag(name string, value int, usage string) cli.IntFlag {
return cli.IntFlag{
Name: name,
Value: value,
Usage: usage,
}
}
func durationFlag(name string, value time.Duration, usage string) cli.DurationFlag {
return cli.DurationFlag{
Name: name,
Value: value,
Usage: usage,
}
}

View File

@@ -6,20 +6,19 @@ package cmd
import (
"fmt"
"io/ioutil"
"log"
"os"
"path"
"time"
"io/ioutil"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/setting"
"github.com/Unknwon/cae/zip"
"github.com/urfave/cli"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/setting"
)
// CmdDump represents the available dump sub-command.
var CmdDump = cli.Command{
Name: "dump",
Usage: "Dump Gogs files and database",
@@ -27,9 +26,20 @@ var CmdDump = cli.Command{
It can be used for backup and capture Gogs server image to send to maintainer`,
Action: runDump,
Flags: []cli.Flag{
stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
boolFlag("verbose, v", "Show process details"),
stringFlag("tempdir, t", os.TempDir(), "Temporary dir path"),
cli.StringFlag{
Name: "config, c",
Value: "custom/conf/app.ini",
Usage: "Custom configuration file path",
},
cli.BoolFlag{
Name: "verbose, v",
Usage: "Show process details",
},
cli.StringFlag{
Name: "tempdir, t",
Value: os.TempDir(),
Usage: "Temporary dir path",
},
},
}

View File

@@ -13,29 +13,33 @@ import (
"strings"
"time"
"code.gitea.io/git"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/httplib"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
"github.com/Unknwon/com"
git "github.com/gogits/git-module"
gouuid "github.com/satori/go.uuid"
"github.com/urfave/cli"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/httplib"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
)
const (
_ACCESS_DENIED_MESSAGE = "Repository does not exist or you do not have access"
accessDenied = "Repository does not exist or you do not have access"
)
// CmdServ represents the available serv sub-command.
var CmdServ = cli.Command{
Name: "serv",
Usage: "This command should only be called by SSH shell",
Description: `Serv provide access auth for repositories`,
Action: runServ,
Flags: []cli.Flag{
stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
cli.StringFlag{
Name: "config, c",
Value: "custom/conf/app.ini",
Usage: "Custom configuration file path",
},
},
}
@@ -63,9 +67,9 @@ func parseCmd(cmd string) (string, string) {
var (
allowedCommands = map[string]models.AccessMode{
"git-upload-pack": models.ACCESS_MODE_READ,
"git-upload-archive": models.ACCESS_MODE_READ,
"git-receive-pack": models.ACCESS_MODE_WRITE,
"git-upload-pack": models.AccessModeRead,
"git-upload-archive": models.AccessModeRead,
"git-receive-pack": models.AccessModeWrite,
}
)
@@ -179,7 +183,7 @@ func runServ(c *cli.Context) error {
repo, err := models.GetRepositoryByName(repoUser.ID, reponame)
if err != nil {
if models.IsErrRepoNotExist(err) {
fail(_ACCESS_DENIED_MESSAGE, "Repository does not exist: %s/%s", repoUser.Name, reponame)
fail(accessDenied, "Repository does not exist: %s/%s", repoUser.Name, reponame)
}
fail("Internal error", "Failed to get repository: %v", err)
}
@@ -190,7 +194,7 @@ func runServ(c *cli.Context) error {
}
// Prohibit push to mirror repositories.
if requestedMode > models.ACCESS_MODE_READ && repo.IsMirror {
if requestedMode > models.AccessModeRead && repo.IsMirror {
fail("mirror repository is read-only", "")
}
@@ -199,7 +203,7 @@ func runServ(c *cli.Context) error {
keyID int64
user *models.User
)
if requestedMode == models.ACCESS_MODE_WRITE || repo.IsPrivate {
if requestedMode == models.AccessModeWrite || repo.IsPrivate {
keys := strings.Split(c.Args()[0], "-")
if len(keys) != 2 {
fail("Key ID format error", "Invalid key argument: %s", c.Args()[0])
@@ -212,7 +216,7 @@ func runServ(c *cli.Context) error {
keyID = key.ID
// Check deploy key or user key.
if key.Type == models.KEY_TYPE_DEPLOY {
if key.Type == models.KeyTypeDeploy {
if key.Mode < requestedMode {
fail("Key permission denied", "Cannot push with deployment key: %d", key.ID)
}
@@ -241,8 +245,8 @@ func runServ(c *cli.Context) error {
if err != nil {
fail("Internal error", "Fail to check access: %v", err)
} else if mode < requestedMode {
clientMessage := _ACCESS_DENIED_MESSAGE
if mode >= models.ACCESS_MODE_READ {
clientMessage := accessDenied
if mode >= models.AccessModeRead {
clientMessage = "You do not have sufficient authorization for this action"
}
fail(clientMessage,
@@ -275,7 +279,7 @@ func runServ(c *cli.Context) error {
fail("Internal error", "Failed to execute git command: %v", err)
}
if requestedMode == models.ACCESS_MODE_WRITE {
if requestedMode == models.AccessModeWrite {
handleUpdateTask(uuid, user, repoUser, reponame, isWiki)
}

View File

@@ -9,18 +9,23 @@ import (
"github.com/urfave/cli"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
)
// CmdUpdate represents the available update sub-command.
var CmdUpdate = cli.Command{
Name: "update",
Usage: "This command should only be called by Git hook",
Description: `Update get pushed info and insert into database`,
Action: runUpdate,
Flags: []cli.Flag{
stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
cli.StringFlag{
Name: "config, c",
Value: "custom/conf/app.ini",
Usage: "Custom configuration file path",
},
},
}

View File

@@ -7,7 +7,6 @@ package cmd
import (
"crypto/tls"
"fmt"
"io/ioutil"
"net"
"net/http"
"net/http/fcgi"
@@ -15,6 +14,21 @@ import (
"path"
"strings"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/auth"
"code.gitea.io/gitea/modules/bindata"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/public"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/templates"
"code.gitea.io/gitea/routers"
"code.gitea.io/gitea/routers/admin"
apiv1 "code.gitea.io/gitea/routers/api/v1"
"code.gitea.io/gitea/routers/dev"
"code.gitea.io/gitea/routers/org"
"code.gitea.io/gitea/routers/repo"
"code.gitea.io/gitea/routers/user"
"github.com/go-macaron/binding"
"github.com/go-macaron/cache"
"github.com/go-macaron/captcha"
@@ -23,31 +37,11 @@ import (
"github.com/go-macaron/i18n"
"github.com/go-macaron/session"
"github.com/go-macaron/toolbox"
"github.com/go-xorm/xorm"
"github.com/mcuadros/go-version"
"github.com/urfave/cli"
"gopkg.in/ini.v1"
"gopkg.in/macaron.v1"
"github.com/gogits/git-module"
"github.com/gogits/go-gogs-client"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/auth"
"github.com/gogits/gogs/modules/bindata"
"github.com/gogits/gogs/modules/context"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/modules/template"
"github.com/gogits/gogs/routers"
"github.com/gogits/gogs/routers/admin"
apiv1 "github.com/gogits/gogs/routers/api/v1"
"github.com/gogits/gogs/routers/dev"
"github.com/gogits/gogs/routers/org"
"github.com/gogits/gogs/routers/repo"
"github.com/gogits/gogs/routers/user"
macaron "gopkg.in/macaron.v1"
)
// CmdWeb represents the available web sub-command.
var CmdWeb = cli.Command{
Name: "web",
Usage: "Start Gogs web server",
@@ -55,57 +49,26 @@ var CmdWeb = cli.Command{
and it takes care of all the other things for you`,
Action: runWeb,
Flags: []cli.Flag{
stringFlag("port, p", "3000", "Temporary port number to prevent conflict"),
stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
cli.StringFlag{
Name: "port, p",
Value: "3000",
Usage: "Temporary port number to prevent conflict",
},
cli.StringFlag{
Name: "config, c",
Value: "custom/conf/app.ini",
Usage: "Custom configuration file path",
},
},
}
// VerChecker is a listing of required dependency versions.
type VerChecker struct {
ImportPath string
Version func() string
Expected string
}
// checkVersion checks if binary matches the version of templates files.
func checkVersion() {
// Templates.
data, err := ioutil.ReadFile(setting.StaticRootPath + "/templates/.VERSION")
if err != nil {
log.Fatal(4, "Fail to read 'templates/.VERSION': %v", err)
}
tplVer := string(data)
if tplVer != setting.AppVer {
if version.Compare(tplVer, setting.AppVer, ">") {
log.Fatal(4, "Binary version is lower than template file version, did you forget to recompile Gogs?")
} else {
log.Fatal(4, "Binary version is higher than template file version, did you forget to update template files?")
}
}
// Check dependency version.
checkers := []VerChecker{
{"github.com/go-xorm/xorm", func() string { return xorm.Version }, "0.5.5"},
{"github.com/go-macaron/binding", binding.Version, "0.3.2"},
{"github.com/go-macaron/cache", cache.Version, "0.1.2"},
{"github.com/go-macaron/csrf", csrf.Version, "0.1.0"},
{"github.com/go-macaron/i18n", i18n.Version, "0.3.0"},
{"github.com/go-macaron/session", session.Version, "0.1.6"},
{"github.com/go-macaron/toolbox", toolbox.Version, "0.1.0"},
{"gopkg.in/ini.v1", ini.Version, "1.8.4"},
{"gopkg.in/macaron.v1", macaron.Version, "1.1.7"},
{"github.com/gogits/git-module", git.Version, "0.4.1"},
{"github.com/gogits/go-gogs-client", gogs.Version, "0.12.1"},
}
for _, c := range checkers {
if !version.Compare(c.Version(), c.Expected, ">=") {
log.Fatal(4, `Dependency outdated!
Package '%s' current version (%s) is below requirement (%s),
please use following command to update this package and recompile Gogs:
go get -u %[1]s`, c.ImportPath, c.Version(), c.Expected)
}
}
}
// newMacaron initializes Macaron instance.
func newMacaron() *macaron.Macaron {
m := macaron.New()
@@ -117,11 +80,11 @@ func newMacaron() *macaron.Macaron {
m.Use(gzip.Gziper())
}
if setting.Protocol == setting.FCGI {
m.SetURLPrefix(setting.AppSubUrl)
m.SetURLPrefix(setting.AppSubURL)
}
m.Use(macaron.Static(
path.Join(setting.StaticRootPath, "public"),
macaron.StaticOptions{
m.Use(public.Static(
&public.Options{
Directory: path.Join(setting.StaticRootPath, "public"),
SkipLogging: setting.DisableRouterLog,
},
))
@@ -132,16 +95,17 @@ func newMacaron() *macaron.Macaron {
SkipLogging: setting.DisableRouterLog,
},
))
m.Use(templates.Renderer(
&templates.Options{
Directory: path.Join(setting.StaticRootPath, "templates"),
Custom: []string{path.Join(setting.CustomPath, "templates")},
},
))
funcMap := template.NewFuncMap()
m.Use(macaron.Renderer(macaron.RenderOptions{
Directory: path.Join(setting.StaticRootPath, "templates"),
AppendDirectories: []string{path.Join(setting.CustomPath, "templates")},
Funcs: funcMap,
IndentJSON: macaron.Env != macaron.PROD,
models.InitMailRender(templates.Mailer(&templates.Options{
Directory: path.Join(setting.StaticRootPath, "templates", "mail"),
Custom: []string{path.Join(setting.CustomPath, "templates", "mail")},
}))
models.InitMailRender(path.Join(setting.StaticRootPath, "templates/mail"),
path.Join(setting.CustomPath, "templates/mail"), funcMap)
localeNames, err := bindata.AssetDir("conf/locale")
if err != nil {
@@ -152,7 +116,7 @@ func newMacaron() *macaron.Macaron {
localFiles[name] = bindata.MustAsset("conf/locale/" + name)
}
m.Use(i18n.I18n(i18n.Options{
SubURL: setting.AppSubUrl,
SubURL: setting.AppSubURL,
Files: localFiles,
CustomDirectory: path.Join(setting.CustomPath, "conf/locale"),
Langs: setting.Langs,
@@ -166,7 +130,7 @@ func newMacaron() *macaron.Macaron {
Interval: setting.CacheInterval,
}))
m.Use(captcha.Captchaer(captcha.Options{
SubURL: setting.AppSubUrl,
SubURL: setting.AppSubURL,
}))
m.Use(session.Sessioner(setting.SessionConfig))
m.Use(csrf.Csrfer(csrf.Options{
@@ -174,11 +138,11 @@ func newMacaron() *macaron.Macaron {
Cookie: setting.CSRFCookieName,
SetCookie: true,
Header: "X-Csrf-Token",
CookiePath: setting.AppSubUrl,
CookiePath: setting.AppSubURL,
}))
m.Use(toolbox.Toolboxer(m, toolbox.Options{
HealthCheckFuncs: []*toolbox.HealthCheckFuncDesc{
&toolbox.HealthCheckFuncDesc{
{
Desc: "Database connection",
Func: models.Ping,
},
@@ -193,7 +157,6 @@ func runWeb(ctx *cli.Context) error {
setting.CustomConf = ctx.String("config")
}
routers.GlobalInit()
checkVersion()
m := newMacaron()
@@ -210,7 +173,7 @@ func runWeb(ctx *cli.Context) error {
m.Get("/", ignSignIn, routers.Home)
m.Group("/explore", func() {
m.Get("", func(ctx *context.Context) {
ctx.Redirect(setting.AppSubUrl + "/explore/repos")
ctx.Redirect(setting.AppSubURL + "/explore/repos")
})
m.Get("/repos", routers.ExploreRepos)
m.Get("/users", routers.ExploreUsers)
@@ -274,7 +237,7 @@ func runWeb(ctx *cli.Context) error {
m.Group("/users", func() {
m.Get("", admin.Users)
m.Combo("/new").Get(admin.NewUser).Post(bindIgnErr(auth.AdminCrateUserForm{}), admin.NewUserPost)
m.Combo("/new").Get(admin.NewUser).Post(bindIgnErr(auth.AdminCreateUserForm{}), admin.NewUserPost)
m.Combo("/:userid").Get(admin.EditUser).Post(bindIgnErr(auth.AdminEditUserForm{}), admin.EditUserPost)
m.Post("/:userid/delete", admin.DeleteUser)
})
@@ -330,11 +293,7 @@ func runWeb(ctx *cli.Context) error {
}
defer fr.Close()
ctx.Header().Set("Cache-Control", "public,max-age=86400")
ctx.Header().Set("Content-Disposition", fmt.Sprintf(`inline; filename="%s"`, attach.Name))
// Fix #312. Attachments with , in their name are not handled correctly by Google Chrome.
// We must put the name in " manually.
if err = repo.ServeData(ctx, "\""+attach.Name+"\"", fr); err != nil {
if err = repo.ServeData(ctx, attach.Name, fr); err != nil {
ctx.Handle(500, "ServeData", err)
return
}
@@ -518,7 +477,8 @@ func runWeb(ctx *cli.Context) error {
ctx.Data["CommitsCount"] = ctx.Repo.CommitsCount
})
m.Combo("/compare/*", repo.MustAllowPulls).Get(repo.CompareAndPullRequest).
m.Combo("/compare/*", repo.MustAllowPulls, repo.SetEditorconfigIfExists).
Get(repo.CompareAndPullRequest).
Post(bindIgnErr(auth.CreateIssueForm{}), repo.CompareAndPullRequestPost)
m.Group("", func() {
@@ -577,20 +537,20 @@ func runWeb(ctx *cli.Context) error {
m.Group("/pulls/:index", func() {
m.Get("/commits", context.RepoRef(), repo.ViewPullCommits)
m.Get("/files", context.RepoRef(), repo.ViewPullFiles)
m.Get("/files", context.RepoRef(), repo.SetEditorconfigIfExists, repo.SetDiffViewStyle, repo.ViewPullFiles)
m.Post("/merge", reqRepoWriter, repo.MergePullRequest)
}, repo.MustAllowPulls)
m.Group("", func() {
m.Get("/src/*", repo.Home)
m.Get("/src/*", repo.SetEditorconfigIfExists, repo.Home)
m.Get("/raw/*", repo.SingleDownload)
m.Get("/commits/*", repo.RefCommits)
m.Get("/commit/:sha([a-z0-9]{7,40})$", repo.Diff)
m.Get("/commit/:sha([a-f0-9]{7,40})$", repo.SetEditorconfigIfExists, repo.SetDiffViewStyle, repo.Diff)
m.Get("/forks", repo.Forks)
}, context.RepoRef())
m.Get("/commit/:sha([a-z0-9]{7,40})\\.:ext(patch|diff)", repo.RawDiff)
m.Get("/commit/:sha([a-f0-9]{7,40})\\.:ext(patch|diff)", repo.RawDiff)
m.Get("/compare/:before([a-z0-9]{7,40})\\.\\.\\.:after([a-z0-9]{7,40})", repo.CompareDiff)
m.Get("/compare/:before([a-z0-9]{40})\\.\\.\\.:after([a-z0-9]{40})", repo.SetEditorconfigIfExists, repo.SetDiffViewStyle, repo.CompareDiff)
}, ignSignIn, context.RepoAssignment(), repo.MustBeNotBare)
m.Group("/:username/:reponame", func() {
m.Get("/stars", repo.Stars)
@@ -599,8 +559,8 @@ func runWeb(ctx *cli.Context) error {
m.Group("/:username", func() {
m.Group("/:reponame", func() {
m.Get("", repo.Home)
m.Get("\\.git$", repo.Home)
m.Get("", repo.SetEditorconfigIfExists, repo.Home)
m.Get("\\.git$", repo.SetEditorconfigIfExists, repo.Home)
}, ignSignIn, context.RepoAssignment(true), context.RepoRef())
m.Group("/:reponame", func() {
@@ -628,17 +588,17 @@ func runWeb(ctx *cli.Context) error {
// Flag for port number in case first time run conflict.
if ctx.IsSet("port") {
setting.AppUrl = strings.Replace(setting.AppUrl, setting.HTTPPort, ctx.String("port"), 1)
setting.AppURL = strings.Replace(setting.AppURL, setting.HTTPPort, ctx.String("port"), 1)
setting.HTTPPort = ctx.String("port")
}
var listenAddr string
if setting.Protocol == setting.UNIX_SOCKET {
if setting.Protocol == setting.UnixSocket {
listenAddr = fmt.Sprintf("%s", setting.HTTPAddr)
} else {
listenAddr = fmt.Sprintf("%s:%s", setting.HTTPAddr, setting.HTTPPort)
}
log.Info("Listen: %v://%s%s", setting.Protocol, listenAddr, setting.AppSubUrl)
log.Info("Listen: %v://%s%s", setting.Protocol, listenAddr, setting.AppSubURL)
var err error
switch setting.Protocol {
@@ -649,11 +609,11 @@ func runWeb(ctx *cli.Context) error {
err = server.ListenAndServeTLS(setting.CertFile, setting.KeyFile)
case setting.FCGI:
err = fcgi.Serve(nil, m)
case setting.UNIX_SOCKET:
case setting.UnixSocket:
os.Remove(listenAddr)
var listener *net.UnixListener
listener, err = net.ListenUnix("unix", &net.UnixAddr{listenAddr, "unix"})
listener, err = net.ListenUnix("unix", &net.UnixAddr{Name: listenAddr, Net: "unix"})
if err != nil {
break // Handle error after switch
}

View File

@@ -2,7 +2,7 @@
# PLEASE MAKE CHANGES ON CORRESPONDING CUSTOM CONFIG FILE
; App name that shows on every page title
APP_NAME = Gogs: Go Git Service
APP_NAME = Gitea: Git with a cup of tea
; Change it if you run locally
RUN_USER = git
; Either "dev", "prod" or "test", default is "dev"
@@ -24,6 +24,8 @@ PULL_REQUEST_QUEUE_LENGTH = 1000
; Preferred Licenses to place at the top of the List
; Name must match file name in conf/license or custom/conf/license
PREFERRED_LICENSES = Apache License 2.0,MIT License
; Disable ability to interact with repositories by HTTP protocol
DISABLE_HTTP_GIT = false
[repository.editor]
; List of file extensions that should have line wraps in the CodeMirror editor
@@ -36,7 +38,7 @@ PREVIEWABLE_FILE_MODES = markdown
[repository.upload]
; Whether repository file uploads are enabled. Defaults to `true`
ENABLED = true
; Path for uploads. Defaults to `data/tmp/uploads` (tmp gets deleted on gogs restart)
; Path for uploads. Defaults to `data/tmp/uploads` (tmp gets deleted on gitea restart)
TEMP_PATH = data/tmp/uploads
; One or more allowed types, e.g. image/jpeg|image/png. Nothing means any file type
ALLOWED_TYPES =
@@ -91,7 +93,7 @@ HTTP_ADDR = 0.0.0.0
HTTP_PORT = 3000
; Permission for unix socket
UNIX_SOCKET_PERMISSION = 666
; Local (DMZ) URL for Gogs workers (such as SSH update) accessing web service.
; Local (DMZ) URL for Gitea workers (such as SSH update) accessing web service.
; In most cases you do not need to change the default value.
; Alter it only if your SSH server node is not the same as HTTP node.
LOCAL_ROOT_URL = %(PROTOCOL)s://%(HTTP_ADDR)s:%(HTTP_PORT)s/
@@ -118,7 +120,7 @@ MINIMUM_KEY_SIZE_CHECK = false
OFFLINE_MODE = false
DISABLE_ROUTER_LOG = false
; Generate steps:
; $ ./gogs cert -ca=true -duration=8760h0m0s -host=myhost.example.com
; $ ./gitea cert -ca=true -duration=8760h0m0s -host=myhost.example.com
;
; Or from a .pfx file exported from the Windows certificate store (do
; not forget to export the private key):
@@ -127,7 +129,7 @@ DISABLE_ROUTER_LOG = false
CERT_FILE = custom/https/cert.pem
KEY_FILE = custom/https/key.pem
; Upper level of template and static file path
; default is the path where Gogs is executed
; default is the path where Gitea is executed
STATIC_ROOT_PATH =
; Default path for App data
APP_DATA_PATH = data
@@ -147,13 +149,13 @@ DSA = 1024
; Either "mysql", "postgres" or "sqlite3", it's your choice
DB_TYPE = mysql
HOST = 127.0.0.1:3306
NAME = gogs
NAME = gitea
USER = root
PASSWD =
; For "postgres" only, either "disable", "require" or "verify-full"
SSL_MODE = disable
; For "sqlite3" and "tidb", use absolute path when you start as service
PATH = data/gogs.db
PATH = data/gitea.db
[admin]
@@ -163,8 +165,8 @@ INSTALL_LOCK = false
SECRET_KEY = !#@FDEWREWR&*(
; Auto-login remember days
LOGIN_REMEMBER_DAYS = 7
COOKIE_USERNAME = gogs_awesome
COOKIE_REMEMBER_NAME = gogs_incredible
COOKIE_USERNAME = gitea_awesome
COOKIE_REMEMBER_NAME = gitea_incredible
; Reverse proxy authentication header name of user name
REVERSE_PROXY_AUTHENTICATION_USER = X-WEBAUTH-USER
@@ -179,7 +181,7 @@ DISABLE_REGISTRATION = false
REQUIRE_SIGNIN_VIEW = false
; Mail notification
ENABLE_NOTIFY_MAIL = false
; More detail: https://github.com/gogits/gogs/issues/165
; More detail: https://github.com/go-gitea/gitea/issues/165
ENABLE_REVERSE_PROXY_AUTHENTICATION = false
ENABLE_REVERSE_PROXY_AUTO_REGISTRATION = false
; Enable captcha validation for registration
@@ -342,13 +344,13 @@ RECEIVERS =
LEVEL =
; Either "mysql" or "postgres"
DRIVER =
; Based on xorm, e.g.: root:root@localhost/gogs?charset=utf8
; Based on xorm, e.g.: root:root@localhost/gitea?charset=utf8
CONN =
[cron]
; Enable running cron tasks periodically.
ENABLED = true
; Run cron tasks when Gogs starts.
; Run cron tasks when Gitea starts.
RUN_AT_START = false
; Update mirrors
@@ -398,8 +400,8 @@ DEFAULT_INTERVAL = 8
MAX_RESPONSE_ITEMS = 50
[i18n]
LANGS = en-US,zh-CN,zh-HK,zh-TW,de-DE,fr-FR,nl-NL,lv-LV,ru-RU,ja-JP,es-ES,pt-BR,pl-PL,bg-BG,it-IT,fi-FI,tr-TR,cs-CZ,sr-SP
NAMES = English,简体中文,繁體中文(香港),繁體中文(台湾),Deutsch,Français,Nederlands,Latviešu,Русский,日本語,Español,Português do Brasil,Polski,български,Italiano,Suomalainen,Türkçe,čeština,Српски
LANGS = en-US,zh-CN,zh-HK,zh-TW,de-DE,fr-FR,nl-NL,lv-LV,ru-RU,ja-JP,es-ES,pt-BR,pl-PL,bg-BG,it-IT,fi-FI,tr-TR,cs-CZ,sr-SP,sv-SE
NAMES = English,简体中文,繁體中文(香港),繁體中文(台湾),Deutsch,Français,Nederlands,Latviešu,Русский,日本語,Español,Português do Brasil,Polski,български,Italiano,Suomalainen,Türkçe,čeština,Српски,Svenska
; Used for datetimepicker
[i18n.datelang]
@@ -421,6 +423,8 @@ it-IT = it
fi-FI = fi
tr-TR = tr
cs-CZ = cs-CZ
sr-SP = sr
sv-SE = sv
; Extension mapping to highlight class
; e.g. .toml=ini
@@ -428,7 +432,7 @@ cs-CZ = cs-CZ
[other]
SHOW_FOOTER_BRANDING = false
; Show version information about Gogs and Go in the footer
; Show version information about Gitea and Go in the footer
SHOW_FOOTER_VERSION = true
; Show time of template execution in the footer
SHOW_FOOTER_TEMPLATE_LOAD_TIME = true

View File

@@ -60,3 +60,4 @@ Vladimir Vissoultchev <wqweto AT gmail DOT com>
YJSoft <yjsoft AT yjsoft DOT pe DOT kr>
Łukasz Jan Niemier <lukasz AT niemier DOT pl>
Pablo Saavedra <psaavedra AT igalia DOT com>
Thiago Avelino <thiago AT avelino DOT xxx>

View File

@@ -47,8 +47,8 @@ cancel=Отказ
[install]
install=Инсталация
title=Стъпки за инсталиране при първоначално стартиране
docker_helper=Ако Gogs е стартиран в Docker контейнер, моля прочетете <a target="_blank" href="%s">нашите указания</a> внимателно, преди да правите промени по настройките на тази страница!
requite_db_desc=Gogs изисква MySQL, PostgreSQL, SQLite3 или TiDB.
docker_helper=Ако Gitea е стартиран в Docker контейнер, моля прочетете <a target="_blank" href="%s">нашите указания</a> внимателно, преди да правите промени по настройките на тази страница!
requite_db_desc=Gitea изисква MySQL, PostgreSQL, SQLite3 или TiDB.
db_title=Настройки на базата данни
db_type=Тип на база данни
host=Сървър
@@ -58,7 +58,7 @@ db_name=Име на база данни
db_helper=Моля, използвайте INNODB engine с utf8_general_ci кодиране на знаци за MySQL.
ssl_mode=Режим SSL
path=Път
sqlite_helper=Файл на SQLite3 или TiDB база данни.<br>Моля използвайте абсолютен път до файл когато стартирате Gogs като услуга.
sqlite_helper=Файл на SQLite3 или TiDB база данни.<br>Моля използвайте абсолютен път до файл когато стартирате Gitea като услуга.
err_empty_db_path=Пътят до SQLite3 или TiDB база данни не може да е празен.
err_invalid_tidb_name=TiDB не позволява "." и "-" в името на базата данни.
no_admin_and_disable_registration=Невъзможно изключване на регистрациите без предварително да е създаден поне един административен профил.
@@ -70,7 +70,7 @@ app_name_helper=Постави името на твоята организаци
repo_path=Основен път към хранилищата
repo_path_helper=Всички отдалечени хранилища на Git ще бъдат съхранени в тази директория.
run_user=Потребителски контекст
run_user_helper=Този потребител трябва да има достъп до основния път към хранилищата и права да стартира Gogs.
run_user_helper=Този потребител трябва да има достъп до основния път към хранилищата и права да стартира Gitea.
domain=Домейн
domain_helper=Тази настройка влияе на URL адреса за клониране чрез SSH.
ssh_port=SSH порт
@@ -110,7 +110,7 @@ admin_name=Потребителско име
admin_password=Парола
confirm_password=Потвърждение на паролата
admin_email=Ел. поща
install_gogs=Инсталирай Gogs
install_gogs=Инсталирай Gitea
test_git_failed=Неуспешно тестването на "git" команда: %v
sqlite3_not_available=Вашата версия не поддържа SQLite3, моля, изтеглете официалната двоична версия от %s, а не gobuild версията.
invalid_db_setting=Настройките на базата данни са некоректни: %v
@@ -118,7 +118,7 @@ invalid_repo_path=Основният път към хранилищата е н
run_user_not_match=Потребителският контекст на приложението не е на текущия потребител: %s -> %s
save_config_failed=Неуспешно запазване на конфигурация: %v
invalid_admin_setting=Настройките на профил на администратора са невалидни: %v
install_success=Добре дошли! Радваме се, че избрахте Gogs, и Ви пожелаваме приятна работа и сърдечни поздрави!
install_success=Добре дошли! Радваме се, че избрахте Gitea, и Ви пожелаваме приятна работа и сърдечни поздрави!
invalid_log_root_path=Основният път към журналите е невалиден: %v
[home]
@@ -162,7 +162,7 @@ reset_password=Нулиране на паролата
invalid_code=За съжаление Вашия код за потвърждение е изтекъл или е невалиден.
reset_password_helper=Щракнете тук, за да нулирате паролата си
password_too_short=Размерът на паролата не може да бъде по-малък от 6 знака.
non_local_account=Нелокални потребители не могат да сменят паролата си през Gogs.
non_local_account=Нелокални потребители не могат да сменят паролата си през Gitea.
[mail]
activate_account=Моля активирайте Вашия профил
@@ -222,7 +222,7 @@ user_not_exist=Даденият потребител не съществува.
last_org_owner=Премахване на последния потребител от екип притежатели не е позволено, тъй като винаги трябва да има поне един притежател в дадена организация.
invalid_ssh_key=За съжаление, ние не сме в състояние да проверим Вашия SSH ключ: %s
unable_verify_ssh_key=Gogs не може да провери Вашия SSH ключ, но предполагаме, че е валиден. Моля, проверете го.
unable_verify_ssh_key=Gitea не може да провери Вашия SSH ключ, но предполагаме, че е валиден. Моля, проверете го.
auth_failed=Неуспешно удостоверяване: %v
still_own_repo=Вашият профил притежава поне едно хранилище. Първо трябва да ги изтриете или да ги прехвърлите на друг потребител.
@@ -327,7 +327,7 @@ unbind_success=Социалния профил е освободен.
manage_access_token=Управление на индивидуални API ключове за достъп
generate_new_token=Генериране на нов API ключ
tokens_desc=Генерирани API ключове, които могат да се използват за достъп до API на Gogs.
tokens_desc=Генерирани API ключове, които могат да се използват за достъп до API на Gitea.
new_token_desc=Всеки API ключ ще има пълен достъп до Вашия профил.
token_name=Име на API ключ
generate_token=Генериране на API ключ
@@ -690,7 +690,7 @@ settings.search_user_placeholder=Име на потребител...
settings.org_not_allowed_to_be_collaborator=Невъзможно добавяне на организация като сътрудник.
settings.user_is_org_member=Потребителят вече участва в организацията и не може да бъде добавен като сътрудник.
settings.add_webhook=Добави уеб-кука
settings.hooks_desc=Уеб-куките много приличат на обикновен HTTP POST тригер. Когато нещо се случи в Gogs, ние ще изпратим уведомление до сървъра, който посочите. Научете повече в <a target="_blank" href="%s">Ръководство за уеб-куки</a>.
settings.hooks_desc=Уеб-куките много приличат на обикновен HTTP POST тригер. Когато нещо се случи в Gitea, ние ще изпратим уведомление до сървъра, който посочите. Научете повече в <a target="_blank" href="%s">Ръководство за уеб-куки</a>.
settings.webhook_deletion=Изтрий уеб-кука
settings.webhook_deletion_desc=При изтриване на тази уеб-кука ще се премахне информацията за нея и цялата хронология на нейното изпращане. Желаете ли да продължите?
settings.webhook_deletion_success=Уеб-куката е изтрита успешно!
@@ -707,7 +707,7 @@ settings.githook_edit_desc=Ако куката е неактивна, ще бъ
settings.githook_name=Име на куката
settings.githook_content=Съдържание на куката
settings.update_githook=Запази куката
settings.add_webhook_desc=Gogs ще изпрати <code>POST</code> заявка към указания URL адрес заедно с информация за събитието, което е настъпило. Също можете да укажете в какъв формат желаете да получите данните при задействане на куката (JSON, x-www-form-urlencoded, XML) и др. Допълнително описание можете да намерите в нашето <a target="_blank" href="%s">Ръководство за уеб-куки</a>.
settings.add_webhook_desc=Gitea ще изпрати <code>POST</code> заявка към указания URL адрес заедно с информация за събитието, което е настъпило. Също можете да укажете в какъв формат желаете да получите данните при задействане на куката (JSON, x-www-form-urlencoded, XML) и др. Допълнително описание можете да намерите в нашето <a target="_blank" href="%s">Ръководство за уеб-куки</a>.
settings.payload_url=URL адрес на изпращане
settings.content_type=Тип на съдържанието
settings.secret=Тайна
@@ -889,7 +889,7 @@ total=Общо: %d
dashboard.statistic=Статистика
dashboard.operations=Операции
dashboard.system_status=Наблюдение на системния статус
dashboard.statistic_info=Gogs базата данни има <b>%d</b> потребители, <b>%d</b> организации, <b>%d</b> публични ключове, <b>%d</b> хранилища, <b>%d</b> наблюдавания, <b>%d</b> харесвания, <b>%d</b> действия, <b>%d</b> достъпи, <b>%d</b> задачи, <b>%d</b> коментари, <b>%d</b> социални регистрации, <b>%d</b> последователи, <b>%d</b> огледала, <b>%d</b> версии, <b>%d</b> начини на удостоверяване, <b>%d</b> уеб-куки, <b>%d</b> етапи, <b>%d</b> етикети, <b>%d</b> задачи на куки, <b>%d</b> екипи, <b>%d</b> задачи при актуализация, <b>%d</b> прикачени файлове.
dashboard.statistic_info=Gitea базата данни има <b>%d</b> потребители, <b>%d</b> организации, <b>%d</b> публични ключове, <b>%d</b> хранилища, <b>%d</b> наблюдавания, <b>%d</b> харесвания, <b>%d</b> действия, <b>%d</b> достъпи, <b>%d</b> задачи, <b>%d</b> коментари, <b>%d</b> социални регистрации, <b>%d</b> последователи, <b>%d</b> огледала, <b>%d</b> версии, <b>%d</b> начини на удостоверяване, <b>%d</b> уеб-куки, <b>%d</b> етапи, <b>%d</b> етикети, <b>%d</b> задачи на куки, <b>%d</b> екипи, <b>%d</b> задачи при актуализация, <b>%d</b> прикачени файлове.
dashboard.operation_name=Име на операцията
dashboard.operation_switch=Превключи
dashboard.operation_run=Изпълни
@@ -903,7 +903,7 @@ dashboard.delete_missing_repos=Изтрий всички записи за хр
dashboard.delete_missing_repos_success=Всички записи за хранилища, за които липсват съответни Git файлове са изтрити успешно.
dashboard.git_gc_repos=Почисти изтрити данни в хранилищата
dashboard.git_gc_repos_success=Всички хранилища са почистени от изтрити данни успешно.
dashboard.resync_all_sshkeys=Презапис на ".ssh/authorized_keys" файл (внимание: не-Gogs ключове ще бъдат загубени)
dashboard.resync_all_sshkeys=Презапис на ".ssh/authorized_keys" файл (внимание: не-Gitea ключове ще бъдат загубени)
dashboard.resync_all_sshkeys_success=Всички публични ключове са презаписани успешно.
dashboard.resync_all_update_hooks=Презапис на всички куки, закачени на актуализация на хранилищата (необходимо, когато се ползва собствен път за конфигурацията)
dashboard.resync_all_update_hooks_success=Всички куки, закачени на актуализация на хранилищата, са презаписани успешно.

View File

@@ -47,8 +47,8 @@ cancel=Zrušit
[install]
install=Instalace
title=Kroky instalace pro první běh
docker_helper=Spouštíte-li Gogs uvnitř Dockeru, přečtěte si prosím pečlivě <a target="_blank" href="%s">návod</a>, než něco změníte na této stránce!
requite_db_desc=Gogs vyžaduje MySQL, PostgreSQL, SQLite3 nebo TiDB.
docker_helper=Spouštíte-li Gitea uvnitř Dockeru, přečtěte si prosím pečlivě <a target="_blank" href="%s">návod</a>, než něco změníte na této stránce!
requite_db_desc=Gitea vyžaduje MySQL, PostgreSQL, SQLite3 nebo TiDB.
db_title=Nastavení databáze
db_type=Typ databáze
host=Hostitel
@@ -70,7 +70,7 @@ app_name_helper=Zde zadejte název vaší organizace velkým a tučným písmem!
repo_path=Kořenový adresář repositářů
repo_path_helper=Všechny vzdálené repositáře Gitu budou uloženy do tohoto adresáře.
run_user=Účet pro spouštění
run_user_helper=Tento uživatel musí mít přístup do kořenového adresáře repositářů a právo spustit Gogs.
run_user_helper=Tento uživatel musí mít přístup do kořenového adresáře repositářů a právo spustit Gitea.
domain=Doména
domain_helper=Toto ovlivňuje URL klonů skrze SSH.
ssh_port=Port SSH
@@ -110,15 +110,15 @@ admin_name=Uživatelské jméno
admin_password=Heslo
confirm_password=Potvrdit heslo
admin_email=E-mailová adresa správce
install_gogs=Nainstalovat Gogs
install_gogs=Nainstalovat Gitea
test_git_failed=Chyba při testu příkazu 'git': %v
sqlite3_not_available=Vaše verze vydání Gogs nepodporuje SQLite3, prosíme stáhněte si oficiální binární balíček z %s, ne gobuild verzi.
sqlite3_not_available=Vaše verze vydání Gitea nepodporuje SQLite3, prosíme stáhněte si oficiální binární balíček z %s, ne gobuild verzi.
invalid_db_setting=Nastavení databáze není správné: %v
invalid_repo_path=Kořenový adresář repositáře není správný: %v
run_user_not_match=Uživatel pro spuštění není aktuální uživatel: %s -> %s
save_config_failed=Uložení konfigurace se nezdařilo: %v
invalid_admin_setting=Nastavení účtu správce není správné: %v
install_success=Vítejte! Jsme rádi, že jste si vybrali Gogs. Bavte se a opatrujte se.
install_success=Vítejte! Jsme rádi, že jste si vybrali Gitea. Bavte se a opatrujte se.
invalid_log_root_path=Kořenový adresář logů není správný: %v
[home]
@@ -126,7 +126,7 @@ uname_holder=Uživatelské jméno nebo e-mailová adresa
password_holder=Heslo
switch_dashboard_context=Přepnout kontext přehledu
my_repos=Mé repositáře
show_more_repos=Show more repositories...
show_more_repos=Zobrazit více repositářů...
collaborative_repos=Společné repositáře
my_orgs=Mé organizace
my_mirrors=Má zrcadla
@@ -151,7 +151,7 @@ forget_password=Zapomněli jste heslo?
sign_up_now=Potřebujete účet? Zaregistrujte se.
confirmation_mail_sent_prompt=Nový potvrzovací e-mail byl zaslán na <b>%s</b>, prosíme, zkontrolujte si vaši doručenou poštu během následující %d hodin pro dokončení registračního procesu.
active_your_account=Aktivujte si váš účet
prohibit_login=Login Prohibited
prohibit_login=Přihlášení zakázáno
prohibit_login_desc=Vašemu účtu je zakázáno se přihlásit, kontaktujte prosím správce webu.
resent_limit_prompt=Omlouváme se, ale před chvílí jste požádal o aktivační e-mail. Prosíme, počkejte 3 minuty a pak to zkuste znovu.
has_unconfirmed_mail=Zdravím, %s, máte nepotvrzenou e-mailovou adresu (<b>%s</b>). Pokud jste nedostali e-mail pro potvrzení nebo potřebujete zaslat nový, klikněte prosím na tlačítku níže.
@@ -162,7 +162,7 @@ reset_password=Obnova vašeho hesla
invalid_code=Omlouváme se, ale kód potvrzení vašeho účtu vypršel nebo není správný.
reset_password_helper=Klikněte zde pro obnovu vašeho hesla
password_too_short=Délka hesla musí být minimálně 6 znaků.
non_local_account=Non-local accounts cannot change passwords through Gogs.
non_local_account=Non-local accounts cannot change passwords through Gitea.
[mail]
activate_account=Prosíme, aktivujte si váš účet
@@ -190,11 +190,11 @@ AuthName=Název ověření
AdminEmail=E-mailová adresa správce
NewBranchName=Název nové větve
CommitSummary=Commit summary
CommitMessage=Commit message
CommitChoice=Commit choice
CommitSummary=Shrnutí revize
CommitMessage=Zpráva revize
CommitChoice=Výběr revize
TreeName=Cesta k souboru
Content=Content
Content=Obsah
require_error=` nemůže být prázdný.`
alpha_dash_error=` musí být pouze písmena, číslice či znaky - a _ .`
@@ -222,7 +222,7 @@ user_not_exist=Zadaný uživatel neexistuje.
last_org_owner=Odstranění posledního uživatele z týmu vlastníka není dovoleno, neboť vždy musí v každé organizaci existovat jeden vlastník.
invalid_ssh_key=Omlouváme se, ale není možné ověřit váš klíč SSH: %s
unable_verify_ssh_key=Gogs nemohl ověřit váš klíč SSH, ale předpokládáme, že je platný, nicméně zkontrolujte jej prosím.
unable_verify_ssh_key=Gitea nemohl ověřit váš klíč SSH, ale předpokládáme, že je platný, nicméně zkontrolujte jej prosím.
auth_failed=Ověření selhalo: %v
still_own_repo=Váš účet stále vlastní minimálně jeden repositář. Musíte je nejdříve smazat nebo předat.
@@ -232,7 +232,7 @@ org_still_own_repo=Tato organizace stále vlastní repositáře, musíte je nejd
target_branch_not_exist=Cílová větev neexistuje.
[user]
change_avatar=Change your avatar
change_avatar=Změnit vaši uživatelskou ikonu
join_on=Připojil se dne
repositories=Repositáře
activity=Veřejná aktivita
@@ -248,7 +248,7 @@ form.name_pattern_not_allowed=Vzor uživatelského jména '%s' není povolen.
[settings]
profile=Profil
password=Heslo
avatar=Avatar
avatar=Uživatelská ikona
ssh_keys=Klíče SSH
social=Sociální účty
applications=Aplikace
@@ -269,7 +269,7 @@ change_username_prompt=Tato změna ovlivní vztah odkazů k vašemu účtu.
continue=Pokračovat
cancel=Zrušit
lookup_avatar_by_mail=Vyhledávat Avatar podle emailu
lookup_avatar_by_mail=Vyhledávat uživatelskou ikonu podle emailu
federated_avatar_lookup=Federated Avatar Lookup
enable_custom_avatar=Povolit uživatelskou ikonu uživatele
choose_new_avatar=Vybrat novou ikonu uživatele
@@ -327,7 +327,7 @@ unbind_success=Sociální účet byl odpojen.
manage_access_token=Správa osobních přístupových poukázek
generate_new_token=Vygenerovat novou poukázku
tokens_desc=Poukázky, které jste vygeneroval, mohou být použity pro přístup k Gogs API.
tokens_desc=Poukázky, které jste vygeneroval, mohou být použity pro přístup k Gitea API.
new_token_desc=Každá poukázka má úplný přístup k vašemu účtu.
token_name=Název poukázky
generate_token=Vygenerovat poukázku
@@ -357,7 +357,7 @@ fork_from=Rozštěpit z
fork_visiblity_helper=Nemůžete změnit viditelnost repositáře rozštěpení.
repo_desc=Popis
repo_lang=Jazyk
repo_gitignore_helper=Select .gitignore templates
repo_gitignore_helper=Vyberte šablony .gitignore
license=Licence
license_helper=Vyberte licenční soubor
readme=Soubor README
@@ -365,12 +365,12 @@ readme_helper=Vyberte šablonu souboru README
auto_init=Inicializovat tento repositář s vybranými soubory a šablonou
create_repo=Vytvořit repositář
default_branch=Výchozí větev
mirror_prune=Prune
mirror_prune=Vyčistit
mirror_prune_desc=Remove any remote-tracking references that no longer exist on the remote
mirror_interval=Odstup zrcadlení (hodina)
mirror_address=Adresa zrcadla
mirror_address_desc=Prosím, přidejte do adresy potřebné přihlašovací údaje.
mirror_last_synced=Last Synced
mirror_last_synced=Naposledy synchronizováno
watchers=Sledující
stargazers=Sledující
forks=Rozštěpení
@@ -427,33 +427,33 @@ file_view_raw=Zobrazit v surovém stavu
file_permalink=Trvalý odkaz
file_too_large=Tento soubor je příliš velký pro zobrazení
editor.new_file=New file
editor.upload_file=Upload file
editor.edit_file=Edit file
editor.preview_changes=Preview Changes
editor.new_file=Nový soubor
editor.upload_file=Nahrát soubor
editor.edit_file=Upravit soubor
editor.preview_changes=Náhled změn
editor.cannot_edit_non_text_files=Netextové soubory není možné upravovat
editor.edit_this_file=Edit this file
editor.must_be_on_a_branch=You must be on a branch to make or propose changes to this file
editor.fork_before_edit=You must fork this repository before editing the file
editor.edit_this_file=Upravit tento soubor
editor.must_be_on_a_branch=Musíte mít zvolenu větev pro úpravu či návrh změn tohoto souboru
editor.fork_before_edit=Musíte provést rozvětvení repositáře před úpravou souboru
editor.delete_this_file=Odstranit tento soubor
editor.must_have_write_access=Musíte mít přístup pro zápis pro dělání či navrhování změn tohoto souboru
editor.file_delete_success=Soubor '%s' byl úspěšně odstraněn!
editor.name_your_file=Name your file...
editor.name_your_file=Pojmenujte váš soubor...
editor.filename_help=To add directory, just type it and press /. To remove a directory, go to the beginning of the field and press backspace.
editor.or=nebo
editor.cancel_lower=cancel
editor.commit_changes=Commit Changes
editor.add_tmpl=Add '%s/<filename>'
editor.add=Add '%s'
editor.cancel_lower=zrušit
editor.commit_changes=Uložit změny revize
editor.add_tmpl=Přidat '%s/<nazev_souboru>'
editor.add=Přidat '%s'
editor.update=Aktualizovat "%s"
editor.delete=Delete '%s'
editor.commit_message_desc=Add an optional extended description...
editor.commit_directly_to_this_branch=Commit directly to the <strong class="branch-name">%s</strong> branch.
editor.create_new_branch=Create a <strong>new branch</strong> for this commit and start a pull request.
editor.delete=Smazat '%s'
editor.commit_message_desc=Přidat dobrovolný rozšířený popis...
editor.commit_directly_to_this_branch=Uložte změny revize přímo do větve <strong class="branch-name">%s</strong>.
editor.create_new_branch=Vytvořit <strong>novou větev</strong> pro tuto revizi a spustit požadavek na stažení.
editor.new_branch_name_desc=Nový název větve...
editor.cancel=Zrušit
editor.filename_cannot_be_empty=Filename cannot be empty.
editor.branch_already_exists=Branch '%s' already exists in this repository.
editor.filename_cannot_be_empty=Název souboru nemůže být prázdný.
editor.branch_already_exists=Repositář větev '%s' již obsahuje.
editor.directory_is_a_file=Entry '%s' in the parent path is a file not a directory in this repository.
editor.filename_is_a_directory=The filename '%s' is an existing directory in this repository.
editor.file_editing_no_longer_exists=The file '%s' you are editing no longer exists in the repository.
@@ -461,9 +461,9 @@ editor.file_changed_while_editing=Obsah souboru se změnil od začátku úprav.
editor.file_already_exists=A file with name '%s' already exists in this repository.
editor.no_changes_to_show=There are no changes to show.
editor.fail_to_update_file=Failed to update/create file '%s' with error: %v
editor.add_subdir=Add subdirectory...
editor.unable_to_upload_files=Failed to upload files to '%s' with error: %v
editor.upload_files_to_dir=Upload files to '%s'
editor.add_subdir=Přidat podadresář...
editor.unable_to_upload_files=Nepodařilo se nahrát soubor '%s'. Chyba: %v
editor.upload_files_to_dir=Nahrát soubory do '%s'
commits.commits=Revize
commits.search=Hledání revizí
@@ -490,11 +490,11 @@ issues.create=Vytvořit úkol
issues.new_label=Nový štítek
issues.new_label_placeholder=Název štítku...
issues.create_label=Vytvořit štítek
issues.label_templates.title=Load a predefined set of labels
issues.label_templates.info=There arent any labels yet. You can click on the "New Label" button above to create one or use a predefined set below.
issues.label_templates.helper=Select a label set
issues.label_templates.use=Use this label set
issues.label_templates.fail_to_load_file=Failed to load label template file '%s': %v
issues.label_templates.title=Nahrát předdefinovanou sadu značek
issues.label_templates.info=Nejsou zadány žádné značky. Pro vytvoření nové klikněte na tlačítko Nová značka nebo použijte předdefinovanou sadu.
issues.label_templates.helper=Vyberte sadu značek
issues.label_templates.use=Použít tuto sadu značek
issues.label_templates.fail_to_load_file=Nepodařilo se nahrát soubor šablony značek '%s': %v
issues.open_tab=%d otevřených
issues.close_tab=%d zavřených
issues.filter_label=Štítek
@@ -522,8 +522,8 @@ issues.next=Další
issues.open_title=otevřený
issues.closed_title=zavřený
issues.num_comments=%d komentářů
issues.commented_at=`commented <a href="#%s">%s</a>`
issues.delete_comment_confirm=Are you sure you want to delete this comment?
issues.commented_at=`okomentoval <a href="#%s">%s</a>`
issues.delete_comment_confirm=Jste si jist, že chcete smazat tento komentář?
issues.no_content=Není zde žádný obsah.
issues.close_issue=Zavřít
issues.close_comment_issue=Okomentovat a zavřít
@@ -536,7 +536,7 @@ issues.commit_ref_at=`odkázal na tento úkol z revize <a id="%[1]s" href="#%[1]
issues.poster=Autor
issues.collaborator=Spolupracovník
issues.owner=Vlastník
issues.sign_in_require_desc=<a href="%s">Sign in</a> to join this conversation.
issues.sign_in_require_desc=<a href="%s">Přihlašte se</a> pro zapojení do konverzace.
issues.edit=Upravit
issues.cancel=Zrušit
issues.save=Uložit
@@ -551,8 +551,8 @@ issues.label_deletion=Smazání štítku
issues.label_deletion_desc=Smazání tohoto štítku jej smaže také ze všech návazných úkolech. Chcete pokračovat?
issues.label_deletion_success=Štítek byl úspěšně smazán!
issues.num_participants=%d účastníků
issues.attachment.open_tab=`Click to see "%s" in a new tab`
issues.attachment.download=`Click to download "%s"`
issues.attachment.open_tab=`Klikněte pro zobrazení "%s" v nové záložce`
issues.attachment.download=`Klikněte pro stažení "%s"`
pulls.new=Nový požadavek na natažení
pulls.compare_changes=Porovnat změny
@@ -625,32 +625,32 @@ wiki.last_updated=Naposledy aktualizováno: %s
settings=Nastavení
settings.options=Možnosti
settings.collaboration=Spolupráce
settings.collaboration.admin=Admin
settings.collaboration.write=Write
settings.collaboration.read=Read
settings.collaboration.undefined=Undefined
settings.collaboration.admin=Správce
settings.collaboration.write=Zápis
settings.collaboration.read=Čtení
settings.collaboration.undefined=Neurčeno
settings.hooks=Webové háčky
settings.githooks=Háčky Gitu
settings.basic_settings=Základní nastavení
settings.mirror_settings=Mirror Settings
settings.sync_mirror=Sync Now
settings.mirror_sync_in_progress=Mirror syncing is in progress, please refresh page in about a minute.
settings.mirror_settings=Nastavení zrcadla
settings.sync_mirror=Provést synchronizaci
settings.mirror_sync_in_progress=Synchronizace zrcadel probíhá, prosím načtěte znovu stránku přibližně za minutu.
settings.site=Oficiální stránky
settings.update_settings=Změnit nastavení
settings.change_reponame_prompt=Tato změna ovlivní vztah odkazů k repositáři.
settings.advanced_settings=Pokročilá nastavení
settings.wiki_desc=Enable wiki system
settings.use_internal_wiki=Use builtin wiki
settings.wiki_desc=Povolit systém Wiki
settings.use_internal_wiki=Použít vestavěný systém Wiki
settings.use_external_wiki=Používat externí Wiki
settings.external_wiki_url=URL externí Wiki
settings.external_wiki_url_desc=Návštěvníci budou při kliknutí na záložku přesměrování na tuto URL.
settings.issues_desc=Enable issue tracker
settings.use_internal_issue_tracker=Use builtin lightweight issue tracker
settings.issues_desc=Povolit systém úkolů
settings.use_internal_issue_tracker=Povolit věstavěný odlehčený systém úkolů
settings.use_external_issue_tracker=Použít externí systém úkolů
settings.tracker_url_format=Formát URL externího systému úkolů
settings.tracker_issue_style=External Issue Tracker Naming Style:
settings.tracker_issue_style.numeric=Numeric
settings.tracker_issue_style.alphanumeric=Alphanumeric
settings.tracker_issue_style=Styl pojmenování externího systému úkolů:
settings.tracker_issue_style.numeric=Číselný
settings.tracker_issue_style.alphanumeric=Alfanumeric
settings.tracker_url_format_desc=Můžete použít zástupné výrazy <code>{user} {repo} {index}</code> pro uživatelské jméno, název repositáře a index úkolu.
settings.pulls_desc=Povolit požadavky na stažení, aby veřejné příspěvky mohly být akceptovány
settings.danger_zone=Nebezpečná zóna
@@ -690,7 +690,7 @@ settings.search_user_placeholder=Hledat uživatele...
settings.org_not_allowed_to_be_collaborator=Není dovoleno přidat organizaci jako spolupracovníka.
settings.user_is_org_member=Uživatel je již členem organizace, tudíž nemůže být přidán jako spolupracovník.
settings.add_webhook=Přidat webový háček
settings.hooks_desc=Webové háčky jsou podobné základním spouštím HTTP POST událostí. Kdykoliv se něco stane v Gogs, bude postaráno o oznámení specifikovanému cílovému serveru. Více se o daném dozvíte v <a target="_blank" href="%s">příručce webových háčků</a>.
settings.hooks_desc=Webové háčky jsou podobné základním spouštím HTTP POST událostí. Kdykoliv se něco stane v Gitea, bude postaráno o oznámení specifikovanému cílovému serveru. Více se o daném dozvíte v <a target="_blank" href="%s">příručce webových háčků</a>.
settings.webhook_deletion=Smazat webový háček
settings.webhook_deletion_desc=Smazáním tohoto webového háčku dojte také ke smazání veškerých informací o něm a také historie volání. Chcete pokračovat?
settings.webhook_deletion_success=Webový háček byl úspěšně smazán!
@@ -707,7 +707,7 @@ settings.githook_edit_desc=Je-li háček neaktivní, bude zobrazen vzorový obsa
settings.githook_name=Název háčku
settings.githook_content=Obsah háčku
settings.update_githook=Upravit háček
settings.add_webhook_desc=Gogs zašle požadavek typu <code>POST</code> na zadanou URL, společně s informacemi o události, která nastala. Můžete také specifikovat, jaký datový formát se má použít po spuštění daného háčku (JSON, x-www-form-urlencoded, XML atp.). Více informací je k nalezení v našem <a target="_blank" href="%s">Návodu na webové háčky</a>.
settings.add_webhook_desc=Gitea zašle požadavek typu <code>POST</code> na zadanou URL, společně s informacemi o události, která nastala. Můžete také specifikovat, jaký datový formát se má použít po spuštění daného háčku (JSON, x-www-form-urlencoded, XML atp.). Více informací je k nalezení v našem <a target="_blank" href="%s">Návodu na webové háčky</a>.
settings.payload_url=URL obsahu
settings.content_type=Typ obsahu
settings.secret=Tajný klíč
@@ -720,7 +720,7 @@ settings.event_send_everything=Potřebuji <strong>vše</strong>.
settings.event_choose=Nech mne vybrat, co potřebuji.
settings.event_create=Vytvořit
settings.event_create_desc=Větev nebo značka byla vytvořena
settings.event_pull_request=Pull Request
settings.event_pull_request=Požadavek na stažení
settings.event_pull_request_desc=Pull request opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, or synchronized.
settings.event_push=Nahrát
settings.event_push_desc=Nahrání pomocí Gitu do repositáře
@@ -760,7 +760,7 @@ diff.stats_desc=<strong> %d změnil soubory</strong>, kde provedl <strong>%d př
diff.bin=binární
diff.view_file=Zobrazit soubor
diff.file_suppressed=File diff suppressed because it is too large
diff.too_many_files=Some files were not shown because too many files changed in this diff
diff.too_many_files=Některé soubory nejsou zobrazny, neboť je v této revizi změněno mnoho souborů
release.releases=Vydání
release.new_release=Nové vydání
@@ -791,7 +791,7 @@ release.deletion=Smazání vydání
release.deletion_desc=Smazáním tohoto vydání se také smaže odpovídající značka. Chcete pokračovat?
release.deletion_success=Vydání bylo úspěšně smazáno!
release.tag_name_already_exist=Vydání s touto značkou již existuje.
release.tag_name_invalid=Tag name is not valid.
release.tag_name_invalid=Název štítku není platný.
release.downloads=Soubory ke stažení
[org]
@@ -889,7 +889,7 @@ total=Celkem: %d
dashboard.statistic=Statistika
dashboard.operations=Operace
dashboard.system_status=Stav sledování systému
dashboard.statistic_info=Databáze Gogs obsahuje <b>%d</b> uživatelů, <b>%d</b> organizací, <b>%d</b> veřejných klíčů, <b>%d</b> repositářů, <b>%d</b> hlídání, <b>%d</b> oblíbení, <b>%d</b> akcí, <b>%d</b> přístupů, <b>%d</b> úkolů, <b>%d</b> komentářů, <b>%d</b> sociálních účtů, <b>%d</b> sledování, <b>%d</b> zrcadel, <b>%d</b> vydání, <b>%d</b> zdrojů přihlášení, <b>%d</b> webových háčků, <b>%d</b> milníků, <b>%d</b> štítků, <b>%d</b> háčků, <b>%d</b> týmů, <b>%d</b> úkolu změn, <b>%d</b> příloh.
dashboard.statistic_info=Databáze Gitea obsahuje <b>%d</b> uživatelů, <b>%d</b> organizací, <b>%d</b> veřejných klíčů, <b>%d</b> repositářů, <b>%d</b> hlídání, <b>%d</b> oblíbení, <b>%d</b> akcí, <b>%d</b> přístupů, <b>%d</b> úkolů, <b>%d</b> komentářů, <b>%d</b> sociálních účtů, <b>%d</b> sledování, <b>%d</b> zrcadel, <b>%d</b> vydání, <b>%d</b> zdrojů přihlášení, <b>%d</b> webových háčků, <b>%d</b> milníků, <b>%d</b> štítků, <b>%d</b> háčků, <b>%d</b> týmů, <b>%d</b> úkolu změn, <b>%d</b> příloh.
dashboard.operation_name=Název operace
dashboard.operation_switch=Přepnout
dashboard.operation_run=Spustit
@@ -903,7 +903,7 @@ dashboard.delete_missing_repos=Smazat všechny záznamy repositářů, které zt
dashboard.delete_missing_repos_success=Všechny repositáře, které ztratily soubory Gity, byly úspěšně smazány.
dashboard.git_gc_repos=Provést úklid nad repositáři
dashboard.git_gc_repos_success=Úklid nad všemi repositáři byl úspěšně proveden.
dashboard.resync_all_sshkeys=Přepsat soubor '.ssh/authorized_keys' (upozornění: klíče nevzniklé v Gogs budou ztraceny)
dashboard.resync_all_sshkeys=Přepsat soubor '.ssh/authorized_keys' (upozornění: klíče nevzniklé v Gitea budou ztraceny)
dashboard.resync_all_sshkeys_success=Všechny veřejné klíče byly úspěšně přepsány.
dashboard.resync_all_update_hooks=Přepsat háček úprav všech repositářů (potřebný v momentě změny cesty k uživatelskému konfiguračnímu souboru)
dashboard.resync_all_update_hooks_success=Háček úprav všech repositářů byl úspěšně přepsán.
@@ -959,7 +959,7 @@ users.edit_account=Upravit účet
users.max_repo_creation=Limit počtu vytvořených repositářů
users.max_repo_creation_desc=(Nastavte na -1 pro použití výchozího systémového limitu)
users.is_activated=Tento účet je aktivován
users.prohibit_login=This account is prohibited to login
users.prohibit_login=Tento účet má zakázáno přihlášení
users.is_admin=Tento účet je správce
users.allow_git_hook=Tento účet má právo vytváře háčky Gitu
users.allow_import_local=Tento účet má právo importovat místní repositáře
@@ -990,7 +990,7 @@ auths.enabled=Povolený
auths.updated=Upravený
auths.auth_type=Typ ověření
auths.auth_name=Název ověření
auths.security_protocol=Security Protocol
auths.security_protocol=Protokol zabezpečení
auths.domain=Doména
auths.host=Server
auths.port=Port
@@ -1115,17 +1115,17 @@ config.picture_service=Služba ikon uživatelů
config.disable_gravatar=Zakázat službu Gravatar
config.enable_federated_avatar=Enable Federated Avatars
config.git_config=Git Configuration
config.git_disable_diff_highlight=Disable Diff Syntax Highlight
config.git_max_diff_lines=Max Diff Lines (for a single file)
config.git_max_diff_line_characters=Max Diff Characters (for a single line)
config.git_max_diff_files=Max Diff Files (to be shown)
config.git_gc_args=GC Arguments
config.git_migrate_timeout=Migration Timeout
config.git_mirror_timeout=Mirror Update Timeout
config.git_clone_timeout=Clone Operation Timeout
config.git_pull_timeout=Pull Operation Timeout
config.git_gc_timeout=GC Operation Timeout
config.git_config=Konfigurace Gitu
config.git_disable_diff_highlight=Zakázat zvýraznění syntaxe v rozdílovém zobrazení
config.git_max_diff_lines=Maximální počet rozdílových řádků jednoho souboru
config.git_max_diff_line_characters=Maximální počet zobrazených rozdílových znaků
config.git_max_diff_files=Maximální počet zobrazených rozdílových souborů
config.git_gc_args=Parametry GC
config.git_migrate_timeout=Časový limit migrace
config.git_mirror_timeout=Časový limit aktualizace zrcadla
config.git_clone_timeout=Časový limit operace naklonování
config.git_pull_timeout=Časový limit operace stažení
config.git_gc_timeout=Časový limit operace GC
config.log_config=Nastavení logů
config.log_mode=Způsob logování

View File

@@ -47,8 +47,8 @@ cancel=Abbrechen
[install]
install=Installation
title=Installationsschritte für den ersten Start
docker_helper=Wenn Gogs innerhalb von Docker läuft, lesen Sie sich bitte den <a target="_blank" href="%s">Leitfaden</a> genau durch, bevor Sie irgendwas auf dieser Seite ändern!
requite_db_desc=Gogs benötigt MySQL, PostgreSQL, SQLite3 oder TiDB.
docker_helper=Wenn Gitea innerhalb von Docker läuft, lesen Sie sich bitte den <a target="_blank" href="%s">Leitfaden</a> genau durch, bevor Sie irgendwas auf dieser Seite ändern!
requite_db_desc=Gitea benötigt MySQL, PostgreSQL, SQLite3 oder TiDB.
db_title=Datenbankeinstellungen
db_type=Datenbanktyp
host=Host
@@ -58,7 +58,7 @@ db_name=Datenbankname
db_helper=Bitte verwenden Sie in MySQL die InnoDB-Engine mit dem Zeichensatz utf8_general_ci.
ssl_mode=SSL-Modus
path=Pfad
sqlite_helper=Der Dateipfad zur SQLite3- oder TiDB-Datenbank. <br>Bitte verwenden Sie einen absoluten Pfad, wenn Gogs als Service gestartet wird.
sqlite_helper=Der Dateipfad zur SQLite3- oder TiDB-Datenbank. <br>Bitte verwenden Sie einen absoluten Pfad, wenn Gitea als Service gestartet wird.
err_empty_db_path=SQLite3 oder TiDB Datenbankpfad darf nicht leer sein.
err_invalid_tidb_name=Der TiDB Datenbankname darf nicht "." und "-" enthalten.
no_admin_and_disable_registration=Sie können die Registrierung nicht deaktivieren, ohne ein Administratorkonto zu erstellen.
@@ -70,13 +70,13 @@ app_name_helper=Hier den Namen der Organisation einfügen!
repo_path=Repository-Verzeichnis
repo_path_helper=Alle Git-Repositories werden in diesem Verzeichnis gespeichert.
run_user=Ausführender Benutzer
run_user_helper=Der Benutzer muss die Zugriffsberechtigung für das Repository-Verzeichnis haben und der ausführende Benutzer von Gogs sein.
run_user_helper=Der Benutzer muss die Zugriffsberechtigung für das Repository-Verzeichnis haben und der ausführende Benutzer von Gitea sein.
domain=Domain
domain_helper=Dies hat Auswirkung auf die SSH Klon-URLs.
ssh_port=SSH Port
ssh_port_helper=Der Port Ihres SSH-Servers. Leer lassen um SSH zu deaktivieren.
http_port=HTTP Port
http_port_helper=Auf dieser Port Nummer wird Gogs erreichbar sein.
http_port_helper=Auf diesem Port wird Gitea erreichbar sein.
app_url=Anwendungs-URL
app_url_helper=Dies hat Auswirkung auf die HTTP/HTTPS Klon-URLs und den Inhalt der E-Mails.
log_root_path=Logdateipfad
@@ -110,15 +110,15 @@ admin_name=Benutzername
admin_password=Passwort
confirm_password=Passwort bestätigen
admin_email=Administrator E-Mail
install_gogs=Gogs installieren
install_gogs=Gitea installieren
test_git_failed=Fehler beim Test des 'git' Kommandos: %v
sqlite3_not_available=Ihre Gogs-Version unterstützt SQLite3 nicht. Bitte laden Sie die offizielle binäre Version von %s herunter, NICHT die gobuild-Version.
sqlite3_not_available=Ihre Gitea-Version unterstützt SQLite3 nicht. Bitte laden Sie die offizielle binäre Version von %s herunter, NICHT die gobuild-Version.
invalid_db_setting=Datenbankeinstellungen sind nicht korrekt: %v
invalid_repo_path=Repository Verzeichnis ist ungültig: %v
run_user_not_match=Der ausführende Benutzer ist nicht der aktuelle Benutzer: %s -> %s
save_config_failed=Fehler beim Speichern der Konfiguration: %v
invalid_admin_setting=Admin-Konto Einstellungen sind ungültig: %v
install_success=Herzlich Willkommen! Wir sind froh, dass Sie sich für Gogs entschieden haben. Wir wünschen viel Vergnügen damit.
install_success=Herzlich Willkommen! Wir sind froh, dass Sie sich für Gitea entschieden haben. Wir wünschen viel Vergnügen damit.
invalid_log_root_path=Pfad zum Log-Verzeichnis ist ungültig: %v
[home]
@@ -162,7 +162,7 @@ reset_password=Passwort zurücksetzen
invalid_code=Es tut uns leid, der Bestätigungscode ist abgelaufen oder ungültig.
reset_password_helper=Hier klicken, um das Passwort zurückzusetzen
password_too_short=Das Passwort muss mindenstens 6 Zeichen lang sein.
non_local_account=Nicht-lokale Konten können Passwörter nicht via Gogs ändern.
non_local_account=Nicht-lokale Konten können Passwörter nicht via Gitea ändern.
[mail]
activate_account=Bitte aktivieren Sie Ihr Konto
@@ -222,7 +222,7 @@ user_not_exist=Angegebener Benutzer existiert nicht.
last_org_owner=Entfernen des letzten Mitglieds aus einem Eigentümer-Team ist nicht zulässig, da es immer mindestens einen Eigentümer je Organisation geben muss.
invalid_ssh_key=Leider sind wir nicht in der Lage, Ihren SSH-Schlüssel zu überprüfen: %s
unable_verify_ssh_key=Gogs kann Ihren SSH-Schlüssel nicht überprüfen, nimmt aber an, dass er gültig ist. Bitte stellen Sie dies selbst sicher.
unable_verify_ssh_key=Gitea kann Ihren SSH-Schlüssel nicht überprüfen, nimmt aber an, dass er gültig ist. Bitte stellen Sie dies selbst sicher.
auth_failed=Authentifizierung fehlgeschlagen: %v
still_own_repo=Ihr Konto besitzt noch Repositories. Diese müssen zuerst gelöscht oder übertragen werden.
@@ -327,7 +327,7 @@ unbind_success=Die Verknüpfung zum sozialen Konto wurde entfernt.
manage_access_token=Verwaltung persönlicher Zugangs-Token
generate_new_token=Neuen Token erzeugen
tokens_desc=Die von Ihnen erzeugten Token können zum Zugriff auf die Gogs-API verwendet werden.
tokens_desc=Die von Ihnen erzeugten Token können zum Zugriff auf die Gitea-API verwendet werden.
new_token_desc=Jeder Token erlaubt vollen Zugriff auf ihr Konto.
token_name=Token-Name
generate_token=Token generieren
@@ -432,31 +432,31 @@ editor.upload_file=Datei hochladen
editor.edit_file=Datei bearbeiten
editor.preview_changes=Vorschau der Änderungen
editor.cannot_edit_non_text_files=Nicht-Text Dateien können nicht bearbeitet werden
editor.edit_this_file=Diese Datei bearbeiten
editor.must_be_on_a_branch=Du musst dich in einer Branch befinden um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen
editor.fork_before_edit=Um die Datei zu bearbeiten müssen Sie das Repository forken
editor.delete_this_file=Diese Datei löschen
editor.must_have_write_access=Du musst Schreibzugriff haben um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen
editor.edit_this_file=Datei bearbeiten
editor.must_be_on_a_branch=Sie müssen sich in einem Branch befinden, um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen
editor.fork_before_edit=Um die Datei zu bearbeiten, müssen Sie das Repository forken
editor.delete_this_file=Datei löschen
editor.must_have_write_access=Du musst Schreibzugriff haben, um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen
editor.file_delete_success=Die Datei '%s' wurde erfolgreich gelöscht!
editor.name_your_file=Dateinamen eingeben...
editor.filename_help=Um einen Ordner hinzuzufügen, gib den Namen ein und drücke /. Um einen Ordner zu entfernen, gehe zum Anfang des Feldes und drücke auf die Rücktaste.
editor.or=oder
editor.cancel_lower=abbrechen
editor.commit_changes=Änderungen im Commit
editor.commit_changes=Änderungen einchecken
editor.add_tmpl=Hinzufügen von '%s/<filename>'
editor.add='%s' hinzufügen
editor.update='%s' ändern
editor.delete='%s' löschen
editor.commit_message_desc=Eine optionale, erweiterte Commit Beschreibung...
editor.commit_directly_to_this_branch=Änderungen direkt dem Branch <strong class="branch-name">%s</strong> hinzufügen.
editor.create_new_branch=Erstellen Sie einen <strong>neuen Branch</strong> für diesen Commit und starten Sie einen Pull Request.
editor.commit_message_desc=Eine ausführlichere Beschreibung kann hinzugefügt werden...
editor.commit_directly_to_this_branch=Direkt in den <strong class="branch-name">%s</strong> Branch einchecken.
editor.create_new_branch=Einen <strong>neuen Branch</strong> für diesen Commit erstellen und einen Pull Request starten.
editor.new_branch_name_desc=Neuer Branch Name...
editor.cancel=Abbrechen
editor.filename_cannot_be_empty=Der Dateiname darf nicht leer sein.
editor.branch_already_exists=Branch '%s' existiert bereits in diesem Repository.
editor.directory_is_a_file='%s' im übergeordneten Verzeichnis ist eine Datei und kein Verzeichnis.
editor.filename_is_a_directory=Die Datei '%s' existiert bereits als Verzeichnis in diesem Repository.
editor.file_editing_no_longer_exists=Die Datei '%s' welche Sie bearbeiten existiert in diesem Repository nicht mehr.
editor.file_editing_no_longer_exists=Die Datei '%s', welche Sie bearbeiten, existiert in diesem Repository nicht mehr.
editor.file_changed_while_editing=Seit dem Start der Bearbeitung hat sich die Datei geändert. <a target="_blank" href="%s">Hier klicken</a> um die Änderungen zu sehen, oder nochmals <strong>Commit drücken</strong> um die Änderungen zu überschreiben.
editor.file_already_exists=Eine Datei mit dem Namen '%s' existiert bereits in diesem Repository.
editor.no_changes_to_show=Keine Änderungen vorhanden.
@@ -536,7 +536,7 @@ issues.commit_ref_at=`hat dieses Issue <a id="%[1]s" href="#%[1]s">%[2]s</a> aus
issues.poster=Ersteller
issues.collaborator=Mitarbeiter
issues.owner=Besitzer
issues.sign_in_require_desc=<a href="%s">Anmelden</a> um an der Diskussion teilzunehmen.
issues.sign_in_require_desc=<a href="%s">Anmelden</a>, um an der Diskussion teilzunehmen.
issues.edit=Bearbeiten
issues.cancel=Abbrechen
issues.save=Speichern
@@ -593,7 +593,7 @@ milestones.title=Titel
milestones.desc=Beschreibung
milestones.due_date=Fälligkeitsdatum (optional)
milestones.clear=Feld leeren
milestones.invalid_due_date_format=Format des Fälligkeitsdatums ist ungültig. Es muss das Format 'JJJJ-mm-dd' haben.
milestones.invalid_due_date_format=Format des Fälligkeitsdatums ist ungültig. Es muss das Format 'JJJJ-MM-TT' haben.
milestones.create_success=Meilenstein '%s' wurde erfolgreich erstellt!
milestones.edit=Meilenstein bearbeiten
milestones.edit_subheader=Verwenden Sie eine aussagekräftige Beschreibung für Meilensteine, um Missverständnisse zu vermeiden.
@@ -690,7 +690,7 @@ settings.search_user_placeholder=Benutzer suchen...
settings.org_not_allowed_to_be_collaborator=Eine Organisation kann nicht als Mitarbeiter hinzugefügt werden.
settings.user_is_org_member=Benutzer ist ein Organisationsmitglied und kann nicht als Mitarbeiter hinzugefügt werden.
settings.add_webhook=Webhook hinzufügen
settings.hooks_desc=Webhooks erlauben es Ihnen, externe Dienste zu informieren, wenn etwas Bestimmtes in Ihrem Repository passiert. Gogs sendet dann einen POST-Request an alle angegebenen URLs. Erfahren Sie mehr in unserem <a target="_blank" href="%s">Webhooks Guide</a>.
settings.hooks_desc=Webhooks erlauben es Ihnen, externe Dienste zu informieren, wenn etwas Bestimmtes in Ihrem Repository passiert. Gitea sendet dann einen POST-Request an alle angegebenen URLs. Erfahren Sie mehr in unserem <a target="_blank" href="%s">Webhooks Guide</a>.
settings.webhook_deletion=Webhook entfernen
settings.webhook_deletion_desc=Das Löschen dieses Webhooks wird alle zugehörigen Informationen und den Übertragungsverlauf entfernen. Wirklich fortfahren?
settings.webhook_deletion_success=Webhook wurde erfolgreich entfernt!
@@ -707,7 +707,7 @@ settings.githook_edit_desc=Wenn ein Hook inaktiv ist, wird der Standardinhalt be
settings.githook_name=Hook-Name
settings.githook_content=Hook-Inhalt
settings.update_githook=Hook aktualisieren
settings.add_webhook_desc=Gogs sendet einen <code>POST</code>-Request an die unten stehende URL mit Details aller abonnierten Ereignisse. Sie können auch angeben, welches Datenformat Sie empfangen wollen (JSON, <code>x-www-form-urlencoded</code>, <em>etc</em>). Mehr Informationen finden Sie im <a target="_blank" href="%s">Webhooks Guide</a>.
settings.add_webhook_desc=Gitea sendet einen <code>POST</code>-Request an die unten stehende URL mit Details aller abonnierten Ereignisse. Sie können auch angeben, welches Datenformat Sie empfangen wollen (JSON, <code>x-www-form-urlencoded</code>, <em>etc</em>). Mehr Informationen finden Sie im <a target="_blank" href="%s">Webhooks Guide</a>.
settings.payload_url=Payload URL
settings.content_type=Inhaltstyp
settings.secret=Secret
@@ -720,8 +720,8 @@ settings.event_send_everything=Ich brauche <strong>alles</strong>.
settings.event_choose=Lass mich auswählen, was ich brauche.
settings.event_create=Erstellen
settings.event_create_desc=Branch/Tag erstellt
settings.event_pull_request=Pull Request
settings.event_pull_request_desc=Pull-Request geöffnet, geschlossen, wieder geöffnet, bearbeitet, nicht zugewiesen, Label aktualisiert, Label gelöscht oder nicht synchronisiert.
settings.event_pull_request=Pull-Request
settings.event_pull_request_desc=Pull-Request geöffnet, geschlossen, wieder geöffnet, bearbeitet, zugewiesen, nicht zugewiesen, Label aktualisiert, Label gelöscht oder synchronisiert.
settings.event_push=Push
settings.event_push_desc=Git push auf ein Repository
settings.active=Aktiv
@@ -889,7 +889,7 @@ total=Gesamt: %d
dashboard.statistic=Statistik
dashboard.operations=Operationen
dashboard.system_status=Systemmonitor-Status
dashboard.statistic_info=Gogs Datenbank hat <b>%d</b> Benutzer, <b>%d</b> Organisationen, <b>%d</b> öffentliche Schlüssel, <b>%d</b> Repositories, <b>%d</b> Beobachtet, <b>%d</b> Favoriten, <b>%d</b> Aktionen, <b>%d</b> Zugriffe, <b>%d</b> Issues, <b>%d</b> Kommentare, <b>%d</b> Konten sozialer Medien, <b>%d</b> Folgende, <b>%d</b> Mirror, <b>%d</b> Releases, <b>%d</b> Login-Quellen, <b>%d</b> Webhooks, <b>%d</b> Meilensteine, <b>%d</b> Label, <b>%d</b> Hook-Tasks, <b>%d</b> Teams, <b>%d</b> Aktualisierungs-Tasks, <b>%d</b> Anhänge.
dashboard.statistic_info=Gitea Datenbank hat <b>%d</b> Benutzer, <b>%d</b> Organisationen, <b>%d</b> öffentliche Schlüssel, <b>%d</b> Repositories, <b>%d</b> Beobachtet, <b>%d</b> Favoriten, <b>%d</b> Aktionen, <b>%d</b> Zugriffe, <b>%d</b> Issues, <b>%d</b> Kommentare, <b>%d</b> Konten sozialer Medien, <b>%d</b> Folgende, <b>%d</b> Mirror, <b>%d</b> Releases, <b>%d</b> Login-Quellen, <b>%d</b> Webhooks, <b>%d</b> Meilensteine, <b>%d</b> Label, <b>%d</b> Hook-Tasks, <b>%d</b> Teams, <b>%d</b> Aktualisierungs-Tasks, <b>%d</b> Anhänge.
dashboard.operation_name=Name der Operation
dashboard.operation_switch=Wechseln
dashboard.operation_run=Ausführen
@@ -903,7 +903,7 @@ dashboard.delete_missing_repos=Alle Repository-Datensätze mit verlorenen gegang
dashboard.delete_missing_repos_success=Alle Repository-Datensätze, mit verlorenen Git-Dateien wurden erfolgreich gelöscht.
dashboard.git_gc_repos=Garbage Collection auf Repositories ausführen
dashboard.git_gc_repos_success=Garbage Collection wurde auf allen Repositories erfolgreich ausgeführt.
dashboard.resync_all_sshkeys=Datei '.ssh/authorized_keys' neu anlegen (Achtung: Schlüssel, die nicht zu Gogs gehören gehen verloren)
dashboard.resync_all_sshkeys=Datei '.ssh/authorized_keys' neu anlegen (Achtung: Schlüssel, die nicht zu Gitea gehören gehen verloren)
dashboard.resync_all_sshkeys_success=Alle öffentlichen Keys wurden erfolgreich neu geschrieben.
dashboard.resync_all_update_hooks=Alle Aktualisierungs-Hooks von Repositories neu anlegen (wird benötigt, wenn der angepasste Konfigurationspfad geändert wurde)
dashboard.resync_all_update_hooks_success=Die Hooks aller Repositories wurden erfolgreich neu angelegt.
@@ -915,9 +915,9 @@ dashboard.current_goroutine=Aktuelle Goroutines
dashboard.current_memory_usage=Aktuelle Speichernutzung
dashboard.total_memory_allocated=Zugeteilter Gesamtspeicher
dashboard.memory_obtained=Erhaltener Speicher
dashboard.pointer_lookup_times=Pointer Lookup Times
dashboard.memory_allocate_times=Memory Allocate Times
dashboard.memory_free_times=Memory Free Times
dashboard.pointer_lookup_times=Zeigerlookup-Dauer
dashboard.memory_allocate_times=Speicheranforderungsdauer
dashboard.memory_free_times=Speicherfreigabedauer
dashboard.current_heap_usage=Aktuelle Heap-Auslastung
dashboard.heap_memory_obtained=Erhaltener Heap-Memory
dashboard.heap_memory_idle=Unbenutzter Heap-Memory
@@ -938,7 +938,7 @@ dashboard.last_gc_time=Seit letztem GC-Zyklus
dashboard.total_gc_time=Gesamte GC-Pause
dashboard.total_gc_pause=Gesamte GC-Pause
dashboard.last_gc_pause=Letzte GC-Pause
dashboard.gc_times=GC-Takt
dashboard.gc_times=GC-Dauer
users.user_manage_panel=Benutzer
users.new_account=Neues Konto erstellen

View File

@@ -47,8 +47,8 @@ cancel = Cancel
[install]
install = Installation
title = Install Steps For First-time Run
docker_helper = If you're running Gogs inside Docker, please read <a target="_blank" href="%s">Guidelines</a> carefully before you change anything in this page!
requite_db_desc = Gogs requires MySQL, PostgreSQL, SQLite3 or TiDB.
docker_helper = If you're running Gitea inside Docker, please read <a target="_blank" href="%s">Guidelines</a> carefully before you change anything in this page!
requite_db_desc = Gitea requires MySQL, PostgreSQL, SQLite3 or TiDB.
db_title = Database Settings
db_type = Database Type
host = Host
@@ -70,7 +70,7 @@ app_name_helper = Put your organization name here huge and loud!
repo_path = Repository Root Path
repo_path_helper = All Git remote repositories will be saved to this directory.
run_user = Run User
run_user_helper = The user must have access to Repository Root Path and run Gogs.
run_user_helper = The user must have access to Repository Root Path and run Gitea.
domain = Domain
domain_helper = This affects SSH clone URLs.
ssh_port = SSH Port
@@ -110,7 +110,7 @@ admin_name = Username
admin_password = Password
confirm_password = Confirm Password
admin_email = Admin Email
install_gogs = Install Gogs
install_gogs = Install Gitea
test_git_failed = Fail to test 'git' command: %v
sqlite3_not_available = Your release version does not support SQLite3, please download the official binary version from %s, NOT the gobuild version.
invalid_db_setting = Database setting is not correct: %v
@@ -118,7 +118,7 @@ invalid_repo_path = Repository root path is invalid: %v
run_user_not_match = Run user isn't the current user: %s -> %s
save_config_failed = Fail to save configuration: %v
invalid_admin_setting = Admin account setting is invalid: %v
install_success = Welcome! We're glad that you chose Gogs, have fun and take care.
install_success = Welcome! We're glad that you chose Gitea, have fun and take care.
invalid_log_root_path = Log root path is invalid: %v
[home]
@@ -163,7 +163,7 @@ reset_password = Reset Your Password
invalid_code = Sorry, your confirmation code has expired or not valid.
reset_password_helper = Click here to reset your password
password_too_short = Password length cannot be less then 6.
non_local_account = Non-local accounts cannot change passwords through Gogs.
non_local_account = Non-local accounts cannot change passwords through Gitea.
[mail]
activate_account = Please activate your account
@@ -223,7 +223,7 @@ user_not_exist = Given user does not exist.
last_org_owner = Removing the last user from a owner team isn't allowed, as there must always be at least one owner in any given organization.
invalid_ssh_key = Sorry, we're not able to verify your SSH key: %s
unable_verify_ssh_key = Gogs cannot verify your SSH key, but we assume that it is valid, please double-check it.
unable_verify_ssh_key = Gitea cannot verify your SSH key, but we assume that it is valid, please double-check it.
auth_failed = Authentication failed: %v
still_own_repo = Your account still has ownership over at least one repository, you have to delete or transfer them first.
@@ -328,7 +328,7 @@ unbind_success = Social account has been unbound.
manage_access_token = Manage Personal Access Tokens
generate_new_token = Generate New Token
tokens_desc = Tokens you have generated that can be used to access the Gogs APIs.
tokens_desc = Tokens you have generated that can be used to access the Gitea APIs.
new_token_desc = Each token will have full access to your account.
token_name = Token Name
generate_token = Generate Token
@@ -492,7 +492,7 @@ issues.new_label = New Label
issues.new_label_placeholder = Label name...
issues.create_label = Create Label
issues.label_templates.title = Load a predefined set of labels
issues.label_templates.info = There arent any labels yet. You can click on the "New Label" button above to create one or use a predefined set below.
issues.label_templates.info = There aren't any labels yet. You can click on the "New Label" button above to create one or use a predefined set below.
issues.label_templates.helper = Select a label set
issues.label_templates.use = Use this label set
issues.label_templates.fail_to_load_file = Failed to load label template file '%s': %v
@@ -648,6 +648,8 @@ settings.external_wiki_url_desc = Visitors will be redirected to URL when they c
settings.issues_desc = Enable issue tracker
settings.use_internal_issue_tracker = Use builtin lightweight issue tracker
settings.use_external_issue_tracker = Use external issue tracker
settings.external_tracker_url = External Issue Tracker URL
settings.external_tracker_url_desc = Visitors will be redirected to URL when they click on the tab.
settings.tracker_url_format = External Issue Tracker URL Format
settings.tracker_issue_style = External Issue Tracker Naming Style:
settings.tracker_issue_style.numeric = Numeric
@@ -691,7 +693,7 @@ settings.search_user_placeholder = Search user...
settings.org_not_allowed_to_be_collaborator = Organization is not allowed to be added as a collaborator.
settings.user_is_org_member = User is organization member who cannot be added as a collaborator.
settings.add_webhook = Add Webhook
settings.hooks_desc = Webhooks are much like basic HTTP POST event triggers. Whenever something occurs in Gogs, we will handle the notification to the target host you specify. Learn more in this <a target="_blank" href="%s">Webhooks Guide</a>.
settings.hooks_desc = Webhooks are much like basic HTTP POST event triggers. Whenever something occurs in Gitea, we will handle the notification to the target host you specify. Learn more in this <a target="_blank" href="%s">Webhooks Guide</a>.
settings.webhook_deletion = Delete Webhook
settings.webhook_deletion_desc = Delete this webhook will remove its information and all delivery history. Do you want to continue?
settings.webhook_deletion_success = Webhook has been deleted successfully!
@@ -708,7 +710,7 @@ settings.githook_edit_desc = If the hook is inactive, sample content will be pre
settings.githook_name = Hook Name
settings.githook_content = Hook Content
settings.update_githook = Update Hook
settings.add_webhook_desc = Gogs will send a <code>POST</code> request to the URL you specify, along with regarding the event that occured. You can also specify what kind of data format you'd like to get upon triggering the hook (JSON, x-www-form-urlencoded, XML, etc). More information can be found in our <a target="_blank" href="%s">Webhooks Guide</a>.
settings.add_webhook_desc = Gitea will send a <code>POST</code> request to the URL you specify, along with regarding the event that occured. You can also specify what kind of data format you'd like to get upon triggering the hook (JSON, x-www-form-urlencoded, XML, etc). More information can be found in our <a target="_blank" href="%s">Webhooks Guide</a>.
settings.payload_url = Payload URL
settings.content_type = Content Type
settings.secret = Secret
@@ -890,7 +892,7 @@ total = Total: %d
dashboard.statistic = Statistic
dashboard.operations = Operations
dashboard.system_status = System Monitor Status
dashboard.statistic_info = Gogs database has <b>%d</b> users, <b>%d</b> organizations, <b>%d</b> public keys, <b>%d</b> repositories, <b>%d</b> watches, <b>%d</b> stars, <b>%d</b> actions, <b>%d</b> accesses, <b>%d</b> issues, <b>%d</b> comments, <b>%d</b> social accounts, <b>%d</b> follows, <b>%d</b> mirrors, <b>%d</b> releases, <b>%d</b> login sources, <b>%d</b> webhooks, <b>%d</b> milestones, <b>%d</b> labels, <b>%d</b> hook tasks, <b>%d</b> teams, <b>%d</b> update tasks, <b>%d</b> attachments.
dashboard.statistic_info = Gitea database has <b>%d</b> users, <b>%d</b> organizations, <b>%d</b> public keys, <b>%d</b> repositories, <b>%d</b> watches, <b>%d</b> stars, <b>%d</b> actions, <b>%d</b> accesses, <b>%d</b> issues, <b>%d</b> comments, <b>%d</b> social accounts, <b>%d</b> follows, <b>%d</b> mirrors, <b>%d</b> releases, <b>%d</b> login sources, <b>%d</b> webhooks, <b>%d</b> milestones, <b>%d</b> labels, <b>%d</b> hook tasks, <b>%d</b> teams, <b>%d</b> update tasks, <b>%d</b> attachments.
dashboard.operation_name = Operation Name
dashboard.operation_switch = Switch
dashboard.operation_run = Run
@@ -904,7 +906,7 @@ dashboard.delete_missing_repos = Delete all repository records that lost Git fil
dashboard.delete_missing_repos_success = All repository records that lost Git files have been deleted successfully.
dashboard.git_gc_repos = Do garbage collection on repositories
dashboard.git_gc_repos_success = All repositories have done garbage collection successfully.
dashboard.resync_all_sshkeys = Rewrite '.ssh/authorized_keys' file (caution: non-Gogs keys will be lost)
dashboard.resync_all_sshkeys = Rewrite '.ssh/authorized_keys' file (caution: non-Gitea keys will be lost)
dashboard.resync_all_sshkeys_success = All public keys have been rewritten successfully.
dashboard.resync_all_update_hooks = Rewrite all update hook of repositories (needed when custom config path is changed)
dashboard.resync_all_update_hooks_success = All repositories' update hook have been rewritten successfully.
@@ -948,6 +950,8 @@ users.activated = Activated
users.admin = Admin
users.repos = Repos
users.created = Created
users.last_login = Last Login
users.never_login = Never Login
users.send_register_notify = Send Registration Notification To User
users.new_success = New account '%s' has been created successfully.
users.edit = Edit
@@ -1169,7 +1173,7 @@ close_pull_request = `closed pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
reopen_pull_request = `reopened pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
comment_issue = `commented on issue <a href="%s/issues/%s">%s#%[2]s</a>`
merge_pull_request = `merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
transfer_repo = transfered repository <code>%s</code> to <a href="%s">%s</a>
transfer_repo = transferred repository <code>%s</code> to <a href="%s">%s</a>
push_tag = pushed tag <a href="%s/src/%s">%[2]s</a> to <a href="%[1]s">%[3]s</a>
compare_commits = View comparison for these %d commits

View File

@@ -25,7 +25,7 @@ captcha=Captcha
repository=Repositorio
organization=Organización
mirror=Mirror
mirror=Réplica
new_repo=Nuevo repositorio
new_migrate=Nueva migración
new_mirror=Nueva réplica
@@ -47,8 +47,8 @@ cancel=Cancelar
[install]
install=Instalación
title=Pasos de la instalación por primera vez
docker_helper=Si está ejecutando Gogs usando Docker, ¡por favor lea <a target="_blank" href="%s"> estas pautas</a> antes de cambiar nada en esta página!
requite_db_desc=Gogs requiere una base de datos MySQL, PostgreSQL, SQLite3 o TiDB.
docker_helper=Si está ejecutando Gitea usando Docker, ¡por favor lea <a target="_blank" href="%s"> estas pautas</a> antes de cambiar nada en esta página!
requite_db_desc=Gitea requiere una base de datos MySQL, PostgreSQL, SQLite3 o TiDB.
db_title=Configuración de base de datos
db_type=Tipo de base de datos
host=Host
@@ -64,13 +64,13 @@ err_invalid_tidb_name=El nombre de la base de datos TiDB no puede contener los c
no_admin_and_disable_registration=No puede deshabilitar el registro sin crear una cuenta de administrador.
err_empty_admin_password=La contraseña de administrador no puede estar vacía.
general_title=Configuración General de Gogs
general_title=Configuración General de Gitea
app_name=Nombre de la aplicación
app_name_helper=Pon aquí el nombre de tu organización, ¡alto y claro!
repo_path=Ruta del repositorio de Raiz (Root)
repo_path_helper=Todos los repositorios remotos de Git se guardarán en este directorio.
run_user=Ejecutar como Usuario
run_user_helper=El usuario necesita tener acceso a la Ruta Raíz del Repositorio y ejecutar Gogs.
run_user_helper=El usuario necesita tener acceso a la Ruta Raíz del Repositorio y ejecutar Gitea.
domain=Dominio
domain_helper=Esto afecta a las URLs para clonar por SSH.
ssh_port=Puerto SSH
@@ -110,7 +110,7 @@ admin_name=Nombre de usuario
admin_password=Contraseña
confirm_password=Confirmar Contraseña
admin_email=Correo electrónico del administrador
install_gogs=Instalar Gogs
install_gogs=Instalar Gitea
test_git_failed=Fallo al probar el comando 'git': %v
sqlite3_not_available=Tu versión no soporta SQLite3, por favor descarga el binario oficial desde %s, NO la versión de gobuild.
invalid_db_setting=La configuración de la base de datos no es correcta: %v
@@ -118,7 +118,7 @@ invalid_repo_path=La ruta de la raíz del repositorio es inválida: %v
run_user_not_match=El usuario que está ejecutando la aplicación no es el usuario actual: %s -> %s
save_config_failed=Error al guardar la configuración: %v
invalid_admin_setting=La configuración de la cuenta de administración es inválida: %v
install_success=Bienvenido! Estamos encantados de que hayas escogido Gogs, diviértete y cuídate.
install_success=Bienvenido! Estamos encantados de que hayas escogido Gitea, diviértete y cuídate.
invalid_log_root_path=La ruta para los registros es inválida: %v
[home]
@@ -162,7 +162,7 @@ reset_password=Restablecer su contraseña
invalid_code=Lo sentimos, su código de confirmación ha expirado o no es valido.
reset_password_helper=Haga Clic aquí para restablecer su contraseña
password_too_short=La longitud de la contraseña no puede ser menor a 6.
non_local_account=Cuentas que no son locales no pueden cambiar las contraseñas a través de Gogs.
non_local_account=Cuentas que no son locales no pueden cambiar las contraseñas a través de Gitea.
[mail]
activate_account=Por favor, active su cuenta
@@ -190,11 +190,11 @@ AuthName=Nombre de autorización
AdminEmail=Correo electrónico del administrador
NewBranchName=Nuevo nombre de rama
CommitSummary=Commit summary
CommitMessage=Commit message
CommitChoice=Commit choice
TreeName=File path
Content=Content
CommitSummary=Resumen del commit
CommitMessage=Mensaje de commit
CommitChoice=Hacer commit de la elección
TreeName=Ruta del archivo
Content=Contenido
require_error=` no puede estar vacío.`
alpha_dash_error=` los caracteres deben ser Alfanumericos o dash(-_).`
@@ -222,7 +222,7 @@ user_not_exist=El usuario indicado no existe.
last_org_owner=El usuario que se intenta eliminar es el último miembro del equipo de propietarios. Debe existir otro propietario.
invalid_ssh_key=Lo sentimos, no somos capaces de verificar tu clave SSH: %s
unable_verify_ssh_key=Gogs no puede velificar tu clave SSH, pero asumimos que es válida. Por favor, asegúrate de que es así.
unable_verify_ssh_key=Gitea no puede velificar tu clave SSH, pero asumimos que es válida. Por favor, asegúrate de que es así.
auth_failed=Error de autenticación: %v
still_own_repo=Tu cuenta es la propietaria de uno o más repositorios, tienes que borrarlos o transferirlos primero.
@@ -327,7 +327,7 @@ unbind_success=La Red Social ha sido desvinculada.
manage_access_token=Gestionar los Tokens de Acceso personales
generate_new_token=Generar nuevo Token
tokens_desc=Tokens usados para acceder al API de Gogs.
tokens_desc=Tokens usados para acceder al API de Gitea.
new_token_desc=Desde ahora, todos los tokens tendrán acceso completo a tu cuenta.
token_name=Nombre del Token
generate_token=Generar Token
@@ -370,7 +370,7 @@ mirror_prune_desc=Remover referencias remotas que no existan remotamente
mirror_interval=Intervalo de la réplica (en horas)
mirror_address=Dirección de la réplica
mirror_address_desc=Por favor, incluya las credenciales de usuario necesarias en la dirección.
mirror_last_synced=Last Synced
mirror_last_synced=Última sincronización
watchers=Seguidores
stargazers=Fans
forks=Forks
@@ -428,45 +428,45 @@ file_permalink=Permalink
file_too_large=Este archivo es demasiado grande para ser mostrado
editor.new_file=Nuevo archivo
editor.upload_file=Upload file
editor.edit_file=Edit file
editor.preview_changes=Preview Changes
editor.cannot_edit_non_text_files=Cannot edit non-text files
editor.edit_this_file=Edit this file
editor.must_be_on_a_branch=You must be on a branch to make or propose changes to this file
editor.fork_before_edit=You must fork this repository before editing the file
editor.delete_this_file=Delete this file
editor.must_have_write_access=You must have write access to make or propose changes to this file
editor.file_delete_success=File '%s' has been deleted successfully!
editor.name_your_file=Name your file...
editor.filename_help=To add directory, just type it and press /. To remove a directory, go to the beginning of the field and press backspace.
editor.or=or
editor.cancel_lower=cancel
editor.commit_changes=Commit Changes
editor.add_tmpl=Add '%s/<filename>'
editor.add=Add '%s'
editor.update=Update '%s'
editor.delete=Delete '%s'
editor.commit_message_desc=Add an optional extended description...
editor.commit_directly_to_this_branch=Commit directly to the <strong class="branch-name">%s</strong> branch.
editor.create_new_branch=Create a <strong>new branch</strong> for this commit and start a pull request.
editor.new_branch_name_desc=New branch name...
editor.cancel=Cancel
editor.filename_cannot_be_empty=Filename cannot be empty.
editor.branch_already_exists=Branch '%s' already exists in this repository.
editor.directory_is_a_file=Entry '%s' in the parent path is a file not a directory in this repository.
editor.filename_is_a_directory=The filename '%s' is an existing directory in this repository.
editor.file_editing_no_longer_exists=The file '%s' you are editing no longer exists in the repository.
editor.file_changed_while_editing=File content has been changed since you started editing. <a target="_blank" href="%s">Click here</a> to see what have been changed or <strong>press commit again</strong> to overwrite those changes.
editor.file_already_exists=A file with name '%s' already exists in this repository.
editor.no_changes_to_show=There are no changes to show.
editor.fail_to_update_file=Failed to update/create file '%s' with error: %v
editor.add_subdir=Add subdirectory...
editor.unable_to_upload_files=Failed to upload files to '%s' with error: %v
editor.upload_files_to_dir=Upload files to '%s'
editor.upload_file=Subir archivo
editor.edit_file=Editar archivo
editor.preview_changes=Vista previa de los cambios
editor.cannot_edit_non_text_files=Sólo puede editar archivos de texto
editor.edit_this_file=Editar este archivo
editor.must_be_on_a_branch=Debes estar en una rama para hacer o proponer cambios en este archivo
editor.fork_before_edit=Debes hacer un fork de este repositorio antes de editar el archivo
editor.delete_this_file=Eliminar este archivo
editor.must_have_write_access=Debes tener permisos de escritura para hacer o proponer cambios a este archivo
editor.file_delete_success=¡El archivo '%s' ha sido eliminado con éxito!
editor.name_your_file=Nombre de archivo...
editor.filename_help=Para añadir un directorio, simplemente escribelo y presiona /. Para eliminar un directorio, ve al principio del campo y presiona retroceso.
editor.or=o
editor.cancel_lower=cancelar
editor.commit_changes=Hacer commit de los cambios
editor.add_tmpl=Añadir '%s<filename>'
editor.add=Añadir '%s'
editor.update=Actualizar '%s'
editor.delete=Eliminar '%s'
editor.commit_message_desc=Añadir una descripción extendida opcional...
editor.commit_directly_to_this_branch=Hacer commit directamente en la rama <strong class="branch-name">%s</strong>.
editor.create_new_branch=Crear una <strong>nueva rama</strong> para este commit y hacer un pull request.
editor.new_branch_name_desc=Nombre de la rama nueva...
editor.cancel=Cancelar
editor.filename_cannot_be_empty=El nombre del archivo no puede estar vacío.
editor.branch_already_exists=La rama '%s' ya existe en este repositorio.
editor.directory_is_a_file=La entrada '%s' en el directorio padre es un archivo no un directorio en este repositorio.
editor.filename_is_a_directory=El nombre del fichero '%s' es un directorio existente en este repositorio.
editor.file_editing_no_longer_exists=El archivo '%s' que estás editando ya no existe en este repositorio.
editor.file_changed_while_editing=El contenido del archivo ha sido modificado desde que empezó a editarlo. <a target="_blank" href="%s">Clic aquí</a> para ver qué ha sido modificado o <strong>presiona confirmar de nuevo</strong> para sobrescribir estos cambios.
editor.file_already_exists=Ya existe un archivo con nombre '%s' en este repositorio.
editor.no_changes_to_show=No existen cambios para mostrar.
editor.fail_to_update_file=Error al actualizar/crear el archivo '%s', error: %v
editor.add_subdir=Añadir subdirectorio...
editor.unable_to_upload_files=Error al subir archivos a '%s', error: %v
editor.upload_files_to_dir=Subir archivos a '%s'
commits.commits=Commits
commits.search=Buscar Commits
commits.search=Buscar commits
commits.find=Buscar
commits.author=Autor
commits.message=Mensaje
@@ -490,11 +490,11 @@ issues.create=Crear incidencia
issues.new_label=Nueva Etiqueta
issues.new_label_placeholder=Nombre etiqueta...
issues.create_label=Crear etiqueta
issues.label_templates.title=Load a predefined set of labels
issues.label_templates.info=There arent any labels yet. You can click on the "New Label" button above to create one or use a predefined set below.
issues.label_templates.helper=Select a label set
issues.label_templates.use=Use this label set
issues.label_templates.fail_to_load_file=Failed to load label template file '%s': %v
issues.label_templates.title=Carga un conjunto predefinido de etiquetas
issues.label_templates.info=Todavía no hay ninguna etiqueta. Puede hacer clic en el botón "Nueva etiqueta" para crear una o utilizar un conjunto predefinido abajo.
issues.label_templates.helper=Seleccionar un conjunto de etiquetas
issues.label_templates.use=Usar este conjunto de etiquetas
issues.label_templates.fail_to_load_file=Error al cargar el archivo de plantilla de etiqueta '%s': %v
issues.open_tab=%d abiertas
issues.close_tab=%d cerradas
issues.filter_label=Etiqueta
@@ -522,7 +522,7 @@ issues.next=Página Siguiente
issues.open_title=Abierta
issues.closed_title=Cerrada
issues.num_comments=%d comentarios
issues.commented_at='comentado <a href="#%s"> %s'</a>
issues.commented_at=`comentado <a href="#%s"> %s`</a>
issues.delete_comment_confirm=¿Seguro que deseas eliminar este comentario?
issues.no_content=Aún no existe contenido.
issues.close_issue=Cerrar
@@ -536,7 +536,7 @@ issues.commit_ref_at=`mencionada esta incidencia en un commit <a id="%[1]s" href
issues.poster=Autor
issues.collaborator=Colaborador
issues.owner=Propietario
issues.sign_in_require_desc=<a href="%s">Sign in</a> to join this conversation.
issues.sign_in_require_desc=<a href="%s"> Inicie sesión</a> para unirse a esta conversación.
issues.edit=Editar
issues.cancel=Cancelar
issues.save=Guardar
@@ -551,8 +551,8 @@ issues.label_deletion=Borrado de Etiqueta
issues.label_deletion_desc=Al borrar la etiqueta su información será eliminada de todas las incidencias relacionadas. Desea continuar?
issues.label_deletion_success=Etiqueta borrada con éxito!
issues.num_participants=%d participantes
issues.attachment.open_tab=`Click to see "%s" in a new tab`
issues.attachment.download=`Click to download "%s"`
issues.attachment.open_tab='Haga clic para ver "%s" en una pestaña nueva'
issues.attachment.download=`Haga clic para descargar "%s"`
pulls.new=Nuevo Pull Request
pulls.compare_changes=Comparar cambios
@@ -570,8 +570,8 @@ pulls.tab_conversation=Conversación
pulls.tab_commits=Commits
pulls.tab_files=Archivos modificados
pulls.reopen_to_merge=Por favor reabra este Pull Request para proceder con la operación de fusionado.
pulls.merged=Fuisionado
pulls.has_merged=¡Este pull request se ha completado con éxito!
pulls.merged=Fusionado
pulls.has_merged=¡Este Pull Request se ha completado con éxito!
pulls.data_broken=Los datos de este pull request ya no están disponibles porque se ha eliminado la información del fork.
pulls.is_checking=Se está procediendo a la búsqueda de conflictos, por favor actualice la página en unos momentos.
pulls.can_auto_merge_desc=Este Pull Request puede ser fusionado automáticamente.
@@ -632,9 +632,9 @@ settings.collaboration.undefined=Indefinido
settings.hooks=Webhooks
settings.githooks=Git Hooks
settings.basic_settings=Configuración Básica
settings.mirror_settings=Mirror Settings
settings.sync_mirror=Sync Now
settings.mirror_sync_in_progress=Mirror syncing is in progress, please refresh page in about a minute.
settings.mirror_settings=Configuración de réplica
settings.sync_mirror=Sincronizar ahora
settings.mirror_sync_in_progress=Sincronización de réplica en curso, por favor actualice la página en unos minutos.
settings.site=Sitio oficial
settings.update_settings=Actualizar configuración
settings.change_reponame_prompt=Este cambio afectará a los enlaces al repositorio.
@@ -690,7 +690,7 @@ settings.search_user_placeholder=Buscar usuario...
settings.org_not_allowed_to_be_collaborator=Las organizaciones no tiene permitido ser añadidas como colaboradores.
settings.user_is_org_member=El usuario es miembro de la organización, no puede ser añadido como colaborador.
settings.add_webhook=Añadir Webhook
settings.hooks_desc=Los Webhooks permiten a servicios externos recibir notificaciones cuando sucedan ciertos eventos en Gogs. Cuando sucedan los eventos especificados, enviaremos una petición POST a cada una de las URLs indicadas. Para obtener más información, consulta nuestra <a target="_blank" href="%s">Guía de Webhooks</a>.
settings.hooks_desc=Los Webhooks permiten a servicios externos recibir notificaciones cuando sucedan ciertos eventos en Gitea. Cuando sucedan los eventos especificados, enviaremos una petición POST a cada una de las URLs indicadas. Para obtener más información, consulta nuestra <a target="_blank" href="%s">Guía de Webhooks</a>.
settings.webhook_deletion=Eliminar Webhook
settings.webhook_deletion_desc=Al borrar este webhook se eliminará su información y todo su historial. ¿Desea continuar?
settings.webhook_deletion_success=¡Webhook eliminado con éxito!
@@ -721,7 +721,7 @@ settings.event_choose=Déjeme elegir lo que necesito.
settings.event_create=Crear
settings.event_create_desc=Rama o etiqueta creada
settings.event_pull_request=Pull Request
settings.event_pull_request_desc=Pull request opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, or synchronized.
settings.event_pull_request_desc=Pull request, abierta, cerrada, reabierta, editada, asignada, desasignada, con etiqueta actualizada, con etiqueta eliminada, o sincronizada.
settings.event_push=Push
settings.event_push_desc=Git push a un repositorio
settings.active=Activo
@@ -889,7 +889,7 @@ total=Total: %d
dashboard.statistic=Estadísticas
dashboard.operations=Operaciones
dashboard.system_status=Estado del Monitor del Sistema
dashboard.statistic_info=La base de datos de Gogs contiene <b>%d</b> usuarios, <b>%d</b> organizaciones, <b>%d</b> claves públicas, <b>%d</b> repositorios, <b>%d</b> vigilados, <b>%d</b> destacados, <b>%d</b> acciones, <b>%d</b> accesos, <b>%d</b> incidencias, <b>%d</b> comentarios, <b>%d</b> cuentas de redes sociales, <b>%d</b> seguidores, <b>%d</b> mirrors, <b>%d</b> releases, <b>%d</b> fuentes de login, <b>%d</b> webhooks, <b>%d</b> milestones, <b>%d</b> etiquetas, <b>%d</b> hooks, <b>%d</b> equipos, <b>%d</b> tareas actualizadas, <b>%d</b> adjuntos.
dashboard.statistic_info=La base de datos de Gitea contiene <b>%d</b> usuarios, <b>%d</b> organizaciones, <b>%d</b> claves públicas, <b>%d</b> repositorios, <b>%d</b> vigilados, <b>%d</b> destacados, <b>%d</b> acciones, <b>%d</b> accesos, <b>%d</b> incidencias, <b>%d</b> comentarios, <b>%d</b> cuentas de redes sociales, <b>%d</b> seguidores, <b>%d</b> mirrors, <b>%d</b> releases, <b>%d</b> fuentes de login, <b>%d</b> webhooks, <b>%d</b> milestones, <b>%d</b> etiquetas, <b>%d</b> hooks, <b>%d</b> equipos, <b>%d</b> tareas actualizadas, <b>%d</b> adjuntos.
dashboard.operation_name=Nombre de la operación
dashboard.operation_switch=Interruptor
dashboard.operation_run=Ejecutar
@@ -903,7 +903,7 @@ dashboard.delete_missing_repos=Borrar todos los registros de los repositorios pa
dashboard.delete_missing_repos_success=Todos los registros de repositorios para los que ya no se dispone de los archivos Git se han eliminado correctamente.
dashboard.git_gc_repos=Ejecutar la recolección de basura en los repositorios
dashboard.git_gc_repos_success=Todos los repositorios han ejecutado correctamente el recolector de basuras.
dashboard.resync_all_sshkeys=Reescribir el fichero '.ssh/authorized_keys'(atención: se perderán las claves que no pertenezcan a Gogs)
dashboard.resync_all_sshkeys=Reescribir el fichero '.ssh/authorized_keys'(atención: se perderán las claves que no pertenezcan a Gitea)
dashboard.resync_all_sshkeys_success=Todas las claves públicas se han reescrito correctamente.
dashboard.resync_all_update_hooks=Reescribir todos los hooks de actualización de los repositorios (necesario cuando se modifica la ruta de configuración personalizada)
dashboard.resync_all_update_hooks_success=Todos los hooks de actualización de los repositorios se han reescrito correctamente.
@@ -1122,7 +1122,7 @@ config.git_max_diff_line_characters=Carácteres de Diff máximos (para una sola
config.git_max_diff_files=Máximo de archivos de Diff (que se mostrarán)
config.git_gc_args=Argumentos de GC
config.git_migrate_timeout=Tiempo de espera de migración
config.git_mirror_timeout=Tiempo de espera de actualización de espejos
config.git_mirror_timeout=Tiempo de espera de actualización de réplicas
config.git_clone_timeout=Tiempo de espera de operación de clones
config.git_pull_timeout=Tiempo de espera de operación de pull
config.git_gc_timeout=Tiempo de espera de operación de GC
@@ -1188,7 +1188,7 @@ hours=%[2]s %[1]d horas
days=%[2]s %[1]d días
weeks=%[2]s %[1]d semanas
months=%[2]s %[1]d meses
years=%s %d años
years=%[2]s %[1]d años
raw_seconds=segundos
raw_minutes=minutos

View File

@@ -47,8 +47,8 @@ cancel=Peruuta
[install]
install=Asennus
title=Asennusvaiheet ottaessa ensi kertaa käyttöön
docker_helper=Jos käytät Gogsia Dockerin sisällä, ole hyvä ja lue <a target="_blank" href="%s">ohjeet</a> huolellisesti ennen kuin muutat mitään tältä sivulta!
requite_db_desc=Gogs tarvitsee MySQL, PostgreSQL, SQLite3 tai TiDB.
docker_helper=Jos käytät Giteaia Dockerin sisällä, ole hyvä ja lue <a target="_blank" href="%s">ohjeet</a> huolellisesti ennen kuin muutat mitään tältä sivulta!
requite_db_desc=Gitea tarvitsee MySQL, PostgreSQL, SQLite3 tai TiDB.
db_title=Tietokanta asetukset
db_type=Tietokanta tyyppi
host=Isäntä
@@ -70,7 +70,7 @@ app_name_helper=Laita organisaatiosi nimi tähän isolla ja kovaäänisesti!
repo_path=Repon juuren polku
repo_path_helper=Kaikki Git etä repot tullaan tallentamaan tähän hakemistoon.
run_user=Suorita käyttäjänä
run_user_helper=Käyttäjällä täytyy olla pääsy repo juuri polkuun ja suorittaa Gogs.
run_user_helper=Käyttäjällä täytyy olla pääsy repo juuri polkuun ja suorittaa Gitea.
domain=Verkkotunnus
domain_helper=Tämä vaikuttaa SSH klooni URLeihin.
ssh_port=SSH portti
@@ -110,7 +110,7 @@ admin_name=Käyttäjätunnus
admin_password=Salasana
confirm_password=Varmista salasana
admin_email=Ylläpito sähköposti
install_gogs=Asenna Gogs
install_gogs=Asenna Gitea
test_git_failed=Epäonnistui testata 'git' komentoa: %v
sqlite3_not_available=Julkaisu versiosi ei tue SQLite3, ole hyvä ja lataa virallinen binääri versio osoitteesta %s, EI gobuild versiota.
invalid_db_setting=Tietokanta asetus ei ole oikea: %v
@@ -118,7 +118,7 @@ invalid_repo_path=Repo juuri polku on virheellinen: %v
run_user_not_match=Suoritus käyttäjä ei ole nykyinen käyttäjä: %s -> %s
save_config_failed=Asetuksien tallennus epäonnistui: %v
invalid_admin_setting=Ylläpito tili asetus virheellinen: %v
install_success=Tervetuloa! Olemme iloisia että valitsit Gogs, pidä hauskaa ja pidä huolta itsestäsi.
install_success=Tervetuloa! Olemme iloisia että valitsit Gitea, pidä hauskaa ja pidä huolta itsestäsi.
invalid_log_root_path=Loki juurihakemisto ei kelpaa: %v
[home]
@@ -162,7 +162,7 @@ reset_password=Nollaa salasanasi
invalid_code=Sori, varmistuskoodisi on vanhentunut tai väärä.
reset_password_helper=Klikkaa tästä nollataksesi salasanasi
password_too_short=Salasanan pituus ei voi olla vähemmän kuin 6 merkkiä.
non_local_account=Non-local accounts cannot change passwords through Gogs.
non_local_account=Non-local accounts cannot change passwords through Gitea.
[mail]
activate_account=Ole hyvä ja aktivoi tilisi
@@ -222,7 +222,7 @@ user_not_exist=Käyttäjää ei ole olemassa.
last_org_owner=Viimeisen käyttäjän poistaminen omistaja tiimistä ei ole sallittu, koska organisaatiossa tulee olla ainakin yksi omistaja.
invalid_ssh_key=Sori, emme pystyneet varmistamaan SSH avainta: %s
unable_verify_ssh_key=Gogs ei voi varmistaa SSH avaintasi, mutta oletamme että se on toimiva, ole hyvä ja tarkista se.
unable_verify_ssh_key=Gitea ei voi varmistaa SSH avaintasi, mutta oletamme että se on toimiva, ole hyvä ja tarkista se.
auth_failed=Todennus epäonnistui: %v
still_own_repo=Tililläsi on yhä omistajuus ainakin yhteen repoon, sinun täytyy poistaa tai siirtää ne ensin.
@@ -327,7 +327,7 @@ unbind_success=Sosiaalisen tilin liitos on poistettu.
manage_access_token=Hallitse henkilökohtaisia pääsymerkkejä
generate_new_token=Luo uusi pääsymerkki
tokens_desc=Luomiasi pääsymerkkejä voidaan käyttää Gogs APIn kanssa.
tokens_desc=Luomiasi pääsymerkkejä voidaan käyttää Gitea APIn kanssa.
new_token_desc=Joka pääsymerkillä on täysi pääsy tiliisi.
token_name=Pääsymerkin nimi
generate_token=Luo pääsymerkki
@@ -690,7 +690,7 @@ settings.search_user_placeholder=Etsi käyttäjä...
settings.org_not_allowed_to_be_collaborator=Yhteistyökumppaniksi ei voi lisätä organisaatiota.
settings.user_is_org_member=Käyttäjä on organisaation jäsen, jota ei voi lisätä yhteistyökumppaniksi.
settings.add_webhook=Lisää webkoukku
settings.hooks_desc=Webkoukut muistuttavat paljon perus HTTP POST tapahtuma laukaisimia. Aina kun jotain tapahtuu Gogsissa, käsittelemme ilmoituksen määrittäämääsi kohteeseen. Lisätietoja <a target="_blank" href="%s">webkoukku oppaassa</a>.
settings.hooks_desc=Webkoukut muistuttavat paljon perus HTTP POST tapahtuma laukaisimia. Aina kun jotain tapahtuu Giteaissa, käsittelemme ilmoituksen määrittäämääsi kohteeseen. Lisätietoja <a target="_blank" href="%s">webkoukku oppaassa</a>.
settings.webhook_deletion=Poista webkoukku
settings.webhook_deletion_desc=Tämän webkoukun poistaminen poistaa sen tiedot ja kaiken toimitushistorian. Haluatko jatkaa?
settings.webhook_deletion_success=Webkoukku on poistettu onnistuneesti!
@@ -707,7 +707,7 @@ settings.githook_edit_desc=Jos koukku ei ole käytössä, esitellään esimerkki
settings.githook_name=Koukun nimi
settings.githook_content=Koukun sisältö
settings.update_githook=Päivitys koukku
settings.add_webhook_desc=Gogs lähettää <code>POST</code> requestin määrittämääsi URLiin, mukaanlukien tapahtuneen eventin. Voit myös määrittää millaisen tiedostomuodon haluat saada koukun lauettua (JSON, x-www-form-urlencoded, XML, jne). Lisätietoa löytyy meidän <a target="_blank" href="%s">koukut oppaasta</a>.
settings.add_webhook_desc=Gitea lähettää <code>POST</code> requestin määrittämääsi URLiin, mukaanlukien tapahtuneen eventin. Voit myös määrittää millaisen tiedostomuodon haluat saada koukun lauettua (JSON, x-www-form-urlencoded, XML, jne). Lisätietoa löytyy meidän <a target="_blank" href="%s">koukut oppaasta</a>.
settings.payload_url=Payload URL
settings.content_type=Sisältötyyppi
settings.secret=Salaus
@@ -889,7 +889,7 @@ total=Yhteensä: %d
dashboard.statistic=Statistiikka
dashboard.operations=Toiminnot
dashboard.system_status=Järjestelmänvalvonnan tila
dashboard.statistic_info=Gogs tietokannassa on <b>%d</b> käyttäjää, <b>%d</b> organisaatiota, <b>%d</b> julkista avainta, <b>%d</b> repoa, <b>%d</b> tarkkailijaa, <b>%d</b> tähteä, <b>%d</b> toimea, <b>%d</b> sisäänkirjautunutta, <b>%d</b> ongelmaa, <b>%d</b> kommenttia, <b>%d</b> sosiaalista tiliä, <b>%d</b> seuraajaa, <b>%d</b> peiliä, <b>%d</b> julkaisua, <b>%d</b> kirjautumis lähdettä, <b>%d</b> webkoukkua, <b>%d</b> merkkipaalua, <b>%d</b> tunnistetta, <b>%d</b> koukku tehtävää, <b>%d</b> tiimiä, <b>%d</b> päivitys tehtävää, <b>%d</b> liitetiedostoa.
dashboard.statistic_info=Gitea tietokannassa on <b>%d</b> käyttäjää, <b>%d</b> organisaatiota, <b>%d</b> julkista avainta, <b>%d</b> repoa, <b>%d</b> tarkkailijaa, <b>%d</b> tähteä, <b>%d</b> toimea, <b>%d</b> sisäänkirjautunutta, <b>%d</b> ongelmaa, <b>%d</b> kommenttia, <b>%d</b> sosiaalista tiliä, <b>%d</b> seuraajaa, <b>%d</b> peiliä, <b>%d</b> julkaisua, <b>%d</b> kirjautumis lähdettä, <b>%d</b> webkoukkua, <b>%d</b> merkkipaalua, <b>%d</b> tunnistetta, <b>%d</b> koukku tehtävää, <b>%d</b> tiimiä, <b>%d</b> päivitys tehtävää, <b>%d</b> liitetiedostoa.
dashboard.operation_name=Toiminnon nimi
dashboard.operation_switch=Vaihda
dashboard.operation_run=Suorita
@@ -903,7 +903,7 @@ dashboard.delete_missing_repos=Poista kaikki repo tietueet jotka menettivät Git
dashboard.delete_missing_repos_success=Kaikki repo tietueet jotka menettivät Git tiedostoja on poistettu onnistuneesti.
dashboard.git_gc_repos=Suorita roskienkeruu repoille
dashboard.git_gc_repos_success=Kaikki repot ovat tehneet roskienkeruun onnistuneesti.
dashboard.resync_all_sshkeys=Uudelleenkirjoita '.ssh/authorized_keys' tiedosto (varoitus: ei-Gogs avaimet menetetään)
dashboard.resync_all_sshkeys=Uudelleenkirjoita '.ssh/authorized_keys' tiedosto (varoitus: ei-Gitea avaimet menetetään)
dashboard.resync_all_sshkeys_success=Kaikki julkiset avaimet on uudelleenkirjoitettu onnistuneesti.
dashboard.resync_all_update_hooks=Uudelleenkirjoita kaikki päivityskoukut repoista (tarvitaan mukautetun asetuspolun muuttuessa)
dashboard.resync_all_update_hooks_success=Kaikki repojen päivityskoukut on uudelleenkirjoitettu onnistuneesti.

View File

@@ -47,8 +47,8 @@ cancel=Annuler
[install]
install=Installation
title=Instructions pour la première exécution
docker_helper=Si vous exécutez Gogs grâce à Docker, merci de lire la <a target="_blank" href="%s">procédure</a> attentivement avant de modifier quoi que ce soit sur cette page !
requite_db_desc=Gogs requiert MySQL, PostgreSQL, SQLite3 ou TiDB.
docker_helper=Si vous exécutez Gitea grâce à Docker, merci de lire la <a target="_blank" href="%s">procédure</a> attentivement avant de modifier quoi que ce soit sur cette page !
requite_db_desc=Gitea requiert MySQL, PostgreSQL, SQLite3 ou TiDB.
db_title=Paramètres de la base de données
db_type=Type de base de données
host=Hôte
@@ -64,13 +64,13 @@ err_invalid_tidb_name=Le nom de la base de données TiDB ne peut contenir les ca
no_admin_and_disable_registration=Vous ne pouvez pas désactiver l'enregistrement sans créer un compte administrateur.
err_empty_admin_password=Le mot de passe du compte administrateur ne peut être vide.
general_title=Paramètres généraux de Gogs
general_title=Paramètres généraux de Gitea
app_name=Nom de l'application
app_name_helper=Inscrivez fièrement le nom de votre organisation ici !
repo_path=Emplacement racine des dépôts
repo_path_helper=Tous les dépôts Git distants seront sauvegardés ici.
run_user=Utilisateur système
run_user_helper=L'utilisateur doit avoir accès à la racine des dépôts et exécuter Gogs.
run_user_helper=L'utilisateur doit avoir accès à la racine des dépôts et exécuter Gitea.
domain=Domaine
domain_helper=Cela affecte les doublons d'URL SSH.
ssh_port=Port SSH
@@ -110,21 +110,21 @@ admin_name=Nom d'utilisateur
admin_password=Mot de passe
confirm_password=Confirmez le mot de passe
admin_email=E-mail de l'administrateur
install_gogs=Installer Gogs
install_gogs=Installer Gitea
test_git_failed=Le test de la commande "git" a échoué : %v
sqlite3_not_available=Votre version publiée ne prend pas en charge SQLite3. Veuillez télécharger la version binaire officielle à cette adresse %s.
invalid_db_setting=Paramètres de base de données incorrects : %v
invalid_repo_path=Chemin vers la racine du dépôt invalide : %v
run_user_not_match=L'utilisateur entré n'est pas l'utilisateur actuel : %s -> %s
run_user_not_match=L'utilisateur d'exécution saisi n'est pas l'utilisateur d'exécution actuel : %s -> %s
save_config_failed=La sauvegarde de la configuration a échoué : %v
invalid_admin_setting=Paramètres du compte administrateur invalides : %v
install_success=Bienvenue ! Nous sommes heureux que vous ayez choisi Gogs, amusez-vous et prenez soin de vous.
invalid_log_root_path=Le chemin principal des fichiers logs est invalide: %v
install_success=Bienvenue ! Nous sommes heureux que vous ayez choisi Gitea, amusez-vous et prenez soin de vous.
invalid_log_root_path=L'emplacement racine des fichiers logs est invalide : %v
[home]
uname_holder=Nom d'utilisateur ou e-mail
password_holder=Mot de passe
switch_dashboard_context=Basculer le Contexte du Tableau de Bord
switch_dashboard_context=Basculer le contexte du tableau de bord
my_repos=Mes dépôts
show_more_repos=Afficher plus de dépôts...
collaborative_repos=Dépôts collaboratifs
@@ -144,7 +144,7 @@ create_new_account=Créer un nouveau compte
register_hepler_msg=Déjà enregistré ? Connectez-vous !
social_register_hepler_msg=Déjà enregistré ? Associez-le !
disable_register_prompt=Désolé, les enregistrements ont été désactivés. Veuillez contacter l'administrateur du site.
disable_register_mail=Désolé, la Confirmation par Mail des Enregistrements a été désactivée.
disable_register_mail=Désolé, la confirmation par e-mail des enregistrements a été désactivée.
remember_me=Se souvenir de moi
forgot_password=Mot de passe oublié
forget_password=Mot de passe oublié ?
@@ -162,13 +162,13 @@ reset_password=Réinitialiser le mot de passe
invalid_code=Désolé, votre code de confirmation est invalide ou a expiré.
reset_password_helper=Cliquez ici pour réinitialiser votre mot de passe
password_too_short=Le mot de passe doit contenir 6 caractères minimum.
non_local_account=Les comptes non-locaux ne peuvent pas changer leur mot de passe via Gogs.
non_local_account=Les comptes non locaux ne peuvent pas changer leur mot de passe via Gitea.
[mail]
activate_account=Veuillez activer votre compte
activate_email=Veuillez vérifier votre adresse e-mail
reset_password=Réinitialiser votre mot de passe
register_success=Succès de l'enregistrement, Bienvenue
register_success=Inscription réussie, bienvenue
register_notify=Bienvenue à bord
[modal]
@@ -179,13 +179,13 @@ modify=Modifier
[form]
UserName=Nom d'utilisateur
RepoName=Nom du dépôt
Email=Adresse E-mail
Email=Adresse e-mail
Password=Mot de passe
Retype=Confirmez le mot de passe
SSHTitle=Nom de la clé SSH
HttpsUrl=URL HTTPS
PayloadUrl=URL des Données Utiles
TeamName=Nom d'équipe
PayloadUrl=URL des données utiles
TeamName=Nom de l'équipe
AuthName=Nom d'autorisation
AdminEmail=E-mail de l'administrateur
@@ -196,9 +196,9 @@ CommitChoice=Choix de commit
TreeName=Chemin du fichier
Content=Contenu
require_error=` Ne peut être vide `
alpha_dash_error=` doivent être des caractères alpha, numeriques ou console (-_) valides `
alpha_dash_dot_error=` doivent être des caractères alpha, numeriques, console (-_) valides ou des points `
require_error=` ne peut pas être vide.`
alpha_dash_error=` doivent être des caractères alpha, numériques ou tirets (-_) valides.`
alpha_dash_dot_error=` doivent être des caractères alpha, numériques, tirets (-_) valides ou des points.`
size_error=` doit être à la taille de %s.`
min_size_error=` %s caractères minimum `
max_size_error=` %s caractères maximum `
@@ -222,7 +222,7 @@ user_not_exist=Cet utilisateur n'existe pas.
last_org_owner=L'utilisateur à exclure est le dernier membre de l'équipe propriétaire. Il doit y avoir un autre propriétaire.
invalid_ssh_key=Désolé, impossible de valider votre clé SSH : %s
unable_verify_ssh_key=Gogs n'a pu vérifier la validité de votre clé SSH, même si nous partons du principe qu'elle le soit. Cela-dit, veuillez vous en assurer.
unable_verify_ssh_key=Gitea n'a pu vérifier la validité de votre clé SSH, même si nous partons du principe qu'elle le soit. Cela-dit, veuillez vous en assurer.
auth_failed=Échec d'authentification : %s
still_own_repo=Votre compte est toujours propriétaire d'un ou plusieurs dépôts. Vous devez d'abord les supprimer ou les transférer.
@@ -327,7 +327,7 @@ unbind_success=Compte de réseau social dissocié.
manage_access_token=Gérer les jetons d'accès personnels
generate_new_token=Générer le nouveau jeton
tokens_desc=Jetons, que vous avez généré, qui peuvent être utilisés pour accéder à l'API Gogs.
tokens_desc=Jetons, que vous avez généré, qui peuvent être utilisés pour accéder à l'API Gitea.
new_token_desc=Chaque Jeton donnera un accès complet à votre compte.
token_name=Nom du jeton
generate_token=Générer le jeton
@@ -690,7 +690,7 @@ settings.search_user_placeholder=Rechercher un utilisateur...
settings.org_not_allowed_to_be_collaborator=Une organisation n'est pas autorisée à être ajoutée en tant que collaborateur.
settings.user_is_org_member=Cet utilisateur ne peut pas être ajouté en tant que collaborateur car il fait partie d'une organisation.
settings.add_webhook=Ajouter un Webhook
settings.hooks_desc=Les Webhooks sont des déclencheurs de POST HTTP . Lorsque qu'un événement se produit dans Gogs, une notification sera envoyée vers l'hôte cible préalablement spécifié. Apprenez-en davantage dans le <a target="_blank" href="%s">Guide des Webhooks</a>.
settings.hooks_desc=Les Webhooks sont des déclencheurs de POST HTTP . Lorsque qu'un événement se produit dans Gitea, une notification sera envoyée vers l'hôte cible préalablement spécifié. Apprenez-en davantage dans le <a target="_blank" href="%s">Guide des Webhooks</a>.
settings.webhook_deletion=Supprimer le Webhook
settings.webhook_deletion_desc=Supprimer ce webhook va supprimer ses informations et l'historique de livraison. Voulez-vous continuer ?
settings.webhook_deletion_success=Le webhook a été supprimé avec succès !
@@ -699,7 +699,7 @@ settings.webhook.test_delivery_desc=Envoyer un faux push pour tester la configur
settings.webhook.test_delivery_success=Le webhook de test a été ajouté à la file d'attente de livraison. L'affichage dans l'historique de livraison peut prendre quelques secondes.
settings.webhook.request=Requête
settings.webhook.response=Réponse
settings.webhook.headers=Entêtes 
settings.webhook.headers=Entêtes
settings.webhook.payload=Payload
settings.webhook.body=Corps
settings.githooks_desc=Les Hooks Git sont alimentés par Git lui même. Les Hooks compatibles sont modifiables dans la liste ci-dessous pour effectuer des opérations personnalisées.
@@ -773,7 +773,7 @@ release.source_code=Code source
release.new_subheader=Publier une version pour itérer sur le produit.
release.edit_subheader=Un changelog détaillé peut aider les utilisateurs à comprendre ce qui a été amélioré.
release.tag_name=Nom du tag
release.target=Cible 
release.target=Cible
release.tag_helper=Choisissez un tag existant ou créez-en un nouveau à publier.
release.title=Titre
release.content=Contenu
@@ -889,7 +889,7 @@ total=Total : %d
dashboard.statistic=Statistiques
dashboard.operations=Opérations
dashboard.system_status=État du système
dashboard.statistic_info=La base de données Gogs contient <b>%d</b> utilisateurs, <b>%d</b> organisations, <b>%d</b> clés publiques, <b>%d</b> dépôts, <b>%d</b> surveillances de dépôts, <b>%d</b> votes, <b>%d</b> actions, <b>%d</b> accès, <b>%d</b> tickets, <b>%d</b> commentaires, <b>%d</b> comptes de réseaux sociaux, <b>%d</b> abonnements, <b>%d</b> miroirs, <b>%d</b> versions, <b>%d</b> connexions d'origine, <b>%d</b> webhooks, <b>%d</b> versions, <b>%d</b> labels, <b>%d</b> tâches hook, <b>%d</b> équipes, <b>%d</b> tâches de mise à jour, <b>%d</b> fichiers.
dashboard.statistic_info=La base de données Gitea contient <b>%d</b> utilisateurs, <b>%d</b> organisations, <b>%d</b> clés publiques, <b>%d</b> dépôts, <b>%d</b> surveillances de dépôts, <b>%d</b> votes, <b>%d</b> actions, <b>%d</b> accès, <b>%d</b> tickets, <b>%d</b> commentaires, <b>%d</b> comptes de réseaux sociaux, <b>%d</b> abonnements, <b>%d</b> miroirs, <b>%d</b> versions, <b>%d</b> connexions d'origine, <b>%d</b> webhooks, <b>%d</b> versions, <b>%d</b> labels, <b>%d</b> tâches hook, <b>%d</b> équipes, <b>%d</b> tâches de mise à jour, <b>%d</b> fichiers.
dashboard.operation_name=Nom de l'Opération
dashboard.operation_switch=Basculer
dashboard.operation_run=Exécuter
@@ -903,7 +903,7 @@ dashboard.delete_missing_repos=Supprimer tous les dépôts ayant perdu leurs fic
dashboard.delete_missing_repos_success=Tous les dépôts ayant perdu leurs fichiers Git ont été supprimés avec succès.
dashboard.git_gc_repos=Collecter les déchets des dépôts
dashboard.git_gc_repos_success=Tous les dépôts ont effectué la collecte avec succès.
dashboard.resync_all_sshkeys=Ré-écrire le fichier '.ssh/authorized_keys' (attention : les clés hors-Gogs vont être perdues)
dashboard.resync_all_sshkeys=Ré-écrire le fichier '.ssh/authorized_keys' (attention : les clés hors-Gitea vont être perdues)
dashboard.resync_all_sshkeys_success=Toutes les clés publiques ont été ré-écrites avec succès.
dashboard.resync_all_update_hooks=Ré-écrire tous les hooks de mises à jour des dépôts (requis quand le chemin de la configuration personnalisé est modifié)
dashboard.resync_all_update_hooks_success=Tous les hooks de mises à jour des dépôts ont été ré-écris avec succès.

View File

@@ -47,8 +47,8 @@ cancel=Annulla
[install]
install=Installazione
title=Passi d'installazione per il primo avvio
docker_helper=Se stai utilizzando Gogs su Docker, per favore leggi le <a target="_blank" href="%s">Linee guida</a> con attenzione prima di cambiare qualcosa su questa pagina!
requite_db_desc=Gogs necessita MySQL, PostgreSQL, SQLite3 o TiDB.
docker_helper=Se stai utilizzando Gitea su Docker, per favore leggi le <a target="_blank" href="%s">Linee guida</a> con attenzione prima di cambiare qualcosa su questa pagina!
requite_db_desc=Gitea necessita MySQL, PostgreSQL, SQLite3 o TiDB.
db_title=Impostazioni Database
db_type=Tipo di database
host=Host
@@ -70,7 +70,7 @@ app_name_helper=Scrivi qui il nome della tua organizzazione forte e chiaro!
repo_path=Percorso Root del Repository
repo_path_helper=Tutti i repository Git remoti saranno salvati in questa directory.
run_user=Esegui con l'utente
run_user_helper=L'utente deve avere accesso al percorso root del repository e avviare Gogs.
run_user_helper=L'utente deve avere accesso al percorso root del repository e avviare Gitea.
domain=Dominio
domain_helper=Questo influisce sugli URL per il clonaggio via SSH.
ssh_port=Porta SSH
@@ -110,7 +110,7 @@ admin_name=Nome utente
admin_password=Password
confirm_password=Conferma Password
admin_email=E-mail dell'Admin
install_gogs=Installare Gogs
install_gogs=Installare Gitea
test_git_failed=Fallito il test del comando git: %v
sqlite3_not_available=Questa versione non supporta SQLite3, si prega di scaricare la versione binaria ufficiale da %s, NON la versione gobuild.
invalid_db_setting=La configurazione del database non è corretta: %v
@@ -118,7 +118,7 @@ invalid_repo_path=Percorso root del repository invalido: %v
run_user_not_match=Run user non è l'utente corrente: %s -> %s
save_config_failed=Fallito il salvataggio della configurazione: %v
invalid_admin_setting=Impostazioni account Admin non valide: %v
install_success=Benvenuto! Siamo felici che tu abbia scelto Gogs, buon divertimento.
install_success=Benvenuto! Siamo felici che tu abbia scelto Gitea, buon divertimento.
invalid_log_root_path=Log root path is invalid: %v
[home]
@@ -126,7 +126,7 @@ uname_holder=Nome Utente o E-mail
password_holder=Password
switch_dashboard_context=Cambia Dashboard Context
my_repos=I miei Repository
show_more_repos=Show more repositories...
show_more_repos=Visualizza altre repositories...
collaborative_repos=Repository Condivisi
my_orgs=Le mie Organizzazioni
my_mirrors=I miei Mirror
@@ -151,8 +151,8 @@ forget_password=Password dimenticata?
sign_up_now=Bisogno di un account? Iscriviti ora.
confirmation_mail_sent_prompt=Una nuova email di conferma è stata inviata a <b>%s</b>, verifica la tua casella di posta entro le prossime %d ore per completare la registrazione.
active_your_account=Attiva il tuo Account
prohibit_login=Login Prohibited
prohibit_login_desc=Your account is prohibited to login, please contact site admin.
prohibit_login=Accesso Vietato
prohibit_login_desc=Il tuo account è impossibilitato al login, contatta l'amministratore del sito.
resent_limit_prompt=Siamo spiacenti, si stanno inviando e-mail di attivazione troppo spesso. Si prega di attendere 3 minuti.
has_unconfirmed_mail=Ciao %s, hai un indirizzo di posta elettronica non confermato (<b>%s</b>). Se non hai ricevuto una e-mail di conferma o vuoi riceverla nuovamente, fare clic sul pulsante qui sotto.
resend_mail=Clicca qui per inviare nuovamente l'e-mail di attivazione
@@ -162,7 +162,7 @@ reset_password=Reimposta la tua Password
invalid_code=Siamo spiacenti, il codice di conferma è scaduto o non valido.
reset_password_helper=Clicca qui per reimpostare la password
password_too_short=La lunghezza della password non può essere meno 6 caratteri.
non_local_account=Non-local accounts cannot change passwords through Gogs.
non_local_account=Gli account non locali non possono modificare le password tramite Gitea.
[mail]
activate_account=Per favore attiva il tuo account
@@ -189,12 +189,12 @@ TeamName=Nome Team
AuthName=Nome autorizzazione
AdminEmail=Email dell'Admin
NewBranchName=New branch name
CommitSummary=Commit summary
CommitMessage=Commit message
CommitChoice=Commit choice
TreeName=File path
Content=Content
NewBranchName=Nuovo nome del branch
CommitSummary=Riepilogo dei commit
CommitMessage=Messaggio di commit
CommitChoice=Scelta di commit
TreeName=Percorso del file
Content=Contenuto
require_error=` non può essere vuoto.`
alpha_dash_error=` ammessi solo caratteri alfanumerici o trattini(-_).`
@@ -222,7 +222,7 @@ user_not_exist=L'utente inserito non esiste.
last_org_owner=L'utente che si vuole rimuovere è l'ultimo membro admin del team. Ci deve essere un altro proprietario.
invalid_ssh_key=Siamo spiacenti, non siamo in grado di verificare la chiave SSH: %s
unable_verify_ssh_key=Gogs non può verificare la chiave SSH, ma assumiamo che sia valida, si prega di verificare voi stessi.
unable_verify_ssh_key=Gitea non può verificare la chiave SSH, ma assumiamo che sia valida, si prega di verificare voi stessi.
auth_failed=Autenticazione non riuscita: %v
still_own_repo=Il tuo account possiede ancora almeno un repository, dovete prima cancellarli o trasferirne la proprietà.
@@ -232,7 +232,7 @@ org_still_own_repo=Questa organizzazione ha ancora la proprietà del repository,
target_branch_not_exist=Il ramo (branch) di destinazione non esiste.
[user]
change_avatar=Change your avatar
change_avatar=Cambia il tuo avatar
join_on=Si è unito il
repositories=Repository
activity=Attività pubblica
@@ -269,7 +269,7 @@ change_username_prompt=Questa modifica influenzerà il modo in cui i link si rif
continue=Continua
cancel=Annulla
lookup_avatar_by_mail=Lookup Avatar by mail
lookup_avatar_by_mail=Ricerca Avatar per mail
federated_avatar_lookup=Federated Avatar Lookup
enable_custom_avatar=Abilita avatar personalizzato
choose_new_avatar=Scegli un nuovo avatar
@@ -327,7 +327,7 @@ unbind_success=Account sociale disassociato.
manage_access_token=Gestisci i Token di Accesso Personale
generate_new_token=Genera Nuovo Token
tokens_desc=I Token che hai generato e che possono essere utilizzati per accedere alle API Gogs.
tokens_desc=I Token che hai generato e che possono essere utilizzati per accedere alle API Gitea.
new_token_desc=Da questo momento, ogni token avrà pieno accesso al tuo account.
token_name=Nome Token
generate_token=Genera Token
@@ -357,7 +357,7 @@ fork_from=Forka da
fork_visiblity_helper=Non puoi cambiare la visibilità di un repository forkato.
repo_desc=Descrizione
repo_lang=Lingua
repo_gitignore_helper=Select .gitignore templates
repo_gitignore_helper=Seleziona i templates di .gitignore
license=Licenza
license_helper=Selezionare un file di licenza
readme=Readme
@@ -365,7 +365,7 @@ readme_helper=Seleziona un template per il readme
auto_init=Inizializzare questo repository con i file e il modello selezionati
create_repo=Crea Repository
default_branch=Ramo (Branch) predefinito
mirror_prune=Prune
mirror_prune=Rimuovi
mirror_prune_desc=Remove any remote-tracking references that no longer exist on the remote
mirror_interval=Intervallo Mirror (in ore)
mirror_address=Indirizzo del mirror
@@ -425,14 +425,14 @@ file_raw=Originale
file_history=Cronologia
file_view_raw=Vedi originale
file_permalink=Permalink
file_too_large=This file is too large to be shown
file_too_large=Questo file è troppo grande per essere mostrato
editor.new_file=New file
editor.upload_file=Upload file
editor.edit_file=Edit file
editor.preview_changes=Preview Changes
editor.cannot_edit_non_text_files=Cannot edit non-text files
editor.edit_this_file=Edit this file
editor.new_file=Nuovo file
editor.upload_file=Carica File
editor.edit_file=Modifica file
editor.preview_changes=Anteprima modifiche
editor.cannot_edit_non_text_files=Non è possibile modificare i file non di testo
editor.edit_this_file=Modifica questo file
editor.must_be_on_a_branch=You must be on a branch to make or propose changes to this file
editor.fork_before_edit=You must fork this repository before editing the file
editor.delete_this_file=Delete this file
@@ -690,7 +690,7 @@ settings.search_user_placeholder=Cerca utente...
settings.org_not_allowed_to_be_collaborator=Un'organizzazione non può essere aggiunta come collaboratore.
settings.user_is_org_member=L'utente è un membro dell'organizzazione che non può essere aggiunto come collaboratore.
settings.add_webhook=Aggiungi Webhook
settings.hooks_desc=I Webhooks sono molto simili a un basilare evento trigger HTTP POST. Ogni volta che qualcosa si verifica in Gogs, tratteremo la notifica all'host di destinazione specificato. Ulteriori informazioni in questa <a target="_blank" href="%s">Guida ai Webhooks</a>.
settings.hooks_desc=I Webhooks sono molto simili a un basilare evento trigger HTTP POST. Ogni volta che qualcosa si verifica in Gitea, tratteremo la notifica all'host di destinazione specificato. Ulteriori informazioni in questa <a target="_blank" href="%s">Guida ai Webhooks</a>.
settings.webhook_deletion=Elimina Webhook
settings.webhook_deletion_desc=Delete this webhook will remove its information and all delivery history. Do you want to continue?
settings.webhook_deletion_success=Il Webhook è stato eliminato con successo!
@@ -707,7 +707,7 @@ settings.githook_edit_desc=Se l'hook è inattivo, sarà presentato un contenuto
settings.githook_name=Nome hook
settings.githook_content=Contenuto hook
settings.update_githook=Aggiorna Hook
settings.add_webhook_desc=Gogs manderà una richiesta <code>POST</code> all'URL specificata, insieme alle informazioni sull'evento avvenuto. Puoi anche specificare quale tipo di formato dati vorresti ottenere all'innesco dell'hook (JSON, x-www-form-urlencoded, XML, ecc). Puoi trovare più informazioni nella nostra <a target="_blank" href="%s">Guida ai Webhook</a>.
settings.add_webhook_desc=Gitea manderà una richiesta <code>POST</code> all'URL specificata, insieme alle informazioni sull'evento avvenuto. Puoi anche specificare quale tipo di formato dati vorresti ottenere all'innesco dell'hook (JSON, x-www-form-urlencoded, XML, ecc). Puoi trovare più informazioni nella nostra <a target="_blank" href="%s">Guida ai Webhook</a>.
settings.payload_url=Payload URL
settings.content_type=Content Type
settings.secret=Secret
@@ -889,7 +889,7 @@ total=Totale: %d
dashboard.statistic=Statistiche
dashboard.operations=Operazioni
dashboard.system_status=Stato del Monitor di Sistema
dashboard.statistic_info=Il database di Gogs ha <b>%d</b> utenti, <b>%d</b> organizzazioni, <b>%d</b> chiavi pubbliche, <b>%d</b> repository, <b>%d</b> utenti che seguono, <b>%d</b> voti, <b>%d</b> azioni, <b>%d</b> accessi, <b>%d</b> problemi, <b>%d</b> commenti, <b>%d</b> account sociali, <b>%d</b> utenti seguiti, <b>%d</b> mirror, <b>%d</b> rilasci, <b>%d</b> fonti di accesso, <b>%d</b> webhook, <b>%d</b> traguardi, <b>%d</b> etichette, <b>%d</b> incarichi hook, <b>%d</b> team, <b>%d</b> attività di aggiornamento, <b>%d</b> allegati.
dashboard.statistic_info=Il database di Gitea ha <b>%d</b> utenti, <b>%d</b> organizzazioni, <b>%d</b> chiavi pubbliche, <b>%d</b> repository, <b>%d</b> utenti che seguono, <b>%d</b> voti, <b>%d</b> azioni, <b>%d</b> accessi, <b>%d</b> problemi, <b>%d</b> commenti, <b>%d</b> account sociali, <b>%d</b> utenti seguiti, <b>%d</b> mirror, <b>%d</b> rilasci, <b>%d</b> fonti di accesso, <b>%d</b> webhook, <b>%d</b> traguardi, <b>%d</b> etichette, <b>%d</b> incarichi hook, <b>%d</b> team, <b>%d</b> attività di aggiornamento, <b>%d</b> allegati.
dashboard.operation_name=Nome Operazione
dashboard.operation_switch=Cambia
dashboard.operation_run=Esegui
@@ -903,7 +903,7 @@ dashboard.delete_missing_repos=Delete all repository records that lost Git files
dashboard.delete_missing_repos_success=All repository records that lost Git files have been deleted successfully.
dashboard.git_gc_repos=Fare la procedura di garbage collection sui repository
dashboard.git_gc_repos_success=Tutti i repository hanno fatto la procedura di garbage collection con successo.
dashboard.resync_all_sshkeys=Riscrivi il file '.ssh/authorized_keys' (attenzione: le chiavi non appartenenti a Gogs saranno perse)
dashboard.resync_all_sshkeys=Riscrivi il file '.ssh/authorized_keys' (attenzione: le chiavi non appartenenti a Gitea saranno perse)
dashboard.resync_all_sshkeys_success=Tutte le chiavi pubbliche riscritte con successo.
dashboard.resync_all_update_hooks=Riscrivere tutti gli update hook dei repository (necessario quando il percorso di configurazione personalizzata viene modificato)
dashboard.resync_all_update_hooks_success=Tutti gli update hook dei repository riscritti con successo.

View File

@@ -48,7 +48,7 @@ cancel=キャンセル
install=インストール
title=インストールをする前に必要な準備をしましょう
docker_helper=DockerでGogsを稼動する場合は、このページに変更を加える前に、 <a target="_blank" href="%s">ガイドライン</a>をよく読んでください!
requite_db_desc=Gogs は、MySQL、PostgreSQL、SQLite3 または TiDB が必要です。
requite_db_desc=Gitea は、MySQL、PostgreSQL、SQLite3 または TiDB が必要です。
db_title=データベース設定
db_type=データベースの種類
host=ホスト
@@ -64,13 +64,13 @@ err_invalid_tidb_name=TiDB データベース名は文字"."と"-"を許可し
no_admin_and_disable_registration=管理者アカウントを作成せずに登録を無効にすることはできません。
err_empty_admin_password=管理者パスワードは空白にできません。
general_title=Gogs の全般設定
general_title=Gitea の全般設定
app_name=アプリケーション名
app_name_helper=素晴らしい組織名を入れてください!
repo_path=リポジトリのルートパス
repo_path_helper=すべての Git リモート リポジトリはこのディレクトリに保存されます。
run_user=実行ユーザ
run_user_helper=ユーザーはリポジトリ ルートパスへのアクセス、及びGogs を実行する権限を所有する必要があります。
run_user_helper=ユーザーはリポジトリ ルートパスへのアクセス、及びGitea を実行する権限を所有する必要があります。
domain=ドメイン
domain_helper=これはSSH用クローンURLに影響します。
ssh_port=SSH ポート
@@ -110,7 +110,7 @@ admin_name=ユーザ名
admin_password=パスワード
confirm_password=パスワード確認
admin_email=管理者の電子メール
install_gogs=Gogs をインストール
install_gogs=Gitea をインストール
test_git_failed='Git' コマンドテストに失敗: %v
sqlite3_not_available=このリリース バージョンは SQLite3 をサポートしていません。gobuild バージョンではない、公式のバイナリ バージョンを %s からダウンロードしてください。
invalid_db_setting=データベースの設定が正しくありません: %v
@@ -118,7 +118,7 @@ invalid_repo_path=リポジトリのルート パスが無効です: %v
run_user_not_match=実行ユーザーは、現在のユーザーではない: %s-> %s
save_config_failed=構成の保存に失敗した: %v
invalid_admin_setting=管理者アカウントの設定が無効です: %v
install_success=ようこそ!我々はあなたが Gogs を選んでくれて嬉しいです!楽しみましょう!
install_success=ようこそ!我々はあなたが Gitea を選んでくれて嬉しいです!楽しみましょう!
invalid_log_root_path=ログのルートパスがむこうです: %v
[home]
@@ -162,7 +162,7 @@ reset_password=パスワードリセット
invalid_code=申し訳ありませんが、確認用コードが期限切れまたは無効です。
reset_password_helper=パスワードをリセットするにはここをクリック
password_too_short=6文字未満のパスワードは設定できません。
non_local_account=Non-local accounts cannot change passwords through Gogs.
non_local_account=Non-local accounts cannot change passwords through Gitea.
[mail]
activate_account=あなたのアカウントを有効にしてください。
@@ -194,7 +194,7 @@ CommitSummary=Commit summary
CommitMessage=Commit message
CommitChoice=Commit choice
TreeName=File path
Content=Content
Content=コンテンツ
require_error=空にできません
alpha_dash_error=アルファベット、数字、ハイフン"-"、アンダースコア"_"のいずれかの必要があります
@@ -248,7 +248,7 @@ form.name_pattern_not_allowed=ユーザ名のパターン '%s' は許可され
[settings]
profile=プロフィール
password=パスワード
avatar=Avatar
avatar=アバター
ssh_keys=SSH キー
social=SNSアカウント
applications=アプリケーション
@@ -269,7 +269,7 @@ change_username_prompt=この変更はリンクをアカウントに関連付け
continue=続行
cancel=キャンセル
lookup_avatar_by_mail=Lookup Avatar by mail
lookup_avatar_by_mail=メールからアバターを取得
federated_avatar_lookup=Federated Avatar Lookup
enable_custom_avatar=カスタムのアバターを有効にする
choose_new_avatar=新しいアバターを選択
@@ -327,7 +327,7 @@ unbind_success=SNSアカウントがバインドされていない。
manage_access_token=パーソナルアクセス トークンを管理
generate_new_token=新しいトークンを生成
tokens_desc=生成したトークンを利用して Gogs の API にアクセスすることができます。
tokens_desc=生成したトークンを利用して Gitea の API にアクセスすることができます。
new_token_desc=今のところ、全てのトークンはあなたのアカウントにフルアクセスできます。
token_name=トークン名
generate_token=トークンを生成
@@ -370,7 +370,7 @@ mirror_prune_desc=Remove any remote-tracking references that no longer exist on
mirror_interval=ミラー 間隔(時)
mirror_address=ミラー アドレス
mirror_address_desc=Please include necessary user credentials in the address.
mirror_last_synced=Last Synced
mirror_last_synced=最終同期
watchers=ウォッチャー
stargazers=Stargazers
forks=フォーク
@@ -429,29 +429,29 @@ file_too_large=このファイルは大きすぎるため、表示できませ
editor.new_file=New file
editor.upload_file=Upload file
editor.edit_file=Edit file
editor.edit_file=ファイルを編集
editor.preview_changes=Preview Changes
editor.cannot_edit_non_text_files=Cannot edit non-text files
editor.edit_this_file=Edit this file
editor.edit_this_file=このファイルを編集
editor.must_be_on_a_branch=You must be on a branch to make or propose changes to this file
editor.fork_before_edit=You must fork this repository before editing the file
editor.delete_this_file=Delete this file
editor.delete_this_file=このファイルを削除
editor.must_have_write_access=You must have write access to make or propose changes to this file
editor.file_delete_success=File '%s' has been deleted successfully!
editor.name_your_file=Name your file...
editor.filename_help=To add directory, just type it and press /. To remove a directory, go to the beginning of the field and press backspace.
editor.or=or
editor.cancel_lower=cancel
editor.commit_changes=Commit Changes
editor.cancel_lower=キャンセル
editor.commit_changes=変更をコミット
editor.add_tmpl=Add '%s/<filename>'
editor.add=Add '%s'
editor.update=Update '%s'
editor.delete=Delete '%s'
editor.add='%s' を追加
editor.update='%s' を更新
editor.delete='%s' を削除
editor.commit_message_desc=Add an optional extended description...
editor.commit_directly_to_this_branch=Commit directly to the <strong class="branch-name">%s</strong> branch.
editor.create_new_branch=Create a <strong>new branch</strong> for this commit and start a pull request.
editor.new_branch_name_desc=New branch name...
editor.cancel=Cancel
editor.cancel=キャンセル
editor.filename_cannot_be_empty=Filename cannot be empty.
editor.branch_already_exists=Branch '%s' already exists in this repository.
editor.directory_is_a_file=Entry '%s' in the parent path is a file not a directory in this repository.
@@ -616,7 +616,7 @@ wiki.save_page=ページを保存
wiki.last_commit_info=%s このページを編集 %s
wiki.edit_page_button=編集
wiki.new_page_button=新規ページ
wiki.delete_page_button=Delete Page
wiki.delete_page_button=ページの削除
wiki.delete_page_notice_1=This will delete the page <code>"%s"</code>. Please be certain.
wiki.page_already_exists=既に同じ名前のWiki ページが存在します。
wiki.pages=ページ
@@ -625,15 +625,15 @@ wiki.last_updated=最終更新 %s
settings=設定
settings.options=オプション
settings.collaboration=コラボレーション
settings.collaboration.admin=Admin
settings.collaboration.write=Write
settings.collaboration.read=Read
settings.collaboration.admin=管理
settings.collaboration.write=書込
settings.collaboration.read=読込
settings.collaboration.undefined=Undefined
settings.hooks=Webhooks
settings.githooks=Git のフック
settings.basic_settings=基本設定
settings.mirror_settings=Mirror Settings
settings.sync_mirror=Sync Now
settings.sync_mirror=今すぐ同期
settings.mirror_sync_in_progress=Mirror syncing is in progress, please refresh page in about a minute.
settings.site=公式サイト
settings.update_settings=設定の更新
@@ -649,7 +649,7 @@ settings.use_internal_issue_tracker=Use builtin lightweight issue tracker
settings.use_external_issue_tracker=外部課題トラッキングシステムを使用
settings.tracker_url_format=外部課題トラッキングツール URLのフォーマット
settings.tracker_issue_style=External Issue Tracker Naming Style:
settings.tracker_issue_style.numeric=Numeric
settings.tracker_issue_style.numeric=数値
settings.tracker_issue_style.alphanumeric=Alphanumeric
settings.tracker_url_format_desc=You can use placeholder <code>{user} {repo} {index}</code> for user name, repository name and issue index.
settings.pulls_desc=Enable pull requests to accept public contributions
@@ -665,10 +665,10 @@ settings.transfer_desc=リポジトリをあなたが管理者権限を持って
settings.transfer_notices_1=-新しい所有者が個人ユーザーの場合、あなたがアクセスできなくなります。
settings.transfer_notices_2=- You will conserve access if new owner is an organization and if you're one of the owners.
settings.transfer_form_title=操作を確認するために、以下の情報を入力してください。
settings.wiki_delete=Erase Wiki Data
settings.wiki_delete_desc=Once you erase wiki data there is no going back. Please be certain.
settings.wiki_delete=Wikiのデータ消去
settings.wiki_delete_desc=Wikiのデータを消去すると元に戻すことは出来ません。よく確認してください。
settings.wiki_delete_notices_1=- This will delete and disable the wiki for %s
settings.wiki_deletion_success=Repository wiki data have been erased successfully.
settings.wiki_deletion_success=Wikiのデータ消去が完了しました。
settings.delete=このリポジトリを削除
settings.delete_desc=リポジトリを削除すると元に戻せません。確実に確認してください。
settings.delete_notices_1=-この操作は<strong>元に戻せません</strong> 。
@@ -889,7 +889,7 @@ total=合計: %d
dashboard.statistic=統計
dashboard.operations=操作
dashboard.system_status=システム モニターのステータス
dashboard.statistic_info=Gogs データベースは <b>%d</b> ユーザ, <b>%d</b> 組織, <b>%d</b> 公開鍵, <b>%d</b> リポジトリ, <b>%d</b> ウォッチ, <b>%d</b> スター, <b>%d</b> 行動, <b>%d</b> アクセス, <b>%d</b> 問題, <b>%d</b> コメント, <b>%d</b> ソーシャルアカウント, <b>%d</b> フォロー, <b>%d</b> ミラー, <b>%d</b> リリース, <b>%d</b> ログイン元, <b>%d</b> webhook, <b>%d</b> マイルストーン, <b>%d</b> ラベル, <b>%d</b> フックタスク, <b>%d</b> チーム, <b>%d</b> アップデートタスク, <b>%d</b> 添付ファイル の情報を持っています。
dashboard.statistic_info=Gitea データベースは <b>%d</b> ユーザ, <b>%d</b> 組織, <b>%d</b> 公開鍵, <b>%d</b> リポジトリ, <b>%d</b> ウォッチ, <b>%d</b> スター, <b>%d</b> 行動, <b>%d</b> アクセス, <b>%d</b> 問題, <b>%d</b> コメント, <b>%d</b> ソーシャルアカウント, <b>%d</b> フォロー, <b>%d</b> ミラー, <b>%d</b> リリース, <b>%d</b> ログイン元, <b>%d</b> webhook, <b>%d</b> マイルストーン, <b>%d</b> ラベル, <b>%d</b> フックタスク, <b>%d</b> チーム, <b>%d</b> アップデートタスク, <b>%d</b> 添付ファイル の情報を持っています。
dashboard.operation_name=操作の名前
dashboard.operation_switch=スイッチ
dashboard.operation_run=実行

View File

@@ -6,7 +6,7 @@ explore=Izpētīt
help=Palīdzība
sign_in=Pierakstīties
sign_out=Izrakstīties
sign_up=Pieteikties
sign_up=Reģistrēties
register=Reģistrēties
website=Mājas lapa
version=Versija
@@ -47,8 +47,8 @@ cancel=Atcelt
[install]
install=Instalācija
title=Instalācijas soļi pirmo reizi palaižot
docker_helper=Ja Gogs tiek lietots zem Docker, izlasiet uzmanīgi <a target="_blank" href="%s">vadlīnijas</a>, pirms ko maināt šajā lapā!
requite_db_desc=Gogs nepieciešams MySQL, PostgreSQL, SQLite3 vai TiDB.
docker_helper=Ja Gitea tiek lietots zem Docker, izlasiet uzmanīgi <a target="_blank" href="%s">vadlīnijas</a>, pirms ko maināt šajā lapā!
requite_db_desc=Gitea nepieciešams MySQL, PostgreSQL, SQLite3 vai TiDB.
db_title=Datu bāzes iestatījumi
db_type=Datu bāzes veids
host=Resursdators
@@ -64,13 +64,13 @@ err_invalid_tidb_name=TiDB datu bāzes nosaukums nevar saturēt simbolus "." un
no_admin_and_disable_registration=Reģistrāciju nevar atslēgt, kamēr nav izveidots administratora konts.
err_empty_admin_password=Administratora kontam ir obligāti jānorāda parole.
general_title=Gogs vispārīgie iestatījumi
general_title=Gitea vispārīgie iestatījumi
app_name=Lietotnes nosaukums
app_name_helper=Norādiet organizācijas nosaukumu šeit!
repo_path=Repozitoriju glabāšanas vieta
repo_path_helper=Visi Git attālinātie repozitoriji tiks glabāti šajā direktorijā.
run_user=Izpildes lietotājs
run_user_helper=Lietotājam ir jābūt rakstīšanas tiesībām repozitorija saknes direktorijai un Gogs jābūt palaistam zem šī lietotāja.
run_user_helper=Lietotājam ir jābūt rakstīšanas tiesībām repozitorija saknes direktorijai un Gitea jābūt palaistam zem šī lietotāja.
domain=Domēns
domain_helper=Tas ietekmē SSH klonēšanas URL.
ssh_port=SSH ports
@@ -96,8 +96,8 @@ offline_mode=Iespējot bezsaistes režīmu
offline_mode_popup=Atspējot CDN arī produkcijas režīmā, visi resursu faili tiks piegādāti no servera.
disable_gravatar=Atspējot Gravatar pakalpojumu
disable_gravatar_popup=Atspējot Gravatar un citus avotus, visus avatarus augšupielādēts lietotāji vai izmantos noklusēto attēlu.
federated_avatar_lookup=Enable Federated Avatars Lookup
federated_avatar_lookup_popup=Enable federated avatars lookup to use federated open source service based on libravatar.
federated_avatar_lookup=Iespējot apvienoto profila bilžu meklētāju
federated_avatar_lookup_popup=Iespējot apvienoto profila bilžu meklētāju, lai izmantotu atvērtā koda apvienoto servisu balstītu uz libravatar.
disable_registration=Atspējot lietotāju reģistrāciju
disable_registration_popup=Atspējot lietotāju reģistrāciju, tikai administrators varēs izveidot jaunus lietotāju kontus.
enable_captcha=Iespējot drošības kodu
@@ -110,7 +110,7 @@ admin_name=Lietotājvārds
admin_password=Parole
confirm_password=Apstipriniet paroli
admin_email=Administratora e-pasts
install_gogs=Instalēt Gogs
install_gogs=Instalēt Gitea
test_git_failed=Kļūda pārbaudot 'git' komandu: %v
sqlite3_not_available=Jūsu versija neatbalsta SQLite3, lūdzu lejupielādējiet oficiālo bināro versiju no %s, NEVIS gobuild versiju.
invalid_db_setting=Datu bāzes iestatījums nav pareizs: %v
@@ -118,7 +118,7 @@ invalid_repo_path=Repozitorija atrašanās vieta ir nekorekta: %v
run_user_not_match=Izpildes lietotājs nav pašreizējais lietotājs: %s -> %s
save_config_failed=Neizdevās saglabāt konfigurāciju: %v
invalid_admin_setting=Nekorekts admin konta iestatījums: %v
install_success=Laipni lūdzam! Mēs priecājamies, ka Jūs izvēlaties Gogs, patīkamu lietošanu!
install_success=Laipni lūdzam! Mēs priecājamies, ka Jūs izvēlaties Gitea, patīkamu lietošanu!
invalid_log_root_path=Norādītā žurnalizēšanas direktorija ir kļūdaina: %v
[home]
@@ -162,7 +162,7 @@ reset_password=Atjaunot savu paroli
invalid_code=Atvainojiet, Jūsu apstiprināšanas kodam ir beidzies derīguma termiņš vai arī tas ir nepareizs.
reset_password_helper=Nospiediet šeit, lai atjaunotu paroli
password_too_short=Paroles garums nedrīkst būt mazāks par 6.
non_local_account=Tikai lokālie konti var nomainīt savu paroli Gogs.
non_local_account=Tikai lokālie konti var nomainīt savu paroli Gitea.
[mail]
activate_account=Lūdzu, aktivizējiet savu kontu
@@ -189,12 +189,12 @@ TeamName=Komandas nosaukums
AuthName=Autorizācijas nosaukums
AdminEmail=Admin e-pasta adrese
NewBranchName=New branch name
CommitSummary=Commit summary
CommitMessage=Commit message
CommitChoice=Commit choice
TreeName=File path
Content=Content
NewBranchName=Jauna atzara nosaukums
CommitSummary=Revīzijas kopsavilkums
CommitMessage=Revīzijas ziņojums
CommitChoice=Revīzijas izvēle
TreeName=Faila ceļš
Content=Saturs
require_error=` nedrīkst būt tukšs.`
alpha_dash_error=` drīkst saturēt tikai latīņu alfabēta burtus, ciparus vai domuzīmes (-_).`
@@ -269,8 +269,8 @@ change_username_prompt=Šī izmaiņa ietekmēs saites, kas norāda uz Jūsu kont
continue=Turpināt
cancel=Atcelt
lookup_avatar_by_mail=Lookup Avatar by mail
federated_avatar_lookup=Federated Avatar Lookup
lookup_avatar_by_mail=Meklēt profila bildes pēc e-pasta
federated_avatar_lookup=Apvienotais profila bilžu meklētājs
enable_custom_avatar=Iespējot maināmu profila attēlu
choose_new_avatar=Izvēlēties jaunu profila attēlu
update_avatar=Saglabāt profila bildi
@@ -327,7 +327,7 @@ unbind_success=Sociālais konts tika atsaistīts.
manage_access_token=Pārvaldīt personīgos piekļuves talonus
generate_new_token=Ģenerēt jaunu talonu
tokens_desc=Taloni, kurus esat uzģenerējuši, kas var tikt izmantoti, lai piekļūtu Gogs API.
tokens_desc=Taloni, kurus esat uzģenerējuši, kas var tikt izmantoti, lai piekļūtu Gitea API.
new_token_desc=Pašlaik visiem taloniem ir pilna piekļuve Jūsu kontam.
token_name=Talona nosaukums
generate_token=Ģenerēt talonu
@@ -357,7 +357,7 @@ fork_from=Atdalīt no
fork_visiblity_helper=Atdalītam repozitorijam nav iespējams nomainīt tā redzamību
repo_desc=Apraksts
repo_lang=Valoda
repo_gitignore_helper=Select .gitignore templates
repo_gitignore_helper=Izvēlieties .gitignore sagatavi
license=Licence
license_helper=Izvēlieties licences failu
readme=LasiMani
@@ -370,7 +370,7 @@ mirror_prune_desc=Izdzēst visas ārējās atsauces, kas ārējā repozitorijā
mirror_interval=Spoguļošanas intervāls (stundās)
mirror_address=Spoguļa adrese
mirror_address_desc=Lūdzu iekļaujiet adresē nepieciešamo lietotājvārdu/paroli.
mirror_last_synced=Last Synced
mirror_last_synced=Pēdējo reizi sinhronizēts
watchers=Novērotāji
stargazers=Zvaigžņdevēji
forks=Atdalītie repozitoriji
@@ -427,43 +427,43 @@ file_view_raw=Rādīt neapstrādātu
file_permalink=Patstāvīgā saite
file_too_large=Šis fails ir par lielu, lai to parādītu
editor.new_file=New file
editor.upload_file=Upload file
editor.edit_file=Edit file
editor.preview_changes=Preview Changes
editor.cannot_edit_non_text_files=Cannot edit non-text files
editor.edit_this_file=Edit this file
editor.must_be_on_a_branch=You must be on a branch to make or propose changes to this file
editor.fork_before_edit=You must fork this repository before editing the file
editor.delete_this_file=Delete this file
editor.must_have_write_access=You must have write access to make or propose changes to this file
editor.file_delete_success=File '%s' has been deleted successfully!
editor.name_your_file=Name your file...
editor.filename_help=To add directory, just type it and press /. To remove a directory, go to the beginning of the field and press backspace.
editor.or=or
editor.cancel_lower=cancel
editor.commit_changes=Commit Changes
editor.add_tmpl=Add '%s/<filename>'
editor.add=Add '%s'
editor.update=Update '%s'
editor.delete=Delete '%s'
editor.commit_message_desc=Add an optional extended description...
editor.commit_directly_to_this_branch=Commit directly to the <strong class="branch-name">%s</strong> branch.
editor.create_new_branch=Create a <strong>new branch</strong> for this commit and start a pull request.
editor.new_branch_name_desc=New branch name...
editor.cancel=Cancel
editor.filename_cannot_be_empty=Filename cannot be empty.
editor.branch_already_exists=Branch '%s' already exists in this repository.
editor.directory_is_a_file=Entry '%s' in the parent path is a file not a directory in this repository.
editor.filename_is_a_directory=The filename '%s' is an existing directory in this repository.
editor.file_editing_no_longer_exists=The file '%s' you are editing no longer exists in the repository.
editor.file_changed_while_editing=File content has been changed since you started editing. <a target="_blank" href="%s">Click here</a> to see what have been changed or <strong>press commit again</strong> to overwrite those changes.
editor.file_already_exists=A file with name '%s' already exists in this repository.
editor.no_changes_to_show=There are no changes to show.
editor.fail_to_update_file=Failed to update/create file '%s' with error: %v
editor.add_subdir=Add subdirectory...
editor.unable_to_upload_files=Failed to upload files to '%s' with error: %v
editor.upload_files_to_dir=Upload files to '%s'
editor.new_file=Jauns fails
editor.upload_file=Augšupielādēt failu
editor.edit_file=Labot failu
editor.preview_changes=Priekšskatīt izmaiņas
editor.cannot_edit_non_text_files=Nevar rediģēt failus, kas nav teksta faili
editor.edit_this_file=Rediģēt šo failu
editor.must_be_on_a_branch=Ir jābūt izvēlētam atzaram, lai varētu veikt vai piedāvāt izmaiņas šim failam
editor.fork_before_edit=Lai varētu labot failu ir nepieciešams atdalīt repozitoriju
editor.delete_this_file=Dzēst šo failu
editor.must_have_write_access=Jums ir jābūt rakstīšanas tiesībām, lai varētu veikt vai piedāvāt izmaiņas šim failam
editor.file_delete_success=Fails '%s' ir veiksmīgi izdzēsts!
editor.name_your_file=Ievadiet faila nosaukumu...
editor.filename_help=Lai pievienotu direktoriju, ierakstiet tās nosaukumu un nospiediet /. Lai noņemtu direktoriju, ielieciet kursoru pirms faila nosaukuma un nospiediet atpakaļatkāpes taustiņu.
editor.or=vai
editor.cancel_lower=atcelt
editor.commit_changes=Pabeigt revīziju
editor.add_tmpl=Pievienot '%s/<filename>'
editor.add=Pievienot '%s'
editor.update=Atjaunināt '%s'
editor.delete=Dzēst '%s'
editor.commit_message_desc=Pievienot neobligātu paplašinātu aprakstu...
editor.commit_directly_to_this_branch=Apstiprināt revīzijas izmaiņas atzarā <strong class="branch-name">%s</strong>.
editor.create_new_branch=Izveidot <strong>jaunu atzaru</strong> un izmaiņu pieprasījumu šai revīzijai.
editor.new_branch_name_desc=Jaunā atzara nosaukums...
editor.cancel=Atcelt
editor.filename_cannot_be_empty=Nav ievadīts faila nosaukums.
editor.branch_already_exists=Atzars '%s' šajā repozitorijā jau eksistē.
editor.directory_is_a_file=Ieraksts '%s' vecāka ceļā ir fails nevis direktorija šajā repozitorijā.
editor.filename_is_a_directory=Faila nosaukums '%s' sakrīt ar direktorijas nosaukumu šajā repozitorijā.
editor.file_editing_no_longer_exists=Fails '%s', ko labojat, vairs neeksistē repozitorijā.
editor.file_changed_while_editing=Faila saturs ir mainījies kopš brīža, kad sākāt to labot. <a target="_blank" href="%s">Nospiediet šeit</a>, lai redzētu kas ir mainījies vai <strong>nospiediet atkārtoti pabeigt revīziju</strong>, lai pārrakstītu izmaiņas.
editor.file_already_exists=Fails ar nosaukumu '%s' repozitorijā jau eksistē.
editor.no_changes_to_show=Nav izmaiņu, ko rādīt.
editor.fail_to_update_file=Neizdevās izmainīt/izveidot failu '%s', kļūda: %v
editor.add_subdir=Pievienot apakšdirektoriju...
editor.unable_to_upload_files=Neizdevās augšupielādēt failus uz direktoriju '%s', kļūda: %v
editor.upload_files_to_dir=Augšupielādēt failus uz direktoriju '%s'
commits.commits=Revīzijas
commits.search=Meklēt revīzijas
@@ -490,11 +490,11 @@ issues.create=Pieteikt problēmu
issues.new_label=Jauna etiķete
issues.new_label_placeholder=Etiķetes nosaukums...
issues.create_label=Izveidot etiķeti
issues.label_templates.title=Load a predefined set of labels
issues.label_templates.info=There arent any labels yet. You can click on the "New Label" button above to create one or use a predefined set below.
issues.label_templates.helper=Select a label set
issues.label_templates.use=Use this label set
issues.label_templates.fail_to_load_file=Failed to load label template file '%s': %v
issues.label_templates.title=Ielādēt sākotnēji noteikto etiķešu kopu
issues.label_templates.info=Nav definēta neviena etiķete. Nospiediet pogu "Izveidot etiķeti", lai to izveidotu vai izmantojiet zemāk piedāvātās etiķetes.
issues.label_templates.helper=Izvēlieties etiķešu kopu
issues.label_templates.use=Izmantot šo etiķešu kopu
issues.label_templates.fail_to_load_file=Neizdevās ielādēt etiķetes sagataves failu '%s': %v
issues.open_tab=%d atvērti
issues.close_tab=%d aizvērti
issues.filter_label=Etiķete
@@ -536,7 +536,7 @@ issues.commit_ref_at=`pieminēja šo problēmu revīzijā <a id="%[1]s" href="#%
issues.poster=Autors
issues.collaborator=Līdzstrādnieks
issues.owner=Īpašnieks
issues.sign_in_require_desc=<a href="%s">Sign in</a> to join this conversation.
issues.sign_in_require_desc=<a href="%s">Pierakstieties</a>, lai pievienotos šai sarunai.
issues.edit=Labot
issues.cancel=Atcelt
issues.save=Saglabāt
@@ -551,8 +551,8 @@ issues.label_deletion=Etiķetes dzēšana
issues.label_deletion_desc=Dzēšot šo etiķeti, tā tiks noņemta no visām saistītajām problēmām. Vai vēlaties turpināt?
issues.label_deletion_success=Etiķete tika veiksmīgi izdzēsta!
issues.num_participants=%d dalībnieki
issues.attachment.open_tab=`Click to see "%s" in a new tab`
issues.attachment.download=`Click to download "%s"`
issues.attachment.open_tab=`Noklikšķiniet, lai apskatītos "%s" jaunā logā`
issues.attachment.download=`Noklikšķiniet, lai lejupielādētu "%s"`
pulls.new=Jauns izmaiņu pieprasījums
pulls.compare_changes=Salīdzināt izmaiņas
@@ -632,9 +632,9 @@ settings.collaboration.undefined=Nedefinētas
settings.hooks=Tīmekļa āķi
settings.githooks=Git āķi
settings.basic_settings=Pamatiestatījumi
settings.mirror_settings=Mirror Settings
settings.sync_mirror=Sync Now
settings.mirror_sync_in_progress=Mirror syncing is in progress, please refresh page in about a minute.
settings.mirror_settings=Spoguļa iestatījumi
settings.sync_mirror=Sinhronizēt tagad
settings.mirror_sync_in_progress=Notiek spoguļa sinhronizācija, uzgaidiet aptuveni minūti un atjaunojiet lapu.
settings.site=Oficiālā mājas lapa
settings.update_settings=Mainīt iestatījumus
settings.change_reponame_prompt=Šī izmaiņa ietekmēs saites, kas ir saistītas ar šo repozitoriju.
@@ -644,8 +644,8 @@ settings.use_internal_wiki=Izmantot iebūvēto vikivietni
settings.use_external_wiki=Izmantot ārējo vikivietni
settings.external_wiki_url=Ārējās Vikivietnes adrese
settings.external_wiki_url_desc=Apmeklētāji tiks novirzīti uz adresi, kad viņi uzklikšķinās uz cilnes.
settings.issues_desc=Enable issue tracker
settings.use_internal_issue_tracker=Use builtin lightweight issue tracker
settings.issues_desc=Iespējot problēmu sekotāju
settings.use_internal_issue_tracker=Izmantot iebūvētu vieglu problēmu sekotāju
settings.use_external_issue_tracker=Izmantot ārējo problēmu sekotāju
settings.tracker_url_format=Ārējā problēmu sekotāja adreses formāts
settings.tracker_issue_style=Ārējā problēmu reģistra nosaukumu stils:
@@ -720,8 +720,8 @@ settings.event_send_everything=Vēlos saņemt <strong>visu</strong>.
settings.event_choose=Atzīmēt, ko vēlos saņemt.
settings.event_create=Izveidot
settings.event_create_desc=Atzara vai taga izveidošana
settings.event_pull_request=Pull Request
settings.event_pull_request_desc=Pull request opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, or synchronized.
settings.event_pull_request=Izmaiņu pieprasījums
settings.event_pull_request_desc=Atvērts, aizvērts, atkāroti atvērts, labots, piešķirts vai noņemts izmaiņu pieprasījums, vai mainīta etiķete, vai veikta sinhronizācija.
settings.event_push=Izmaiņu nosūtīšana
settings.event_push_desc=Git izmaiņu nosūtīšana uz repozitoriju
settings.active=Aktīvs
@@ -889,7 +889,7 @@ total=Kopā: %d
dashboard.statistic=Statistika
dashboard.operations=Darbības
dashboard.system_status=Sistēmas uzraudzības statuss
dashboard.statistic_info=Gogs datu bāze satur <b>%d</b> lietotājus, <b>%d</b> organizācijas, <b>%d</b> publiskās atslēgas, <b>%d</b> repozitorijus, <b>%d</b> vērošanas, <b>%d</b> atzīmētas zvaigznītes, <b>%d</b> darbības, <b>%d</b> piekļuves, <b>%d</b> problēmas, <b>%d</b> komentārus, <b>%d</b> sociālos kontus, <b>%d</b> sekošanas, <b>%d</b> spoguļošanas, <b>%d</b> izlaides, <b>%d</b> login sources, <b>%d</b> tīmekļa āķus, <b>%d</b> starpposmus, <b>%d</b> etiķetes, <b>%d</b> āķu uzdevumus, <b>%d</b> komandas, <b>%d</b> labotus uzdevumus, <b>%d</b> pielikumus.
dashboard.statistic_info=Gitea datu bāze satur <b>%d</b> lietotājus, <b>%d</b> organizācijas, <b>%d</b> publiskās atslēgas, <b>%d</b> repozitorijus, <b>%d</b> vērošanas, <b>%d</b> atzīmētas zvaigznītes, <b>%d</b> darbības, <b>%d</b> piekļuves, <b>%d</b> problēmas, <b>%d</b> komentārus, <b>%d</b> sociālos kontus, <b>%d</b> sekošanas, <b>%d</b> spoguļošanas, <b>%d</b> izlaides, <b>%d</b> login sources, <b>%d</b> tīmekļa āķus, <b>%d</b> starpposmus, <b>%d</b> etiķetes, <b>%d</b> āķu uzdevumus, <b>%d</b> komandas, <b>%d</b> labotus uzdevumus, <b>%d</b> pielikumus.
dashboard.operation_name=Darbības nosaukums
dashboard.operation_switch=Pārslēgt
dashboard.operation_run=Palaist
@@ -1113,18 +1113,18 @@ config.cookie_life_time=Sīkdatņu glabāšanas ilgums
config.picture_config=Attēlu konfigurācija
config.picture_service=Lokāli attēli
config.disable_gravatar=Atspējot Gravatar
config.enable_federated_avatar=Enable Federated Avatars
config.enable_federated_avatar=Iespējot apvienotās profila bildes
config.git_config=Git konfigurācija
config.git_disable_diff_highlight=Disable Diff Syntax Highlight
config.git_max_diff_lines=Max Diff Lines (for a single file)
config.git_max_diff_line_characters=Max Diff Characters (for a single line)
config.git_max_diff_files=Max Diff Files (to be shown)
config.git_disable_diff_highlight=Atspējot salīdzināšanas sintakses iekrāsošanu
config.git_max_diff_lines=Maksimālais salīdzināmo rindu skaits vienam failam
config.git_max_diff_line_characters=Maksimālais salīdzināmo simbolu skaits vienai rindai
config.git_max_diff_files=Maksimālais salīdzināmo failu skaits, ko attēlot
config.git_gc_args=GC argumenti
config.git_migrate_timeout=Migrācijas noilgums
config.git_mirror_timeout=Mirror Update Timeout
config.git_clone_timeout=Clone Operation Timeout
config.git_pull_timeout=Pull Operation Timeout
config.git_mirror_timeout=Spoguļa atjaunošanas noilgums
config.git_clone_timeout=Klonēšanas darbības noilgums
config.git_pull_timeout=Izmaiņu saņemšanas darbības noilgums
config.git_gc_timeout=GC darbības noilgums
config.log_config=Žurnalizēšanas konfigurācija

View File

@@ -47,8 +47,8 @@ cancel=Annuleren
[install]
install=Installatie
title=Installatiestappen voor de eerste keer opstarten
docker_helper=Als u gebruik maakt Gogs binnen Docker, lees dan de <a target="_blank" href="%s">richtlijnen</a> voordat u iets veranderen op deze pagina!
requite_db_desc=Gogs vereist MySQL, PostgreSQL, SQite3 of TiDB.
docker_helper=Als u gebruik maakt Gitea binnen Docker, lees dan de <a target="_blank" href="%s">richtlijnen</a> voordat u iets veranderen op deze pagina!
requite_db_desc=Gitea vereist MySQL, PostgreSQL, SQite3 of TiDB.
db_title=Database-instellingen
db_type=Database-type
host=Host
@@ -58,7 +58,7 @@ db_name=Database naam
db_helper=Gebruik InnoDB engine met utf8_general_ci karakterset voor MySQL.
ssl_mode=SSL-modus
path=Pad
sqlite_helper=Het pad van de SQLite3- of TiDB-database.<br>Als u Gogs start als een service, geef dan een absoluut pad op.
sqlite_helper=Het pad van de SQLite3- of TiDB-database.<br>Als u Gitea start als een service, geef dan een absoluut pad op.
err_empty_db_path=SQLite3 of TiDB databankpad mag niet leeg.
err_invalid_tidb_name=TiDB databank naam niet tekens kunnen "." en "-".
no_admin_and_disable_registration=Je kunt niet de registratie uit te schakelen zonder een beheerders account.
@@ -70,7 +70,7 @@ app_name_helper=Plaats hier je organisatienaam in grote letters!
repo_path=Repositories basis directorie
repo_path_helper=Alle remote Git repositories worden in deze directorie opgeslagen
run_user=Uitvoerende gebruikersnaam
run_user_helper=Deze gebruiker moet toegang hebben tot de git repositorie directorie en moet Gogs kunnen starten
run_user_helper=Deze gebruiker moet toegang hebben tot de git repositorie directorie en moet Gitea kunnen starten
domain=Domein
domain_helper=Dit heeft invloed op de SSH kloon URLs
ssh_port=SSH-poort
@@ -110,7 +110,7 @@ admin_name=Gebruikersnaam
admin_password=Wachtwoord
confirm_password=Verifieer wachtwoord
admin_email=Beheerder E-mail
install_gogs=Installeer Gogs
install_gogs=Installeer Gitea
test_git_failed=Git test niet gelukt: 'git' commando %v
sqlite3_not_available=Uw versie biedt geen ondersteuning voor SQLite3, download de officiële binaire versie van %s, niet de gobuild versie.
invalid_db_setting=Uw database instellingen zijn niet correct: %v
@@ -118,7 +118,7 @@ invalid_repo_path=Repositorie basis map is niet correct: %v
run_user_not_match=De uitvoerende gebruiker is niet de huidig gebruiker: %s -> %s
save_config_failed=Kan de configuratie niet opslaan: %v
invalid_admin_setting=Uw admin-instellingen zijn niet geldig: %v
install_success=Welkom! Wij zijn veheugd dat u voor Gogs heeft gekozen, veel plezier en tot ziens
install_success=Welkom! Wij zijn veheugd dat u voor Gitea heeft gekozen, veel plezier en tot ziens
invalid_log_root_path=Ongeldig log-pad: %v
[home]
@@ -162,7 +162,7 @@ reset_password=Reset uw wachtwoord
invalid_code=Sorry, uw bevestigingscode is verlopen of niet meer geldig.
reset_password_helper=Klik hier om uw wachtwoord opnieuw in te stellen.
password_too_short=De lengte van uw wachtwoord moet minimaal zes karakters zijn.
non_local_account=Non-local accounts cannot change passwords through Gogs.
non_local_account=Non-local accounts cannot change passwords through Gitea.
[mail]
activate_account=Activeer uw account
@@ -193,8 +193,8 @@ NewBranchName=New branch name
CommitSummary=Commit summary
CommitMessage=Commit message
CommitChoice=Commit choice
TreeName=File path
Content=Content
TreeName=Bestandspad
Content=Inhoud
require_error=kan niet leeg zijn.
alpha_dash_error=moet een valide alfanumeriek of dash(-_) karakter zijn.
@@ -222,7 +222,7 @@ user_not_exist=Gegeven gebruiker bestaat niet.
last_org_owner=De gebruiker die u probeert te verwijderen is het enige lid (eigenaar) van dit team. U moet eerst nieuwe lid (eigenaar) aanstellen.
invalid_ssh_key=Sorry, we zijn niet in staat om uw SSH-sleutel te verifiëren: %s
unable_verify_ssh_key=Gogs kan niet controleren of uw SSH-sleutel, maar wij gaan ervan uit dat is geldig, zorg ervoor dat uzelf.
unable_verify_ssh_key=Gitea kan niet controleren of uw SSH-sleutel, maar wij gaan ervan uit dat is geldig, zorg ervoor dat uzelf.
auth_failed=Verificatie mislukt: %v
still_own_repo=Uw account heeft nog een eigendom op een repositorie. U moet deze eerst verwijderen of overdragen.
@@ -232,7 +232,7 @@ org_still_own_repo=De organisatie heeft nog eigendomen op repositories. U moet d
target_branch_not_exist=Doel branch bestaat niet
[user]
change_avatar=Change your avatar
change_avatar=Wijzig je profielfoto
join_on=Aangemeld op
repositories=repositories
activity=Openbare activiteit
@@ -248,7 +248,7 @@ form.name_pattern_not_allowed=Het gebruikersnaam patroon '%s' is niet toegestaan
[settings]
profile=Profiel
password=Wachtwoord
avatar=Avatar
avatar=Profielfoto
ssh_keys=SSH-sleutels
social=Sociale netwerk-accounts
applications=Toepassingen
@@ -269,7 +269,7 @@ change_username_prompt=Deze verandering zal de weg links hebben betrekking op uw
continue=Doorgaan
cancel=Annuleren
lookup_avatar_by_mail=Lookup Avatar by mail
lookup_avatar_by_mail=Zoek profielfoto per email
federated_avatar_lookup=Federated Avatar Lookup
enable_custom_avatar=Aangepaste avatar inschakelen
choose_new_avatar=Kies een nieuwe avatar
@@ -327,7 +327,7 @@ unbind_success=Sociaal account is ontkoppeld.
manage_access_token=Persoonlijke toegangstokens beheren
generate_new_token=Nieuwe Token genereren
tokens_desc=Tokens die u hebt gegenereerd om toegang tot de Gogs APIs te verkrijgen.
tokens_desc=Tokens die u hebt gegenereerd om toegang tot de Gitea APIs te verkrijgen.
new_token_desc=Zoals voor nu, moet elke token zal hebben volledige toegang tot uw account.
token_name=Symbolische naam
generate_token=Token genereren
@@ -370,7 +370,7 @@ mirror_prune_desc=Remove any remote-tracking references that no longer exist on
mirror_interval=Mirror interval(uur)
mirror_address=Kopie-adres
mirror_address_desc=Gelieve noodzakelijke gebruikersgegevens in de adresbalk.
mirror_last_synced=Last Synced
mirror_last_synced=Laatste synchronisatie
watchers=Volgers
stargazers=Stargazers
forks=Forks
@@ -427,15 +427,15 @@ file_view_raw=Weergave ruwe
file_permalink=Permalink
file_too_large=This file is too large to be shown
editor.new_file=New file
editor.upload_file=Upload file
editor.edit_file=Edit file
editor.preview_changes=Preview Changes
editor.cannot_edit_non_text_files=Cannot edit non-text files
editor.edit_this_file=Edit this file
editor.must_be_on_a_branch=You must be on a branch to make or propose changes to this file
editor.fork_before_edit=You must fork this repository before editing the file
editor.delete_this_file=Delete this file
editor.new_file=Nieuw bestand
editor.upload_file=Bestand uploaden
editor.edit_file=Bewerk bestand
editor.preview_changes=Wijzigingen nagaan
editor.cannot_edit_non_text_files=Kan niet-tekstbestanden niet bewerken
editor.edit_this_file=Bestand aanpassen
editor.must_be_on_a_branch=Je moet in een branch zijn om aanpassingen te maken of voor te stellen
editor.fork_before_edit=Je moet deze repository eerst vorken om dit bestand aan te kunnen passen
editor.delete_this_file=Verwijder dit bestand
editor.must_have_write_access=You must have write access to make or propose changes to this file
editor.file_delete_success=File '%s' has been deleted successfully!
editor.name_your_file=Name your file...
@@ -690,7 +690,7 @@ settings.search_user_placeholder=Zoek gebruiker...
settings.org_not_allowed_to_be_collaborator=De organisatie kan niet toegevoegd worden als medewerker.
settings.user_is_org_member=Gebruiker is lid van de organisatie die als een medewerker kan niet worden toegevoegd.
settings.add_webhook=Webhook toevoegen
settings.hooks_desc=Webhooks dat de externe diensten om kennisgevingen te ontvangen wanneer bepaalde gebeurtenissen op Gogs plaatsvinden. Wanneer de opgegeven gebeurtenissen plaatsvinden, sturen we een POST-aanvraag naar elk van de URL's die u opgeeft. Meer informatie vindt u in onze <a target="_blank" href="%s"> Webhooks gids</a>.
settings.hooks_desc=Webhooks dat de externe diensten om kennisgevingen te ontvangen wanneer bepaalde gebeurtenissen op Gitea plaatsvinden. Wanneer de opgegeven gebeurtenissen plaatsvinden, sturen we een POST-aanvraag naar elk van de URL's die u opgeeft. Meer informatie vindt u in onze <a target="_blank" href="%s"> Webhooks gids</a>.
settings.webhook_deletion=Webhook verwijderen
settings.webhook_deletion_desc=Verwijderen van deze webhook zal de informatie en alle geschiedenis verwijderen. Wilt u doorgaan?
settings.webhook_deletion_success=Webhook is succesvol verwijderd!
@@ -889,7 +889,7 @@ total=Totaal: %d
dashboard.statistic=Statistieken
dashboard.operations=Bewerkingen
dashboard.system_status=Status Systeemmonitor
dashboard.statistic_info=Gogs database heeft <b>%d</b> gebruikers, <b>%d</b> organisaties, <b>%d</b> openbare sleutels, <b>%d</b> repositories, <b>%d</b> volgers, <b>%d</b> sterren, <b>%d</b> acties, <b>%d</b> participanten, <b>%d</b> issues, <b>%d</b> reacties, <b>%d</b> sociale accounten, <b>%d</b> volgers, <b>%d</b> mirrors, <b>%d</b> publicaties, <b>%d</b> login bronnen, <b>%d</b> webhooks, <b>%d</b> mijlpalen, <b>%d</b> labels, <b>%d</b> hook taken, <b>%d</b> teams, <b>%d</b> bijgewerkte taken, <b>%d</b> bijlagen.
dashboard.statistic_info=Gitea database heeft <b>%d</b> gebruikers, <b>%d</b> organisaties, <b>%d</b> openbare sleutels, <b>%d</b> repositories, <b>%d</b> volgers, <b>%d</b> sterren, <b>%d</b> acties, <b>%d</b> participanten, <b>%d</b> issues, <b>%d</b> reacties, <b>%d</b> sociale accounten, <b>%d</b> volgers, <b>%d</b> mirrors, <b>%d</b> publicaties, <b>%d</b> login bronnen, <b>%d</b> webhooks, <b>%d</b> mijlpalen, <b>%d</b> labels, <b>%d</b> hook taken, <b>%d</b> teams, <b>%d</b> bijgewerkte taken, <b>%d</b> bijlagen.
dashboard.operation_name=Bewerking naam
dashboard.operation_switch=Omschakelen
dashboard.operation_run=Uitvoeren
@@ -903,7 +903,7 @@ dashboard.delete_missing_repos=Verwijder alle repositories zonder Git files
dashboard.delete_missing_repos_success=Alle repositories zonder Git files verwijderd.
dashboard.git_gc_repos=Garbage collectie uitvoeren
dashboard.git_gc_repos_success=Garbage collectie met succes uitgevoerd.
dashboard.resync_all_sshkeys=Herschrijf '.ssh/authorized_keys' (Let op: alle sleutels die niet van Gogs zijn zullen verloren gaan!)
dashboard.resync_all_sshkeys=Herschrijf '.ssh/authorized_keys' (Let op: alle sleutels die niet van Gitea zijn zullen verloren gaan!)
dashboard.resync_all_sshkeys_success=Alle publieke sleutels zijn herschreven.
dashboard.resync_all_update_hooks=Herschrijf alle repositorie-hooks (nodig als de configuratie bestandslocatie is gewijzigd)
dashboard.resync_all_update_hooks_success=Alle repositorie-hooks zijn herschreven.

View File

@@ -47,8 +47,8 @@ cancel=Anuluj
[install]
install=Instalacja
title=Kroki instalacyjne dla pierwszego uruchomienia
docker_helper=Jeśli używasz Gogs wewnątrz Dockera, proszę przeczytaj <a target="_blank" href="%s">wytyczne</a>, zanim zmienisz coś na tej stronie!
requite_db_desc=Gogs wymaga MySQL, PostgreSQL, SQLite3 lub TiDB.
docker_helper=Jeśli używasz Gitea wewnątrz Dockera, proszę przeczytaj <a target="_blank" href="%s">wytyczne</a>, zanim zmienisz coś na tej stronie!
requite_db_desc=Gitea wymaga MySQL, PostgreSQL, SQLite3 lub TiDB.
db_title=Ustawienia bazy danych
db_type=Typ bazy danych
host=Host
@@ -64,13 +64,13 @@ err_invalid_tidb_name=Nazwa bazy danych TiDB nie może zawierać znaków "." i "
no_admin_and_disable_registration=Rejestracji nie można wyłączyć bez tworzenia konta admina.
err_empty_admin_password=Hasło admina nie może być puste.
general_title=Ustawienia ogólne Gogs
general_title=Ustawienia ogólne Gitea
app_name=Nazwa aplikacji
app_name_helper=Umieść tutaj wielką i głośną nazwę swojej organizacji!
repo_path=Katalog repozytoriów
repo_path_helper=W tym katalogu zostaną zapisane wszystkie repozytoria Git.
run_user=Użytkownik uruchomieniowy
run_user_helper=Użytkownik musi mieć dostęp do katalogu repozytoriów i uruchamiania Gogs.
run_user_helper=Użytkownik musi mieć dostęp do katalogu repozytoriów i uruchamiania Gitea.
domain=Domena
domain_helper=To wpłynie na URLe do klonowania poprzez SSH.
ssh_port=Port SSH
@@ -110,7 +110,7 @@ admin_name=Nazwa Użytkownika
admin_password=Hasło
confirm_password=Potwierdź hasło
admin_email=E-mail administratora
install_gogs=Zainstaluj Gogs
install_gogs=Zainstaluj Gitea
test_git_failed=Nie udało się przetestować polecenia "git": %v
sqlite3_not_available=Twoje wydanie nie obsługuje SQLite3, proszę pobrać oficjalne wydanie z %s, a NIE wersję z gobuild.
invalid_db_setting=Ustawienia bazy danych nie są poprawne: %v
@@ -118,7 +118,7 @@ invalid_repo_path=Ścieżka repozytoriów nie jest poprawna: %v
run_user_not_match=Użytkownik aplikacji nie jest aktualnym użytkownikiem: %s -> %s
save_config_failed=Nie udało się zapisać konfiguracji: %v
invalid_admin_setting=Nieprawidłowe ustawienia konta admina: %v
install_success=Cześć! Cieszymy się, że wybierałeś Gogs, baw się dobrze.
install_success=Cześć! Cieszymy się, że wybierałeś Gitea, baw się dobrze.
invalid_log_root_path=Ścieżka dla logów jest niepoprawna: %v
[home]
@@ -162,7 +162,7 @@ reset_password=Resetowanie hasła
invalid_code=Niestety, Twój kod potwierdzający wygasł lub jest nieprawidłowy.
reset_password_helper=Kliknij tutaj, aby zresetować hasło
password_too_short=Długość hasła nie może być mniejsza niż 6 znaków.
non_local_account=Nie lokalne konta nie mogą zmieniać haseł przez Gogs.
non_local_account=Nie lokalne konta nie mogą zmieniać haseł przez Gitea.
[mail]
activate_account=Prosimy aktywować swoje konto
@@ -189,11 +189,11 @@ TeamName=Nazwa zespołu
AuthName=Nazwa autoryzacji
AdminEmail=E-mail administratora
NewBranchName=New branch name
NewBranchName=Nazwa nowej gałęzi
CommitSummary=Commit summary
CommitMessage=Commit message
CommitChoice=Commit choice
TreeName=File path
TreeName=Ścieżka pliku
Content=Content
require_error=` nie może być puste.`
@@ -222,7 +222,7 @@ user_not_exist=Podany użytkownik nie istnieje.
last_org_owner=Usuwany użytkownik jest ostatnim członkiem ekipy właścicieli. Musi być inny właściciel.
invalid_ssh_key=Niestety, nie jesteśmy stanie zweryfikować Twojego klucza SSH: %s
unable_verify_ssh_key=Gogs nie może zweryfikować Twojego klucza SSH, ale zakładamy, że jest poprawny, proszę sprawdź to samodzielnie.
unable_verify_ssh_key=Gitea nie może zweryfikować Twojego klucza SSH, ale zakładamy, że jest poprawny, proszę sprawdź to samodzielnie.
auth_failed=Uwierzytelnianie nie powiodło się: %v
still_own_repo=Twoje konto dalej posiada przynajmniej jedno repozytorium, które musisz usunąć lub przekazać.
@@ -327,7 +327,7 @@ unbind_success=Konto społecznościowe zostało odpięte.
manage_access_token=Zarządzaj osobistymi tokenami dostępu
generate_new_token=Wygeneruj nowy token
tokens_desc=Tokeny, które wygenerowałeś, mogą być użyte do dostępu do API Gogs.
tokens_desc=Tokeny, które wygenerowałeś, mogą być użyte do dostępu do API Gitea.
new_token_desc=Jak na razie, każdy token zapewnia pełen dostęp do Twojego konta.
token_name=Nazwa tokena
generate_token=Wygeneruj token
@@ -434,7 +434,7 @@ editor.preview_changes=Preview Changes
editor.cannot_edit_non_text_files=Cannot edit non-text files
editor.edit_this_file=Edit this file
editor.must_be_on_a_branch=You must be on a branch to make or propose changes to this file
editor.fork_before_edit=You must fork this repository before editing the file
editor.fork_before_edit=Musisz sforkować to repozytorium przed edycją tego pliku
editor.delete_this_file=Delete this file
editor.must_have_write_access=You must have write access to make or propose changes to this file
editor.file_delete_success=File '%s' has been deleted successfully!
@@ -493,7 +493,7 @@ issues.create_label=Utwórz etykietę
issues.label_templates.title=Load a predefined set of labels
issues.label_templates.info=There arent any labels yet. You can click on the "New Label" button above to create one or use a predefined set below.
issues.label_templates.helper=Select a label set
issues.label_templates.use=Use this label set
issues.label_templates.use=Użyj ten zestaw etykiet
issues.label_templates.fail_to_load_file=Failed to load label template file '%s': %v
issues.open_tab=Otwarte %d
issues.close_tab=Zamknięte %d
@@ -536,7 +536,7 @@ issues.commit_ref_at=`wspomina ten problem w commicie <a id="%[1]s" href="#%[1]s
issues.poster=Autor
issues.collaborator=Współpracownik
issues.owner=Właściciel
issues.sign_in_require_desc=<a href="%s">Sign in</a> to join this conversation.
issues.sign_in_require_desc=<a href="%s"> Zaloguj się</a>, aby dołączyć do tej rozmowy.
issues.edit=Edytuj
issues.cancel=Anuluj
issues.save=Zapisz
@@ -551,8 +551,8 @@ issues.label_deletion=Usunięcie etykiety
issues.label_deletion_desc=Usunięcie tej etykiety spowoduje usuniecie jej ze wszystkich powiązanych problemów. Czy na pewno chcesz kontynuować?
issues.label_deletion_success=Etykieta została usunięta pomyślnie!
issues.num_participants=%d uczestników
issues.attachment.open_tab=`Click to see "%s" in a new tab`
issues.attachment.download=`Click to download "%s"`
issues.attachment.open_tab=`Kliknij, aby zobaczyć "%s" w nowej karcie`
issues.attachment.download=`Kliknij, aby pobrać "%s"`
pulls.new=Nowy pull request
pulls.compare_changes=Porównaj zmiany
@@ -633,14 +633,14 @@ settings.hooks=Webhooki
settings.githooks=Hooki Git
settings.basic_settings=Ustawienia podstawowe
settings.mirror_settings=Mirror Settings
settings.sync_mirror=Sync Now
settings.sync_mirror=Synchronizuj teraz
settings.mirror_sync_in_progress=Mirror syncing is in progress, please refresh page in about a minute.
settings.site=Oficjalna Strona
settings.update_settings=Aktualizuj ustawienia
settings.change_reponame_prompt=Zmiana nazwy repozytorium wpłynie na linki do niego.
settings.advanced_settings=Ustawienia zaawansowane
settings.wiki_desc=Enable wiki system
settings.use_internal_wiki=Use builtin wiki
settings.wiki_desc=Włącz system wiki
settings.use_internal_wiki=Użyj wbudowanego wiki
settings.use_external_wiki=Użyj zewnętrznego Wiki
settings.external_wiki_url=Adres URL zewnętrznego Wiki
settings.external_wiki_url_desc=Odwiedzający zostaną przekierowani do adresu URL po kliknięciu zakładki.
@@ -690,7 +690,7 @@ settings.search_user_placeholder=Szukaj użytkownika...
settings.org_not_allowed_to_be_collaborator=Organizacji nie można dodać jako współpracownika.
settings.user_is_org_member=Użytkownik jest członkiem organizacji, który nie może być dodany jako współpracownik.
settings.add_webhook=Dodaj webhooka
settings.hooks_desc=Webooki działają tak jak proste wywołania HTTP POST. Jeśli cokolwiek zdarzy się w Gogs, wyślemy powiadomienie do wybranego hosta. Więcej informacji można znaleźć w <a target="_blank" href="%s">przewodniku webhooków</a>.
settings.hooks_desc=Webooki działają tak jak proste wywołania HTTP POST. Jeśli cokolwiek zdarzy się w Gitea, wyślemy powiadomienie do wybranego hosta. Więcej informacji można znaleźć w <a target="_blank" href="%s">przewodniku webhooków</a>.
settings.webhook_deletion=Usuń webhooka
settings.webhook_deletion_desc=Usunięcie tego webooka spowoduje usunięcie powiązanych informacji i wpisów w historii. Czy chcesz kontynuować?
settings.webhook_deletion_success=Webhook został pomyślnie usunięty!
@@ -889,7 +889,7 @@ total=Ogółem: %d
dashboard.statistic=Statystyki
dashboard.operations=Operacje
dashboard.system_status=Stan monitora systemu
dashboard.statistic_info=Baza danych Gogs zawiera <b>%d</b> użytkowników, <b>%d</b> organizacji, <b>%d</b> kluczy publicznych, <b>%d</b> repozytoriów, <b>%d</b> obserwujących, <b>%d</b> polubionych, <b>%d</b> akcji, <b>%d</b> tokenów, <b>%d</b> problemów, <b>%d</b> komenatrzy, <b>%d</b> kont społecznościowych, <b>%d</b> obserwacji, <b>%d</b> mirrorów, <b>%d</b> wydań, <b>%d</b> login sources, <b>%d</b> webhooków, <b>%d</b> kamieni milowych, <b>%d</b> labels, <b>%d</b> zadań hooków, <b>%d</b> zespołów, <b>%d</b> zadań aktualizacji, <b>%d</b> załączników.
dashboard.statistic_info=Baza danych Gitea zawiera <b>%d</b> użytkowników, <b>%d</b> organizacji, <b>%d</b> kluczy publicznych, <b>%d</b> repozytoriów, <b>%d</b> obserwujących, <b>%d</b> polubionych, <b>%d</b> akcji, <b>%d</b> tokenów, <b>%d</b> problemów, <b>%d</b> komenatrzy, <b>%d</b> kont społecznościowych, <b>%d</b> obserwacji, <b>%d</b> mirrorów, <b>%d</b> wydań, <b>%d</b> login sources, <b>%d</b> webhooków, <b>%d</b> kamieni milowych, <b>%d</b> labels, <b>%d</b> zadań hooków, <b>%d</b> zespołów, <b>%d</b> zadań aktualizacji, <b>%d</b> załączników.
dashboard.operation_name=Nazwa operacji
dashboard.operation_switch=Przełącz
dashboard.operation_run=Uruchom
@@ -903,7 +903,7 @@ dashboard.delete_missing_repos=Usuń wszystkie rekordy repozytoriów, które utr
dashboard.delete_missing_repos_success=Wszystkie rekordy repozytoriów, które utraciły pliki Git, zostały pomyślnie usunięte.
dashboard.git_gc_repos=Usuń śmieci z repozytoriów
dashboard.git_gc_repos_success=Wszystkie repozytoria zakończyły odśmiecanie pomyślnie.
dashboard.resync_all_sshkeys=Przeładuj klucze publiczne w pliku '.ssh/authorized_keys' (uwaga: klucze poza Gogs zostaną usunięte)
dashboard.resync_all_sshkeys=Przeładuj klucze publiczne w pliku '.ssh/authorized_keys' (uwaga: klucze poza Gitea zostaną usunięte)
dashboard.resync_all_sshkeys_success=Przeładowanie kluczy publicznych zakończyło się sukcesem.
dashboard.resync_all_update_hooks=Przepisz pliki update hook repozytoriów (wymagane przy zmianie ścieżki do pliku konfiguracji)
dashboard.resync_all_update_hooks_success=Wszystkie pliki update hook repozytoriów zostały pomyślnie przepisane.
@@ -1115,13 +1115,13 @@ config.picture_service=Serwis obrazów
config.disable_gravatar=Wyłącz Gravatara
config.enable_federated_avatar=Enable Federated Avatars
config.git_config=Git Configuration
config.git_config=Konfiguracja Git
config.git_disable_diff_highlight=Disable Diff Syntax Highlight
config.git_max_diff_lines=Max Diff Lines (for a single file)
config.git_max_diff_line_characters=Max Diff Characters (for a single line)
config.git_max_diff_files=Max Diff Files (to be shown)
config.git_gc_args=GC Arguments
config.git_migrate_timeout=Migration Timeout
config.git_migrate_timeout=Limit czasu migracji
config.git_mirror_timeout=Mirror Update Timeout
config.git_clone_timeout=Clone Operation Timeout
config.git_pull_timeout=Pull Operation Timeout

File diff suppressed because it is too large Load Diff

View File

@@ -47,8 +47,8 @@ cancel=Отмена
[install]
install=Установка
title=Установочные шаги для первого запуска
docker_helper=Если вы запускаете Gogs внутри Docker, пожалуйста прочтите <a target="_blank" href="%s">эти советы</a> внимательно перед тем как что-либо изменить на этой странице!
requite_db_desc=Gogs требует MySQL, PostgreSQL, SQLite3 или TiDB.
docker_helper=Если вы запускаете Gitea внутри Docker, пожалуйста прочтите <a target="_blank" href="%s">эти советы</a> внимательно перед тем как что-либо изменить на этой странице!
requite_db_desc=Gitea требует MySQL, PostgreSQL, SQLite3 или TiDB.
db_title=Настройки базы данных
db_type=Тип базы данных
host=Хост
@@ -64,13 +64,13 @@ err_invalid_tidb_name=Имя базы данных TiDB не может соде
no_admin_and_disable_registration=Вы не можете отключить регистрацию до создания учетной записи администратора.
err_empty_admin_password=Пароль администратора не может быть пустым.
general_title=Общие параметры Gogs
general_title=Общие параметры Gitea
app_name=Имя приложения
app_name_helper=Укажите здесь название вашей потрясающей организации!
repo_path=Путь корня репозитория
repo_path_helper=Все сетевые репозитории Git будут сохранены в этой директории.
run_user=Пользователь
run_user_helper=У пользователя должен быть доступ к пути к корню репозитория и к запуску Gogs.
run_user_helper=У пользователя должен быть доступ к пути к корню репозитория и к запуску Gitea.
domain=Домен
domain_helper=Влияет на URL-адреса для клонирования по SSH.
ssh_port=SSH порт
@@ -96,7 +96,7 @@ offline_mode=Включение офлайн режима
offline_mode_popup=Отключить CDN даже в производственном режиме, все файлы ресурсов будут раздаваться локально.
disable_gravatar=Отключить службу Gravatar
disable_gravatar_popup=Отключить Gravatar и пользовательские источники, все аватары по-умолчанию загружаются пользователями.
federated_avatar_lookup=Enable Federated Avatars Lookup
federated_avatar_lookup=Включить поиск внешних Аватаров
federated_avatar_lookup_popup=Enable federated avatars lookup to use federated open source service based on libravatar.
disable_registration=Отключить самостоятельную регистрацию
disable_registration_popup=Запретить пользователям самостоятельную регистрацию, только администратор может создавать аккаунты.
@@ -110,7 +110,7 @@ admin_name=Имя пользователя
admin_password=Пароль
confirm_password=Подтвердить пароль
admin_email=Электронная почта администратора
install_gogs=Установить Gogs
install_gogs=Установить Gitea
test_git_failed=Не удалось проверить 'git' команду: %v
sqlite3_not_available=Ваша версия не поддерживает SQLite3, пожалуйста скачайте официальную бинарную версию от %s, а не версию gobuild.
invalid_db_setting=Настройки базы данных не правильные: %v
@@ -118,7 +118,7 @@ invalid_repo_path=Недопустимый путь к корню репозит
run_user_not_match=Текущий пользователь не является пользователем для запуска: %s -> %s
save_config_failed=Не удалось сохранить конфигурацию: %v
invalid_admin_setting=Указан недопустимый параметр учетной записи администратора: %v
install_success=Добро пожаловать! Мы рады, что вы выбрали Gogs. Веселитесь и берегите себя.
install_success=Добро пожаловать! Мы рады, что вы выбрали Gitea. Веселитесь и берегите себя.
invalid_log_root_path=Недопустимый путь для логов: %v
[home]
@@ -162,7 +162,7 @@ reset_password=Сброс пароля
invalid_code=Извините, ваш код подтверждения истек или не является допустимым.
reset_password_helper=Нажмите здесь, чтобы сбросить свой пароль
password_too_short=Длина пароля не менее 6 символов.
non_local_account=Нелокальные аккаунты не могут изменить пароль через Gogs.
non_local_account=Нелокальные аккаунты не могут изменить пароль через Gitea.
[mail]
activate_account=Пожалуйста активируйте свой аккаунт
@@ -222,7 +222,7 @@ user_not_exist=Данный пользователь не существует.
last_org_owner=Удаление последнего пользователя из команды владельцев невозможно, поскольку всегда должен быть хотя бы один владелец в любой организации.
invalid_ssh_key=К сожалению, мы не смогли проверить ваш SSH-ключ: %s
unable_verify_ssh_key=Gogs не может проверить ваш SSH-ключ, но мы допускаем, что он действителен. Пожалуйста, удостоверьтесь самостоятельно, что ключ действителен.
unable_verify_ssh_key=Gitea не может проверить ваш SSH-ключ, но мы допускаем, что он действителен. Пожалуйста, удостоверьтесь самостоятельно, что ключ действителен.
auth_failed=Ошибка аутентификации: %v
still_own_repo=На вашем аккаунте все еще остается как минимум один репозиторий, сначала вам нужно удалить или передать его.
@@ -269,8 +269,8 @@ change_username_prompt=Это изменение может повлечь за
continue=Далее
cancel=Отмена
lookup_avatar_by_mail=Lookup Avatar by mail
federated_avatar_lookup=Federated Avatar Lookup
lookup_avatar_by_mail=Найти Аватар по адресу эл. почты
federated_avatar_lookup=Найти внешний Аватар
enable_custom_avatar=Включить собственный аватар
choose_new_avatar=Выбрать новый аватар
update_avatar=Обновить настройку аватара
@@ -327,7 +327,7 @@ unbind_success=Социальная учетная запись отвязана
manage_access_token=Управление Токенами Персонального Доступа
generate_new_token=Создать новый token
tokens_desc=Созданные вами токены могут использоваться для доступа к Gogs API.
tokens_desc=Созданные вами токены могут использоваться для доступа к Gitea API.
new_token_desc=Пока что каждый токен будет иметь полный доступ к вашей учетной записи.
token_name=Имя маркера
generate_token=Генерировать маркер
@@ -431,14 +431,14 @@ editor.new_file=Новый файл
editor.upload_file=Загрузить файл
editor.edit_file=Редактировать файл
editor.preview_changes=Просмотр изменений
editor.cannot_edit_non_text_files=Cannot edit non-text files
editor.cannot_edit_non_text_files=Возможно редактировать только текстовые файлы
editor.edit_this_file=Отредактируйте этот файл
editor.must_be_on_a_branch=You must be on a branch to make or propose changes to this file
editor.fork_before_edit=Создайте ветку репозитория перед редактированием файла
editor.delete_this_file=Удалить файл
editor.must_have_write_access=You must have write access to make or propose changes to this file
editor.must_have_write_access=Вам необходимо иметь доступ на запись, чтобы вносить или предлагать правки этого файла
editor.file_delete_success=File '%s' has been deleted successfully!
editor.name_your_file=Name your file...
editor.name_your_file=Назовите свой файл...
editor.filename_help=To add directory, just type it and press /. To remove a directory, go to the beginning of the field and press backspace.
editor.or=или
editor.cancel_lower=отмена
@@ -453,16 +453,16 @@ editor.create_new_branch=Create a <strong>new branch</strong> for this commit an
editor.new_branch_name_desc=Новое название ветки...
editor.cancel=Отмена
editor.filename_cannot_be_empty=Имя файла не может быть пустым.
editor.branch_already_exists=Branch '%s' already exists in this repository.
editor.branch_already_exists=Ветка «%s» уже существует в этом репозитории.
editor.directory_is_a_file=Entry '%s' in the parent path is a file not a directory in this repository.
editor.filename_is_a_directory=The filename '%s' is an existing directory in this repository.
editor.file_editing_no_longer_exists=The file '%s' you are editing no longer exists in the repository.
editor.file_changed_while_editing=File content has been changed since you started editing. <a target="_blank" href="%s">Click here</a> to see what have been changed or <strong>press commit again</strong> to overwrite those changes.
editor.file_already_exists=A file with name '%s' already exists in this repository.
editor.file_already_exists=Файл с именем «%s» уже существует в этом репозитории.
editor.no_changes_to_show=Нет изменений.
editor.fail_to_update_file=Failed to update/create file '%s' with error: %v
editor.fail_to_update_file=Не удалось обновить/создать файл «%s» из-за ошибки: %v
editor.add_subdir=Добавьте подкаталог...
editor.unable_to_upload_files=Failed to upload files to '%s' with error: %v
editor.unable_to_upload_files=Не удалось загрузить файлы в «%s» из-за ошибки: %v
editor.upload_files_to_dir=Загрузить файлы '%s'
commits.commits=Коммиты
@@ -490,7 +490,7 @@ issues.create=Добавить задачу
issues.new_label=Новая метка
issues.new_label_placeholder=Имя метки...
issues.create_label=Добавить метку
issues.label_templates.title=Load a predefined set of labels
issues.label_templates.title=Загрузить набор предопределённых меток
issues.label_templates.info=There arent any labels yet. You can click on the "New Label" button above to create one or use a predefined set below.
issues.label_templates.helper=Выберите метку
issues.label_templates.use=Использовать ярлык
@@ -536,7 +536,7 @@ issues.commit_ref_at=`упомянул эту задачу в коммите <a
issues.poster=Автор
issues.collaborator=Соавтор
issues.owner=Владелец
issues.sign_in_require_desc=<a href="%s">Sign in</a> to join this conversation.
issues.sign_in_require_desc=<a href="%s">Войдите</a>, чтобы присоединиться к обсуждению.
issues.edit=Изменить
issues.cancel=Отмена
issues.save=Сохранить
@@ -551,8 +551,8 @@ issues.label_deletion=Удаление метки
issues.label_deletion_desc=Удаление ярлыка затронет все связанные задачи. Продолжить?
issues.label_deletion_success=Метка была удалена успешно!
issues.num_participants=%d участников
issues.attachment.open_tab=`Click to see "%s" in a new tab`
issues.attachment.download=`Click to download "%s"`
issues.attachment.open_tab=`Нажмите, чтобы увидеть "%s" в новой вкладке`
issues.attachment.download=`Нажмите, чтобы скачать "%s"`
pulls.new=Новый запрос на слияние
pulls.compare_changes=Сравнить изменения
@@ -634,7 +634,7 @@ settings.githooks=Git хуки
settings.basic_settings=Основные параметры
settings.mirror_settings=Настройки Зеркала
settings.sync_mirror=Синхронизировать
settings.mirror_sync_in_progress=Mirror syncing is in progress, please refresh page in about a minute.
settings.mirror_sync_in_progress=Выполняется синхронизация Зеркала, пожалуйста, обновите эту страницу через минуту.
settings.site=Официальный сайт
settings.update_settings=Обновить настройки
settings.change_reponame_prompt=Это изменение повлияет на отношения ссылок к этому репозиторию.
@@ -675,7 +675,7 @@ settings.delete_notices_1=- Эта операция <strong>НЕ МОЖЕТ</str
settings.delete_notices_2=- Эта операция навсегда удалит всё из этого репозитория, включая данные Git, связанные с ним задачи, комментарии и права доступа для сотрудников.
settings.delete_notices_fork_1=- Все отвлетвления станут независимыми после удаления.
settings.deletion_success=Репозиторий был успешно удалён!
settings.update_settings_success=Настройка репозитория обновлена успешно.
settings.update_settings_success=Настройки репозитория обновлены успешно.
settings.transfer_owner=Новый владелец
settings.make_transfer=Выполнить передачу
settings.transfer_succeed=Владение репозиторием было успешно передано.
@@ -690,7 +690,7 @@ settings.search_user_placeholder=Поиск пользователя...
settings.org_not_allowed_to_be_collaborator=Организации не могут быть добавлены как соавторы.
settings.user_is_org_member=Пользователь является членом организации, члены которой не могут быть добавлены в качестве соавтора.
settings.add_webhook=Добавить Webhook
settings.hooks_desc=Webhooks позволяют внешним службам получать уведомления при возникновении определенных событий на Gogs. При возникновении указанных событий мы отправим запрос POST на каждый заданный вами URL. Узнать больше можно в нашем <a target="_blank" href="%s">Руководстве по Webhooks</a>.
settings.hooks_desc=Webhooks позволяют внешним службам получать уведомления при возникновении определенных событий на Gitea. При возникновении указанных событий мы отправим запрос POST на каждый заданный вами URL. Узнать больше можно в нашем <a target="_blank" href="%s">Руководстве по Webhooks</a>.
settings.webhook_deletion=Удалить веб-хук
settings.webhook_deletion_desc=Удаление этого веб-хука приведет к удалению всей, связанной с ним, информации, включая историю. Хотите продолжить?
settings.webhook_deletion_success=Веб-хук успешно удален!
@@ -889,7 +889,7 @@ total=Всего: %d
dashboard.statistic=Статистика
dashboard.operations=Операции
dashboard.system_status=Статус системного монитора
dashboard.statistic_info=В базе данных Gogs записано <b>%d</b> пользователей, <b>%d</b> организаций, <b>%d</b> публичных ключей, <b>%d</b> репозиториев, <b>%d</b> подписок на репозитории, <b>%d</b> добавлений в избранное, <b>%d</b> действий, <b>%d</b> доступов, <b>%d</b> задач, <b>%d</b> комментариев, <b>%d</b> социальных учетных записей, <b>%d</b> подписок на пользователей, <b>%d</b> зеркал, <b>%d</b> релизов, <b>%d</b> источников входа, <b>%d</b> веб-хуков, <b>%d</b> этапов, <b>%d</b> меток, <b>%d</b> задач хуков, <b>%d</b> команд, <b>%d</b> задач по обновлению, <b>%d</b> присоединенных файлов.
dashboard.statistic_info=В базе данных Gitea записано <b>%d</b> пользователей, <b>%d</b> организаций, <b>%d</b> публичных ключей, <b>%d</b> репозиториев, <b>%d</b> подписок на репозитории, <b>%d</b> добавлений в избранное, <b>%d</b> действий, <b>%d</b> доступов, <b>%d</b> задач, <b>%d</b> комментариев, <b>%d</b> социальных учетных записей, <b>%d</b> подписок на пользователей, <b>%d</b> зеркал, <b>%d</b> релизов, <b>%d</b> источников входа, <b>%d</b> веб-хуков, <b>%d</b> этапов, <b>%d</b> меток, <b>%d</b> задач хуков, <b>%d</b> команд, <b>%d</b> задач по обновлению, <b>%d</b> присоединенных файлов.
dashboard.operation_name=Наименование Операции
dashboard.operation_switch=Переключить
dashboard.operation_run=Запуск
@@ -903,7 +903,7 @@ dashboard.delete_missing_repos=Удаление всех записей о ре
dashboard.delete_missing_repos_success=Все репозитории с отсутствующими Git файлами успешно удалены.
dashboard.git_gc_repos=Выполнить сборку мусора на репозиториях
dashboard.git_gc_repos_success=Сборка мусора на всех репозиториях успешно выполнена.
dashboard.resync_all_sshkeys=Переписать файл «.ssh/authorized_keys» (осторожно: не Gogs ключи будут утеряны)
dashboard.resync_all_sshkeys=Переписать файл «.ssh/authorized_keys» (осторожно: не Gitea ключи будут утеряны)
dashboard.resync_all_sshkeys_success=Были успешно переписаны все открытые ключи.
dashboard.resync_all_update_hooks=Перезаписать все апдейт-хуки этого репозитория (необходимо, когда изменен путь до папки конфигураций)
dashboard.resync_all_update_hooks_success=Апдейт-хуки всех репозиториев успешно перезаписаны.
@@ -1113,13 +1113,13 @@ config.cookie_life_time=Время жизни файла cookie
config.picture_config=Настройка изображения
config.picture_service=Сервис изображений
config.disable_gravatar=Отключить Gravatar
config.enable_federated_avatar=Enable Federated Avatars
config.enable_federated_avatar=Включить внешние Аватары
config.git_config=Конфигурация GIT
config.git_disable_diff_highlight=Disable Diff Syntax Highlight
config.git_max_diff_lines=Max Diff Lines (for a single file)
config.git_max_diff_line_characters=Max Diff Characters (for a single line)
config.git_max_diff_files=Max Diff Files (to be shown)
config.git_disable_diff_highlight=Отключить подсветку синтаксиса Diff
config.git_max_diff_lines=Максимальное количество строк Diff (на файл)
config.git_max_diff_line_characters=Максимальное количество символов Diff (в строке)
config.git_max_diff_files=Максимальное количество Diff-файлов (при показе)
config.git_gc_args=Аргументы GC
config.git_migrate_timeout=Тайм-аут миграции
config.git_mirror_timeout=Время Ожидания Обновления Зеркала

View File

@@ -47,7 +47,7 @@ cancel=Откажи
[install]
install=Инсталација
title=Инсталационе кораке за првог покретања
docker_helper=Ако покрећете Gogs унутар Docker, молимо прочитајте <a target="_blank" href="%s">ове савете</a> пажљиво пре него што сте било шта променили на овој страници!
docker_helper=Ако покрећете Gitea унутар Docker, молимо прочитајте <a target="_blank" href="%s">ове савете</a> пажљиво пре него што сте било шта променили на овој страници!
requite_db_desc=Gogs-у је потребно MySQL, PostgreSQL, SQLite3 или TiDB.
db_title=Подешавања базе
db_type=Тип базе података
@@ -70,7 +70,7 @@ app_name_helper=Унесите овде име ваше фантастичне
repo_path=Пут до корена спремишта
repo_path_helper=Сва мрежна Git спремишта ће бити сачувана у овом директоријуму.
run_user=Корисник
run_user_helper=Корисник мора имати приступ путу корена спремишта и за покретање Gogs.
run_user_helper=Корисник мора имати приступ путу корена спремишта и за покретање Gitea.
domain=Домен
domain_helper=Утиче на URL адресе клониране преко SSH.
ssh_port=SSH порт
@@ -110,7 +110,7 @@ admin_name=Корисничко име
admin_password=Лозинка
confirm_password=Потврдите лозинку
admin_email=Адреса е-поште адмниистратора
install_gogs=Успостави Gogs
install_gogs=Успостави Gitea
test_git_failed=Команда 'git' није успела: %v
sqlite3_not_available=Ваша верзија не подржава SQLite3, молимо вас преузмите званичну бинарну верзију од %s, а не верзију gobuild.
invalid_db_setting=Подешавања базе података су неправилна: %v
@@ -118,7 +118,7 @@ invalid_repo_path=Пут до корена спремишта не неправ
run_user_not_match=Тренутни корисник није корисник за покретање: %s -> %s
save_config_failed=Није могуће сачувати конфигурацију: %v
invalid_admin_setting=Подешавањна администратора су неправилна: %v
install_success=Добродошли! Ми смо срећни што сте изабрали Gogs.
install_success=Добродошли! Ми смо срећни што сте изабрали Gitea.
invalid_log_root_path=Пут до корена журнала је неправилан: %v
[home]
@@ -162,7 +162,7 @@ reset_password=Ресет лозинке
invalid_code=Извините, ваш код за потврду је истекао или није валидан.
reset_password_helper=Кликните овде да ресетујете вашу лозинку
password_too_short=Лозинка неможе бити краћа од 6 карактера.
non_local_account=Нелокални налози не могу да промените лозинку преко Gogs.
non_local_account=Нелокални налози не могу да промените лозинку преко Gitea.
[mail]
activate_account=Молимо вас активирајте ваш налог
@@ -222,7 +222,7 @@ user_not_exist=Овај корисник не постоји.
last_org_owner=Брисање последњег корисника из тима власника није дозволено, јер мора увек бити бар један власник к организацији.
invalid_ssh_key=Нажалост, нисмо могли проверити ваш SSH-кључ: %s
unable_verify_ssh_key=Gogs не може да провери ваш SSH-кључ, али претпостављамо, да он важи. Уверите се да је кључ важећи.
unable_verify_ssh_key=Gitea не може да провери ваш SSH-кључ, али претпостављамо, да он важи. Уверите се да је кључ важећи.
auth_failed=Грешка идентитета: %v
still_own_repo=На вашем налогу и даље остаје најмање једно спремиште. Прво уклоните или га пренесите.
@@ -257,7 +257,7 @@ delete=Уклоните налог
uid=Uid
public_profile=Јавни профил
profile_desc=Ваша адреса е-поште је јавна и коришће се за све обавести везане са налогом, као и друге операције почињене кроз Gogs.
profile_desc=Ваша адреса е-поште је јавна и коришће се за све обавести везане са налогом, као и друге операције почињене кроз Gitea.
password_username_disabled=Нелокални корисници не могу да промене своје кориничко име.
full_name=Име и презиме
website=Веб страница
@@ -327,7 +327,7 @@ unbind_success=Друштвена мрежа је обвежена.
manage_access_token=Управљање токенима особном приступу
generate_new_token=Генериши нови токен
tokens_desc=Tокени се могу користити за приступ на API за Gogs.
tokens_desc=Tокени се могу користити за приступ на API за Gitea.
new_token_desc=Сваки API токен ће имати пун приступ вашем налогу.
token_name=Име токена
generate_token=Генериши токен
@@ -690,7 +690,7 @@ settings.search_user_placeholder=Претрага корисника...
settings.org_not_allowed_to_be_collaborator=Неможе се додати организација као сарадник.
settings.user_is_org_member=Корисник је члан организације и потом неможе бити додат као сарадник.
settings.add_webhook=Додај Webhook
settings.hooks_desc=Webhooks омогућавају спољашњим услугама да приме обавештења када се нешто одређено догоди на Gogs. Сазнајте више у овом <a target="_blank" href="%s">водичу за Webhooks</a>.
settings.hooks_desc=Webhooks омогућавају спољашњим услугама да приме обавештења када се нешто одређено догоди на Gitea. Сазнајте више у овом <a target="_blank" href="%s">водичу за Webhooks</a>.
settings.webhook_deletion=Уклони Webhook
settings.webhook_deletion_desc=Брисање овог Webhook ће довести до уклањања сву наведену информацију, укључујући и историју. Да ли желите да наставите?
settings.webhook_deletion_success=Webhook успешно избрисан!
@@ -889,7 +889,7 @@ total=Укупно: %d
dashboard.statistic=Статистика
dashboard.operations=Операције
dashboard.system_status=Статус системског монитора
dashboard.statistic_info=У бази података Gogs забележено је <b>%d</b> корисника, <b>%d</b> организације, <b>%d</b> јавних кључева, <b>%d</b> спремишта, <b>%d</b> watches, <b>%d</b> фаворита, <b>%d</b> акције, <b>%d</b> доступа, <b>%d</b> задатака, <b>%d</b> коментара, <b>%d</b> друштвених рачуна, <b>%d</b> пратње, <b>%d</b> огледала, <b>%d</b> издања, <b>%d</b> извора улаза, <b>%d</b> webhooks, <b>%d</b> фаза, <b>%d</b> лабела, <b>%d</b> hook задатака, <b>%d</b> тимова, <b>%d</b> задатака за надоградњу, <b>%d</b> прилога.
dashboard.statistic_info=У бази података Gitea забележено је <b>%d</b> корисника, <b>%d</b> организације, <b>%d</b> јавних кључева, <b>%d</b> спремишта, <b>%d</b> watches, <b>%d</b> фаворита, <b>%d</b> акције, <b>%d</b> доступа, <b>%d</b> задатака, <b>%d</b> коментара, <b>%d</b> друштвених рачуна, <b>%d</b> пратње, <b>%d</b> огледала, <b>%d</b> издања, <b>%d</b> извора улаза, <b>%d</b> webhooks, <b>%d</b> фаза, <b>%d</b> лабела, <b>%d</b> hook задатака, <b>%d</b> тимова, <b>%d</b> задатака за надоградњу, <b>%d</b> прилога.
dashboard.operation_name=Име операције
dashboard.operation_switch=Пребаци
dashboard.operation_run=Покрени
@@ -903,7 +903,7 @@ dashboard.delete_missing_repos=Избриши све податке са изг
dashboard.delete_missing_repos_success=Сви подаци са игубљеним Git датотекама су успешно избрисани.
dashboard.git_gc_repos=Изврши cакупљање смећа на спремишту
dashboard.git_gc_repos_success=Сва спремишта су успешно извршили cакупљање смећа.
dashboard.resync_all_sshkeys=Препиши '.ssh/authorized_keys' (опрез: не Gogs тастери ће бити изгубљени)
dashboard.resync_all_sshkeys=Препиши '.ssh/authorized_keys' (опрез: не Gitea тастери ће бити изгубљени)
dashboard.resync_all_sshkeys_success=Сви јавни кључеви су успешно преписани.
dashboard.resync_all_update_hooks=Препиши сва hook-а за ажурирање спремишта (потребно кад пут конфигурације је промењен)
dashboard.resync_all_update_hooks_success=Сва hook-а за ажурирање спремишта су успешно промењена.

1200
conf/locale/locale_sv-SE.ini Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -48,7 +48,7 @@ cancel=İptal
install=Kurulum
title=İlk Kez Çalıştırma İçin Kurulum Adımları
docker_helper=Gogs'u Docker içinde kullanıyorsanız bu sayfada herhangi bir değişiklik yapmadan önce lütfen <a target="_blank" href="%s">kılavuzu</a> dikkatlice okuyunuz!
requite_db_desc=Gogs MySQL, PostgreSQL, SQLite3 veya TiDB gerektirir.
requite_db_desc=Gitea MySQL, PostgreSQL, SQLite3 veya TiDB gerektirir.
db_title=Veritabanı Ayarları
db_type=Veritabanı Türü
host=Sunucu
@@ -70,7 +70,7 @@ app_name_helper=Buraya organizasyonunuzun harika ismini koyun!
repo_path=Depo Kök Dizini
repo_path_helper=Tüm uzak Git depoları bu dizine kaydedilecektir.
run_user=Çalıştıran Kullanıcı
run_user_helper=Kullanıcının deponun kök dizinine ve Gogs'u çalıştırmaya erişim izni olmalıdır.
run_user_helper=Kullanıcının deponun kök dizinine ve Gitea'u çalıştırmaya erişim izni olmalıdır.
domain=Alan Adı
domain_helper=Bu, SSH klon bağlantılarını etkiler.
ssh_port=SSH Portu
@@ -118,7 +118,7 @@ invalid_repo_path=Depo kök dizini geçersiz: %v
run_user_not_match=Çalıştırma kullanıcısı geçerli kullanıcı değil: %s -> %s
save_config_failed=Yapılandırma kaydedilemedi: %v
invalid_admin_setting=Yönetici hesap ayarları geçersiz: %v
install_success=Merhaba! Gogs'u tercih ettiğiniz için çok mutluyuz, keyfini çıkarın!
install_success=Merhaba! Gitea'u tercih ettiğiniz için çok mutluyuz, keyfini çıkarın!
invalid_log_root_path=Günlük kök dizini geçersiz: %v
[home]
@@ -162,7 +162,7 @@ reset_password=Parolanızı Sıfırlayın
invalid_code=Üzgünüz, doğrulama kodunuz geçersiz veya süresi dolmuş.
reset_password_helper=Parolanızı sıfırlamak için buraya tıklayın
password_too_short=Parola uzunluğu 6 karakterden az olamaz.
non_local_account=Yerel olmayan hesapların şifrelerini Gogs aracılığıyla değiştiremezsiniz.
non_local_account=Yerel olmayan hesapların şifrelerini Gitea aracılığıyla değiştiremezsiniz.
[mail]
activate_account=Lütfen hesabınızı aktifleştirin
@@ -193,7 +193,7 @@ NewBranchName=New branch name
CommitSummary=Commit summary
CommitMessage=Commit message
CommitChoice=Commit choice
TreeName=File path
TreeName=Dosya yolu
Content=Content
require_error=` boş olamaz.`
@@ -327,7 +327,7 @@ unbind_success=Sosyal hesabın bağlantısı koparıldı.
manage_access_token=Kişisel Erişim Anahtarlarını Yönet
generate_new_token=Yeni Erişim Anahtarı Üret
tokens_desc=Ürettiğiniz erişim anahtarları, Gogs API'lerine erişimde kullanılabilir.
tokens_desc=Ürettiğiniz erişim anahtarları, Gitea API'lerine erişimde kullanılabilir.
new_token_desc=Her bir erişim anahtarının hesabınıza tam erişim yetkisi olacaktır.
token_name=Erişim Anahtarı İsmi
generate_token=Erişim Anahtarı Üret
@@ -429,9 +429,9 @@ file_too_large=Bu dosya sergilenmek için çok büyük
editor.new_file=New file
editor.upload_file=Upload file
editor.edit_file=Edit file
editor.edit_file=Dosya düzenle
editor.preview_changes=Preview Changes
editor.cannot_edit_non_text_files=Cannot edit non-text files
editor.cannot_edit_non_text_files=Metin dışı dosyalar düzenlenemez
editor.edit_this_file=Edit this file
editor.must_be_on_a_branch=You must be on a branch to make or propose changes to this file
editor.fork_before_edit=You must fork this repository before editing the file
@@ -441,7 +441,7 @@ editor.file_delete_success=File '%s' has been deleted successfully!
editor.name_your_file=Name your file...
editor.filename_help=To add directory, just type it and press /. To remove a directory, go to the beginning of the field and press backspace.
editor.or=or
editor.cancel_lower=cancel
editor.cancel_lower=iptal
editor.commit_changes=Commit Changes
editor.add_tmpl=Add '%s/<filename>'
editor.add=Add '%s'
@@ -451,7 +451,7 @@ editor.commit_message_desc=Add an optional extended description...
editor.commit_directly_to_this_branch=Commit directly to the <strong class="branch-name">%s</strong> branch.
editor.create_new_branch=Create a <strong>new branch</strong> for this commit and start a pull request.
editor.new_branch_name_desc=New branch name...
editor.cancel=Cancel
editor.cancel=İptal
editor.filename_cannot_be_empty=Filename cannot be empty.
editor.branch_already_exists=Branch '%s' already exists in this repository.
editor.directory_is_a_file=Entry '%s' in the parent path is a file not a directory in this repository.
@@ -639,7 +639,7 @@ settings.site=Resmi Web Sitesi
settings.update_settings=Ayarları Güncelle
settings.change_reponame_prompt=Bu değişiklik, bağlantıların depoyla olan ilişkisini etkileyecektir.
settings.advanced_settings=Gelişmiş Ayarlar
settings.wiki_desc=Enable wiki system
settings.wiki_desc=Viki sıstemini etkinleştir
settings.use_internal_wiki=Use builtin wiki
settings.use_external_wiki=Harici Wiki kullan
settings.external_wiki_url=Harici Wiki bağlantısı
@@ -690,7 +690,7 @@ settings.search_user_placeholder=Kullanıcı ara...
settings.org_not_allowed_to_be_collaborator=Organizasyon, bir katkıcı olarak eklenemez.
settings.user_is_org_member=Kullanıcı organizasyon üyesi olduğu için katkıcı olarak eklenemez.
settings.add_webhook=Web İsteği Ekle
settings.hooks_desc=Web istekleri, HTTP POST olay tetikleyicileri gibidirler. Gogs'ta ne zaman bir şey olsa, hedef belirttiğiniz sunuculara bildirim yapabilecek duruma geliriz. Daha fazla bilgiyi <a target="_blank" href="%s">Web İstekleri Kılavuzu</a>'nda bulabilirsiniz.
settings.hooks_desc=Web istekleri, HTTP POST olay tetikleyicileri gibidirler. Gitea'ta ne zaman bir şey olsa, hedef belirttiğiniz sunuculara bildirim yapabilecek duruma geliriz. Daha fazla bilgiyi <a target="_blank" href="%s">Web İstekleri Kılavuzu</a>'nda bulabilirsiniz.
settings.webhook_deletion=Web İsteğini Sil
settings.webhook_deletion_desc=Bu web isteğini silerseniz buna bağlı olan tüm bilgiler ve dağıtım geçmişi de silinecektir. Devam etmek istiyor musunuz?
settings.webhook_deletion_success=Web isteği başarıyla silindi!
@@ -889,7 +889,7 @@ total=Toplam: %d
dashboard.statistic=İstatistik
dashboard.operations=İşlemler
dashboard.system_status=Sistem İzleme Durumu
dashboard.statistic_info=Gogs veritabanında <b>%d</b> kullanıcı, <b>%d</b> organizasyon, <b>%d</b> genel anahtar, <b>%d</b> depo, <b>%d</b> izleme, <b>%d</b> yıldız, <b>%d</b> hareket, <b>%d</b> erişim, <b>%d</b> sorun, <b>%d</b> yorum, <b>%d</b> sosyal hesap, <b>%d</b> takip, <b>%d</b> yansı, <b>%d</b> sürüm, <b>%d</b> giriş kaynağı, <b>%d</b> web isteği, <b>%d</b> kilometre taşı, <b>%d</b> etiket, <b>%d</b> istek görevi, <b>%d</b> takım, <b>%d</b> güncellenmiş görev, <b>%d</b> ek var.
dashboard.statistic_info=Gitea veritabanında <b>%d</b> kullanıcı, <b>%d</b> organizasyon, <b>%d</b> genel anahtar, <b>%d</b> depo, <b>%d</b> izleme, <b>%d</b> yıldız, <b>%d</b> hareket, <b>%d</b> erişim, <b>%d</b> sorun, <b>%d</b> yorum, <b>%d</b> sosyal hesap, <b>%d</b> takip, <b>%d</b> yansı, <b>%d</b> sürüm, <b>%d</b> giriş kaynağı, <b>%d</b> web isteği, <b>%d</b> kilometre taşı, <b>%d</b> etiket, <b>%d</b> istek görevi, <b>%d</b> takım, <b>%d</b> güncellenmiş görev, <b>%d</b> ek var.
dashboard.operation_name=İşlem Adı
dashboard.operation_switch=Geç
dashboard.operation_run=Çalıştır
@@ -903,7 +903,7 @@ dashboard.delete_missing_repos=Git dosyalarını kaybetmiş tüm depo kayıtlar
dashboard.delete_missing_repos_success=Git dosyalarını kaybetmiş tüm depo kayıtları başarıyla silindi.
dashboard.git_gc_repos=Depolarda çöp toplama işlemini gerçekleştir
dashboard.git_gc_repos_success=Tüm depolarda çöp toplama işlemi başarıyla gerçekleştirildi.
dashboard.resync_all_sshkeys='.ssh/authorized_keys' dosyasını yeniden yaz (dikkat: Gogs'un olmayan anahtarlar silinecektir)
dashboard.resync_all_sshkeys='.ssh/authorized_keys' dosyasını yeniden yaz (dikkat: Gitea'un olmayan anahtarlar silinecektir)
dashboard.resync_all_sshkeys_success=Tüm genel anahtarlar başarıyla yeniden yazıldı.
dashboard.resync_all_update_hooks=Tüm depoların güncel web isteklerini yeniden yaz (özel yapılandırma yolu değiştiğinde gerekir)
dashboard.resync_all_update_hooks_success=Tüm depoların güncel web istekleri başarıyla yeniden yazıldı.

View File

@@ -47,8 +47,8 @@ cancel=取消
[install]
install=安装页面
title=首次运行安装程序
docker_helper=如果您正在使用 Docker 容器运行 Gogs,请务必先仔细阅读 <a target="_blank" href="%s">官方文档</a> 后再对本页面进行填写。
requite_db_desc=Gogs 要求安装 MySQL、PostgreSQL、SQLite3 或 TiDB。
docker_helper=如果您正在使用 Docker 容器运行 Gitea,请务必先仔细阅读 <a target="_blank" href="%s">官方文档</a> 后再对本页面进行填写。
requite_db_desc=Gitea 要求安装 MySQL、PostgreSQL、SQLite3 或 TiDB。
db_title=数据库设置
db_type=数据库类型
host=数据库主机
@@ -70,7 +70,7 @@ app_name_helper=快用狂拽酷炫的组织名称闪瞎我们!
repo_path=仓库根目录
repo_path_helper=所有 Git 远程仓库都将被存放于该目录。
run_user=运行系统用户
run_user_helper=该用户必须具有对仓库根目录和运行 Gogs 的操作权限。
run_user_helper=该用户必须具有对仓库根目录和运行 Gitea 的操作权限。
domain=域名
domain_helper=该设置影响 SSH 克隆地址。
ssh_port=SSH 端口号
@@ -118,7 +118,7 @@ invalid_repo_path=仓库根目录设置不正确:%v
run_user_not_match=运行系统用户非当前用户:%s -> %s
save_config_failed=应用配置保存失败:%v
invalid_admin_setting=管理员帐户设置不正确:%v
install_success=您好!我们很高兴您选择使用 Gogs,祝您使用愉快,代码从此无 BUG
install_success=您好!我们很高兴您选择使用 Gitea,祝您使用愉快,代码从此无 BUG
invalid_log_root_path=无效的日志路径:%v
[home]
@@ -137,6 +137,7 @@ issues.in_your_repos=属于该用户仓库的
[explore]
repos=仓库
users=用户
organizations=组织
search=搜索
[auth]
@@ -162,7 +163,7 @@ reset_password=重置密码
invalid_code=对不起,您的确认代码已过期或已失效。
reset_password_helper=单击此处重置密码
password_too_short=密码长度不能少于 6 位!
non_local_account=非本地类型的帐户无法通过 Gogs 修改密码。
non_local_account=非本地类型的帐户无法通过 Gitea 修改密码。
[mail]
activate_account=请激活您的帐户
@@ -222,7 +223,7 @@ user_not_exist=被操作的用户不存在!
last_org_owner=被移除用户为最后一位管理员。请添加一位新的管理员再进行移除成员操作!
invalid_ssh_key=很抱歉,我们无法验证您输入的 SSH 密钥:%s
unable_verify_ssh_key=Gogs 无法验证您输入的 SSH 密钥,但我们假设那是有效的密钥,请您自行确保其有效性!
unable_verify_ssh_key=Gitea 无法验证您输入的 SSH 密钥,但我们假设那是有效的密钥,请您自行确保其有效性!
auth_failed=授权验证失败:%v
still_own_repo=您的帐户仍然是某些仓库的拥有者,您必须先转移或删除它们才能执行删除帐户操作!
@@ -327,7 +328,7 @@ unbind_success=社交帐号解除绑定成功!
manage_access_token=管理个人操作令牌
generate_new_token=生成新的令牌
tokens_desc=您可以使用这些已生成的令牌来操作 Gogs API。
tokens_desc=您可以使用这些已生成的令牌来操作 Gitea API。
new_token_desc=目前为止,任何令牌都对您的帐户拥有完整的操作权限。
token_name=令牌名称
generate_token=生成令牌
@@ -690,7 +691,7 @@ settings.search_user_placeholder=搜索用户...
settings.org_not_allowed_to_be_collaborator=组织不允许被添加为仓库协作者!
settings.user_is_org_member=被操作的用户是组织成员,因此无法添加为协作者!
settings.add_webhook=添加 Web 钩子
settings.hooks_desc=Web 钩子允许您设定在 Gogs 上发生指定事件时对指定 URL 发送 POST 通知。查看 <a target="_blank" href="%s">Webhooks 文档</a> 获取更多信息。
settings.hooks_desc=Web 钩子允许您设定在 Gitea 上发生指定事件时对指定 URL 发送 POST 通知。查看 <a target="_blank" href="%s">Webhooks 文档</a> 获取更多信息。
settings.webhook_deletion=删除 Web 钩子
settings.webhook_deletion_desc=删除该 Web 钩子将会删除与其有关的信息和推送历史。是否继续?
settings.webhook_deletion_success=Web 钩子删除成功!
@@ -702,7 +703,7 @@ settings.webhook.response=响应内容
settings.webhook.headers=头信息
settings.webhook.payload=推送内容
settings.webhook.body=响应体
settings.githooks_desc=Git 钩子是由 Git 本身提供的功能,以下为 Gogs 所支持的钩子列表。
settings.githooks_desc=Git 钩子是由 Git 本身提供的功能,以下为 Gitea 所支持的钩子列表。
settings.githook_edit_desc=如果钩子未启动,则会显示样例文件中的内容。如果想要删除某个钩子,则提交空白文本即可。
settings.githook_name=钩子名称
settings.githook_content=钩子文本
@@ -889,7 +890,7 @@ total=总计:%d
dashboard.statistic=应用统计数据
dashboard.operations=管理员操作
dashboard.system_status=系统监视状态
dashboard.statistic_info=Gogs 数据库统计:<b>%d</b> 位用户,<b>%d</b> 个组织,<b>%d</b> 个公钥,<b>%d</b> 个仓库,<b>%d</b> 个仓库关注,<b>%d</b> 个赞,<b>%d</b> 次行为,<b>%d</b> 条权限记录,<b>%d</b> 张工单,<b>%d</b> 次评论,<b>%d</b> 个社交帐号,<b>%d</b> 个用户关注,<b>%d</b> 个镜像,<b>%d</b> 个版本发布,<b>%d</b> 个登录源,<b>%d</b> 个 Web 钩子,<b>%d</b> 个里程碑,<b>%d</b> 个标签,<b>%d</b> 个钩子任务,<b>%d</b> 个团队,<b>%d</b> 个更新任务,<b>%d</b> 个附件。
dashboard.statistic_info=Gitea 数据库统计:<b>%d</b> 位用户,<b>%d</b> 个组织,<b>%d</b> 个公钥,<b>%d</b> 个仓库,<b>%d</b> 个仓库关注,<b>%d</b> 个赞,<b>%d</b> 次行为,<b>%d</b> 条权限记录,<b>%d</b> 张工单,<b>%d</b> 次评论,<b>%d</b> 个社交帐号,<b>%d</b> 个用户关注,<b>%d</b> 个镜像,<b>%d</b> 个版本发布,<b>%d</b> 个登录源,<b>%d</b> 个 Web 钩子,<b>%d</b> 个里程碑,<b>%d</b> 个标签,<b>%d</b> 个钩子任务,<b>%d</b> 个团队,<b>%d</b> 个更新任务,<b>%d</b> 个附件。
dashboard.operation_name=操作名称
dashboard.operation_switch=开关
dashboard.operation_run=执行
@@ -903,7 +904,7 @@ dashboard.delete_missing_repos=删除所有丢失 Git 文件的仓库记录
dashboard.delete_missing_repos_success=所有丢失 Git 文件的仓库记录删除成功!
dashboard.git_gc_repos=对仓库进行垃圾回收
dashboard.git_gc_repos_success=所有仓库垃圾回收成功!
dashboard.resync_all_sshkeys=重新生成 '.ssh/authorized_keys' 文件(警告:不是 Gogs 的密钥也会被删除)
dashboard.resync_all_sshkeys=重新生成 '.ssh/authorized_keys' 文件(警告:不是 Gitea 的密钥也会被删除)
dashboard.resync_all_sshkeys_success=所有公钥重新生成成功!
dashboard.resync_all_update_hooks=重新生成所有仓库的 Update 钩子(用于自定义配置文件被修改)
dashboard.resync_all_update_hooks_success=所有仓库的 Update 钩子重新生成成功!

View File

@@ -47,8 +47,8 @@ cancel=取消
[install]
install=安裝頁面
title=首次安裝步驟
docker_helper=如果您正在使用 Docker 容器運行 Gogs,請務必先仔細閱讀 <a target="_blank" href="%s">官方文檔</a> 後再對本頁面進行填寫。
requite_db_desc=Gogs 要求安裝 MySQL、PostgreSQL、SQLite3 或 TiDB。
docker_helper=如果您正在使用 Docker 容器運行 Gitea,請務必先仔細閱讀 <a target="_blank" href="%s">官方文檔</a> 後再對本頁面進行填寫。
requite_db_desc=Gitea 要求安裝 MySQL、PostgreSQL、SQLite3 或 TiDB。
db_title=數據庫設置
db_type=資料庫類型
host=主機
@@ -70,7 +70,7 @@ app_name_helper=為您的組織取個響亮而又偉大的名稱
repo_path=儲存庫的根目錄
repo_path_helper=所有Git遠端儲存庫將會儲存在這個目錄之下。
run_user=執行使用者
run_user_helper=該用戶必須具有對儲存庫根目錄和執行 Gogs 的操作權限。
run_user_helper=該用戶必須具有對儲存庫根目錄和執行 Gitea 的操作權限。
domain=域名
domain_helper=該設置影響 SSH 複製地址。
ssh_port=SSH 埠
@@ -118,7 +118,7 @@ invalid_repo_path=倉庫根目錄設置不正確:%v
run_user_not_match=執行系統用戶非當前用戶:%s -> %s
save_config_failed=應用配置保存失敗:%v
invalid_admin_setting=管理員帳戶設置不正確:%v
install_success=您好!我們很高興您選擇使用 Gogs,祝您使用愉快,代碼從此無 BUG
install_success=您好!我們很高興您選擇使用 Gitea,祝您使用愉快,代碼從此無 BUG
invalid_log_root_path=日誌根目錄無效: %v
[home]
@@ -162,7 +162,7 @@ reset_password=重置密碼
invalid_code=對不起,您的確認代碼已過期或已失效。
reset_password_helper=單擊此處重置密碼
password_too_short=密碼長度不能少於 6 位!
non_local_account=Non-local accounts cannot change passwords through Gogs.
non_local_account=Non-local accounts cannot change passwords through Gitea.
[mail]
activate_account=請激活您的帳戶
@@ -222,7 +222,7 @@ user_not_exist=被操作的用戶不存在!
last_org_owner=被移除用戶為最後一位管理員。請添加一位新的管理員再進行移除成員操作!
invalid_ssh_key=很抱歉,我們無法驗證您輸入的 SSH 密鑰:%s
unable_verify_ssh_key=Gogs 無法驗證您輸入的 SSH 密鑰,但我們假設那是有效的密鑰,請您自行確保其有效性!
unable_verify_ssh_key=Gitea 無法驗證您輸入的 SSH 密鑰,但我們假設那是有效的密鑰,請您自行確保其有效性!
auth_failed=授權驗證失敗:%v
still_own_repo=您的帳戶仍然是某些倉庫的擁有者,您必須先轉移或刪除它們才能執行刪除帳戶操作!
@@ -327,7 +327,7 @@ unbind_success=社交帳號解除綁定成功!
manage_access_token=管理個人操作令牌
generate_new_token=生成新的令牌
tokens_desc=您所產生的token將被用來存取Gogs APIs
tokens_desc=您所產生的token將被用來存取Gitea APIs
new_token_desc=目前為止,任何令牌都對您的帳戶擁有完整的操作權限。
token_name=令牌名稱
generate_token=生成令牌
@@ -690,7 +690,7 @@ settings.search_user_placeholder=搜索用戶...
settings.org_not_allowed_to_be_collaborator=Organization is not allowed to be added as a collaborator.
settings.user_is_org_member=被操作的用戶是組織成員,因此無法添加為協作者!
settings.add_webhook=添加 Web 鉤子
settings.hooks_desc=Web 鉤子允許您設定在 Gogs 上發生指定事件時對指定 URL 發送 POST 通知。查看 <a target="_blank" href="%s">Webhooks 文檔</a> 獲取更多信息。
settings.hooks_desc=Web 鉤子允許您設定在 Gitea 上發生指定事件時對指定 URL 發送 POST 通知。查看 <a target="_blank" href="%s">Webhooks 文檔</a> 獲取更多信息。
settings.webhook_deletion=刪除 Web 鉤子
settings.webhook_deletion_desc=刪除該 Web 鉤子將會刪除與其有關的信息和推送歷史。是否繼續?
settings.webhook_deletion_success=Web 鉤子刪除成功!
@@ -702,7 +702,7 @@ settings.webhook.response=響應內容
settings.webhook.headers=標題
settings.webhook.payload=推送內容
settings.webhook.body=響應內容
settings.githooks_desc=Git 鉤子是由 Git 本身提供的功能,以下為 Gogs 所支持的鉤子列表。
settings.githooks_desc=Git 鉤子是由 Git 本身提供的功能,以下為 Gitea 所支持的鉤子列表。
settings.githook_edit_desc=如果鉤子未啟動,則會顯示樣例文件中的內容。如果想要刪除某個鉤子,則提交空白文本即可。
settings.githook_name=鉤子名稱
settings.githook_content=鉤子文本
@@ -889,7 +889,7 @@ total=總計:%d
dashboard.statistic=應用統計數據
dashboard.operations=管理員操作
dashboard.system_status=系統監視狀態
dashboard.statistic_info=Gogs 數據庫統計:<b>%d</b> 位用戶,<b>%d</b> 個組織,<b>%d</b> 個公鑰,<b>%d</b> 個倉庫,<b>%d</b> 個倉庫關註,<b>%d</b> 個贊,<b>%d</b> 次行為,<b>%d</b> 條權限記錄,<b>%d</b> 個問題,<b>%d</b> 次評論,<b>%d</b> 個社交帳號,<b>%d</b> 個用戶關註,<b>%d</b> 個鏡像,<b>%d</b> 個版本發佈,<b>%d</b> 個登錄源,<b>%d</b> 個 Web 鉤子,<b>%d</b> 個里程碑,<b>%d</b> 個標籤,<b>%d</b> 個鉤子任務,<b>%d</b> 個團隊,<b>%d</b> 個更新任務,<b>%d</b> 個附件。
dashboard.statistic_info=Gitea 數據庫統計:<b>%d</b> 位用戶,<b>%d</b> 個組織,<b>%d</b> 個公鑰,<b>%d</b> 個倉庫,<b>%d</b> 個倉庫關註,<b>%d</b> 個贊,<b>%d</b> 次行為,<b>%d</b> 條權限記錄,<b>%d</b> 個問題,<b>%d</b> 次評論,<b>%d</b> 個社交帳號,<b>%d</b> 個用戶關註,<b>%d</b> 個鏡像,<b>%d</b> 個版本發佈,<b>%d</b> 個登錄源,<b>%d</b> 個 Web 鉤子,<b>%d</b> 個里程碑,<b>%d</b> 個標籤,<b>%d</b> 個鉤子任務,<b>%d</b> 個團隊,<b>%d</b> 個更新任務,<b>%d</b> 個附件。
dashboard.operation_name=操作名稱
dashboard.operation_switch=開關
dashboard.operation_run=執行
@@ -903,7 +903,7 @@ dashboard.delete_missing_repos=刪除所有丟失 Git 文件的倉庫記錄
dashboard.delete_missing_repos_success=成功刪除所有丟失 Git 文件的倉庫記錄!
dashboard.git_gc_repos=對倉庫進行垃圾回收
dashboard.git_gc_repos_success=所有倉庫的垃圾回收已成功完成!
dashboard.resync_all_sshkeys=重新生成 '.ssh/authorized_keys' 文件(警告:不是 Gogs 的密鑰也會被刪除)
dashboard.resync_all_sshkeys=重新生成 '.ssh/authorized_keys' 文件(警告:不是 Gitea 的密鑰也會被刪除)
dashboard.resync_all_sshkeys_success=所有公鑰重新生成成功!
dashboard.resync_all_update_hooks=重新生成所有倉庫的 Update 鈎子(用於被修改的自定義配置文件)
dashboard.resync_all_update_hooks_success=已成功重新生成所有倉庫的 Update 鈎子!

View File

@@ -47,8 +47,8 @@ cancel=取消
[install]
install=安裝頁面
title=首次安裝步驟
docker_helper=如果您正在使用 Docker 容器運行 Gogs,請務必先仔細閱讀 <a target="_blank" href="%s">官方文檔</a> 後再對本頁面進行填寫。
requite_db_desc=Gogs 要求安裝 MySQL、PostgreSQL、SQLite3 或 TiDB。
docker_helper=如果您正在使用 Docker 容器運行 Gitea,請務必先仔細閱讀 <a target="_blank" href="%s">官方文檔</a> 後再對本頁面進行填寫。
requite_db_desc=Gitea 要求安裝 MySQL、PostgreSQL、SQLite3 或 TiDB。
db_title=數據庫設置
db_type=資料庫類型
host=主機
@@ -70,7 +70,7 @@ app_name_helper=為您的組織取個響亮而又偉大的名稱
repo_path=儲存庫的根目錄
repo_path_helper=所有Git遠端儲存庫將會儲存在這個目錄之下。
run_user=執行使用者
run_user_helper=該用戶必須具有對儲存庫根目錄和執行 Gogs 的操作權限。
run_user_helper=該用戶必須具有對儲存庫根目錄和執行 Gitea 的操作權限。
domain=域名
domain_helper=該設置影響 SSH 複製地址。
ssh_port=SSH 埠
@@ -118,7 +118,7 @@ invalid_repo_path=倉庫根目錄設置不正確:%v
run_user_not_match=執行系統用戶非當前用戶:%s -> %s
save_config_failed=應用配置保存失敗:%v
invalid_admin_setting=管理員帳戶設置不正確:%v
install_success=您好!我們很高興您選擇使用 Gogs,祝您使用愉快,代碼從此無 BUG
install_success=您好!我們很高興您選擇使用 Gitea,祝您使用愉快,代碼從此無 BUG
invalid_log_root_path=日誌根目錄無效: %v
[home]
@@ -126,7 +126,7 @@ uname_holder=用戶名或郵箱
password_holder=密碼
switch_dashboard_context=切換控制面版用戶
my_repos=我的倉庫
show_more_repos=Show more repositories...
show_more_repos=顯示更多倉庫...
collaborative_repos=參與協作的倉庫
my_orgs=我的組織
my_mirrors=我的鏡像
@@ -151,7 +151,7 @@ forget_password=忘記密碼?
sign_up_now=還沒帳戶?馬上註冊。
confirmation_mail_sent_prompt=一封新的確認郵件已經被發送至 <b>%s</b>,請檢查您的收件箱並在 %d 小時內完成確認註冊操作。
active_your_account=激活您的帳戶
prohibit_login=Login Prohibited
prohibit_login=禁止登錄
prohibit_login_desc=Your account is prohibited to login, please contact site admin.
resent_limit_prompt=對不起,您請求發送激活郵件過於頻繁,請等待 3 分鐘後再試!
has_unconfirmed_mail=%s 您好,您有一封發送至( <b>%s</b>) 但未被確認的郵件。如果您未收到激活郵件,或需要重新發送,請單擊下方的按鈕。
@@ -162,7 +162,7 @@ reset_password=重置密碼
invalid_code=對不起,您的確認代碼已過期或已失效。
reset_password_helper=單擊此處重置密碼
password_too_short=密碼長度不能少於 6 位!
non_local_account=非本地帳戶無法通過 Gogs 修改密碼。
non_local_account=非本地帳戶無法通過 Gitea 修改密碼。
[mail]
activate_account=請激活您的帳戶
@@ -189,12 +189,12 @@ TeamName=團隊名稱
AuthName=認證名稱
AdminEmail=管理員郵箱
NewBranchName=New branch name
NewBranchName=新的分支名稱
CommitSummary=Commit summary
CommitMessage=Commit message
CommitMessage=提交訊息
CommitChoice=Commit choice
TreeName=File path
Content=Content
TreeName=檔案路徑
Content=內容
require_error=不能為空。
alpha_dash_error=必須為英文字母、阿拉伯數字或橫線(-_
@@ -222,7 +222,7 @@ user_not_exist=被操作的用戶不存在!
last_org_owner=被移除用戶為最後一位管理員。請添加一位新的管理員再進行移除成員操作!
invalid_ssh_key=很抱歉,我們無法驗證您輸入的 SSH 密鑰:%s
unable_verify_ssh_key=Gogs 無法驗證您輸入的 SSH 密鑰,但我們假設那是有效的密鑰,請您自行確保其有效性!
unable_verify_ssh_key=Gitea 無法驗證您輸入的 SSH 密鑰,但我們假設那是有效的密鑰,請您自行確保其有效性!
auth_failed=授權驗證失敗:%v
still_own_repo=您的帳戶仍然是某些倉庫的擁有者,您必須先轉移或刪除它們才能執行刪除帳戶操作!
@@ -327,7 +327,7 @@ unbind_success=社交帳號解除綁定成功!
manage_access_token=管理個人操作令牌
generate_new_token=生成新的令牌
tokens_desc=您所產生的token將被用來存取Gogs APIs
tokens_desc=您所產生的token將被用來存取Gitea APIs
new_token_desc=目前為止,任何令牌都對您的帳戶擁有完整的操作權限。
token_name=令牌名稱
generate_token=生成令牌
@@ -427,31 +427,31 @@ file_view_raw=查看原始文件
file_permalink=永久連結
file_too_large=This file is too large to be shown
editor.new_file=New file
editor.upload_file=Upload file
editor.edit_file=Edit file
editor.new_file=開新檔案
editor.upload_file=上傳檔案
editor.edit_file=編輯文件
editor.preview_changes=Preview Changes
editor.cannot_edit_non_text_files=Cannot edit non-text files
editor.edit_this_file=Edit this file
editor.cannot_edit_non_text_files=不能編輯非文字檔
editor.edit_this_file=編輯此文件
editor.must_be_on_a_branch=You must be on a branch to make or propose changes to this file
editor.fork_before_edit=You must fork this repository before editing the file
editor.delete_this_file=Delete this file
editor.delete_this_file=刪除此文件
editor.must_have_write_access=You must have write access to make or propose changes to this file
editor.file_delete_success=File '%s' has been deleted successfully!
editor.name_your_file=Name your file...
editor.filename_help=To add directory, just type it and press /. To remove a directory, go to the beginning of the field and press backspace.
editor.or=or
editor.cancel_lower=cancel
editor.or=
editor.cancel_lower=取消
editor.commit_changes=Commit Changes
editor.add_tmpl=Add '%s/<filename>'
editor.add=Add '%s'
editor.update=Update '%s'
editor.delete=Delete '%s'
editor.add=新增 '%s'
editor.update=更新 '%s'
editor.delete=刪除 '%s'
editor.commit_message_desc=Add an optional extended description...
editor.commit_directly_to_this_branch=Commit directly to the <strong class="branch-name">%s</strong> branch.
editor.create_new_branch=Create a <strong>new branch</strong> for this commit and start a pull request.
editor.new_branch_name_desc=New branch name...
editor.cancel=Cancel
editor.new_branch_name_desc=新的分支名稱...
editor.cancel=取消
editor.filename_cannot_be_empty=Filename cannot be empty.
editor.branch_already_exists=Branch '%s' already exists in this repository.
editor.directory_is_a_file=Entry '%s' in the parent path is a file not a directory in this repository.
@@ -459,9 +459,9 @@ editor.filename_is_a_directory=The filename '%s' is an existing directory in thi
editor.file_editing_no_longer_exists=The file '%s' you are editing no longer exists in the repository.
editor.file_changed_while_editing=File content has been changed since you started editing. <a target="_blank" href="%s">Click here</a> to see what have been changed or <strong>press commit again</strong> to overwrite those changes.
editor.file_already_exists=A file with name '%s' already exists in this repository.
editor.no_changes_to_show=There are no changes to show.
editor.no_changes_to_show=沒有可以顯示的變更。
editor.fail_to_update_file=Failed to update/create file '%s' with error: %v
editor.add_subdir=Add subdirectory...
editor.add_subdir=新增子目錄...
editor.unable_to_upload_files=Failed to upload files to '%s' with error: %v
editor.upload_files_to_dir=Upload files to '%s'
@@ -523,7 +523,7 @@ issues.open_title=開啟中
issues.closed_title=已關閉
issues.num_comments=%d 條評論
issues.commented_at=`commented <a href="#%s">%s</a>`
issues.delete_comment_confirm=Are you sure you want to delete this comment?
issues.delete_comment_confirm=您確定要刪除該條評論嗎?
issues.no_content=尚未有任何內容
issues.close_issue=關閉
issues.close_comment_issue=關閉及評論
@@ -551,8 +551,8 @@ issues.label_deletion=刪除標籤
issues.label_deletion_desc=刪除該標籤將會移除所有問題中相關的訊息。是否繼續?
issues.label_deletion_success=標籤刪除成功!
issues.num_participants=%d 參與者
issues.attachment.open_tab=`Click to see "%s" in a new tab`
issues.attachment.download=`Click to download "%s"`
issues.attachment.open_tab=`在新的標籤頁中查看 '%s'`
issues.attachment.download=`點擊下載 '%s'`
pulls.new=創建合併請求
pulls.compare_changes=對比文件變化
@@ -632,14 +632,14 @@ settings.collaboration.undefined=未定義
settings.hooks=管理 Web 鉤子
settings.githooks=管理 Git 鉤子
settings.basic_settings=基本設置
settings.mirror_settings=Mirror Settings
settings.mirror_settings=鏡像設定
settings.sync_mirror=Sync Now
settings.mirror_sync_in_progress=Mirror syncing is in progress, please refresh page in about a minute.
settings.site=官方網站
settings.update_settings=更新倉庫設置
settings.change_reponame_prompt=該操作將會影響到所有與該倉庫有關的鏈接
settings.advanced_settings=高級設置
settings.wiki_desc=Enable wiki system
settings.wiki_desc=啓用 Wiki 系統
settings.use_internal_wiki=Use builtin wiki
settings.use_external_wiki=使用外部 wiki
settings.external_wiki_url=外部 Wiki 連結
@@ -690,7 +690,7 @@ settings.search_user_placeholder=搜索用戶...
settings.org_not_allowed_to_be_collaborator=組織不允許被加為協同者。
settings.user_is_org_member=被操作的用戶是組織成員,因此無法添加為協作者!
settings.add_webhook=添加 Web 鉤子
settings.hooks_desc=Web 鉤子允許您設定在 Gogs 上發生指定事件時對指定 URL 發送 POST 通知。查看 <a target="_blank" href="%s">Webhooks 文檔</a> 獲取更多信息。
settings.hooks_desc=Web 鉤子允許您設定在 Gitea 上發生指定事件時對指定 URL 發送 POST 通知。查看 <a target="_blank" href="%s">Webhooks 文檔</a> 獲取更多信息。
settings.webhook_deletion=刪除 Web 鉤子
settings.webhook_deletion_desc=刪除該 Web 鉤子將會刪除與其有關的信息和推送歷史。是否繼續?
settings.webhook_deletion_success=Web 鉤子刪除成功!
@@ -702,7 +702,7 @@ settings.webhook.response=響應內容
settings.webhook.headers=標題
settings.webhook.payload=推送內容
settings.webhook.body=響應內容
settings.githooks_desc=Git 鉤子是由 Git 本身提供的功能,以下為 Gogs 所支持的鉤子列表。
settings.githooks_desc=Git 鉤子是由 Git 本身提供的功能,以下為 Gitea 所支持的鉤子列表。
settings.githook_edit_desc=如果鉤子未啟動,則會顯示樣例文件中的內容。如果想要刪除某個鉤子,則提交空白文本即可。
settings.githook_name=鉤子名稱
settings.githook_content=鉤子文本
@@ -720,7 +720,7 @@ settings.event_send_everything=推送 <strong>所有</strong> 事件
settings.event_choose=讓我選擇我的需要
settings.event_create=創建
settings.event_create_desc=創建分支或標籤
settings.event_pull_request=Pull Request
settings.event_pull_request=合併請求
settings.event_pull_request_desc=Pull request opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, or synchronized.
settings.event_push=推送
settings.event_push_desc=Git 倉庫推送
@@ -889,7 +889,7 @@ total=總計:%d
dashboard.statistic=應用統計數據
dashboard.operations=管理員操作
dashboard.system_status=系統監視狀態
dashboard.statistic_info=Gogs 數據庫統計:<b>%d</b> 位用戶,<b>%d</b> 個組織,<b>%d</b> 個公鑰,<b>%d</b> 個倉庫,<b>%d</b> 個倉庫關註,<b>%d</b> 個贊,<b>%d</b> 次行為,<b>%d</b> 條權限記錄,<b>%d</b> 個問題,<b>%d</b> 次評論,<b>%d</b> 個社交帳號,<b>%d</b> 個用戶關註,<b>%d</b> 個鏡像,<b>%d</b> 個版本發佈,<b>%d</b> 個登錄源,<b>%d</b> 個 Web 鉤子,<b>%d</b> 個里程碑,<b>%d</b> 個標籤,<b>%d</b> 個鉤子任務,<b>%d</b> 個團隊,<b>%d</b> 個更新任務,<b>%d</b> 個附件。
dashboard.statistic_info=Gitea 數據庫統計:<b>%d</b> 位用戶,<b>%d</b> 個組織,<b>%d</b> 個公鑰,<b>%d</b> 個倉庫,<b>%d</b> 個倉庫關註,<b>%d</b> 個贊,<b>%d</b> 次行為,<b>%d</b> 條權限記錄,<b>%d</b> 個問題,<b>%d</b> 次評論,<b>%d</b> 個社交帳號,<b>%d</b> 個用戶關註,<b>%d</b> 個鏡像,<b>%d</b> 個版本發佈,<b>%d</b> 個登錄源,<b>%d</b> 個 Web 鉤子,<b>%d</b> 個里程碑,<b>%d</b> 個標籤,<b>%d</b> 個鉤子任務,<b>%d</b> 個團隊,<b>%d</b> 個更新任務,<b>%d</b> 個附件。
dashboard.operation_name=操作名稱
dashboard.operation_switch=開關
dashboard.operation_run=執行
@@ -903,7 +903,7 @@ dashboard.delete_missing_repos=刪除所有丟失 Git 文件的倉庫記錄
dashboard.delete_missing_repos_success=成功刪除所有丟失 Git 文件的倉庫記錄!
dashboard.git_gc_repos=對倉庫進行垃圾回收
dashboard.git_gc_repos_success=所有倉庫的垃圾回收已成功完成!
dashboard.resync_all_sshkeys=重新生成 '.ssh/authorized_keys' 文件(警告:不是 Gogs 的密鑰也會被刪除)
dashboard.resync_all_sshkeys=重新生成 '.ssh/authorized_keys' 文件(警告:不是 Gitea 的密鑰也會被刪除)
dashboard.resync_all_sshkeys_success=所有公鑰重新生成成功!
dashboard.resync_all_update_hooks=重新生成所有倉庫的 Update 鈎子(用於被修改的自定義配置文件)
dashboard.resync_all_update_hooks_success=已成功重新生成所有倉庫的 Update 鈎子!

View File

@@ -1,111 +0,0 @@
# Docker for Gogs
Visit [Docker Hub](https://hub.docker.com/r/gogs/) see all available images and tags.
## Usage
To keep your data out of Docker container, we do a volume (`/var/gogs` -> `/data`) here, and you can change it based on your situation.
```
# Pull image from Docker Hub.
$ docker pull gogs/gogs
# Create local directory for volume.
$ mkdir -p /var/gogs
# Use `docker run` for the first time.
$ docker run --name=gogs -p 10022:22 -p 10080:3000 -v /var/gogs:/data gogs/gogs
# Use `docker start` if you have stopped it.
$ docker start gogs
```
Note: It is important to map the Gogs ssh service from the container to the host and set the appropriate SSH Port and URI settings when setting up Gogs for the first time. To access and clone Gogs Git repositories with the above configuration you would use: `git clone ssh://git@hostname:10022/username/myrepo.git` for example.
Files will be store in local path `/var/gogs` in my case.
Directory `/var/gogs` keeps Git repositories and Gogs data:
/var/gogs
|-- git
| |-- gogs-repositories
|-- ssh
| |-- # ssh public/private keys for Gogs
|-- gogs
|-- conf
|-- data
|-- log
### Volume with data container
If you're more comfortable with mounting data to a data container, the commands you execute at the first time will look like as follows:
```
# Create data container
docker run --name=gogs-data --entrypoint /bin/true gogs/gogs
# Use `docker run` for the first time.
docker run --name=gogs --volumes-from gogs-data -p 10022:22 -p 10080:3000 gogs/gogs
```
#### Using Docker 1.9 Volume command
```
# Create docker volume.
$ docker volume create --name gogs-data
# Use `docker run` for the first time.
$ docker run --name=gogs -p 10022:22 -p 10080:3000 -v gogs-data:/data gogs/gogs
```
## Settings
### Application
Most of settings are obvious and easy to understand, but there are some settings can be confusing by running Gogs inside Docker:
- **Repository Root Path**: keep it as default value `/home/git/gogs-repositories` because `start.sh` already made a symbolic link for you.
- **Run User**: keep it as default value `git` because `start.sh` already setup a user with name `git`.
- **Domain**: fill in with Docker container IP (e.g. `192.168.99.100`). But if you want to access your Gogs instance from a different physical machine, please fill in with the hostname or IP address of the Docker host machine.
- **SSH Port**: Use the exposed port from Docker container. For example, your SSH server listens on `22` inside Docker, but you expose it by `10022:22`, then use `10022` for this value. **Builtin SSH server is not recommended inside Docker Container**
- **HTTP Port**: Use port you want Gogs to listen on inside Docker container. For example, your Gogs listens on `3000` inside Docker, and you expose it by `10080:3000`, but you still use `3000` for this value.
- **Application URL**: Use combination of **Domain** and **exposed HTTP Port** values (e.g. `http://192.168.99.100:10080/`).
Full documentation of application settings can be found [here](https://gogs.io/docs/advanced/configuration_cheat_sheet.html).
### Container options
This container have some options available via environment variables, these options are opt-in features that can help the administration of this container:
- **SOCAT_LINK**:
- <u>Possible value:</u>
`true`, `false`, `1`, `0`
- <u>Default:</u>
`true`
- <u>Action:</u>
Bind linked docker container to localhost socket using socat.
Any exported port from a linked container will be binded to the matching port on localhost.
- <u>Disclaimer:</u>
As this option rely on the environment variable created by docker when a container is linked, this option should be deactivated in managed environment such as Rancher or Kubernetes (set to `0` or `false`)
- **RUN_CROND**:
- <u>Possible value:</u>
`true`, `false`, `1`, `0`
- <u>Default:</u>
`false`
- <u>Action:</u>
Request crond to be run inside the container. Its default configuration will periodically run all scripts from `/etc/periodic/${period}` but custom crontabs can be added to `/var/spool/cron/crontabs/`.
## Upgrade
:exclamation::exclamation::exclamation:<span style="color: red">**Make sure you have volumed data to somewhere outside Docker container**</span>:exclamation::exclamation::exclamation:
Steps to upgrade Gogs with Docker:
- `docker pull gogs/gogs`
- `docker stop gogs`
- `docker rm gogs`
- Finally, create container as the first time and don't forget to do same volume and port mapping.
## Known Issues
- The docker container can not currently be build on Raspberry 1 (armv6l) as our base image `alpine` does not have a `go` package available for this platform.

View File

@@ -1,36 +0,0 @@
#!/bin/sh
set -x
set -e
# Set temp environment vars
export GOPATH=/tmp/go
export PATH=${PATH}:${GOPATH}/bin
export GO15VENDOREXPERIMENT=1
# Install build deps
apk --no-cache --no-progress add --virtual build-deps build-base linux-pam-dev go
# Install glide
git clone -b 0.10.2 https://github.com/Masterminds/glide ${GOPATH}/src/github.com/Masterminds/glide
cd ${GOPATH}/src/github.com/Masterminds/glide
make build
go install
# Build Gogs
mkdir -p ${GOPATH}/src/github.com/gogits/
ln -s /app/gogs/ ${GOPATH}/src/github.com/gogits/gogs
cd ${GOPATH}/src/github.com/gogits/gogs
glide install
make build TAGS="sqlite cert pam"
# Cleanup GOPATH & vendoring dir
rm -r $GOPATH /app/gogs/vendor
# Remove build deps
apk --no-progress del build-deps
# Create git user for Gogs
adduser -H -D -g 'Gogs Git User' git -h /data/git -s /bin/bash && passwd -u git
echo "export GOGS_CUSTOM=${GOGS_CUSTOM}" >> /etc/profile

View File

@@ -13,4 +13,3 @@ ethers: db files
rpc: db files
netgroup: nis

2
docker/etc/profile.d/gitea.sh Executable file
View File

@@ -0,0 +1,2 @@
#!/bin/bash
export GITEA_CUSTOM=/data/gitea

View File

@@ -0,0 +1,2 @@
#!/bin/bash
exit 0

2
docker/etc/s6/gitea/finish Executable file
View File

@@ -0,0 +1,2 @@
#!/bin/bash
exit 0

6
docker/etc/s6/gitea/run Executable file
View File

@@ -0,0 +1,6 @@
#!/bin/bash
[[ -f ./setup ]] && source ./setup
pushd /app/gitea > /dev/null
exec su-exec git /app/gitea/gitea web
popd

19
docker/etc/s6/gitea/setup Executable file
View File

@@ -0,0 +1,19 @@
#!/bin/bash
if [ ! -d /data/git/.ssh ]; then
mkdir -p /data/git/.ssh
chmod 700 /data/git/.ssh
fi
if [ ! -f /data/git/.ssh/environment ]; then
echo "GITEA_CUSTOM=/data/gitea" >| /data/git/.ssh/environment
chmod 600 /data/git/.ssh/environment
fi
if [ ! -f /data/gitea/conf/app.ini ]; then
mkdir -p /data/gitea/conf
cp /etc/templates/app.ini /data/gitea/conf/app.ini
fi
chown -R git:git /data/gitea /app/gitea /data/git
chmod 0755 /data/gitea /app/gitea /data/git

2
docker/etc/s6/openssh/finish Executable file
View File

@@ -0,0 +1,2 @@
#!/bin/bash
exit 0

6
docker/etc/s6/openssh/run Executable file
View File

@@ -0,0 +1,6 @@
#!/bin/bash
[[ -f ./setup ]] && source ./setup
pushd /root > /dev/null
exec su-exec root /usr/sbin/sshd -E /var/log/sshd.log -D
popd

29
docker/etc/s6/openssh/setup Executable file
View File

@@ -0,0 +1,29 @@
#!/bin/bash
if [ ! -d /data/ssh ]; then
mkdir -p /data/ssh
fi
if [ ! -f /data/ssh/ssh_host_ed25519_key ]; then
echo "Generating /data/ssh/ssh_host_ed25519_key..."
ssh-keygen -t ed25519 -b 4096 -f /data/ssh/ssh_host_ed25519_key -N "" > /dev/null
fi
if [ ! -f /data/ssh/ssh_host_rsa_key ]; then
echo "Generating /data/ssh/ssh_host_rsa_key..."
ssh-keygen -t rsa -b 2048 -f /data/ssh/ssh_host_rsa_key -N "" > /dev/null
fi
if [ ! -f /data/ssh/ssh_host_dsa_key ]; then
echo "Generating /data/ssh/ssh_host_dsa_key..."
ssh-keygen -t dsa -f /data/ssh/ssh_host_dsa_key -N "" > /dev/null
fi
if [ ! -f /data/ssh/ssh_host_ecdsa_key ]; then
echo "Generating /data/ssh/ssh_host_ecdsa_key..."
ssh-keygen -t ecdsa -b 256 -f /data/ssh/ssh_host_ecdsa_key -N "" > /dev/null
fi
chown root:root /data/ssh/*
chmod 0700 /data/ssh
chmod 0600 /data/ssh/*

2
docker/etc/s6/syslogd/finish Executable file
View File

@@ -0,0 +1,2 @@
#!/bin/bash
exit 0

6
docker/etc/s6/syslogd/run Executable file
View File

@@ -0,0 +1,6 @@
#!/bin/bash
[[ -f ./setup ]] && source ./setup
pushd /root > /dev/null
exec su-exec root /sbin/syslogd -nS -O-
popd

1
docker/etc/s6/syslogd/setup Executable file
View File

@@ -0,0 +1 @@
#!/bin/bash

View File

@@ -1,16 +1,33 @@
Port 22
Protocol 2
AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::
Protocol 2
LogLevel INFO
HostKey /data/ssh/ssh_host_ed25519_key
HostKey /data/ssh/ssh_host_rsa_key
HostKey /data/ssh/ssh_host_dsa_key
HostKey /data/ssh/ssh_host_ecdsa_key
HostKey /data/ssh/ssh_host_ed25519_key
PermitRootLogin no
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
UsePrivilegeSeparation no
AuthorizedKeysFile .ssh/authorized_keys
UseDNS no
AllowAgentForwarding no
AllowTcpForwarding no
PrintMotd no
PrintLastLog no
PermitUserEnvironment yes
PermitRootLogin no
ChallengeResponseAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no
AllowUsers git
Banner none
Subsystem sftp /usr/lib/ssh/sftp-server
UsePrivilegeSeparation no

View File

@@ -0,0 +1,24 @@
[repository]
ROOT = /data/git/repositories
[repository.upload]
TEMP_PATH = /data/gitea/uploads
[server]
APP_DATA_PATH = /data/gitea
[database]
HOST = mysql:3306
PATH = /data/gitea/gitea.db
[session]
PROVIDER_CONFIG = /data/gitea/sessions
[picture]
AVATAR_UPLOAD_PATH = /data/gitea/avatars
[attachment]
PATH = /data/gitea/attachments
[log]
ROOT_PATH = /data/gitea/log

View File

@@ -1,5 +0,0 @@
#!/bin/sh
# Cleanup SOCAT services and s6 event folder
rm -rf $(find /app/gogs/docker/s6/ -name 'event')
rm -rf /app/gogs/docker/s6/SOCAT_*

View File

View File

@@ -1,9 +0,0 @@
#!/bin/sh
# Crontabs are located by default in /var/spool/cron/crontabs/
# The default configuration is also calling all the scripts in /etc/periodic/${period}
if test -f ./setup; then
source ./setup
fi
exec gosu root /usr/sbin/crond -fS

View File

@@ -1,8 +0,0 @@
#!/bin/sh
if test -f ./setup; then
source ./setup
fi
export USER=git
exec gosu $USER /app/gogs/gogs web

View File

@@ -1,23 +0,0 @@
#!/bin/sh
if ! test -d ~git/.ssh; then
mkdir -p ~git/.ssh
chmod 700 ~git/.ssh
fi
if ! test -f ~git/.ssh/environment; then
echo "GOGS_CUSTOM=${GOGS_CUSTOM}" > ~git/.ssh/environment
chmod 600 ~git/.ssh/environment
fi
cd /app/gogs
# Link volumed data with app data
ln -sf /data/gogs/log ./log
ln -sf /data/gogs/data ./data
# Backward Compatibility with Gogs Container v0.6.15
ln -sf /data/git /home/git
chown -R git:git /data /app/gogs ~git/
chmod 0755 /data /data/gogs ~git/

View File

@@ -1,7 +0,0 @@
#!/bin/sh
if test -f ./setup; then
source ./setup
fi
exec gosu root /usr/sbin/sshd -D -f /app/gogs/docker/sshd_config

View File

@@ -1,23 +0,0 @@
#!/bin/sh
# Check if host keys are present, else create them
if ! test -f /data/ssh/ssh_host_rsa_key; then
ssh-keygen -q -f /data/ssh/ssh_host_rsa_key -N '' -t rsa
fi
if ! test -f /data/ssh/ssh_host_dsa_key; then
ssh-keygen -q -f /data/ssh/ssh_host_dsa_key -N '' -t dsa
fi
if ! test -f /data/ssh/ssh_host_ecdsa_key; then
ssh-keygen -q -f /data/ssh/ssh_host_ecdsa_key -N '' -t ecdsa
fi
if ! test -f /data/ssh/ssh_host_ed25519_key; then
ssh-keygen -q -f /data/ssh/ssh_host_ed25519_key -N '' -t ed25519
fi
# Set correct right to ssh keys
chown -R root:root /data/ssh/*
chmod 0700 /data/ssh
chmod 0600 /data/ssh/*

View File

@@ -1,7 +0,0 @@
#!/bin/sh
if test -f ./setup; then
source ./setup
fi
exec gosu root /sbin/syslogd -nS -O-

View File

@@ -1,65 +0,0 @@
#!/bin/sh
create_socat_links() {
# Bind linked docker container to localhost socket using socat
USED_PORT="3000:22"
while read NAME ADDR PORT; do
if test -z "$NAME$ADDR$PORT"; then
continue
elif echo $USED_PORT | grep -E "(^|:)$PORT($|:)" > /dev/null; then
echo "init:socat | Can't bind linked container ${NAME} to localhost, port ${PORT} already in use" 1>&2
else
SERV_FOLDER=/app/gogs/docker/s6/SOCAT_${NAME}_${PORT}
mkdir -p ${SERV_FOLDER}
CMD="socat -ls TCP4-LISTEN:${PORT},fork,reuseaddr TCP4:${ADDR}:${PORT}"
echo -e "#!/bin/sh\nexec $CMD" > ${SERV_FOLDER}/run
chmod +x ${SERV_FOLDER}/run
USED_PORT="${USED_PORT}:${PORT}"
echo "init:socat | Linked container ${NAME} will be binded to localhost on port ${PORT}" 1>&2
fi
done << EOT
$(env | sed -En 's|(.*)_PORT_([0-9]+)_TCP=tcp://(.*):([0-9]+)|\1 \3 \4|p')
EOT
}
cleanup() {
# Cleanup SOCAT services and s6 event folder
# On start and on shutdown in case container has been killed
rm -rf $(find /app/gogs/docker/s6/ -name 'event')
rm -rf /app/gogs/docker/s6/SOCAT_*
}
create_volume_subfolder() {
# Create VOLUME subfolder
for f in /data/gogs/data /data/gogs/conf /data/gogs/log /data/git /data/ssh; do
if ! test -d $f; then
mkdir -p $f
fi
done
}
cleanup
create_volume_subfolder
LINK=$(echo "$SOCAT_LINK" | tr '[:upper:]' '[:lower:]')
if [ "$LINK" = "false" -o "$LINK" = "0" ]; then
echo "init:socat | Will not try to create socat links as requested" 1>&2
else
create_socat_links
fi
CROND=$(echo "$RUN_CROND" | tr '[:upper:]' '[:lower:]')
if [ "$CROND" = "true" -o "$CROND" = "1" ]; then
echo "init:crond | Cron Daemon (crond) will be run as requested by s6" 1>&2
rm -f /app/gogs/docker/s6/crond/down
else
# Tell s6 not to run the crond service
touch /app/gogs/docker/s6/crond/down
fi
# Exec CMD or S6 by default if nothing present
if [ $# -gt 0 ];then
exec "$@"
else
exec /bin/s6-svscan /app/gogs/docker/s6/
fi

11
docker/usr/bin/entrypoint Executable file
View File

@@ -0,0 +1,11 @@
#!/bin/sh
for FOLDER in /data/gitea/conf /data/gitea/log /data/git /data/ssh; do
mkdir -p ${FOLDER}
done
if [ $# -gt 0 ]; then
exec "$@"
else
exec /bin/s6-svscan /etc/s6
fi

152
glide.lock generated
View File

@@ -1,152 +0,0 @@
hash: 1d5fcf2a90f7621ecbc0b1abed548e11d13bda3fea49b4326c829a523268e5cf
updated: 2016-06-12T17:35:14.27036884+08:00
imports:
- name: github.com/bradfitz/gomemcache
version: fb1f79c6b65acda83063cbc69f6bba1522558bfc
subpackages:
- memcache
- name: github.com/urfave/cli
version: 1efa31f08b9333f1bd4882d61f9d668a70cd902e
- name: github.com/go-macaron/binding
version: 9440f336b443056c90d7d448a0a55ad8c7599880
- name: github.com/go-macaron/cache
version: 56173531277692bc2925924d51fda1cd0a6b8178
subpackages:
- memcache
- redis
- name: github.com/go-macaron/captcha
version: 8aa5919789ab301e865595eb4b1114d6b9847deb
- name: github.com/go-macaron/csrf
version: 6a9a7df172cc1fcd81e4585f44b09200b6087cc0
- name: github.com/go-macaron/gzip
version: cad1c6580a07c56f5f6bc52d66002a05985c5854
- name: github.com/go-macaron/i18n
version: ef57533c3b0fc2d8581deda14937e52f11a203ab
- name: github.com/go-macaron/inject
version: c5ab7bf3a307593cd44cb272d1a5beea473dd072
- name: github.com/go-macaron/session
version: 66031fcb37a0fff002a1f028eb0b3a815c78306b
subpackages:
- redis
- name: github.com/go-macaron/toolbox
version: 82b511550b0aefc36b3a28062ad3a52e812bee38
- name: github.com/go-sql-driver/mysql
version: 0b58b37b664c21f3010e836f1b931e1d0b0b0685
- name: github.com/go-xorm/core
version: 5bf745d7d163f4380e6c2bba8c4afa60534dd087
- name: github.com/go-xorm/xorm
version: c6c705684057842d9854e8299dd51abb06ae29f5
- name: github.com/gogits/chardet
version: 2404f777256163ea3eadb273dada5dcb037993c0
- name: github.com/gogits/cron
version: 7f3990acf1833faa5ebd0e86f0a4c72a4b5eba3c
- name: github.com/gogits/git-module
version: 5e0c1330d7853d1affbc193885d517db0f8d1ca5
- name: github.com/gogits/go-gogs-client
version: c52f7ee0cc58d3cd6e379025552873a8df6de322
- name: github.com/issue9/identicon
version: d36b54562f4cf70c83653e13dc95c220c79ef521
- name: github.com/jaytaylor/html2text
version: 52d9b785554a1918cb09909b89a1509a98b853fd
- name: github.com/kardianos/minwinsvc
version: cad6b2b879b0970e4245a20ebf1a81a756e2bb70
- name: github.com/klauspost/compress
version: 14eb9c4951195779ecfbec34431a976de7335b0a
subpackages:
- gzip
- flate
- name: github.com/klauspost/cpuid
version: 09cded8978dc9e80714c4d85b0322337b0a1e5e0
- name: github.com/klauspost/crc32
version: 19b0b332c9e4516a6370a0456e6182c3b5036720
- name: github.com/lib/pq
version: 80f8150043c80fb52dee6bc863a709cdac7ec8f8
subpackages:
- oid
- name: github.com/mattn/go-sqlite3
version: e118d4451349065b8e7ce0f0af32e033995363f8
- name: github.com/mcuadros/go-version
version: d52711f8d6bea8dc01efafdb68ad95a4e2606630
- name: github.com/microcosm-cc/bluemonday
version: 9dc199233bf72cc1aad9b61f73daf2f0075b9ee4
- name: github.com/msteinert/pam
version: 02ccfbfaf0cc627aa3aec8ef7ed5cfeec5b43f63
- name: github.com/nfnt/resize
version: 891127d8d1b52734debe1b3c3d7e747502b6c366
- name: github.com/russross/blackfriday
version: 93622da34e54fb6529bfb7c57e710f37a8d9cbd8
- name: github.com/satori/go.uuid
version: 0aa62d5ddceb50dbcb909d790b5345affd3669b6
- name: github.com/sergi/go-diff
version: ec7fdbb58eb3e300c8595ad5ac74a5aa50019cc7
subpackages:
- diffmatchpatch
- name: github.com/strk/go-libravatar
version: 5eed7bff870ae19ef51c5773dbc8f3e9fcbd0982
- name: github.com/shurcooL/sanitized_anchor_name
version: 10ef21a441db47d8b13ebcc5fd2310f636973c77
- name: github.com/Unknwon/cae
version: 7f5e046bc8a6c3cde743c233b96ee4fd84ee6ecd
subpackages:
- zip
- name: github.com/Unknwon/com
version: 28b053d5a2923b87ce8c5a08f3af779894a72758
- name: github.com/Unknwon/i18n
version: 39d6f2727e0698b1021ceb6a77c1801aa92e7d5d
- name: github.com/Unknwon/paginater
version: 7748a72e01415173a27d79866b984328e7b0c12b
- name: golang.org/x/crypto
version: bc89c496413265e715159bdc8478ee9a92fdc265
subpackages:
- ssh
- curve25519
- ed25519
- ed25519/internal/edwards25519
- name: golang.org/x/net
version: 57bfaa875b96fb91b4766077f34470528d4b03e9
subpackages:
- html
- html/charset
- html/atom
- name: golang.org/x/sys
version: a646d33e2ee3172a661fc09bca23bb4889a41bc8
subpackages:
- windows/svc
- windows
- name: golang.org/x/text
version: 2910a502d2bf9e43193af9d68ca516529614eed3
subpackages:
- transform
- language
- encoding
- encoding/charmap
- encoding/htmlindex
- internal/tag
- encoding/internal/identifier
- encoding/internal
- encoding/japanese
- encoding/korean
- encoding/simplifiedchinese
- encoding/traditionalchinese
- encoding/unicode
- internal/utf8internal
- runes
- name: gopkg.in/alexcesaro/quotedprintable.v3
version: 2caba252f4dc53eaf6b553000885530023f54623
- name: gopkg.in/asn1-ber.v1
version: 4e86f4367175e39f69d9358a5f17b4dda270378d
- name: gopkg.in/bufio.v1
version: 567b2bfa514e796916c4747494d6ff5132a1dfce
- name: gopkg.in/editorconfig/editorconfig-core-go.v1
version: a872f05c2e34b37b567401384d202aff11ba06d4
- name: gopkg.in/gomail.v2
version: 81ebce5c23dfd25c6c67194b37d3dd3f338c98b1
- name: gopkg.in/ini.v1
version: cf53f9204df4fbdd7ec4164b57fa6184ba168292
- name: gopkg.in/ldap.v2
version: d0a5ced67b4dc310b9158d63a2c6f9c5ec13f105
- name: gopkg.in/macaron.v1
version: 7564489a79f3f96b7ac8034652b35eeebb468eb4
- name: gopkg.in/redis.v2
version: e6179049628164864e6e84e973cfb56335748dea
devImports: []

View File

@@ -1,59 +0,0 @@
package: github.com/gogits/gogs
import:
- package: github.com/Unknwon/cae
subpackages:
- zip
- package: github.com/Unknwon/com
- package: github.com/Unknwon/i18n
- package: github.com/Unknwon/paginater
- package: github.com/urfave/cli
- package: github.com/go-macaron/binding
- package: github.com/go-macaron/cache
subpackages:
- memcache
- redis
- package: github.com/go-macaron/captcha
- package: github.com/go-macaron/csrf
- package: github.com/go-macaron/gzip
- package: github.com/go-macaron/i18n
- package: github.com/go-macaron/session
subpackages:
- redis
- package: github.com/go-macaron/toolbox
- package: github.com/go-sql-driver/mysql
- package: github.com/go-xorm/core
- package: github.com/go-xorm/xorm
- package: github.com/gogits/chardet
- package: github.com/gogits/cron
- package: github.com/gogits/git-module
- package: github.com/gogits/go-gogs-client
- package: github.com/issue9/identicon
- package: github.com/kardianos/minwinsvc
- package: github.com/lib/pq
- package: github.com/mattn/go-sqlite3
- package: github.com/mcuadros/go-version
- package: github.com/microcosm-cc/bluemonday
- package: github.com/msteinert/pam
- package: github.com/nfnt/resize
- package: github.com/russross/blackfriday
- package: github.com/satori/go.uuid
- package: github.com/sergi/go-diff
subpackages:
- diffmatchpatch
- package: github.com/strk/go-libravatar
- package: golang.org/x/crypto
subpackages:
- ssh
- package: golang.org/x/net
subpackages:
- html
- html/charset
- package: golang.org/x/text
subpackages:
- transform
- language
- package: gopkg.in/editorconfig/editorconfig-core-go.v1
- package: gopkg.in/gomail.v2
- package: gopkg.in/ini.v1
- package: gopkg.in/ldap.v2
- package: gopkg.in/macaron.v1

View File

@@ -1,34 +1,33 @@
// +build go1.4
// Copyright 2016 The Gitea Authors. All rights reserved.
// Copyright 2014 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.
// Gogs (Go Git Service) is a painless self-hosted Git Service.
package main
// Gitea (git with a cup of tea) is a painless self-hosted Git Service.
package main // import "code.gitea.io/gitea"
import (
"os"
"runtime"
"code.gitea.io/gitea/cmd"
"code.gitea.io/gitea/modules/setting"
"github.com/urfave/cli"
"github.com/gogits/gogs/cmd"
"github.com/gogits/gogs/modules/setting"
)
const APP_VER = "0.9.99.0915"
// Version holds the current Gitea version
const Version = "0.9.99.0915"
func init() {
runtime.GOMAXPROCS(runtime.NumCPU())
setting.AppVer = APP_VER
setting.AppVer = Version
}
func main() {
app := cli.NewApp()
app.Name = "Gogs"
app.Usage = "Go Git Service: a painless self-hosted Git service"
app.Version = APP_VER
app.Name = "Gitea"
app.Usage = "A painless self-hosted Git service"
app.Version = Version
app.Commands = []cli.Command{
cmd.CmdWeb,
cmd.CmdServ,

View File

@@ -7,28 +7,34 @@ package models
import (
"fmt"
"github.com/gogits/gogs/modules/log"
"code.gitea.io/gitea/modules/log"
)
// AccessMode specifies the users access mode
type AccessMode int
const (
ACCESS_MODE_NONE AccessMode = iota // 0
ACCESS_MODE_READ // 1
ACCESS_MODE_WRITE // 2
ACCESS_MODE_ADMIN // 3
ACCESS_MODE_OWNER // 4
// AccessModeNone no access
AccessModeNone AccessMode = iota // 0
// AccessModeRead read access
AccessModeRead // 1
// AccessModeWrite write access
AccessModeWrite // 2
// AccessModeAdmin admin access
AccessModeAdmin // 3
// AccessModeOwner owner access
AccessModeOwner // 4
)
func (mode AccessMode) String() string {
switch mode {
case ACCESS_MODE_READ:
case AccessModeRead:
return "read"
case ACCESS_MODE_WRITE:
case AccessModeWrite:
return "write"
case ACCESS_MODE_ADMIN:
case AccessModeAdmin:
return "admin"
case ACCESS_MODE_OWNER:
case AccessModeOwner:
return "owner"
default:
return "none"
@@ -39,11 +45,11 @@ func (mode AccessMode) String() string {
func ParseAccessMode(permission string) AccessMode {
switch permission {
case "write":
return ACCESS_MODE_WRITE
return AccessModeWrite
case "admin":
return ACCESS_MODE_ADMIN
return AccessModeAdmin
default:
return ACCESS_MODE_READ
return AccessModeRead
}
}
@@ -57,21 +63,21 @@ type Access struct {
Mode AccessMode
}
func accessLevel(e Engine, u *User, repo *Repository) (AccessMode, error) {
mode := ACCESS_MODE_NONE
func accessLevel(e Engine, user *User, repo *Repository) (AccessMode, error) {
mode := AccessModeNone
if !repo.IsPrivate {
mode = ACCESS_MODE_READ
mode = AccessModeRead
}
if u == nil {
if user == nil {
return mode, nil
}
if u.ID == repo.OwnerID {
return ACCESS_MODE_OWNER, nil
if user.ID == repo.OwnerID {
return AccessModeOwner, nil
}
a := &Access{UserID: u.ID, RepoID: repo.ID}
a := &Access{UserID: user.ID, RepoID: repo.ID}
if has, err := e.Get(a); !has || err != nil {
return mode, err
}
@@ -80,24 +86,24 @@ func accessLevel(e Engine, u *User, repo *Repository) (AccessMode, error) {
// AccessLevel returns the Access a user has to a repository. Will return NoneAccess if the
// user does not have access. User can be nil!
func AccessLevel(u *User, repo *Repository) (AccessMode, error) {
return accessLevel(x, u, repo)
func AccessLevel(user *User, repo *Repository) (AccessMode, error) {
return accessLevel(x, user, repo)
}
func hasAccess(e Engine, u *User, repo *Repository, testMode AccessMode) (bool, error) {
mode, err := accessLevel(e, u, repo)
func hasAccess(e Engine, user *User, repo *Repository, testMode AccessMode) (bool, error) {
mode, err := accessLevel(e, user, repo)
return testMode <= mode, err
}
// HasAccess returns true if someone has the request access level. User can be nil!
func HasAccess(u *User, repo *Repository, testMode AccessMode) (bool, error) {
return hasAccess(x, u, repo, testMode)
func HasAccess(user *User, repo *Repository, testMode AccessMode) (bool, error) {
return hasAccess(x, user, repo, testMode)
}
// GetRepositoryAccesses finds all repositories with their access mode where a user has access but does not own.
func (u *User) GetRepositoryAccesses() (map[*Repository]AccessMode, error) {
func (user *User) GetRepositoryAccesses() (map[*Repository]AccessMode, error) {
accesses := make([]*Access, 0, 10)
if err := x.Find(&accesses, &Access{UserID: u.ID}); err != nil {
if err := x.Find(&accesses, &Access{UserID: user.ID}); err != nil {
return nil, err
}
@@ -113,7 +119,7 @@ func (u *User) GetRepositoryAccesses() (map[*Repository]AccessMode, error) {
}
if err = repo.GetOwner(); err != nil {
return nil, err
} else if repo.OwnerID == u.ID {
} else if repo.OwnerID == user.ID {
continue
}
repos[repo] = access.Mode
@@ -124,18 +130,22 @@ func (u *User) GetRepositoryAccesses() (map[*Repository]AccessMode, error) {
// GetAccessibleRepositories finds repositories which the user has access but does not own.
// If limit is smaller than 1 means returns all found results.
func (user *User) GetAccessibleRepositories(limit int) (repos []*Repository, _ error) {
sess := x.Where("owner_id !=? ", user.ID).Desc("updated_unix")
sess := x.
Where("owner_id !=? ", user.ID).
Desc("updated_unix")
if limit > 0 {
sess.Limit(limit)
repos = make([]*Repository, 0, limit)
} else {
repos = make([]*Repository, 0, 10)
}
return repos, sess.Join("INNER", "access", "access.user_id = ? AND access.repo_id = repository.id", user.ID).Find(&repos)
return repos, sess.
Join("INNER", "access", "access.user_id = ? AND access.repo_id = repository.id", user.ID).
Find(&repos)
}
func maxAccessMode(modes ...AccessMode) AccessMode {
max := ACCESS_MODE_NONE
max := AccessModeNone
for _, mode := range modes {
if mode > max {
max = mode
@@ -146,9 +156,9 @@ func maxAccessMode(modes ...AccessMode) AccessMode {
// FIXME: do corss-comparison so reduce deletions and additions to the minimum?
func (repo *Repository) refreshAccesses(e Engine, accessMap map[int64]AccessMode) (err error) {
minMode := ACCESS_MODE_READ
minMode := AccessModeRead
if !repo.IsPrivate {
minMode = ACCESS_MODE_WRITE
minMode = AccessModeWrite
}
newAccesses := make([]Access, 0, len(accessMap))
@@ -212,7 +222,7 @@ func (repo *Repository) recalculateTeamAccesses(e Engine, ignTeamID int64) (err
// Owner team gets owner access, and skip for teams that do not
// have relations with repository.
if t.IsOwnerTeam() {
t.Authorize = ACCESS_MODE_OWNER
t.Authorize = AccessModeOwner
} else if !t.hasRepository(e, repo.ID) {
continue
}
@@ -241,6 +251,6 @@ func (repo *Repository) recalculateAccesses(e Engine) error {
}
// RecalculateAccesses recalculates all accesses for repository.
func (r *Repository) RecalculateAccesses() error {
return r.recalculateAccesses(x)
func (repo *Repository) RecalculateAccesses() error {
return repo.recalculateAccesses(x)
}

View File

@@ -16,41 +16,44 @@ import (
"github.com/Unknwon/com"
"github.com/go-xorm/xorm"
"github.com/gogits/git-module"
api "github.com/gogits/go-gogs-client"
"code.gitea.io/git"
api "code.gitea.io/sdk/gitea"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
)
// ActionType represents the type of an action.
type ActionType int
// Possible action types.
const (
ACTION_CREATE_REPO ActionType = iota + 1 // 1
ACTION_RENAME_REPO // 2
ACTION_STAR_REPO // 3
ACTION_WATCH_REPO // 4
ACTION_COMMIT_REPO // 5
ACTION_CREATE_ISSUE // 6
ACTION_CREATE_PULL_REQUEST // 7
ACTION_TRANSFER_REPO // 8
ACTION_PUSH_TAG // 9
ACTION_COMMENT_ISSUE // 10
ACTION_MERGE_PULL_REQUEST // 11
ACTION_CLOSE_ISSUE // 12
ACTION_REOPEN_ISSUE // 13
ACTION_CLOSE_PULL_REQUEST // 14
ACTION_REOPEN_PULL_REQUEST // 15
ActionCreateRepo ActionType = iota + 1 // 1
ActionRenameRepo // 2
ActionStarRepo // 3
ActionWatchRepo // 4
ActionCommitRepo // 5
ActionCreateIssue // 6
ActionCreatePullRequest // 7
ActionTransferRepo // 8
ActionPushTag // 9
ActionCommentIssue // 10
ActionMergePullRequest // 11
ActionCloseIssue // 12
ActionReopenIssue // 13
ActionClosePullRequest // 14
ActionReopenPullRequest // 15
)
var (
// Same as Github. See https://help.github.com/articles/closing-issues-via-commit-messages
IssueCloseKeywords = []string{"close", "closes", "closed", "fix", "fixes", "fixed", "resolve", "resolves", "resolved"}
IssueReopenKeywords = []string{"reopen", "reopens", "reopened"}
// Same as Github. See
// https://help.github.com/articles/closing-issues-via-commit-messages
issueCloseKeywords = []string{"close", "closes", "closed", "fix", "fixes", "fixed", "resolve", "resolves", "resolved"}
issueReopenKeywords = []string{"reopen", "reopens", "reopened"}
IssueCloseKeywordsPat, IssueReopenKeywordsPat *regexp.Regexp
IssueReferenceKeywordsPat *regexp.Regexp
issueCloseKeywordsPat, issueReopenKeywordsPat *regexp.Regexp
issueReferenceKeywordsPat *regexp.Regexp
)
func assembleKeywordsPattern(words []string) string {
@@ -58,13 +61,14 @@ func assembleKeywordsPattern(words []string) string {
}
func init() {
IssueCloseKeywordsPat = regexp.MustCompile(assembleKeywordsPattern(IssueCloseKeywords))
IssueReopenKeywordsPat = regexp.MustCompile(assembleKeywordsPattern(IssueReopenKeywords))
IssueReferenceKeywordsPat = regexp.MustCompile(`(?i)(?:)(^| )\S+`)
issueCloseKeywordsPat = regexp.MustCompile(assembleKeywordsPattern(issueCloseKeywords))
issueReopenKeywordsPat = regexp.MustCompile(assembleKeywordsPattern(issueReopenKeywords))
issueReferenceKeywordsPat = regexp.MustCompile(`(?i)(?:)(^| )\S+`)
}
// Action represents user operation type and other information to repository.,
// it implemented interface base.Actioner so that can be used in template render.
// Action represents user operation type and other information to
// repository. It implemented interface base.Actioner so that can be
// used in template render.
type Action struct {
ID int64 `xorm:"pk autoincr"`
UserID int64 // Receiver user id.
@@ -82,10 +86,13 @@ type Action struct {
CreatedUnix int64
}
// BeforeInsert will be invoked by XORM before inserting a record
// representing this object.
func (a *Action) BeforeInsert() {
a.CreatedUnix = time.Now().Unix()
}
// AfterSet updates the webhook object upon setting a column.
func (a *Action) AfterSet(colName string, _ xorm.Cell) {
switch colName {
case "created_unix":
@@ -93,65 +100,87 @@ func (a *Action) AfterSet(colName string, _ xorm.Cell) {
}
}
// GetOpType gets the ActionType of this action.
// TODO: change return type to ActionType ?
func (a *Action) GetOpType() int {
return int(a.OpType)
}
// GetActUserName gets the action's user name.
func (a *Action) GetActUserName() string {
return a.ActUserName
}
// ShortActUserName gets the action's user name trimmed to max 20
// chars.
func (a *Action) ShortActUserName() string {
return base.EllipsisString(a.ActUserName, 20)
}
// GetRepoUserName returns the name of the action repository owner.
func (a *Action) GetRepoUserName() string {
return a.RepoUserName
}
// ShortRepoUserName returns the name of the action repository owner
// trimmed to max 20 chars.
func (a *Action) ShortRepoUserName() string {
return base.EllipsisString(a.RepoUserName, 20)
}
// GetRepoName returns the name of the action repository.
func (a *Action) GetRepoName() string {
return a.RepoName
}
// ShortRepoName returns the name of the action repository
// trimmed to max 33 chars.
func (a *Action) ShortRepoName() string {
return base.EllipsisString(a.RepoName, 33)
}
// GetRepoPath returns the virtual path to the action repository.
func (a *Action) GetRepoPath() string {
return path.Join(a.RepoUserName, a.RepoName)
}
// ShortRepoPath returns the virtual path to the action repository
// trimed to max 20 + 1 + 33 chars.
func (a *Action) ShortRepoPath() string {
return path.Join(a.ShortRepoUserName(), a.ShortRepoName())
}
// GetRepoLink returns relative link to action repository.
func (a *Action) GetRepoLink() string {
if len(setting.AppSubUrl) > 0 {
return path.Join(setting.AppSubUrl, a.GetRepoPath())
if len(setting.AppSubURL) > 0 {
return path.Join(setting.AppSubURL, a.GetRepoPath())
}
return "/" + a.GetRepoPath()
}
// GetBranch returns the action's repository branch.
func (a *Action) GetBranch() string {
return a.RefName
}
// GetContent returns the action's content.
func (a *Action) GetContent() string {
return a.Content
}
// GetCreate returns the action creation time.
func (a *Action) GetCreate() time.Time {
return a.Created
}
// GetIssueInfos returns a list of issues associated with
// the action.
func (a *Action) GetIssueInfos() []string {
return strings.SplitN(a.Content, "|", 2)
}
// GetIssueTitle returns the title of first issue associated
// with the action.
func (a *Action) GetIssueTitle() string {
index := com.StrTo(a.GetIssueInfos()[0]).MustInt64()
issue, err := GetIssueByIndex(a.RepoID, index)
@@ -162,6 +191,8 @@ func (a *Action) GetIssueTitle() string {
return issue.Title
}
// GetIssueContent returns the content of first issue associated with
// this action.
func (a *Action) GetIssueContent() string {
index := com.StrTo(a.GetIssueInfos()[0]).MustInt64()
issue, err := GetIssueByIndex(a.RepoID, index)
@@ -176,7 +207,7 @@ func newRepoAction(e Engine, u *User, repo *Repository) (err error) {
if err = notifyWatchers(e, &Action{
ActUserID: u.ID,
ActUserName: u.Name,
OpType: ACTION_CREATE_REPO,
OpType: ActionCreateRepo,
RepoID: repo.ID,
RepoUserName: repo.Owner.Name,
RepoName: repo.Name,
@@ -198,7 +229,7 @@ func renameRepoAction(e Engine, actUser *User, oldRepoName string, repo *Reposit
if err = notifyWatchers(e, &Action{
ActUserID: actUser.ID,
ActUserName: actUser.Name,
OpType: ACTION_RENAME_REPO,
OpType: ActionRenameRepo,
RepoID: repo.ID,
RepoUserName: repo.Owner.Name,
RepoName: repo.Name,
@@ -221,6 +252,7 @@ func issueIndexTrimRight(c rune) bool {
return !unicode.IsDigit(c)
}
// PushCommit represents a commit in a push operation.
type PushCommit struct {
Sha1 string
Message string
@@ -231,6 +263,7 @@ type PushCommit struct {
Timestamp time.Time
}
// PushCommits represents list of commits in a push operation.
type PushCommits struct {
Len int
Commits []*PushCommit
@@ -239,13 +272,16 @@ type PushCommits struct {
avatars map[string]string
}
// NewPushCommits creates a new PushCommits object.
func NewPushCommits() *PushCommits {
return &PushCommits{
avatars: make(map[string]string),
}
}
func (pc *PushCommits) ToApiPayloadCommits(repoLink string) []*api.PayloadCommit {
// ToAPIPayloadCommits converts a PushCommits object to
// api.PayloadCommit format.
func (pc *PushCommits) ToAPIPayloadCommits(repoLink string) []*api.PayloadCommit {
commits := make([]*api.PayloadCommit, len(pc.Commits))
for i, commit := range pc.Commits {
authorUsername := ""
@@ -281,21 +317,21 @@ func (pc *PushCommits) ToApiPayloadCommits(repoLink string) []*api.PayloadCommit
// AvatarLink tries to match user in database with e-mail
// in order to show custom avatar, and falls back to general avatar link.
func (push *PushCommits) AvatarLink(email string) string {
_, ok := push.avatars[email]
func (pc *PushCommits) AvatarLink(email string) string {
_, ok := pc.avatars[email]
if !ok {
u, err := GetUserByEmail(email)
if err != nil {
push.avatars[email] = base.AvatarLink(email)
pc.avatars[email] = base.AvatarLink(email)
if !IsErrUserNotExist(err) {
log.Error(4, "GetUserByEmail: %v", err)
}
} else {
push.avatars[email] = u.RelAvatarLink()
pc.avatars[email] = u.RelAvatarLink()
}
}
return push.avatars[email]
return pc.avatars[email]
}
// UpdateIssuesCommit checks if issues are manipulated by commit message.
@@ -305,7 +341,7 @@ func UpdateIssuesCommit(doer *User, repo *Repository, commits []*PushCommit) err
c := commits[i]
refMarked := make(map[int64]bool)
for _, ref := range IssueReferenceKeywordsPat.FindAllString(c.Message, -1) {
for _, ref := range issueReferenceKeywordsPat.FindAllString(c.Message, -1) {
ref = ref[strings.IndexByte(ref, byte(' '))+1:]
ref = strings.TrimRightFunc(ref, issueIndexTrimRight)
@@ -343,7 +379,7 @@ func UpdateIssuesCommit(doer *User, repo *Repository, commits []*PushCommit) err
refMarked = make(map[int64]bool)
// FIXME: can merge this one and next one to a common function.
for _, ref := range IssueCloseKeywordsPat.FindAllString(c.Message, -1) {
for _, ref := range issueCloseKeywordsPat.FindAllString(c.Message, -1) {
ref = ref[strings.IndexByte(ref, byte(' '))+1:]
ref = strings.TrimRightFunc(ref, issueIndexTrimRight)
@@ -383,7 +419,7 @@ func UpdateIssuesCommit(doer *User, repo *Repository, commits []*PushCommit) err
}
// It is conflict to have close and reopen at same time, so refsMarkd doesn't need to reinit here.
for _, ref := range IssueReopenKeywordsPat.FindAllString(c.Message, -1) {
for _, ref := range issueReopenKeywordsPat.FindAllString(c.Message, -1) {
ref = ref[strings.IndexByte(ref, byte(' '))+1:]
ref = strings.TrimRightFunc(ref, issueIndexTrimRight)
@@ -425,6 +461,7 @@ func UpdateIssuesCommit(doer *User, repo *Repository, commits []*PushCommit) err
return nil
}
// CommitRepoActionOptions represent options of a new commit action.
type CommitRepoActionOptions struct {
PusherName string
RepoOwnerID int64
@@ -435,7 +472,8 @@ type CommitRepoActionOptions struct {
Commits *PushCommits
}
// CommitRepoAction adds new commit actio to the repository, and prepare corresponding webhooks.
// CommitRepoAction adds new commit action to the repository, and prepare
// corresponding webhooks.
func CommitRepoAction(opts CommitRepoActionOptions) error {
pusher, err := GetUserByName(opts.PusherName)
if err != nil {
@@ -454,10 +492,10 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
}
isNewBranch := false
opType := ACTION_COMMIT_REPO
opType := ActionCommitRepo
// Check it's tag push or branch.
if strings.HasPrefix(opts.RefFullName, git.TAG_PREFIX) {
opType = ACTION_PUSH_TAG
opType = ActionPushTag
opts.Commits = &PushCommits{}
} else {
// if not the first commit, set the compare URL.
@@ -502,14 +540,16 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
apiPusher := pusher.APIFormat()
apiRepo := repo.APIFormat(nil)
var shaSum string
switch opType {
case ACTION_COMMIT_REPO: // Push
if err = PrepareWebhooks(repo, HOOK_EVENT_PUSH, &api.PushPayload{
case ActionCommitRepo: // Push
if err = PrepareWebhooks(repo, HookEventPush, &api.PushPayload{
Ref: opts.RefFullName,
Before: opts.OldCommitID,
After: opts.NewCommitID,
CompareURL: setting.AppUrl + opts.Commits.CompareURL,
Commits: opts.Commits.ToApiPayloadCommits(repo.HTMLURL()),
CompareURL: setting.AppURL + opts.Commits.CompareURL,
Commits: opts.Commits.ToAPIPayloadCommits(repo.HTMLURL()),
Repo: apiRepo,
Pusher: apiPusher,
Sender: apiPusher,
@@ -518,17 +558,35 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
}
if isNewBranch {
return PrepareWebhooks(repo, HOOK_EVENT_CREATE, &api.CreatePayload{
gitRepo, err := git.OpenRepository(repo.RepoPath())
if err != nil {
log.Error(4, "OpenRepository[%s]: %v", repo.RepoPath(), err)
}
shaSum, err = gitRepo.GetBranchCommitID(opts.RefFullName)
if err != nil {
log.Error(4, "GetBranchCommitID[%s]: %v", opts.RefFullName, err)
}
return PrepareWebhooks(repo, HookEventCreate, &api.CreatePayload{
Ref: refName,
Sha: shaSum,
RefType: "branch",
Repo: apiRepo,
Sender: apiPusher,
})
}
case ACTION_PUSH_TAG: // Create
return PrepareWebhooks(repo, HOOK_EVENT_CREATE, &api.CreatePayload{
case ActionPushTag: // Create
gitRepo, err := git.OpenRepository(repo.RepoPath())
if err != nil {
log.Error(4, "OpenRepository[%s]: %v", repo.RepoPath(), err)
}
shaSum, err = gitRepo.GetTagCommitID(opts.RefFullName)
if err != nil {
log.Error(4, "GetTagCommitID[%s]: %v", opts.RefFullName, err)
}
return PrepareWebhooks(repo, HookEventCreate, &api.CreatePayload{
Ref: refName,
Sha: shaSum,
RefType: "tag",
Repo: apiRepo,
Sender: apiPusher,
@@ -542,7 +600,7 @@ func transferRepoAction(e Engine, doer, oldOwner *User, repo *Repository) (err e
if err = notifyWatchers(e, &Action{
ActUserID: doer.ID,
ActUserName: doer.Name,
OpType: ACTION_TRANSFER_REPO,
OpType: ActionTransferRepo,
RepoID: repo.ID,
RepoUserName: repo.Owner.Name,
RepoName: repo.Name,
@@ -572,7 +630,7 @@ func mergePullRequestAction(e Engine, doer *User, repo *Repository, issue *Issue
return notifyWatchers(e, &Action{
ActUserID: doer.ID,
ActUserName: doer.Name,
OpType: ACTION_MERGE_PULL_REQUEST,
OpType: ActionMergePullRequest,
Content: fmt.Sprintf("%d|%s", issue.Index, issue.Title),
RepoID: repo.ID,
RepoUserName: repo.Owner.Name,
@@ -591,9 +649,14 @@ func MergePullRequestAction(actUser *User, repo *Repository, pull *Issue) error
// actorID can be -1 when isProfile is true or to skip the permission check.
func GetFeeds(ctxUser *User, actorID, offset int64, isProfile bool) ([]*Action, error) {
actions := make([]*Action, 0, 20)
sess := x.Limit(20, int(offset)).Desc("id").Where("user_id = ?", ctxUser.ID)
sess := x.
Limit(20, int(offset)).
Desc("id").
Where("user_id = ?", ctxUser.ID)
if isProfile {
sess.And("is_private = ?", false).And("act_user_id = ?", ctxUser.ID)
sess.
And("is_private = ?", false).
And("act_user_id = ?", ctxUser.ID)
} else if actorID != -1 && ctxUser.IsOrganization() {
// FIXME: only need to get IDs here, not all fields of repository.
repos, _, err := ctxUser.GetUserRepositories(actorID, 1, ctxUser.NumRepos)

View File

@@ -14,15 +14,16 @@ import (
"github.com/Unknwon/com"
"github.com/go-xorm/xorm"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
)
//NoticeType describes the notice type
type NoticeType int
const (
NOTICE_REPOSITORY NoticeType = iota + 1
//NoticeRepository type
NoticeRepository NoticeType = iota + 1
)
// Notice represents a system notice for admin.
@@ -34,10 +35,12 @@ type Notice struct {
CreatedUnix int64
}
// BeforeInsert is invoked from XORM before inserting an object of this type.
func (n *Notice) BeforeInsert() {
n.CreatedUnix = time.Now().Unix()
}
// AfterSet is invoked from XORM after setting the value of a field of this object.
func (n *Notice) AfterSet(colName string, _ xorm.Cell) {
switch colName {
case "created_unix":
@@ -65,9 +68,9 @@ func CreateNotice(tp NoticeType, desc string) error {
return err
}
// CreateRepositoryNotice creates new system notice with type NOTICE_REPOSITORY.
// CreateRepositoryNotice creates new system notice with type NoticeRepository.
func CreateRepositoryNotice(desc string) error {
return CreateNotice(NOTICE_REPOSITORY, desc)
return CreateNotice(NoticeRepository, desc)
}
// RemoveAllWithNotice removes all directories in given path and
@@ -103,7 +106,10 @@ func CountNotices() int64 {
// Notices returns number of notices in given page.
func Notices(page, pageSize int) ([]*Notice, error) {
notices := make([]*Notice, 0, pageSize)
return notices, x.Limit(pageSize, (page-1)*pageSize).Desc("id").Find(&notices)
return notices, x.
Limit(pageSize, (page-1)*pageSize).
Desc("id").
Find(&notices)
}
// DeleteNotice deletes a system notice by given ID.
@@ -127,6 +133,8 @@ func DeleteNoticesByIDs(ids []int64) error {
if len(ids) == 0 {
return nil
}
_, err := x.Where("id IN (" + strings.Join(base.Int64sToStrings(ids), ",") + ")").Delete(new(Notice))
_, err := x.
In("id", ids).
Delete(new(Notice))
return err
}

View File

@@ -8,10 +8,12 @@ import (
"fmt"
)
// ErrNameReserved represents a "reserved name" error.
type ErrNameReserved struct {
Name string
}
// IsErrNameReserved checks if an error is a ErrNameReserved.
func IsErrNameReserved(err error) bool {
_, ok := err.(ErrNameReserved)
return ok
@@ -21,10 +23,13 @@ func (err ErrNameReserved) Error() string {
return fmt.Sprintf("name is reserved [name: %s]", err.Name)
}
// ErrNamePatternNotAllowed represents a "pattern not allowed" error.
type ErrNamePatternNotAllowed struct {
Pattern string
}
// IsErrNamePatternNotAllowed checks if an error is an
// ErrNamePatternNotAllowed.
func IsErrNamePatternNotAllowed(err error) bool {
_, ok := err.(ErrNamePatternNotAllowed)
return ok
@@ -41,10 +46,12 @@ func (err ErrNamePatternNotAllowed) Error() string {
// |______//____ >\___ >__|
// \/ \/
// ErrUserAlreadyExist represents a "user already exists" error.
type ErrUserAlreadyExist struct {
Name string
}
// IsErrUserAlreadyExist checks if an error is a ErrUserAlreadyExists.
func IsErrUserAlreadyExist(err error) bool {
_, ok := err.(ErrUserAlreadyExist)
return ok
@@ -54,24 +61,29 @@ func (err ErrUserAlreadyExist) Error() string {
return fmt.Sprintf("user already exists [name: %s]", err.Name)
}
// ErrUserNotExist represents a "UserNotExist" kind of error.
type ErrUserNotExist struct {
UID int64
Name string
UID int64
Name string
KeyID int64
}
// IsErrUserNotExist checks if an error is a ErrUserNotExist.
func IsErrUserNotExist(err error) bool {
_, ok := err.(ErrUserNotExist)
return ok
}
func (err ErrUserNotExist) Error() string {
return fmt.Sprintf("user does not exist [uid: %d, name: %s]", err.UID, err.Name)
return fmt.Sprintf("user does not exist [uid: %d, name: %s, keyid: %d]", err.UID, err.Name, err.KeyID)
}
// ErrEmailAlreadyUsed represents a "EmailAlreadyUsed" kind of error.
type ErrEmailAlreadyUsed struct {
Email string
}
// IsErrEmailAlreadyUsed checks if an error is a ErrEmailAlreadyUsed.
func IsErrEmailAlreadyUsed(err error) bool {
_, ok := err.(ErrEmailAlreadyUsed)
return ok
@@ -81,10 +93,12 @@ func (err ErrEmailAlreadyUsed) Error() string {
return fmt.Sprintf("e-mail has been used [email: %s]", err.Email)
}
// ErrUserOwnRepos represents a "UserOwnRepos" kind of error.
type ErrUserOwnRepos struct {
UID int64
}
// IsErrUserOwnRepos checks if an error is a ErrUserOwnRepos.
func IsErrUserOwnRepos(err error) bool {
_, ok := err.(ErrUserOwnRepos)
return ok
@@ -94,10 +108,12 @@ func (err ErrUserOwnRepos) Error() string {
return fmt.Sprintf("user still has ownership of repositories [uid: %d]", err.UID)
}
// ErrUserHasOrgs represents a "UserHasOrgs" kind of error.
type ErrUserHasOrgs struct {
UID int64
}
// IsErrUserHasOrgs checks if an error is a ErrUserHasOrgs.
func IsErrUserHasOrgs(err error) bool {
_, ok := err.(ErrUserHasOrgs)
return ok
@@ -107,10 +123,12 @@ func (err ErrUserHasOrgs) Error() string {
return fmt.Sprintf("user still has membership of organizations [uid: %d]", err.UID)
}
// ErrReachLimitOfRepo represents a "ReachLimitOfRepo" kind of error.
type ErrReachLimitOfRepo struct {
Limit int
}
// IsErrReachLimitOfRepo checks if an error is a ErrReachLimitOfRepo.
func IsErrReachLimitOfRepo(err error) bool {
_, ok := err.(ErrReachLimitOfRepo)
return ok
@@ -127,10 +145,12 @@ func (err ErrReachLimitOfRepo) Error() string {
// \__/\ / |__|__|_ \__|
// \/ \/
// ErrWikiAlreadyExist represents a "WikiAlreadyExist" kind of error.
type ErrWikiAlreadyExist struct {
Title string
}
// IsErrWikiAlreadyExist checks if an error is a ErrWikiAlreadyExist.
func IsErrWikiAlreadyExist(err error) bool {
_, ok := err.(ErrWikiAlreadyExist)
return ok
@@ -147,10 +167,12 @@ func (err ErrWikiAlreadyExist) Error() string {
// |____| |____/|___ /____/__|\___ > |____|__ \___ > ____|
// \/ \/ \/ \/\/
// ErrKeyUnableVerify represents a "KeyUnableVerify" kind of error.
type ErrKeyUnableVerify struct {
Result string
}
// IsErrKeyUnableVerify checks if an error is a ErrKeyUnableVerify.
func IsErrKeyUnableVerify(err error) bool {
_, ok := err.(ErrKeyUnableVerify)
return ok
@@ -160,10 +182,12 @@ func (err ErrKeyUnableVerify) Error() string {
return fmt.Sprintf("Unable to verify key content [result: %s]", err.Result)
}
// ErrKeyNotExist represents a "KeyNotExist" kind of error.
type ErrKeyNotExist struct {
ID int64
}
// IsErrKeyNotExist checks if an error is a ErrKeyNotExist.
func IsErrKeyNotExist(err error) bool {
_, ok := err.(ErrKeyNotExist)
return ok
@@ -173,11 +197,13 @@ func (err ErrKeyNotExist) Error() string {
return fmt.Sprintf("public key does not exist [id: %d]", err.ID)
}
// ErrKeyAlreadyExist represents a "KeyAlreadyExist" kind of error.
type ErrKeyAlreadyExist struct {
OwnerID int64
Content string
}
// IsErrKeyAlreadyExist checks if an error is a ErrKeyAlreadyExist.
func IsErrKeyAlreadyExist(err error) bool {
_, ok := err.(ErrKeyAlreadyExist)
return ok
@@ -187,11 +213,13 @@ func (err ErrKeyAlreadyExist) Error() string {
return fmt.Sprintf("public key already exists [owner_id: %d, content: %s]", err.OwnerID, err.Content)
}
// ErrKeyNameAlreadyUsed represents a "KeyNameAlreadyUsed" kind of error.
type ErrKeyNameAlreadyUsed struct {
OwnerID int64
Name string
}
// IsErrKeyNameAlreadyUsed checks if an error is a ErrKeyNameAlreadyUsed.
func IsErrKeyNameAlreadyUsed(err error) bool {
_, ok := err.(ErrKeyNameAlreadyUsed)
return ok
@@ -201,12 +229,14 @@ func (err ErrKeyNameAlreadyUsed) Error() string {
return fmt.Sprintf("public key already exists [owner_id: %d, name: %s]", err.OwnerID, err.Name)
}
// ErrKeyAccessDenied represents a "KeyAccessDenied" kind of error.
type ErrKeyAccessDenied struct {
UserID int64
KeyID int64
Note string
}
// IsErrKeyAccessDenied checks if an error is a ErrKeyAccessDenied.
func IsErrKeyAccessDenied(err error) bool {
_, ok := err.(ErrKeyAccessDenied)
return ok
@@ -217,12 +247,14 @@ func (err ErrKeyAccessDenied) Error() string {
err.UserID, err.KeyID, err.Note)
}
// ErrDeployKeyNotExist represents a "DeployKeyNotExist" kind of error.
type ErrDeployKeyNotExist struct {
ID int64
KeyID int64
RepoID int64
}
// IsErrDeployKeyNotExist checks if an error is a ErrDeployKeyNotExist.
func IsErrDeployKeyNotExist(err error) bool {
_, ok := err.(ErrDeployKeyNotExist)
return ok
@@ -232,11 +264,13 @@ func (err ErrDeployKeyNotExist) Error() string {
return fmt.Sprintf("Deploy key does not exist [id: %d, key_id: %d, repo_id: %d]", err.ID, err.KeyID, err.RepoID)
}
// ErrDeployKeyAlreadyExist represents a "DeployKeyAlreadyExist" kind of error.
type ErrDeployKeyAlreadyExist struct {
KeyID int64
RepoID int64
}
// IsErrDeployKeyAlreadyExist checks if an error is a ErrDeployKeyAlreadyExist.
func IsErrDeployKeyAlreadyExist(err error) bool {
_, ok := err.(ErrDeployKeyAlreadyExist)
return ok
@@ -246,11 +280,13 @@ func (err ErrDeployKeyAlreadyExist) Error() string {
return fmt.Sprintf("public key already exists [key_id: %d, repo_id: %d]", err.KeyID, err.RepoID)
}
// ErrDeployKeyNameAlreadyUsed represents a "DeployKeyNameAlreadyUsed" kind of error.
type ErrDeployKeyNameAlreadyUsed struct {
RepoID int64
Name string
}
// IsErrDeployKeyNameAlreadyUsed checks if an error is a ErrDeployKeyNameAlreadyUsed.
func IsErrDeployKeyNameAlreadyUsed(err error) bool {
_, ok := err.(ErrDeployKeyNameAlreadyUsed)
return ok
@@ -267,10 +303,12 @@ func (err ErrDeployKeyNameAlreadyUsed) Error() string {
// \____|__ /\___ >___ >___ >____ >____ > |____| \____/|__|_ \\___ >___| /
// \/ \/ \/ \/ \/ \/ \/ \/ \/
// ErrAccessTokenNotExist represents a "AccessTokenNotExist" kind of error.
type ErrAccessTokenNotExist struct {
SHA string
}
// IsErrAccessTokenNotExist checks if an error is a ErrAccessTokenNotExist.
func IsErrAccessTokenNotExist(err error) bool {
_, ok := err.(ErrAccessTokenNotExist)
return ok
@@ -280,9 +318,11 @@ func (err ErrAccessTokenNotExist) Error() string {
return fmt.Sprintf("access token does not exist [sha: %s]", err.SHA)
}
// ErrAccessTokenEmpty represents a "AccessTokenEmpty" kind of error.
type ErrAccessTokenEmpty struct {
}
// IsErrAccessTokenEmpty checks if an error is a ErrAccessTokenEmpty.
func IsErrAccessTokenEmpty(err error) bool {
_, ok := err.(ErrAccessTokenEmpty)
return ok
@@ -299,10 +339,12 @@ func (err ErrAccessTokenEmpty) Error() string {
// \_______ /__| \___ (____ /___| /__/_____ \(____ /__| |__|\____/|___| /
// \/ /_____/ \/ \/ \/ \/ \/
// ErrLastOrgOwner represents a "LastOrgOwner" kind of error.
type ErrLastOrgOwner struct {
UID int64
}
// IsErrLastOrgOwner checks if an error is a ErrLastOrgOwner.
func IsErrLastOrgOwner(err error) bool {
_, ok := err.(ErrLastOrgOwner)
return ok
@@ -319,12 +361,14 @@ func (err ErrLastOrgOwner) Error() string {
// |____|_ /\___ > __/ \____/____ >__||__| \____/|__| / ____|
// \/ \/|__| \/ \/
// ErrRepoNotExist represents a "RepoNotExist" kind of error.
type ErrRepoNotExist struct {
ID int64
UID int64
Name string
}
// IsErrRepoNotExist checks if an error is a ErrRepoNotExist.
func IsErrRepoNotExist(err error) bool {
_, ok := err.(ErrRepoNotExist)
return ok
@@ -334,11 +378,13 @@ func (err ErrRepoNotExist) Error() string {
return fmt.Sprintf("repository does not exist [id: %d, uid: %d, name: %s]", err.ID, err.UID, err.Name)
}
// ErrRepoAlreadyExist represents a "RepoAlreadyExist" kind of error.
type ErrRepoAlreadyExist struct {
Uname string
Name string
}
// IsErrRepoAlreadyExist checks if an error is a ErrRepoAlreadyExist.
func IsErrRepoAlreadyExist(err error) bool {
_, ok := err.(ErrRepoAlreadyExist)
return ok
@@ -348,12 +394,14 @@ func (err ErrRepoAlreadyExist) Error() string {
return fmt.Sprintf("repository already exists [uname: %s, name: %s]", err.Uname, err.Name)
}
// ErrInvalidCloneAddr represents a "InvalidCloneAddr" kind of error.
type ErrInvalidCloneAddr struct {
IsURLError bool
IsInvalidPath bool
IsPermissionDenied bool
}
// IsErrInvalidCloneAddr checks if an error is a ErrInvalidCloneAddr.
func IsErrInvalidCloneAddr(err error) bool {
_, ok := err.(ErrInvalidCloneAddr)
return ok
@@ -364,10 +412,12 @@ func (err ErrInvalidCloneAddr) Error() string {
err.IsURLError, err.IsInvalidPath, err.IsPermissionDenied)
}
// ErrUpdateTaskNotExist represents a "UpdateTaskNotExist" kind of error.
type ErrUpdateTaskNotExist struct {
UUID string
}
// IsErrUpdateTaskNotExist checks if an error is a ErrUpdateTaskNotExist.
func IsErrUpdateTaskNotExist(err error) bool {
_, ok := err.(ErrUpdateTaskNotExist)
return ok
@@ -377,10 +427,12 @@ func (err ErrUpdateTaskNotExist) Error() string {
return fmt.Sprintf("update task does not exist [uuid: %s]", err.UUID)
}
// ErrReleaseAlreadyExist represents a "ReleaseAlreadyExist" kind of error.
type ErrReleaseAlreadyExist struct {
TagName string
}
// IsErrReleaseAlreadyExist checks if an error is a ErrReleaseAlreadyExist.
func IsErrReleaseAlreadyExist(err error) bool {
_, ok := err.(ErrReleaseAlreadyExist)
return ok
@@ -390,11 +442,13 @@ func (err ErrReleaseAlreadyExist) Error() string {
return fmt.Sprintf("release tag already exist [tag_name: %s]", err.TagName)
}
// ErrReleaseNotExist represents a "ReleaseNotExist" kind of error.
type ErrReleaseNotExist struct {
ID int64
TagName string
}
// IsErrReleaseNotExist checks if an error is a ErrReleaseNotExist.
func IsErrReleaseNotExist(err error) bool {
_, ok := err.(ErrReleaseNotExist)
return ok
@@ -404,10 +458,12 @@ func (err ErrReleaseNotExist) Error() string {
return fmt.Sprintf("release tag does not exist [id: %d, tag_name: %s]", err.ID, err.TagName)
}
// ErrInvalidTagName represents a "InvalidTagName" kind of error.
type ErrInvalidTagName struct {
TagName string
}
// IsErrInvalidTagName checks if an error is a ErrInvalidTagName.
func IsErrInvalidTagName(err error) bool {
_, ok := err.(ErrInvalidTagName)
return ok
@@ -417,10 +473,12 @@ func (err ErrInvalidTagName) Error() string {
return fmt.Sprintf("release tag name is not valid [tag_name: %s]", err.TagName)
}
// ErrRepoFileAlreadyExist represents a "RepoFileAlreadyExist" kind of error.
type ErrRepoFileAlreadyExist struct {
FileName string
}
// IsErrRepoFileAlreadyExist checks if an error is a ErrRepoFileAlreadyExist.
func IsErrRepoFileAlreadyExist(err error) bool {
_, ok := err.(ErrRepoFileAlreadyExist)
return ok
@@ -437,10 +495,12 @@ func (err ErrRepoFileAlreadyExist) Error() string {
// |______ / |__| (____ /___| /\___ >___| /
// \/ \/ \/ \/ \/
// ErrBranchNotExist represents a "BranchNotExist" kind of error.
type ErrBranchNotExist struct {
Name string
}
// IsErrBranchNotExist checks if an error is a ErrBranchNotExist.
func IsErrBranchNotExist(err error) bool {
_, ok := err.(ErrBranchNotExist)
return ok
@@ -457,10 +517,12 @@ func (err ErrBranchNotExist) Error() string {
// \__/\ / \___ >___ /___| /\____/ \____/|__|_ \
// \/ \/ \/ \/ \/
// ErrWebhookNotExist represents a "WebhookNotExist" kind of error.
type ErrWebhookNotExist struct {
ID int64
}
// IsErrWebhookNotExist checks if an error is a ErrWebhookNotExist.
func IsErrWebhookNotExist(err error) bool {
_, ok := err.(ErrWebhookNotExist)
return ok
@@ -477,12 +539,14 @@ func (err ErrWebhookNotExist) Error() string {
// |___/____ >____ >____/ \___ >
// \/ \/ \/
// ErrIssueNotExist represents a "IssueNotExist" kind of error.
type ErrIssueNotExist struct {
ID int64
RepoID int64
Index int64
}
// IsErrIssueNotExist checks if an error is a ErrIssueNotExist.
func IsErrIssueNotExist(err error) bool {
_, ok := err.(ErrIssueNotExist)
return ok
@@ -499,6 +563,7 @@ func (err ErrIssueNotExist) Error() string {
// |____| |____/|____/____/____|_ /\___ >__ |____/ \___ >____ > |__|
// \/ \/ |__| \/ \/
// ErrPullRequestNotExist represents a "PullRequestNotExist" kind of error.
type ErrPullRequestNotExist struct {
ID int64
IssueID int64
@@ -508,6 +573,7 @@ type ErrPullRequestNotExist struct {
BaseBranch string
}
// IsErrPullRequestNotExist checks if an error is a ErrPullRequestNotExist.
func IsErrPullRequestNotExist(err error) bool {
_, ok := err.(ErrPullRequestNotExist)
return ok
@@ -525,11 +591,13 @@ func (err ErrPullRequestNotExist) Error() string {
// \______ /\____/|__|_| /__|_| /\___ >___| /__|
// \/ \/ \/ \/ \/
// ErrCommentNotExist represents a "CommentNotExist" kind of error.
type ErrCommentNotExist struct {
ID int64
IssueID int64
}
// IsErrCommentNotExist checks if an error is a ErrCommentNotExist.
func IsErrCommentNotExist(err error) bool {
_, ok := err.(ErrCommentNotExist)
return ok
@@ -546,11 +614,13 @@ func (err ErrCommentNotExist) Error() string {
// |_______ (____ /___ /\___ >____/
// \/ \/ \/ \/
// ErrLabelNotExist represents a "LabelNotExist" kind of error.
type ErrLabelNotExist struct {
LabelID int64
RepoID int64
}
// IsErrLabelNotExist checks if an error is a ErrLabelNotExist.
func IsErrLabelNotExist(err error) bool {
_, ok := err.(ErrLabelNotExist)
return ok
@@ -567,11 +637,13 @@ func (err ErrLabelNotExist) Error() string {
// \____|__ /__|____/\___ >____ > |__| \____/|___| /\___ >
// \/ \/ \/ \/ \/
// ErrMilestoneNotExist represents a "MilestoneNotExist" kind of error.
type ErrMilestoneNotExist struct {
ID int64
RepoID int64
}
// IsErrMilestoneNotExist checks if an error is a ErrMilestoneNotExist.
func IsErrMilestoneNotExist(err error) bool {
_, ok := err.(ErrMilestoneNotExist)
return ok
@@ -588,11 +660,13 @@ func (err ErrMilestoneNotExist) Error() string {
// \____|__ /__| |__| (____ /\___ >___| /__|_| /\___ >___| /__|
// \/ \/ \/ \/ \/ \/ \/
// ErrAttachmentNotExist represents a "AttachmentNotExist" kind of error.
type ErrAttachmentNotExist struct {
ID int64
UUID string
}
// IsErrAttachmentNotExist checks if an error is a ErrAttachmentNotExist.
func IsErrAttachmentNotExist(err error) bool {
_, ok := err.(ErrAttachmentNotExist)
return ok
@@ -609,10 +683,12 @@ func (err ErrAttachmentNotExist) Error() string {
// |_______ \____/\___ /|__|___| / /_______ /\____/|____/ |__| \___ >___ >
// \/ /_____/ \/ \/ \/ \/
// ErrLoginSourceNotExist represents a "LoginSourceNotExist" kind of error.
type ErrLoginSourceNotExist struct {
ID int64
}
// IsErrLoginSourceNotExist checks if an error is a ErrLoginSourceNotExist.
func IsErrLoginSourceNotExist(err error) bool {
_, ok := err.(ErrLoginSourceNotExist)
return ok
@@ -622,10 +698,12 @@ func (err ErrLoginSourceNotExist) Error() string {
return fmt.Sprintf("login source does not exist [id: %d]", err.ID)
}
// ErrLoginSourceAlreadyExist represents a "LoginSourceAlreadyExist" kind of error.
type ErrLoginSourceAlreadyExist struct {
Name string
}
// IsErrLoginSourceAlreadyExist checks if an error is a ErrLoginSourceAlreadyExist.
func IsErrLoginSourceAlreadyExist(err error) bool {
_, ok := err.(ErrLoginSourceAlreadyExist)
return ok
@@ -635,10 +713,12 @@ func (err ErrLoginSourceAlreadyExist) Error() string {
return fmt.Sprintf("login source already exists [name: %s]", err.Name)
}
// ErrLoginSourceInUse represents a "LoginSourceInUse" kind of error.
type ErrLoginSourceInUse struct {
ID int64
}
// IsErrLoginSourceInUse checks if an error is a ErrLoginSourceInUse.
func IsErrLoginSourceInUse(err error) bool {
_, ok := err.(ErrLoginSourceInUse)
return ok
@@ -655,11 +735,13 @@ func (err ErrLoginSourceInUse) Error() string {
// |____| \___ >____ /__|_| /
// \/ \/ \/
// ErrTeamAlreadyExist represents a "TeamAlreadyExist" kind of error.
type ErrTeamAlreadyExist struct {
OrgID int64
Name string
}
// IsErrTeamAlreadyExist checks if an error is a ErrTeamAlreadyExist.
func IsErrTeamAlreadyExist(err error) bool {
_, ok := err.(ErrTeamAlreadyExist)
return ok
@@ -677,11 +759,13 @@ func (err ErrTeamAlreadyExist) Error() string {
// |__| \/ \/
//
// ErrUploadNotExist represents a "UploadNotExist" kind of error.
type ErrUploadNotExist struct {
ID int64
UUID string
}
// IsErrUploadNotExist checks if an error is a ErrUploadNotExist.
func IsErrUploadNotExist(err error) bool {
_, ok := err.(ErrAttachmentNotExist)
return ok

View File

@@ -16,38 +16,41 @@ import (
"os/exec"
"strings"
"code.gitea.io/git"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/process"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/template/highlight"
"github.com/Unknwon/com"
"github.com/sergi/go-diff/diffmatchpatch"
"golang.org/x/net/html/charset"
"golang.org/x/text/transform"
"github.com/gogits/git-module"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/process"
"github.com/gogits/gogs/modules/setting"
"github.com/gogits/gogs/modules/template/highlight"
)
// DiffLineType represents the type of a DiffLine.
type DiffLineType uint8
// DiffLineType possible values.
const (
DIFF_LINE_PLAIN DiffLineType = iota + 1
DIFF_LINE_ADD
DIFF_LINE_DEL
DIFF_LINE_SECTION
DiffLinePlain DiffLineType = iota + 1
DiffLineAdd
DiffLineDel
DiffLineSection
)
// DiffFileType represents the type of a DiffFile.
type DiffFileType uint8
// DiffFileType possible values.
const (
DIFF_FILE_ADD DiffFileType = iota + 1
DIFF_FILE_CHANGE
DIFF_FILE_DEL
DIFF_FILE_RENAME
DiffFileAdd DiffFileType = iota + 1
DiffFileChange
DiffFileDel
DiffFileRename
)
// DiffLine represents a line difference in a DiffSection.
type DiffLine struct {
LeftIdx int
RightIdx int
@@ -55,10 +58,12 @@ type DiffLine struct {
Content string
}
// GetType returns the type of a DiffLine.
func (d *DiffLine) GetType() int {
return int(d.Type)
}
// DiffSection represents a section of a DiffFile.
type DiffSection struct {
Name string
Lines []*DiffLine
@@ -75,19 +80,19 @@ func diffToHTML(diffs []diffmatchpatch.Diff, lineType DiffLineType) template.HTM
// Reproduce signs which are cutted for inline diff before.
switch lineType {
case DIFF_LINE_ADD:
case DiffLineAdd:
buf.WriteByte('+')
case DIFF_LINE_DEL:
case DiffLineDel:
buf.WriteByte('-')
}
for i := range diffs {
switch {
case diffs[i].Type == diffmatchpatch.DiffInsert && lineType == DIFF_LINE_ADD:
case diffs[i].Type == diffmatchpatch.DiffInsert && lineType == DiffLineAdd:
buf.Write(addedCodePrefix)
buf.WriteString(html.EscapeString(diffs[i].Text))
buf.Write(codeTagSuffix)
case diffs[i].Type == diffmatchpatch.DiffDelete && lineType == DIFF_LINE_DEL:
case diffs[i].Type == diffmatchpatch.DiffDelete && lineType == DiffLineDel:
buf.Write(removedCodePrefix)
buf.WriteString(html.EscapeString(diffs[i].Text))
buf.Write(codeTagSuffix)
@@ -99,7 +104,7 @@ func diffToHTML(diffs []diffmatchpatch.Diff, lineType DiffLineType) template.HTM
return template.HTML(buf.Bytes())
}
// get an specific line by type (add or del) and file line number
// GetLine gets a specific line by type (add or del) and file line number
func (diffSection *DiffSection) GetLine(lineType DiffLineType, idx int) *DiffLine {
var (
difference = 0
@@ -111,9 +116,9 @@ func (diffSection *DiffSection) GetLine(lineType DiffLineType, idx int) *DiffLin
LOOP:
for _, diffLine := range diffSection.Lines {
switch diffLine.Type {
case DIFF_LINE_ADD:
case DiffLineAdd:
addCount++
case DIFF_LINE_DEL:
case DiffLineDel:
delCount++
default:
if matchDiffLine != nil {
@@ -125,11 +130,11 @@ LOOP:
}
switch lineType {
case DIFF_LINE_DEL:
case DiffLineDel:
if diffLine.RightIdx == 0 && diffLine.LeftIdx == idx-difference {
matchDiffLine = diffLine
}
case DIFF_LINE_ADD:
case DiffLineAdd:
if diffLine.LeftIdx == 0 && diffLine.RightIdx == idx+difference {
matchDiffLine = diffLine
}
@@ -148,7 +153,7 @@ func init() {
diffMatchPatch.DiffEditCost = 100
}
// computes inline diff for the given line
// GetComputedInlineDiffFor computes inline diff for the given line.
func (diffSection *DiffSection) GetComputedInlineDiffFor(diffLine *DiffLine) template.HTML {
if setting.Git.DisableDiffHighlight {
return template.HTML(html.EscapeString(diffLine.Content[1:]))
@@ -161,15 +166,15 @@ func (diffSection *DiffSection) GetComputedInlineDiffFor(diffLine *DiffLine) tem
// try to find equivalent diff line. ignore, otherwise
switch diffLine.Type {
case DIFF_LINE_ADD:
compareDiffLine = diffSection.GetLine(DIFF_LINE_DEL, diffLine.RightIdx)
case DiffLineAdd:
compareDiffLine = diffSection.GetLine(DiffLineDel, diffLine.RightIdx)
if compareDiffLine == nil {
return template.HTML(html.EscapeString(diffLine.Content))
}
diff1 = compareDiffLine.Content
diff2 = diffLine.Content
case DIFF_LINE_DEL:
compareDiffLine = diffSection.GetLine(DIFF_LINE_ADD, diffLine.LeftIdx)
case DiffLineDel:
compareDiffLine = diffSection.GetLine(DiffLineAdd, diffLine.LeftIdx)
if compareDiffLine == nil {
return template.HTML(html.EscapeString(diffLine.Content))
}
@@ -185,6 +190,7 @@ func (diffSection *DiffSection) GetComputedInlineDiffFor(diffLine *DiffLine) tem
return diffToHTML(diffRecord, diffLine.Type)
}
// DiffFile represents a file diff.
type DiffFile struct {
Name string
OldName string
@@ -200,26 +206,32 @@ type DiffFile struct {
IsIncomplete bool
}
// GetType returns type of diff file.
func (diffFile *DiffFile) GetType() int {
return int(diffFile.Type)
}
// GetHighlightClass returns highlight class for a filename.
func (diffFile *DiffFile) GetHighlightClass() string {
return highlight.FileNameToHighlightClass(diffFile.Name)
}
// Diff represents a difference between two git trees.
type Diff struct {
TotalAddition, TotalDeletion int
Files []*DiffFile
IsIncomplete bool
}
// NumFiles returns number of files changes in a diff.
func (diff *Diff) NumFiles() int {
return len(diff.Files)
}
const DIFF_HEAD = "diff --git "
const cmdDiffHead = "diff --git "
// ParsePatch builds a Diff object from a io.Reader and some
// parameters.
// TODO: move this function to gogits/git-module
func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*Diff, error) {
var (
@@ -266,7 +278,7 @@ func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*
switch {
case line[0] == ' ':
diffLine := &DiffLine{Type: DIFF_LINE_PLAIN, Content: line, LeftIdx: leftLine, RightIdx: rightLine}
diffLine := &DiffLine{Type: DiffLinePlain, Content: line, LeftIdx: leftLine, RightIdx: rightLine}
leftLine++
rightLine++
curSection.Lines = append(curSection.Lines, diffLine)
@@ -275,7 +287,7 @@ func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*
curSection = &DiffSection{}
curFile.Sections = append(curFile.Sections, curSection)
ss := strings.Split(line, "@@")
diffLine := &DiffLine{Type: DIFF_LINE_SECTION, Content: line}
diffLine := &DiffLine{Type: DiffLineSection, Content: line}
curSection.Lines = append(curSection.Lines, diffLine)
// Parse line number.
@@ -291,14 +303,14 @@ func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*
case line[0] == '+':
curFile.Addition++
diff.TotalAddition++
diffLine := &DiffLine{Type: DIFF_LINE_ADD, Content: line, RightIdx: rightLine}
diffLine := &DiffLine{Type: DiffLineAdd, Content: line, RightIdx: rightLine}
rightLine++
curSection.Lines = append(curSection.Lines, diffLine)
continue
case line[0] == '-':
curFile.Deletion++
diff.TotalDeletion++
diffLine := &DiffLine{Type: DIFF_LINE_DEL, Content: line, LeftIdx: leftLine}
diffLine := &DiffLine{Type: DiffLineDel, Content: line, LeftIdx: leftLine}
if leftLine > 0 {
leftLine++
}
@@ -309,19 +321,19 @@ func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*
}
// Get new file.
if strings.HasPrefix(line, DIFF_HEAD) {
if strings.HasPrefix(line, cmdDiffHead) {
middle := -1
// Note: In case file name is surrounded by double quotes (it happens only in git-shell).
// e.g. diff --git "a/xxx" "b/xxx"
hasQuote := line[len(DIFF_HEAD)] == '"'
hasQuote := line[len(cmdDiffHead)] == '"'
if hasQuote {
middle = strings.Index(line, ` "b/`)
} else {
middle = strings.Index(line, " b/")
}
beg := len(DIFF_HEAD)
beg := len(cmdDiffHead)
a := line[beg+2 : middle]
b := line[middle+3:]
if hasQuote {
@@ -332,7 +344,7 @@ func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*
curFile = &DiffFile{
Name: a,
Index: len(diff.Files) + 1,
Type: DIFF_FILE_CHANGE,
Type: DiffFileChange,
Sections: make([]*DiffSection, 0, 10),
}
diff.Files = append(diff.Files, curFile)
@@ -356,15 +368,15 @@ func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*
switch {
case strings.HasPrefix(line, "new file"):
curFile.Type = DIFF_FILE_ADD
curFile.Type = DiffFileAdd
curFile.IsCreated = true
case strings.HasPrefix(line, "deleted"):
curFile.Type = DIFF_FILE_DEL
curFile.Type = DiffFileDel
curFile.IsDeleted = true
case strings.HasPrefix(line, "index"):
curFile.Type = DIFF_FILE_CHANGE
curFile.Type = DiffFileChange
case strings.HasPrefix(line, "similarity index 100%"):
curFile.Type = DIFF_FILE_RENAME
curFile.Type = DiffFileRename
curFile.IsRenamed = true
curFile.OldName = curFile.Name
curFile.Name = b
@@ -407,6 +419,9 @@ func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*
return diff, nil
}
// GetDiffRange builds a Diff between two commits of a repository.
// passing the empty string as beforeCommitID returns a diff from the
// parent commit.
func GetDiffRange(repoPath, beforeCommitID, afterCommitID string, maxLines, maxLineCharacteres, maxFiles int) (*Diff, error) {
gitRepo, err := git.OpenRepository(repoPath)
if err != nil {
@@ -458,11 +473,13 @@ func GetDiffRange(repoPath, beforeCommitID, afterCommitID string, maxLines, maxL
return diff, nil
}
// RawDiffType type of a raw diff.
type RawDiffType string
// RawDiffType possible values.
const (
RAW_DIFF_NORMAL RawDiffType = "diff"
RAW_DIFF_PATCH RawDiffType = "patch"
RawDiffNormal RawDiffType = "diff"
RawDiffPatch RawDiffType = "patch"
)
// GetRawDiff dumps diff results of repository in given commit ID to io.Writer.
@@ -480,14 +497,14 @@ func GetRawDiff(repoPath, commitID string, diffType RawDiffType, writer io.Write
var cmd *exec.Cmd
switch diffType {
case RAW_DIFF_NORMAL:
case RawDiffNormal:
if commit.ParentCount() == 0 {
cmd = exec.Command("git", "show", commitID)
} else {
c, _ := commit.Parent(0)
cmd = exec.Command("git", "diff", "-M", c.ID.String(), commitID)
}
case RAW_DIFF_PATCH:
case RawDiffPatch:
if commit.ParentCount() == 0 {
cmd = exec.Command("git", "format-patch", "--no-signature", "--stdout", "--root", commitID)
} else {
@@ -511,6 +528,7 @@ func GetRawDiff(repoPath, commitID string, diffType RawDiffType, writer io.Write
return nil
}
// GetDiffCommit builds a Diff representing the given commitID.
func GetDiffCommit(repoPath, commitID string, maxLines, maxLineCharacteres, maxFiles int) (*Diff, error) {
return GetDiffRange(repoPath, "", commitID, maxLines, maxLineCharacteres, maxFiles)
}

View File

@@ -24,12 +24,12 @@ func TestDiffToHTML(t *testing.T) {
dmp.Diff{dmp.DiffInsert, "bar"},
dmp.Diff{dmp.DiffDelete, " baz"},
dmp.Diff{dmp.DiffEqual, " biz"},
}, DIFF_LINE_ADD))
}, DiffLineAdd))
assertEqual(t, "-foo <span class=\"removed-code\">bar</span> biz", diffToHTML([]dmp.Diff{
dmp.Diff{dmp.DiffEqual, "foo "},
dmp.Diff{dmp.DiffDelete, "bar"},
dmp.Diff{dmp.DiffInsert, " baz"},
dmp.Diff{dmp.DiffEqual, " biz"},
}, DIFF_LINE_DEL))
}, DiffLineDel))
}

View File

@@ -14,18 +14,18 @@ import (
"strings"
"time"
api "code.gitea.io/sdk/gitea"
"github.com/Unknwon/com"
"github.com/go-xorm/xorm"
api "github.com/gogits/go-gogs-client"
gouuid "github.com/satori/go.uuid"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
)
var (
ErrMissingIssueNumber = errors.New("No issue number specified")
errMissingIssueNumber = errors.New("No issue number specified")
)
// Issue represents an issue or pull request of repository.
@@ -62,16 +62,20 @@ type Issue struct {
Comments []*Comment `xorm:"-"`
}
// BeforeInsert is invoked from XORM before inserting an object of this type.
func (issue *Issue) BeforeInsert() {
issue.CreatedUnix = time.Now().Unix()
issue.UpdatedUnix = issue.CreatedUnix
}
// BeforeUpdate is invoked from XORM before updating this object.
func (issue *Issue) BeforeUpdate() {
issue.UpdatedUnix = time.Now().Unix()
issue.DeadlineUnix = issue.Deadline.Unix()
}
// AfterSet is invoked from XORM after setting the value of a field of
// this object.
func (issue *Issue) AfterSet(colName string, _ xorm.Cell) {
switch colName {
case "deadline_unix":
@@ -94,12 +98,12 @@ func (issue *Issue) loadAttributes(e Engine) (err error) {
if issue.Poster == nil {
issue.Poster, err = getUserByID(e, issue.PosterID)
if err != nil {
if IsErrUserNotExist(err) {
issue.PosterID = -1
issue.Poster = NewGhostUser()
} else {
issue.PosterID = -1
issue.Poster = NewGhostUser()
if !IsErrUserNotExist(err) {
return fmt.Errorf("getUserByID.(poster) [%d]: %v", issue.PosterID, err)
}
err = nil
return
}
}
@@ -150,10 +154,12 @@ func (issue *Issue) loadAttributes(e Engine) (err error) {
return nil
}
// LoadAttributes loads the attribute of this issue.
func (issue *Issue) LoadAttributes() error {
return issue.loadAttributes(x)
}
// HTMLURL returns the absolute URL to this issue.
func (issue *Issue) HTMLURL() string {
var path string
if issue.IsPull {
@@ -165,14 +171,14 @@ func (issue *Issue) HTMLURL() string {
}
// State returns string representation of issue status.
func (i *Issue) State() api.StateType {
if i.IsClosed {
return api.STATE_CLOSED
func (issue *Issue) State() api.StateType {
if issue.IsClosed {
return api.StateClosed
}
return api.STATE_OPEN
return api.StateOpen
}
// This method assumes some fields assigned with values:
// APIFormat assumes some fields assigned with values:
// Required - Poster, Labels,
// Optional - Milestone, Assignee, PullRequest
func (issue *Issue) APIFormat() *api.Issue {
@@ -213,22 +219,22 @@ func (issue *Issue) APIFormat() *api.Issue {
}
// HashTag returns unique hash tag for issue.
func (i *Issue) HashTag() string {
return "issue-" + com.ToStr(i.ID)
func (issue *Issue) HashTag() string {
return "issue-" + com.ToStr(issue.ID)
}
// IsPoster returns true if given user by ID is the poster.
func (i *Issue) IsPoster(uid int64) bool {
return i.PosterID == uid
func (issue *Issue) IsPoster(uid int64) bool {
return issue.PosterID == uid
}
func (i *Issue) hasLabel(e Engine, labelID int64) bool {
return hasIssueLabel(e, i.ID, labelID)
func (issue *Issue) hasLabel(e Engine, labelID int64) bool {
return hasIssueLabel(e, issue.ID, labelID)
}
// HasLabel returns true if issue has been labeled by given ID.
func (i *Issue) HasLabel(labelID int64) bool {
return i.hasLabel(x, labelID)
func (issue *Issue) HasLabel(labelID int64) bool {
return issue.hasLabel(x, labelID)
}
func (issue *Issue) sendLabelUpdatedWebhook(doer *User) {
@@ -239,8 +245,8 @@ func (issue *Issue) sendLabelUpdatedWebhook(doer *User) {
log.Error(4, "LoadIssue: %v", err)
return
}
err = PrepareWebhooks(issue.Repo, HOOK_EVENT_PULL_REQUEST, &api.PullRequestPayload{
Action: api.HOOK_ISSUE_LABEL_UPDATED,
err = PrepareWebhooks(issue.Repo, HookEventPullRequest, &api.PullRequestPayload{
Action: api.HookIssueLabelUpdated,
Index: issue.Index,
PullRequest: issue.PullRequest.APIFormat(),
Repository: issue.Repo.APIFormat(nil),
@@ -254,8 +260,8 @@ func (issue *Issue) sendLabelUpdatedWebhook(doer *User) {
}
}
func (i *Issue) addLabel(e *xorm.Session, label *Label) error {
return newIssueLabel(e, i, label)
func (issue *Issue) addLabel(e *xorm.Session, label *Label) error {
return newIssueLabel(e, issue, label)
}
// AddLabel adds a new label to the issue.
@@ -322,6 +328,8 @@ func (issue *Issue) clearLabels(e *xorm.Session) (err error) {
return nil
}
// ClearLabels removes all issue labels as the given user.
// Triggers appropriate WebHooks, if any.
func (issue *Issue) ClearLabels(doer *User) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
@@ -343,8 +351,8 @@ func (issue *Issue) ClearLabels(doer *User) (err error) {
log.Error(4, "LoadIssue: %v", err)
return
}
err = PrepareWebhooks(issue.Repo, HOOK_EVENT_PULL_REQUEST, &api.PullRequestPayload{
Action: api.HOOK_ISSUE_LABEL_CLEARED,
err = PrepareWebhooks(issue.Repo, HookEventPullRequest, &api.PullRequestPayload{
Action: api.HookIssueLabelCleared,
Index: issue.Index,
PullRequest: issue.PullRequest.APIFormat(),
Repository: issue.Repo.APIFormat(nil),
@@ -361,6 +369,7 @@ func (issue *Issue) ClearLabels(doer *User) (err error) {
}
// ReplaceLabels removes all current labels and add new labels to the issue.
// Triggers appropriate WebHooks, if any.
func (issue *Issue) ReplaceLabels(labels []*Label) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
@@ -377,12 +386,13 @@ func (issue *Issue) ReplaceLabels(labels []*Label) (err error) {
return sess.Commit()
}
func (i *Issue) GetAssignee() (err error) {
if i.AssigneeID == 0 || i.Assignee != nil {
// GetAssignee sets the Assignee attribute of this issue.
func (issue *Issue) GetAssignee() (err error) {
if issue.AssigneeID == 0 || issue.Assignee != nil {
return nil
}
i.Assignee, err = GetUserByID(i.AssigneeID)
issue.Assignee, err = GetUserByID(issue.AssigneeID)
if IsErrUserNotExist(err) {
return nil
}
@@ -390,8 +400,8 @@ func (i *Issue) GetAssignee() (err error) {
}
// ReadBy sets issue to be read by given user.
func (i *Issue) ReadBy(uid int64) error {
return UpdateIssueUserByRead(uid, i.ID)
func (issue *Issue) ReadBy(uid int64) error {
return UpdateIssueUserByRead(uid, issue.ID)
}
func updateIssueCols(e Engine, issue *Issue, cols ...string) error {
@@ -404,41 +414,41 @@ func UpdateIssueCols(issue *Issue, cols ...string) error {
return updateIssueCols(x, issue, cols...)
}
func (i *Issue) changeStatus(e *xorm.Session, doer *User, repo *Repository, isClosed bool) (err error) {
func (issue *Issue) changeStatus(e *xorm.Session, doer *User, repo *Repository, isClosed bool) (err error) {
// Nothing should be performed if current status is same as target status
if i.IsClosed == isClosed {
if issue.IsClosed == isClosed {
return nil
}
i.IsClosed = isClosed
issue.IsClosed = isClosed
if err = updateIssueCols(e, i, "is_closed"); err != nil {
if err = updateIssueCols(e, issue, "is_closed"); err != nil {
return err
} else if err = updateIssueUsersByStatus(e, i.ID, isClosed); err != nil {
} else if err = updateIssueUsersByStatus(e, issue.ID, isClosed); err != nil {
return err
}
// Update issue count of labels
if err = i.getLabels(e); err != nil {
if err = issue.getLabels(e); err != nil {
return err
}
for idx := range i.Labels {
if i.IsClosed {
i.Labels[idx].NumClosedIssues++
for idx := range issue.Labels {
if issue.IsClosed {
issue.Labels[idx].NumClosedIssues++
} else {
i.Labels[idx].NumClosedIssues--
issue.Labels[idx].NumClosedIssues--
}
if err = updateLabel(e, i.Labels[idx]); err != nil {
if err = updateLabel(e, issue.Labels[idx]); err != nil {
return err
}
}
// Update issue count of milestone
if err = changeMilestoneIssueStats(e, i); err != nil {
if err = changeMilestoneIssueStats(e, issue); err != nil {
return err
}
// New action comment
if _, err = createStatusComment(e, doer, repo, i); err != nil {
if _, err = createStatusComment(e, doer, repo, issue); err != nil {
return err
}
@@ -471,11 +481,11 @@ func (issue *Issue) ChangeStatus(doer *User, repo *Repository, isClosed bool) (e
Sender: doer.APIFormat(),
}
if isClosed {
apiPullRequest.Action = api.HOOK_ISSUE_CLOSED
apiPullRequest.Action = api.HookIssueClosed
} else {
apiPullRequest.Action = api.HOOK_ISSUE_REOPENED
apiPullRequest.Action = api.HookIssueReOpened
}
err = PrepareWebhooks(repo, HOOK_EVENT_PULL_REQUEST, apiPullRequest)
err = PrepareWebhooks(repo, HookEventPullRequest, apiPullRequest)
}
if err != nil {
log.Error(4, "PrepareWebhooks [is_pull: %v, is_closed: %v]: %v", issue.IsPull, isClosed, err)
@@ -486,6 +496,7 @@ func (issue *Issue) ChangeStatus(doer *User, repo *Repository, isClosed bool) (e
return nil
}
// ChangeTitle changes the title of this issue, as the given user.
func (issue *Issue) ChangeTitle(doer *User, title string) (err error) {
oldTitle := issue.Title
issue.Title = title
@@ -495,8 +506,8 @@ func (issue *Issue) ChangeTitle(doer *User, title string) (err error) {
if issue.IsPull {
issue.PullRequest.Issue = issue
err = PrepareWebhooks(issue.Repo, HOOK_EVENT_PULL_REQUEST, &api.PullRequestPayload{
Action: api.HOOK_ISSUE_EDITED,
err = PrepareWebhooks(issue.Repo, HookEventPullRequest, &api.PullRequestPayload{
Action: api.HookIssueEdited,
Index: issue.Index,
Changes: &api.ChangesPayload{
Title: &api.ChangesFromPayload{
@@ -517,6 +528,7 @@ func (issue *Issue) ChangeTitle(doer *User, title string) (err error) {
return nil
}
// ChangeContent changes issue content, as the given user.
func (issue *Issue) ChangeContent(doer *User, content string) (err error) {
oldContent := issue.Content
issue.Content = content
@@ -526,8 +538,8 @@ func (issue *Issue) ChangeContent(doer *User, content string) (err error) {
if issue.IsPull {
issue.PullRequest.Issue = issue
err = PrepareWebhooks(issue.Repo, HOOK_EVENT_PULL_REQUEST, &api.PullRequestPayload{
Action: api.HOOK_ISSUE_EDITED,
err = PrepareWebhooks(issue.Repo, HookEventPullRequest, &api.PullRequestPayload{
Action: api.HookIssueEdited,
Index: issue.Index,
Changes: &api.ChangesPayload{
Body: &api.ChangesFromPayload{
@@ -548,6 +560,7 @@ func (issue *Issue) ChangeContent(doer *User, content string) (err error) {
return nil
}
// ChangeAssignee changes the Asssignee field of this issue.
func (issue *Issue) ChangeAssignee(doer *User, assigneeID int64) (err error) {
issue.AssigneeID = assigneeID
if err = UpdateIssueUserByAssignee(issue); err != nil {
@@ -571,11 +584,11 @@ func (issue *Issue) ChangeAssignee(doer *User, assigneeID int64) (err error) {
Sender: doer.APIFormat(),
}
if isRemoveAssignee {
apiPullRequest.Action = api.HOOK_ISSUE_UNASSIGNED
apiPullRequest.Action = api.HookIssueUnassigned
} else {
apiPullRequest.Action = api.HOOK_ISSUE_ASSIGNED
apiPullRequest.Action = api.HookIssueAssigned
}
err = PrepareWebhooks(issue.Repo, HOOK_EVENT_PULL_REQUEST, apiPullRequest)
err = PrepareWebhooks(issue.Repo, HookEventPullRequest, apiPullRequest)
}
if err != nil {
log.Error(4, "PrepareWebhooks [is_pull: %v, remove_assignee: %v]: %v", issue.IsPull, isRemoveAssignee, err)
@@ -586,6 +599,7 @@ func (issue *Issue) ChangeAssignee(doer *User, assigneeID int64) (err error) {
return nil
}
// NewIssueOptions represents the options of a new issue.
type NewIssueOptions struct {
Repo *Repository
Issue *Issue
@@ -624,7 +638,7 @@ func newIssue(e *xorm.Session, opts NewIssueOptions) (err error) {
// Assume assignee is invalid and drop silently.
opts.Issue.AssigneeID = 0
if assignee != nil {
valid, err := hasAccess(e, assignee, opts.Repo, ACCESS_MODE_WRITE)
valid, err := hasAccess(e, assignee, opts.Repo, AccessModeWrite)
if err != nil {
return fmt.Errorf("hasAccess [user_id: %d, repo_id: %d]: %v", assignee.ID, opts.Repo.ID, err)
}
@@ -650,7 +664,7 @@ func newIssue(e *xorm.Session, opts NewIssueOptions) (err error) {
}
if len(opts.LableIDs) > 0 {
// During the session, SQLite3 dirver cannot handle retrieve objects after update something.
// During the session, SQLite3 driver cannot handle retrieve objects after update something.
// So we have to get all needed labels first.
labels := make([]*Label, 0, len(opts.LableIDs))
if err = e.In("id", opts.LableIDs).Find(&labels); err != nil {
@@ -714,7 +728,7 @@ func NewIssue(repo *Repository, issue *Issue, labelIDs []int64, uuids []string)
if err = NotifyWatchers(&Action{
ActUserID: issue.Poster.ID,
ActUserName: issue.Poster.Name,
OpType: ACTION_CREATE_ISSUE,
OpType: ActionCreateIssue,
Content: fmt.Sprintf("%d|%s", issue.Index, issue.Title),
RepoID: repo.ID,
RepoUserName: repo.Owner.Name,
@@ -735,7 +749,7 @@ func NewIssue(repo *Repository, issue *Issue, labelIDs []int64, uuids []string)
func GetIssueByRef(ref string) (*Issue, error) {
n := strings.IndexByte(ref, byte('#'))
if n == -1 {
return nil, ErrMissingIssueNumber
return nil, errMissingIssueNumber
}
index, err := com.StrTo(ref[n+1:]).Int64()
@@ -756,7 +770,7 @@ func GetIssueByRef(ref string) (*Issue, error) {
return issue, issue.LoadAttributes()
}
// GetIssueByIndex returns raw issue without loading attributes by index in a repository.
// GetRawIssueByIndex returns raw issue without loading attributes by index in a repository.
func GetRawIssueByIndex(repoID, index int64) (*Issue, error) {
issue := &Issue{
RepoID: repoID,
@@ -796,6 +810,7 @@ func GetIssueByID(id int64) (*Issue, error) {
return getIssueByID(x, id)
}
// IssuesOptions represents options of an issue.
type IssuesOptions struct {
UserID int64
AssigneeID int64
@@ -820,16 +835,12 @@ func Issues(opts *IssuesOptions) ([]*Issue, error) {
sess := x.Limit(setting.UI.IssuePagingNum, (opts.Page-1)*setting.UI.IssuePagingNum)
if opts.RepoID > 0 {
sess.Where("issue.repo_id=?", opts.RepoID).And("issue.is_closed=?", opts.IsClosed)
} else if opts.RepoIDs != nil {
sess.And("issue.repo_id=?", opts.RepoID)
} else if len(opts.RepoIDs) > 0 {
// In case repository IDs are provided but actually no repository has issue.
if len(opts.RepoIDs) == 0 {
return make([]*Issue, 0), nil
}
sess.In("issue.repo_id", base.Int64sToStrings(opts.RepoIDs)).And("issue.is_closed=?", opts.IsClosed)
} else {
sess.Where("issue.is_closed=?", opts.IsClosed)
sess.In("issue.repo_id", opts.RepoIDs)
}
sess.And("issue.is_closed=?", opts.IsClosed)
if opts.AssigneeID > 0 {
sess.And("issue.assignee_id=?", opts.AssigneeID)
@@ -863,12 +874,16 @@ func Issues(opts *IssuesOptions) ([]*Issue, error) {
if len(opts.Labels) > 0 && opts.Labels != "0" {
labelIDs := base.StringsToInt64s(strings.Split(opts.Labels, ","))
if len(labelIDs) > 0 {
sess.Join("INNER", "issue_label", "issue.id = issue_label.issue_id").In("issue_label.label_id", labelIDs)
sess.
Join("INNER", "issue_label", "issue.id = issue_label.issue_id").
In("issue_label.label_id", labelIDs)
}
}
if opts.IsMention {
sess.Join("INNER", "issue_user", "issue.id = issue_user.issue_id").And("issue_user.is_mentioned = ?", true)
sess.
Join("INNER", "issue_user", "issue.id = issue_user.issue_id").
And("issue_user.is_mentioned = ?", true)
if opts.UserID > 0 {
sess.And("issue_user.uid = ?", opts.UserID)
@@ -967,9 +982,9 @@ func NewIssueUsers(repo *Repository, issue *Issue) (err error) {
}
// PairsContains returns true when pairs list contains given issue.
func PairsContains(ius []*IssueUser, issueId, uid int64) int {
func PairsContains(ius []*IssueUser, issueID, uid int64) int {
for i := range ius {
if ius[i].IssueID == issueId &&
if ius[i].IssueID == issueID &&
ius[i].UID == uid {
return i
}
@@ -991,7 +1006,10 @@ func GetIssueUserPairsByRepoIds(rids []int64, isClosed bool, page int) ([]*Issue
}
ius := make([]*IssueUser, 0, 10)
sess := x.Limit(20, (page-1)*20).Where("is_closed=?", isClosed).In("repo_id", rids)
sess := x.
Limit(20, (page-1)*20).
Where("is_closed=?", isClosed).
In("repo_id", rids)
err := sess.Find(&ius)
return ius, err
}
@@ -999,15 +1017,18 @@ func GetIssueUserPairsByRepoIds(rids []int64, isClosed bool, page int) ([]*Issue
// GetIssueUserPairsByMode returns issue-user pairs by given repository and user.
func GetIssueUserPairsByMode(uid, rid int64, isClosed bool, page, filterMode int) ([]*IssueUser, error) {
ius := make([]*IssueUser, 0, 10)
sess := x.Limit(20, (page-1)*20).Where("uid=?", uid).And("is_closed=?", isClosed)
sess := x.
Limit(20, (page-1)*20).
Where("uid=?", uid).
And("is_closed=?", isClosed)
if rid > 0 {
sess.And("repo_id=?", rid)
}
switch filterMode {
case FM_ASSIGN:
case FilterModeAssign:
sess.And("is_assigned=?", true)
case FM_CREATE:
case FilterModeCreate:
sess.And("is_poster=?", true)
default:
return ius, nil
@@ -1070,10 +1091,10 @@ type IssueStats struct {
// Filter modes.
const (
FM_ALL = iota
FM_ASSIGN
FM_CREATE
FM_MENTION
FilterModeAll = iota
FilterModeAssign
FilterModeCreate
FilterModeMention
)
func parseCountResult(results []map[string][]byte) int64 {
@@ -1086,6 +1107,7 @@ func parseCountResult(results []map[string][]byte) int64 {
return 0
}
// IssueStatsOptions contains parameters accepted by GetIssueStats.
type IssueStatsOptions struct {
RepoID int64
UserID int64
@@ -1101,12 +1123,16 @@ func GetIssueStats(opts *IssueStatsOptions) *IssueStats {
stats := &IssueStats{}
countSession := func(opts *IssueStatsOptions) *xorm.Session {
sess := x.Where("issue.repo_id = ?", opts.RepoID).And("is_pull = ?", opts.IsPull)
sess := x.
Where("issue.repo_id = ?", opts.RepoID).
And("is_pull = ?", opts.IsPull)
if len(opts.Labels) > 0 && opts.Labels != "0" {
labelIDs := base.StringsToInt64s(strings.Split(opts.Labels, ","))
if len(labelIDs) > 0 {
sess.Join("INNER", "issue_label", "issue.id = issue_id").In("label_id", labelIDs)
sess.
Join("INNER", "issue_label", "issue.id = issue_id").
In("label_id", labelIDs)
}
}
@@ -1122,7 +1148,7 @@ func GetIssueStats(opts *IssueStatsOptions) *IssueStats {
}
switch opts.FilterMode {
case FM_ALL, FM_ASSIGN:
case FilterModeAll, FilterModeAssign:
stats.OpenCount, _ = countSession(opts).
And("is_closed = ?", false).
Count(&Issue{})
@@ -1130,7 +1156,7 @@ func GetIssueStats(opts *IssueStatsOptions) *IssueStats {
stats.ClosedCount, _ = countSession(opts).
And("is_closed = ?", true).
Count(&Issue{})
case FM_CREATE:
case FilterModeCreate:
stats.OpenCount, _ = countSession(opts).
And("poster_id = ?", opts.UserID).
And("is_closed = ?", false).
@@ -1140,7 +1166,7 @@ func GetIssueStats(opts *IssueStatsOptions) *IssueStats {
And("poster_id = ?", opts.UserID).
And("is_closed = ?", true).
Count(&Issue{})
case FM_MENTION:
case FilterModeMention:
stats.OpenCount, _ = countSession(opts).
Join("INNER", "issue_user", "issue.id = issue_user.issue_id").
And("issue_user.uid = ?", opts.UserID).
@@ -1163,11 +1189,13 @@ func GetUserIssueStats(repoID, uid int64, repoIDs []int64, filterMode int, isPul
stats := &IssueStats{}
countSession := func(isClosed, isPull bool, repoID int64, repoIDs []int64) *xorm.Session {
sess := x.Where("issue.is_closed = ?", isClosed).And("issue.is_pull = ?", isPull)
sess := x.
Where("issue.is_closed = ?", isClosed).
And("issue.is_pull = ?", isPull)
if repoID > 0 || len(repoIDs) == 0 {
if repoID > 0 {
sess.And("repo_id = ?", repoID)
} else {
} else if len(repoIDs) > 0 {
sess.In("repo_id", repoIDs)
}
@@ -1186,10 +1214,10 @@ func GetUserIssueStats(repoID, uid int64, repoIDs []int64, filterMode int, isPul
closedCountSession := countSession(true, isPull, repoID, repoIDs)
switch filterMode {
case FM_ASSIGN:
case FilterModeAssign:
openCountSession.And("assignee_id = ?", uid)
closedCountSession.And("assignee_id = ?", uid)
case FM_CREATE:
case FilterModeCreate:
openCountSession.And("poster_id = ?", uid)
closedCountSession.And("poster_id = ?", uid)
}
@@ -1203,7 +1231,8 @@ func GetUserIssueStats(repoID, uid int64, repoIDs []int64, filterMode int, isPul
// GetRepoIssueStats returns number of open and closed repository issues by given filter mode.
func GetRepoIssueStats(repoID, uid int64, filterMode int, isPull bool) (numOpen int64, numClosed int64) {
countSession := func(isClosed, isPull bool, repoID int64) *xorm.Session {
sess := x.Where("issue.repo_id = ?", isClosed).
sess := x.
Where("issue.repo_id = ?", isClosed).
And("is_pull = ?", isPull).
And("repo_id = ?", repoID)
@@ -1214,10 +1243,10 @@ func GetRepoIssueStats(repoID, uid int64, filterMode int, isPull bool) (numOpen
closedCountSession := countSession(true, isPull, repoID)
switch filterMode {
case FM_ASSIGN:
case FilterModeAssign:
openCountSession.And("assignee_id = ?", uid)
closedCountSession.And("assignee_id = ?", uid)
case FM_CREATE:
case FilterModeCreate:
openCountSession.And("poster_id = ?", uid)
closedCountSession.And("poster_id = ?", uid)
}
@@ -1337,10 +1366,12 @@ type Milestone struct {
ClosedDateUnix int64
}
// BeforeInsert is invoked from XORM before inserting an object of this type.
func (m *Milestone) BeforeInsert() {
m.DeadlineUnix = m.Deadline.Unix()
}
// BeforeUpdate is invoked from XORM before updating this object.
func (m *Milestone) BeforeUpdate() {
if m.NumIssues > 0 {
m.Completeness = m.NumClosedIssues * 100 / m.NumIssues
@@ -1352,6 +1383,8 @@ func (m *Milestone) BeforeUpdate() {
m.ClosedDateUnix = m.ClosedDate.Unix()
}
// AfterSet is invoked from XORM after setting the value of a field of
// this object.
func (m *Milestone) AfterSet(colName string, _ xorm.Cell) {
switch colName {
case "num_closed_issues":
@@ -1376,11 +1409,12 @@ func (m *Milestone) AfterSet(colName string, _ xorm.Cell) {
// State returns string representation of milestone status.
func (m *Milestone) State() api.StateType {
if m.IsClosed {
return api.STATE_CLOSED
return api.StateClosed
}
return api.STATE_OPEN
return api.StateOpen
}
// APIFormat returns this Milestone in API format.
func (m *Milestone) APIFormat() *api.Milestone {
apiMilestone := &api.Milestone{
ID: m.ID,
@@ -1431,7 +1465,7 @@ func getMilestoneByRepoID(e Engine, repoID, id int64) (*Milestone, error) {
return m, nil
}
// GetWebhookByRepoID returns the milestone in a repository.
// GetMilestoneByRepoID returns the milestone in a repository.
func GetMilestoneByRepoID(repoID, id int64) (*Milestone, error) {
return getMilestoneByRepoID(x, repoID, id)
}
@@ -1463,7 +1497,9 @@ func UpdateMilestone(m *Milestone) error {
}
func countRepoMilestones(e Engine, repoID int64) int64 {
count, _ := e.Where("repo_id=?", repoID).Count(new(Milestone))
count, _ := e.
Where("repo_id=?", repoID).
Count(new(Milestone))
return count
}
@@ -1473,7 +1509,9 @@ func CountRepoMilestones(repoID int64) int64 {
}
func countRepoClosedMilestones(e Engine, repoID int64) int64 {
closed, _ := e.Where("repo_id=? AND is_closed=?", repoID, true).Count(new(Milestone))
closed, _ := e.
Where("repo_id=? AND is_closed=?", repoID, true).
Count(new(Milestone))
return closed
}
@@ -1484,7 +1522,9 @@ func CountRepoClosedMilestones(repoID int64) int64 {
// MilestoneStats returns number of open and closed milestones of given repository.
func MilestoneStats(repoID int64) (open int64, closed int64) {
open, _ = x.Where("repo_id=? AND is_closed=?", repoID, false).Count(new(Milestone))
open, _ = x.
Where("repo_id=? AND is_closed=?", repoID, false).
Count(new(Milestone))
return open, CountRepoClosedMilestones(repoID)
}
@@ -1657,10 +1697,13 @@ type Attachment struct {
CreatedUnix int64
}
// BeforeInsert is invoked from XORM before inserting an object of this type.
func (a *Attachment) BeforeInsert() {
a.CreatedUnix = time.Now().Unix()
}
// AfterSet is invoked from XORM after setting the value of a field of
// this object.
func (a *Attachment) AfterSet(colName string, _ xorm.Cell) {
switch colName {
case "created_unix":
@@ -1668,14 +1711,15 @@ func (a *Attachment) AfterSet(colName string, _ xorm.Cell) {
}
}
// AttachmentLocalPath returns where attachment is stored in local file system based on given UUID.
// AttachmentLocalPath returns where attachment is stored in local file
// system based on given UUID.
func AttachmentLocalPath(uuid string) string {
return path.Join(setting.AttachmentPath, uuid[0:1], uuid[1:2], uuid)
}
// LocalPath returns where attachment is stored in local file system.
func (attach *Attachment) LocalPath() string {
return AttachmentLocalPath(attach.UUID)
func (a *Attachment) LocalPath() string {
return AttachmentLocalPath(a.UUID)
}
// NewAttachment creates a new attachment object.
@@ -1775,8 +1819,8 @@ func DeleteAttachments(attachments []*Attachment, remove bool) (int, error) {
}
// DeleteAttachmentsByIssue deletes all attachments associated with the given issue.
func DeleteAttachmentsByIssue(issueId int64, remove bool) (int, error) {
attachments, err := GetAttachmentsByIssueID(issueId)
func DeleteAttachmentsByIssue(issueID int64, remove bool) (int, error) {
attachments, err := GetAttachmentsByIssueID(issueID)
if err != nil {
return 0, err
@@ -1786,8 +1830,8 @@ func DeleteAttachmentsByIssue(issueId int64, remove bool) (int, error) {
}
// DeleteAttachmentsByComment deletes all attachments associated with the given comment.
func DeleteAttachmentsByComment(commentId int64, remove bool) (int, error) {
attachments, err := GetAttachmentsByCommentID(commentId)
func DeleteAttachmentsByComment(commentID int64, remove bool) (int, error) {
attachments, err := GetAttachmentsByCommentID(commentID)
if err != nil {
return 0, err

View File

@@ -12,38 +12,41 @@ import (
"github.com/Unknwon/com"
"github.com/go-xorm/xorm"
api "github.com/gogits/go-gogs-client"
api "code.gitea.io/sdk/gitea"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/markdown"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/markdown"
)
// CommentType defines whether a comment is just a simple comment, an action (like close) or a reference.
type CommentType int
// Enumerate all the comment types
const (
// Plain comment, can be associated with a commit (CommitID > 0) and a line (LineNum > 0)
COMMENT_TYPE_COMMENT CommentType = iota
COMMENT_TYPE_REOPEN
COMMENT_TYPE_CLOSE
CommentTypeComment CommentType = iota
CommentTypeReopen
CommentTypeClose
// References.
COMMENT_TYPE_ISSUE_REF
CommentTypeIssueRef
// Reference from a commit (not part of a pull request)
COMMENT_TYPE_COMMIT_REF
CommentTypeCommitRef
// Reference from a comment
COMMENT_TYPE_COMMENT_REF
CommentTypeCommentRef
// Reference from a pull request
COMMENT_TYPE_PULL_REF
CommentTypePullRef
)
// CommentTag defines comment tag type
type CommentTag int
// Enumerate all the comment tag types
const (
COMMENT_TAG_NONE CommentTag = iota
COMMENT_TAG_POSTER
COMMENT_TAG_WRITER
COMMENT_TAG_OWNER
CommentTagNone CommentTag = iota
CommentTagPoster
CommentTagWriter
CommentTagOwner
)
// Comment represents a comment in commit and issue page.
@@ -72,15 +75,19 @@ type Comment struct {
ShowTag CommentTag `xorm:"-"`
}
// BeforeInsert will be invoked by XORM before inserting a record
// representing this object.
func (c *Comment) BeforeInsert() {
c.CreatedUnix = time.Now().Unix()
c.UpdatedUnix = c.CreatedUnix
}
// BeforeUpdate is invoked from XORM before updating this object.
func (c *Comment) BeforeUpdate() {
c.UpdatedUnix = time.Now().Unix()
}
// AfterSet is invoked from XORM after setting the value of a field of this object.
func (c *Comment) AfterSet(colName string, _ xorm.Cell) {
var err error
switch colName {
@@ -107,6 +114,7 @@ func (c *Comment) AfterSet(colName string, _ xorm.Cell) {
}
}
// AfterDelete is invoked from XORM after the object is deleted.
func (c *Comment) AfterDelete() {
_, err := DeleteAttachmentsByComment(c.ID, true)
@@ -115,6 +123,7 @@ func (c *Comment) AfterDelete() {
}
}
// APIFormat converts a Comment to the api.Comment format
func (c *Comment) APIFormat() *api.Comment {
return &api.Comment{
ID: c.ID,
@@ -137,21 +146,21 @@ func (c *Comment) EventTag() string {
// MailParticipants sends new comment emails to repository watchers
// and mentioned people.
func (cmt *Comment) MailParticipants(opType ActionType, issue *Issue) (err error) {
mentions := markdown.FindAllMentions(cmt.Content)
if err = UpdateIssueMentions(cmt.IssueID, mentions); err != nil {
return fmt.Errorf("UpdateIssueMentions [%d]: %v", cmt.IssueID, err)
func (c *Comment) MailParticipants(opType ActionType, issue *Issue) (err error) {
mentions := markdown.FindAllMentions(c.Content)
if err = UpdateIssueMentions(c.IssueID, mentions); err != nil {
return fmt.Errorf("UpdateIssueMentions [%d]: %v", c.IssueID, err)
}
switch opType {
case ACTION_COMMENT_ISSUE:
issue.Content = cmt.Content
case ACTION_CLOSE_ISSUE:
case ActionCommentIssue:
issue.Content = c.Content
case ActionCloseIssue:
issue.Content = fmt.Sprintf("Closed #%d", issue.Index)
case ACTION_REOPEN_ISSUE:
case ActionReopenIssue:
issue.Content = fmt.Sprintf("Reopened #%d", issue.Index)
}
if err = mailIssueCommentToParticipants(issue, cmt.Poster, mentions); err != nil {
if err = mailIssueCommentToParticipants(issue, c.Poster, mentions); err != nil {
log.Error(4, "mailIssueCommentToParticipants: %v", err)
}
@@ -187,8 +196,8 @@ func createComment(e *xorm.Session, opts *CreateCommentOptions) (_ *Comment, err
// Check comment type.
switch opts.Type {
case COMMENT_TYPE_COMMENT:
act.OpType = ACTION_COMMENT_ISSUE
case CommentTypeComment:
act.OpType = ActionCommentIssue
if _, err = e.Exec("UPDATE `issue` SET num_comments=num_comments+1 WHERE id=?", opts.Issue.ID); err != nil {
return nil, err
@@ -216,10 +225,10 @@ func createComment(e *xorm.Session, opts *CreateCommentOptions) (_ *Comment, err
}
}
case COMMENT_TYPE_REOPEN:
act.OpType = ACTION_REOPEN_ISSUE
case CommentTypeReopen:
act.OpType = ActionReopenIssue
if opts.Issue.IsPull {
act.OpType = ACTION_REOPEN_PULL_REQUEST
act.OpType = ActionReopenPullRequest
}
if opts.Issue.IsPull {
@@ -231,10 +240,10 @@ func createComment(e *xorm.Session, opts *CreateCommentOptions) (_ *Comment, err
return nil, err
}
case COMMENT_TYPE_CLOSE:
act.OpType = ACTION_CLOSE_ISSUE
case CommentTypeClose:
act.OpType = ActionCloseIssue
if opts.Issue.IsPull {
act.OpType = ACTION_CLOSE_PULL_REQUEST
act.OpType = ActionClosePullRequest
}
if opts.Issue.IsPull {
@@ -260,9 +269,9 @@ func createComment(e *xorm.Session, opts *CreateCommentOptions) (_ *Comment, err
}
func createStatusComment(e *xorm.Session, doer *User, repo *Repository, issue *Issue) (*Comment, error) {
cmtType := COMMENT_TYPE_CLOSE
cmtType := CommentTypeClose
if !issue.IsClosed {
cmtType = COMMENT_TYPE_REOPEN
cmtType = CommentTypeReopen
}
return createComment(e, &CreateCommentOptions{
Type: cmtType,
@@ -272,6 +281,7 @@ func createStatusComment(e *xorm.Session, doer *User, repo *Repository, issue *I
})
}
// CreateCommentOptions defines options for creating comment
type CreateCommentOptions struct {
Type CommentType
Doer *User
@@ -304,7 +314,7 @@ func CreateComment(opts *CreateCommentOptions) (comment *Comment, err error) {
// CreateIssueComment creates a plain issue comment.
func CreateIssueComment(doer *User, repo *Repository, issue *Issue, content string, attachments []string) (*Comment, error) {
return CreateComment(&CreateCommentOptions{
Type: COMMENT_TYPE_COMMENT,
Type: CommentTypeComment,
Doer: doer,
Repo: repo,
Issue: issue,
@@ -321,7 +331,7 @@ func CreateRefComment(doer *User, repo *Repository, issue *Issue, content, commi
// Check if same reference from same commit has already existed.
has, err := x.Get(&Comment{
Type: COMMENT_TYPE_COMMIT_REF,
Type: CommentTypeCommitRef,
IssueID: issue.ID,
CommitSHA: commitSHA,
})
@@ -332,7 +342,7 @@ func CreateRefComment(doer *User, repo *Repository, issue *Issue, content, commi
}
_, err = CreateComment(&CreateCommentOptions{
Type: COMMENT_TYPE_COMMIT_REF,
Type: CommentTypeCommitRef,
Doer: doer,
Repo: repo,
Issue: issue,
@@ -356,7 +366,9 @@ func GetCommentByID(id int64) (*Comment, error) {
func getCommentsByIssueIDSince(e Engine, issueID, since int64) ([]*Comment, error) {
comments := make([]*Comment, 0, 10)
sess := e.Where("issue_id = ?", issueID).Asc("created_unix")
sess := e.
Where("issue_id = ?", issueID).
Asc("created_unix")
if since > 0 {
sess.And("updated_unix >= ?", since)
}
@@ -372,7 +384,7 @@ func GetCommentsByIssueID(issueID int64) ([]*Comment, error) {
return getCommentsByIssueID(x, issueID)
}
// GetCommentsByIssueID returns a list of comments of an issue since a given time point.
// GetCommentsByIssueIDSince returns a list of comments of an issue since a given time point.
func GetCommentsByIssueIDSince(issueID, since int64) ([]*Comment, error) {
return getCommentsByIssueIDSince(x, issueID, since)
}
@@ -403,7 +415,7 @@ func DeleteCommentByID(id int64) error {
return err
}
if comment.Type == COMMENT_TYPE_COMMENT {
if comment.Type == CommentTypeComment {
if _, err = sess.Exec("UPDATE `issue` SET num_comments = num_comments - 1 WHERE id = ?", comment.IssueID); err != nil {
return err
}

View File

@@ -13,9 +13,7 @@ import (
"github.com/go-xorm/xorm"
api "github.com/gogits/go-gogs-client"
"github.com/gogits/gogs/modules/base"
api "code.gitea.io/sdk/gitea"
)
var labelColorPattern = regexp.MustCompile("#([a-fA-F0-9]{6})")
@@ -64,6 +62,7 @@ type Label struct {
IsChecked bool `xorm:"-"`
}
// APIFormat converts a Label to the api.Label format
func (label *Label) APIFormat() *api.Label {
return &api.Label{
ID: label.ID,
@@ -79,9 +78,9 @@ func (label *Label) CalOpenIssues() {
// ForegroundColor calculates the text color for labels based
// on their background color.
func (l *Label) ForegroundColor() template.CSS {
if strings.HasPrefix(l.Color, "#") {
if color, err := strconv.ParseUint(l.Color[1:], 16, 64); err == nil {
func (label *Label) ForegroundColor() template.CSS {
if strings.HasPrefix(label.Color, "#") {
if color, err := strconv.ParseUint(label.Color[1:], 16, 64); err == nil {
r := float32(0xFF & (color >> 16))
g := float32(0xFF & (color >> 8))
b := float32(0xFF & color)
@@ -138,13 +137,20 @@ func GetLabelInRepoByID(repoID, labelID int64) (*Label, error) {
// it silently ignores label IDs that are not belong to the repository.
func GetLabelsInRepoByIDs(repoID int64, labelIDs []int64) ([]*Label, error) {
labels := make([]*Label, 0, len(labelIDs))
return labels, x.Where("repo_id = ?", repoID).In("id", base.Int64sToStrings(labelIDs)).Asc("name").Find(&labels)
return labels, x.
Where("repo_id = ?", repoID).
In("id", labelIDs).
Asc("name").
Find(&labels)
}
// GetLabelsByRepoID returns all labels that belong to given repository by ID.
func GetLabelsByRepoID(repoID int64) ([]*Label, error) {
labels := make([]*Label, 0, 10)
return labels, x.Where("repo_id = ?", repoID).Asc("name").Find(&labels)
return labels, x.
Where("repo_id = ?", repoID).
Asc("name").
Find(&labels)
}
func getLabelsByIssueID(e Engine, issueID int64) ([]*Label, error) {
@@ -161,7 +167,11 @@ func getLabelsByIssueID(e Engine, issueID int64) ([]*Label, error) {
}
labels := make([]*Label, 0, len(labelIDs))
return labels, e.Where("id > 0").In("id", base.Int64sToStrings(labelIDs)).Asc("name").Find(&labels)
return labels, e.
Where("id > 0").
In("id", labelIDs).
Asc("name").
Find(&labels)
}
// GetLabelsByIssueID returns all labels that belong to given issue by ID.
@@ -197,7 +207,9 @@ func DeleteLabel(repoID, labelID int64) error {
if _, err = sess.Id(labelID).Delete(new(Label)); err != nil {
return err
} else if _, err = sess.Where("label_id = ?", labelID).Delete(new(IssueLabel)); err != nil {
} else if _, err = sess.
Where("label_id = ?", labelID).
Delete(new(IssueLabel)); err != nil {
return err
}
@@ -293,7 +305,10 @@ func NewIssueLabels(issue *Issue, labels []*Label) (err error) {
func getIssueLabels(e Engine, issueID int64) ([]*IssueLabel, error) {
issueLabels := make([]*IssueLabel, 0, 10)
return issueLabels, e.Where("issue_id=?", issueID).Asc("label_id").Find(&issueLabels)
return issueLabels, e.
Where("issue_id=?", issueID).
Asc("label_id").
Find(&issueLabels)
}
// GetIssueLabels returns all issue-label relations of given issue by ID.

View File

@@ -9,12 +9,12 @@ import (
"github.com/Unknwon/com"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/markdown"
"github.com/gogits/gogs/modules/setting"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/markdown"
"code.gitea.io/gitea/modules/setting"
)
func (issue *Issue) MailSubject() string {
func (issue *Issue) mailSubject() string {
return fmt.Sprintf("[%s] %s (#%d)", issue.Repo.Name, issue.Title, issue.Index)
}

View File

@@ -19,34 +19,37 @@ import (
"github.com/go-xorm/core"
"github.com/go-xorm/xorm"
"github.com/gogits/gogs/modules/auth/ldap"
"github.com/gogits/gogs/modules/auth/pam"
"github.com/gogits/gogs/modules/log"
"code.gitea.io/gitea/modules/auth/ldap"
"code.gitea.io/gitea/modules/auth/pam"
"code.gitea.io/gitea/modules/log"
)
// LoginType represents an login type.
type LoginType int
// Note: new type must append to the end of list to maintain compatibility.
const (
LOGIN_NOTYPE LoginType = iota
LOGIN_PLAIN // 1
LOGIN_LDAP // 2
LOGIN_SMTP // 3
LOGIN_PAM // 4
LOGIN_DLDAP // 5
LoginNoType LoginType = iota
LoginPlain // 1
LoginLDAP // 2
LoginSMTP // 3
LoginPAM // 4
LoginDLDAP // 5
)
// LoginNames contains the name of LoginType values.
var LoginNames = map[LoginType]string{
LOGIN_LDAP: "LDAP (via BindDN)",
LOGIN_DLDAP: "LDAP (simple auth)", // Via direct bind
LOGIN_SMTP: "SMTP",
LOGIN_PAM: "PAM",
LoginLDAP: "LDAP (via BindDN)",
LoginDLDAP: "LDAP (simple auth)", // Via direct bind
LoginSMTP: "SMTP",
LoginPAM: "PAM",
}
// SecurityProtocolNames contains the name of SecurityProtocol values.
var SecurityProtocolNames = map[ldap.SecurityProtocol]string{
ldap.SECURITY_PROTOCOL_UNENCRYPTED: "Unencrypted",
ldap.SECURITY_PROTOCOL_LDAPS: "LDAPS",
ldap.SECURITY_PROTOCOL_START_TLS: "StartTLS",
ldap.SecurityProtocolUnencrypted: "Unencrypted",
ldap.SecurityProtocolLDAPS: "LDAPS",
ldap.SecurityProtocolStartTLS: "StartTLS",
}
// Ensure structs implemented interface.
@@ -56,22 +59,28 @@ var (
_ core.Conversion = &PAMConfig{}
)
// LDAPConfig holds configuration for LDAP login source.
type LDAPConfig struct {
*ldap.Source
}
// FromDB fills up a LDAPConfig from serialized format.
func (cfg *LDAPConfig) FromDB(bs []byte) error {
return json.Unmarshal(bs, &cfg)
}
// ToDB exports a LDAPConfig to a serialized format.
func (cfg *LDAPConfig) ToDB() ([]byte, error) {
return json.Marshal(cfg)
}
// SecurityProtocolName returns the name of configured security
// protocol.
func (cfg *LDAPConfig) SecurityProtocolName() string {
return SecurityProtocolNames[cfg.SecurityProtocol]
}
// SMTPConfig holds configuration for the SMTP login source.
type SMTPConfig struct {
Auth string
Host string
@@ -81,22 +90,27 @@ type SMTPConfig struct {
SkipVerify bool
}
// FromDB fills up an SMTPConfig from serialized format.
func (cfg *SMTPConfig) FromDB(bs []byte) error {
return json.Unmarshal(bs, cfg)
}
// ToDB exports an SMTPConfig to a serialized format.
func (cfg *SMTPConfig) ToDB() ([]byte, error) {
return json.Marshal(cfg)
}
// PAMConfig holds configuration for the PAM login source.
type PAMConfig struct {
ServiceName string // pam service (e.g. system-auth)
}
// FromDB fills up a PAMConfig from serialized format.
func (cfg *PAMConfig) FromDB(bs []byte) error {
return json.Unmarshal(bs, &cfg)
}
// ToDB exports a PAMConfig to a serialized format.
func (cfg *PAMConfig) ToDB() ([]byte, error) {
return json.Marshal(cfg)
}
@@ -115,13 +129,15 @@ type LoginSource struct {
UpdatedUnix int64
}
func (s *LoginSource) BeforeInsert() {
s.CreatedUnix = time.Now().Unix()
s.UpdatedUnix = s.CreatedUnix
// BeforeInsert is invoked from XORM before inserting an object of this type.
func (source *LoginSource) BeforeInsert() {
source.CreatedUnix = time.Now().Unix()
source.UpdatedUnix = source.CreatedUnix
}
func (s *LoginSource) BeforeUpdate() {
s.UpdatedUnix = time.Now().Unix()
// BeforeUpdate is invoked from XORM before updating this object.
func (source *LoginSource) BeforeUpdate() {
source.UpdatedUnix = time.Now().Unix()
}
// Cell2Int64 converts a xorm.Cell type to int64,
@@ -135,15 +151,16 @@ func Cell2Int64(val xorm.Cell) int64 {
return (*val).(int64)
}
// BeforeSet is invoked from XORM before setting the value of a field of this object.
func (source *LoginSource) BeforeSet(colName string, val xorm.Cell) {
switch colName {
case "type":
switch LoginType(Cell2Int64(val)) {
case LOGIN_LDAP, LOGIN_DLDAP:
case LoginLDAP, LoginDLDAP:
source.Cfg = new(LDAPConfig)
case LOGIN_SMTP:
case LoginSMTP:
source.Cfg = new(SMTPConfig)
case LOGIN_PAM:
case LoginPAM:
source.Cfg = new(PAMConfig)
default:
panic("unrecognized login source type: " + com.ToStr(*val))
@@ -151,74 +168,90 @@ func (source *LoginSource) BeforeSet(colName string, val xorm.Cell) {
}
}
func (s *LoginSource) AfterSet(colName string, _ xorm.Cell) {
// AfterSet is invoked from XORM after setting the value of a field of this object.
func (source *LoginSource) AfterSet(colName string, _ xorm.Cell) {
switch colName {
case "created_unix":
s.Created = time.Unix(s.CreatedUnix, 0).Local()
source.Created = time.Unix(source.CreatedUnix, 0).Local()
case "updated_unix":
s.Updated = time.Unix(s.UpdatedUnix, 0).Local()
source.Updated = time.Unix(source.UpdatedUnix, 0).Local()
}
}
// TypeName return name of this login source type.
func (source *LoginSource) TypeName() string {
return LoginNames[source.Type]
}
// IsLDAP returns true of this source is of the LDAP type.
func (source *LoginSource) IsLDAP() bool {
return source.Type == LOGIN_LDAP
return source.Type == LoginLDAP
}
// IsDLDAP returns true of this source is of the DLDAP type.
func (source *LoginSource) IsDLDAP() bool {
return source.Type == LOGIN_DLDAP
return source.Type == LoginDLDAP
}
// IsSMTP returns true of this source is of the SMTP type.
func (source *LoginSource) IsSMTP() bool {
return source.Type == LOGIN_SMTP
return source.Type == LoginSMTP
}
// IsPAM returns true of this source is of the PAM type.
func (source *LoginSource) IsPAM() bool {
return source.Type == LOGIN_PAM
return source.Type == LoginPAM
}
// HasTLS returns true of this source supports TLS.
func (source *LoginSource) HasTLS() bool {
return ((source.IsLDAP() || source.IsDLDAP()) &&
source.LDAP().SecurityProtocol > ldap.SECURITY_PROTOCOL_UNENCRYPTED) ||
source.LDAP().SecurityProtocol > ldap.SecurityProtocolUnencrypted) ||
source.IsSMTP()
}
// UseTLS returns true of this source is configured to use TLS.
func (source *LoginSource) UseTLS() bool {
switch source.Type {
case LOGIN_LDAP, LOGIN_DLDAP:
return source.LDAP().SecurityProtocol != ldap.SECURITY_PROTOCOL_UNENCRYPTED
case LOGIN_SMTP:
case LoginLDAP, LoginDLDAP:
return source.LDAP().SecurityProtocol != ldap.SecurityProtocolUnencrypted
case LoginSMTP:
return source.SMTP().TLS
}
return false
}
// SkipVerify returns true if this source is configured to skip SSL
// verification.
func (source *LoginSource) SkipVerify() bool {
switch source.Type {
case LOGIN_LDAP, LOGIN_DLDAP:
case LoginLDAP, LoginDLDAP:
return source.LDAP().SkipVerify
case LOGIN_SMTP:
case LoginSMTP:
return source.SMTP().SkipVerify
}
return false
}
// LDAP returns LDAPConfig for this source, if of LDAP type.
func (source *LoginSource) LDAP() *LDAPConfig {
return source.Cfg.(*LDAPConfig)
}
// SMTP returns SMTPConfig for this source, if of SMTP type.
func (source *LoginSource) SMTP() *SMTPConfig {
return source.Cfg.(*SMTPConfig)
}
// PAM returns PAMConfig for this source, if of PAM type.
func (source *LoginSource) PAM() *PAMConfig {
return source.Cfg.(*PAMConfig)
}
// CreateLoginSource inserts a LoginSource in the DB if not already
// existing with the given name.
func CreateLoginSource(source *LoginSource) error {
has, err := x.Get(&LoginSource{Name: source.Name})
if err != nil {
@@ -231,6 +264,7 @@ func CreateLoginSource(source *LoginSource) error {
return err
}
// LoginSources returns a slice of all login sources found in DB.
func LoginSources() ([]*LoginSource, error) {
auths := make([]*LoginSource, 0, 5)
return auths, x.Find(&auths)
@@ -248,11 +282,13 @@ func GetLoginSourceByID(id int64) (*LoginSource, error) {
return source, nil
}
// UpdateSource updates a LoginSource record in DB.
func UpdateSource(source *LoginSource) error {
_, err := x.Id(source.ID).AllCols().Update(source)
return err
}
// DeleteSource deletes a LoginSource record in DB.
func DeleteSource(source *LoginSource) error {
count, err := x.Count(&User{LoginSource: source.ID})
if err != nil {
@@ -292,11 +328,11 @@ func composeFullName(firstname, surname, username string) string {
// LoginViaLDAP queries if login/password is valid against the LDAP directory pool,
// and create a local user if success when enabled.
func LoginViaLDAP(user *User, login, passowrd string, source *LoginSource, autoRegister bool) (*User, error) {
username, fn, sn, mail, isAdmin, succeed := source.Cfg.(*LDAPConfig).SearchEntry(login, passowrd, source.Type == LOGIN_DLDAP)
func LoginViaLDAP(user *User, login, password string, source *LoginSource, autoRegister bool) (*User, error) {
username, fn, sn, mail, isAdmin, succeed := source.Cfg.(*LDAPConfig).SearchEntry(login, password, source.Type == LoginDLDAP)
if !succeed {
// User not in LDAP, do nothing
return nil, ErrUserNotExist{0, login}
return nil, ErrUserNotExist{0, login, 0}
}
if !autoRegister {
@@ -357,13 +393,16 @@ func (auth *smtpLoginAuth) Next(fromServer []byte, more bool) ([]byte, error) {
return nil, nil
}
// SMTP authentication type names.
const (
SMTP_PLAIN = "PLAIN"
SMTP_LOGIN = "LOGIN"
SMTPPlain = "PLAIN"
SMTPLogin = "LOGIN"
)
var SMTPAuths = []string{SMTP_PLAIN, SMTP_LOGIN}
// SMTPAuths contains available SMTP authentication type names.
var SMTPAuths = []string{SMTPPlain, SMTPLogin}
// SMTPAuth performs an SMTP authentication.
func SMTPAuth(a smtp.Auth, cfg *SMTPConfig) error {
c, err := smtp.Dial(fmt.Sprintf("%s:%d", cfg.Host, cfg.Port))
if err != nil {
@@ -404,16 +443,16 @@ func LoginViaSMTP(user *User, login, password string, sourceID int64, cfg *SMTPC
if len(cfg.AllowedDomains) > 0 {
idx := strings.Index(login, "@")
if idx == -1 {
return nil, ErrUserNotExist{0, login}
return nil, ErrUserNotExist{0, login, 0}
} else if !com.IsSliceContainsStr(strings.Split(cfg.AllowedDomains, ","), login[idx+1:]) {
return nil, ErrUserNotExist{0, login}
return nil, ErrUserNotExist{0, login, 0}
}
}
var auth smtp.Auth
if cfg.Auth == SMTP_PLAIN {
if cfg.Auth == SMTPPlain {
auth = smtp.PlainAuth("", login, password, cfg.Host)
} else if cfg.Auth == SMTP_LOGIN {
} else if cfg.Auth == SMTPLogin {
auth = &smtpLoginAuth{login, password}
} else {
return nil, errors.New("Unsupported SMTP auth type")
@@ -425,7 +464,7 @@ func LoginViaSMTP(user *User, login, password string, sourceID int64, cfg *SMTPC
tperr, ok := err.(*textproto.Error)
if (ok && tperr.Code == 535) ||
strings.Contains(err.Error(), "Username and Password not accepted") {
return nil, ErrUserNotExist{0, login}
return nil, ErrUserNotExist{0, login, 0}
}
return nil, err
}
@@ -445,7 +484,7 @@ func LoginViaSMTP(user *User, login, password string, sourceID int64, cfg *SMTPC
Name: strings.ToLower(username),
Email: login,
Passwd: password,
LoginType: LOGIN_SMTP,
LoginType: LoginSMTP,
LoginSource: sourceID,
LoginName: login,
IsActive: true,
@@ -463,9 +502,9 @@ func LoginViaSMTP(user *User, login, password string, sourceID int64, cfg *SMTPC
// LoginViaPAM queries if login/password is valid against the PAM,
// and create a local user if success when enabled.
func LoginViaPAM(user *User, login, password string, sourceID int64, cfg *PAMConfig, autoRegister bool) (*User, error) {
if err := pam.PAMAuth(cfg.ServiceName, login, password); err != nil {
if err := pam.Auth(cfg.ServiceName, login, password); err != nil {
if strings.Contains(err.Error(), "Authentication failure") {
return nil, ErrUserNotExist{0, login}
return nil, ErrUserNotExist{0, login, 0}
}
return nil, err
}
@@ -479,7 +518,7 @@ func LoginViaPAM(user *User, login, password string, sourceID int64, cfg *PAMCon
Name: login,
Email: login,
Passwd: password,
LoginType: LOGIN_PAM,
LoginType: LoginPAM,
LoginSource: sourceID,
LoginName: login,
IsActive: true,
@@ -487,17 +526,18 @@ func LoginViaPAM(user *User, login, password string, sourceID int64, cfg *PAMCon
return user, CreateUser(user)
}
// ExternalUserLogin attempts a login using external source types.
func ExternalUserLogin(user *User, login, password string, source *LoginSource, autoRegister bool) (*User, error) {
if !source.IsActived {
return nil, ErrLoginSourceNotActived
}
switch source.Type {
case LOGIN_LDAP, LOGIN_DLDAP:
case LoginLDAP, LoginDLDAP:
return LoginViaLDAP(user, login, password, source, autoRegister)
case LOGIN_SMTP:
case LoginSMTP:
return LoginViaSMTP(user, login, password, source.ID, source.Cfg.(*SMTPConfig), autoRegister)
case LOGIN_PAM:
case LoginPAM:
return LoginViaPAM(user, login, password, source.ID, source.Cfg.(*PAMConfig), autoRegister)
}
@@ -505,7 +545,7 @@ func ExternalUserLogin(user *User, login, password string, source *LoginSource,
}
// UserSignIn validates user name and password.
func UserSignIn(username, passowrd string) (*User, error) {
func UserSignIn(username, password string) (*User, error) {
var user *User
if strings.Contains(username, "@") {
user = &User{Email: strings.ToLower(username)}
@@ -520,12 +560,12 @@ func UserSignIn(username, passowrd string) (*User, error) {
if hasUser {
switch user.LoginType {
case LOGIN_NOTYPE, LOGIN_PLAIN:
if user.ValidatePassword(passowrd) {
case LoginNoType, LoginPlain:
if user.ValidatePassword(password) {
return user, nil
}
return nil, ErrUserNotExist{user.ID, user.Name}
return nil, ErrUserNotExist{user.ID, user.Name, 0}
default:
var source LoginSource
@@ -536,7 +576,7 @@ func UserSignIn(username, passowrd string) (*User, error) {
return nil, ErrLoginSourceNotExist{user.LoginSource}
}
return ExternalUserLogin(user, user.LoginName, passowrd, &source, false)
return ExternalUserLogin(user, user.LoginName, password, &source, false)
}
}
@@ -546,7 +586,7 @@ func UserSignIn(username, passowrd string) (*User, error) {
}
for _, source := range sources {
authUser, err := ExternalUserLogin(nil, username, passowrd, source, true)
authUser, err := ExternalUserLogin(nil, username, password, source, true)
if err == nil {
return authUser, nil
}
@@ -554,5 +594,5 @@ func UserSignIn(username, passowrd string) (*User, error) {
log.Warn("Failed to login '%s' via '%s': %v", username, source.Name, err)
}
return nil, ErrUserNotExist{user.ID, user.Name}
return nil, ErrUserNotExist{user.ID, user.Name, 0}
}

View File

@@ -5,58 +5,45 @@
package models
import (
"bytes"
"fmt"
"html/template"
"path"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/mailer"
"code.gitea.io/gitea/modules/markdown"
"code.gitea.io/gitea/modules/setting"
"gopkg.in/gomail.v2"
"gopkg.in/macaron.v1"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/mailer"
"github.com/gogits/gogs/modules/markdown"
"github.com/gogits/gogs/modules/setting"
)
const (
MAIL_AUTH_ACTIVATE base.TplName = "auth/activate"
MAIL_AUTH_ACTIVATE_EMAIL base.TplName = "auth/activate_email"
MAIL_AUTH_RESET_PASSWORD base.TplName = "auth/reset_passwd"
MAIL_AUTH_REGISTER_NOTIFY base.TplName = "auth/register_notify"
mailAuthActivate base.TplName = "auth/activate"
mailAuthActivateEmail base.TplName = "auth/activate_email"
mailAuthResetPassword base.TplName = "auth/reset_passwd"
mailAuthRegisterNotify base.TplName = "auth/register_notify"
MAIL_ISSUE_COMMENT base.TplName = "issue/comment"
MAIL_ISSUE_MENTION base.TplName = "issue/mention"
mailIssueComment base.TplName = "issue/comment"
mailIssueMention base.TplName = "issue/mention"
MAIL_NOTIFY_COLLABORATOR base.TplName = "notify/collaborator"
mailNotifyCollaborator base.TplName = "notify/collaborator"
)
type MailRender interface {
HTMLString(string, interface{}, ...macaron.HTMLOptions) (string, error)
}
var mailRender MailRender
func InitMailRender(dir, appendDir string, funcMap []template.FuncMap) {
opt := &macaron.RenderOptions{
Directory: dir,
AppendDirectories: []string{appendDir},
Funcs: funcMap,
Extensions: []string{".tmpl", ".html"},
}
ts := macaron.NewTemplateSet()
ts.Set(macaron.DEFAULT_TPL_SET_NAME, opt)
mailRender = &macaron.TplRender{
TemplateSet: ts,
Opt: opt,
}
var templates *template.Template
// InitMailRender initializes the macaron mail renderer
func InitMailRender(tmpls *template.Template) {
templates = tmpls
}
// SendTestMail sends a test mail
func SendTestMail(email string) error {
return gomail.Send(&mailer.Sender{}, mailer.NewMessage([]string{email}, "Gogs Test Email!", "Gogs Test Email!").Message)
}
// SendUserMail sends a mail to the user
func SendUserMail(c *macaron.Context, u *User, tpl base.TplName, code, subject, info string) {
data := map[string]interface{}{
"Username": u.DisplayName(),
@@ -64,27 +51,31 @@ func SendUserMail(c *macaron.Context, u *User, tpl base.TplName, code, subject,
"ResetPwdCodeLives": setting.Service.ResetPwdCodeLives / 60,
"Code": code,
}
body, err := mailRender.HTMLString(string(tpl), data)
if err != nil {
log.Error(3, "HTMLString: %v", err)
var content bytes.Buffer
if err := templates.ExecuteTemplate(&content, string(tpl), data); err != nil {
log.Error(3, "Template: %v", err)
return
}
msg := mailer.NewMessage([]string{u.Email}, subject, body)
msg := mailer.NewMessage([]string{u.Email}, subject, content.String())
msg.Info = fmt.Sprintf("UID: %d, %s", u.ID, info)
mailer.SendAsync(msg)
}
// SendActivateAccountMail sends an activation mail to the user
func SendActivateAccountMail(c *macaron.Context, u *User) {
SendUserMail(c, u, MAIL_AUTH_ACTIVATE, u.GenerateActivateCode(), c.Tr("mail.activate_account"), "activate account")
SendUserMail(c, u, mailAuthActivate, u.GenerateActivateCode(), c.Tr("mail.activate_account"), "activate account")
}
// SendResetPasswordMail sends a password reset mail to the user
func SendResetPasswordMail(c *macaron.Context, u *User) {
SendUserMail(c, u, MAIL_AUTH_RESET_PASSWORD, u.GenerateActivateCode(), c.Tr("mail.reset_password"), "reset password")
SendUserMail(c, u, mailAuthResetPassword, u.GenerateActivateCode(), c.Tr("mail.reset_password"), "reset password")
}
// SendActivateAccountMail sends confirmation email.
// SendActivateEmailMail sends confirmation email.
func SendActivateEmailMail(c *macaron.Context, u *User, email *EmailAddress) {
data := map[string]interface{}{
"Username": u.DisplayName(),
@@ -92,13 +83,15 @@ func SendActivateEmailMail(c *macaron.Context, u *User, email *EmailAddress) {
"Code": u.GenerateEmailActivateCode(email.Email),
"Email": email.Email,
}
body, err := mailRender.HTMLString(string(MAIL_AUTH_ACTIVATE_EMAIL), data)
if err != nil {
log.Error(3, "HTMLString: %v", err)
var content bytes.Buffer
if err := templates.ExecuteTemplate(&content, string(mailAuthActivateEmail), data); err != nil {
log.Error(3, "Template: %v", err)
return
}
msg := mailer.NewMessage([]string{email.Email}, c.Tr("mail.activate_email"), body)
msg := mailer.NewMessage([]string{email.Email}, c.Tr("mail.activate_email"), content.String())
msg.Info = fmt.Sprintf("UID: %d, activate email", u.ID)
mailer.SendAsync(msg)
@@ -109,13 +102,15 @@ func SendRegisterNotifyMail(c *macaron.Context, u *User) {
data := map[string]interface{}{
"Username": u.DisplayName(),
}
body, err := mailRender.HTMLString(string(MAIL_AUTH_REGISTER_NOTIFY), data)
if err != nil {
log.Error(3, "HTMLString: %v", err)
var content bytes.Buffer
if err := templates.ExecuteTemplate(&content, string(mailAuthRegisterNotify), data); err != nil {
log.Error(3, "Template: %v", err)
return
}
msg := mailer.NewMessage([]string{u.Email}, c.Tr("mail.register_notify"), body)
msg := mailer.NewMessage([]string{u.Email}, c.Tr("mail.register_notify"), content.String())
msg.Info = fmt.Sprintf("UID: %d, registration notify", u.ID)
mailer.SendAsync(msg)
@@ -131,13 +126,15 @@ func SendCollaboratorMail(u, doer *User, repo *Repository) {
"RepoName": repoName,
"Link": repo.HTMLURL(),
}
body, err := mailRender.HTMLString(string(MAIL_NOTIFY_COLLABORATOR), data)
if err != nil {
log.Error(3, "HTMLString: %v", err)
var content bytes.Buffer
if err := templates.ExecuteTemplate(&content, string(mailNotifyCollaborator), data); err != nil {
log.Error(3, "Template: %v", err)
return
}
msg := mailer.NewMessage([]string{u.Email}, subject, body)
msg := mailer.NewMessage([]string{u.Email}, subject, content.String())
msg.Info = fmt.Sprintf("UID: %d, add collaborator", u.ID)
mailer.SendAsync(msg)
@@ -152,15 +149,18 @@ func composeTplData(subject, body, link string) map[string]interface{} {
}
func composeIssueMessage(issue *Issue, doer *User, tplName base.TplName, tos []string, info string) *mailer.Message {
subject := issue.MailSubject()
subject := issue.mailSubject()
body := string(markdown.RenderSpecialLink([]byte(issue.Content), issue.Repo.HTMLURL(), issue.Repo.ComposeMetas()))
data := composeTplData(subject, body, issue.HTMLURL())
data["Doer"] = doer
content, err := mailRender.HTMLString(string(tplName), data)
if err != nil {
log.Error(3, "HTMLString (%s): %v", tplName, err)
var content bytes.Buffer
if err := templates.ExecuteTemplate(&content, string(tplName), data); err != nil {
log.Error(3, "Template: %v", err)
}
msg := mailer.NewMessageFrom(tos, fmt.Sprintf(`"%s" <%s>`, doer.DisplayName(), setting.MailService.User), subject, content)
msg := mailer.NewMessageFrom(tos, fmt.Sprintf(`"%s" <%s>`, doer.DisplayName(), setting.MailService.FromEmail), subject, content.String())
msg.Info = fmt.Sprintf("Subject: %s, %s", subject, info)
return msg
}
@@ -171,7 +171,7 @@ func SendIssueCommentMail(issue *Issue, doer *User, tos []string) {
return
}
mailer.SendAsync(composeIssueMessage(issue, doer, MAIL_ISSUE_COMMENT, tos, "issue comment"))
mailer.SendAsync(composeIssueMessage(issue, doer, mailIssueComment, tos, "issue comment"))
}
// SendIssueMentionMail composes and sends issue mention emails to target receivers.
@@ -179,5 +179,5 @@ func SendIssueMentionMail(issue *Issue, doer *User, tos []string) {
if len(tos) == 0 {
return
}
mailer.SendAsync(composeIssueMessage(issue, doer, MAIL_ISSUE_MENTION, tos, "issue mention"))
mailer.SendAsync(composeIssueMessage(issue, doer, mailIssueMention, tos, "issue mention"))
}

View File

@@ -20,13 +20,14 @@ import (
gouuid "github.com/satori/go.uuid"
"gopkg.in/ini.v1"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
)
const _MIN_DB_VER = 4
const minDBVersion = 4
// Migration describes on migration from lower version to high version
type Migration interface {
Description() string
Migrate(*xorm.Engine) error
@@ -37,19 +38,22 @@ type migration struct {
migrate func(*xorm.Engine) error
}
// NewMigration creates a new migration
func NewMigration(desc string, fn func(*xorm.Engine) error) Migration {
return &migration{desc, fn}
}
// Description returns the migration's description
func (m *migration) Description() string {
return m.description
}
// Migrate executes the migration
func (m *migration) Migrate(x *xorm.Engine) error {
return m.migrate(x)
}
// The version table. Should have only one row with id==1
// Version describes the version table. Should have only one row with id==1
type Version struct {
ID int64 `xorm:"pk autoincr"`
Version int64
@@ -57,11 +61,11 @@ type Version struct {
// This is a sequence of migrations. Add new migrations to the bottom of the list.
// If you want to "retire" a migration, remove it from the top of the list and
// update _MIN_VER_DB accordingly
// update minDBVersion accordingly
var migrations = []Migration{
// v0 -> v4: before 0.6.0 -> 0.7.33
NewMigration("fix locale file load panic", fixLocaleFileLoadPanic), // V4 -> V5:v0.6.0
NewMigration("trim action compare URL prefix", trimCommitActionAppUrlPrefix), // V5 -> V6:v0.6.3
NewMigration("trim action compare URL prefix", trimCommitActionAppURLPrefix), // V5 -> V6:v0.6.3
NewMigration("generate issue-label from issue", issueToIssueLabel), // V6 -> V7:v0.6.4
NewMigration("refactor attachment table", attachmentRefactor), // V7 -> V8:v0.6.4
NewMigration("rename pull request fields", renamePullRequestFields), // V8 -> V9:v0.6.16
@@ -72,6 +76,8 @@ var migrations = []Migration{
// v13 -> v14:v0.9.87
NewMigration("set comment updated with created", setCommentUpdatedWithCreated),
NewMigration("create user column diff view style", createUserColumnDiffViewStyle),
}
// Migrate database to current version
@@ -87,7 +93,7 @@ func Migrate(x *xorm.Engine) error {
} else if !has {
// If the version record does not exist we think
// it is a fresh installation and we can skip all migrations.
currentVersion.Version = int64(_MIN_DB_VER + len(migrations))
currentVersion.Version = int64(minDBVersion + len(migrations))
if _, err = x.InsertOne(currentVersion); err != nil {
return fmt.Errorf("insert: %v", err)
@@ -95,19 +101,19 @@ func Migrate(x *xorm.Engine) error {
}
v := currentVersion.Version
if _MIN_DB_VER > v {
log.Fatal(4, `Gogs no longer supports auto-migration from your previously installed version.
if minDBVersion > v {
log.Fatal(4, `Gogs no longer supports auto-migration from your previously installed version.
Please try to upgrade to a lower version (>= v0.6.0) first, then upgrade to current version.`)
return nil
}
if int(v-_MIN_DB_VER) > len(migrations) {
if int(v-minDBVersion) > len(migrations) {
// User downgraded Gogs.
currentVersion.Version = int64(len(migrations) + _MIN_DB_VER)
currentVersion.Version = int64(len(migrations) + minDBVersion)
_, err = x.Id(1).Update(currentVersion)
return err
}
for i, m := range migrations[v-_MIN_DB_VER:] {
for i, m := range migrations[v-minDBVersion:] {
log.Info("Migration: %s", m.Description())
if err = m.Migrate(x); err != nil {
return fmt.Errorf("do migrate: %v", err)
@@ -142,7 +148,7 @@ func fixLocaleFileLoadPanic(_ *xorm.Engine) error {
return nil
}
func trimCommitActionAppUrlPrefix(x *xorm.Engine) error {
func trimCommitActionAppURLPrefix(x *xorm.Engine) error {
type PushCommit struct {
Sha1 string
Message string
@@ -153,7 +159,7 @@ func trimCommitActionAppUrlPrefix(x *xorm.Engine) error {
type PushCommits struct {
Len int
Commits []*PushCommit
CompareUrl string
CompareURL string `json:"CompareUrl"`
}
type Action struct {
@@ -184,11 +190,11 @@ func trimCommitActionAppUrlPrefix(x *xorm.Engine) error {
return fmt.Errorf("unmarshal action content[%d]: %v", actID, err)
}
infos := strings.Split(pushCommits.CompareUrl, "/")
infos := strings.Split(pushCommits.CompareURL, "/")
if len(infos) <= 4 {
continue
}
pushCommits.CompareUrl = strings.Join(infos[len(infos)-4:], "/")
pushCommits.CompareURL = strings.Join(infos[len(infos)-4:], "/")
p, err := json.Marshal(pushCommits)
if err != nil {
@@ -461,27 +467,34 @@ func generateOrgRandsAndSalt(x *xorm.Engine) (err error) {
return sess.Commit()
}
// TAction defines the struct for migrating table action
type TAction struct {
ID int64 `xorm:"pk autoincr"`
CreatedUnix int64
}
// TableName will be invoked by XORM to customrize the table name
func (t *TAction) TableName() string { return "action" }
// TNotice defines the struct for migrating table notice
type TNotice struct {
ID int64 `xorm:"pk autoincr"`
CreatedUnix int64
}
// TableName will be invoked by XORM to customrize the table name
func (t *TNotice) TableName() string { return "notice" }
// TComment defines the struct for migrating table comment
type TComment struct {
ID int64 `xorm:"pk autoincr"`
CreatedUnix int64
}
// TableName will be invoked by XORM to customrize the table name
func (t *TComment) TableName() string { return "comment" }
// TIssue defines the struct for migrating table issue
type TIssue struct {
ID int64 `xorm:"pk autoincr"`
DeadlineUnix int64
@@ -489,99 +502,124 @@ type TIssue struct {
UpdatedUnix int64
}
// TableName will be invoked by XORM to customrize the table name
func (t *TIssue) TableName() string { return "issue" }
// TMilestone defines the struct for migrating table milestone
type TMilestone struct {
ID int64 `xorm:"pk autoincr"`
DeadlineUnix int64
ClosedDateUnix int64
}
// TableName will be invoked by XORM to customrize the table name
func (t *TMilestone) TableName() string { return "milestone" }
// TAttachment defines the struct for migrating table attachment
type TAttachment struct {
ID int64 `xorm:"pk autoincr"`
CreatedUnix int64
}
// TableName will be invoked by XORM to customrize the table name
func (t *TAttachment) TableName() string { return "attachment" }
// TLoginSource defines the struct for migrating table login_source
type TLoginSource struct {
ID int64 `xorm:"pk autoincr"`
CreatedUnix int64
UpdatedUnix int64
}
// TableName will be invoked by XORM to customrize the table name
func (t *TLoginSource) TableName() string { return "login_source" }
// TPull defines the struct for migrating table pull_request
type TPull struct {
ID int64 `xorm:"pk autoincr"`
MergedUnix int64
}
// TableName will be invoked by XORM to customrize the table name
func (t *TPull) TableName() string { return "pull_request" }
// TRelease defines the struct for migrating table release
type TRelease struct {
ID int64 `xorm:"pk autoincr"`
CreatedUnix int64
}
// TableName will be invoked by XORM to customrize the table name
func (t *TRelease) TableName() string { return "release" }
// TRepo defines the struct for migrating table repository
type TRepo struct {
ID int64 `xorm:"pk autoincr"`
CreatedUnix int64
UpdatedUnix int64
}
// TableName will be invoked by XORM to customrize the table name
func (t *TRepo) TableName() string { return "repository" }
// TMirror defines the struct for migrating table mirror
type TMirror struct {
ID int64 `xorm:"pk autoincr"`
UpdatedUnix int64
NextUpdateUnix int64
}
// TableName will be invoked by XORM to customrize the table name
func (t *TMirror) TableName() string { return "mirror" }
// TPublicKey defines the struct for migrating table public_key
type TPublicKey struct {
ID int64 `xorm:"pk autoincr"`
CreatedUnix int64
UpdatedUnix int64
}
// TableName will be invoked by XORM to customrize the table name
func (t *TPublicKey) TableName() string { return "public_key" }
// TDeployKey defines the struct for migrating table deploy_key
type TDeployKey struct {
ID int64 `xorm:"pk autoincr"`
CreatedUnix int64
UpdatedUnix int64
}
// TableName will be invoked by XORM to customrize the table name
func (t *TDeployKey) TableName() string { return "deploy_key" }
// TAccessToken defines the struct for migrating table access_token
type TAccessToken struct {
ID int64 `xorm:"pk autoincr"`
CreatedUnix int64
UpdatedUnix int64
}
// TableName will be invoked by XORM to customrize the table name
func (t *TAccessToken) TableName() string { return "access_token" }
// TUser defines the struct for migrating table user
type TUser struct {
ID int64 `xorm:"pk autoincr"`
CreatedUnix int64
UpdatedUnix int64
}
// TableName will be invoked by XORM to customrize the table name
func (t *TUser) TableName() string { return "user" }
// TWebhook defines the struct for migrating table webhook
type TWebhook struct {
ID int64 `xorm:"pk autoincr"`
CreatedUnix int64
UpdatedUnix int64
}
// TableName will be invoked by XORM to customrize the table name
func (t *TWebhook) TableName() string { return "webhook" }
func convertDateToUnix(x *xorm.Engine) (err error) {
@@ -628,7 +666,7 @@ func convertDateToUnix(x *xorm.Engine) (err error) {
offset := 0
for {
beans := make([]*Bean, 0, 100)
if err = x.Sql(fmt.Sprintf("SELECT * FROM `%s` ORDER BY id ASC LIMIT 100 OFFSET %d",
if err = x.SQL(fmt.Sprintf("SELECT * FROM `%s` ORDER BY id ASC LIMIT 100 OFFSET %d",
table.name, offset)).Find(&beans); err != nil {
return fmt.Errorf("select beans [table: %s, offset: %d]: %v", table.name, offset, err)
}

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