Compare commits

...

158 Commits

Author SHA1 Message Date
Unknwon
58436b5ea5 prepare 0.7.0 2015-11-08 11:08:13 -05:00
Unknwon
d85a1d478e admin op with notice 2015-11-07 20:20:51 -05:00
Unknwon
676d774d88 fix #1902 2015-11-07 00:39:45 -05:00
Unknwon
e7aabf70dc #1905 Triming the issue title 2015-11-06 11:17:46 -05:00
Unknwon
6f929dcd9e #1895 Case sensitive clone URL 2015-11-06 11:14:58 -05:00
Unknwon
54ca0b2f09 #1433 images with links in Markdown
- #1904 minor fix on image link
2015-11-06 11:10:27 -05:00
Unknwon
2bd64621fc #1900 last updatede time not update after push 2015-11-05 19:18:59 -05:00
无闻
05b419b219 Merge pull request #1898 from 0rax/develop
Docker Improvmement and small fix
2015-11-05 15:17:45 -05:00
Unknwon
b163d79a2e DO sponsor 2015-11-05 14:40:22 -05:00
Unknwon
f255b1e86d #1896 fatal when no needed update task 2015-11-04 21:57:10 -05:00
Unknwon
9372eedf2e README 2015-11-04 18:34:08 -05:00
Jean-Philippe Roemer
14a8a46bec Add logging when socat link creation is deactivated 2015-11-04 19:43:25 +00:00
Jean-Philippe Roemer
7679aa1a21 Fix typo & cleanup start.sh code 2015-11-04 19:34:26 +00:00
Jean-Philippe Roemer
9a8aeef478 Add syslog & fix /data/git rights & SOCAT_LINK env var
- Resolve #1893
- Add syslogd to output sshd log on stdout (via `docker logs`)
- Enforce directory rights on `/data/git`, `/data/gogs` & `/data/ssh`
- Add `SOCAT_LINK` environment variable to prevent the creation of scout links when they are not needed (see #1815)
2015-11-04 19:22:15 +00:00
Unknwon
603c7389b8 #1459 Dashboard issues lacks sorting 2015-11-04 12:50:02 -05:00
Unknwon
00eb2b221f fix #1876 2015-11-04 10:16:50 -05:00
Unknwon
1b5e1bebc2 fix #1886 2015-11-04 00:32:25 -05:00
Unknwon
3a81fdf092 rename fields 2015-11-03 22:49:06 -05:00
Unknwon
6f0a41b8b2 #1511 Allow local import only for admin users 2015-11-03 18:40:52 -05:00
Unknwon
25ec20d525 #1838 update merge base before generate new patch 2015-11-03 17:25:39 -05:00
Unknwon
8e262f3ec4 update locales 2015-11-03 14:34:21 -05:00
Unknwon
2cee0f84c0 Revert "fix CI..."
This reverts commit 94b2816446.
2015-11-03 13:19:45 -05:00
Unknwon
94b2816446 fix CI... 2015-11-03 13:15:07 -05:00
Unknwon
8411b50f5d work on #1882 2015-11-03 13:00:04 -05:00
Unknwon
8a87bee434 what's wrong with go tip? 2015-11-03 12:46:23 -05:00
Unknwon
1dfa693a5c fix CI!! 2015-11-03 12:42:21 -05:00
Unknwon
d5b92b61d7 fix CI 2015-11-03 12:29:14 -05:00
Unknwon
a374751eb8 add Makefile 2015-11-03 12:16:43 -05:00
Unknwon
0af035c37e #1078 not show bin when rename a file 2015-11-03 09:52:17 -05:00
Unknwon
bc82157216 fix #1078 2015-11-02 19:55:24 -05:00
Unknwon
8eb4c3121a work on #1880 2015-11-02 18:54:47 -05:00
Unknwon
75aab86a8d fix problem with #1879 2015-11-02 14:01:19 -05:00
Unknwon
92535c9df0 update some libs 2015-11-02 02:00:12 -05:00
无闻
50058b3c6d Merge pull request #1871 from Gibheer/config_minimum_key_sizes
move minimum key sizes to config
2015-11-01 12:39:12 -05:00
Unknwon
b0226a1d05 fix #1831 2015-11-01 12:30:27 -05:00
Unknwon
67ced4aaca safe check 2015-10-31 23:25:08 -04:00
Unknwon
04806b614e more on #1705 2015-10-31 23:22:28 -04:00
Unknwon
cb100c7781 work #1705 2015-10-31 23:18:58 -04:00
Unknwon
5cad124704 fix #1697 2015-10-31 19:10:44 -04:00
Unknwon
fad31ca302 work on #1748 2015-10-31 18:59:07 -04:00
无闻
6b8bef3cf6 Merge pull request #1869 from tjyang/tjyang
adding extra check on logpath
2015-10-31 13:17:02 -04:00
Unknwon
940898a3ff minor fix for #1865 2015-10-31 12:35:26 -04:00
无闻
75fe134072 Merge pull request #1865 from mattarnster/develop
Translation for invalid milestone due date format ISO 8601 fix.
2015-10-31 12:22:29 -04:00
Unknwon
16feb5b655 minor fix on #1863 2015-10-31 12:04:04 -04:00
无闻
659bd29bc5 Merge pull request #1863 from nathan7/go-source-meta
Add go-source directive to repo pages
2015-10-31 11:45:40 -04:00
无闻
91c9069c4d Merge pull request #1862 from nathan7/fix-private
Fix the JSON field names for MigrateRepoForm
2015-10-31 11:14:38 -04:00
T.J. Yang
b992deae92 adding extra check on logpath 2015-10-31 07:32:34 -05:00
Matt Arnold
c7eaf96b37 Translation for invalid milestone due date format ISO 8601 fix. 2015-10-30 14:44:03 +00:00
Nathan Zadoks
4323a89c03 Add go-source directive to repo pages
This makes Gogs repos work with godoc.org: https://github.com/golang/gddo/wiki/Source-Code-Links
2015-10-30 14:00:09 +01:00
Gibheer
b90b0c1191 move minimum key sizes to config
This moves the minimum key sizes into the config file, so that anyone
can modify the restrictions.
2015-10-30 13:53:06 +01:00
Nathan Zadoks
f1aa4c0524 Fix the JSON field names for MigrateRepoForm
For some reason, the field names for Private and Mirror got swapped.
2015-10-30 02:44:45 +01:00
Unknwon
102b675f96 remove test code 😵 2015-10-29 21:19:51 -04:00
Unknwon
073da3c49d #470 fix max length of email 2015-10-29 21:12:41 -04:00
Unknwon
0fe6fe663e fix e-mail type 2015-10-29 21:10:01 -04:00
Unknwon
7d72c8333e work on #470 and fix miror JS issue when choose targets on compare and pull 2015-10-29 21:09:48 -04:00
Unknwon
706b0f72e2 fix issue comment mention and autofix count when start 2015-10-29 20:40:57 -04:00
无闻
1f4beb530c Merge pull request #1858 from ChasingLogic/patch-1
Fixed broken link in README
2015-10-29 16:50:11 -04:00
Mathew Robinson
89bf56a6ac Fixed broken link in README
The link http://gogs.io/docs/intro/ produces a 404 error and is used in the README updated it to http://gogs.io/docs/intro which correctly links to the introductory documentation
2015-10-29 15:34:59 -04:00
无闻
31b375782b Merge pull request #1853 from andreynering/windows-service
Adding simple script to install Gogs as a Windows service.
2015-10-29 13:20:27 -04:00
Andrey Nering
0252629956 Adding simple script to install Gogs as a Windows service. 2015-10-29 08:05:50 -02:00
Unknwon
4f0e31e96d update README 2015-10-29 03:21:59 -04:00
Unknwon
f5689ee3a5 update locale 2015-10-28 02:30:24 -04:00
无闻
a020cf803b Merge pull request #1845 from SergioBenitez/develop
Sanitize input to LDAP authentication module
2015-10-28 02:24:50 -04:00
Sergio Benitez
630ebbe6c2 Sanitizing input to LDAP authentication module. 2015-10-26 18:08:59 -07:00
Unknwon
b9f5def5dc fix insecure tls when trigger task 2015-10-26 09:16:24 -04:00
Unknwon
87c3c8172a #1711 try to indicate sqlite session issue when merge 2015-10-25 18:35:27 -04:00
Unknwon
022820103d #1657 allow forcing all private repos 2015-10-25 04:26:26 -04:00
Unknwon
d5fab7f1b9 update README 2015-10-25 03:30:16 -04:00
Unknwon
c3ba5590c9 Reopen PR need retest patch 2015-10-25 03:10:22 -04:00
无闻
379629d28a Merge pull request #1836 from likeit92/develop
workaround for reverse proxy, ssh, submodule
2015-10-24 16:51:59 -04:00
Matthias Pioch
8b92f9cca6 fix workaround for reverse proxy, ssh, submodule 2015-10-24 22:46:13 +02:00
Matthias Pioch
78a4e71245 workaround for reverse proxy, ssh, submodule 2015-10-24 22:03:08 +02:00
Unknwon
63e6e31271 add config and update locale 2015-10-24 15:35:26 -04:00
Unknwon
2be5837cb0 New push to base repo of base branch: retest all corresponding patches 2015-10-24 14:48:11 -04:00
Unknwon
71d8ff247d update some locales 2015-10-24 03:40:47 -04:00
Unknwon
0fbb8c8826 New push to head repo of head branch: regenerate patch and retest apply 2015-10-24 03:36:47 -04:00
Unknwon
e0aab4a7f6 #1830 new comment with status change overwrites issue content 2015-10-23 12:54:19 -04:00
Unknwon
db7ac8bc1d use notice instead of suspend delete archives 2015-10-23 11:03:15 -04:00
Unknwon
c6ce6bd4c2 work on #1830 2015-10-23 10:31:13 -04:00
Unknwon
b5fdf0947b reduce code 2015-10-22 17:47:08 -04:00
Unknwon
35a65736fa add get repo API 2015-10-22 17:46:07 -04:00
Unknwon
04af4b24fd work on #1818 2015-10-22 14:47:32 -04:00
无闻
a301c7ed26 Merge pull request #1814 from 0rax/develop
Update docker `socat` link creation
2015-10-21 13:08:42 -04:00
Jean-Philippe Roemer
f7c7837fc8 Docker socat link: default port fix
- Remove port 80 & 443 unused by the container
- Add port 3000 used by gogs application
2015-10-21 16:55:55 +01:00
Jean-Philippe Roemer
02289479ef Docker socat link creation
- `start.sh` will now verify that the port is not already used by another service
- Resolve #1807
- Log when a service is created, or could not be created
- Keep track of which port is already used, including goes & sshd port
2015-10-21 16:27:56 +01:00
Unknwon
eac91a74d8 Merge branch 'develop' of github.com:gogits/gogs into develop 2015-10-21 06:40:56 -04:00
Unknwon
f17b746a01 update locale 2015-10-21 06:40:44 -04:00
无闻
d3f67d341f Merge pull request #1811 from likeit92/develop
fix build error with PKGBUILD (archlinux, x64)
2015-10-21 04:50:05 -04:00
Matthias Pioch
0f4f81f1fb fix import path on x64 systems, fix #1795 2015-10-21 09:00:35 +02:00
无闻
d0c17adfea Merge pull request #1809 from likeit92/master
fix build error with PKGBUILD (archlinux)
2015-10-20 18:01:35 -04:00
Matthias Pioch
87c05c386f fix import path, fix #1795 2015-10-20 23:13:06 +02:00
无闻
8fc8848ce2 Merge pull request #1803 from kenno/develop
Fix import path
2015-10-19 10:13:39 -04:00
Soputtra San
1f1abb17e2 Fix import path 2015-10-19 23:43:11 +11:00
Unknwon
fc7959d3bc New/reopen PR checks if there is any unmerged and open PR 2015-10-18 19:30:39 -04:00
Unknwon
4dc6285715 add new status: checking 2015-10-18 17:18:54 -04:00
无闻
9825760817 Merge pull request #1799 from legoktm/patch-1
Simplify disable Gravatar preference wording
2015-10-18 14:16:32 -04:00
Kunal Mehta
9573f9afe9 Simplify disable Gravatar preference wording
"Enable this to disable..." is needlessly confusing, simplify it by being
upfront that this setting disables the Gravatar fetching.
2015-10-17 20:46:52 -07:00
Unknwon
6599869f28 #1790 fast return for too large diff 2015-10-17 17:25:45 -04:00
Unknwon
932dbccb67 fix import path, fix #1782 2015-10-15 21:28:12 -04:00
无闻
a749e6adcf Merge pull request #1778 from limianwang/develop
fix typo in README for Docker
2015-10-13 18:23:44 -04:00
Limian Wang
b854d3ba40 fix typo in README for Docker 2015-10-13 15:22:33 -07:00
Unknwon
6a6e43f964 print out git version 2015-10-13 16:01:57 -04:00
无闻
a42514613f Merge pull request #1767 from 0rax/develop
Fix bug introduced in #1759 preventing ssh server to launch
2015-10-12 17:37:14 -04:00
Jean-Philippe Roemer
9acf02ad7f Fix bug introduced in #1759 preventing ssh server to launch
- ssh/setup: test directive now check if a file exist in key path instead of a folder
- ssh/setup script was hanging waiting for an input about rewriting the key
  as the test case was returning true, when it should have been false
  (check if file is a folder instead of a file)
2015-10-12 22:13:22 +01:00
无闻
5c6df9f31b Merge pull request #1766 from 0rax/develop
Docker repository path backward compatibility fix
2015-10-12 16:59:41 -04:00
Jean-Philippe Roemer
533c6a8e08 Edit comment to make it clear that we are talking about container version 2015-10-12 21:52:20 +01:00
Jean-Philippe Roemer
bfed40eec4 Docker repository path backward compatibility fix:
- resolve #1765
- create link to old git repository path: `/home/git/gogs-repository`
2015-10-12 21:28:26 +01:00
无闻
575300cd57 Merge pull request #1764 from 0rax/develop
Volumed data setup changed to allow #1759
2015-10-12 14:52:08 -04:00
Jean-Philippe Roemer
9cba6ff84b Volumed data setup changed to allow #1759
- Volumed subfolder now created up in the ENTRYPOINT script, this way
  they are created before S6 even starts making VOLUME.
- The subfolder will be created during VOLUME creation too as ENTRYPOINT
  script will be run before /bin/true
- SSH Keys will now be created on a single key basis not replying on the
  existence of /data/ssh folder
2015-10-12 18:46:45 +01:00
Unknwon
570ddefc32 print log every time regulater timezone 2015-10-10 19:04:26 -04:00
无闻
5676fa5b5d Merge pull request #1758 from 0rax/develop
Docker Container Restart Fix
2015-10-10 16:28:59 -04:00
Jean-Philippe Roemer
fc427432ed Docker Container Restart Fix
- Fix s6 fifodir error on container restart
- Add .tags* to .gitignore (Atom auto ctags generation)
2015-10-10 21:03:19 +01:00
无闻
d7f390a3b0 Merge pull request #1757 from alvaroaleman/bugfix/docker_gosu
Update gosu, this fixes #1756
2015-10-10 14:54:05 -04:00
Alvaro Aleman
2671c86ba7 Update gosu, this fixes #1756 2015-10-10 20:48:26 +02:00
Unknwon
f1c2276c8d add log when cannot regulate time 2015-10-09 23:05:20 -04:00
Unknwon
2020bafee1 fix typo 2015-10-09 22:09:07 -04:00
Unknwon
bc2f546023 fix README links 2015-10-09 15:41:08 -04:00
无闻
ef6d12844c Merge pull request #1752 from soudy/develop
fixed dead links in README
2015-10-09 15:26:49 -04:00
Steven Oud
a443fcf33a fixed dead links in README 2015-10-09 11:09:58 +02:00
Unknwon
b5e6af9587 update locale 2015-10-08 22:49:08 -04:00
Unknwon
01dc8f8a4f fix change visivility of non-org does not affect forks 2015-10-08 22:38:42 -04:00
Unknwon
aff49b1c9e unified API error response 2015-10-08 20:36:07 -04:00
无闻
b1941f1da1 Merge pull request #1736 from soudy/develop
Added repository remove option to API
2015-10-08 20:01:56 -04:00
Unknwon
19c3745488 fix quick guide style 2015-10-07 23:11:32 -04:00
Unknwon
ea6c6bc20a work on 1714 2015-10-05 09:54:55 -04:00
Unknwon
db00aa7653 add log for trigger hook when push through SSH 2015-10-05 09:46:00 -04:00
Unknwon
215920772a save PR info as patch and minor fix on PR 2015-10-04 20:54:06 -04:00
Steven Oud
6fe868a4d5 added repository remove option to api 2015-10-04 23:29:23 +02:00
无闻
02d3b66265 Merge pull request #1686 from preovaleo/develop
Fix #1669 on develop
2015-10-03 12:57:24 -04:00
无闻
fe8495e4a5 Merge pull request #1735 from soudy/develop
Add links to forks/watchers/stars in new layout header
2015-10-03 12:46:16 -04:00
Steven Oud
280fde9b7c added links to forks/watchers/stars in new layout header 2015-10-03 18:04:44 +02:00
无闻
79fb24a397 Merge pull request #1732 from 0rax/develop
Docker Container: Init 1 & Initialisation
2015-10-02 20:02:03 -04:00
Unknwon
4465c58f4b new quick start page 2015-10-02 19:58:36 -04:00
Jean-Philippe Roemer
5981f1edcd Remove fixed issue 2015-10-02 23:32:46 +01:00
Jean-Philippe Roemer
ad5e0b833c Docker Container: Init 1 & Initialisation
- Now using a setup script before starting the app. The separation of
the run script and the setup script will make service initialisation a
little bit clearer
- Now calling start.sh script as ENTRYPOINT and S6 as CMD. This way
when running the container with just a shell script, the start.sh
script will be launched before, making debugging easier
- Added note about `.dockerignore` ignored during Docker Hub Automated
Build
2015-10-02 23:13:39 +01:00
无闻
e5310cdbc1 Merge pull request #1731 from ogarcia/develop
Several bugfixes in Docker build
2015-10-02 15:59:10 -04:00
Unknwon
e34d0063c3 Update Docker README for #1708 2015-10-02 15:44:59 -04:00
Óscar García Amor
3e7d8db7a2 Several bugfixes in Docker build
- Removed unnecessary variables
- Fixed symbolic links creation
- Fixed enter point
- Less intermediate containers
2015-10-02 21:18:13 +02:00
无闻
655b69cb1f Merge pull request #1730 from 0rax/develop
New approach to Gogs Docker Container
2015-10-02 11:31:12 -04:00
Jean-Philippe Roemer
fcb1f4ec07 Add bash to the image so bash git hooks can be used 2015-10-02 12:01:02 +01:00
Jean-Philippe Roemer
3cad8d9492 Use app/docker folder for SSH Configureation 2015-10-02 11:31:05 +01:00
Jean-Philippe Roemer
e63e0b3105 New approach to Gogs Docker Container
- VOLUME for ‘/data’
- Usage of S6 as PID 1 Process
- Usage of ‘socat’ so linked container (like databases) are binded to
localhost
- OpenSSH, Socat Link and Gogs are supervised using S6
- Size of container reduced to ~75Mo
2015-10-02 10:56:36 +01:00
无闻
d86c785410 Merge pull request #1725 from soudy/develop
Implemented #1721: see users who forked/starred/watched a repository
2015-10-02 04:55:02 -04:00
kendaru
b05c7b3faa moved routes to RouterRef group 2015-10-02 10:48:31 +02:00
kendaru
5c39d3fa7d changed integrated page number to GET 2015-10-02 10:04:11 +02:00
Unknwon
c60d8bc069 update locales 2015-10-02 02:55:52 -04:00
Steven
87d64acc9f fixed HTML indenting 2015-10-01 16:16:11 +02:00
Steven
c8aa9c6cb1 implemented #1721: see users who forked/starred/watched a repository 2015-10-01 15:51:46 +02:00
Steven
ecd59deb27 implemented #1721: see users who forked/starred/watched a repository 2015-10-01 15:17:27 +02:00
Unknwon
e0a099ec11 fix link again 2015-10-01 01:58:59 -04:00
Unknwon
5af872955b fix README links 2015-10-01 01:58:30 -04:00
无闻
e00268895c Merge pull request #1710 from geerlingguy/patch-1
Set USER env variable so installation can complete successfully.
2015-09-28 14:21:52 -04:00
Jeff Geerling
4a05c4a759 Set USER env variable so installation can complete successfully. 2015-09-26 23:33:53 -05:00
Unknwon
a205acf829 drop go 1.2 support 2015-09-26 17:54:02 -04:00
Théo Bougé
bb7ddb45ff Fix typo 2015-09-25 18:46:50 +02:00
Théo Bougé
939d2054d8 fix typo 2015-09-25 18:45:35 +02:00
Théo Bougé
5a2093b053 fix the restart 2015-09-25 17:58:46 +02:00
Théo BOUGE
2f23cf98ea Fix #1669 2015-09-25 09:51:01 +02:00
159 changed files with 7039 additions and 5159 deletions

View File

@@ -13,7 +13,7 @@ watch_dirs = [
watch_exts = [".go"]
build_delay = 1500
cmds = [
["go", "install", "-tags", "sqlite tidb"],# redis memcache cert pam
["go", "build", "-tags", "sqlite tidb"],
["go", "install", "-tags", "sqlite"],# redis memcache cert pam tidb
["go", "build", "-tags", "sqlite"],
["./gogs", "web"]
]

View File

@@ -1,6 +1,14 @@
.git
.git/
.git/*
conf
conf/
conf/*
packager
packager/
packager/*
scripts
scripts/
scripts/*
*.yml
*.md
@@ -9,4 +17,4 @@ scripts/*
.gitignore
.gopmfile
config.codekit
LICENSE
LICENSE

2
.gitignore vendored
View File

@@ -35,3 +35,5 @@ docker/docker/Dockerfile
docker/docker/init_gogs.sh
gogs.sublime-project
gogs.sublime-workspace
.tags*
release

View File

@@ -3,37 +3,43 @@ path = github.com/gogits/gogs
[deps]
github.com/bradfitz/gomemcache = commit:72a68649ba
github.com/Unknwon/cae = commit:2e70a1351b
github.com/Unknwon/com = commit:47d7d2b81a
github.com/Unknwon/i18n = commit:7457d88830
github.com/Unknwon/macaron = commit:05317cffe5
github.com/Unknwon/paginater = commit:cab2d086fa
github.com/codegangsta/cli = commit:142e6cd241
github.com/codegangsta/cli = commit:70e3fa5
github.com/go-macaron/binding = commit:864a5ce
github.com/go-macaron/cache = commit:5617353
github.com/go-macaron/captcha = commit:875ff77
github.com/go-macaron/csrf = commit:75c2b04
github.com/go-macaron/gzip = commit:4938e9b
github.com/go-macaron/i18n = commit:5e728b6
github.com/go-macaron/inject = commit:c5ab7bf
github.com/go-macaron/session = commit:66031fc
github.com/go-macaron/toolbox = commit:ddfcf96
github.com/go-sql-driver/mysql = commit:527bcd55aa
github.com/go-xorm/core = commit:3e10003353
github.com/go-xorm/xorm = commit:803f6db50c
github.com/go-xorm/xorm = commit:8bf4405
github.com/gogits/chardet = commit:2404f77725
github.com/gogits/go-gogs-client = commit:519eee0af0
github.com/lib/pq = commit:b269bd035a
github.com/macaron-contrib/binding = commit:1935a991f2
github.com/macaron-contrib/cache = commit:a139ea1eee
github.com/macaron-contrib/captcha = commit:9a0a0b1468
github.com/macaron-contrib/csrf = commit:98ddf5a710
github.com/macaron-contrib/i18n = commit:da2b19e90b
github.com/macaron-contrib/session = commit:e48134e803
github.com/macaron-contrib/toolbox = commit:acbfe36e16
github.com/mattn/go-sqlite3 = commit:b808f01f66
github.com/mcuadros/go-version = commit:d52711f8d6
github.com/microcosm-cc/bluemonday = commit:85ba47ef2c
github.com/mssola/user_agent = commit:a163d6a569
github.com/gogits/go-gogs-client = commit:1030bf8
github.com/issue9/identicon = commit:5a61672
github.com/klauspost/compress = commit:0449b1c
github.com/klauspost/cpuid = commit:8d9fe96
github.com/klauspost/crc32 = commit:f8d2e12
github.com/lib/pq = commit:83c4f41
github.com/mattn/go-sqlite3 = commit:5651a9d
github.com/mcuadros/go-version = commit:d52711f
github.com/microcosm-cc/bluemonday = commit:4ac6f27
github.com/mssola/user_agent = commit:783ec61
github.com/msteinert/pam = commit:6534f23b39
github.com/nfnt/resize = commit:dc93e1b98c
github.com/russross/blackfriday = commit:8cec3a854e
github.com/shurcooL/sanitized_anchor_name = commit:244f5ac324
github.com/russross/blackfriday = commit:510be64
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:7457d88830
github.com/Unknwon/paginater = commit:7748a72
golang.org/x/net =
golang.org/x/text =
gopkg.in/gomail.v2 = commit:b1e55520bf
gopkg.in/ini.v1 = commit:e8c222fea7
gopkg.in/gomail.v2 = commit:df6fc79
gopkg.in/ini.v1 = commit:060d7da
gopkg.in/macaron.v1 = commit:1c6dd87
gopkg.in/redis.v2 = commit:e617904962
[res]

View File

@@ -1,17 +1,18 @@
language: go
go:
- 1.2
- 1.3
- 1.4
- 1.5
- tip
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"
notifications:

View File

@@ -42,7 +42,7 @@ There is no standard form of making a feature request. Just try to describe the
### Pull Request
Pull requests are always welcome, but note that **ALL PULL REQUESTS MUST APPLY TO THE `DEV` BRANCH**.
Pull requests are always welcome, but note that **ALL PULL REQUESTS MUST APPLY TO THE `develop` BRANCH**.
We are always thrilled to receive pull requests, and do our best to process them as fast as possible. Not sure if that typo is worth a pull request? Do it! We will appreciate it.

View File

@@ -1,54 +1,22 @@
FROM google/debian:wheezy
MAINTAINER u@gogs.io
FROM alpine:3.2
MAINTAINER roemer.jp@gmail.com
RUN echo "deb http://ftp.debian.org/debian/ wheezy-backports main" >> /etc/apt/sources.list && \
apt-get update -qqy && \
apt-get install --no-install-recommends -qqy \
curl build-essential ca-certificates git \
openssh-server libpam-dev && \
apt-get autoclean && \
apt-get autoremove && \
rm -rf /var/lib/apt/lists/*
# Install system utils & Gogs runtime dependencies
ADD https://github.com/tianon/gosu/releases/download/1.6/gosu-amd64 /usr/sbin/gosu
RUN echo "@edge http://dl-4.alpinelinux.org/alpine/edge/main" | tee -a /etc/apk/repositories \
&& echo "@community http://dl-4.alpinelinux.org/alpine/edge/community" | tee -a /etc/apk/repositories \
&& apk -U --no-progress upgrade \
&& apk -U --no-progress add ca-certificates bash git linux-pam s6@edge curl openssh socat \
&& chmod +x /usr/sbin/gosu
ENV GOROOT /goroot
ENV GOPATH /gopath
ENV PATH $PATH:$GOROOT/bin:$GOPATH/bin
COPY . /gopath/src/github.com/gogits/gogs/
WORKDIR /gopath/src/github.com/gogits/gogs/
# Build binary and clean up useless files
RUN mkdir /goroot && \
curl https://storage.googleapis.com/golang/go1.5.linux-amd64.tar.gz | tar xzf - -C /goroot --strip-components=1 && \
go get -v -tags "sqlite redis memcache cert pam" && \
go build -tags "sqlite redis memcache cert pam" && \
mkdir /app/ && \
mv /gopath/src/github.com/gogits/gogs/ /app/gogs/ && \
rm -r $GOROOT $GOPATH
WORKDIR /app/gogs/
RUN useradd --shell /bin/bash --system --comment gogits git
# SSH login fix, otherwise user is kicked off after login
RUN mkdir /var/run/sshd && \
sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd && \
sed 's@UsePrivilegeSeparation yes@UsePrivilegeSeparation no@' -i /etc/ssh/sshd_config && \
echo "export VISIBLE=now" >> /etc/profile && \
echo "PermitUserEnvironment yes" >> /etc/ssh/sshd_config
# Setup server keys on startup
RUN sed 's@^HostKey@\#HostKey@' -i /etc/ssh/sshd_config && \
echo "HostKey /data/ssh/ssh_host_key" >> /etc/ssh/sshd_config && \
echo "HostKey /data/ssh/ssh_host_rsa_key" >> /etc/ssh/sshd_config && \
echo "HostKey /data/ssh/ssh_host_dsa_key" >> /etc/ssh/sshd_config && \
echo "HostKey /data/ssh/ssh_host_ecdsa_key" >> /etc/ssh/sshd_config && \
echo "HostKey /data/ssh/ssh_host_ed25519_key" >> /etc/ssh/sshd_config
# Prepare data
ENV GOGS_CUSTOM /data/gogs
RUN echo "export GOGS_CUSTOM=/data/gogs" >> /etc/profile
COPY . /app/gogs/
WORKDIR /app/gogs/
RUN ./docker/build.sh
# Configure Docker Container
VOLUME ["/data"]
EXPOSE 22 3000
ENTRYPOINT []
CMD ["./docker/start.sh"]
ENTRYPOINT ["docker/start.sh"]
CMD ["/usr/bin/s6-svscan", "/app/gogs/docker/s6/"]

30
Makefile Normal file
View File

@@ -0,0 +1,30 @@
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)"
TAGS = ""
RELEASE_ROOT = "release"
RELEASE_GOGS = "release/gogs"
NOW = $(shell date -u '+%Y%m%d%I%M%S')
.PHONY: build pack release bindata clean
build:
go install -ldflags '$(LDFLAGS)' -tags '$(TAGS)'
go build -ldflags '$(LDFLAGS)' -tags '$(TAGS)'
pack:
find . -name ".DS_Store" -print0 | xargs -0 rm
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:
go-bindata -o=modules/bindata/bindata.go -ignore="\\.DS_Store|README.md" -pkg=bindata conf/...
clean:
go clean -i ./...

View File

@@ -5,23 +5,23 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?bra
![](public/img/gogs-large-resize.png)
##### Current version: 0.6.15 Beta
##### Current version: 0.7.0 Beta
<table>
<tr>
<td width="33%"><img src="http://gogs.io/imgs/screenshoots/1.png"></td>
<td width="33%"><img src="http://gogs.io/imgs/screenshoots/2.png"></td>
<td width="33%"><img src="http://gogs.io/imgs/screenshoots/3.png"></td>
<td width="33%"><img src="http://gogs.io/img/screenshots/1.png"></td>
<td width="33%"><img src="http://gogs.io/img/screenshots/2.png"></td>
<td width="33%"><img src="http://gogs.io/img/screenshots/3.png"></td>
</tr>
<tr>
<td><img src="http://gogs.io/imgs/screenshoots/4.png"></td>
<td><img src="http://gogs.io/imgs/screenshoots/5.png"></td>
<td><img src="http://gogs.io/imgs/screenshoots/6.png"></td>
<td><img src="http://gogs.io/img/screenshots/4.png"></td>
<td><img src="http://gogs.io/img/screenshots/5.png"></td>
<td><img src="http://gogs.io/img/screenshots/6.png"></td>
</tr>
<tr>
<td><img src="http://gogs.io/imgs/screenshoots/7.png"></td>
<td><img src="http://gogs.io/imgs/screenshoots/8.png"></td>
<td><img src="http://gogs.io/imgs/screenshoots/9.png"></td>
<td><img src="http://gogs.io/img/screenshots/7.png"></td>
<td><img src="http://gogs.io/img/screenshots/8.png"></td>
<td><img src="http://gogs.io/img/screenshots/9.png"></td>
</tr>
</table>
@@ -29,46 +29,47 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?bra
- Due to testing purpose, data of [try.gogs.io](https://try.gogs.io) has been reset in **Jan 28, 2015** and will reset multiple times after. Please do **NOT** put your important data on the site.
- The demo site [try.gogs.io](https://try.gogs.io) is running under `develop` branch.
- :exclamation::exclamation::exclamation:<span style="color: red">You **MUST** read [CONTRIBUTING.md](CONTRIBUTING.md) before you start filing an issue or making a Pull Request, and **MUST** discuss with us on [Gitter](https://gitter.im/gogits/gogs) for UI changes and feature Pull Requests, otherwise it's high possibilities that we are not going to merge it.</span>:exclamation::exclamation::exclamation:
- :bangbang:<span style="color: red">You **MUST** read [CONTRIBUTING.md](CONTRIBUTING.md) before you start filing an issue or making a Pull Request, and **MUST** discuss with us on [Gitter](https://gitter.im/gogits/gogs) for UI changes and feature Pull Requests, otherwise it's high possibilities that we are not going to merge it.</span>:bangbang:
- If you think there are vulnerabilities in the project, please talk privately to **u@gogs.io**. Thanks!
- If you're interested in using APIs, we have experimental support with [documentation](https://github.com/gogits/go-gogs-client/wiki).
- If your team/company is using Gogs and would like to put your logo on [our website](http://gogs.io), contact us by any means.
#### Other language version
- [简体中文](README_ZH.md)
[简体中文](README_ZH.md)
## Purpose
The goal of this project is to make the easiest, fastest, and most painless way to set up a self-hosted Git service. With Go, this can be done via an independent binary distribution across **ALL platforms** that Go supports, including Linux, Mac OS X, and Windows.
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](http://gogs.io/docs/intro/) for project design, known issues, and change log.
- Please see the [Documentation](http://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) or go down to the **Installation -> Install from binary** section!
- Having trouble? Get help with [Troubleshooting](http://gogs.io/docs/intro/troubleshooting.md).
- Having trouble? Get help with [Troubleshooting](http://gogs.io/docs/intro/troubleshooting.html).
- Want to help with localization? Check out the [guide](http://gogs.io/docs/features/i18n.html)!
## Features
- Activity timeline
- SSH/HTTP(S) protocol support
- SMTP/LDAP/reverse proxy authentication support
- Reverse proxy suburl support
- Account/Organization(with team)/Repository management
- Repository/Organization webhooks(including Slack)
- SSH and HTTP/HTTPS protocols
- SMTP/LDAP/Reverse proxy authentication
- Reverse proxy with sub-path
- Account/Organization/Repository management
- Repository/Organization webhooks (including Slack)
- Repository Git hooks/deploy keys
- Add/remove repository collaborators
- Gravatar and custom source support
- Repository issues and pull requests
- Add/Remove repository collaborators
- Gravatar and custom source
- Mail service
- Administration panel
- CI integration: [Drone](https://github.com/drone/drone)
- Supports MySQL, PostgreSQL, SQLite3 and [TiDB](https://github.com/pingcap/tidb)
- Supports MySQL, PostgreSQL, SQLite3 and [TiDB](https://github.com/pingcap/tidb) (experimental)
- Multi-language support ([14 languages](https://crowdin.com/project/gogs))
## System Requirements
- A cheap Raspberry Pi is powerful enough for basic functionality.
- At least 2 CPU cores and 1GB RAM would be the baseline for teamwork.
- 2 CPU cores and 1GB RAM would be the baseline for teamwork.
## Browser Support
@@ -77,13 +78,13 @@ The goal of this project is to make the easiest, fastest, and most painless way
## Installation
Make sure you install the [prerequisites](http://gogs.io/docs/installation/) first.
Make sure you install the [prerequisites](http://gogs.io/docs/installation) first.
There are 5 ways to install Gogs:
- [Install from binary](http://gogs.io/docs/installation/install_from_binary.md)
- [Install from source](http://gogs.io/docs/installation/install_from_source.md)
- [Install from packages](http://gogs.io/docs/installation/install_from_packages.md)
- [Install from binary](http://gogs.io/docs/installation/install_from_binary.html)
- [Install from source](http://gogs.io/docs/installation/install_from_source.html)
- [Install from packages](http://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)
@@ -104,18 +105,26 @@ There are 5 ways to install Gogs:
- [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)
### Product Support
- [Synology](https://www.synology.com) (Docker)
- [One Space](http://www.onespace.cc) (App Store)
## Acknowledgments
- Router and middleware mechanism of [Macaron](https://github.com/Unknwon/macaron).
- Mail Service, modules design is inspired by [WeTalk](https://github.com/beego/wetalk).
- Router and middleware mechanism of [Macaron](https://github.com/go-macaron/macaron).
- Modules design is inspired by [WeTalk](https://github.com/beego/wetalk).
- System Monitor Status is inspired by [GoBlog](https://github.com/fuxiaohei/goblog).
- Thanks [lavachen](http://www.lavachen.cn/) and [Rocker](http://weibo.com/rocker1989) for designing Logo.
- Thanks [Crowdin](https://crowdin.com/project/gogs) for providing open source translation plan.
- Thanks [DigitalOcean](https://www.digitalocean.com) for hosting home and demo sites.
## Contributors
- Ex-team members [@lunny](https://github.com/lunny) and [@fuxiaohei](https://github.com/fuxiaohei).
- 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.

View File

@@ -1,35 +1,36 @@
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 (Go Git Service) 是一款易搭建的自助 Git 服务。
## 开发目的
Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 **所有平台**,包括 Linux、Mac OS X 以及 Windows。
Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 **所有平台**,包括 Linux、Mac OS XWindows 以及 ARM 平台
## 项目概览
- 有关项目设计、已知问题和变更日志,请通过 [使用手册](http://gogs.io/docs/intro/) 查看。
- 有关基本用法和变更日志,请通过 [使用手册](http://gogs.io/docs/intro/) 查看。
- 您可以到 [Trello Board](https://trello.com/b/uxAoeLUl/gogs-go-git-service) 跟随开发团队的脚步。
- 想要先睹为快?通过 [在线体验](https://try.gogs.io/gogs/gogs) 或查看 **安装部署 -> 二进制安装** 小节。
- 使用过程中遇到问题?尝试从 [故障排查](http://gogs.io/docs/intro/troubleshooting.md) 页面获取帮助。
- 使用过程中遇到问题?尝试从 [故障排查](http://gogs.io/docs/intro/troubleshooting.html) 页面获取帮助。
- 希望帮助多国语言界面的翻译吗?请立即访问 [详情页面](http://gogs.io/docs/features/i18n.html)
## 功能特性
- 支持活动时间线
- 支持 SSH/HTTP(S) 协议
- 支持 SMTP/LDAP/反向代理的用户认证
- 支持 SSH 以及 HTTP/HTTPS 协议
- 支持 SMTPLDAP反向代理的用户认证
- 支持反向代理子路径
- 支持用户、组织和仓库管理系统
- 支持仓库和组织级别 Web 钩子(包括 Slack 集成)
- 支持仓库 Git 钩子和部署密钥
- 支持 添加/删除 仓库协作者
- 支持仓库工单Issue和合并请求Pull Request
- 支持添加和删除仓库协作者
- 支持 Gravatar 以及自定义源
- 支持邮件服务
- 支持后台管理面板
- 支持 CI 集成:[Drone](https://github.com/drone/drone)
- 支持 MySQL、PostgreSQL、SQLite3 和 [TiDB](https://github.com/pingcap/tidb) 数据库
- 支持 MySQL、PostgreSQL、SQLite3 和 [TiDB](https://github.com/pingcap/tidb)(实验性支持) 数据库
- 支持多语言本地化([14 种语言]([more](https://crowdin.com/project/gogs))
## 系统要求
@@ -44,27 +45,45 @@ Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自
## 安装部署
在安装 Gogs 之前,您需要先安装 [基本环境](http://gogs.io/docs/installation/)。
在安装 Gogs 之前,您需要先安装 [基本环境](http://gogs.io/docs/installation)。
然后,您可以通过以下 5 种方式来安装 Gogs
- [二进制安装](http://gogs.io/docs/installation/install_from_binary.md)
- [源码安装](http://gogs.io/docs/installation/install_from_source.md)
- [包管理安装](http://gogs.io/docs/installation/install_from_packages.md)
- [二进制安装](http://gogs.io/docs/installation/install_from_binary.html)
- [源码安装](http://gogs.io/docs/installation/install_from_source.html)
- [包管理安装](http://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)
### 使用教程
- [阿里云上 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)
### 产品支持
- [Synology](https://www.synology.com)Docker
- [One Space](http://www.onespace.cc)(应用商店)
## 特别鸣谢
- 基于 [Macaron](https://github.com/Unknwon/macaron) 的路由与中间件机制。
- 基于 [WeTalk](https://github.com/beego/wetalk) 修改的邮件服务和模块设计。
- 基于 [Macaron](https://github.com/go-macaron/macaron) 的路由与中间件机制。
- 基于 [WeTalk](https://github.com/beego/wetalk) 修改的模块设计。
- 基于 [GoBlog](https://github.com/fuxiaohei/goblog) 修改的系统监视状态。
- 感谢 [lavachen](http://www.lavachen.cn/) 和 [Rocker](http://weibo.com/rocker1989) 设计的 Logo。
- 感谢 [Crowdin](https://crowdin.com/project/gogs) 提供免费的开源项目本地化支持。
- 感谢 [DigitalOcean](https://www.digitalocean.com) 提供主站和体验站点的服务器赞助。
## 贡献成员
- 前团队成员 [@lunny](https://github.com/lunny)[@fuxiaohei](https://github.com/fuxiaohei)。
- 前团队成员 [@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) 文件获取公开的翻译人员列表。

View File

@@ -114,7 +114,7 @@ func runCert(ctx *cli.Context) {
SerialNumber: serialNumber,
Subject: pkix.Name{
Organization: []string{"Acme Co"},
CommonName: "Gogs",
CommonName: "Gogs",
},
NotBefore: notBefore,
NotAfter: notAfter,

View File

@@ -5,6 +5,7 @@
package cmd
import (
"crypto/tls"
"fmt"
"os"
"os/exec"
@@ -76,6 +77,43 @@ func fail(userMessage, logMessage string, args ...interface{}) {
log.GitLogger.Fatal(3, logMessage, args...)
}
func handleUpdateTask(uuid string, user *models.User, repoUserName, repoName string) {
task, err := models.GetUpdateTaskByUUID(uuid)
if err != nil {
if models.IsErrUpdateTaskNotExist(err) {
log.GitLogger.Trace("No update task is presented: %s", uuid)
return
}
log.GitLogger.Fatal(2, "GetUpdateTaskByUUID: %v", err)
}
if err = models.Update(task.RefName, task.OldCommitID, task.NewCommitID,
user.Name, repoUserName, repoName, user.Id); err != nil {
log.GitLogger.Error(2, "Update: %v", err)
}
if err = models.DeleteUpdateTaskByUUID(uuid); err != nil {
log.GitLogger.Fatal(2, "DeleteUpdateTaskByUUID: %v", err)
}
// Ask for running deliver hook and test pull request tasks.
reqURL := setting.AppUrl + repoUserName + "/" + repoName + "/tasks/trigger?branch=" +
strings.TrimPrefix(task.RefName, "refs/heads/")
log.GitLogger.Trace("Trigger task: %s", reqURL)
resp, err := httplib.Head(reqURL).SetTLSClientConfig(&tls.Config{
InsecureSkipVerify: true,
}).Response()
if err == nil {
resp.Body.Close()
if resp.StatusCode/100 != 2 {
log.GitLogger.Error(2, "Fail to trigger task: not 2xx response code")
}
} else {
log.GitLogger.Error(2, "Fail to trigger task: %v", err)
}
}
func runServ(c *cli.Context) {
if c.IsSet("config") {
setting.CustomConf = c.String("config")
@@ -161,7 +199,7 @@ func runServ(c *cli.Context) {
fail("Internal error", "UpdateDeployKey: %v", err)
}
} else {
user, err = models.GetUserByKeyId(key.ID)
user, err = models.GetUserByKeyID(key.ID)
if err != nil {
fail("internal error", "Failed to get user by key ID(%d): %v", keyID, err)
}
@@ -200,28 +238,7 @@ func runServ(c *cli.Context) {
}
if requestedMode == models.ACCESS_MODE_WRITE {
tasks, err := models.GetUpdateTasksByUuid(uuid)
if err != nil {
log.GitLogger.Fatal(2, "GetUpdateTasksByUuid: %v", err)
}
for _, task := range tasks {
err = models.Update(task.RefName, task.OldCommitId, task.NewCommitId,
user.Name, repoUserName, repoName, user.Id)
if err != nil {
log.GitLogger.Error(2, "Failed to update: %v", err)
}
}
if err = models.DelUpdateTasksByUuid(uuid); err != nil {
log.GitLogger.Fatal(2, "DelUpdateTasksByUuid: %v", err)
}
}
// Send deliver hook request.
resp, err := httplib.Head(setting.AppUrl + setting.AppSubUrl + repoUserName + "/" + repoName + "/hooks/trigger").Response()
if err == nil {
resp.Body.Close()
handleUpdateTask(uuid, user, repoUserName, repoName)
}
// Update user key activity.

View File

@@ -42,16 +42,14 @@ func runUpdate(c *cli.Context) {
log.GitLogger.Fatal(2, "refName is empty, shouldn't use")
}
uuid := os.Getenv("uuid")
task := models.UpdateTask{
Uuid: uuid,
UUID: os.Getenv("uuid"),
RefName: args[0],
OldCommitId: args[1],
NewCommitId: args[2],
OldCommitID: args[1],
NewCommitID: args[2],
}
if err := models.AddUpdateTask(&task); err != nil {
log.GitLogger.Fatal(2, err.Error())
log.GitLogger.Fatal(2, "AddUpdateTask: %v", err)
}
}

View File

@@ -15,18 +15,19 @@ import (
"path"
"strings"
"github.com/Unknwon/macaron"
"github.com/codegangsta/cli"
"github.com/go-macaron/binding"
"github.com/go-macaron/cache"
"github.com/go-macaron/captcha"
"github.com/go-macaron/csrf"
"github.com/go-macaron/gzip"
"github.com/go-macaron/i18n"
"github.com/go-macaron/session"
"github.com/go-macaron/toolbox"
"github.com/go-xorm/xorm"
"github.com/macaron-contrib/binding"
"github.com/macaron-contrib/cache"
"github.com/macaron-contrib/captcha"
"github.com/macaron-contrib/csrf"
"github.com/macaron-contrib/i18n"
"github.com/macaron-contrib/session"
"github.com/macaron-contrib/toolbox"
"github.com/mcuadros/go-version"
"gopkg.in/ini.v1"
"gopkg.in/macaron.v1"
api "github.com/gogits/go-gogs-client"
@@ -79,13 +80,13 @@ func checkVersion() {
// Check dependency version.
checkers := []VerChecker{
{"github.com/go-xorm/xorm", func() string { return xorm.Version }, "0.4.3.0806"},
{"github.com/go-xorm/xorm", func() string { return xorm.Version }, "0.4.4.1029"},
{"github.com/Unknwon/macaron", macaron.Version, "0.5.4"},
{"github.com/macaron-contrib/binding", binding.Version, "0.1.0"},
{"github.com/macaron-contrib/cache", cache.Version, "0.1.2"},
{"github.com/macaron-contrib/csrf", csrf.Version, "0.0.3"},
{"github.com/macaron-contrib/i18n", i18n.Version, "0.0.7"},
{"github.com/macaron-contrib/session", session.Version, "0.1.6"},
{"github.com/go-macaron/binding", binding.Version, "0.1.0"},
{"github.com/go-macaron/cache", cache.Version, "0.1.2"},
{"github.com/go-macaron/csrf", csrf.Version, "0.0.3"},
{"github.com/go-macaron/i18n", i18n.Version, "0.0.7"},
{"github.com/go-macaron/session", session.Version, "0.1.6"},
{"gopkg.in/ini.v1", ini.Version, "1.3.4"},
}
for _, c := range checkers {
@@ -103,7 +104,7 @@ func newMacaron() *macaron.Macaron {
}
m.Use(macaron.Recovery())
if setting.EnableGzip {
m.Use(macaron.Gziper())
m.Use(gzip.Gziper())
}
if setting.Protocol == setting.FCGI {
m.SetURLPrefix(setting.AppSubUrl)
@@ -223,10 +224,12 @@ func runWeb(ctx *cli.Context) {
m.Group("/repos", func() {
m.Get("/search", v1.SearchRepos)
})
m.Group("", func() {
m.Post("/migrate", bindIgnErr(auth.MigrateRepoForm{}), v1.MigrateRepo)
}, middleware.ApiReqToken())
m.Group("/repos", func() {
m.Post("/migrate", bindIgnErr(auth.MigrateRepoForm{}), v1.MigrateRepo)
m.Combo("/:username/:reponame").Get(v1.GetRepo).
Delete(v1.DeleteRepo)
m.Group("/:username/:reponame", func() {
m.Combo("/hooks").Get(v1.ListRepoHooks).
@@ -234,11 +237,11 @@ func runWeb(ctx *cli.Context) {
m.Patch("/hooks/:id:int", bind(api.EditHookOption{}), v1.EditRepoHook)
m.Get("/raw/*", middleware.RepoRef(), v1.GetRepoRawFile)
m.Get("/archive/*", v1.GetRepoArchive)
}, middleware.ApiRepoAssignment(), middleware.ApiReqToken())
})
}, middleware.ApiRepoAssignment())
}, middleware.ApiReqToken())
m.Any("/*", func(ctx *middleware.Context) {
ctx.HandleAPI(404, "Page not found")
ctx.Error(404)
})
})
}, ignSignIn)
@@ -527,6 +530,9 @@ func runWeb(ctx *cli.Context) {
m.Get("/raw/*", repo.SingleDownload)
m.Get("/commits/*", repo.RefCommits)
m.Get("/commit/*", repo.Diff)
m.Get("/stars", repo.Stars)
m.Get("/watchers", repo.Watchers)
m.Get("/forks", repo.Forks)
}, middleware.RepoRef())
m.Get("/compare/:before([a-z0-9]{40})...:after([a-z0-9]{40})", repo.CompareDiff)
@@ -539,8 +545,8 @@ func runWeb(ctx *cli.Context) {
}, ignSignIn, middleware.RepoAssignment(true, true), middleware.RepoRef())
m.Group("/:reponame", func() {
m.Any("/*", ignSignInAndCsrf, repo.Http)
m.Head("/hooks/trigger", repo.TriggerHook)
m.Any("/*", ignSignInAndCsrf, repo.HTTP)
m.Head("/tasks/trigger", repo.TriggerTask)
})
})
// ***** END: Repository *****

View File

@@ -11,6 +11,12 @@ RUN_MODE = dev
[repository]
ROOT =
SCRIPT_TYPE = bash
; Default ANSI charset
ANSI_CHARSET =
; Force every new repository to be private
FORCE_PRIVATE = false
; Patch test queue length, make it as large as possible
PULL_REQUEST_QUEUE_LENGTH = 10000
[ui]
; Number of repositories that are showed in one explore page
@@ -110,6 +116,16 @@ DISABLE_MINIMUM_KEY_SIZE_CHECK = false
; Enable captcha validation for registration
ENABLE_CAPTCHA = true
; used to filter keys which are too short
[service.minimum_key_sizes]
ED25519 = 256
ECDSA = 256
NTRU = 1087
MCE = 1702
McE = 1702
RSA = 1024
DSA = 1024
[webhook]
; Hook task queue length
QUEUE_LENGTH = 1000

View File

@@ -1 +0,0 @@
Leiningen.gitignore

View File

@@ -1 +0,0 @@
C++.gitignore

View File

@@ -1,20 +1,29 @@
# This file lists all PUBLIC individuals having contributed content to the translation.
# Order of name is meaningless.
# Entries are in alphabetical order.
Akihiro YAGASAKI <yaggytter@momiage.com>
Alexander Steinhöfer <kontakt@lx-s.de>
Alexandre Magno <alexandre.mbm@gmail.com>
Barış Arda Yılmaz <ardayilmazgamer@gmail.com>
Christoph Kisfeld <christoph.kisfeld@gmail.com>
Daniel Speichert <daniel@speichert.pl>
Gregor Santner <gdev@live.de>
Huimin Wang <wanghm2009@hotmail.co.jp>
ilko <email>
Thomas Fanninger <gogs.thomas@fanninger.at>
Łukasz Jan Niemier <lukasz@niemier.pl>
Lafriks <lafriks@gmail.com>
Luc Stepniewski <luc@stepniewski.fr>
Miguel de la Cruz <miguel@mcrx.me>
Marc Schiller <marc@schiller.im>
Morten Sørensen <klim8d@gmail.com>
Natan Albuquerque <natanalbuquerque5@gmail.com>
Akihiro YAGASAKI <yaggytter AT momiage DOT com>
Alexander Steinhöfer <kontakt AT lx-s DOT de>
Alexandre Magno <alexandre DOT mbm AT gmail DOT com>
Andrey Nering <andrey AT nering DOT com DOT br>
Arthur Aslanyan <arthur DOT e DOT aslanyan AT gmail DOT com>
Barış Arda Yılmaz <ardayilmazgamer AT gmail DOT com>
Christoph Kisfeld <christoph DOT kisfeld AT gmail DOT com>
Daniel Speichert <daniel AT speichert DOT pl>
Dmitriy Nogay <me AT catwhocode DOT ga>
Gregor Santner <gdev AT live DOT de>
Hamid Feizabadi <hamidfzm AT gmail DOT com>
Huimin Wang <wanghm2009 AT hotmail DOT co DOT jp>
ilko
Lafriks <lafriks AT gmail DOT com>
Lauri Ojansivu <x AT xet7 DOT org>
Luc Stepniewski <luc AT stepniewski DOT fr>
Marc Schiller <marc AT schiller DOT im>
Miguel de la Cruz <miguel AT mcrx DOT me>
Morten Sørensen <klim8d AT gmail DOT com>
Natan Albuquerque <natanalbuquerque5 AT gmail DOT com>
Odilon Junior <odilon DOT junior93 AT gmail DOT com>
Thomas Fanninger <gogs DOT thomas AT fanninger DOT at>
Tilmann Bach <tilmann AT outlook DOT com>
Vladimir Vissoultchev <wqweto AT gmail DOT com>
YJSoft <yjsoft AT yjsoft DOT pe DOT kr>
Łukasz Jan Niemier <lukasz AT niemier DOT pl>

View File

@@ -148,7 +148,6 @@ forgot_password=Забравена парола
forget_password=Забравена парола?
sign_up_now=Нуждаете се от профил? Регистрирайте се сега.
confirmation_mail_sent_prompt=Ново писмо за потвърждение е изпратено до <b>%s</b>. Моля проверете пощенската си кутия в рамките на следващите %d часа, за да завършите процеса на регистрация.
sign_in_to_account=Влезте с Вашия профил
active_your_account=Активиране на профил
resent_limit_prompt=За съжаление Вие съвсем наскоро изпратихте писмо за активация. Моля изчакайте 3 минути, след което опитайте отново.
has_unconfirmed_mail=Здравейте %s, имате непотвърден адрес на ел. поща (<b>%s</b>). Ако не сте получили писмо за потвърждение или имате нужда да се изпрати ново писмо, моля щракнете бутона по-долу.
@@ -192,6 +191,7 @@ min_size_error=` трябва да съдържа поне %s знака.`
max_size_error=` трябва да съдържа най-много %s знака.`
email_error=` не е валиден адрес на ел. поща.`
url_error=` не е валиден URL адрес.`
include_error=` трябва да съдържа текст '%s'.`
unknown_error=Неизвестна грешка:
captcha_incorrect=Captcha не е потвърдена.
password_not_match=Паролата и потвърждението ѝ не съвпадат.
@@ -334,6 +334,7 @@ repo_name=Име на хранилището
repo_name_helper=Добро име на хранилище е име, състоящо от кратки, запомнящи се и уникални ключови думи.
visibility=Видимост
visiblity_helper=Това хранилище е <span class="ui red text">Частно</span>
visiblity_helper_forced=Административна настройка задължава всички нови хранилища да бъдат <span class="ui red text">Частни</span>
visiblity_fork_helper=(Промяна на тази стойност ще се отрази на всички разклонения)
fork_repo=Разклони хранилището
fork_from=Разклонение от
@@ -359,11 +360,14 @@ migrate_type_helper=Това хранилище ще бъде <span class="text
migrate_repo=Мигрирай хранилище
migrate.clone_address=Адрес за клонирай
migrate.clone_address_desc=Това може да е HTTP/HTTPS/GIT адрес или локален път на сървъра.
migrate.permission_denied=Недостатъчни права за импорт на локални хранилища.
migrate.invalid_local_path=Невалиден път - не съществува или не е директория.
forked_from=разклонено от
fork_from_self=Не можете да разклоните хранилище което си е Ваше!
copy_link=Копирай
copy_link_success=Копирано!
copy_link_error=Натиснете ⌘-C или Ctrl-C за да копирате
click_to_copy=Копиране в клипборда
copied=Успешно копиране
clone_helper=Нуждаете се от помощ при клониране? Посетете <a target="_blank" href="%s">Помощ</a>!
@@ -378,6 +382,8 @@ quick_guide=Бърз справочник
clone_this_repo=Клонирай хранилището
create_new_repo_command=Създай ново хранилище чрез командния ред
push_exist_repo=Предай съществуващо хранилище през командния ред
repo_is_empty=Това хранилище е празно. Моля проверете по-късно пак!
branch=Клон
tree=Дърво
@@ -450,9 +456,9 @@ issues.num_comments=%d коментара
issues.commented_at=`коментира <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.no_content=Все още няма съдържание.
issues.close_issue=Затвори
issues.close_comment_issue=Затвори и коментирай
issues.close_comment_issue=Kоментирай и затвори
issues.reopen_issue=Отвори повторно
issues.reopen_comment_issue=Отвори повторно и коментирай
issues.reopen_comment_issue=Kоментирай и oтвори отново
issues.create_comment=Коментирай
issues.closed_at=`затвори <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`повторно отвори <a id="%[1]s" href="#%[1]s">%[2]s</a>`
@@ -494,10 +500,12 @@ pulls.reopen_to_merge=Моля повторно отворете тази зая
pulls.merged=Обединени
pulls.has_merged=Тази заявка за сливане е обединена успешно!
pulls.data_broken=Данните от тази заявка за сливане са невалидни поради изтрита информация за някое разклонение.
pulls.is_checking=Проверката за конфликт все още е в ход. Моля обновете страницата след малко.
pulls.can_auto_merge_desc=Можете да извършвате авто-обединяване на тази заявка за сливане.
pulls.cannot_auto_merge_desc=Не можете да извършите авто-обединяване, защото съществуват конфликти между ревизиите.
pulls.cannot_auto_merge_helper=Моля, използвайте инструменти на командния ред за да отстраните проблема.
pulls.merge_pull_request=Обедини заявка за сливане
pulls.open_unmerged_pull_exists=`Невъзможно повторно отваряне, защото вече съществува заявка за сливане (#%d) от същото хранилище със същата информация за обединяване, която чака да бъде извършена`
milestones.new=Нов етап
milestones.open_tab=%d отворени
@@ -644,6 +652,7 @@ release.tag_name_already_exist=Издание с това име на марке
[org]
org_name_holder=Име на организацията
org_full_name_holder=Пълно име на организацията
org_name_helper=Добрите имена на организация са кратки и запомнящи се.
create_org=Създай организация
repo_updated=Обновено
@@ -800,6 +809,7 @@ users.edit_account=Редактирай профил
users.is_activated=Този профил е активиран
users.is_admin=Този профил има административни права
users.allow_git_hook=Този профил има разрешение да създава Git куки
users.allow_import_local=Този профил има права за импорт на локални хранилища
users.update_profile=Обнови профила
users.delete_account=Изтрий този профил
users.still_own_repo=Този профил притежава поне едно хранилище. Първо трябва да изтриете хранилището или да го прехвърлите на друг потребител.
@@ -831,7 +841,7 @@ auths.domain=Домейн
auths.host=Сървър
auths.port=Порт
auths.bind_dn=Име (DN) за свръзка
auths.bind_password=Парола за свързка
auths.bind_password=Парола за свръзка
auths.bind_password_helper=Внимание: Тази парола се запазва некриптирана. Моля използвайте потребител, който няма административен достъп.
auths.user_base=База с потребители
auths.user_dn=Име (DN) на потребител

View File

@@ -1,4 +1,4 @@
app_desc=Ein schmerzloser, selbst gehosteter Git-Service, geschrieben in Go
app_desc=Ein einfacher, selbst gehosteter Git-Service, geschrieben in Go
home=Home
dashboard=Übersicht
@@ -37,7 +37,7 @@ settings=Einstellungen
your_profile=Dein Profil
your_settings=Deine Einstellungen
news_feed=News Feed
news_feed=Neuigkeiten
pull_requests=Pull Requests
issues=Issues
@@ -61,16 +61,16 @@ host=Host
user=Benutzer
password=Passwort
db_name=Datenbankname
db_helper=Bitte verwenden InnoDB-Engine mit utf8_general_ci Zeichensatz für MySQL.
db_helper=Bitte verwenden sie die InnoDB-Engine mit utf8_general_ci Zeichensatz für MySQL.
ssl_mode=SSL-Modus
path=Pfad
sqlite_helper=Der Dateipfad für zur SQLite3 oder TiDB Datenbank.
sqlite_helper=Der Dateipfad zur SQLite3 oder TiDB Datenbank.
err_empty_db_path=SQLite3 oder TiDB Datenbankpfad darf nicht leer sein.
err_invalid_tidb_name=Der TiDB Datenbankname darf kein "." und kein "-" enthalten.
no_admin_and_disable_registration=Du kannst die Registrierung nicht deaktivieren, ohne ein Administratorkonto zu erstellen.
err_empty_admin_password=Administrator-Passwort darf nicht leer sein.
err_empty_admin_password=Das Administrator-Passwort darf nicht leer sein.
general_title=Allgemeine Einstellungen von Gogs
general_title=Allgemeine Einstellungen
app_name=Anwendungsname
app_name_helper=Hier den Organisationsnamen einfügen.
repo_path=Repository Root-Verzeichnispfad
@@ -82,7 +82,7 @@ domain_helper=Dies hat Auswirkung auf die SSH clone URLs.
ssh_port=SSH Port
ssh_port_helper=Die Portnummer deines SSH-Servers, lass dieses Feld leer, wenn du SSH deaktivieren möchtest.
http_port=HTTP Port
http_port_helper=Auf dieser Port Nummer ist die Apllikation erreichbar.
http_port_helper=Auf dieser Port Nummer wird Gogs erreichbar sein.
app_url=Anwendungs-URL
app_url_helper=Dies hat Auswirkung auf die HTTP/HTTPS clone URLs und für die E-Mails.
@@ -93,8 +93,8 @@ smtp_from=Von
smtp_from_helper=Absender-Adresse nach RFC 5322. Entweder nur eine E-Mail Adresse oder im folgenden Format: "Name" <email@example.com>.
mailer_user=Sender E-mail
mailer_password=Sender Passwort
register_confirm=Registrierungsbestätigung aktvieren
mail_notify=E-Mail-Benachrichtgung aktivieren
register_confirm=Registrierungsbestätigung aktivieren
mail_notify=E-Mail-Benachrichtigungen aktivieren
server_service_title=Server- und sonstige Diensteinstellungen
offline_mode=Offline-Modus aktivieren
offline_mode_popup=Deaktiviere das CDN auch im Produktionsmodus, alle Dateien werden von diesem Server ausgeliefert.
@@ -111,14 +111,14 @@ admin_title=Konto-Einstellungen für den Administrator
admin_name=Benutzername
admin_password=Passwort
confirm_password=Passwort bestätigen
admin_email=E-Mail
admin_email=Administrator E-Mail
install_gogs=Gogs installieren
test_git_failed=Fehler beim Test des 'git' Kommandos: %v
sqlite3_not_available=Deine Version unterstützt SQLite3 nicht, bitte lade dir die offizielle binäre Version von %s herunter, NICHT die gobuild-Version.
sqlite3_not_available=Ihre Gogs-Version unterstützt kein SQLite3, bitte lade dir die offizielle binäre Version von %s herunter, NICHT die gobuild-Version.
invalid_db_setting=Datenbank-Einstellungen sind nicht korrekt: %v
invalid_repo_path=Repository Root-Verzeichnis ist ungültig: %v
run_user_not_match=Der ausführende Benutzer ist nicht der aktuelle Benutzer: %s -> %s
save_config_failed=Versuche die Konfiguration zu speichern ist fehlgeschlagen: %v
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 du dich für Gogs entschieden hast. Wir wünschen viel Vergnügen damit.
@@ -126,8 +126,8 @@ install_success=Herzlich Willkommen! Wir sind froh, dass du dich für Gogs entsc
uname_holder=Benutzername oder E-Mail
password_holder=Passwort
switch_dashboard_context=Dashboard Kontext wechseln
my_repos=Meine Repositorys
collaborative_repos=Gemeinschaftliche Repositorys
my_repos=Meine Repositories
collaborative_repos=Gemeinschaftliche Repositories
my_orgs=Meine Organisationen
my_mirrors=Meine Spiegel
view_home=%s betrachten
@@ -135,23 +135,22 @@ view_home=%s betrachten
issues.in_your_repos=In deinen Repositories
[explore]
repos=Repositorys
repos=Repositories
[auth]
create_new_account=Neues Konto erstellen
register_hepler_msg=Du hast schon ein Konto? Jetzt anmelden!
social_register_hepler_msg=Du hast schon ein soziales Konto? Jetzt verknüpfen!
register_hepler_msg=Du hast bereits ein Konto? Jetzt anmelden!
social_register_hepler_msg=Du hast bereits ein soziales Konto? Jetzt verknüpfen!
disable_register_prompt=Es tut uns leid, die Registrierung wurde deaktiviert. Bitte wende dich an den Administrator.
disable_register_mail=Es tut uns leid, die Bestätigung der Registrierungs-E-Mail wurde deaktiviert.
remember_me=angemeldet bleiben
remember_me=Angemeldet bleiben
forgot_password=Passwort vergessen
forget_password=Passwort vergessen?
sign_up_now=Du willst ein Konto? Jetzt registrieren!
confirmation_mail_sent_prompt=Eine neue Bestätigungs-E-Mail wurde an <b>%s</b> gesendet. Kontrolliere dein Postfach innerhalb der nächsten %d Stunden, um die Registrierung abzuschließen.
sign_in_to_account=Mit deinem Konto anmelden
active_your_account=Aktiviere dein Konto
resent_limit_prompt=Es tut uns leid, du sendest zu häufig Aktivierungs-E-Mails. Bitte warte 3 Minuten.
has_unconfirmed_mail=Hallo %s, du hast eine unbestätigte E-Mail-Adresse (<b>%s</b>). Wenn du keine Bestätigungs-E-Mail erhalten hast oder eine neue benötigtst, klicke bitte auf den folgenden Button.
has_unconfirmed_mail=Hallo %s, du hast eine unbestätigte E-Mail-Adresse (<b>%s</b>). Wenn du keine Bestätigungs-E-Mail erhalten hast oder eine neue benötigst, klicke bitte auf den folgenden Button.
resend_mail=Hier klicken, um deine Aktivierungs-E-Mail erneut zu versenden
email_not_associate=Diese E-Mail-Adresse ist mit keinem Konto verknüpft.
send_reset_mail=Hier klicken, um die E-Mail zum Passwort-zurücksetzen erneut zu versenden
@@ -185,13 +184,14 @@ AuthName=Authentifizierungsname
AdminEmail=Admin E-mail
require_error=` darf nicht leer sein.`
alpha_dash_error=` kann ausschließlich alphanumerische Zeichen und "-_" enthalten.`
alpha_dash_dot_error=` kann ausschließlich alphanumerische Zeichen und ".-_" enthalten.`
alpha_dash_error=` muss ausschließlich alphanumerische Zeichen und "-_" enthalten.`
alpha_dash_dot_error=` muss ausschließlich alphanumerische Zeichen und ".-_" enthalten.`
size_error=` muss die Größe %s haben.`
min_size_error=` muss mindestens %s Zeichen enthalten.`
max_size_error=` darf höchstens %s Zeichen enthalten.`
email_error=` ist keine gültige E-Mail-Adresse.`
url_error=` ist keine gültige URL.`
include_error=`muss den Substring %s enthalten.`
unknown_error=Unbekannter Fehler:
captcha_incorrect=Captcha stimmt nicht überein.
password_not_match=Die Passwörter stimmen nicht überein.
@@ -215,9 +215,9 @@ auth_failed=Authentifizierung fehlgeschlagen: %v
still_own_repo=Dein Konto besitzt noch Repositories. Diese müssen zuerst gelöscht oder übertragen werden.
still_has_org=Du bist noch Mitglied einer Organisation, bitte lösche zunächst diese Mitgliedschaft.
org_still_own_repo=Diese Organisation besitzt noch Repositorys. Diese müssen zuerst gelöscht oder übertragen werden.
org_still_own_repo=Diese Organisation besitzt noch Repositories. Diese müssen zuerst gelöscht oder übertragen werden.
still_own_user=Diese Authentifizierung wird noch von einigen Benutzern genutzt, diese müssen zuerst gelöscht oder deren Authentifizierung geändert werden.
still_own_user=Diese Authentifizierung wird noch von einigen Benutzern genutzt. Entferne diese zuvor und lösche erneut.
target_branch_not_exist=Ziel-Branch existiert nicht
@@ -225,9 +225,9 @@ target_branch_not_exist=Ziel-Branch existiert nicht
change_avatar=Ändere dein Profilbild auf gravatar.com
change_custom_avatar=Ändere deinen Avatar in den Einstellungen
join_on=Registriert
repositories=Repositorys
repositories=Repositories
activity=Öffentliche Aktivität
followers=Folgen
followers=Followers
starred=Markiert
following=Folgt
@@ -250,13 +250,13 @@ full_name=Vollständiger Name
website=Webseite
location=Standort
update_profile=Profil aktualisieren
update_profile_success=Profil aktualisiert
update_profile_success=Ihr Profil wurde erfolgreich aktualisiert.
change_username=Benutzername geändert
change_username_prompt=Diese Änderung wird sich auf die Linkbezüge zu deinem Account auswirken.
continue=Weiter
cancel=Abbrechen
enable_custom_avatar=Aktiviere benuztzerdefinierten Avatar
enable_custom_avatar=Aktiviere benutzerdefinierten Avatar
enable_custom_avatar_helper=Aktiviere dies, um deinen Avatar nicht von Gravatar zu laden
choose_new_avatar=Neuen Avatar auswählen
update_avatar=Avatar-Einstellung aktualisieren
@@ -269,7 +269,7 @@ old_password=Aktuelles Passwort
new_password=Neues Passwort
retype_new_password=Neues Passwort erneut eingeben
password_incorrect=Aktuelles Passwort ist nicht korrekt.
change_password_success=Passwort geändert. Du kannst dich jetzt mit dem neuen Passwort anmelden.
change_password_success=Passwort geändert. Du kannst dich jetzt mit deinem neuen Passwort anmelden.
emails=E-Mail-Adressen
manage_emails=E-Mail-Adressen verwalten
@@ -287,7 +287,7 @@ add_email_success=Deine neue E-Mail-Adresse wurde erfolgreich hinzugefügt.
manage_ssh_keys=SSH-Schlüssel verwalten
add_key=SSH-Schlüssel hinzufügen
ssh_desc=Dies ist eine Liste aller SSH-Schlüssel, die mit deinem Konto verknüpft sind. Entferne alle Schlüssel, die du nicht kennst.
ssh_desc=Dies ist eine Liste aller SSH-Schlüssel, die mit deinem Konto verknüpft sind. Bitte entferne alle Schlüssel, die dir nicht bekannt sind.
ssh_helper=<strong>Du brauchst Hilfe?</strong> Hier ist eine Anleitung zum <a href="%s">Erzeugen von SSH-Schlüsseln</a> oder <a href="%s">Problemlösen einfacher SSH-Probleme</a>.
add_new_key=SSH-Schlüssel hinzufügen
ssh_key_been_used=Inhalt des öffentlichen Schlüssels wurde verwendet.
@@ -300,44 +300,45 @@ ssh_key_deletion=SSH-Schlüssel entfernen
ssh_key_deletion_desc=Das Löschen dieses SSH-Schlüssels wird alle zugehörigen Zugriffsberechtigungen auf deinen Account entfernen. Möchtest du fortfahren?
ssh_key_deletion_success=SSH-Schlüssel wurde erfolgreich gelöscht!
add_on=Hinzugefügt am
last_used=Zuletzt verwendet auf
last_used=Zuletzt verwendet am
no_activity=Keine neuen Aktivitäten
key_state_desc=Dieser Schlüssel wurde in den letzten 7 Tagen verwendet
token_state_desc=Dieses Token wurde in den letzten 7 Tagen benutzt
manage_social=Verknüpfte soziale Konten verwalten
social_desc=Dies ist eine Liste verknüpfter sozialer Konten. Entferne alle Verknüpfungen, die du nicht kennst.
social_desc=Dies ist eine Liste verknüpfter sozialer Konten. Bitte entferne alle Verknüpfungen, die dir nicht bekannt sind.
unbind=Verknüpfung entfernen
unbind_success=Die Verknüpfung zum sozialen Konto wurde entfernt.
manage_access_token=Verwaltung persönlicher Zugangs-Tokens
generate_new_token=Neues Token erzeugen
tokens_desc=Von dir generierte Tokens können benutzt werden, um auf die Gogs APIs zuzugreifen.
new_token_desc=Momentan erlaubt jedes Token vollen Zugriff auf dein Konto.
generate_new_token=Neuen Token erzeugen
tokens_desc=Von dir generierte Token können benutzt werden, um auf die Gogs APIs zuzugreifen.
new_token_desc=Momentan erlaubt jeder Token vollen Zugriff auf dein Konto.
token_name=Token-Name
generate_token=Token erzeugen
generate_token_succees=Neues Zugangs-Token wurde erstellt! Bitte kopiere dein persönliches Zugangs-Token jetzt. Du wirst es später nicht mehr anzeigen können!
generate_token=Token generieren
generate_token_succees=Neuer Zugangs-Token wurde erstellt! Stelle sicher, dass du den Token kopiert hast, da du ihn später nicht mehr ansehen kannst!
delete_token=Löschen
access_token_deletion=Entfernung von persönlichen Token
access_token_deletion_desc=Das Löschen dieses persönlichen Tokens wird alle zugehörigen Zugriffe der Anwendung entfernen. Möchtest du fortfahren?
delete_token_success=Persönliches Zugriffs-Token wurde erfolgreich entfernt! Vergiss nicht deine Anwendung zu aktualisieren.
delete_token_success=Persönlicher Zugriffs-Token wurde erfolgreich entfernt! Vergiss nicht deine Anwendung zu aktualisieren.
delete_account=Konto löschen
delete_prompt=Diese Aktion wird dein Konto dauerhaft löschen und kann <strong>NICHT</strong> rückgängig gemacht werden!
confirm_delete_account=Löschen
delete_account_title=Account löschen
delete_account_desc=Du bist dabei dieses Konto dauerhaft zu löschen, willst du fortfahren?
delete_account_desc=Du bist dabei dieses Konto dauerhaft zu löschen, möchtest du wirklich fortfahren?
[repo]
owner=Besitzer
repo_name=Repository-Name
repo_name_helper=Gute Repository-Namen sind kurz, einprägsam und <strong>einzigartig</strong>.
visibility=Sichtbarkeit
visiblity_helper=<span class="ui red text">Privates</span> Repository
visiblity_fork_helper=(Eine Änderung dieses Wertes wirk sich auf alle Forks aus)
visiblity_helper=Diese Repository ist <span class="ui red text">Privat</span>
visiblity_helper_forced=Der Administrator hat festgelegt, dass alle neuen Repositories <span class="ui red text">privat</span> sein müssen
visiblity_fork_helper=(Eine Änderung dieses Wertes wirkt sich auf alle Forks aus)
fork_repo=Repository abspalten
fork_from=Abspaltung von
fork_visiblity_helper=Sichtbarkeit von abgespalteten Repositories ist nicht veränderbar
fork_from=Forken von
fork_visiblity_helper=Die Sichtbarkeit von geforkten Repositories ist nicht veränderbar.
repo_desc=Beschreibung
repo_lang=Sprache
repo_lang_helper=.gitignore Dateien auswählen
@@ -353,37 +354,42 @@ mirror_interval=Spiegel-Intervall (in Stunden)
form.name_reserved=Repository-Name '%s' ist bereits vergeben.
form.name_pattern_not_allowed=Repository-Namesmuster '%s' ist nicht zulässig.
need_auth=Authorisierung benötigt
need_auth=Autorisierung benötigt
migrate_type=Migrationstyp
migrate_type_helper=Dieses Repositorie wird ein <span class="text blue">Spiegel sein</span>
migrate_type_helper=Diese Repository wird ein <span class="text blue">Spiegel</span> sein
migrate_repo=Repository migrieren
migrate.clone_address=Adresse kopieren
migrate.clone_address_desc=Das kann eine HTTP/HTTPS/GIT URL oder ein lokaler Serverpfad sein.
migrate.clone_address_desc=Dies kann eine HTTP/HTTPS/GIT URL oder ein lokaler Serverpfad sein.
migrate.permission_denied=Ihnen fehlen die Rechte zum Importieren lokaler Repositorys.
migrate.invalid_local_path=Lokaler Pfad ist ungültig, er existiert nicht oder ist kein Ordner.
forked_from=Geforkt von
fork_from_self=SIe können kein Repository forken, das ihnen gehört!
fork_from_self=Sie können keine Repository forken, welche ihnen gehört!
copy_link=Kopieren
copy_link_success=Kopiert!
copy_link_error=Drücke ⌘-C oder Strg-C zum Kopieren
click_to_copy=In Zwischenablage kopieren
copied=Kopiert OK
clone_helper=Du brauchst Hilfe beim Klonen? Hier gibt es <a target="_blank" href="%s">Hilfe</a>!
unwatch=Beobachtung beenden
unwatch=Nicht mehr beobachten
watch=Beobachten
unstar=Markierung aufheben
star=Markierung
fork=Abspaltung
star=Markieren
fork=Fork
no_desc=Keine Beschreibung
quick_guide=Kurzanleitung
clone_this_repo=Dieses Repository klonen
create_new_repo_command=Erstelle ein neues Repository mittels der Kommandozeile
push_exist_repo=Übertrage ein existierendes Repository von der Kommandozeile
clone_this_repo=Diese Repository klonen
create_new_repo_command=Erstelle eine neue Repository mittels Kommandozeile
push_exist_repo=Übertrage eine existierende Repository von der Kommandozeile
repo_is_empty=Das Repository ist leer, bitte komm später wieder!
branch=Branch
tree=Struktur
branch_and_tags=Branches & Tags
branches=Branches
tags=Markierungen
tags=Tags
issues=Issues
pulls=Pull-Anforderung
labels=Label
@@ -399,12 +405,12 @@ commits.commits=Commits
commits.search=Durchsuche Commits
commits.find=Finden
commits.author=Author
commits.message=Mitteilung
commits.message=Nachricht
commits.date=Datum
commits.older=Älter
commits.newer=Neuer
issues.new=Neues Problem
issues.new=Neuer Issue
issues.new.labels=Labels
issues.new.no_label=Kein Label
issues.new.clear_labels=Labels entfernen
@@ -426,8 +432,8 @@ issues.filter_label=Label
issues.filter_label_no_select=Kein Label gewählt
issues.filter_milestone=Meilenstein
issues.filter_milestone_no_select=Kein ausgewählter Meilenstein
issues.filter_assignee=Beauftragter
issues.filter_assginee_no_select=Kein ausgwählter Zuständiger
issues.filter_assignee=Zuständiger
issues.filter_assginee_no_select=Kein ausgewählter Zuständiger
issues.filter_type=Typ
issues.filter_type.all_issues=Alle Probleme
issues.filter_type.assigned_to_you=Dir zugewiesen
@@ -450,9 +456,9 @@ issues.num_comments=%d Kommentare
issues.commented_at=`kommentiert in <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.no_content=Hier gibt es bis jetzt noch keinen Inhalt.
issues.close_issue=Schließen
issues.close_comment_issue=Schließen und kommentieren
issues.close_comment_issue=Kommentieren und schließen
issues.reopen_issue=Wiedereröffnen
issues.reopen_comment_issue=Wiedereröffnen und kommentieren
issues.reopen_comment_issue=Kommentieren und wiedereröffnen
issues.create_comment=Kommentieren
issues.closed_at=`geschlossen in <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`wiedereröffnet in <a id="%[1]s" href="#%[1]s">%[2]s</a>`
@@ -468,7 +474,7 @@ issues.save=Speichern
issues.label_title=Label Name
issues.label_color=Label Farbe
issues.label_count=%d Labels
issues.label_open_issues=%d offene Probleme
issues.label_open_issues=%d offene Issues
issues.label_edit=Bearbeiten
issues.label_delete=Löschen
issues.label_modify=Label Änderung
@@ -487,17 +493,19 @@ pulls.has_pull_request=`Es existiert bereits eine Pull-Anforderung zwischen dies
pulls.create=Pull Request erstellen
pulls.title_desc=möchte %[1]d Commits von <code>%[2]s</code> nach <code>%[3]s</code> zusammenführen
pulls.merged_title_desc=%[1]d Commits von <code>%[2]s</code> nach <code>%[3]s</code> %[4]s zusammengeführt
pulls.tab_conversation=Unterhaltung
pulls.tab_conversation=Konversation
pulls.tab_commits=Commits
pulls.tab_files=Dateien geändert
pulls.reopen_to_merge=Bitte diese Pull-Anforderung wiedereröffnen, um die Merge-Operation auszuführen.
pulls.merged=Zusammengeführt
pulls.has_merged=Dieser Pull-Request wurde erfolgreich zusammengeführt!
pulls.data_broken=Die Daten dieser Pull-Anforderung sind defekt aufgrund des Löschens von Fork-Informationen.
pulls.is_checking=Die Konfliktprüfung ist in Arbeit. Bitte aktualisiere die Seite in wenigen Momenten.
pulls.can_auto_merge_desc=Du kannst eine Auto-Merge Operation auf diese Pull-Anforderung durchführen.
pulls.cannot_auto_merge_desc=Es kann keine Auto-Merge Operation durchgeführt werden, da es Konflikte zwischen den Commits gibt.
pulls.cannot_auto_merge_helper=Bitte benutze ein Kommandozeilentool, um den Konflikt zu lösen.
pulls.merge_pull_request=Pull-Request zusammenführen
pulls.open_unmerged_pull_exists=`Du kannst die Pull-Anforderung nicht wiedereröffnen, da bereits eine offene Pull-Anforderung (#%d) aus dem selben Repository mit den gleichen Merge-Informationen existiert und auf das Merging wartet.`
milestones.new=Neuer Meilenstein
milestones.open_tab=%d offen
@@ -512,7 +520,7 @@ milestones.title=Titel
milestones.desc=Beschreibung
milestones.due_date=Fälligkeitsdatum (optional)
milestones.clear=Bereinigen
milestones.invalid_due_date_format=Format des Fälligkeitsdatums ist ungültig. Es muss das Format 'Jahr-mm-dd' haben.
milestones.invalid_due_date_format=Format des Fälligkeitsdatums ist ungültig. Es muss das Format 'JJJJ-mm-dd' haben.
milestones.create_success=Meilenstein '%s' wurde erfolgreich erstellt!
milestones.edit=Meilenstein bearbeiten
milestones.edit_subheader=Benutze eine bessere Beschreibung für die Meilensteine, um die Menschen nicht zu verwirren.
@@ -520,7 +528,7 @@ milestones.cancel=Abbrechen
milestones.modify=Meilenstein ändern
milestones.edit_success=Änderungen des Meilensteins '%s' wurden erfolgreich gespeichert!
milestones.deletion=Meilenstein löschen
milestones.deletion_desc=Löschen dieses Meilensteins wird alle zugehörigen Informationen in allen Issues entfernen. Soll fortgefahren werden?
milestones.deletion_desc=Das Löschen dieses Meilensteins wird alle zugehörigen Informationen in allen Issues entfernen. Wirklich fortfahren?
milestones.deletion_success=Meilenstein erfolgreich gelöscht!
settings=Einstellungen
@@ -532,33 +540,33 @@ settings.basic_settings=Grundeinstellungen
settings.danger_zone=Gefahrenzone
settings.site=Offizielle Webseite
settings.update_settings=Einstellungen speichern
settings.change_reponame_prompt=Diese Änderung wirkt sich darauf aus, wie sich Links auf das Repository beziehen.
settings.change_reponame_prompt=Diese Änderung wirkt sich darauf aus, wie sich Links auf Repositories beziehen.
settings.transfer=Besitz übertragen
settings.transfer_desc=Übertrage dieses Repository einem anderen Benutzer oder einer Organisation in der du Admin-Rechte hast.
settings.new_owner_has_same_repo=Neuer Eigentümer hat bereits ein Repository mit dem gleichen Namen.
settings.transfer_desc=Übertrage diese Repository auf einen anderen Benutzer oder eine Organisation in der du Admin-Rechte hast.
settings.new_owner_has_same_repo=Der neue Eigentümer hat bereits ein Repository mit dem gleichen Namen.
settings.delete=Repository löschen
settings.delete_desc=Wenn dieses Repository gelöscht ist, gibt es keinen Weg zurück. Sei dir sicher!
settings.delete_desc=Wenn diese Repository gelöscht ist, gibt es keinen Weg zurück. Bitte sei behutsam.
settings.transfer_notices_1=- Du wirst den Zugang verlieren, wenn der neue Besitzer ein individueller Benutzer ist.
settings.transfer_notices_2=- Du wirst den Zugang behalten, wenn der neue Besitzer eine Organisation ist und du einer der Besitzer bist.
settings.transfer_form_title=Bitte gib die folgenden Informationen ein, um die Operation zu bestätigen:
settings.delete_notices_1=- Diese Operation kann <strong>NICHT</strong> rückgängig gemacht werden.
settings.delete_notices_2=- Die Operation wird alles, was mit diesem Git-Repository verbunden ist, dauerhaft löschen, inklusive der Daten, Issues, Kommentare und Zugriffsrechte von Mitarbeitern.
settings.delete_notices_fork_1=- Wenn dies ein öffentliches Repository ist, werden alle Forks unabhängig nach dem Löschen des Repositorys.
settings.delete_notices_fork_2=- Wenn dies ein privates Repository ist, dann werden gleichzeitig alle Forks entfernt.
settings.delete_notices_fork_3=Wenn alle Forks nach dem Löschen des Repositorys erhalten bleiben sollen, dann muss zuerst die Sichtbarkeit des Repositorys auf öffentlich gesetzt werden.
settings.update_settings_success=Repository-Optionen aktualisiert
settings.delete_notices_2=- Die Operation wird alles, was mit dieser Git-Repository verbunden ist, dauerhaft löschen, inklusive der Daten, Issues, Kommentare und Zugriffsrechte von Benutzern.
settings.delete_notices_fork_1=- Wenn dies eine öffentliche Repository ist, werden nach der Löschung alle Forks unabhängig.
settings.delete_notices_fork_2=- Wenn dies eine private Repository ist, dann werden gleichzeitig alle Forks entfernt.
settings.delete_notices_fork_3=Wenn alle Forks erhalten bleiben sollen, dann muss zuerst die Sichtbarkeit der Repository auf öffentlich gesetzt werden.
settings.update_settings_success=Repository-Optionen aktualisiert.
settings.transfer_owner=Neuer Besitzer
settings.make_transfer=übertragen
settings.transfer_succeed=Repository-Eigentum wurde erfolgreich übertragen.
settings.transfer_succeed=Die Repository wurde erfolgreich übertragen.
settings.confirm_delete=Löschen
settings.add_collaborator=Mitarbeiter hinzufügen
settings.add_collaborator_success=Mitarbeiter hinzugefügt
settings.remove_collaborator_success=Mitarbeiter entfernt
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 dir, externe Dienste zu informieren, wenn etwas bestimmtes in deinem Repository passiert. Gogs sendet dann einen POST-Request an alle angegebenen URLs. Erfahre mehr in unserem <a target="_blank" href="%s">Webhooks Guide</a>.
settings.hooks_desc=Webhooks erlauben es dir, externe Dienste zu informieren, wenn etwas bestimmtes in deiner Repository passiert. Gogs sendet dann einen POST-Request an alle angegebenen URLs. Erfahre mehr in unserer <a target="_blank" href="%s">Webhooks Guide</a>.
settings.webhook_deletion=Webhook entfernen
settings.webhook_deletion_desc=Löschen dieses Webhooks wird alle zugehörigen Informationen und den Übertragungsverlauf entfernen. Soll fortgefahren werden?
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!
settings.webhook.request=Anfrage
settings.webhook.response=Rückmeldung
@@ -566,7 +574,7 @@ settings.webhook.headers=Kopfzeilen
settings.webhook.payload=Nutzdaten
settings.webhook.body=Inhalt
settings.githooks_desc=Git-Hooks werden von Git selbst bereitgestellt. Du kannst die Dateien der unterstützten Hooks in der Liste unten bearbeiten, um eigene Operationen einzubinden.
settings.githook_edit_desc=Wenn ein Hook nicht aktiv ist, wird der Standardinhalt benutzt. Lasse den Inhalt leer, um den Hook zu deaktivieren.
settings.githook_edit_desc=Wenn ein Hook inaktiv ist, wird der Standardinhalt benutzt. Lasse den Inhalt leer, um den Hook zu deaktivieren.
settings.githook_name=Hook-Name
settings.githook_content=Hook-Inhalt
settings.update_githook=Aktualisiere Hook
@@ -584,30 +592,30 @@ settings.event_choose=Lass mich auswählen, was ich brauche.
settings.event_create=Erstellen
settings.event_create_desc=Branch/Tag erstellt
settings.event_push=Push
settings.event_push_desc=Git push auf ein Repository
settings.event_push_desc=Git push auf eine Repository
settings.active=Aktiv
settings.active_helper=Ereignisdetails werden ausgeliefert, wenn dieser Webhook ausgelöst wird.
settings.add_hook_success=Webhook hinzugefügt
settings.update_webhook=Webhook aktualisieren
settings.update_hook_success=Webhook aktualisiert
settings.update_hook_success=Webhook wurde aktualisiert.
settings.delete_webhook=Webhook löschen
settings.recent_deliveries=letzte Zustellungen
settings.hook_type=Hook Typ
settings.add_slack_hook_desc=Füge <a href="%s">Slack</a>-Integration zu deinem Repository hinzu.
settings.add_slack_hook_desc=Füge <a href="%s">Slack</a>-Integration zu deiner Repository hinzu.
settings.slack_token=Token
settings.slack_domain=Domain
settings.slack_channel=Kanal
settings.deploy_keys=Deploy-Keys
settings.add_deploy_key=Deploy-Schlüssel hinzufügen
settings.add_deploy_key=Deploy-Key hinzufügen
settings.no_deploy_keys=Du hast noch keine Deploy-Schlüssel hinzugefügt.
settings.title=Titel
settings.deploy_key_content=Inhalt
settings.key_been_used=Deploy-Schlüssel wurde verwendet.
settings.key_name_used=Deploy-Schlüssel mit diesem Namen existiert bereits.
settings.key_name_used=Ein Deploy-Schlüssel mit diesem Namen existiert bereits.
settings.add_key_success=Der Deploy-Schlüssel '%s' wurde erfolgreich hinzugefügt!
settings.deploy_key_deletion=Deploy-Schlüssel löschen
settings.deploy_key_deletion_desc=Nach der Löschung dieses Deploy-Schlüssels werden zugehörige Zugriffe auf das Repository nicht mehr möglich sein. Möchtest du fortfahren?
settings.deploy_key_deletion_success=Deploy-Schlüssel wurde erfolgreich gelöscht!
settings.deploy_key_deletion=Deploy-Key löschen
settings.deploy_key_deletion_desc=Nach der Löschung dieses Deploy-Keys werden zugehörige Zugriffe auf diese Repository nicht mehr möglich sein. Möchtest du wirklich fortfahren?
settings.deploy_key_deletion_success=Deploy-Key wurde erfolgreich gelöscht!
diff.browse_source=Quellcode durchsuchen
diff.parent=Ursprung
@@ -644,6 +652,7 @@ release.tag_name_already_exist=Ein Release mit diesem Tag existiert bereits.
[org]
org_name_holder=Name der Organisation
org_full_name_holder=Vollständiger Name der Organisation
org_name_helper=Gute Namen von Organisationen sind kurz und einprägsam.
create_org=Organisation erstellen
repo_updated=Aktualisiert
@@ -651,7 +660,7 @@ people=Personen
invite_someone=Benutzer einladen
teams=Teams
lower_members=Mitglieder
lower_repositories=Repositorys
lower_repositories=Repositories
create_new_team=Neues Team erstellen
org_desc=Beschreibung
team_name=Teamname
@@ -678,7 +687,7 @@ settings.delete_prompt=Die Organisation wird dauerhaft gelöscht. Dies kann <str
settings.confirm_delete_account=Löschen
settings.delete_org_title=Organisation löschen
settings.delete_org_desc=Diese Organisation wird dauerhaft gelöscht, möchtest du fortfahren?
settings.hooks_desc=Füge Webhooks hinzu, die für <strong>alle</strong> Repositorys dieser Organisation ausgelöst werden.
settings.hooks_desc=Füge Webhooks hinzu, die für <strong>alle</strong> Repositories dieser Organisation ausgelöst werden.
members.public=Öffentlich
members.public_helper=Privat machen
@@ -697,7 +706,7 @@ teams.leave=Verlassen
teams.read_access=Lesezugriff
teams.read_access_helper=Dieses Team wird Repositorys einsehen und klonen können.
teams.write_access=Schreibzugriff
teams.write_access_helper=Dieses Team wird die Repositorys einsehen und in sie hinein pushen können.
teams.write_access_helper=Dieses Team wird die Repositories einsehen und Push Operationen ausführen können.
teams.admin_access=Adminzugriff
teams.admin_access_helper=Dieses Team wird pull- und push-Rechte für die Repositorys haben und Mitarbeiter einladen können.
teams.no_desc=Dieses Team hat keine Beschreibung
@@ -710,13 +719,13 @@ teams.add_team_member=Teammitglied hinzufügen
teams.delete_team_title=Team löschen
teams.delete_team_desc=Dieses Team wird gelöscht, möchtest du fortfahren? Mitglieder dieses Teams verlieren möglicherweise ihren Zugang zu einigen Repositories.
teams.delete_team_success=Team gelöscht
teams.read_permission_desc=Dieses Team hat <strong>Lesezugriff</strong>: Mitglieder können Team-Repositories einsehen und klonen.
teams.write_permission_desc=Dieses Team erlaubt <strong>Schreibzugriff</strong>: Mitglieder können Team-Repositorys einsehen und hinein pushen.
teams.read_permission_desc=Dieses Team erlaubt <strong>Lesezugriff</strong>: Mitglieder können Team-Repositories einsehen und klonen.
teams.write_permission_desc=Dieses Team erlaubt <strong>Schreibzugriff</strong>: Mitglieder können Team-Repositories einsehen und Push Operationen ausführen.
teams.admin_permission_desc=Diese Team erlaubt <strong>Adminzugriff</strong>: Mitglieder dieses Teams können pullen, pushen und dem Team Mitarbeiter hinzufügen.
teams.repositories=Team-Repositorys
teams.add_team_repository=Team-Repository hinzufügen
teams.remove_repo=Entfernen
teams.add_nonexistent_repo=Das Repository, das du hinzufügen willst, existiert nicht. Bitte erstelle es zuerst.
teams.add_nonexistent_repo=Die Repository, welche du hinzufügen möchtest, existiert nicht. Bitte erstelle diese zuerst.
[admin]
dashboard=Dashboard
@@ -743,11 +752,11 @@ dashboard.clean_unbind_oauth_success=Alle ungebundenen OAuth-Tokens wurden gelö
dashboard.delete_inactivate_accounts=inaktive Konten löschen
dashboard.delete_inactivate_accounts_success=Alle inaktiven Konten wurden erfolgreich gelöscht.
dashboard.delete_repo_archives=Alle Repository-Archive löschen
dashboard.delete_repo_archives_success=Alle Repositoriy-Archive wurden gelöscht.
dashboard.delete_repo_archives_success=Alle Repository-Archive wurden gelöscht.
dashboard.git_gc_repos=Führe Garbage Collection auf Repositories aus
dashboard.git_gc_repos_success=Garbage Collection wurde auf allen Repositories erfolgreich ausgeführt.
dashboard.resync_all_sshkeys=Überschreibe '.ssh/authorized_keys' Datei (Warnung: Keys, die nicht zu Gogs gehören werden verloren gehen)
dashboard.resync_all_sshkeys_success=Alle öffentlichen Keys sind erfolgreich neu geschrieben worden.
dashboard.resync_all_sshkeys=Überschreibe '.ssh/authorized_keys' Datei (Warnung: Keys, die nicht zu Gogs gehören gehen verloren)
dashboard.resync_all_sshkeys_success=Alle öffentlichen Keys wurden erfolgreich neu geschrieben.
dashboard.resync_all_update_hooks=Überschreibe alle Hooks der Repositories (benötigt, wenn sich der Pfad in der Konfiguration ändert)
dashboard.resync_all_update_hooks_success=Die Hooks aller Repositories sind erfolgreich neu geschrieben worden.
@@ -776,8 +785,8 @@ dashboard.gc_metadata_obtained=erhaltene GC-Metadata
dashboard.other_system_allocation_obtained=andere erhaltene System-Allokatoren
dashboard.next_gc_recycle=nächster GC-Zyklus
dashboard.last_gc_time=seit letztem GC-Zyklus
dashboard.total_gc_time=gesammte GC-Zeit
dashboard.total_gc_pause=gesammte GC-Pause
dashboard.total_gc_time=gesamte GC-Zeit
dashboard.total_gc_pause=gesamte GC-Pause
dashboard.last_gc_pause=letzte GC-Pause
dashboard.gc_times=GC-Takt
@@ -788,18 +797,19 @@ users.activated=Aktiviert
users.admin=Admin
users.repos=Repositorys
users.created=Erzeugt
users.send_register_notify=Send Registration Notification To User
users.send_register_notify=Sende Registrierungsbenachrichtigung an Benutzer
users.new_success=Der neue Account '%s' wurde erfolgreich erstellt.
users.edit=Bearbeiten
users.auth_source=Authentifizierungsquelle
users.local=Lokal
users.auth_login_name=Authentifizierung-Loginnname
users.password_helper=Leer lassen um es unverändert zu lassen.
users.update_profile_success=Kontoprofil aktualisiert
users.update_profile_success=Kontoprofil wurde erfolgreich aktualisiert.
users.edit_account=Konto bearbeiten
users.is_activated=Dieses Konto ist aktiviert
users.is_admin=Dieses Konto hat Administratorrechte
users.allow_git_hook=Dieses Konto ist berechtigt, Git-Hooks zu erstellen
users.allow_import_local=Dieses Konto ist berechtigt, lokale Repositorys zu importieren
users.update_profile=Kontoprofil aktualisieren
users.delete_account=Dieses Konto löschen
users.still_own_repo=Dieses Konto besitzt noch Repositories. Diese müssen zuerst gelöscht oder übertragen werden.
@@ -832,7 +842,7 @@ auths.host=Host
auths.port=Port
auths.bind_dn=DN binden
auths.bind_password=Passwort binden
auths.bind_password_helper=Warnung: Das Passwort wird im Plaintext gespeichert. Benutze keinen Account mit hohen Zugriffsrechten.
auths.bind_password_helper=Warnung: Das Passwort wird im Klartext gespeichert. Benutze keinen Account mit hohen Zugriffsrechten.
auths.user_base=Benutzer-Such-Basis
auths.user_dn=Benutzer DN
auths.attribute_name=Vorname Attribut

View File

@@ -111,7 +111,7 @@ admin_title = Admin Account Settings
admin_name = Username
admin_password = Password
confirm_password = Confirm Password
admin_email = E-mail
admin_email = Admin E-mail
install_gogs = Install Gogs
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.
@@ -148,7 +148,6 @@ forgot_password= Forgot Password
forget_password = Forgot password?
sign_up_now = Need an account? Sign up now.
confirmation_mail_sent_prompt = A new confirmation e-mail has been sent to <b>%s</b>, please check your inbox within the next %d hours to complete the registration process.
sign_in_to_account = Sign in to your account
active_your_account = Activate Your Account
resent_limit_prompt = Sorry, you already requested an activation email recently. Please wait 3 minutes then try again.
has_unconfirmed_mail = Hi %s, you have an unconfirmed e-mail address (<b>%s</b>). If you haven't received a confirmation e-mail or need to resend a new one, please click on the button below.
@@ -192,6 +191,7 @@ min_size_error = ` must contain at least %s characters.`
max_size_error = ` must contain at most %s characters.`
email_error = ` is not a valid e-mail address.`
url_error = ` is not a valid URL.`
include_error = ` must contain substring '%s'.`
unknown_error = Unknown error:
captcha_incorrect = Captcha didn't match.
password_not_match = Password and confirm password are not same.
@@ -257,7 +257,7 @@ continue = Continue
cancel = Cancel
enable_custom_avatar = Enable Custom Avatar
enable_custom_avatar_helper = Enable this to disable fetch from Gravatar
enable_custom_avatar_helper = Disable fetch from Gravatar
choose_new_avatar = Choose new avatar
update_avatar = Update Avatar Setting
uploaded_avatar_not_a_image = Uploaded file is not a image.
@@ -334,6 +334,7 @@ repo_name = Repository Name
repo_name_helper = A good repository name is usually composed of short, memorable and unique keywords.
visibility = Visibility
visiblity_helper = This repository is <span class="ui red text">Private</span>
visiblity_helper_forced = Site admin has forced all new repositories to be <span class="ui red text">Private</span>
visiblity_fork_helper = (Change of this value will affect all forks)
fork_repo = Fork Repository
fork_from = Fork From
@@ -359,11 +360,14 @@ migrate_type_helper = This repository will be a <span class="text blue">mirror</
migrate_repo = Migrate Repository
migrate.clone_address = Clone Address
migrate.clone_address_desc = This can be a HTTP/HTTPS/GIT URL or local server path.
migrate.permission_denied = You are not allowed to import local repositories.
migrate.invalid_local_path = Invalid local path, it does not exist or not a directory.
forked_from = forked from
fork_from_self = You cannot fork repository you already owned!
copy_link = Copy
copy_link_success = Copied!
copy_link_error = Press ⌘-C or Ctrl-C to copy
click_to_copy = Copy to clipboard
copied = Copied OK
clone_helper = Need help cloning? Visit <a target="_blank" href="%s">Help</a>!
@@ -378,6 +382,8 @@ quick_guide = Quick Guide
clone_this_repo = Clone this repository
create_new_repo_command = Create a new repository on the command line
push_exist_repo = Push an existing repository from the command line
repo_is_empty = This repository is empty, please come back later!
branch = Branch
tree = Tree
@@ -450,9 +456,9 @@ issues.num_comments = %d comments
issues.commented_at = `commented <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.no_content = There is no content yet.
issues.close_issue = Close
issues.close_comment_issue = Close and comment
issues.close_comment_issue = Comment and close
issues.reopen_issue = Reopen
issues.reopen_comment_issue = Reopen and comment
issues.reopen_comment_issue = Comment and reopen
issues.create_comment = Comment
issues.closed_at = `closed <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at = `reopened <a id="%[1]s" href="#%[1]s">%[2]s</a>`
@@ -494,10 +500,12 @@ pulls.reopen_to_merge = Please reopen this pull request to perform merge operati
pulls.merged = Merged
pulls.has_merged = This pull request has been merged successfully!
pulls.data_broken = Data of this pull request has been broken due to deletion of fork information.
pulls.is_checking = The conflict checking is still in progress, please refresh page in few moments.
pulls.can_auto_merge_desc = You can perform auto-merge operation on this pull request.
pulls.cannot_auto_merge_desc = You can't perform auto-merge operation because there are conflicts between commits.
pulls.cannot_auto_merge_helper = Please use command line tool to solve it.
pulls.merge_pull_request = Merge Pull Request
pulls.open_unmerged_pull_exists = `You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
milestones.new = New Milestone
milestones.open_tab = %d Open
@@ -512,7 +520,7 @@ milestones.title = Title
milestones.desc = Description
milestones.due_date = Due Date (optional)
milestones.clear = Clear
milestones.invalid_due_date_format = Due date format is invalid, must be 'year-mm-dd'.
milestones.invalid_due_date_format = Due date format is invalid, must be 'yyyy-mm-dd'.
milestones.create_success = Milestone '%s' has been created successfully!
milestones.edit = Edit Milestone
milestones.edit_subheader = Use better description for milestones so people won't be confused.
@@ -644,6 +652,7 @@ release.tag_name_already_exist = Release with this tag name has already existed.
[org]
org_name_holder = Organization Name
org_full_name_holder = Organization Full Name
org_name_helper = Great organization names are short and memorable.
create_org = Create Organization
repo_updated = Updated
@@ -800,6 +809,7 @@ users.edit_account = Edit Account
users.is_activated = This account is activated
users.is_admin = This account has administrator permissions
users.allow_git_hook = This account has permissions to create Git hooks
users.allow_import_local = This account has permissions to import local repositories
users.update_profile = Update Account Profile
users.delete_account = Delete This Account
users.still_own_repo = This account still has ownership over at least one repository, you have to delete or transfer them first.

View File

@@ -111,7 +111,7 @@ admin_title=Configuración de la Cuenta de Administrador
admin_name=Nombre de usuario
admin_password=Contraseña
confirm_password=Confirmar Contraseña
admin_email=Correo electrónico
admin_email=Admin E-mail
install_gogs=Instalar Gogs
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.
@@ -148,7 +148,6 @@ forgot_password=He olvidado mi contraseña
forget_password=¿Has olvidado tu contraseña?
sign_up_now=¿Necesitas una cuenta? Regístrate ahora.
confirmation_mail_sent_prompt=Un nuevo correo de confirmación se ha enviado a <b>%s</b>. Por favor, comprueba tu bandeja de entrada en las siguientes %d horas para completar el proceso de registro.
sign_in_to_account=Inicie sesión en su cuenta
active_your_account=Activa tu cuenta
resent_limit_prompt=Lo sentimos, estás solicitando el reenvío del mail de activación con demasiada frecuencia. Por favor, espera 3 minutos.
has_unconfirmed_mail=Hola %s, tu correo electrónico (<b>%s</b>) no está confirmado. Si no has recibido un correo de confirmación o necesitas que lo enviemos de nuevo, por favor, haz click en el siguiente botón.
@@ -192,6 +191,7 @@ min_size_error=` debe contener al menos %s caracteres.`
max_size_error=` debe contener como máximo %s caracteres.`
email_error=` no es una dirección de correo válida.`
url_error=` no es una URL válida.`
include_error=` must contain substring '%s'.`
unknown_error=Error desconocido:
captcha_incorrect=El captcha no es válido.
password_not_match=La contraseña de confirmación no coincide.
@@ -334,6 +334,7 @@ repo_name=Nombre del Repositorio
repo_name_helper=Los grandes nombres de repositorios son cortos, memorables y <strong>únicos</strong>.
visibility=Visibilidad
visiblity_helper=Este repositorio es <span class="ui red text">Privado</span>
visiblity_helper_forced=Site admin has forced all new repositories to be <span class="ui red text">Private</span>
visiblity_fork_helper=(Este cambio afectará a todos los forks)
fork_repo=Hacer Fork del repositorio
fork_from=Crear un Fork desde
@@ -359,11 +360,14 @@ migrate_type_helper=Este repositorio será un <span class="text blue">mirror</sp
migrate_repo=Migrar Repositorio
migrate.clone_address=Clonar Dirección
migrate.clone_address_desc=Puede ser una URL HTTP/HTTPS/GIT o una ruta local del servidor.
migrate.permission_denied=You are not allowed to import local repositories.
migrate.invalid_local_path=Rutal local inválida, no existe o no es un directorio.
forked_from=forked de
fork_from_self=Eres el propietario del repositorio, ¡no puedes hacer fork!
copy_link=Copiar
copy_link_success=Copiado!
copy_link_error=Presione ⌘ + C o Ctrl-C para copiar
click_to_copy=Copiar al portapapeles
copied=Copiado correctamente
clone_helper=¿Necesitas ayuda con el clone? ¡Consulta la <a target="_blank" href="%s">Ayuda</a>!
@@ -378,6 +382,8 @@ quick_guide=Guía Rápida
clone_this_repo=Clonar este repositorio
create_new_repo_command=Crear un nuevo repositorio desde línea de comandos
push_exist_repo=Hacer Push de un repositorio existente desde línea de comandos
repo_is_empty=This repository is empty, please come back later!
branch=Rama
tree=Árbol
@@ -450,9 +456,9 @@ issues.num_comments=%d comentarios
issues.commented_at=`comentada <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.no_content=Aun no existe contenido.
issues.close_issue=Cerrar
issues.close_comment_issue=Cerrar y Comentar
issues.close_comment_issue=Comentar y cerrar
issues.reopen_issue=Reabrir
issues.reopen_comment_issue=Reabrir y Comentar
issues.reopen_comment_issue=Comentar y reabrir
issues.create_comment=Comentar
issues.closed_at=`cerrada <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`reabierta <a id="%[1]s" href="#%[1]s">%[2]s</a>`
@@ -494,10 +500,12 @@ pulls.reopen_to_merge=Por favor reabra este pull request para proceder con la op
pulls.merged=Fuisionado
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=The conflict checking is still in progress, please refresh page in few moments.
pulls.can_auto_merge_desc=Puede realizar la operación auto-fusionado en este pull request.
pulls.cannot_auto_merge_desc=No puede realizar la operación de auto-fusionado porque existen conflictos entre los commits.
pulls.cannot_auto_merge_helper=Por favor use la línea de comandos para resolverlo.
pulls.merge_pull_request=Fusionar Pull Request
pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
milestones.new=Nuevo Milestone
milestones.open_tab=%d abiertas
@@ -512,7 +520,7 @@ milestones.title=Título
milestones.desc=Descripción
milestones.due_date=Fecha límite (opcional)
milestones.clear=Eliminar
milestones.invalid_due_date_format=El formato de la fecha límite no es válido, debe ser 'y-mm-dd'.
milestones.invalid_due_date_format=El formato de la fecha límite no es válido, debe ser 'yyyy-mm-dd'.
milestones.create_success=¡El milestone '%s' ha sido creado con éxito!
milestones.edit=Editar Milestone
milestones.edit_subheader=Use una buena descripción en el milestone para no confundir al resto de usuarios.
@@ -644,6 +652,7 @@ release.tag_name_already_exist=Ya existe una Release con esta etiqueta.
[org]
org_name_holder=Nombre de la Organización
org_full_name_holder=Organization Full Name
org_name_helper=Los grandes nombres de organizaciones son cortos y memorables.
create_org=Crear Organización
repo_updated=Actualizado
@@ -788,7 +797,7 @@ users.activated=Activado
users.admin=Administrador
users.repos=Repositorios
users.created=Creado
users.send_register_notify=Send Registration Notification To User
users.send_register_notify=Enviar notificación de registro al usuario
users.new_success=La cuenta '%s' ha sido creada con éxito.
users.edit=Editar
users.auth_source=Fuente de Autenticación
@@ -800,6 +809,7 @@ users.edit_account=Editar Cuenta
users.is_activated=Esta cuenta está activada
users.is_admin=Esta cuenta tiene permisos de administrador
users.allow_git_hook=Esta cuenta tiene permisos para crear hooks de Git
users.allow_import_local=This account has permissions to import local repositories
users.update_profile=Actualizar Perfil de la Cuenta
users.delete_account=Eliminar esta Cuenta
users.still_own_repo=Esta cuenta es propietaria de uno o más repositorios, tienes que borrarlos o transferirlos primero.
@@ -960,20 +970,20 @@ compare_2_commits=Ver la comparación de estos 2 commits
ago=hace
from_now=desde ahora
now=ahora
1s=1 segundo %s
1m=1 minuto %s
1h=1 hora %s
1d=1 día %s
1w=1 semana %s
1mon=1 mes %s
1y=1 año %s
seconds=%d segundos %s
minutes=%d minutos %s
hours=%d horas %s
days=%d días %s
weeks=%d semanas %s
months=%d meses %s
years=%d años %s
1s=%s 1 segundo
1m=%s 1 minuto
1h=%s 1 hora
1d=%s 1 día
1w=%s 1 semana
1mon=%s 1 mes
1y=%s 1 año
seconds=%s %d segundos
minutes=%s %d minutos
hours=%s %d horas
days=%s %d días
weeks=%s %d semanas
months=%s %d meses
years=%s %d años
raw_seconds=segundos
raw_minutes=minutos

View File

@@ -7,13 +7,13 @@ help=Aide
sign_in=Connexion
sign_out=Déconnexion
sign_up=Créer un compte
register=S'enregistrer
register=Inscription
website=Site Web
version=Version
page=Page
template=Modèle
language=Langue
create_new=Create...
create_new=Créer...
user_profile_and_more=Profil utilisateur et plus
signed_in_as=Connecté en tant que
@@ -23,12 +23,12 @@ password=Mot de passe
re_type=Confirmez
captcha=Captcha
repository=Référentiel
repository=Dépôt
organization=Organisation
mirror=Miroir
new_repo=Nouveau Référentiel
new_repo=Nouveau Dépôt
new_migrate=Nouvelle Migration
new_fork=Nouveau Référentiel d'Embranchement
new_fork=Nouvel embranchement
new_org=Nouvelle Organisation
manage_org=Gérer les Organisations
admin_panel=Administration
@@ -38,23 +38,23 @@ your_profile=Votre profil
your_settings=Vos paramètres
news_feed=Flux d'actualités
pull_requests=Extraire les Requêtes
pull_requests=Pull Requests
issues=Problèmes
cancel=Annuler
[search]
search=Rechercher...
repository=Référentiel
repository=Dépôt
user=Utilisateur
issue=Problème
code=Code
[install]
install=Installation
title=Instructions de Première Installation
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.
title=Instructions pour la première exécution
docker_helper=Si vous exécuté Gogs grâce à Docker, merci de lire la <a target="_blank" href="%s">procédure</a> attentivement avant de modifier quoi que ce soit dans cette page !
requite_db_desc=Gogs 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,23 +64,23 @@ db_name=Nom de la Base de Données
db_helper=Veuillez utiliser le moteur INNODB avec le jeu de caractères utf8_general_ci pour MySQL.
ssl_mode=Mode SSL
path=Chemin
sqlite_helper=The file path of SQLite3 or TiDB database.
err_empty_db_path=SQLite3 or TiDB database path cannot be empty.
err_invalid_tidb_name=TiDB database name does not allow characters "." and "-".
no_admin_and_disable_registration=You cannot disable registration without creating an admin account.
err_empty_admin_password=Admin password cannot be empty.
sqlite_helper=Le chemin du fichier de la base de données SQLite3 ou TiDB.
err_empty_db_path=Le chemin de la base de données SQLite3 ou TiDB ne peut être vide.
err_invalid_tidb_name=Le nom de la base de données TIDB ne peux contenir les caractères "." ou "-".
no_admin_and_disable_registration=Vous ne pouvez pas désactiver l'enregistrement sans créer un compte admin.
err_empty_admin_password=Le mot de passe Admin ne peut pas être vide.
general_title=Paramètres Généraux de Gogs
app_name=Nom de l'Application
app_name_helper=Inscrivez fièrement le nom de votre organisation ici !
repo_path=Emplacement Racine du Référentiel
repo_path_helper=Tous les Référentiels Git distants seront sauvegardés ici.
repo_path=Emplacement Racine du Dépôt
repo_path_helper=Tous les Dépôts Git distants seront sauvegardés ici.
run_user=Entrer un Utilisateur
run_user_helper=L'utilisateur doit avoir accès à la Racine du Référentiel et éxécuter Gogs.
domain=Domaine
domain_helper=Cela affecte les doublons d'URL SSH.
ssh_port=SSH Port
ssh_port_helper=Port number which your SSH server is using, leave it empty to disable SSH feature.
ssh_port=Port SSH
ssh_port_helper=C'est le numéro de port qui qui est utilisé par votre serveur SSH, le laisser vide pour désactiver la fonctionnalité.
http_port=Port HTTP
http_port_helper=Numéro de port que l'application écoutera.
app_url=URL de l'Application
@@ -98,12 +98,12 @@ mail_notify=Activer la Notification des Mails reçus
server_service_title=Paramètres du serveur et des autres services
offline_mode=Activer le Mode hors connexion
offline_mode_popup=Désactiver le CDN, même en production. Toutes les ressources seront distribuées en local.
disable_gravatar=Disable Gravatar Service
disable_gravatar_popup=Disable Gravatar and custom sources, all avatars are uploaded by users or default.
disable_gravatar=Désactiver le Service Gravatar
disable_gravatar_popup=Désactiver Gravatar et les sources personnalisées, tous les avatars sont téléchargés par les utilisateurs ou par défaut.
disable_registration=Désactiver le formulaire d'inscription
disable_registration_popup=Désactiver le formulaire d'inscription, seuls les administrateurs peuvent créer des comptes.
enable_captcha=Enable Captcha
enable_captcha_popup=Require validate captcha for user self-registration.
enable_captcha=Activez le Captcha
enable_captcha_popup=Demande la validation Captcha pour l'auto-enregistrement de l'utilisateur.
require_sign_in_view=Demander une connexion pour afficher des pages
require_sign_in_view_popup=Seules les personnes connectées peuvent voir les pages. Les visiteurs anonymes ne pourront voir que les pages de connexion/enregistrement.
admin_setting_desc=Vous n'avez pas besoin de créer un compte admin. L'utilisateur ayant l'ID = 1 aura l'accès admin automatiquement.
@@ -111,12 +111,12 @@ admin_title=Paramètres du Compte Administrateur
admin_name=Nom d'Utilisateur
admin_password=Mot de Passe
confirm_password=Confirmez le Mot de Passe
admin_email=E-mail
admin_email=E-mail de l'administrateur
install_gogs=Installer Gogs
test_git_failed=Tentative de commande "git" échouée : %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 Racine du Référentiel invalide : %v
invalid_repo_path=Chemin vers le répertoire racine invalide : %v
run_user_not_match=L'utilisateur entré n'est pas l'utilisateur actuel : %s -> %s
save_config_failed=Sauvegarde de la configuration échouée : %v
invalid_admin_setting=Paramètres du compte administrateur invalides : %v
@@ -130,9 +130,9 @@ my_repos=Mes Référentiels
collaborative_repos=Référentiels collaboratifs
my_orgs=Mes Organisations
my_mirrors=Mes Miroirs
view_home=View %s
view_home=Voir %s
issues.in_your_repos=In your repositories
issues.in_your_repos=Dans vos dépôts
[explore]
repos=Référentiels
@@ -148,7 +148,6 @@ forgot_password=Mot de Passe oublié
forget_password=Mot de Passe oublié ?
sign_up_now=Pas de compte ? Créer maintenant.
confirmation_mail_sent_prompt=Un nouveau mail de confirmation à été envoyé à <b>%s</b>. Veuillez vérifier votre boîte de réception dans un délai de %d heures pour compléter votre enregistrement.
sign_in_to_account=Sign in to your account
active_your_account=Activer votre Compte
resent_limit_prompt=Désolé, vos tentatives d'activation sont trop fréquentes. Veuillez réessayer dans 3 minutes.
has_unconfirmed_mail=Bonjour %s, votre adresse courriel (<b>%s</b>) n'a pas été confirmée. Si vous n'avez reçu aucun courriel de confirmation ou souhaitez renouveler l'envoi, appuyez sur le bouton ci-dessous.
@@ -161,10 +160,10 @@ 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.
[mail]
activate_account=Please activate your account
activate_email=Verify your e-mail address
reset_password=Reset your password
register_success=Register success, Welcome
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
[modal]
yes=Oui
@@ -173,7 +172,7 @@ modify=Modifier
[form]
UserName=Nom d'Utilisateur
RepoName=Nom du Référentiel
RepoName=Nom du dépôt
Email=Adresse E-mail
Password=Mot de Passe
Retype=Confirmez le Mot de Passe
@@ -192,18 +191,19 @@ min_size_error=` %s caractères minimum `
max_size_error=` %s caractères maximum `
email_error=` adresse e-mail invalide `
url_error=` URL invalide `
include_error=`doit contenir la sous-chaîne '%s'.`
unknown_error=Erreur inconnue :
captcha_incorrect=Le Captcha ne correspond pas.
password_not_match=Le mot de passe et la confirmation de mot de passe ne correspondent pas.
username_been_taken=Nom d'utilisateur déjà pris.
repo_name_been_taken=Nom de Référentiel déjà pris.
repo_name_been_taken=Nom de dépôt déjà utilisé.
org_name_been_taken=Nom d'organisation déjà pris.
team_name_been_taken=Nom d'équipe déjà pris.
email_been_used=Adresse e-mail déjà utilisée.
illegal_team_name=Le nom de l'équipe contient des caractères interdits.
username_password_incorrect=Nom d'utilisateur ou mot de passe incorrect.
enterred_invalid_repo_name=Veuillez vérifier que le nom saisi du Référentiel soit correct.
enterred_invalid_repo_name=Veuillez vérifier que le nom saisi du dépôt soit correct.
enterred_invalid_owner_name=Veuillez vérifier que le nom du propriétaire saisi soit correct.
enterred_invalid_password=Veuillez vérifier que le mot de passe saisi soit correct.
user_not_exist=Cet utilisateur n'existe pas.
@@ -215,7 +215,7 @@ auth_failed=Échec d'authentification : %s
still_own_repo=Votre compte comporte toujours des propriétés du dépôt. Vous devez d'abord les supprimer ou les transférer.
still_has_org=Votre compte contient toujours au moins une adhésion à une organisation, vous devez quitter ou supprimer votre adhésion.
org_still_own_repo=Cette organisation comporte toujours des propriétés de Référentiel. Vous devez d'abord les supprimer ou les transférer.
org_still_own_repo=Cette organisation comporte toujours des propriétés du dépôt. Vous devez d'abord les supprimer ou les transférer.
still_own_user=Cette authentification a déjà servi à d'autres utilisateurs. Veuillez les déplacer puis supprimez à nouveau.
@@ -252,7 +252,7 @@ location=Localisation
update_profile=Valider les modifications
update_profile_success=Profil mis à jour avec succès.
change_username=Non d'utilisateur modifié
change_username_prompt=This change will affect the way how links relate to your account.
change_username_prompt=Cette modification affectera la manière dont les liens se rapportent à votre compte.
continue=Continuer
cancel=Annuler
@@ -267,7 +267,7 @@ update_avatar_success=Votre avatar a été mis à jour avec succès.
change_password=Modifier le Mot de Passe
old_password=Mot de Passe actuel
new_password=Nouveau Mot de Passe
retype_new_password=Retype New Password
retype_new_password=Retapez le nouveau mot de passe
password_incorrect=Mot de passe actuel incorrect.
change_password_success=Mot de passe modifié avec succès. Vous pouvez à présent vous connecter avec le nouveau mot de passe.
@@ -277,9 +277,9 @@ email_desc=Votre adresse e-mail principale sera utilisée pour les notifications
primary=Principale
primary_email=Définir comme principale
delete_email=Supprimer
email_deletion=E-mail Deletion
email_deletion_desc=Delete this e-mail address will remove related information from your account. Do you want to continue?
email_deletion_success=E-mail has been deleted successfully!
email_deletion=Suppression de l'adresse mél
email_deletion_desc=Supprimer cette adresse mél supprimera les informations associées à votre compte. Voulez-vous continuer ?
email_deletion_success=L'adresse mél a été supprimée avec succès !
add_new_email=Ajouter une nouvelle adresse courriel
add_email=Ajouter un courriel
add_email_confirmation_sent=Une nouvelle confirmation d'adresse e-mail a été envoyé à '%s', veuillez vérifier votre boîte de réception dans un délai de %d heures pour terminer le processus de confirmation.
@@ -296,14 +296,14 @@ key_name=Nom de la Clé
key_content=Contenu
add_key_success=La nouvelle clé SSH '%s' a été ajoutée avec succès !
delete_key=Supprimer
ssh_key_deletion=SSH Key Deletion
ssh_key_deletion_desc=Delete this SSH key will remove all related accesses for your account. Do you want to continue?
ssh_key_deletion_success=SSH key has been deleted successfully!
ssh_key_deletion=Suppression de la clé SSH
ssh_key_deletion_desc=Supprimer cette clé SSH supprimera tous les accès à votre compte. Voulez-vous continuer ?
ssh_key_deletion_success=Clé SSH supprimée avec succès !
add_on=Ajouté le
last_used=Dernière utilisation le
no_activity=Aucune activité récente
key_state_desc=Cette clé a été utilisée durant les 7 derniers jours
token_state_desc=This token is used in last 7 days
token_state_desc=Cette clé a été utilisée durant les 7 derniers jours
manage_social=Gérer les réseaux sociaux associés
social_desc=Ceci est la liste des comptes de réseaux sociaux associés. Supprimez ceux que vous ne reconnaissez pas.
@@ -312,15 +312,15 @@ 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=Tokens you have generated that can be used to access the Gogs APIs.
tokens_desc=Jetons, que vous avez généré, qui peuvent être utilisés pour accéder à l'API Gogs.
new_token_desc=Comme pour l'instant, chaque jeton aura un accès complet à votre compte.
token_name=Nom du jeton
generate_token=Générer le jeton
generate_token_succees=Nouveau jeton d'accès a été généré avec succès ! Assurez-vous de copier votre nouveau jeton d'accès personnel maintenant. Vous ne serez pas en mesure de le revoir !
delete_token=Supprimer
access_token_deletion=Personal Access Token Deletion
access_token_deletion_desc=Delete this personal access token will remove all related accesses of application. Do you want to continue?
delete_token_success=Personal access token has been removed successfully! Don't forget to update your application as well.
access_token_deletion=Suppression du jeton d'accès
access_token_deletion_desc=Supprimer ce jeton d'accès supprimera tous les accès de l'application. Voulez-vous continuer ?
delete_token_success=Le jeton d'accèsa été supprimée avec succès ! N'oubliez pas de mettre aussi à jour vos applications.
delete_account=Supprimer le Compte
delete_prompt=Votre compte sera supprimé définitivement et cette opération est <strong>IRRÉVERSIBLE</strong> !
@@ -334,19 +334,20 @@ repo_name=Nom du Référentiel
repo_name_helper=Idéalement, le nom d'un dépot devrait être court, mémorable et <strong>unique</strong>.
visibility=Visibilité
visiblity_helper=Ce dépôt est <span class="ui red text"> privé</span>
visiblity_fork_helper=(Change of this value will affect all forks)
fork_repo=Référentiel d'Embranchement
visiblity_helper_forced=L'administrateur du site a forcé tous les nouveaux dépôts à être <span class="ui red text">privés</span>
visiblity_fork_helper=(Les changement de cette valeur affectera tous les forks)
fork_repo=Scinder le dépôt
fork_from=Embranchement de
fork_visiblity_helper=Un dépôt scindé ne peut pas changer sa visiblité
repo_desc=Description
repo_lang=Langue
repo_lang_helper=Select .gitignore files
repo_lang_helper=Sélectionnez les fichiers .gitignore
license=Licence
license_helper=Sélectionner un fichier de licence
readme=Readme
readme_helper=Select a readme template
auto_init=Initialize this repository with selected files and template
create_repo=Créer un Référentiel
readme=Fichier Readme
readme_helper=Sélectionnez un modèle de readme
auto_init=Initialiser ce dépôt avec le modèle et les fichiers sélectionnés
create_repo=Créer un dépôt
default_branch=Branche par défaut
mirror_interval=Intervalle du miroir (heure)
@@ -356,14 +357,17 @@ form.name_pattern_not_allowed=Motif '%s' interdit pour les noms de dépôt.
need_auth=Nécessite une Autorisation
migrate_type=Type de Migration
migrate_type_helper=Ce dépôt sera un <span class="text blue"> miroir</span>
migrate_repo=Migrer le Référentiel
migrate_repo=Migrer le dépôt
migrate.clone_address=Adresse du clone
migrate.clone_address_desc=Cela peut être une URL HTTP/HTTPS/GIT ou un chemin d'accès local.
migrate.permission_denied=Vous n'êtes pas autorisé à importer des dépôts locaux.
migrate.invalid_local_path=Chemin local non valide, non existant ou n'étant pas un dossier.
forked_from=dérivé depuis
fork_from_self=Vous nous ne pouvez pas dériver un dépôt que vous possédez déja !
fork_from_self=Vous nous ne pouvez pas scinder un dépôt que vous possédez déja !
copy_link=Copier
copy_link_success=Copié!
copy_link_error=Appuyez sur ⌘-C ou Ctrl-C pour copier
click_to_copy=Copier dans le presse-papiers
copied=Copié
clone_helper=Besoin d'aide pour le clonage ? Visitez <a target="_blank" href="%s"> l'aider</a> !
@@ -375,9 +379,11 @@ fork=Embranchement
no_desc=Aucune description
quick_guide=Introduction rapide
clone_this_repo=Dupliquer ce Référentiel
create_new_repo_command=Créer un nouveau Référentiel en ligne de commande
push_exist_repo=Soumettre un Référentiel existant par ligne de commande
clone_this_repo=Cloner ce dépôt
create_new_repo_command=Créer un nouveau dépôt en ligne de commande
push_exist_repo=Soumettre un dépôt existant par ligne de commande
repo_is_empty=Ce référentiel est vide, veuillez revenir plus tard !
branch=Branche
tree=Aborescence
@@ -414,8 +420,8 @@ issues.new.clear_milestone=Effacer l'étape
issues.new.open_milestone=Ouvrir l'étape
issues.new.closed_milestone=Étapes fermées
issues.new.assignee=Affecté à
issues.new.clear_assignee=Clear assignee
issues.new.no_assignee=No assignee
issues.new.clear_assignee=Supprimer les assignataires
issues.new.no_assignee=Pas d'assignataire
issues.create=Créer un rapport de problème
issues.new_label=Nouvelle étiquette
issues.new_label_placeholder=Nom de l'étiquette...
@@ -427,7 +433,7 @@ issues.filter_label_no_select=Aucun étiquette sélectionnée
issues.filter_milestone=Étape
issues.filter_milestone_no_select=Aucun jalon sélectionné
issues.filter_assignee=Assigné
issues.filter_assginee_no_select=No selected Assignee
issues.filter_assginee_no_select=Pas d'assignataire selectionné
issues.filter_type=Type
issues.filter_type.all_issues=Tous les problèmes
issues.filter_type.assigned_to_you=Qui vous sont assignés
@@ -440,7 +446,7 @@ issues.filter_sort.recentupdate=Mis à jour récemment
issues.filter_sort.leastupdate=Moins récemment mis à jour
issues.filter_sort.mostcomment=Plus commentés
issues.filter_sort.leastcomment=Moins commenté
issues.opened_by=opened %[1]s by <a href="%[2]s">%[3]s</a>
issues.opened_by=Ouvrir %[1]s by <a href="%[2]s">%[3]s</a>
issues.opened_by_fake=ouvert %[1]s par %[2]s
issues.previous=Page Précédente
issues.next=Page Suivante
@@ -450,20 +456,20 @@ issues.num_comments=%d commentaires
issues.commented_at='commenté à <a id="%[1]s" href="#%[1]s"> %[2]s'</a>
issues.no_content=Il n'existe pas encore de contenu.
issues.close_issue=Fermer
issues.close_comment_issue=Fermer et commenter
issues.close_comment_issue=Commenter et fermer
issues.reopen_issue=Réouvrir
issues.reopen_comment_issue=Réouvrir et commenter
issues.reopen_comment_issue=Commenter et réouvrir
issues.create_comment=Créer un commentaire
issues.closed_at="fermé à <a id="%[1]s"href="#%[1]s"> %[2]s"</a>
issues.reopened_at='réouvert à <a id="%[1]s" href="#%[1]s"> %[2]s'</a>
issues.commit_ref_at=`referenced this issue from a commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.commit_ref_at=`cette question référencé à partir d'un commit <a id="%[1]s" href="#%[1]s"> %[2]s</a>`
issues.poster=Publier
issues.admin=Admin
issues.owner=Propriétaire
issues.sign_up_for_free=Inscrivez-vous gratuitement
issues.sign_in_require_desc=pour rejoindre cette conversation. Vous avez déjà un compte ? <a href="%s">Connectez-vous commenter</a>
issues.edit=Modifier
issues.cancel=Cancel
issues.cancel=Annuler
issues.save=Enregistrer
issues.label_title=Nom du Label
issues.label_color=Couleur du Label
@@ -478,26 +484,28 @@ issues.label_deletion_success=Label supprimé avec succès !
pulls.compare_changes=Comparer les changements
pulls.compare_changes_desc=Comparer deux branches et faire une demande de récupération Pull pour les changements.
pulls.compare_base=base
pulls.compare_compare=compare
pulls.filter_branch=Filter branch
pulls.compare_base=Base
pulls.compare_compare=Comparer
pulls.filter_branch=Filtre de branche
pulls.no_results=Aucun résultat trouvé.
pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Create Pull Request
pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
pulls.nothing_to_compare=Il n'y a rien de comparable parce que les deux branches sont égales.
pulls.has_pull_request=`Il y a déjà une demande de tirer entre ces deux cibles : <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Creer une Pull Request
pulls.title_desc=veut fusionner %[1]d commits à partir de <code>%[2]s</code> vers <code>%[3]s</code>
pulls.merged_title_desc=à fusionné %[1]d commits à partir de <code>%[2]s</code> vers <code>%[3]s</code> %[4]s
pulls.tab_conversation=Conversation
pulls.tab_commits=Commits
pulls.tab_files=Files changed
pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
pulls.merged=Merged
pulls.has_merged=This pull request has been merged successfully!
pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
pulls.merge_pull_request=Merge Pull Request
pulls.tab_files=Fichiers modifiés
pulls.reopen_to_merge=Veuillez rouvrir cette demande de Pull Request pour effectuer l'opération de fusion.
pulls.merged=Fusionné
pulls.has_merged=Cette Pull Request a été fusionnée avec succès !
pulls.data_broken=Les données de cette Pull Request a été rompues en raison de la suppression d'informations du Fork.
pulls.is_checking=La recherche de conflicts est toujours en cours, veuillez rafraichir la page dans quelques instants.
pulls.can_auto_merge_desc=Vous pouvez effectuer d'opération de fusion automatique sur cette demande de Pull Request.
pulls.cannot_auto_merge_desc=Vous ne pouvez effectuer des opération de fusion automatique car il y a des conflits entre les Commits.
pulls.cannot_auto_merge_helper=Veuillez utiliser l'outil en ligne de commande pour le résoudre.
pulls.merge_pull_request=Fusionner la Pull Request
pulls.open_unmerged_pull_exists=`Vous ne pouvez effectuer une réouverture car il y a déjà une pull-request ouverte (#%d) depuis le même dépôt avec les mêmes informations de fusion et est en attente de fusion.`
milestones.new=Nouveau Jalon
milestones.open_tab=%d Ouvert
@@ -512,7 +520,7 @@ milestones.title=Titre
milestones.desc=Description
milestones.due_date=Date d'échéance (facultatif)
milestones.clear=Effacer
milestones.invalid_due_date_format=Le format de la date d'échéance est invalide, il doit être comme suit 'année-mm-jj'.
milestones.invalid_due_date_format=Le format de la date d'échéance est invalide, il doit être comme suit 'AAAA-mm-jj'.
milestones.create_success=Le Jalon '%s' a été crée avec succès !
milestones.edit=Éditer le Jalon
milestones.edit_subheader=Utilisez une description claire pour les jalons pour ne pas induire les gens en erreur.
@@ -532,24 +540,24 @@ settings.basic_settings=Paramètres de base
settings.danger_zone=Zone de danger
settings.site=Site officiel
settings.update_settings=Valider
settings.change_reponame_prompt=This change will affect how links relate to the repository.
settings.change_reponame_prompt=Ce changement affectera comment les liens sont reliés avec le dépôt.
settings.transfer=Transférer les propriétés
settings.transfer_desc=Transfèrer ce dépôt à un autre utilisateur ou une organisation dont vous possédez des droits d'administrateur.
settings.new_owner_has_same_repo=Le nouveau propriétaire a déjà un dépôt nommé ainsi.
settings.delete=Supprimer ce Référentiel
settings.delete_desc=Attention, action irréversible. Soyez sûre de vous.
settings.transfer_notices_1=- You will lose access if new owner is a individual user.
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=Please enter following information to confirm your operation:
settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
settings.transfer_notices_1=-Vous perdrez l'accès si le nouveau propriétaire est un utilisateur individuel.
settings.transfer_notices_2=-Vous préserverez l'accès si le nouveau propriétaire est une organisation et si vous y appartenez.
settings.transfer_form_title=Veuillez recopier le texte suivant afin de confirmer votre opération :
settings.delete_notices_1=- Cette opération <strong>ne peut pas </strong> être annulée.
settings.delete_notices_2=-Cette opération supprimera définitivement le dépôt, y compris les données Git, problèmes, commentaires et accès des collaborateurs.
settings.delete_notices_fork_1=-Si ce dépôt est public, tous les Forks vont devenir indépendant après la suppression.
settings.delete_notices_fork_2=-Si ce dépôt est privé, tous les Forks seront supprimés en même temps.
settings.delete_notices_fork_3=-Si vous souhaitez conserver tous les forks après suppression, veuillez tout d'abord modifier la visibilité de ce dépôt en public.
settings.update_settings_success=Options mises à jour avec succès.
settings.transfer_owner=Nouveau propriétaire
settings.make_transfer=Transférer
settings.transfer_succeed=Propriétés transférées avec succès.
settings.transfer_succeed=Le contrôle du dépôt a été transféré avec succès.
settings.confirm_delete=Confirmer la suppression
settings.add_collaborator=Ajouter un collaborateur
settings.add_collaborator_success=Nouveau collaborateur ajouté.
@@ -557,14 +565,14 @@ settings.remove_collaborator_success=Collaborateur supprimé.
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=Webhooks aux services externes être notifié lorsque certains événements se produisent sur Gogs. Lorsque les événements spécifiés se produisent, nous vous enverrons une demande POST à chacun des URL que vous fournissez. Apprenez-en davantage dans notre <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!
settings.webhook.request=Request
settings.webhook.response=Response
settings.webhook.headers=Headers
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ée avec succès !
settings.webhook.request=Requête
settings.webhook.response=Réponse
settings.webhook.headers=Entêtes 
settings.webhook.payload=Payload
settings.webhook.body=Body
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.
settings.githook_edit_desc=Si un Hook est inactif, un exemple de contenu vous sera proposé. Un contenu laissé vide signifie un Hook inactif.
settings.githook_name=Nom du Hook
@@ -574,17 +582,17 @@ settings.add_webhook_desc=Nous vous enverrons une demande <code>POST</code> à l
settings.payload_url=URL des Données Utiles
settings.content_type=Type de contenu
settings.secret=Confidentiel
settings.slack_username=Username
settings.slack_icon_url=Icon URL
settings.slack_color=Color
settings.slack_username=Nom d'utilisateur
settings.slack_icon_url=URL de l'icône
settings.slack_color=Couleur
settings.event_desc=Quel évènement ce Webhook doit-il déclencher ?
settings.event_push_only=Uniquement les <code>push</code> (soumissions).
settings.event_send_everything=I need <strong>everything</strong>.
settings.event_choose=Let me choose what I need.
settings.event_create=Create
settings.event_create_desc=Branch, or tag created
settings.event_send_everything=J'ai besoin de <strong>tout</strong>.
settings.event_choose=Permettez-moi de choisir ce dont j'ai besoin.
settings.event_create=Créer
settings.event_create_desc=Branch, ou Tag créé
settings.event_push=Push
settings.event_push_desc=Git push to a repository
settings.event_push_desc=Git push vers un dépôt
settings.active=Actif
settings.active_helper=Les détails seront délivrés lorsque ce Hook sera déclenché.
settings.add_hook_success=Nouveau Webhook ajouté.
@@ -593,7 +601,7 @@ settings.update_hook_success=Webhook mis à jour.
settings.delete_webhook=Supprimer le Webhook
settings.recent_deliveries=Livraisons récentes
settings.hook_type=Type de Hook
settings.add_slack_hook_desc=Ajouter <a href="%s"> Slack</a> intégration dans votre référentiel.
settings.add_slack_hook_desc=Intégrer <a href="%s"> Slack</a> à votre dépôt.
settings.slack_token=Jeton
settings.slack_domain=Domaine
settings.slack_channel=Canal
@@ -644,6 +652,7 @@ release.tag_name_already_exist=Une publication avec ce nom de tag a déjà exist
[org]
org_name_holder=Nom d'organisation
org_full_name_holder=Nom complet de l'organisation
org_name_helper=Idéalement, un nom d'organisation devrait être court et mémorable.
create_org=Créer une organisation
repo_updated=Mis à jour
@@ -670,8 +679,8 @@ settings.website=Site Web
settings.location=Localisation
settings.update_settings=Valider
settings.update_setting_success=Paramètres d'organisation modifiés avec succès.
settings.change_orgname_prompt=This change will affect how links relate to the organization.
settings.update_avatar_success=Organization avatar setting has been updated successfully.
settings.change_orgname_prompt=Cette modification affectera comment des liens se rapportent à l'organisation.
settings.update_avatar_success=Les paramètres de l'avatar de l'organisation a été mis à jour avec succès.
settings.delete=Supprimer l'organisation
settings.delete_account=Supprimer cette organisation
settings.delete_prompt=Cela supprimera cette organisation définitivement. Cette opération est <strong>IRRÉVERSIBLE</strong> !
@@ -714,9 +723,9 @@ teams.read_permission_desc=Cette équipe permet l'accès en <strong>lecture</str
teams.write_permission_desc=Cette équipe permet l'accès en <strong>écriture</strong> : les membres peuvent participer à ses Référentiels.
teams.admin_permission_desc=Cette équipe permet l'accès en <strong>administrateur</strong> : les membres peuvent voir, participer et ajouter des collaborateurs à ses Référentiels.
teams.repositories=Référentiels de l'Équipe
teams.add_team_repository=Ajouter un Référentiel à l'Équipe
teams.add_team_repository=Ajouter un Dépôt à l'Équipe
teams.remove_repo=Supprimer
teams.add_nonexistent_repo=Référentiel inexistant, veuillez d'abord le créer.
teams.add_nonexistent_repo=Dépôt inexistant, veuillez d'abord le créer.
[admin]
dashboard=Tableau de bord
@@ -727,9 +736,9 @@ authentication=Authentifications
config=Configuration
notices=Notes Systèmes
monitor=Supervision
first_page=First
last_page=Last
total=Total: %d
first_page=Première
last_page=Dernière
total=Total : %d
dashboard.statistic=Statistiques
dashboard.operations=Opérations
@@ -788,30 +797,31 @@ users.activated=Activés
users.admin=Administrateur
users.repos=Dépôts
users.created=Créés
users.send_register_notify=Send Registration Notification To User
users.new_success=New account '%s' has been created successfully.
users.send_register_notify=Envoyer une Notification d'enregistrement à l'utilisateur
users.new_success=Nouveau compte '%s' a été créé avec succès.
users.edit=Éditer
users.auth_source=Authentication Source
users.auth_source=Sources d'authentification
users.local=Locales
users.auth_login_name=Authentication Login Name
users.password_helper=Leave it empty to remain unchanged.
users.auth_login_name=Nom d'utilisateur d'authentification
users.password_helper=Laissez-le vide pour ne pas changer.
users.update_profile_success=Profil mis à jour avec succès.
users.edit_account=Modifier le Compte
users.is_activated=Ce compte est activé
users.is_admin=Ce compte possède un niveau d'accès administrateur
users.allow_git_hook=Ce compte dispose des autorisations pour créer des crochets de Git
users.allow_import_local=Ce compte dispose des permissions nécessaire à l'import des dépôts locaux
users.update_profile=Mettre le profil à jour
users.delete_account=Supprimer ce Compte
users.still_own_repo=Ce compte possède toujours des dépôts. Vous devez d'abord les supprimer ou les transférer.
users.still_has_org=Ce compte a toujours membres de l'organisation, vous avez à gauche ou supprimez tout d'abord.
users.deletion_success=Account has been deleted successfully!
users.deletion_success=Le compte a été supprimé avec succès !
orgs.org_manage_panel=Gestion des Organisations
orgs.name=Nom
orgs.teams=Équipes
orgs.members=Membres
repos.repo_manage_panel=Gestion des Référentiels
repos.repo_manage_panel=Gestion des Dépôts
repos.owner=Propriétaire
repos.name=Nom
repos.private=Privé
@@ -819,47 +829,47 @@ repos.watches=Suivi par
repos.stars=Votes
repos.issues=Problèmes
auths.auth_manage_panel=Authentication Manage Panel
auths.new=Add New Source
auths.auth_manage_panel=Panel d'administration des authentifications
auths.new=Ajouter une nouvelle source d'authentification
auths.name=Nom
auths.type=Type
auths.enabled=Activé
auths.updated=Mis à jour
auths.auth_type=Authentication Type
auths.auth_name=Authentication Name
auths.auth_type=Type d'authentification
auths.auth_name=Nom de l'authentification
auths.domain=Domaine
auths.host=Hôte
auths.port=Port
auths.bind_dn=Bind DN
auths.bind_password=Bind Password
auths.bind_password_helper=Warning: This password is stored in plain text. Do not use a high privileged account.
auths.user_base=User Search Base
auths.user_dn=User DN
auths.bind_password=Bind mot de passe
auths.bind_password_helper=AVERTISSEMENT : Ce mot de passe est stocké en texte clair. N'utilisez pas le mot de passe d'un compte doté de privilèges élevé.
auths.user_base=Utilisateur Search Base
auths.user_dn=Utilisateur DN
auths.attribute_name=Attribut du prénom
auths.attribute_surname=Attribut du nom de famille
auths.attribute_mail=Attribut de l'e-mail
auths.filter=User Filter
auths.admin_filter=Admin Filter
auths.filter=Utilisateur Filter
auths.admin_filter=Administrateur Filter
auths.ms_ad_sa=Ms Ad SA
auths.smtp_auth=SMTP Authentication Type
auths.smtp_auth=Type d'authentification SMTP
auths.smtphost=Hôte SMTP
auths.smtpport=Port SMTP
auths.allowed_domains=Allowed Domains
auths.allowed_domains_helper=Leave it empty to not restrict any domains. Multiple domains should be separated by comma ','.
auths.allowed_domains=Domaines autorisés
auths.allowed_domains_helper=Laissez-le vide pour ne pas restreindre de domaines. Plusieurs domaines doivent être séparés par une virgule «, ».
auths.enable_tls=Activer le Chiffrement TLS
auths.skip_tls_verify=Skip TLS Verify
auths.skip_tls_verify=Ne pas vérifier TLS
auths.pam_service_name=Nom du Service PAM
auths.enable_auto_register=Connexion Automatique
auths.tips=Conseils
auths.edit=Edit Authentication Setting
auths.edit=Modifier les paramètres d'authentification
auths.activated=Authentification activée
auths.new_success=New authentication '%s' has been added successfully.
auths.update_success=Authentication setting has been updated successfully.
auths.update=Update Authentication Setting
auths.delete=Delete This Authentication
auths.delete_auth_title=Authentication Deletion
auths.delete_auth_desc=This authentication is going to be deleted, do you want to continue?
auths.deletion_success=Authentication has been deleted successfully!
auths.new_success=Nouvelle authentification «%s » a été ajoutée avec succès.
auths.update_success=Les paramètre d'authentification a été mis à jour avec succès.
auths.update=Mettre à jour les paramètres d'authentifications
auths.delete=Supprimer cette authentification
auths.delete_auth_title=Suppression de l'authentification
auths.delete_auth_desc=Cette autorisation sera supprimée. Continuer?
auths.deletion_success=L'authentification a été supprimée avec succès !
config.server_config=Configuration du Serveur
config.app_name=Nom de l'Application
@@ -870,7 +880,7 @@ config.offline_mode=Mode hors-ligne
config.disable_router_log=Désactiver la Journalisation du Routeur
config.run_user=Entrer un Utilisateur
config.run_mode=Mode d'Éxécution
config.repo_root_path=Emplacement Racine du Référentiel
config.repo_root_path=Emplacement des Dépôts
config.static_file_root_path=Emplacement Racine du Fichier Statique
config.log_file_root_path=Emplacement Racine du Fichier Journal
config.script_type=Type de Script
@@ -883,7 +893,7 @@ config.db_user=Utilisateur
config.db_ssl_mode=Mode SSL
config.db_ssl_mode_helper=("postgres" uniquement)
config.db_path=Emplacement
config.db_path_helper=(for "sqlite3" and "tidb")
config.db_path_helper=(pour « sqlite3 » et « TIDB »)
config.service_config=Configuration du Service
config.register_email_confirm=Nécessite une confirmation par courriel
config.disable_register=Désactiver l'Enregistrement
@@ -891,8 +901,8 @@ config.show_registration_button=Afficher le bouton d'enregistrement
config.require_sign_in_view=Connexion Obligatoire pour Visualiser
config.enable_cache_avatar=Activer le Cache d'Avatar
config.mail_notify=Mailer les Notifications
config.disable_key_size_check=Disable Minimum Key Size Check
config.enable_captcha=Enable Captcha
config.disable_key_size_check=Désactiver la vérification de la taille de clé minimale
config.enable_captcha=Activez le Captcha
config.active_code_lives=Limites de Code Actif
config.reset_password_code_lives=Réinitialiser le Mot De Passe des Limites de Code
config.webhook_config=Configuration Webhook
@@ -939,20 +949,20 @@ monitor.execute_time=Heure d'Éxécution
notices.system_notice_list=Notes Systèmes
notices.type=Type
notices.type_1=Référentiel
notices.type_1=Dépôt
notices.desc=Description
notices.op=Opération
notices.delete_success=Note système supprimée avec succès.
[action]
create_repo=a crée le Référentiel <a href="%s">%s</a>
rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
create_repo=a crée le dépôt <a href="%s">%s</a>
rename_repo=rebaptisé le dépôt de <code>%[1]s</code> à <a href="%[2]s">%[3]s</a>
commit_repo=a soumis à <a href="%s/src/%s">%[2]s</a> chez <a href="%[1]s">%[3]s</a>
create_issue=`a ouvert un problème <a href="%s/issues/%s">%s#%[2]s</a>`
create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
create_pull_request=`pull request créée le <a href="%s/pulls/%s">%s#%[2]s</a>`
comment_issue=`a commenté le problème <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=a transféré le Référentiel <code>%s</code> à <a href="%s">%s</a>
merge_pull_request=`pull request fusionné le <a href="%s/pulls/%s">%s#%[2]s</a>`
transfer_repo=a transféré le dépôt <code>%s</code> à <a href="%s">%s</a>
push_tag=a tagé <a href="%s/src/%s">%[2]s</a> à <a href="%[1]s">%[3]s</a>
compare_2_commits=Comparer ces 2 commissions

View File

@@ -14,7 +14,7 @@ page=Pagina
template=Template
language=Lingua
create_new=Crea...
user_profile_and_more=User profile and more
user_profile_and_more=Profilo utente e altro
signed_in_as=Signed in as
username=Nome utente
@@ -67,8 +67,8 @@ path=Percorso
sqlite_helper=The file path of SQLite3 or TiDB database.
err_empty_db_path=SQLite3 or TiDB database path cannot be empty.
err_invalid_tidb_name=TiDB database name does not allow characters "." and "-".
no_admin_and_disable_registration=You cannot disable registration without creating an admin account.
err_empty_admin_password=Admin password cannot be empty.
no_admin_and_disable_registration=Non puoi disabilitare la registrazione senza aver creato un amministratore.
err_empty_admin_password=La password dell'amministratore non puo' essere vuota.
general_title=Impostazioni di Base dell'Applicazione
app_name=Nome Applicazione
@@ -102,7 +102,7 @@ disable_gravatar=Disable Gravatar Service
disable_gravatar_popup=Disable Gravatar and custom sources, all avatars are uploaded by users or default.
disable_registration=Disabilita Registrazione Manuale
disable_registration_popup=Disabilita la registrazione manuale degli utenti, solo gli amministratori possono creare account.
enable_captcha=Enable Captcha
enable_captcha=Abilita Captcha
enable_captcha_popup=Require validate captcha for user self-registration.
require_sign_in_view=Abilita Richiesta di Accesso per Vedere le Pagine
require_sign_in_view_popup=Solo gli utenti loggati possono vedere le pagine, i visitatori potranno vedere solo le pagine di accesso e registrazione.
@@ -111,7 +111,7 @@ admin_title=Impostazioni Account Amministratore
admin_name=Nome utente
admin_password=Password
confirm_password=Conferma Password
admin_email=E-mail
admin_email=Admin E-mail
install_gogs=Installare Gogs
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.
@@ -130,9 +130,9 @@ my_repos=I miei Repository
collaborative_repos=Repository Condivisi
my_orgs=Le mie Organizzazioni
my_mirrors=I miei Mirror
view_home=View %s
view_home=Vedi %s
issues.in_your_repos=In your repositories
issues.in_your_repos=Nei tuoi repository
[explore]
repos=Repository
@@ -148,7 +148,6 @@ forgot_password=Password dimenticata
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.
sign_in_to_account=Sign in to your account
active_your_account=Attiva il tuo Account
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.
@@ -161,10 +160,10 @@ reset_password_helper=Clicca qui per reimpostare la password
password_too_short=La lunghezza della password non può essere meno 6 caratteri.
[mail]
activate_account=Please activate your account
activate_email=Verify your e-mail address
reset_password=Reset your password
register_success=Register success, Welcome
activate_account=Per favore attiva il tuo account
activate_email=Verifica il tuo indirizzo e-mail
reset_password=Reimposta la tua password
register_success=Registrazione completata con successo, Benvenuto
[modal]
yes=
@@ -192,6 +191,7 @@ min_size_error=` deve contenere almeno %s caratteri.`
max_size_error=` deve contenere massimo %s caratteri.`
email_error=` non è un indirizzo e-mail valido.`
url_error=` non è un URL valido.`
include_error=` deve contenere la stringa '%s'.`
unknown_error=Errore sconosciuto:
captcha_incorrect=Il Captcha non corrisponde.
password_not_match=Le due password non corrispondono.
@@ -267,7 +267,7 @@ update_avatar_success=Le tue impostazioni avatar sono state aggiornate con succe
change_password=Cambia Password
old_password=Password attuale
new_password=Nuova Password
retype_new_password=Retype New Password
retype_new_password=Re-inserisci la password
password_incorrect=La Password attuale non è corretta.
change_password_success=La tua password è stata cambiata con successo. Ora puoi accedere usando la nuova password.
@@ -298,12 +298,12 @@ add_key_success=New SSH key '%s' has been added successfully!
delete_key=Elimina
ssh_key_deletion=SSH Key Deletion
ssh_key_deletion_desc=Delete this SSH key will remove all related accesses for your account. Do you want to continue?
ssh_key_deletion_success=SSH key has been deleted successfully!
ssh_key_deletion_success=La chiave SSH e' stata cancellata con successo!
add_on=Aggiunto il
last_used=Ultimo accesso il
no_activity=Nessuna attività recente
key_state_desc=Hai utilizzato questa chiave negli ultimi 7 giorni
token_state_desc=This token is used in last 7 days
token_state_desc=Questo token e' satato utilizzato negli ultimi 7 giorni
manage_social=Gestisci gli Account Sociali Associati
social_desc=Questa è un elenco degli account sociali associati. Rimuovere qualsiasi account che non si riconosce.
@@ -334,6 +334,7 @@ repo_name=Nome Repository
repo_name_helper=I migliori nomi dei repository sono brevi, facili da memorizzare e <strong>univoci</strong>.
visibility=Visibilità
visiblity_helper=This repository is <span class="ui red text">Private</span>
visiblity_helper_forced=Site admin has forced all new repositories to be <span class="ui red text">Private</span>
visiblity_fork_helper=(Change of this value will affect all forks)
fork_repo=Forka Repository
fork_from=Forka da
@@ -359,11 +360,14 @@ migrate_type_helper=This repository will be a <span class="text blue">mirror</sp
migrate_repo=Migra Repository
migrate.clone_address=Duplica Indirizzo
migrate.clone_address_desc=This can be a HTTP/HTTPS/GIT URL or local server path.
migrate.permission_denied=You are not allowed to import local repositories.
migrate.invalid_local_path=Percorso locale non valido, non esiste o non è una cartella.
forked_from=forkato da
fork_from_self=Non puoi forkare il tuo stesso repository!
copy_link=Copia
copy_link_success=Copiato!
copy_link_error=Press ⌘-C or Ctrl-C to copy
click_to_copy=Copia negli appunti
copied=OK copiato
clone_helper=Hai bisogno di aiuto per la clonazione? Visita <a target="_blank" href="%s">Aiuto</a>!
@@ -378,6 +382,8 @@ quick_guide=Guida rapida
clone_this_repo=Clona questo repository
create_new_repo_command=Crea nuovo repository da riga di comando
push_exist_repo=Push un repo esistente dalla riga di comando
repo_is_empty=This repository is empty, please come back later!
branch=Ramo (Branch)
tree=Albero (Tree)
@@ -405,15 +411,15 @@ commits.older=Più vecchio
commits.newer=Più recente
issues.new=Nuovo Problema
issues.new.labels=Labels
issues.new.no_label=No Label
issues.new.clear_labels=Clear labels
issues.new.milestone=Milestone
issues.new.labels=Etichette
issues.new.no_label=Nessuna etichetta
issues.new.clear_labels=Pulisci le etichette
issues.new.milestone=Traguardo
issues.new.no_milestone=No Milestone
issues.new.clear_milestone=Clear milestone
issues.new.open_milestone=Open Milestones
issues.new.closed_milestone=Closed Milestones
issues.new.assignee=Assignee
issues.new.assignee=Assegnatario
issues.new.clear_assignee=Clear assignee
issues.new.no_assignee=No assignee
issues.create=Create Issue
@@ -433,7 +439,7 @@ issues.filter_type.all_issues=Tutti i problemi
issues.filter_type.assigned_to_you=Assegnati a te
issues.filter_type.created_by_you=Creati da te
issues.filter_type.mentioning_you=Che ti riguardano
issues.filter_sort=Sort
issues.filter_sort=Ordina
issues.filter_sort.latest=Newest
issues.filter_sort.oldest=Oldest
issues.filter_sort.recentupdate=Recently updated
@@ -449,18 +455,18 @@ issues.closed_title=Closed
issues.num_comments=%d comments
issues.commented_at=`commented <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.no_content=There is no content yet.
issues.close_issue=Close
issues.close_comment_issue=Close and comment
issues.close_issue=Chiudi
issues.close_comment_issue=Comment and close
issues.reopen_issue=Reopen
issues.reopen_comment_issue=Reopen and comment
issues.create_comment=Comment
issues.reopen_comment_issue=Comment and reopen
issues.create_comment=Commento
issues.closed_at=`closed <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`reopened <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.commit_ref_at=`referenced this issue from a commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.poster=Poster
issues.admin=Admin
issues.owner=Owner
issues.sign_up_for_free=Sign up for free
issues.admin=Amministratore
issues.owner=Proprietario
issues.sign_up_for_free=Registrati gratuitamente
issues.sign_in_require_desc=to join this conversation. Already have an account? <a href="%s">Sign in to comment</a>
issues.edit=Edit
issues.cancel=Cancel
@@ -494,10 +500,12 @@ pulls.reopen_to_merge=Please reopen this pull request to perform merge operation
pulls.merged=Merged
pulls.has_merged=This pull request has been merged successfully!
pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
pulls.merge_pull_request=Unisci Pull Request
pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
milestones.new=New Milestone
milestones.open_tab=%d Open
@@ -512,7 +520,7 @@ milestones.title=Title
milestones.desc=Description
milestones.due_date=Due Date (optional)
milestones.clear=Clear
milestones.invalid_due_date_format=Due date format is invalid, must be 'year-mm-dd'.
milestones.invalid_due_date_format=Due date format is invalid, must be 'yyyy-mm-dd'.
milestones.create_success=Milestone '%s' has been created successfully!
milestones.edit=Edit Milestone
milestones.edit_subheader=Use better description for milestones so people won't be confused.
@@ -644,6 +652,7 @@ release.tag_name_already_exist=Un rilascio con questo tag esiste già.
[org]
org_name_holder=Nome dell'Organizzazione
org_full_name_holder=Organization Full Name
org_name_helper=Le migliori organizzazioni hanno nomi brevi e memorabili.
create_org=Crea Organizzazione
repo_updated=Aggiornato
@@ -800,6 +809,7 @@ users.edit_account=Modifica Account
users.is_activated=Questo account è attivato
users.is_admin=Questo account ha permessi di amministratore
users.allow_git_hook=Questo account ha il permesso di creare hooks di Git
users.allow_import_local=This account has permissions to import local repositories
users.update_profile=Aggiornare Profilo Account
users.delete_account=Elimina Questo Account
users.still_own_repo=Questo account possiede ancora almeno un repository, devi prima cancellarli o trasferirli.

View File

@@ -13,7 +13,7 @@ version=バージョン
page=ページ
template=テンプレート
language=言語
create_new=Create...
create_new=作成...
user_profile_and_more=ユーザープロファイルなど
signed_in_as=サインイン済み
@@ -53,8 +53,8 @@ code=コード
[install]
install=インストール
title=初回実行のインストール手順
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=DockerでGogsを稼動する場合、このページに変更を加えるまえに、 <a target="_blank" href="%s">Guidelines</a>をよく読んでください!
requite_db_desc=Gogs は、MySQLPostgreSQLSQLite3 または TiDB が必要です。
db_title=データベース設定
db_type=データベースの種類
host=ホスト
@@ -64,11 +64,11 @@ db_name=データベース名
db_helper=Mysql INNODB エンジン utf8_general_ci の文字セットを使用してください。
ssl_mode=SSL モード
path=パス
sqlite_helper=The file path of SQLite3 or TiDB database.
err_empty_db_path=SQLite3 or TiDB database path cannot be empty.
err_invalid_tidb_name=TiDB database name does not allow characters "." and "-".
sqlite_helper=SQLite3 または TiDB のデータベースのファイル パス。
err_empty_db_path=SQLite3 または TiDB データベースのパスを空にすることはできません。
err_invalid_tidb_name=TiDB データベース名は文字"."と"-"を許可しない。
no_admin_and_disable_registration=You cannot disable registration without creating an admin account.
err_empty_admin_password=Admin password cannot be empty.
err_empty_admin_password=管理者パスワードは空白にできません。
general_title=Gogs の全般設定
app_name=アプリケーション名
@@ -80,7 +80,7 @@ run_user_helper=ユーザーはリポジトリ ルートパスへのアクセス
domain=ドメイン
domain_helper=これはSSHクローンURLに影響する。
ssh_port=SSH ポート
ssh_port_helper=Port number which your SSH server is using, leave it empty to disable SSH feature.
ssh_port_helper=あならのSSHサーバおポート番号、SSH機能を無効するにはここを空白のままにしてください。
http_port=HTTP ポート
http_port_helper=アプリケーションが待ち受けするポート番号。
app_url=アプリケーションの URL
@@ -102,8 +102,8 @@ disable_gravatar=Gravatarのサービスを無効にします
disable_gravatar_popup=Disable Gravatar and custom sources, all avatars are uploaded by users or default.
disable_registration=自己登録を無効にする
disable_registration_popup=自己登録を無効にし、管理者のみがアカウント作成できる
enable_captcha=Enable Captcha
enable_captcha_popup=Require validate captcha for user self-registration.
enable_captcha=Captchaを有効にする
enable_captcha_popup=ユーザによる自己登録のため、有効なcaptchaが必要です。
require_sign_in_view=サインインしたユーザのみページ閲覧を許可
require_sign_in_view_popup=サインインしたユーザのみがページを閲覧できます。ビジターはサインインもしくはサインアップページのみ見られます。
admin_setting_desc=今管理者アカウントを作成する必要はありません。ID = 1のユーザ は自動的に管理者の権限を獲得します。
@@ -111,7 +111,7 @@ admin_title=管理者アカウントの設定
admin_name=ユーザ名
admin_password=パスワード
confirm_password=パスワード確認
admin_email=E-mail
admin_email=Admin E-mail
install_gogs=Gogs をインストール
test_git_failed='Git' コマンドテストに失敗: %v
sqlite3_not_available=このリリース バージョンは SQLite3 をサポートしていません。gobuild バージョンではない、公式のバイナリ バージョンを %s からダウンロードしてください。
@@ -148,7 +148,6 @@ forgot_password=パスワードを忘れた
forget_password=パスワードを忘れた?
sign_up_now=アカウントが必要ですか?今すぐサインアップ
confirmation_mail_sent_prompt=新しい確認メールを <b>%s</b> に送りました。登録を完了させるために、%d時間以内にあなたのメールボックスを確認してください。
sign_in_to_account=Sign in to your account
active_your_account=アカウントをアクティブ
resent_limit_prompt=申し訳ありませんが、アクティベーションメールは頻繁に送信しています。3 分お待ちください。
has_unconfirmed_mail=こんにちは %s さん、あなたの電子メール アドレス (<b>%s</b>) は未確認です。もし確認メールをまだ確認できていないか、改めて再送信する場合は、下のボタンをクリックしてください。
@@ -161,10 +160,10 @@ reset_password_helper=パスワードをリセットするにはここをクリ
password_too_short=6文字未満のパスワードは設定できません。
[mail]
activate_account=Please activate your account
activate_email=Verify your e-mail address
reset_password=Reset your password
register_success=Register success, Welcome
activate_account=あなたのアカウントを有効にしてください。
activate_email=電子メール アドレスを確認します。
reset_password=パスワードをリセットします.
register_success=ようこそ、登録成功
[modal]
yes=はい
@@ -192,6 +191,7 @@ min_size_error=' 少なくとも %s 文字の必要があります '
max_size_error=' %s 文字以下の必要があります '
email_error=' は有効な電子メール アドレスではない '
url_error=' は有効な URL はありません。 '
include_error=` must contain substring '%s'.`
unknown_error=不明なエラー:
captcha_incorrect=Captcha が一致しませんでした。
password_not_match=パスワードと確認用パスワードが一致同していません。
@@ -252,7 +252,7 @@ location=ロケーション
update_profile=プロファイル更新
update_profile_success=あなたのプロフィールが更新されました。
change_username=ユーザー名が変更されました
change_username_prompt=This change will affect the way how links relate to your account.
change_username_prompt=この変更はリンクをアカウントに関連付ける方法に影響します。
continue=続行
cancel=キャンセル
@@ -267,7 +267,7 @@ update_avatar_success=あなたのアバターの設定が更新されました
change_password=パスワードを変更
old_password=現在のパスワード
new_password=新しいパスワード
retype_new_password=Retype New Password
retype_new_password=新しいパスワードを再入力します。
password_incorrect=現在のパスワードが正しくありません。
change_password_success=パスワードが正常に変更されました。今すぐ新しいパスワード経由でサインインすることができます。
@@ -277,9 +277,9 @@ email_desc=あなたのプライマリメールアドレスは、通知やその
primary=プライマリー
primary_email=プライマリに設定
delete_email=削除
email_deletion=E-mail Deletion
email_deletion_desc=Delete this e-mail address will remove related information from your account. Do you want to continue?
email_deletion_success=E-mail has been deleted successfully!
email_deletion=電子メールの削除
email_deletion_desc=この電子メール アドレスを削除すると、あなたのアカウントの関連情報も削除されます。続行しますか。
email_deletion_success=電子メールが正常に削除されました。
add_new_email=新しいe-mailアドレスを追加
add_email=電子メールを追加します。
add_email_confirmation_sent='%s' に新しい確認メールを送信しました、次の %d 時間以内に受信トレイを確認し、確認プロセスを完了してください。
@@ -334,6 +334,7 @@ repo_name=リポジトリ名
repo_name_helper=偉大なリポジトリ名は短い。思い出に残り、そして<strong>一意</strong>だ。
visibility=ビジビリティ
visiblity_helper=このリポジトリは<span class="ui red text">プライベート</span>です。
visiblity_helper_forced=サイト管理者は、強制的にすべての新しいリポジトリを<span class="ui red text"> プライベート</span> にしています。
visiblity_fork_helper=(この値の変更はすべてのフォークに適用されます)
fork_repo=フォークのリポジトリ
fork_from=フォーク元
@@ -344,8 +345,8 @@ repo_lang_helper=.gitignoreファイルを選択
license=ライセンス
license_helper=ライセンス ファイルを選択
readme=Readme
readme_helper=Select a readme template
auto_init=Initialize this repository with selected files and template
readme_helper=Readme ファイルのテンプレートを選択
auto_init=選択されたファイルおよびテンプレートでリポジトリを初期化
create_repo=リポジトリを作成
default_branch=デフォルトのブランチ
mirror_interval=ミラー 間隔(時)
@@ -355,15 +356,18 @@ form.name_pattern_not_allowed=リポジトリ名のパターン '%s' は許可
need_auth=認証が必要
migrate_type=マイグレーションの種類
migrate_type_helper=This repository will be a <span class="text blue">mirror</span>
migrate_type_helper=このリポジトリは、<span class="text blue"> ミラー</span> になります
migrate_repo=リポジトリを移行
migrate.clone_address=クローンアドレス
migrate.clone_address_desc=This can be a HTTP/HTTPS/GIT URL or local server path.
migrate.clone_address_desc=これは、HTTP/HTTPS/GIT URL またはローカル サーバー パスを設定できます。
migrate.permission_denied=You are not allowed to import local repositories.
migrate.invalid_local_path=ローカルパスが無効です。存在しないかディレクトリではありません。
forked_from=フォーク元
fork_from_self=すでにあなたの所有しているリポジトリはフォークできません
copy_link=コピー
copy_link_success=コピーされました!
copy_link_error=⌘ C または Ctrl-C キーを押してコピー
click_to_copy=クリップボードにコピー
copied=コピー成功
clone_helper=クローニングのヘルプが必要ですか?<a target="_blank"href="%s"> ヘルプ</a> を参照してください!
@@ -378,6 +382,8 @@ quick_guide=クイック ガイド
clone_this_repo=このリポジトリのクローンを作成
create_new_repo_command=コマンドラインで新しいリポジトリを作成します。
push_exist_repo=コマンド ・ ラインから既存のリポジトリをプッシュ
repo_is_empty=このリポジトリは空です、後で戻って来て下さい!
branch=ブランチ
tree=ツリー
@@ -427,7 +433,7 @@ issues.filter_label_no_select=選択したラベルがありません。
issues.filter_milestone=マイルストーン
issues.filter_milestone_no_select=選択されたマイルストーンなし
issues.filter_assignee=アサインされた人
issues.filter_assginee_no_select=No selected Assignee
issues.filter_assginee_no_select=選択可能な担当者がいない
issues.filter_type=タイプ
issues.filter_type.all_issues=すべての問題
issues.filter_type.assigned_to_you=あなたに割り当てられました。
@@ -436,7 +442,7 @@ issues.filter_type.mentioning_you=あなたに伝える
issues.filter_sort=並べ替え
issues.filter_sort.latest=最新
issues.filter_sort.oldest=最も古い
issues.filter_sort.recentupdate=Recently updated
issues.filter_sort.recentupdate=最近更新された
issues.filter_sort.leastupdate=Least recently updated
issues.filter_sort.mostcomment=Most commented
issues.filter_sort.leastcomment=Least commented
@@ -444,27 +450,27 @@ issues.opened_by=opened %[1]s by <a href="%[2]s">%[3]s</a>
issues.opened_by_fake=opened %[1]s by %[2]s
issues.previous=前ページ
issues.next=次ページ
issues.open_title=Open
issues.closed_title=Closed
issues.num_comments=%d comments
issues.open_title=オープン
issues.closed_title=クローズ
issues.num_comments=%d コメント
issues.commented_at=`commented <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.no_content=There is no content yet.
issues.close_issue=Close
issues.close_comment_issue=Close and comment
issues.no_content=まだコンテンツがありません
issues.close_issue=閉じる
issues.close_comment_issue=コメントと閉じる
issues.reopen_issue=Reopen
issues.reopen_comment_issue=Reopen and comment
issues.create_comment=Comment
issues.reopen_comment_issue=コメントと再開
issues.create_comment=コメント 
issues.closed_at=`closed <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`reopened <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.commit_ref_at=`referenced this issue from a commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.poster=Poster
issues.admin=Admin
issues.owner=Owner
issues.sign_up_for_free=Sign up for free
issues.poster=ポスター
issues.admin=アドミン
issues.owner=オーナー
issues.sign_up_for_free=無料でサインアップ
issues.sign_in_require_desc=to join this conversation. Already have an account? <a href="%s">Sign in to comment</a>
issues.edit=Edit
issues.cancel=Cancel
issues.save=Save
issues.edit=編集
issues.cancel=キャンセル
issues.save=保存
issues.label_title=ラベル名
issues.label_color=ラベルの色
issues.label_count=%d ラベル
@@ -478,26 +484,28 @@ issues.label_deletion_success=ラベルは正常に削除されました。
pulls.compare_changes=変更を比較
pulls.compare_changes_desc=2つのブランチを比較し、プルリクエストを作成します。
pulls.compare_base=base
pulls.compare_compare=compare
pulls.filter_branch=Filter branch
pulls.compare_base=ベース
pulls.compare_compare=比較
pulls.filter_branch=フィルターブランチ
pulls.no_results=結果が見つかりませんでした。
pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Create Pull Request
pulls.create=プルリクエストを作成します。
pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
pulls.tab_conversation=Conversation
pulls.tab_commits=Commits
pulls.tab_files=Files changed
pulls.tab_conversation=会話
pulls.tab_commits=コミット
pulls.tab_files=ファイルが変更された
pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
pulls.merged=Merged
pulls.has_merged=This pull request has been merged successfully!
pulls.merged=マージされた
pulls.has_merged=このプルプルリクエストは正常にマージされました!
pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
pulls.merge_pull_request=Merge Pull Request
pulls.cannot_auto_merge_helper=それを解決するためにコマンド ライン ツールを使用してください。
pulls.merge_pull_request=プルリクエストをマージします。
pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
milestones.new=新しいマイルストーン
milestones.open_tab=%d オープン
@@ -506,22 +514,22 @@ milestones.closed=%s を閉じました
milestones.no_due_date=期限なし
milestones.open=開く
milestones.close=閉じる
milestones.new_subheader=Create milestones to organize your issues.
milestones.create=Create Milestone
milestones.title=Title
milestones.desc=Description
milestones.due_date=Due Date (optional)
milestones.clear=Clear
milestones.invalid_due_date_format=Due date format is invalid, must be 'year-mm-dd'.
milestones.create_success=Milestone '%s' has been created successfully!
milestones.edit=Edit Milestone
milestones.edit_subheader=Use better description for milestones so people won't be confused.
milestones.cancel=Cancel
milestones.modify=Modify Milestone
milestones.edit_success=Changes of milestone '%s' has been saved successfully!
milestones.deletion=Milestone Deletion
milestones.deletion_desc=Delete this milestone will remove its information in all related issues. Do you want to continue?
milestones.deletion_success=Milestone has been deleted successfully!
milestones.new_subheader=あなたの課題を整理するためマイルス トーンを作成します。
milestones.create=マイルス トーンを作成
milestones.title=タイトル
milestones.desc=説明
milestones.due_date=期日 (オプション)
milestones.clear=消去
milestones.invalid_due_date_format=期限日付のフォーマットが無効、'yyyy-mm-dd' のフォーマットが必要です。
milestones.create_success=マイルス トーン '%s' が正常に作成されました!
milestones.edit=マイルス トーンを編集
milestones.edit_subheader=人々を混乱させないため、マイルス トーンにより良い説明を使用します。
milestones.cancel=キャンセル
milestones.modify=マイルス トーンを変更します。
milestones.edit_success=マイルス トーン '%s' の変更が正常に保存されました。
milestones.deletion=マイルス トーンの削除
milestones.deletion_desc=このマイルス トーンを削除すると、関連課題に該当情報が削除されます。続行しますか。
milestones.deletion_success=マイルス トーンは正常に削除されました。
settings=設定
settings.options=オプション
@@ -532,15 +540,15 @@ settings.basic_settings=基本設定
settings.danger_zone=危険地帯
settings.site=公式サイト
settings.update_settings=設定の更新
settings.change_reponame_prompt=This change will affect how links relate to the repository.
settings.change_reponame_prompt=この変更はリンクがリポジトリに関連付ける方法に影響します。
settings.transfer=オーナー移転
settings.transfer_desc=リポジトリをあなたが管理者権限を持っている別のユーザーまた組織に移譲します。
settings.new_owner_has_same_repo=新しいオーナーは、既に同じ名前のリポジトリを持っています。
settings.delete=このリポジトリを削除
settings.delete_desc=リポジトリを削除すると元に戻せません。確実に確認してください。
settings.transfer_notices_1=- You will lose access if new owner is a individual user.
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=Please enter following information to confirm your operation:
settings.transfer_form_title=操作を確認するために、以下の情報を入力してください。
settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
@@ -557,14 +565,14 @@ settings.remove_collaborator_success=共同編集者が削除されました。
settings.user_is_org_member=ユーザーは組織の一員なので、共同編集者として追加することはできません。
settings.add_webhook=Webhook を追加
settings.hooks_desc=Webhooksは、Gogsで特定のイベントの発生時に指定された外部サービスに通知を許可します。イベントが発生すると、それぞれ指定されたUrlに、POSTリクエストが送られます。詳細はこちらのの <a target="_blank"href="%s"> Webhooks ガイド</a>をご覧ください。
settings.webhook_deletion=Delete Webhook
settings.webhook_deletion=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!
settings.webhook.request=Request
settings.webhook.response=Response
settings.webhook.headers=Headers
settings.webhook.payload=Payload
settings.webhook.body=Body
settings.webhook_deletion_success=Webhook が正常に削除されました。
settings.webhook.request=リクエスト
settings.webhook.response=レスポンス
settings.webhook.headers=ヘッダ
settings.webhook.payload=ペイロード
settings.webhook.body=ボディ
settings.githooks_desc=Git のフックは Git 自体によって提供されています。以下のリストのファイルを編集して、サポートされているフックのカスタム操作を適用することができます。
settings.githook_edit_desc=もしフックがアクティブではない場合は、サンプルコンテンツが表示されます。コンテンツを空白にするにはこのフックを無効にします。
settings.githook_name=フックの名前
@@ -574,17 +582,17 @@ settings.add_webhook_desc=私たちは、指定されたURLに購読されたイ
settings.payload_url=ペイロードの URL
settings.content_type=コンテンツ タイプ
settings.secret=秘密
settings.slack_username=Username
settings.slack_icon_url=Icon URL
settings.slack_color=Color
settings.slack_username=ユーザ名
settings.slack_icon_url=アイコン URL
settings.slack_color=カラー
settings.event_desc=どのイベントをこのWEBフックのトリガーにしますか
settings.event_push_only=<code>push</code> イベントのみ
settings.event_send_everything=I need <strong>everything</strong>.
settings.event_send_everything=<strong>すべて</strong> が必要です。
settings.event_choose=Let me choose what I need.
settings.event_create=Create
settings.event_create_desc=Branch, or tag created
settings.event_push=Push
settings.event_push_desc=Git push to a repository
settings.event_create_desc=ブランチ、またはタグを作成
settings.event_push=プッシュ
settings.event_push_desc=Git リポジトリにプッシュ
settings.active=アクティブ
settings.active_helper=このフックのトリガーが引かれた時に、イベントの詳細を配信します。
settings.add_hook_success=新しい webhook が追加されました。
@@ -598,16 +606,16 @@ settings.slack_token=トークン
settings.slack_domain=ドメイン
settings.slack_channel=チャンネル
settings.deploy_keys=デプロイキー
settings.add_deploy_key=Add Deploy Key
settings.no_deploy_keys=You haven't added any deploy key.
settings.title=Title
settings.deploy_key_content=Content
settings.key_been_used=Deploy key content has been used.
settings.key_name_used=Deploy key with same name has already existed.
settings.add_key_success=New deploy key '%s' has been added successfully!
settings.deploy_key_deletion=Delete Deploy Key
settings.deploy_key_deletion_desc=Delete this deploy key will remove all related accesses for this repository. Do you want to continue?
settings.deploy_key_deletion_success=Deploy key has been deleted successfully!
settings.add_deploy_key=デプロイキーを追加
settings.no_deploy_keys=でプロキーは1つも追加されていません。
settings.title=タイトル
settings.deploy_key_content=コンテント
settings.key_been_used=デプロイキーが使用されています。
settings.key_name_used=同じ名前のデプロイキーが既に存在しています。
settings.add_key_success=新しいデプロイキー '%s'が正常に追加されました!
settings.deploy_key_deletion=デプロイキーを削除
settings.deploy_key_deletion_desc=このデプロイキーを削除すると、このリポジトリに関連するすべてのアクセス権も削除されます。続行しますか。
settings.deploy_key_deletion_success=デプロイキーが正常に削除された!
diff.browse_source=ソースを参照
diff.parent=
@@ -644,6 +652,7 @@ release.tag_name_already_exist=このタグ名には既にリリースが存在
[org]
org_name_holder=組織名
org_full_name_holder=Organization Full Name
org_name_helper=偉大な組織の名は短く覚えやすいです。
create_org=組織を作成
repo_updated=更新した
@@ -729,7 +738,7 @@ notices=システム通知
monitor=モニタリング
first_page=First
last_page=Last
total=Total: %d
total=合計: %d
dashboard.statistic=統計
dashboard.operations=操作
@@ -788,23 +797,24 @@ users.activated=アクティブ化
users.admin=アドミン
users.repos=リポジトリ
users.created=作成されました
users.send_register_notify=Send Registration Notification To User
users.send_register_notify=登録通知をユーザーに送信
users.new_success=New account '%s' has been created successfully.
users.edit=編集
users.auth_source=Authentication Source
users.auth_source=認証ソース
users.local=ローカル
users.auth_login_name=Authentication Login Name
users.password_helper=Leave it empty to remain unchanged.
users.auth_login_name=認証ログイン名
users.password_helper=それをそのまま空のままにします。
users.update_profile_success=アカウントのプロファイルが更新されました。
users.edit_account=アカウントの編集
users.is_activated=アカウントがアクティブされました
users.is_admin=このアカウントには管理者の権限を持つ
users.allow_git_hook=このアカウントには Git のフックを作成する権限を持つ
users.allow_import_local=This account has permissions to import local repositories
users.update_profile=アカウント ・ プロファイルを更新
users.delete_account=このアカウントを削除
users.still_own_repo=アカウント所有のリポジトリがあり、リポジトリの削除または所有者の移譲が必要です。
users.still_has_org=アカウントはまだ組織のメンバーであり、組織から退出するか削除する必要があります。
users.deletion_success=Account has been deleted successfully!
users.deletion_success=アカウントが正常に削除されました。
orgs.org_manage_panel=組織の管理パネル
orgs.name=名前
@@ -819,47 +829,47 @@ repos.watches=Watches
repos.stars=Stars
repos.issues=課題
auths.auth_manage_panel=Authentication Manage Panel
auths.new=Add New Source
auths.auth_manage_panel=認証管理パネル
auths.new=新しいソースを追加
auths.name=名前
auths.type=タイプ
auths.enabled=Enabled
auths.updated=Updated
auths.auth_type=Authentication Type
auths.auth_name=Authentication Name
auths.auth_type=認証タイプ
auths.auth_name=認証名
auths.domain=ドメイン
auths.host=ホスト
auths.port=ポート
auths.bind_dn=Bind DN
auths.bind_password=Bind Password
auths.bind_dn=バインド DN
auths.bind_password=バインド パスワード
auths.bind_password_helper=Warning: This password is stored in plain text. Do not use a high privileged account.
auths.user_base=User Search Base
auths.user_base=ユーザ検索ベース
auths.user_dn=User DN
auths.attribute_name=名前属性
auths.attribute_surname=名字属性
auths.attribute_mail=Eメール属性
auths.filter=User Filter
auths.admin_filter=Admin Filter
auths.filter=User フィルター
auths.admin_filter=Admin フィルター
auths.ms_ad_sa=Ms Ad SA
auths.smtp_auth=SMTP Authentication Type
auths.smtp_auth=SMTP 認証の種類
auths.smtphost=SMTP ホスト
auths.smtpport=SMTP ポート
auths.allowed_domains=Allowed Domains
auths.allowed_domains=許可されているドメイン
auths.allowed_domains_helper=Leave it empty to not restrict any domains. Multiple domains should be separated by comma ','.
auths.enable_tls=TLS 暗号化を有効にする
auths.skip_tls_verify=Skip TLS Verify
auths.skip_tls_verify=TLSベリファイを省略
auths.pam_service_name=PAMサービス名
auths.enable_auto_register=自動登録を有効にする
auths.tips=ヒント
auths.edit=Edit Authentication Setting
auths.edit=認証設定を編集
auths.activated=認証がアクティブされました
auths.new_success=New authentication '%s' has been added successfully.
auths.update_success=Authentication setting has been updated successfully.
auths.update=Update Authentication Setting
auths.delete=Delete This Authentication
auths.delete_auth_title=Authentication Deletion
auths.delete_auth_desc=This authentication is going to be deleted, do you want to continue?
auths.deletion_success=Authentication has been deleted successfully!
auths.new_success=新しい認証 '%s' が正常に追加されました。
auths.update_success=認証の設定が正常に更新されました。
auths.update=認証設定を更新
auths.delete=この認証を削除
auths.delete_auth_title=認証削除
auths.delete_auth_desc=認証を削除します、継続しますか?
auths.deletion_success=認証が正常に削除されました。
config.server_config=サーバーの構成
config.app_name=アプリケーション名
@@ -891,12 +901,12 @@ config.show_registration_button=登録ボタンを表示します。
config.require_sign_in_view=サインインを要求
config.enable_cache_avatar=アバターのキャッシュを有効にします。
config.mail_notify=メール通知
config.disable_key_size_check=Disable Minimum Key Size Check
config.enable_captcha=Enable Captcha
config.disable_key_size_check=最小キー サイズ チェックを無効にします
config.enable_captcha=Captchaを有効にする
config.active_code_lives=コードリンクの有効期限をアクティブ
config.reset_password_code_lives=パスワードリンクの有効期限をリセット
config.webhook_config=Webhook設定
config.queue_length=Queue Length
config.queue_length=キューの長さ
config.deliver_timeout=送信タイムアウト
config.skip_tls_verify=TLSの確認を省略
config.mailer_config=メーラーの構成
@@ -946,10 +956,10 @@ notices.delete_success=システム通知が正常に削除されました。
[action]
create_repo=リポジトリ <a href="%s"> %s</a>を作成しました
rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
rename_repo=<code>%[1]s</code> から <a href="%[2]s">[3]s</a> にリポジトリ名を変更した
commit_repo=<a href="%[1]s">%[3]s</a>を<a href="%[1]s/src/%[2]s">%[2]s</a>にプッシュしました
create_issue=`問題 <a href="%s/issues/%s">%s#%[2]s</a> を開きました`
create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
create_pull_request=`プルリクエスト <a href="%s/pulls/%s"> %s[2]s</a>を作成`
comment_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=リポジトリ <code>%s</code> を <a href="%s">%s</a> へ転送しました
@@ -978,8 +988,8 @@ raw_seconds=秒
raw_minutes=
[dropzone]
default_message=Drop files here or click to upload.
invalid_input_type=You can't upload files of this type.
file_too_big=File size({{filesize}} MB) exceeds maximum size({{maxFilesize}} MB).
remove_file=Remove file
default_message=ここにファイルをドロップまたはクリックしてアップロードします。
invalid_input_type=このタイプのファイルはアップロードできません.
file_too_big=ファイルのサイズ ({{filesize}} MB) では、最大サイズ ({{maxFilesize}} MB) を超えています。
remove_file=ファイル削除

View File

@@ -13,7 +13,7 @@ version=Versija
page=Lapa
template=Sagatave
language=Valoda
create_new=Create...
create_new=Izveidot...
user_profile_and_more=Lietotāja profilu un vairāk
signed_in_as=Pierakstījies kā
@@ -53,8 +53,8 @@ code=Kods
[install]
install=Instalācija
title=Instalācijas soļi pirmo reizi palaižot
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=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.
db_title=Datu bāzes iestatījumi
db_type=Datu bāzes veids
host=Resursdators
@@ -64,11 +64,11 @@ db_name=Datu bāzes nosaukums
db_helper=Nepieciešams izmantot MySQL INNODB dzini ar rakstzīmju kopu utf8_general_ci.
ssl_mode=SSL režīms
path=Ceļš
sqlite_helper=The file path of SQLite3 or TiDB database.
err_empty_db_path=SQLite3 or TiDB database path cannot be empty.
err_invalid_tidb_name=TiDB database name does not allow characters "." and "-".
no_admin_and_disable_registration=You cannot disable registration without creating an admin account.
err_empty_admin_password=Admin password cannot be empty.
sqlite_helper=SQLite3 vai TiDB datu bāzes faila atrašanās vieta.
err_empty_db_path=Nepieciešams norādīt SQLite3 vai TiDB datu bāzes atrašanās vietu.
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
app_name=Lietotnes nosaukums
@@ -79,8 +79,8 @@ 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.
domain=Domēns
domain_helper=Tas ietekmē SSH klonēšanas URL.
ssh_port=SSH Port
ssh_port_helper=Port number which your SSH server is using, leave it empty to disable SSH feature.
ssh_port=SSH ports
ssh_port_helper=Porta numurs, kuru izmanto Jūsu SSH serveris, atstājiet tukšu, ja nevēlaties izmantot SSH.
http_port=HTTP ports
http_port_helper=Porta numurs pēc kura lietojumprogrammai būs iespējams pieslēgties.
app_url=Lietotnes URL
@@ -98,12 +98,12 @@ mail_notify=Iespējot e-pasta paziņojumus
server_service_title=Servera un citu servisu iestatījumi
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=Disable Gravatar Service
disable_gravatar_popup=Disable Gravatar and custom sources, all avatars are uploaded by users or default.
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.
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=Enable Captcha
enable_captcha_popup=Require validate captcha for user self-registration.
enable_captcha=Iespējot drošības kodu
enable_captcha_popup=Lietotājam reģistrējoties, pieprasīt ievadīt drošības kodu.
require_sign_in_view=Iespējot nepieciešamību autorizēties, lai aplūkotu lapas
require_sign_in_view_popup=Tika autorizēti lietotāji var aplūkot lapas, neautorizēti lietotāji var piekļūt tikai autorizācijas un reģistrēšanās lapām.
admin_setting_desc=Nav nepieciešams izveidot administratora kontu uzreiz, lietotājs ar ID=1 saņems administratora tiesības automātiski.
@@ -111,7 +111,7 @@ admin_title=Admin konta iestatījumi
admin_name=Lietotājvārds
admin_password=Parole
confirm_password=Apstipriniet paroli
admin_email=E-pasts
admin_email=Administratora e-pasts
install_gogs=Instalēt Gogs
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.
@@ -130,9 +130,9 @@ my_repos=Mani repozitoriji
collaborative_repos=Sadarbības repozitoriji
my_orgs=Manas organizācijas
my_mirrors=Mani spoguļi
view_home=View %s
view_home=Skatīties %s
issues.in_your_repos=In your repositories
issues.in_your_repos=Jūsu repozitorijos
[explore]
repos=Repozitoriji
@@ -148,7 +148,6 @@ forgot_password=Aizmirsu paroli
forget_password=Aizmirsi paroli?
sign_up_now=Nepieciešams konts? Reģistrējies tagad.
confirmation_mail_sent_prompt=Jauns apstiprināšanas e-pasts ir nosūtīts uz <b>%s</b>, lūdzu, pārbaudies savu e-pasta kontu tuvāko %d stundu laikā, lai pabeigtu reģistrācijas procesu.
sign_in_to_account=Sign in to your account
active_your_account=Aktivizēt savu kontu
resent_limit_prompt=Atvainojiet, Jūs sūtījāt aktivizācijas e-pastu pārāk bieži. Lūdzu, gaidiet 3 minūtes.
has_unconfirmed_mail=Sveiki %s, Jums ir neapstiprināta e-pasta adrese (<b>%s</b>). Ja neesat saņēmis apstiprināšanas e-pastu vai Jums ir nepieciešams nosūtīt jaunu, lūdzu, nospiediet pogu, kas atrodas zemāk.
@@ -161,10 +160,10 @@ reset_password_helper=Nospiediet šeit, lai atjaunotu paroli
password_too_short=Paroles garums nedrīkst būt mazāks par 6.
[mail]
activate_account=Please activate your account
activate_email=Verify your e-mail address
reset_password=Reset your password
register_success=Register success, Welcome
activate_account=Lūdzu, aktivizējiet savu kontu
activate_email=Apstipriniet savu e-pasta adresi
reset_password=Atiestatīt savu paroli
register_success=Reģistrācija notikusi veiksmīgi
[modal]
yes=
@@ -192,6 +191,7 @@ min_size_error=` jabūt vismaz %s simbolu garumā.`
max_size_error=` jabūt ne mazāk kā %s simbolu garumā.`
email_error=` nav derīga e-pasta adrese.`
url_error=` nav korekts URL.`
include_error=` ir jāsatur tekstu '%s'.`
unknown_error=Nezināma kļūda:
captcha_incorrect=Pārbaudes kods nesakrīt ar attēlā redzamo.
password_not_match=Parole un atkārtoti ievadītā parole nav vienādas.
@@ -252,7 +252,7 @@ location=Atrašanās vieta
update_profile=Mainīt profilu
update_profile_success=Jūsu profila dati ir veiksmīgi saglabāti.
change_username=Lietotāja vārds mainīts
change_username_prompt=This change will affect the way how links relate to your account.
change_username_prompt=Šī izmaiņa ietekmēs saites, kas norāda uz Jūsu kontu.
continue=Turpināt
cancel=Atcelt
@@ -267,7 +267,7 @@ update_avatar_success=Jūsu profila bilde tika veiksmīgi saglabāta.
change_password=Mainīt paroli
old_password=Pašreizējā parole
new_password=Jauna parole
retype_new_password=Retype New Password
retype_new_password=Ievadīt paroli atkāroti
password_incorrect=Ievadīta nepareiza pašreizējā parole.
change_password_success=Parole tika veiksmīgi nomainīta. Tagad jūs varat pieraksītites, izmantojot jauno paroli.
@@ -277,12 +277,12 @@ email_desc=Primārā e-pasta adrese tiks izmantota sūtot notifikācijas un cit
primary=Primārā
primary_email=Iestatīt kā primāro
delete_email=Dzēst
email_deletion=E-mail Deletion
email_deletion_desc=Delete this e-mail address will remove related information from your account. Do you want to continue?
email_deletion_success=E-mail has been deleted successfully!
email_deletion=E-pasta dzēšana
email_deletion_desc=Dzēšot šo e-pasta adresi, tiks dzēsta arī visa ar to saistītā informācija no Jūsu konta. Vai vēlaties turpināt?
email_deletion_success=E-pasta adrese ir veiksmīgi izdzēsta!
add_new_email=Pievienot jaunu e-pasta adresi
add_email=Pievienot e-pastu
add_email_confirmation_sent=A new confirmation e-mail has been sent to '%s', please check your inbox within the next %d hours to complete the confirmation process.
add_email_confirmation_sent=Jauns apstiprinājuma e-pasts tika nosūtīts uz '%s', pārbaudiet savu e-pastu tuvāko %d stundu laikā, lai pabeigtu apstiprināšanas procesu.
add_email_success=Jūsu jaunā e-pasta adrese tika veiksmīgi pievienota.
manage_ssh_keys=Pārvaldīt SSH atslēgas
@@ -290,20 +290,20 @@ add_key=Pievienot atslēgu
ssh_desc=Šis ir saraksts ar Jūsu kontam piesaistītajām SSH atslēgām. Dzēsiet visas, kuras Jūs neatpazīstat.
ssh_helper=<strong>Vajadzīga palīdzība?</strong> Apskatieties pamācību kā <a href="%s">ģenerēt SSH atslēgas</a> vai kā novērst <a href="%s">biežāk sastopamās SSH problēmas</a>.
add_new_key=Pievienot SSH atslēgu
ssh_key_been_used=Public key content has been used.
ssh_key_name_used=Public key with same name has already existed.
ssh_key_been_used=Šī publiskā atslēga jau ir izmantota.
ssh_key_name_used=Publiskā atslēga ar šādu nosaukumu jau eksistē.
key_name=Atslēgas nosaukums
key_content=Saturs
add_key_success=New SSH key '%s' has been added successfully!
add_key_success=Jauna SSH atslēga '%s' tika veiksmīgi pievienota!
delete_key=Dzēst
ssh_key_deletion=SSH Key Deletion
ssh_key_deletion_desc=Delete this SSH key will remove all related accesses for your account. Do you want to continue?
ssh_key_deletion_success=SSH key has been deleted successfully!
ssh_key_deletion=SSH atslēgas dzēšana
ssh_key_deletion_desc=Dzēšot šo SSH atslēgu, tiks dzēsta visa ar to saistītā piekļuve Jūsu kontam. Vai vēlaties turpināt?
ssh_key_deletion_success=SSH atslēga tika veiksmīgi izdzēsta!
add_on=Pievienota
last_used=Pēdējo reizi izmantota
no_activity=Nav nesenas aktivitātes
key_state_desc=This key is used in last 7 days
token_state_desc=This token is used in last 7 days
key_state_desc=Šī atslēga tika izmantota pēdējo 7 dienu laikā
token_state_desc=Šis talons tika izmantots pēdējo 7 dienu laikā
manage_social=Pārvaldīt piesaistītos sociālos kontus
social_desc=Šeit tiek attēloti visi sociālie konti, kas ir piesaistīti Jūsu kontam. Dzēsiet visus, kurus Jūs neatpazīstat.
@@ -312,15 +312,15 @@ 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=Tokens you have generated that can be used to access the Gogs APIs.
tokens_desc=Taloni, kurus esat uzģenerējuši, kas var tikt izmantoti, lai piekļūtu Gogs API.
new_token_desc=Pašlaik visiem taloniem ir pilna piekļuve Jūsu kontam.
token_name=Talona nosaukums
generate_token=Ģenerēt talonu
generate_token_succees=Jauns piekļuves talons tika veiksmīgi uzģenerēts! Pārliecinieties, ka esat to nokopējis, jo to Jums vairāk nebūs iespēja izdarīt!
delete_token=Dzēst
access_token_deletion=Personal Access Token Deletion
access_token_deletion_desc=Delete this personal access token will remove all related accesses of application. Do you want to continue?
delete_token_success=Personal access token has been removed successfully! Don't forget to update your application as well.
access_token_deletion=Personīgā piekļuves talona dzēšana
access_token_deletion_desc=Dzēšot personīgo piekļuves talonu, tiks liegta piekļuve aplikācijām, kas to izmanto. Vai vēlaties turpināt?
delete_token_success=Personīgās piekļuves talons veiksmīgi izdzēsts! Neaizmirstiet nomainīt uz citu aplikācijās, kas to izmantoja.
delete_account=Dzēst savu kontu
delete_prompt=Šī darbība pilnībā izdzēsīs Jūsu kontu, kā arī tā ir <strong>NEATGRIEZENISKA</strong>!
@@ -333,37 +333,41 @@ owner=Īpašnieks
repo_name=Repozitorija nosaukums
repo_name_helper=Labi repzotoriju nosaukumi ir īsi, tādi kurus viegli atcerēties un <strong>unikāli</strong>.
visibility=Redzamība
visiblity_helper=This repository is <span class="ui red text">Private</span>
visiblity_fork_helper=(Change of this value will affect all forks)
visiblity_helper=Šis repozitorijs ir <span class="ui red text">privāts</span>
visiblity_helper_forced=Lapas administrators ir noteicis, ka visiem repozitorijiem ir jābūt <span class="ui red text">privātiem</span>
visiblity_fork_helper=(Šīs vērtības maiņa ietekmēs arī visus atdalītos repozitorijus)
fork_repo=Atdalīt repozitoriju
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_lang_helper=Select .gitignore files
repo_lang_helper=Izvēlieties .gitignore failus
license=Licence
license_helper=Izvēlieties licences failu
readme=Readme
readme_helper=Select a readme template
auto_init=Initialize this repository with selected files and template
readme=LasiMani
readme_helper=Izvēlieties faila LasiMani sagatavi
auto_init=Inicializēt šo repozitoriju ar izvēlētajiem failiem un sagatavi
create_repo=Izveidot repozitoriju
default_branch=Noklusējuma atzars
mirror_interval=Spoguļošanas intervāls (stundās)
form.name_reserved=Repository name '%s' is reserved.
form.name_pattern_not_allowed=Repository name pattern '%s' is not allowed.
form.name_reserved=Repozitorija nosaukums '%s' ir rezervēts.
form.name_pattern_not_allowed=Repozitorija nosaukums '%s' nav atļauts.
need_auth=Nepieciešama autorizācija
migrate_type=Migrācijas veids
migrate_type_helper=This repository will be a <span class="text blue">mirror</span>
migrate_type_helper=Šis repozitorijs būs <span class="text blue">spogulis</span>
migrate_repo=Migrēt repozitoriju
migrate.clone_address=Clone Address
migrate.clone_address_desc=This can be a HTTP/HTTPS/GIT URL or local server path.
migrate.invalid_local_path=Invalid local path, it does not exist or not a directory.
migrate.clone_address=Klonēšanas adrese
migrate.clone_address_desc=Tas var būt HTTP/HTTPS/GIT URL vai ceļš uz lokālā servera.
migrate.permission_denied=You are not allowed to import local repositories.
migrate.invalid_local_path=Nekorents lokālais ceļš, tas neeksistē vai nav direktorijs.
forked_from=forked from
fork_from_self=You cannot fork repository you already owned!
forked_from=atdalīts no
fork_from_self=Nav iespējams atdalīt repozitoriju, kuram esat īpašnieks!
copy_link=Kopēt
copy_link_success=Nokopēts!
copy_link_error=Nospiediet ⌘-C vai Ctrl-C, lai nokopētu
click_to_copy=Kopēt uz starpliktuvi
copied=Kopēšana notikusi veiksmīgi
clone_helper=Nepieciešama palīdzība kā veikt klonēšana? Apmeklējiet <a target="_blank" href="%s">Palīdzība</a> lapu!
@@ -378,6 +382,8 @@ quick_guide=Īsa pamācība
clone_this_repo=Klonēt šo repozitoriju
create_new_repo_command=Izveidot jaunu repozitoriju komandrindā
push_exist_repo=Nosūtīt izmaiņas no komandrindas eksistējošam repozitorijam
repo_is_empty=Šis repozitorijs ir tukšs, apskatiet atkal vēlāk!
branch=Atzars
tree=Koks
@@ -385,15 +391,15 @@ branch_and_tags=Atzari un tagi
branches=Atzari
tags=Tagi
issues=Problēmas
pulls=Pull Requests
labels=Labels
milestones=Milestones
pulls=Izmaiņu pieprasījumi
labels=Etiķetes
milestones=Atskaites punkti
commits=Revīzijas
releases=Laidieni
file_raw=Neapstrādāts
file_history=Vēsture
file_view_raw=Rādīt neapstrādātu
file_permalink=Permalink
file_permalink=Patstāvīgā saite
commits.commits=Revīzijas
commits.search=Meklēt revīzijas
@@ -404,124 +410,126 @@ commits.date=Datums
commits.older=Vecāki
commits.newer=Jaunāki
issues.new=New Issue
issues.new.labels=Labels
issues.new.no_label=No Label
issues.new.clear_labels=Clear labels
issues.new.milestone=Milestone
issues.new.no_milestone=No Milestone
issues.new.clear_milestone=Clear milestone
issues.new.open_milestone=Open Milestones
issues.new.closed_milestone=Closed Milestones
issues.new.assignee=Assignee
issues.new.clear_assignee=Clear assignee
issues.new.no_assignee=No assignee
issues.create=Create Issue
issues.new_label=New Label
issues.new_label_placeholder=Label name...
issues.create_label=Create Label
issues.open_tab=%d Open
issues.close_tab=%d Closed
issues.filter_label=Label
issues.filter_label_no_select=No selected label
issues.filter_milestone=Milestone
issues.filter_milestone_no_select=No selected milestone
issues.filter_assignee=Assignee
issues.filter_assginee_no_select=No selected Assignee
issues.filter_type=Type
issues.filter_type.all_issues=All issues
issues.filter_type.assigned_to_you=Assigned to you
issues.filter_type.created_by_you=Created by you
issues.filter_type.mentioning_you=Mentioning you
issues.new=Jauna problēma
issues.new.labels=Etiķetes
issues.new.no_label=Nav etiķešu
issues.new.clear_labels=Noņemt etiķetes
issues.new.milestone=Atskaites punkts
issues.new.no_milestone=Nav atskaites punktu
issues.new.clear_milestone=Notīrīt atskaites punktus
issues.new.open_milestone=Atvērtie atskaites punktus
issues.new.closed_milestone=Aizvērtie atskaites punkti
issues.new.assignee=Atbildīgais
issues.new.clear_assignee=Noņemt atbildīgo
issues.new.no_assignee=Nav atbildīgā
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.open_tab=%d atvērti
issues.close_tab=%d aizvērti
issues.filter_label=Etiķete
issues.filter_label_no_select=Nav atzīmēta etiķete
issues.filter_milestone=Atskaites punkts
issues.filter_milestone_no_select=Nav atzīmēts atskaites punkts
issues.filter_assignee=Atbildīgais
issues.filter_assginee_no_select=Nav atzīmēts atbildīgais
issues.filter_type=Veids
issues.filter_type.all_issues=Visas problēmas
issues.filter_type.assigned_to_you=Piešķirtās Jums
issues.filter_type.created_by_you=Jūsu izveidotās
issues.filter_type.mentioning_you=Esat pieminēts
issues.filter_sort=Kārtot
issues.filter_sort.latest=Jaunākie
issues.filter_sort.oldest=Vecakie
issues.filter_sort.recentupdate=Recently updated
issues.filter_sort.leastupdate=Least recently updated
issues.filter_sort.mostcomment=Most commented
issues.filter_sort.leastcomment=Least commented
issues.opened_by=opened %[1]s by <a href="%[2]s">%[3]s</a>
issues.opened_by_fake=opened %[1]s by %[2]s
issues.previous=Previous
issues.next=Next
issues.filter_sort.recentupdate=Nesen atjaunotās
issues.filter_sort.leastupdate=Vissenāk atjaunotās
issues.filter_sort.mostcomment=Visvairāk komentētās
issues.filter_sort.leastcomment=Vismazāk komentētās
issues.opened_by=<a href="%[2]s">%[3]s</a> atvēra %[1]s
issues.opened_by_fake=%[2]s atvēra %[1]s
issues.previous=Iepriekšējā
issues.next=Nākamā
issues.open_title=Atvērta
issues.closed_title=Slēgta
issues.num_comments=%d komentāri
issues.commented_at=`commented <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.no_content=There is no content yet.
issues.commented_at=`komentēja <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.no_content=Vēl nav satura.
issues.close_issue=Aizvērt
issues.close_comment_issue=Close and comment
issues.reopen_issue=Reopen
issues.reopen_comment_issue=Reopen and comment
issues.create_comment=Comment
issues.closed_at=`closed <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`reopened <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.commit_ref_at=`referenced this issue from a commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.poster=Poster
issues.admin=Admin
issues.owner=Owner
issues.sign_up_for_free=Sign up for free
issues.sign_in_require_desc=to join this conversation. Already have an account? <a href="%s">Sign in to comment</a>
issues.close_comment_issue=Komentēt un aizvērt
issues.reopen_issue=Atvērt atkārtoti
issues.reopen_comment_issue=Komentēt un atvērt atkārtoti
issues.create_comment=Komentēt
issues.closed_at=`aizvērts <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`atvērts atkārtoti <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.commit_ref_at=`pieminēja šo problēmu revīzijā <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.poster=Autors
issues.admin=Administrators
issues.owner=Īpašnieks
issues.sign_up_for_free=Pievienojieties
issues.sign_in_require_desc=, lai piedalītos diskusijā. Jau ir konts? <a href="%s">Pierakstieties, lai komentētu</a>
issues.edit=Labot
issues.cancel=Atcelt
issues.save=Saglabāt
issues.label_title=Label name
issues.label_color=Label color
issues.label_count=%d labels
issues.label_open_issues=%d open issues
issues.label_edit=Edit
issues.label_delete=Delete
issues.label_modify=Label Modification
issues.label_deletion=Label Deletion
issues.label_deletion_desc=Delete this label will remove its information in all related issues. Do you want to continue?
issues.label_deletion_success=Label has been deleted successfully!
issues.label_title=Etiķetes nosaukums
issues.label_color=Etiķetes krāsa
issues.label_count=%d etiķetes
issues.label_open_issues=%d atvērtas problēmas
issues.label_edit=Labot
issues.label_delete=Dzēst
issues.label_modify=Etiķetes labošana
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!
pulls.compare_changes=Compare Changes
pulls.compare_changes_desc=Compare two branches and make a pull request for changes.
pulls.compare_base=base
pulls.compare_compare=compare
pulls.filter_branch=Filter branch
pulls.no_results=No results found.
pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Create Pull Request
pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
pulls.tab_conversation=Conversation
pulls.tab_commits=Commits
pulls.tab_files=Files changed
pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
pulls.merged=Merged
pulls.has_merged=This pull request has been merged successfully!
pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
pulls.merge_pull_request=Merge Pull Request
pulls.compare_changes=Salīdzināt izmaiņas
pulls.compare_changes_desc=Salīdzināt divus atzarus un izveidot izmaiņu pieprasījumu.
pulls.compare_base=pamata
pulls.compare_compare=salīdzināmais
pulls.filter_branch=Filtrēt atzarus
pulls.no_results=Nekas netika atrasts.
pulls.nothing_to_compare=Nav ko salīdzināt, jo bāzes un salīdzināmie atzari ir vienādi.
pulls.has_pull_request=`Jau eksistē izmaiņu pieprasījums starp šiem diviem atzariem: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Izveidot izmaiņu pieprasījumu
pulls.title_desc=vēlas sapludināt %[1]d revīzijas no <code>%[2]s</code> uz <code>%[3]s</code>
pulls.merged_title_desc=sapludināja %[1]d revīzijas no <code>%[2]s</code> uz <code>%[3]s</code> %[4]s
pulls.tab_conversation=Saruna
pulls.tab_commits=Revīzijas
pulls.tab_files=Izmainītie faili
pulls.reopen_to_merge=Lūdzu, atkārtoti atveriet šo izmaiņu pieprasījumu, lai veiktu sapludināšanu.
pulls.merged=Sapludināts
pulls.has_merged=Šo izmaiņu pieprasījums tika veiksmīgi sapludināts!
pulls.data_broken=Nepieejami izmaiņu pieprasījuma dati, jo dzēsta informācija no atdalītā repozitorija.
pulls.is_checking=Notiek konfliktu pārbaude, mirkli uzgaidiet un atjaunojiet lapu.
pulls.can_auto_merge_desc=Ir iespējams veikt automātisko sapludināšanas darbību šim izmaiņu pieprasījumam.
pulls.cannot_auto_merge_desc=Nav iespējams veikt automātisko sapludināšanas darbību, jo starp revīzijām ir konflikti.
pulls.cannot_auto_merge_helper=Lūdzu, izmantojiet komandrindas rīku, lai to atrisinātu.
pulls.merge_pull_request=Izmaiņu pieprasījuma sapludināšana
pulls.open_unmerged_pull_exists=`Jūs nevarat veikt atkārtotas atvēršanas darbību, jo jau eksistē izmaiņu pieprasījums (#%d) no šī repozitorija ar tādu pašu sapludināšanas informāciju un gaida sapludināšanu.`
milestones.new=New Milestone
milestones.open_tab=%d Open
milestones.close_tab=%d Closed
milestones.closed=Closed %s
milestones.no_due_date=No due date
milestones.open=Open
milestones.new=Jauns atskaites punkts
milestones.open_tab=%d atvērti
milestones.close_tab=%d aizvērti
milestones.closed=Aizvērts %s
milestones.no_due_date=Bez termiņa
milestones.open=Atvērt
milestones.close=Aizvērt
milestones.new_subheader=Create milestones to organize your issues.
milestones.create=Create Milestone
milestones.new_subheader=Izveidojiet atskaites punktus, lai organizētu problēmas.
milestones.create=Izveidot atskaites punktu
milestones.title=Virsraksts
milestones.desc=Apraksts
milestones.due_date=Due Date (optional)
milestones.clear=Clear
milestones.invalid_due_date_format=Due date format is invalid, must be 'year-mm-dd'.
milestones.create_success=Milestone '%s' has been created successfully!
milestones.edit=Edit Milestone
milestones.edit_subheader=Use better description for milestones so people won't be confused.
milestones.due_date=Termiņš (neobligāts)
milestones.clear=Notīrīt
milestones.invalid_due_date_format=Termiņa datuma formāts ir nekorekts, jābūt formātā 'gggg-mm-dd'.
milestones.create_success=Atskaites punkts '%s' tika veiksmīgi izveidots!
milestones.edit=Labot atskaites punktu
milestones.edit_subheader=Izmantojiet pēc iespējas labāku aprakstu atskaites punktiem, lai citiem tas būtu saprotamāks.
milestones.cancel=Atcelt
milestones.modify=Modify Milestone
milestones.edit_success=Changes of milestone '%s' has been saved successfully!
milestones.deletion=Milestone Deletion
milestones.deletion_desc=Delete this milestone will remove its information in all related issues. Do you want to continue?
milestones.deletion_success=Milestone has been deleted successfully!
milestones.modify=Mainīt atskaites punktu
milestones.edit_success=Izmaiņas atskaites punktā '%s' tika veiksmīgi saglabātas!
milestones.deletion=Atskaites punkta dzēšana
milestones.deletion_desc=Dzēšot šo atskaites punktu tiks noņemta arī saistītā informācija no problēmu ziņojumiem. Vai vēlaties turpināt?
milestones.deletion_success=Atskaites punkts tika veiksmīgi izdzēsts!
settings=Iestatījumi
settings.options=Opcijas
@@ -532,20 +540,20 @@ settings.basic_settings=Pamatiestatījumi
settings.danger_zone=Bīstamā zona
settings.site=Oficiālā mājas lapa
settings.update_settings=Mainīt iestatījumus
settings.change_reponame_prompt=This change will affect how links relate to the repository.
settings.change_reponame_prompt=Šī izmaiņa ietekmēs saites, kas ir saistītas ar šo repozitoriju.
settings.transfer=Mainīt īpašnieku
settings.transfer_desc=Mainīt šī repozitorija īpašnieku uz citu lietotāju vai organizāciju, kurai Jums ir administratora tiesībs.
settings.new_owner_has_same_repo=Jaunajam īpašniekam jau ir repozitorijs ar šādu nosaukumu.
settings.delete=Dzēst šo repozitoriju
settings.delete_desc=Dzēšot repozitoriju, tā datus vairs nebūs iespējams atgūt. Pirms dzēšanas pārliecinieites vai patiešām vēlaties to darīt.
settings.transfer_notices_1=- You will lose access if new owner is a individual user.
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=Please enter following information to confirm your operation:
settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
settings.transfer_notices_1=- Jūs pazaudēsiet piekļuvi, ja jaunais īpašnieks ir lietotājs.
settings.transfer_notices_2=- Jūs saglabāsiet piekļuvi, ja jaunais īpašnieks ir organizācija un Jūs esat viens no tās īpašniekiem.
settings.transfer_form_title=Lūdzu, ievadiet sekojošu informāciju, lai apstiprinātu šo darbību:
settings.delete_notices_1=- Šī darbība ir <strong>NEATGRIEZENISKA</strong>.
settings.delete_notices_2=- Šī darbība neatgriezeniski izdzēsīs visus šī repozitorija datus, tai skaitā Git datus, problēmu ziņojumus, komentārus un definētās piekļuves tiesības.
settings.delete_notices_fork_1=- Ja repozitorijs ir publisks, visi atdalītie repozitoriji kļūs neatkarīgi.
settings.delete_notices_fork_2=- Ja repozitorijs ir privāts, tiks dzēsti arī visi atdalītie repozitoriji.
settings.delete_notices_fork_3=- Ja vēlaties saglabāt atdalīts repozitorijus pēc dzēšanas, sākumā nomainiet repozitorija redzamību uz publisku.
settings.update_settings_success=Repozitorija opcijas ir veiksmīgi saglabātas.
settings.transfer_owner=Jaunais īpašnieks
settings.make_transfer=Mainīt
@@ -557,14 +565,14 @@ settings.remove_collaborator_success=Līdzstrādnieks tika noņemts.
settings.user_is_org_member=Lietotājs ir organizācijas biedrs, kas nevar tikt pievienots kā līdzstrādnieks.
settings.add_webhook=Pievienot tīmekļa āķi
settings.hooks_desc=Tīmekļa āķi ļauj paziņot ārējiem servisiem par noteiktiem notikomiem, kas notiek Git servisā. Kad iestāsies kāds notikums, katram ārējā servisa URL tiks nosūtīts POST pieprasījums. Lai uzzinātu sīkāk skatieties <a target="_blank" href="%s">Tīmekļa āķu rokasgrāmatā</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!
settings.webhook.request=Request
settings.webhook.response=Response
settings.webhook.headers=Headers
settings.webhook.payload=Payload
settings.webhook.body=Body
settings.webhook_deletion=Dzēst tīmekļa āķi
settings.webhook_deletion_desc=Dzēšot tīmekļa āķi tiks dzēsta visa ar to saistītā informācija un izpildes vēsture. Vai vēlaties turpināt?
settings.webhook_deletion_success=Tīmekļa āķis tika veiksmīgi izdzēsts!
settings.webhook.request=Pieprasījums
settings.webhook.response=Atbilde
settings.webhook.headers=Galvenes
settings.webhook.payload=Derīgā krava
settings.webhook.body=Saturs
settings.githooks_desc=Git āķus apstrādā pats Git. Jūs varat labot atbalsīto āku failus sarakstā zemāk, lai veiktu pielāgotas darbības.
settings.githook_edit_desc=Ja āķis nav aktīvs, tiks attēlots piemērs kā to izmantot. Atstājot āķa saturu tukšu, tas tiks atspējots.
settings.githook_name=Āķa nosaukums
@@ -574,17 +582,17 @@ settings.add_webhook_desc=Uz norādīto URL tiks nosūtīts <code>POST</code> pi
settings.payload_url=Vērtuma URL
settings.content_type=Satura tips
settings.secret=Noslēpums
settings.slack_username=Username
settings.slack_icon_url=Icon URL
settings.slack_color=Color
settings.slack_username=Lietotājvārds
settings.slack_icon_url=Ikonas URL
settings.slack_color=Krāsa
settings.event_desc=Kādu notikumu rezultātā tiktu izsaukts tīmekļā āķis?
settings.event_push_only=Tikai izmaiņu nosūtīšanas notikumiem.
settings.event_send_everything=I need <strong>everything</strong>.
settings.event_choose=Let me choose what I need.
settings.event_create=Create
settings.event_create_desc=Branch, or tag created
settings.event_push=Push
settings.event_push_desc=Git push to a repository
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_push=Izmaiņu nosūtīšana
settings.event_push_desc=Git izmaiņu nosūtīšana uz repozitoriju
settings.active=Aktīvs
settings.active_helper=Tiks nosūtīti notikuma dati, kad nostrādās šis āķis.
settings.add_hook_success=Jauns tīmekļa āķis tika veiksmīgi pievienots.
@@ -598,16 +606,16 @@ settings.slack_token=Talons
settings.slack_domain=Domēns
settings.slack_channel=Kanāls
settings.deploy_keys=Izvietot atslēgas
settings.add_deploy_key=Add Deploy Key
settings.no_deploy_keys=You haven't added any deploy key.
settings.add_deploy_key=Pievienot izvietošanas atslēgu
settings.no_deploy_keys=Nav pievienota neviena izvietošanas atslēga.
settings.title=Virsraksts
settings.deploy_key_content=Saturs
settings.key_been_used=Deploy key content has been used.
settings.key_name_used=Deploy key with same name has already existed.
settings.add_key_success=New deploy key '%s' has been added successfully!
settings.deploy_key_deletion=Delete Deploy Key
settings.deploy_key_deletion_desc=Delete this deploy key will remove all related accesses for this repository. Do you want to continue?
settings.deploy_key_deletion_success=Deploy key has been deleted successfully!
settings.key_been_used=Šāda izvietošanas atslēga jau eksistē.
settings.key_name_used=Izvietošanas atslēga ar šādu nosaukumu jau eksistē.
settings.add_key_success=Izvietošanas atslēga '%s' tik veiksmīgi pievienota!
settings.deploy_key_deletion=Dzēst izvietošanas atslēgu
settings.deploy_key_deletion_desc=Dzēšot šo izvietošanas atslēgu tiks noņemta arī ar to saistītā piekļuve šim repozitorijam. Vai vēlaties turpināt?
settings.deploy_key_deletion_success=Izvietošanas atslēga tika veiksmīgi izdzēsta!
diff.browse_source=Pārlūkot izejas kodu
diff.parent=vecāks
@@ -644,6 +652,7 @@ release.tag_name_already_exist=Laidiens ar šādu taga nosaukumu jau eksistē.
[org]
org_name_holder=Organizācijas nosaukums
org_full_name_holder=Organization Full Name
org_name_helper=Labi organizāciju nosaukumi ir īsi un tādi, kurus viegli atcerēties.
create_org=Izveidot organizāciju
repo_updated=Atjaunināts
@@ -660,8 +669,8 @@ team_name_helper=Šo nosaukumu varēs izmantot, lai pieminētu komandu sarunās.
team_desc_helper=Komandas apraksts
team_permission_desc=Kādām tiesībām šai komandai būtu jābūt?
form.name_reserved=Organization name '%s' is reserved.
form.name_pattern_not_allowed=Organization name pattern '%s' is not allowed.
form.name_reserved=Organizācijas nosaukums '%s' ir rezervēts.
form.name_pattern_not_allowed=Organizācijas nosaukums '%s' nav atļauts.
settings=Iestatījumi
settings.options=Opcijas
@@ -670,8 +679,8 @@ settings.website=Mājas lapa
settings.location=Atrašanās vieta
settings.update_settings=Mainīt iestatījumus
settings.update_setting_success=Organizācijas iestatījumi tika veiksmīgi saglabāti.
settings.change_orgname_prompt=This change will affect how links relate to the organization.
settings.update_avatar_success=Organization avatar setting has been updated successfully.
settings.change_orgname_prompt=Šī izmaiņa ietekmēs saites, kas ir saistītas ar šo organizāciju.
settings.update_avatar_success=Organizācijas avatara iestatījumi tika veiksmīgi saglabāti.
settings.delete=Dzēst organizāciju
settings.delete_account=Dzēst šo organizāciju
settings.delete_prompt=Šī darbība pilnībā dzēsīs šo organizāciju, kā arī tā ir <strong>NEATGRIEZENISKA</strong>!
@@ -727,9 +736,9 @@ authentication=Autentifikācijas
config=Konfigurācija
notices=Sistēmas paziņojumi
monitor=Uzraudzība
first_page=First
last_page=Last
total=Total: %d
first_page=Pir
last_page=Pēdējā
total=Kopā: %d
dashboard.statistic=Statistika
dashboard.operations=Darbības
@@ -788,23 +797,24 @@ users.activated=Aktivizēts
users.admin=Administrators
users.repos=Repozitoriji
users.created=Izveidots
users.send_register_notify=Send Registration Notification To User
users.new_success=New account '%s' has been created successfully.
users.send_register_notify=Nosūtīt lietotājam reģistrācijas paziņojumu
users.new_success=Jauns konts '%s' tika veiksmīgi izveidots.
users.edit=Labot
users.auth_source=Authentication Source
users.auth_source=Autentificēšanas avots
users.local=Iebūvētā
users.auth_login_name=Authentication Login Name
users.password_helper=Leave it empty to remain unchanged.
users.auth_login_name=Autentifikācijas pieteikšanās vārds
users.password_helper=Atstājiet tukšu, ja nevēlaties mainīt.
users.update_profile_success=Konta profils tika veiksmīgi saglabāts.
users.edit_account=Labot kontu
users.is_activated=Konts ir aktivizēts
users.is_admin=Šim kontam ir administratora piekļuves tiesības
users.allow_git_hook=Šim kontam ir tiesības pievienot/labot Git āķus
users.allow_import_local=This account has permissions to import local repositories
users.update_profile=Mainīt konta profilu
users.delete_account=Dzēst šo kontu
users.still_own_repo=Šis konts ir vismaz viena repozitorija īpašnieks, tos sākumā ir nepieciešams izdzēst vai nomainīt to īpašnieku.
users.still_has_org=Šis konts ir vismaz vienas organizācijas biedrs, sākumā nepieciešams pamest vai izdzēst šo organizāciju.
users.deletion_success=Account has been deleted successfully!
users.deletion_success=Konts tika veiksmīgi izdzēsts!
orgs.org_manage_panel=Organizāciju pārvaldības panelis
orgs.name=Nosaukums
@@ -819,47 +829,47 @@ repos.watches=Vērošana
repos.stars=Atzīmētās zvaigznītes
repos.issues=Problēmas
auths.auth_manage_panel=Authentication Manage Panel
auths.new=Add New Source
auths.auth_manage_panel=Autentifikācijas pārvaldības panelis
auths.new=Pievienot jaunu avotu
auths.name=Nosaukums
auths.type=Veids
auths.enabled=Iespējota
auths.updated=Atjaunināta
auths.auth_type=Authentication Type
auths.auth_name=Authentication Name
auths.auth_type=Autentifikācijas tips
auths.auth_name=Autentifikācijas nosaukums
auths.domain=Domēns
auths.host=Resursdators
auths.port=Ports
auths.bind_dn=Bind DN
auths.bind_password=Bind Password
auths.bind_password_helper=Warning: This password is stored in plain text. Do not use a high privileged account.
auths.user_base=User Search Base
auths.user_dn=User DN
auths.attribute_name=First name attribute
auths.attribute_surname=Surname attribute
auths.attribute_mail=E-mail attribute
auths.filter=User Filter
auths.admin_filter=Admin Filter
auths.bind_dn=Saistīšanas DN
auths.bind_password=Saistīšanas parole
auths.bind_password_helper=Brīdinājums: Šī parole tiks saglabāta nešifrētā veidā. Neizmantojiet kontu ar augstām privilēģijām.
auths.user_base=Lietotāja pamatnosacījumi
auths.user_dn=Lietotāja DN
auths.attribute_name=Vārda atribūts
auths.attribute_surname=Uzvārda atribūts
auths.attribute_mail=E-pasta atribūts
auths.filter=Lietotāju filts
auths.admin_filter=Administratoru filtrs
auths.ms_ad_sa=MS Ad SA
auths.smtp_auth=SMTP Authentication Type
auths.smtp_auth=SMTP autentifikācijas tips
auths.smtphost=SMTP resursdators
auths.smtpport=SMTP ports
auths.allowed_domains=Allowed Domains
auths.allowed_domains_helper=Leave it empty to not restrict any domains. Multiple domains should be separated by comma ','.
auths.allowed_domains=Atļautie domēni
auths.allowed_domains_helper=Atstājiet tukšu, ja nevēlaties ierobežot domēnu vārdus. Domēna vārdus nepieciešams atdalīt ar komatu ','.
auths.enable_tls=Iespējot TLS šifrēšanu
auths.skip_tls_verify=Skip TLS Verify
auths.pam_service_name=PAM Service Name
auths.skip_tls_verify=Izlaist TLS verifikāciju
auths.pam_service_name=PAM servisa nosaukums
auths.enable_auto_register=Iespējot automātisko reģistrāciju
auths.tips=Padomi
auths.edit=Edit Authentication Setting
auths.edit=Labot autentifikācijas iestatījumus
auths.activated=Autentifikācija ir aktivizēta
auths.new_success=New authentication '%s' has been added successfully.
auths.update_success=Authentication setting has been updated successfully.
auths.update=Update Authentication Setting
auths.delete=Delete This Authentication
auths.delete_auth_title=Authentication Deletion
auths.delete_auth_desc=This authentication is going to be deleted, do you want to continue?
auths.deletion_success=Authentication has been deleted successfully!
auths.new_success=Jauna autentifikācija '%s' tika veiksmīgi pievienota.
auths.update_success=Autentifikācijas iestatījumi tika veiksmīgi saglabāti.
auths.update=Mainīt autentifikācijas iestatījumus
auths.delete=Dzēst šo autentifikāciju
auths.delete_auth_title=Autentifikācijas dzēšana
auths.delete_auth_desc=Šī autentifikācija tiks dzēsta, vai vēlaties turpināt?
auths.deletion_success=Autentifikācija tika veiksmīgi izdzēsta!
config.server_config=Servera konfigurācija
config.app_name=Lietotnes nosaukums
@@ -883,7 +893,7 @@ config.db_user=Lietotājs
config.db_ssl_mode=SSL režīms
config.db_ssl_mode_helper=(tikai PostgreSQL datu bāzei)
config.db_path=Ceļš
config.db_path_helper=(for "sqlite3" and "tidb")
config.db_path_helper=(priekš "sqlite3" and "tidb")
config.service_config=Pakalpojuma konfigurācija
config.register_email_confirm=Pieprasīt e-pasta apstiprināšanu
config.disable_register=Atspējot jaunu lietotāju reģistrāciju
@@ -891,17 +901,17 @@ config.show_registration_button=Rādīt reģistrēšanās pogu
config.require_sign_in_view=Nepieciešama autorizācija
config.enable_cache_avatar=Glabāt profila attēlus kešatmiņā
config.mail_notify=Pasta paziņojumi
config.disable_key_size_check=Disable Minimum Key Size Check
config.enable_captcha=Enable Captcha
config.disable_key_size_check=Atspējot atslēgas minimālā garuma pārbaudi
config.enable_captcha=Iespējot drošības kodu
config.active_code_lives=Aktīvā koda ilgums
config.reset_password_code_lives=Paroles atiestatīšanas koda ilgums
config.webhook_config=Tīkla āķu konfigurācija
config.queue_length=Queue Length
config.queue_length=Rindas garums
config.deliver_timeout=Piegādes noildze
config.skip_tls_verify=Izlaist TLS pārbaudi
config.mailer_config=Sūtītāja konfigurācija
config.mailer_enabled=Iespējots
config.mailer_disable_helo=Disable HELO
config.mailer_disable_helo=Atspējot HELO
config.mailer_name=Nosaukums
config.mailer_host=Resursdators
config.mailer_user=Lietotājs
@@ -946,12 +956,12 @@ notices.delete_success=Sistēmas paziņojums tika veiksmīgi izdzēsts.
[action]
create_repo=izveidoja repozitoriju <a href="%s">%s</a>
rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
rename_repo=pārsauca repozitoriju no <code>%[1]s</code> uz <a href="%[2]s">%[3]s</a>
commit_repo=veica izmaiņu nosūtīšanu atzaram <a href="%s/src/%s">%[2]s</a> repozitorijā <a href="%[1]s">%[3]s</a>
create_issue=`reģistrēja problēmu <a href="%s/issues/%s">%s#%[2]s</a>`
create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
create_pull_request=`izveidoja izmaiņu pieprasījumu <a href="%s/pulls/%s">%s#%[2]s</a>`
comment_issue=`pievienoja komentāru problēmai <a href="%s/issues/%s">%s#%[2]s</a>`
merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
merge_pull_request=`sapludināja izmaiņu pieprasījumu <a href="%s/pulls/%s">%s#%[2]s</a>`
transfer_repo=mainīja repozitorija <code>%s</code> īpašnieku uz <a href="%s">%s</a>
push_tag=pievienoja tagu <a href="%s/src/%s">%[2]s</a> repozitorijam <a href="%[1]s">%[3]s</a>
compare_2_commits=Veikt salīdzināšanu starp šīm 2 revīzijām
@@ -978,8 +988,8 @@ raw_seconds=sekundes
raw_minutes=minūtes
[dropzone]
default_message=Drop files here or click to upload.
invalid_input_type=You can't upload files of this type.
default_message=Ievelciet failus šeit vai noklikšķiniet, lai augšupielādētu.
invalid_input_type=Šādus failus nav iespējams augšupielādēt.
file_too_big=Faila izmērs ({{filesize}} MB) pārsniedz maksimālo atļauto izmēru ({{maxFilesize}} MB).
remove_file=Noņemt failu

View File

@@ -111,7 +111,7 @@ admin_title=Instellingen beheerdersaccount
admin_name=Gebruikersnaam
admin_password=Wachtwoord
confirm_password=Verifieer wachtwoord
admin_email=E-mailadres
admin_email=Admin E-mail
install_gogs=Installeer Gogs
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.
@@ -148,7 +148,6 @@ forgot_password=Wachtwoord vergeten
forget_password=Wachtwoord vergeten?
sign_up_now=Een account nodig? Meld u nu aan.
confirmation_mail_sent_prompt=Een bevestigingsemail is gestuurd naar <b>%s</b>, Bevestig u aanvraag binnen %d uren om uw registratie te voltooien.
sign_in_to_account=Sign in to your account
active_your_account=Activeer uw account
resent_limit_prompt=Sorry, u heeft te snel na elkaar een aanvraag gedaan voor een activatie mail. Wacht drie minuten voor uw volgende aanvraag.
has_unconfirmed_mail=Beste %s, u heeft een onbevestigd e-mailadres (<b>%s</b>). Als u nog geen bevestiging heeft ontvangen, of u een nieuwe aanvraag wilt doen, klik dan op de onderstaande knop.
@@ -192,6 +191,7 @@ min_size_error=moet minimaal %s karakters bevatten.
max_size_error=mag maximaal %s karakters bevatten.
email_error=is niet een valide e-mail adres.
url_error=is niet een valide URL.
include_error=` must contain substring '%s'.`
unknown_error=Onbekende fout:
captcha_incorrect=Captcha komt niet overeen.
password_not_match=Wachtwoord en verificatie wachtwoord komen niet overeen.
@@ -334,6 +334,7 @@ repo_name=Repositorie naam
repo_name_helper=Een goede repositorie naam is kort, memorabel en <strong>uniek</strong>.
visibility=Zichtbaarheid
visiblity_helper=Deze repositorie is <span class="ui red text">privaat</span>
visiblity_helper_forced=Site admin has forced all new repositories to be <span class="ui red text">Private</span>
visiblity_fork_helper=(Verandering van deze waarde zal van invloed zijn op alle forks)
fork_repo=Vork Repository
fork_from=Afsplitsing van
@@ -359,11 +360,14 @@ migrate_type_helper=Deze repositorie zal een <span class="text blue">mirror</spa
migrate_repo=Migreer repositorie
migrate.clone_address=Clone adres
migrate.clone_address_desc=Dit kan een HTTP/HTTPS/GIT URL zijn of een lokaal pad.
migrate.permission_denied=You are not allowed to import local repositories.
migrate.invalid_local_path=Ongeldig lokaal pad, het pad bestaat niet of het is geen map.
forked_from=geforked van
fork_from_self=U kunt geen repository forken die u al beheert!
copy_link=Kopieer
copy_link_success=Copied!
copy_link_error=Press ⌘-C or Ctrl-C to copy
click_to_copy=Kopieer link naar plakbord
copied=Gekopieerd
clone_helper=De behoeftehulp van klonen? Bezoek <a target="_blank" href="%s"> helpen</a>!
@@ -378,6 +382,8 @@ quick_guide=Snelstart gids
clone_this_repo=Kloon deze repositorie
create_new_repo_command=Maak een nieuwe repositorie aan vanaf de console
push_exist_repo=Push een bestaande repositorie vanaf de console
repo_is_empty=This repository is empty, please come back later!
branch=Aftakking
tree=Boom
@@ -494,10 +500,12 @@ pulls.reopen_to_merge=Please reopen this pull request to perform merge operation
pulls.merged=Merged
pulls.has_merged=This pull request has been merged successfully!
pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
pulls.merge_pull_request=Samenvoegen van pull verzoek
pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
milestones.new=Nieuwe mijlpaal
milestones.open_tab=%d geopend
@@ -512,7 +520,7 @@ milestones.title=Titel
milestones.desc=Beschrijving
milestones.due_date=Vervaldatum (optioneel)
milestones.clear=Leegmaken
milestones.invalid_due_date_format=Formaat vervaldatum is ongeldig, moet zijn "jaar-mm-dd".
milestones.invalid_due_date_format=Formaat vervaldatum is ongeldig, moet zijn "jjjj-mm-dd".
milestones.create_success=Mijlpaal '%s' is met succes aangemaakt!
milestones.edit=Bewerk mijlpaal
milestones.edit_subheader=Gebruik een goede beschrijving voor mijlpalen, om verwarring te voorkomen.
@@ -644,6 +652,7 @@ release.tag_name_already_exist=Versie met deze naam bestaat al.
[org]
org_name_holder=Organisatienaam
org_full_name_holder=Organization Full Name
org_name_helper=Een goede organisatienaam is kort en memorabel.
create_org=Nieuwe organisatie aanmaken
repo_updated=Geupdate
@@ -800,6 +809,7 @@ users.edit_account=Bewerk account
users.is_activated=Dit account is geactiveerd
users.is_admin=Dit account heeft beheerdersrechten
users.allow_git_hook=Deze account beschikt over machtigingen voor het maken van Git haken
users.allow_import_local=This account has permissions to import local repositories
users.update_profile=Account profiel bijwerken
users.delete_account=Dit account verwijderen
users.still_own_repo=Dit account is nog steeds eigendom van een repositorie. U moet deze repositorie eerst verwijderen of overdragen.

View File

@@ -13,7 +13,7 @@ version=Wersja
page=Strona
template=Szablon
language=Język
create_new=Create...
create_new=Utwórz...
user_profile_and_more=Profil użytkownika i więcej
signed_in_as=Zalogowany jako
@@ -67,8 +67,8 @@ path=Ścieżka
sqlite_helper=The file path of SQLite3 or TiDB database.
err_empty_db_path=SQLite3 or TiDB database path cannot be empty.
err_invalid_tidb_name=TiDB database name does not allow characters "." and "-".
no_admin_and_disable_registration=You cannot disable registration without creating an admin account.
err_empty_admin_password=Admin password cannot be empty.
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ć pusta.
general_title=Ustawienia ogólne Gogs
app_name=Nazwa aplikacji
@@ -102,7 +102,7 @@ disable_gravatar=Wyłącz usługę Gravatar
disable_gravatar_popup=Disable Gravatar and custom sources, all avatars are uploaded by users or default.
disable_registration=Wyłącz samodzielną rejestrację
disable_registration_popup=Wyłącz samodzielną rejestrację użytkownika, tylko administrator będzie mógł tworzyć konta.
enable_captcha=Enable Captcha
enable_captcha=Włącz Captcha
enable_captcha_popup=Require validate captcha for user self-registration.
require_sign_in_view=Włącz wymóg zalogowania do przeglądania stron
require_sign_in_view_popup=Tylko zalogowani użytkownicy będą mogli przeglądać strony, goście zobaczą tylko stronę logowania.
@@ -111,7 +111,7 @@ admin_title=Ustawienia konta administratora
admin_name=Nazwa Użytkownika
admin_password=Hasło
confirm_password=Potwierdź hasło
admin_email=E-mail
admin_email=Admin E-mail
install_gogs=Zainstaluj Gogs
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.
@@ -130,7 +130,7 @@ my_repos=Moje repozytoria
collaborative_repos=Wspólne repozytoria
my_orgs=Moje organizacje
my_mirrors=Moje mirrory
view_home=View %s
view_home=Zobacz %s
issues.in_your_repos=W twoich repozytoriach
@@ -148,7 +148,6 @@ forgot_password=Zapomniałem hasła
forget_password=Zapomniałeś hasła?
sign_up_now=Potrzebujesz konta? Zarejestruj się teraz.
confirmation_mail_sent_prompt=Nowa wiadomość e-mail z potwierdzeniem została wysłana do <b>%s</b>, proszę sprawdzić swoją skrzynkę odbiorczą w ciągu najbliższych godzin %d aby dokończyć proces rejestracji.
sign_in_to_account=Sign in to your account
active_your_account=Aktywuj swoje konto
resent_limit_prompt=Niestety, zbyt często wysyłasz e-mail aktywacyjny. Proszę odczekać 3 minuty.
has_unconfirmed_mail=Witaj, %s, masz niepotwierdzony adres e-mail (<b>%s</b>). Jeśli nie otrzymałeś wiadomości e-mail z potwierdzeniem lub potrzebujesz wysłać nową, kliknij na poniższy przycisk.
@@ -161,10 +160,10 @@ 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.
[mail]
activate_account=Please activate your account
activate_email=Verify your e-mail address
reset_password=Reset your password
register_success=Register success, Welcome
activate_account=Prosimy aktywować swoje konto
activate_email=Sprawdź Twój adres e-mail
reset_password=Zmień swoje hasło
register_success=Zostałeś zarejestrowany, witamy
[modal]
yes=Tak
@@ -187,11 +186,12 @@ AdminEmail=E-mail administratora
require_error=` nie może być puste.`
alpha_dash_error=` musi się składać z prawidłowych znaków alfanumerycznych, myślników oraz podkreśleń.`
alpha_dash_dot_error=` musi się składać z prawidłowych znaków alfanumerycznych, myślników, podkreśleń oraz kropek.`
size_error=` must be size %s.`
size_error="musi być wielkości %s."
min_size_error=` musi zawierać co najwyżej %s znaków.`
max_size_error=` musi zawierać co najwyżej %s znaków.`
email_error=` nie jest poprawnym adresem e-mail.`
url_error=` nie jest poprawnym adresem URL.`
include_error=` must contain substring '%s'.`
unknown_error=Nieznany błąd:
captcha_incorrect=Kod captcha nie zgadza się.
password_not_match=Hasło i potwierdzenie nie zgadzają się.
@@ -267,7 +267,7 @@ update_avatar_success=Ustawienia awatarów zostały pomyślnie zaktualizowane.
change_password=Zmień hasło
old_password=Aktualne hasło
new_password=Nowe hasło
retype_new_password=Retype New Password
retype_new_password=Powtórz nowe hasło
password_incorrect=Bieżące hasło nie jest prawidłowe.
change_password_success=Hasło zostało zmienione pomyślnie. Możesz teraz zalogować się za pomocą nowego hasła.
@@ -277,9 +277,9 @@ email_desc=Twój podstawowy adres e-mail będzie używany dla powiadomień i inn
primary=Podstawowy
primary_email=Ustaw jako podstawowy
delete_email=Usuń
email_deletion=E-mail Deletion
email_deletion=Usunięcie wiadomości e-mail
email_deletion_desc=Delete this e-mail address will remove related information from your account. Do you want to continue?
email_deletion_success=E-mail has been deleted successfully!
email_deletion_success=E-mail został usunięty pomyślnie!
add_new_email=Dodaj nowy e-mail
add_email=Dodaj e-mail
add_email_confirmation_sent=Nowa wiadomość e-mail z potwierdzeniem została wysłana do '%s', proszę sprawdzić swoją skrzynkę odbiorczą w ciągu %d godzin, aby dokończyć proces potwierdzania.
@@ -291,14 +291,14 @@ ssh_desc=To jest lista kluczy SSH powiązanych z Twoim kontem. Usuń klucze, kt
ssh_helper=<strong>Potrzebujesz pomocy?</strong> Sprawdź nasz przewodnik <a href="%s"> generowania kluczy SSH</a> lub rozwiązywanie <a href="%s">typowych problemów z SSH</a>.
add_new_key=Dodaj klucz SSH
ssh_key_been_used=Public key content has been used.
ssh_key_name_used=Public key with same name has already existed.
ssh_key_name_used=Klucz publiczny o tej samej nazwie już istnieje.
key_name=Nazwa klucza
key_content=Treść
add_key_success=New SSH key '%s' has been added successfully!
add_key_success=Pomyślnie dodano nowy klucz SSH '%s'!
delete_key=Usuń
ssh_key_deletion=Usunięcie klucza SSH
ssh_key_deletion_desc=Usunięcie tego klucza SSH będzie skutkować usunięciem wszystkich powiązanych dostępów do twojego konta. Czy chcesz kontynuować?
ssh_key_deletion_success=SSH key has been deleted successfully!
ssh_key_deletion_success=Klucz SSH został usunięty pomyślnie!
add_on=Dodano
last_used=Ostatnio użyto
no_activity=Brak aktywności
@@ -334,6 +334,7 @@ repo_name=Nazwa repozytorium
repo_name_helper=Dobre nazwy repozytorium są krótkie, wpadające w pamięć i <strong>unikalne</strong>.
visibility=Widoczność
visiblity_helper=To repozytorium jest <span class="ui red text">prywatne</span>
visiblity_helper_forced=Site admin has forced all new repositories to be <span class="ui red text">Private</span>
visiblity_fork_helper=(Change of this value will affect all forks)
fork_repo=Sforkowane
fork_from=Forkuj z
@@ -344,7 +345,7 @@ repo_lang_helper=Wybierz pliki .gitignore
license=Licencja
license_helper=Wybierz plik licencji
readme=Readme
readme_helper=Select a readme template
readme_helper=Wybierz szablon readme
auto_init=Initialize this repository with selected files and template
create_repo=Utwórz repozytorium
default_branch=Domyślna gałąź
@@ -359,11 +360,14 @@ migrate_type_helper=This repository will be a <span class="text blue">mirror</sp
migrate_repo=Przenieś repozytorium
migrate.clone_address=Sklonuj adres
migrate.clone_address_desc=This can be a HTTP/HTTPS/GIT URL or local server path.
migrate.permission_denied=You are not allowed to import local repositories.
migrate.invalid_local_path=Ścieżka jest niepoprawna. Nie istnieje lub nie jest katalogiem.
forked_from=sklonowany z
fork_from_self=You cannot fork repository you already owned!
copy_link=Kopiuj
copy_link_success=Skopiowane!
copy_link_error=Naciśnij klawisze ⌘-C i Ctrl-C, aby skopiować
click_to_copy=Kopiuj do schowka
copied=Skopiowano
clone_helper=Potrzebujesz pomocy z klonowaniem? Odwiedź <a target="_blank" href="%s">Pomoc</a>!
@@ -378,6 +382,8 @@ quick_guide=Skrócona instrukcja
clone_this_repo=Klonuj repozytorium
create_new_repo_command=Utwórz nowe repozytorium z wiersza poleceń
push_exist_repo=Wyślij istniejące repozytorium z wiersza poleceń
repo_is_empty=To repozytorium jest puste, proszę wrócić później!
branch=Gałąź
tree=Drzewo
@@ -387,7 +393,7 @@ tags=Tagi
issues=Problemy
pulls=Pull Requests
labels=Etykiety
milestones=Milestones
milestones=Kamienie milowe
commits=Commity
releases=Wydania
file_raw=Czysty
@@ -411,13 +417,13 @@ issues.new.clear_labels=Wyczyść etykiety
issues.new.milestone=Kamień milowy
issues.new.no_milestone=No Milestone
issues.new.clear_milestone=Clear milestone
issues.new.open_milestone=Open Milestones
issues.new.closed_milestone=Closed Milestones
issues.new.open_milestone=Otwórz "kamienie milowe"
issues.new.closed_milestone=Zamknięte "kamienie milowe"
issues.new.assignee=Assignee
issues.new.clear_assignee=Clear assignee
issues.new.no_assignee=No assignee
issues.create=Create Issue
issues.new_label=New Label
issues.new_label=Nowa etykieta
issues.new_label_placeholder=Label name...
issues.create_label=Create Label
issues.open_tab=%d Open
@@ -449,10 +455,10 @@ issues.closed_title=zamknięty
issues.num_comments=%d komentarzy
issues.commented_at=`commented <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.no_content=There is no content yet.
issues.close_issue=Close
issues.close_comment_issue=Close and comment
issues.reopen_issue=Reopen
issues.reopen_comment_issue=Reopen and comment
issues.close_issue=Zamknij
issues.close_comment_issue=Skomentuj i zamknij
issues.reopen_issue=Otwórz ponownie
issues.reopen_comment_issue=Otwórz ponownie i dodaj komentarz
issues.create_comment=Komentuj
issues.closed_at=`closed <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`reopened <a id="%[1]s" href="#%[1]s">%[2]s</a>`
@@ -474,13 +480,13 @@ issues.label_delete=Usuń
issues.label_modify=Modyfikacja etykiety
issues.label_deletion=Usunięcie etykiety
issues.label_deletion_desc=Delete this label will remove its information in all related issues. Do you want to continue?
issues.label_deletion_success=Label has been deleted successfully!
issues.label_deletion_success=Etykieta została usunięta pomyślnie!
pulls.compare_changes=Compare Changes
pulls.compare_changes_desc=Compare two branches and make a pull request for changes.
pulls.compare_base=base
pulls.compare_compare=compare
pulls.filter_branch=Filter branch
pulls.filter_branch=Filtruj branch
pulls.no_results=Nie znaleziono wyników.
pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
@@ -488,16 +494,18 @@ pulls.create=Utwórz Pull Request
pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
pulls.tab_conversation=Conversation
pulls.tab_commits=Commits
pulls.tab_files=Files changed
pulls.tab_commits=Commity
pulls.tab_files=Pliki zmodyfikowane
pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
pulls.merged=Merged
pulls.merged=Scalone
pulls.has_merged=This pull request has been merged successfully!
pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
pulls.merge_pull_request=Merge Pull Request
pulls.merge_pull_request=Scal Pull Request
pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
milestones.new=Nowy kamień milowy
milestones.open_tab=%d Open
@@ -507,17 +515,17 @@ milestones.no_due_date=Nie ustalono terminu
milestones.open=Otwórz
milestones.close=Zamknij
milestones.new_subheader=Create milestones to organize your issues.
milestones.create=Create Milestone
milestones.title=Title
milestones.desc=Description
milestones.due_date=Due Date (optional)
milestones.create=Utwórz punkt kontrolny
milestones.title=Tytuł
milestones.desc=Opis
milestones.due_date=Termin realizacji (opcjonalnie)
milestones.clear=Wyczyść
milestones.invalid_due_date_format=Due date format is invalid, must be 'year-mm-dd'.
milestones.create_success=Milestone '%s' has been created successfully!
milestones.edit=Edit Milestone
milestones.invalid_due_date_format=Format daty realizacji jest nieprawidłowy, musi być "rrrr-mm-dd".
milestones.create_success=Kamień milowy "%s" został utworzony pomyślnie!
milestones.edit=Edytuj kamień milowy
milestones.edit_subheader=Use better description for milestones so people won't be confused.
milestones.cancel=Cancel
milestones.modify=Modify Milestone
milestones.cancel=Anuluj
milestones.modify=Modyfikuj kamień milowy
milestones.edit_success=Changes of milestone '%s' has been saved successfully!
milestones.deletion=Milestone Deletion
milestones.deletion_desc=Delete this milestone will remove its information in all related issues. Do you want to continue?
@@ -576,12 +584,12 @@ settings.content_type=Typ zawartości
settings.secret=Sekret
settings.slack_username=Username
settings.slack_icon_url=Icon URL
settings.slack_color=Color
settings.slack_color=Kolor
settings.event_desc=Jakie zdarzenia mają wywoływać ten skrypt internetowy?
settings.event_push_only=Tylko zdarzenia <code>push</code>.
settings.event_send_everything=I need <strong>everything</strong>.
settings.event_choose=Let me choose what I need.
settings.event_create=Create
settings.event_send_everything=Potrzebuję <strong>wszystkiego</strong>.
settings.event_choose=Pozwól mi wybrać, czego potrzebuję.
settings.event_create=Utwórz
settings.event_create_desc=Branch, or tag created
settings.event_push=Push
settings.event_push_desc=Git push to a repository
@@ -600,8 +608,8 @@ settings.slack_channel=Kanał
settings.deploy_keys=Klucze wdrożeniowe
settings.add_deploy_key=Add Deploy Key
settings.no_deploy_keys=You haven't added any deploy key.
settings.title=Title
settings.deploy_key_content=Content
settings.title=Tytuł
settings.deploy_key_content=Treść
settings.key_been_used=Deploy key content has been used.
settings.key_name_used=Deploy key with same name has already existed.
settings.add_key_success=New deploy key '%s' has been added successfully!
@@ -644,6 +652,7 @@ release.tag_name_already_exist=Wersja o tej nazwie tagu już istnieje.
[org]
org_name_holder=Nazwa organizacji
org_full_name_holder=Organization Full Name
org_name_helper=Świetne nazwy organizacji są krótkie i łatwe do zapamiętania.
create_org=Utwórz organizację
repo_updated=Zaktualizowano
@@ -727,9 +736,9 @@ authentication=Uwierzytelnienia
config=Konfiguracja
notices=Powiadomienia systemowe
monitor=Monitorowanie
first_page=First
last_page=Last
total=Total: %d
first_page=Pierwsza
last_page=Ostatnia
total=Ogółem: %d
dashboard.statistic=Statystyki
dashboard.operations=Operacje
@@ -800,6 +809,7 @@ users.edit_account=Edytuj konto
users.is_activated=To konto jest aktywne
users.is_admin=To konto ma uprawnienia administratora
users.allow_git_hook=To konto posiada uprawnienia do tworzenia skryptów Git
users.allow_import_local=This account has permissions to import local repositories
users.update_profile=Zaktualizuj profil konta
users.delete_account=Usuń to konto
users.still_own_repo=Twoje konto jest dalej właścicielem repozytorium, musisz je usunąć lub przekazać.
@@ -820,13 +830,13 @@ repos.stars=Polubienia
repos.issues=Problemy
auths.auth_manage_panel=Authentication Manage Panel
auths.new=Add New Source
auths.new=Dodać nowe Źródło
auths.name=Nazwa
auths.type=Typ
auths.enabled=Włączono
auths.updated=Zaktualizowano
auths.auth_type=Authentication Type
auths.auth_name=Authentication Name
auths.auth_type=Typ uwierzytelniania
auths.auth_name=Nazwa uwierzytelniania
auths.domain=Domena
auths.host=Host
auths.port=Port
@@ -844,22 +854,22 @@ auths.ms_ad_sa=Ms Ad SA
auths.smtp_auth=SMTP Authentication Type
auths.smtphost=Serwer SMTP
auths.smtpport=Port SMTP
auths.allowed_domains=Allowed Domains
auths.allowed_domains_helper=Leave it empty to not restrict any domains. Multiple domains should be separated by comma ','.
auths.allowed_domains=Dozwolone domeny
auths.allowed_domains_helper=Pozostaw puste aby nie ograniczać domen. Wiele domen powinno być oddzielone przecinkami ','.
auths.enable_tls=Włącz szyfrowanie TLS
auths.skip_tls_verify=Pomiń weryfikację protokołu TLS
auths.pam_service_name=Nazwa usługi PAM
auths.enable_auto_register=Włącz automatyczną rejestrację
auths.tips=Wskazówki
auths.edit=Edit Authentication Setting
auths.edit=Edytuj ustawienia uwierzytelniania
auths.activated=To uwierzytelnienie zostało aktywowane
auths.new_success=New authentication '%s' has been added successfully.
auths.update_success=Authentication setting has been updated successfully.
auths.update=Update Authentication Setting
auths.delete=Delete This Authentication
auths.delete_auth_title=Authentication Deletion
auths.delete_auth_desc=This authentication is going to be deleted, do you want to continue?
auths.deletion_success=Authentication has been deleted successfully!
auths.new_success=Pomyślnie dodano nowe uwierzytelnianie '%s'.
auths.update_success=Ustawienia uwierzytelnienia zostały zaktualizowane pomyślnie.
auths.update=Aktualizuj ustawienia uwierzytelniania
auths.delete=Usuń to uwierzytelnianie
auths.delete_auth_title=Usunięcie uwierzytelniania
auths.delete_auth_desc=To uwierzytelnienie zostanie usunięte, czy chcesz kontynuować?
auths.deletion_success=Uwierzytelnianie zostało usunięte pomyślnie!
config.server_config=Konfiguracja serwera
config.app_name=Nazwa Aplikacji
@@ -883,7 +893,7 @@ config.db_user=Użytkownik
config.db_ssl_mode=Tryb SSL
config.db_ssl_mode_helper=(tylko dla "postgres")
config.db_path=Ścieżka
config.db_path_helper=(for "sqlite3" and "tidb")
config.db_path_helper=(dla "sqlite3" i "tidb")
config.service_config=Konfiguracja usługi
config.register_email_confirm=Wymagaj potwierdzenia e-mail
config.disable_register=Wyłącz rejestrację
@@ -891,8 +901,8 @@ config.show_registration_button=Pokazuj przycisk rejestracji
config.require_sign_in_view=Wymagaj bycia zalogowanym
config.enable_cache_avatar=Włącz cache awatarów
config.mail_notify=Powiadomienia e-mail
config.disable_key_size_check=Disable Minimum Key Size Check
config.enable_captcha=Enable Captcha
config.disable_key_size_check=Wyłącz sprawdzanie minimalnego rozmiaru klucza
config.enable_captcha=Włącz Captcha
config.active_code_lives=Ważność kodów aktywacyjnych
config.reset_password_code_lives=Czas życia kodu resetowania hasła
config.webhook_config=Konfiguracja skryptów internetowych
@@ -946,12 +956,12 @@ notices.delete_success=Powiadomienia systemowe zostały usunięte pomyślnie.
[action]
create_repo=utworzono repozytorium <a href="%s"> %s</a>
rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
rename_repo=nazwa repozytorium zmieniona z <code>%[1]s</code> na <a href="%[2]s">%[3]s</a>
commit_repo=wypchnął do <a href="%s/src/%s">%[2]s</a> w <a href="%[1]s"> %[3]s</a>
create_issue=`zgłosił problem <a href="%s/issues/%s">#%[2]s %[3]s</a>`
create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
create_pull_request="stworzył pull request <a href="%s/pulls/%s"> %s #%[2]s"</a>
comment_issue=`skomentował problem <a href="%s/issues/%s">#%[2]s %[3]s</a>`
merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
merge_pull_request=scalił pull request <a href="%s/pulls/%s"> %s #%[2]s"</a>
transfer_repo=przeniósł repozytorium <code>%s</code> do <a href="%s">%s</a>
push_tag=opublikował tag <a href="%s/src/%s">%[2]s</a> w <a href="%[1]s">%[3]s</a>
compare_2_commits=Zobacz porównanie tych 2 commitów

View File

@@ -53,7 +53,7 @@ code=Código
[install]
install=Instalação
title=Etapas de instalação para Primeira Execução
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!
docker_helper=Se você está rodando o Gogs dentro do Docker, por favor leia os <a target="_blank" href="%s">Guias</a> cuidadosamente antes de mudar qualquer coisa nesta página!
requite_db_desc=Gogs requer MySQL, PostgreSQL, SQLite3 ou TiDB.
db_title=Configurações de Banco de Dados
db_type=Tipo do Banco de Dados
@@ -102,16 +102,16 @@ disable_gravatar=Desativar Serviço Gravatar
disable_gravatar_popup=Desabilitar o Gravatar e fontes personalizadas, todos os avatares são enviados por usuários ou padrão.
disable_registration=Desativar auto-registro
disable_registration_popup=Desativar o auto-registro de usuário, para que somente o administrador possa criar contas.
enable_captcha=Enable Captcha
enable_captcha_popup=Require validate captcha for user self-registration.
require_sign_in_view=Requerer autenticação para a visualização de páginas
enable_captcha=Habilitar Captcha
enable_captcha_popup=Obrigar validação por captcha para auto-registro de usuários.
require_sign_in_view=Requerer login para a visualização de páginas
require_sign_in_view_popup=Somente usuários autenticados podem ver todas as páginas, visitantes somente podem entrar ou se cadastrar.
admin_setting_desc=Você não precisa criar uma conta de administrador agora, no entanto o primeiro usuário (ID=1) automaticamente terá acesso de administrador.
admin_title=Configurações da Conta de Administrador
admin_name=Nome de Usuário
admin_password=Senha
confirm_password=Confirmar Senha
admin_email=E-mail
admin_email=E-mail do Administrador
install_gogs=Instalar Gogs
test_git_failed=Falha ao testar o comando 'git': %v
sqlite3_not_available=Sua versão não suporta SQLite3, por favor faça o download da versão binária oficial em %s, NÃO da versão gobuild.
@@ -142,13 +142,12 @@ create_new_account=Criar Nova Conta
register_hepler_msg=Já tem uma conta? Entre agora!
social_register_hepler_msg=Já tem uma conta? Junte-se agora!
disable_register_prompt=Desculpe, novos registros estão desabilitados. Por favor entre em contato com o administrador do site.
disable_register_mail=Desculpe, a confirmação de registro por email foi desabilitada.
disable_register_mail=Desculpe, a confirmação de registro por e-mail foi desabilitada.
remember_me=Lembrar de Mim
forgot_password=Esqueci a Senha
forget_password=Esqueceu a senha?
sign_up_now=Precisa de uma conta? Cadastre-se agora.
confirmation_mail_sent_prompt=Um novo e-mail de confirmação foi enviado para <b>%s</b>, por favor, verifique sua caixa de entrada nas próximas %d horas para completar seu registro.
sign_in_to_account=Sign in to your account
active_your_account=Ativar Sua Conta
resent_limit_prompt=Desculpe, você está enviando um e-mail de ativação com muita frequência. Por favor, aguarde 3 minutos.
has_unconfirmed_mail=Oi %s, você possui um endereço de e-mail não confirmado (<b>%s</b>). Se você não recebeu um e-mail de confirmação ou precisa reenviar um novo, clique no botão abaixo.
@@ -161,10 +160,10 @@ reset_password_helper=Clique aqui para redefinir sua senha
password_too_short=O comprimento da senha não pode ser menor que 6.
[mail]
activate_account=Please activate your account
activate_email=Verify your e-mail address
reset_password=Reset your password
register_success=Register success, Welcome
activate_account=Por favor, ative sua conta
activate_email=Verifique seu endereço de e-mail
reset_password=Resetar sua senha
register_success=Registrado com sucesso. Bem vindo
[modal]
yes=Sim
@@ -187,26 +186,27 @@ AdminEmail=E-mail do Administrador
require_error=` não pode estar vazio.`
alpha_dash_error=` devem ser caracteres alfanuméricos ou hífen (-) ou sublinhado (_).`
alpha_dash_dot_error=` devem ser caracteres alfanuméricos ou hífen (-) ou sublinhado (_).`
size_error=` deve ter %s.`
size_error='deve ser o tamanho %s.'
min_size_error=` deve conter pelo menos %s caracteres.`
max_size_error=` deve conter no máximo %s caracteres.`
email_error=` não é um endereço de e-mail válido.`
url_error=`não é uma URL válida.`
include_error=` deve conter '%s'.`
unknown_error=Erro desconhecido:
captcha_incorrect=O captcha não correspondeu.
password_not_match=Senha e confirmar senha não são as mesmas.
password_not_match=Senha e confirmação da senha não são as mesmas.
username_been_taken=Nome de usuário já foi tomado.
repo_name_been_taken=Nome do repositório já foi tomado.
org_name_been_taken=Nome da organização já foi tomado.
team_name_been_taken=Nome da equipe já foi tomado.
email_been_used=Endereço de e-mail já foi usado.
illegal_team_name=O nome da equipe contém caracteres ilegais.
illegal_team_name=O nome da equipe contém caracteres não permitidos.
username_password_incorrect=Usuário ou senha incorretos.
enterred_invalid_repo_name=Por favor certifique-se que informou o nome do repositório corretamente.
enterred_invalid_owner_name=Por favor, verifique se o nome do proprietário está correto.
enterred_invalid_password=Por favor, verifique se a senha que você digitou está correta.
user_not_exist=O usuário dado não existe.
user_not_exist=O usuário informado não existe.
last_org_owner=O usuário a ser removido é o último membro na equipe de proprietários. Deve haver um outro proprietário.
invalid_ssh_key=Desculpe, não conseguimos verificar a sua chave SSH: %s
@@ -219,7 +219,7 @@ org_still_own_repo=Esta organização ainda tem a propriedade do repositório, v
still_own_user=Esta autenticação ainda é usada por alguns usuários, você deve movê-los e depois apagar novamente.
target_branch_not_exist=O ramo de destino não existe.
target_branch_not_exist=O branch de destino não existe.
[user]
change_avatar=Altere o seu avatar em gravatar.com
@@ -228,7 +228,7 @@ join_on=Inscreveu-se em
repositories=Repositórios
activity=Atividade Pública
followers=Seguidores
starred=Marcado
starred=Favorito
following=Seguindo
form.name_reserved=O nome de usuário '%s' não pode ser usado.
@@ -252,7 +252,7 @@ location=Localização
update_profile=Atualizar o Perfil
update_profile_success=O seu perfil foi atualizado com sucesso.
change_username=Nome de Usuário Alterado
change_username_prompt=Essa alteração afetará o modo como ligações referem-se à sua conta.
change_username_prompt=Essa alteração afetará os links para a sua conta.
continue=Continuar
cancel=Cancelar
@@ -273,7 +273,7 @@ change_password_success=A senha está alterada com sucesso. Você pode agora ent
emails=Endereços de E-mail
manage_emails=Gerenciar endereços de e-mail
email_desc=Seu endereço de email principal será usado para notificações e outras operações.
email_desc=Seu endereço de e-mail principal será usado para notificações e outras operações.
primary=Principal
primary_email=Definir como principal
delete_email=Deletar
@@ -287,7 +287,7 @@ add_email_success=Seu novo endereço de E-mail foi adicionado com sucesso.
manage_ssh_keys=Gerenciar Chaves SSH
add_key=Adicionar chave
ssh_desc=Esta é uma lista de chaves SSH associadas com a sua conta. Remova quaisquer chaves que você não reconheça.
ssh_desc=Esta é uma lista de chaves SSH associadas com a sua conta. Como essas chaves permitem que qualquer um que as usem tenham acesso aos seus repositórios, é altamente importante que você reconheça elas.
ssh_helper=<strong>Precisa de ajuda?</strong> Confira nosso guia para <a href="%s">gerar chaves SSH</a> ou solucionar <a href="%s">problemas comuns com SSH</a>.
add_new_key=Adicionar Chave SSH
ssh_key_been_used=Uma chave pública com esse mesmo conteúdo já está em uso.
@@ -331,23 +331,24 @@ delete_account_desc=Esta conta será deletada permanentemente, você quer contin
[repo]
owner=Dono
repo_name=Nome do Repositório
repo_name_helper=Nomes de repositórios bons são pequenos, memorizáveis e <strong>únicos</strong>.
repo_name_helper=Nomes de repositórios bons são pequenos, memorizáveis e únicos.
visibility=Visibilidade
visiblity_helper=Este é um repositório <span class="ui red text"> privado</span>
visiblity_helper_forced=O adminstrador forçou todos os novos repositórios para serem <span class="ui red text">Privados</span>
visiblity_fork_helper=(A alteração desse valor irá afetar todos os forks)
fork_repo=Fork o Repositório
fork_from=Fork de
fork_visiblity_helper=Não é possível alterar a visibilidade de um repositório bifurcado
fork_visiblity_helper=Não é possível alterar a visibilidade de um repositório forkado.
repo_desc=Descrição
repo_lang=Idioma
repo_lang=Linguagem
repo_lang_helper=Selecione arquivos .gitignore
license=Licença
license_helper=Selecione um arquivo de licença
readme=Leia-me
readme_helper=Selecione um modelo de leiame
readme_helper=Selecione um modelo de leia-me
auto_init=Inicializar este repositório com os arquivos selecionados e modelo
create_repo=Criar Repositório
default_branch=Ramo padrão
default_branch=Branch padrão
mirror_interval=Intervalo de Espelho (hora)
form.name_reserved=O nome de repositório '%s' não pode ser usado.
@@ -359,11 +360,14 @@ migrate_type_helper=Este repositório será um <span class="text blue"> espelho<
migrate_repo=Migrar Repositório
migrate.clone_address=Endereço de Clone
migrate.clone_address_desc=Isto pode ser uma URL de HTTP/HTTPS/GIT ou um caminho de diretório local.
migrate.permission_denied=Você não pode importar repositórios locais.
migrate.invalid_local_path=Caminho local inválido, não existe ou não é um diretório.
forked_from=bifurcação de
forked_from=forkado de
fork_from_self=Você não pode criar fork de um repositório que já é seu!
copy_link=Copiar
copy_link_success=Copiado!
copy_link_error=Pressione ⌘-C ou Ctrl-C para copiar
click_to_copy=Copiar para a área de transferência
copied=Copiado com sucesso
clone_helper=Precisa de ajuda com a clonagem? Visite a <a target="_blank" href="%s">Ajuda</a>!
@@ -378,18 +382,20 @@ quick_guide=Guia Rápido
clone_this_repo=Clonar este repositório
create_new_repo_command=Criar um novo repositório na linha de comando
push_exist_repo=Push um repositório existente na linha de comando
repo_is_empty=Este repositório está vazio, por favor volte mais tarde!
branch=Ramo
branch=Branch
tree=Árvore
branch_and_tags=Ramos & Tags
branches=Ramos
branch_and_tags=Branches & Tags
branches=Branches
tags=Tags
issues=Problemas
pulls=Pull Requests
labels=Etiquetas
milestones=Marcos
commits=Commits
releases=Lançamentos
releases=Versões
file_raw=Cru
file_history=Histórico
file_view_raw=Ver cru
@@ -408,7 +414,7 @@ issues.new=Novo problema
issues.new.labels=Etiquetas
issues.new.no_label=Sem etiqueta
issues.new.clear_labels=Limpar
issues.new.milestone=Milestone
issues.new.milestone=Marco
issues.new.no_milestone=Sem marco
issues.new.clear_milestone=Limpar
issues.new.open_milestone=Marcos abertos
@@ -418,7 +424,7 @@ issues.new.clear_assignee=Limpar
issues.new.no_assignee=Não atribuída
issues.create=Salvar
issues.new_label=Nova etiqueta
issues.new_label_placeholder=Nome de etiqueta...
issues.new_label_placeholder=Nome da etiqueta...
issues.create_label=Salvar
issues.open_tab=%d aberto
issues.close_tab=%d fechados
@@ -431,7 +437,7 @@ issues.filter_assginee_no_select=Sem atribuição
issues.filter_type=Tipo
issues.filter_type.all_issues=Todos os problemas
issues.filter_type.assigned_to_you=Atribuídos a você
issues.filter_type.created_by_you=Criados por você
issues.filter_type.created_by_you=Criado por você
issues.filter_type.mentioning_you=Mencionando você
issues.filter_sort=Ordenação
issues.filter_sort.latest=Mais novos
@@ -440,7 +446,7 @@ issues.filter_sort.recentupdate=Mais recentemente atualizados
issues.filter_sort.leastupdate=Menos recentemente atualizados
issues.filter_sort.mostcomment=Mais comentados
issues.filter_sort.leastcomment=Menos comentados
issues.opened_by=%[1]s foi aberto por <a href="/%[2]s">%[3]s</a>
issues.opened_by=%[1]s foi aberto por <a href="%[2]s">%[3]s</a>
issues.opened_by_fake=aberto %[1]s por %[2]s
issues.previous=Página anterior
issues.next=Próxima página
@@ -452,12 +458,12 @@ issues.no_content=Nenhum conteúdo textual.
issues.close_issue=Fechar
issues.close_comment_issue=Comentar e fechar
issues.reopen_issue=Reabrir
issues.reopen_comment_issue=Reabrir e comentar
issues.reopen_comment_issue=Comentar e reabrir
issues.create_comment=Comentar
issues.closed_at=`fechado em <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`reaberto em <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.commit_ref_at=`referenced this issue from a commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.poster=Imagem
issues.commit_ref_at=`citou este problema em um commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.poster=Autor
issues.admin=Administrador
issues.owner=Proprietário
issues.sign_up_for_free=Cadastre-se gratuitamente
@@ -477,27 +483,29 @@ issues.label_deletion_desc=Excluir uma etiqueta a retirará de todos os problema
issues.label_deletion_success=A etiqueta foi excluída com sucesso!
pulls.compare_changes=Comparar mudanças
pulls.compare_changes_desc=Comparar dois ramos e criar solicitação de pull com as mudanças.
pulls.compare_changes_desc=Comparar os dois branches e criar pull request com as mudanças.
pulls.compare_base=base
pulls.compare_compare=comparar
pulls.filter_branch=Filtrar branch
pulls.no_results=Nada encontrado.
pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.nothing_to_compare=Não há nada para comparar porque o branch base e o head estão iguais.
pulls.has_pull_request=`Já existem pull requests entre esses dois alvos: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Criar Pull Request
pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
pulls.title_desc=quer mesclar %[1]d commits de <code>%[2]s</code> em <code>%[3]s</code>
pulls.merged_title_desc=mesclou %[1]d commits de <code>%[2]s</code> em <code>%[3]s</code> %[4]s
pulls.tab_conversation=Conversação
pulls.tab_commits=Commits
pulls.tab_files=Arquivos alterados
pulls.reopen_to_merge=Por favor reabra esse pull request para executar a operação de merge.
pulls.reopen_to_merge=Por favor reabra esse pull request para executar a operação de mescla.
pulls.merged=Merge realizado
pulls.has_merged=This pull request has been merged successfully!
pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
pulls.has_merged=Este pull request foi mesclado com sucesso!
pulls.data_broken=Dados deste pull request foram quebrados devido à deleção de informação do fork.
pulls.is_checking=A verificação do conflito ainda está em progresso, por favor recarregue a página em instantes.
pulls.can_auto_merge_desc=Você pode realizar uma auto-mescla neste pull request.
pulls.cannot_auto_merge_desc=Você não pode realizar uma auto-mescla porque há conflitos entre os commits.
pulls.cannot_auto_merge_helper=Por favor, utilize linha de comando para solucionar isto.
pulls.merge_pull_request=Merge Pull Request
pulls.open_unmerged_pull_exists=' Você não pode executar a operação de reabrir porque já existe uma solicitação de pull aberta (#%d) do mesmo repositório com as mesmas informações de merge e está esperando pelo merge.'
milestones.new=Novo marco
milestones.open_tab=%d abertos
@@ -526,26 +534,26 @@ milestones.deletion_success=Marco excluído com sucesso!
settings=Configurações
settings.options=Opções
settings.collaboration=Colaboração
settings.hooks=Hooks da web
settings.hooks=Webhooks
settings.githooks=Hooks do Git
settings.basic_settings=Configurações Básicas
settings.danger_zone=Zona de Perigo
settings.site=Site Oficial
settings.update_settings=Configurações de Atualização
settings.change_reponame_prompt=This change will affect how links relate to the repository.
settings.change_reponame_prompt=Este mudanças vai afetar os links para este repositório.
settings.transfer=Transferir Propriedade
settings.transfer_desc=Transferir este repositório para outro usuário ou para uma organização onde você tem direitos de administrador.
settings.new_owner_has_same_repo=O novo dono já tem um repositório com o mesmo nome.
settings.new_owner_has_same_repo=O novo dono já tem um repositório com o mesmo nome. Por favor, escolha outro nome.
settings.delete=Deletar Este Repositório
settings.delete_desc=Uma vez que você deleta um repositório, não tem volta. Por favor, tenha certeza.
settings.transfer_notices_1=- You will lose access if new owner is a individual user.
settings.transfer_notices_2=- You will conserve access if new owner is an organization and if you're one of the owners.
settings.transfer_notices_1=- Você vai perder acesso se o novo dono for um usuário individual.
settings.transfer_notices_2=- Você vai continuar tendo acesso se o novo dono é uma organização e você é um dos membros.
settings.transfer_form_title=Informe a seguinte informação para confirmar a sua operação:
settings.delete_notices_1=-Esta operação <strong>NÃO PODERÁ</strong> ser desfeita.
settings.delete_notices_2=- Esta operação irá apagar permanentemente o tudo deste repositório, incluindo os dados do Git, problemas, comentários e acessos dos colaboradores.
settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
settings.delete_notices_fork_1=- Se este repositório é público, todos os forks se tornarão independentes após a deleção.
settings.delete_notices_fork_2=- Se este repositório é privado, todos os forks serão removidos imediatamente.
settings.delete_notices_fork_3=- Se você deseja manter todos os forks, por favor muda a visibilidade do repositório para pública primeiro.
settings.update_settings_success=As opções do repositório foram atualizadas com sucesso.
settings.transfer_owner=Novo Dono
settings.make_transfer=Fazer Transferência
@@ -557,9 +565,9 @@ settings.remove_collaborator_success=O colaborador foi removido.
settings.user_is_org_member=O usuário é um membro da organização que não pode ser adicionado como um colaborador.
settings.add_webhook=Adicionar Webhook
settings.hooks_desc=Hooks da web ou Webhooks permitem serviços externos serem notificados quando certos eventos acontecem no Gogs. Quando acontecem os eventos especificados, enviaremos uma solicitação POST para cada uma das URLs que você fornecer. Saiba mais no nosso <a target="_blank" href="%s"> Guia de Webhooks</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!
settings.webhook_deletion=Deletar Webhook
settings.webhook_deletion_desc=Deletar este Webhook vai remover sua informação e todo o histórico de entrega. Deseja continuar?
settings.webhook_deletion_success=Webhook deletado com sucesso!
settings.webhook.request=Solicitação
settings.webhook.response=Resposta
settings.webhook.headers=Cabeçalhos
@@ -574,10 +582,10 @@ settings.add_webhook_desc=Enviaremos uma solicitação <code>POST</code> para o
settings.payload_url=URL de carga
settings.content_type=Tipo de Conteúdo
settings.secret=Secreto
settings.slack_username=Usuário
settings.slack_username=Nome de usuário
settings.slack_icon_url=URL do ícone
settings.slack_color=Cor
settings.event_desc=Quais eventos você gostaria de acionar a esse hook da web?
settings.event_desc=Quais eventos você gostaria de acionar a esse webhook?
settings.event_push_only=Apenas o evento <code>push</code>.
settings.event_send_everything=Preciso de <strong>tudo</strong>.
settings.event_choose=Deixe-me escolher o que eu preciso.
@@ -588,9 +596,9 @@ settings.event_push_desc=Git push para o repositório
settings.active=Ativar
settings.active_helper=Enviaremos detalhes do evento quando este hook for acionado.
settings.add_hook_success=Novos hooks de web foram adicionados.
settings.update_webhook=Atualizar Hook da Web
settings.update_hook_success=Hook da web atualizado.
settings.delete_webhook=Excluir Hook da Web
settings.update_webhook=Atualizar Webhook
settings.update_hook_success=Webhook atualizado.
settings.delete_webhook=Excluir Webhook
settings.recent_deliveries=Entregas Recentes
settings.hook_type=Tipo de Hook
settings.add_slack_hook_desc=Adicionar <a href="%s">Slack</a> de integração para o seu repositório.
@@ -609,23 +617,23 @@ settings.deploy_key_deletion=Exclusão de chave de deploy
settings.deploy_key_deletion_desc=Excluir esta chave de implantação removerá permissões de acesso a este repositório. Quer mesmo continuar?
settings.deploy_key_deletion_success=Chave de implantação excluída com sucesso!
diff.browse_source=Ver Fontes
diff.browse_source=Ver Código Fonte
diff.parent=pai
diff.commit=commit
diff.data_not_available=Dados Diff não disponíveis.
diff.data_not_available=Dados de Diff não disponíveis.
diff.show_diff_stats=Mostrar estatísticas do Diff
diff.stats_desc=<strong> %d arquivos alterados</strong> com <strong>%d adições</strong> e <strong>%d exclusões</strong>
diff.bin=BIN
diff.view_file=Ver Arquivo
release.releases=Lançamentos
release.new_release=Novo Lançamento
release.releases=Versões
release.new_release=Nova Versão
release.draft=Rascunho
release.prerelease=Pré-Lançamento
release.prerelease=Versão Prévia
release.stable=Estável
release.edit=editar
release.ahead=<strong>%d</strong> commits para %s depois desta versão
release.source_code=Código-fonte
release.source_code=Código fonte
release.tag_name=Nome da tag
release.target=Destino
release.tag_helper=Escolha uma tag existente, ou crie uma nova tag em publicar.
@@ -644,6 +652,7 @@ release.tag_name_already_exist=Já existiu versão com esse nome de tag.
[org]
org_name_holder=Nome da Organização
org_full_name_holder=Nome completo da organização
org_name_helper=Nomes de grandes organizações são curtos e memoráveis.
create_org=Criar Organização
repo_updated=Atualizado
@@ -670,15 +679,15 @@ settings.website=Site
settings.location=Localização
settings.update_settings=Atualizar Configurações
settings.update_setting_success=Configuração da organização atualizada com sucesso.
settings.change_orgname_prompt=This change will affect how links relate to the organization.
settings.update_avatar_success=Organization avatar setting has been updated successfully.
settings.change_orgname_prompt=Esta mudança vai afetar os links para esta organização.
settings.update_avatar_success=A configuração de avatar da organização foi atualizado com sucesso.
settings.delete=Deletar Organização
settings.delete_account=Deletar Esta Organização
settings.delete_prompt=A operação deletará esta organização permanentemente, e <strong>NÃO PODERÁ</strong> ser desfeita!
settings.confirm_delete_account=Confirmar Deleção
settings.delete_org_title=Deleção da Organização
settings.delete_org_desc=Esta organização será deletada permanentemente, você quer continuar?
settings.hooks_desc=Adicionar Hooks da Web que serão acionados para <strong>todos os repositórios</strong> dessa organização.
settings.hooks_desc=Adicionar Webhooks que serão acionados para <strong>todos os repositórios</strong> dessa organização.
members.public=Público
members.public_helper=tornar privado
@@ -786,25 +795,26 @@ users.new_account=Criar Nova Conta
users.name=Nome
users.activated=Ativado
users.admin=Administrador
users.repos=Repos
users.repos=Repositórios
users.created=Criado
users.send_register_notify=Send Registration Notification To User
users.send_register_notify=Enviar notificação de registro para ao usuário
users.new_success=Nova conta '%s' foi criada com sucesso.
users.edit=Editar
users.auth_source=Fonte da autenticação
users.local=Local
users.auth_login_name=Nome de login da autenticação
users.password_helper=Leave it empty to remain unchanged.
users.password_helper=Deixe em branco para não mudar.
users.update_profile_success=O perfil da conta foi atualizado com sucesso.
users.edit_account=Editar Conta
users.is_activated=Esta conta está ativada
users.is_admin=Esta conta tem permissões de administrador
users.allow_git_hook=Esta conta tem permissões para criar ganchos Git
users.allow_git_hook=Esta conta tem permissões para criar hooks do Git
users.allow_import_local=Esta conta tem permissões para importar repositórios locais
users.update_profile=Atualizar Perfil da Conta
users.delete_account=Deletar Esta Conta
users.still_own_repo=Sua conta ainda é proprietária do repositório, você tem que excluir ou transferi-lo primeiro.
users.still_has_org=Sua conta ainda faz parte da organização, você deve sair ou excluí-la primeiro.
users.deletion_success=Account has been deleted successfully!
users.deletion_success=Conta deletada com sucesso!
orgs.org_manage_panel=Painel de Gerenciamento da Organização
orgs.name=Nome
@@ -816,7 +826,7 @@ repos.owner=Dono
repos.name=Nome
repos.private=Privado
repos.watches=Observadores
repos.stars=Estrelas
repos.stars=Favoritos
repos.issues=Problemas
auths.auth_manage_panel=Painel de gerenciamento da autenticação
@@ -830,16 +840,16 @@ auths.auth_name=Nome da autenticação
auths.domain=Domínio
auths.host=Host
auths.port=Porta
auths.bind_dn=Bind DN
auths.bind_password=Bind Password
auths.bind_dn=Vincular DN
auths.bind_password=Vincular senha
auths.bind_password_helper=Atenção: Esta senha é armazenada em texto plano. Não use uma conta com muitos privilégios.
auths.user_base=Base de pesquisa do usuário
auths.user_dn=User DN
auths.user_dn=Usuário do DN
auths.attribute_name=Atributo primeiro nome
auths.attribute_surname=Atributo sobrenome
auths.attribute_mail=Atributo e-mail
auths.filter=User Filter
auths.admin_filter=Admin Filter
auths.filter=Filtro de usuário
auths.admin_filter=Filtro de administrador
auths.ms_ad_sa=Ms Ad SA
auths.smtp_auth=Tipo de autenticação SMTP
auths.smtphost=Host SMTP
@@ -853,13 +863,13 @@ auths.enable_auto_register=Habilitar Registro Automático
auths.tips=Dicas
auths.edit=Editar a configuração de autenticação
auths.activated=Esta autenticação foi ativada
auths.new_success=New authentication '%s' has been added successfully.
auths.new_success=Nova autenticação '%s' foi adicionada com sucesso.
auths.update_success=A configuração da autenticação foi atualizada com sucesso.
auths.update=Atualizar a configuração da autenticação
auths.delete=Excluir esta autenticação
auths.delete_auth_title=Exclusão da autenticação
auths.delete_auth_desc=This authentication is going to be deleted, do you want to continue?
auths.deletion_success=Authentication has been deleted successfully!
auths.delete_auth_desc=Esta autenticação esta prestes a ser deletada, deseja continuar?
auths.deletion_success=Autenticação deletada com sucesso!
config.server_config=Configuração do Servidor
config.app_name=Nome do Aplicativo
@@ -891,7 +901,7 @@ config.show_registration_button=Mostrar Botão de Registo
config.require_sign_in_view=Requerer Entrar no Gogs para Ver
config.enable_cache_avatar=Habilitar Cache de Avatar
config.mail_notify=Notificação de Correio
config.disable_key_size_check=Disable Minimum Key Size Check
config.disable_key_size_check=Desativar verificação de tamanho mínimo da chave
config.enable_captcha=Habilitar o Captcha
config.active_code_lives=Ativar Code Lives
config.reset_password_code_lives=Redefinir Senha de Code Lives
@@ -946,12 +956,12 @@ notices.delete_success=Aviso do sistema foi deletado com sucesso.
[action]
create_repo=repositório criado <a href="%s"> %s</a>
rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
rename_repo=renomeou o o repositório <code>%[1]s</code> para <a href="%[2]s">%[3]s</a>
commit_repo=pushed para <a href="%s/src/%s">%[2]s</a> em <a href="%[1]s">%[3]s</a>
create_issue='questão aberta <a href="%s/issues/%s">%s#%[2]s</a>'
create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
create_pull_request=`criou o pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
comment_issue='comentou sobre a questão <a href="%s/issues/%s">%s#%[2]s</a>'
merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
merge_pull_request=`mesclou o pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
transfer_repo=repositório transferido de <code>%s</code> para <a href="%s">%s</a>
push_tag=Foi feito push na tag <a href="%s/src/%s">%[2]s</a> para <a href="%[1]s">%[3]s</a>
compare_2_commits=Ver comparação desses 2 commits

View File

@@ -13,7 +13,7 @@ version=Версия
page=Страница
template=Шаблон
language=Язык
create_new=Create...
create_new=Создать...
user_profile_and_more=Профиль и остальное
signed_in_as=Вы вошли как
@@ -53,8 +53,8 @@ code=Код
[install]
install=Установка
title=Установочные шаги для первого запуска
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=Если вы используете Gogs в Docker-контейнере, пожалуйста прочтите <a target="_blank" href="%s">эти советы</a>, перед тем как что-либо изменить!
requite_db_desc=Gogs требует MySQL, PostgreSQL, SQLite3 или TiDB.
db_title=Настройки базы данных
db_type=Тип базы данных
host=Хост
@@ -64,11 +64,11 @@ db_name=Имя базы данных
db_helper=Для MySQL используйте тип таблиц InnoDB с кодировкой utf8_general_ci.
ssl_mode=Режим SSL
path=Путь
sqlite_helper=The file path of SQLite3 or TiDB database.
err_empty_db_path=SQLite3 or TiDB database path cannot be empty.
err_invalid_tidb_name=TiDB database name does not allow characters "." and "-".
no_admin_and_disable_registration=You cannot disable registration without creating an admin account.
err_empty_admin_password=Admin password cannot be empty.
sqlite_helper=Путь до базы данных SQLite или TiDB.
err_empty_db_path=Путь к базе данных SQLite3 или TiDB не может быть пустым.
err_invalid_tidb_name=Название базы данных TiDB не может содержать символы "." и "-".
no_admin_and_disable_registration=Вы не можете отключить регистрацию, не создав аккаунт администратора.
err_empty_admin_password=Пароль администратора не может быть пустым.
general_title=Общие параметры Gogs
app_name=Имя приложения
@@ -99,11 +99,11 @@ server_service_title=Сервер и другие настройки служб
offline_mode=Включение офлайн режима
offline_mode_popup=Отключить CDN даже в производственном режиме, все файлы ресурсов будут раздаваться локально.
disable_gravatar=Отключить службу Gravatar
disable_gravatar_popup=Disable Gravatar and custom sources, all avatars are uploaded by users or default.
disable_gravatar_popup=Отключить Gravatar и пользовательские источники, все аватары по-умолчанию загружаются пользователями.
disable_registration=Отключить самостоятельную регистрацию
disable_registration_popup=Запретить пользователям самостоятельную регистрацию, только администратор может создавать аккаунты.
enable_captcha=Enable Captcha
enable_captcha_popup=Require validate captcha for user self-registration.
enable_captcha=Включить капчу
enable_captcha_popup=Запрашивать капчу при регистрации пользователя.
require_sign_in_view=Разрешить требовать авторизацию для просмотра страниц
require_sign_in_view_popup=Только авторизированные пользователи могут просматривать страницы, посетители смогут увидеть только ссылку на авторизацию вверху страницы.
admin_setting_desc=Вы не должны создать учетную запись администратора прямо сейчас, пользователь с ID = 1 получит доступ с правами администратора автоматически.
@@ -111,7 +111,7 @@ admin_title=Настройки учётной записи администра
admin_name=Имя пользователя
admin_password=Пароль
confirm_password=Подтвердить пароль
admin_email=Эл. почта
admin_email=Электронная почта администратора
install_gogs=Установить Gogs
test_git_failed=Не удалось проверить 'git' команду: %v
sqlite3_not_available=Ваша версия не поддерживает SQLite3, пожалуйста скачайте официальную бинарную версию от %s, а не версию gobuild.
@@ -148,7 +148,6 @@ forgot_password=Забыли пароль
forget_password=Забыли пароль?
sign_up_now=Нужен аккаунт? Зарегистрируйтесь.
confirmation_mail_sent_prompt=Новое письмо для подтверждения было направлено на <b>%s</b>, пожалуйста, проверьте ваш почтовый ящик в течение %d часов для завершения регистрации.
sign_in_to_account=Sign in to your account
active_your_account=Активируйте свой аккаунт
resent_limit_prompt=Вы слишком часто отправляете письмо с активацией. Подождите 3 минуты, пожалуйста.
has_unconfirmed_mail=Здравствуйте, %s! У вас есть неподтвержденный адрес электронной почты (<b>%s</b>). Если вам не приходило письмо с подтверждением или нужно выслать новое письмо, нажмите на кнопку ниже.
@@ -161,10 +160,10 @@ reset_password_helper=Нажмите здесь, чтобы сбросить с
password_too_short=Длина пароля не менее 6 символов.
[mail]
activate_account=Please activate your account
activate_email=Verify your e-mail address
reset_password=Reset your password
register_success=Register success, Welcome
activate_account=Пожалуйста активируйте свой аккаунт
activate_email=Подтвердите адрес своей электронной почты
reset_password=Восстановите ваш пароль
register_success=Регистрация окончена. Добро пожаловать!
[modal]
yes=Да
@@ -192,6 +191,7 @@ min_size_error=«должен содержать по крайней мере %s
max_size_error=` должен содержать максимум %s символов.`
email_error=«не является адресом электронной почты.»
url_error=«не является допустимым URL-адресом.»
include_error=` должен содержать '%s'`
unknown_error=Неизвестная ошибка:
captcha_incorrect=CAPTCHA не совпадает.
password_not_match=Пароль и подтверждение пароля не совпадают.
@@ -252,7 +252,7 @@ location=Местоположение
update_profile=Обновить профиль
update_profile_success=Ваш профиль был успешно обновлен.
change_username=Имя пользователя изменено
change_username_prompt=This change will affect the way how links relate to your account.
change_username_prompt=Это изменение может повлечь за собой изменение ссылок относительно вашего аккаунта.
continue=Далее
cancel=Отмена
@@ -267,7 +267,7 @@ update_avatar_success=Настройка вашего аватара обнов
change_password=Сменить пароль
old_password=Текущий пароль
new_password=Новый пароль
retype_new_password=Retype New Password
retype_new_password=Подтверждение нового пароля
password_incorrect=Текущий пароль не правильный.
change_password_success=Пароль сменен успешно. Теперь вы можете войти с новым паролем.
@@ -277,9 +277,9 @@ email_desc=Ваш основной адрес электронной почты
primary=Основной
primary_email=Установить как основной
delete_email=Удалить
email_deletion=E-mail Deletion
email_deletion_desc=Delete this e-mail address will remove related information from your account. Do you want to continue?
email_deletion_success=E-mail has been deleted successfully!
email_deletion=Удаление адреса электронной почты
email_deletion_desc=Удаление этого адреса электронной почты, приведет к удалению связанной с вашим аккаунтом, информации. Вы точно хотите продолжить?
email_deletion_success=Адрес электронной почты успешно удален.
add_new_email=Добавить новый адрес электронной почты
add_email=Добавить электронную почту
add_email_confirmation_sent=Новое подтверждение по электронной почте было отправлено '%s', пожалуйста, проверьте свой почтовый ящик в течение следующих %d часов, чтобы завершить процесс подтверждения.
@@ -318,9 +318,9 @@ token_name=Имя маркера
generate_token=Генерировать маркер
generate_token_succees=Успешно создан новый токен доступа! Пожалуйста сделайте копию вашего нового токена персонального доступа. Вы не сможете увидеть его снова!
delete_token=Удалить
access_token_deletion=Personal Access Token Deletion
access_token_deletion_desc=Delete this personal access token will remove all related accesses of application. Do you want to continue?
delete_token_success=Personal access token has been removed successfully! Don't forget to update your application as well.
access_token_deletion=Удаление персонального токена доступа
access_token_deletion_desc=Удаление этого персонального токена доступа приведет к удалению всех связанных прав доступа к приложению. Вы хотите продолжить?
delete_token_success=Персональный токен доступа успешно удален! Не забудьте изменить настройки вашего приложения.
delete_account=Удалить свой аккаунт
delete_prompt=Этим действием вы удалите свою учетную запись навсегда и <strong>НЕ СМОЖЕТЕ</strong> ее вернуть!
@@ -333,8 +333,9 @@ owner=Владелец
repo_name=Имя репозитория
repo_name_helper=Лучшие названия репозиториев коротки, запоминаемы и <strong>уникальны</strong>.
visibility=Видимость
visiblity_helper=This repository is <span class="ui red text">Private</span>
visiblity_fork_helper=(Change of this value will affect all forks)
visiblity_helper=<span class="ui red text">Личный</span> репозиторий
visiblity_helper_forced=Все новые репозитории являются <span class="ui red text">Личными</span> по желанию администратора сайта
visiblity_fork_helper=(Изменение этого значения затронет все форки)
fork_repo=Ответвить репозиторий
fork_from=Ответвление от
fork_visiblity_helper=Ответвленному репозиторию нельзя поменять уровень видимости
@@ -355,15 +356,18 @@ form.name_pattern_not_allowed=Шаблон имени репозитория '%s
need_auth=Требуется авторизация
migrate_type=Тип миграции
migrate_type_helper=This repository will be a <span class="text blue">mirror</span>
migrate_type_helper=Этот репозиторий будет <span class="text blue">зеркалом</span>
migrate_repo=Перенос репозитория
migrate.clone_address=Скопировать адрес
migrate.clone_address_desc=This can be a HTTP/HTTPS/GIT URL or local server path.
migrate.clone_address_desc=Это может быть HTTP/HTTPS/GIT адрес или локальный путь на сервере.
migrate.permission_denied=You are not allowed to import local repositories.
migrate.invalid_local_path=Недопустимый локальный путь. Возможно он не существует или является не папкой.
forked_from=forked from
forked_from=форк от
fork_from_self=Вы не можете форкнуть репозитарий, так как Вы уже его владелец!
copy_link=Скопировать
copy_link_success=Скопировано!
copy_link_error=Нажмите ⌘-C или Ctrl-C для копирования
click_to_copy=Скопировать в буфер обмена
copied=Успешно скопировано
clone_helper=Нужна помощь в клонировании? Посетите страницу <a target="_blank" href="%s">помощи</a>!
@@ -378,6 +382,8 @@ quick_guide=Краткое руководство
clone_this_repo=Клонировать репозиторий
create_new_repo_command=Создать новый репозиторий из командной строки
push_exist_repo=Отправить существующий репозиторий из командной строки
repo_is_empty=Этот репозиторий пуст, пожалуйста, возвращайтесь позже!
branch=Ветка
tree=Дерево
@@ -385,7 +391,7 @@ branch_and_tags=Ветки и метки
branches=Ветки
tags=Метки
issues=Обсуждения
pulls=Pull Requests
pulls=Пулл реквесты
labels=Метки
milestones=Этапы
commits=Коммиты
@@ -408,26 +414,26 @@ issues.new=Новая задача
issues.new.labels=Метки
issues.new.no_label=Не метка
issues.new.clear_labels=Отчистить метки
issues.new.milestone=Milestone
issues.new.no_milestone=No Milestone
issues.new.clear_milestone=Clear milestone
issues.new.open_milestone=Open Milestones
issues.new.closed_milestone=Closed Milestones
issues.new.assignee=Assignee
issues.new.clear_assignee=Clear assignee
issues.new.no_assignee=No assignee
issues.create=Create Issue
issues.new.milestone=Этап
issues.new.no_milestone=Нет этапа
issues.new.clear_milestone=Очистить этап
issues.new.open_milestone=Открыть этап
issues.new.closed_milestone=Завершенные этапы
issues.new.assignee=Ответственный
issues.new.clear_assignee=Убрать ответственного
issues.new.no_assignee=Нет ответственного
issues.create=Добавить задачу
issues.new_label=Новая метка
issues.new_label_placeholder=Имя метки...
issues.create_label=Create Label
issues.create_label=Добавить метку
issues.open_tab=%d Открыть
issues.close_tab=%d Закрыть
issues.filter_label=Метка
issues.filter_label_no_select=Нет выбранной метки
issues.filter_milestone=Этап
issues.filter_milestone_no_select=No selected milestone
issues.filter_milestone_no_select=Этап не выбран
issues.filter_assignee=Назначено
issues.filter_assginee_no_select=No selected Assignee
issues.filter_assginee_no_select=Ответственный не выбран
issues.filter_type=Тип
issues.filter_type.all_issues=Все задачи
issues.filter_type.assigned_to_you=Назначено Вам
@@ -436,35 +442,35 @@ issues.filter_type.mentioning_you=Вы упомянуты
issues.filter_sort=Сортировать
issues.filter_sort.latest=Новейшие
issues.filter_sort.oldest=Старейшие
issues.filter_sort.recentupdate=Recently updated
issues.filter_sort.leastupdate=Least recently updated
issues.filter_sort.mostcomment=Most commented
issues.filter_sort.leastcomment=Least commented
issues.opened_by=opened %[1]s by <a href="%[2]s">%[3]s</a>
issues.opened_by_fake=opened %[1]s by %[2]s
issues.filter_sort.recentupdate=Недавно обновленные
issues.filter_sort.leastupdate=Давно обновленные
issues.filter_sort.mostcomment=Большего комментариев
issues.filter_sort.leastcomment=Меньше комментариев
issues.opened_by=%[1] открыта <a href="%[2]s">%[3]s</a>
issues.opened_by_fake=%[1]s открыта %[2]s
issues.previous=Предыдущая страница
issues.next=Следующая страница
issues.open_title=Open
issues.closed_title=Closed
issues.num_comments=%d comments
issues.commented_at=`commented <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.no_content=There is no content yet.
issues.close_issue=Close
issues.close_comment_issue=Close and comment
issues.reopen_issue=Reopen
issues.reopen_comment_issue=Reopen and comment
issues.create_comment=Comment
issues.closed_at=`closed <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`reopened <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.commit_ref_at=`referenced this issue from a commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.poster=Poster
issues.admin=Admin
issues.owner=Owner
issues.sign_up_for_free=Sign up for free
issues.sign_in_require_desc=to join this conversation. Already have an account? <a href="%s">Sign in to comment</a>
issues.edit=Edit
issues.cancel=Cancel
issues.save=Save
issues.open_title=Открыта
issues.closed_title=Закрыта
issues.num_comments=комментариев: %d
issues.commented_at=` прокомментировал <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.no_content=Пока нет содержимого.
issues.close_issue=Закрыть
issues.close_comment_issue=Прокомментировать и закрыть
issues.reopen_issue=Открыть снова
issues.reopen_comment_issue=Прокомментировать и открыть
issues.create_comment=Комментировать
issues.closed_at=`закрыл <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`открыл снова <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.commit_ref_at=`упомянул эту задачу в коммите <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.poster=Автор
issues.admin=Администратор
issues.owner=Владелец
issues.sign_up_for_free=Зарегистрируйтесь бесплатно
issues.sign_in_require_desc=чтобы присоединиться к обсуждению. Уже есть аккаунт? <a href="%s">Войдите чтобы прокомментировать</a>
issues.edit=Изменить
issues.cancel=Отмена
issues.save=Сохранить
issues.label_title=Имя метки
issues.label_color=Цвет метки
issues.label_count=%d меток
@@ -476,52 +482,54 @@ issues.label_deletion=Удаление метки
issues.label_deletion_desc=Удаление ярлыка затронет все связанные задачи. Продолжить?
issues.label_deletion_success=Метка была удалена успешно!
pulls.compare_changes=Compare Changes
pulls.compare_changes_desc=Compare two branches and make a pull request for changes.
pulls.compare_base=base
pulls.compare_compare=compare
pulls.filter_branch=Filter branch
pulls.no_results=No results found.
pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Create Pull Request
pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
pulls.tab_conversation=Conversation
pulls.tab_commits=Commits
pulls.tab_files=Files changed
pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
pulls.merged=Merged
pulls.has_merged=This pull request has been merged successfully!
pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
pulls.merge_pull_request=Merge Pull Request
pulls.compare_changes=Сравнить изменения
pulls.compare_changes_desc=Сравнить две ветки и создать пулл реквест для изменений.
pulls.compare_base=родительская ветка
pulls.compare_compare=сравнить
pulls.filter_branch=Фильтр по ветке
pulls.no_results=Результатов не найдено.
pulls.nothing_to_compare=Нечего сравнивать, родительская и текущая ветка одинаковые.
pulls.has_pull_request=`Уже существует пулл-реквест между двумя целями <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Создать пулл-реквест
pulls.title_desc=хочет смерджить %[1]d коммит(ов) из <code>%[2]s</code> в <code>%[3]s</code>
pulls.merged_title_desc=слито %[1]d коммит(ов) из <code>%[2]s</code> в <code>%[3]s</code> %[4]s
pulls.tab_conversation=Обсуждение
pulls.tab_commits=Коммиты
pulls.tab_files=Измененные файлы
pulls.reopen_to_merge=Пожалуйста пересоздайте пулл-реквест для слияния.
pulls.merged=Слито
pulls.has_merged=Слияние этого пулл-реквеста успешно завершено!
pulls.data_broken=Содержимое этого пулл-реквеста было нарушено, вследствии удаления или клонирования информации.
pulls.is_checking=Продолжается проверка конфликтов, пожалуйста обновите страницу несколько позже.
pulls.can_auto_merge_desc=Вы можете провести операцию автоматического слияния для этого пулл-реквеста.
pulls.cannot_auto_merge_desc=Вы не можете произвести операцию автоматического слияния, потому как существуют конфликты между коммитами.
pulls.cannot_auto_merge_helper=Используйте командную строку для решения этого.
pulls.merge_pull_request=Слить пулл-реквест
pulls.open_unmerged_pull_exists=`Вы не можете произвести операцию переоткрытия, потому что уже существует пулл-реквест (#%d) из этого же репозитория, с такими же параметрами слияния, который ожидает слияния.`
milestones.new=New Milestone
milestones.open_tab=%d Open
milestones.close_tab=%d Closed
milestones.closed=Closed %s
milestones.no_due_date=No due date
milestones.open=Open
milestones.close=Close
milestones.new_subheader=Create milestones to organize your issues.
milestones.create=Create Milestone
milestones.title=Title
milestones.desc=Description
milestones.due_date=Due Date (optional)
milestones.clear=Clear
milestones.invalid_due_date_format=Due date format is invalid, must be 'year-mm-dd'.
milestones.create_success=Milestone '%s' has been created successfully!
milestones.edit=Edit Milestone
milestones.edit_subheader=Use better description for milestones so people won't be confused.
milestones.cancel=Cancel
milestones.modify=Modify Milestone
milestones.edit_success=Changes of milestone '%s' has been saved successfully!
milestones.deletion=Milestone Deletion
milestones.deletion_desc=Delete this milestone will remove its information in all related issues. Do you want to continue?
milestones.deletion_success=Milestone has been deleted successfully!
milestones.new=Новая контрольная точка
milestones.open_tab=%d открыты
milestones.close_tab=%d Закрыт
milestones.closed=Закрыт %s
milestones.no_due_date=Срок не указан
milestones.open=Открыть
milestones.close=Закрыть
milestones.new_subheader=Создавайте контрольные точки для трекинга ваших вопросов.
milestones.create=Создать контрольную точку
milestones.title=Заголовок
milestones.desc=Описание
milestones.due_date=Дата окончания (опционально)
milestones.clear=Очистить
milestones.invalid_due_date_format=Некорректная дата окончания. Правильный формат - 'гггг-мм-дд'.
milestones.create_success=Контрольная точка '%s' успешно создана!
milestones.edit=Изменить контрольную точку
milestones.edit_subheader=Используйте лучшее описание контрольной точки, во избежание непонимания со стороны других людей.
milestones.cancel=Отмена
milestones.modify=Изменить контрольную точку
milestones.edit_success=Изменения контрольной точки '%s' успешно сохранены!
milestones.deletion=Удаление контрольной точки
milestones.deletion_desc=Удаление этой контрольной точки приведет с удалению всей информации, во всех вопросах (Issues). Вы действительно хотите продолжить?
milestones.deletion_success=Контрольная точка успешно удалена!
settings=Настройки
settings.options=Опции
@@ -532,20 +540,20 @@ settings.basic_settings=Основные параметры
settings.danger_zone=Опасная зона
settings.site=Официальный сайт
settings.update_settings=Обновить настройки
settings.change_reponame_prompt=This change will affect how links relate to the repository.
settings.change_reponame_prompt=Это изменение повлияет на отношения ссылок к этому репозиторию.
settings.transfer=Передать права собственности
settings.transfer_desc=Передать репозиторий другому пользователю или организации где у вас есть права администратора.
settings.new_owner_has_same_repo=У нового владельца уже есть хранилище с таким названием.
settings.delete=Удалить этот репозиторий
settings.delete_desc=Как только вы удалите репозиторий — пути назад не будет. Удостоверьтесь, что вам это точно нужно.
settings.transfer_notices_1=- You will lose access if new owner is a individual user.
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=Please enter following information to confirm your operation:
settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
settings.transfer_notices_1=- Вы можете потерять доступ, если новый владелец является отдельным пользователем.
settings.transfer_notices_2=- Вы сохраните доступ, если новым владельцем станет организация, владельцем которой вы являетесь.
settings.transfer_form_title=Введите сопутствующую информацию для подтверждения операции:
settings.delete_notices_1=- Эта операция <strong>НЕ МОЖЕТ</strong> быть отменена.
settings.delete_notices_2=- Эта операция перманентно удалит всё из этого репозитория, включая данные Git, связанные с ним вопросы, комментарии и права доступа для сотрудников.
settings.delete_notices_fork_1=- Если данный репозиторий является публичным, все склонированные репозитории останутся независимыми, после его удаления.
settings.delete_notices_fork_2=- Если данный репозиторий является приватным, все его форки будут удалены вместе с ним.
settings.delete_notices_fork_3=- Если вы хотите сохранить все форки после удаления репозитория, то сначала сделайте его публичным.
settings.update_settings_success=Настройка репозитория обновлена успешно.
settings.transfer_owner=Новый владелец
settings.make_transfer=Выполнить передачу
@@ -557,16 +565,16 @@ settings.remove_collaborator_success=Соавтор был удален.
settings.user_is_org_member=Пользователь является членом организации, члены которой не могут быть добавлены в качестве соавтора.
settings.add_webhook=Добавить Webhook
settings.hooks_desc=Webhooks позволяют внешним службам получать уведомления при возникновении определенных событий на Gogs. При возникновении указанных событий мы отправим запрос POST на каждый заданный вами URL. Узнать больше можно в нашем <a target="_blank" href="%s">Руководстве по Webhooks</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!
settings.webhook.request=Request
settings.webhook.response=Response
settings.webhook.headers=Headers
settings.webhook.payload=Payload
settings.webhook.body=Body
settings.githooks_desc=Git Hooks are powered by Git itself, you can edit files of supported hooks in the list below to perform custom operations.
settings.githook_edit_desc=If the hook is inactive, sample content will be presented. Leaving content to an empty value will disable this hook.
settings.webhook_deletion=Удалить веб-хук
settings.webhook_deletion_desc=Удаление этого веб-хука приведет к удалению всей, связанной с ним, информации, включая историю. Хотите продолжить?
settings.webhook_deletion_success=Веб-хук успешно удален!
settings.webhook.request=Запрос
settings.webhook.response=Ответ
settings.webhook.headers=Заголовки
settings.webhook.payload=Содержимое запроса
settings.webhook.body=Тело ответа
settings.githooks_desc=Git-хуки предоставляются Git самим по себе, вы можете изменять файлы поддерживаемых хуков из списка ниже чтобы выполнять внешние операции.
settings.githook_edit_desc=Если хук не активен, будет подставлен пример содержимого. Пустое значение в этом поле приведет к отключению хука.
settings.githook_name=Название Hook'a
settings.githook_content=Перехватить содержание
settings.update_githook=Обновить Hook
@@ -574,19 +582,19 @@ settings.add_webhook_desc=Мы отправим запрос <code>POST</code>
settings.payload_url=URL обработчика
settings.content_type=Тип содержимого
settings.secret=Secret
settings.slack_username=Username
settings.slack_icon_url=Icon URL
settings.slack_color=Color
settings.slack_username=Имя пользователя
settings.slack_icon_url=URL иконки
settings.slack_color=Цвет
settings.event_desc=На какие события этот webhook должен срабатывать?
settings.event_push_only=Просто <code>push</code> событие.
settings.event_send_everything=I need <strong>everything</strong>.
settings.event_choose=Let me choose what I need.
settings.event_create=Create
settings.event_create_desc=Branch, or tag created
settings.event_send_everything=Мне нужно <strong>все</strong>.
settings.event_choose=Позвольте мне выбрать то, что нужно.
settings.event_create=Создать
settings.event_create_desc=Ветка или тэг созданы
settings.event_push=Push
settings.event_push_desc=Git push to a repository
settings.event_push_desc=Push в репозиторий
settings.active=Активен
settings.active_helper=Details regarding the event which triggered the hook will be delivered as well.
settings.active_helper=Подробности о событии, вызвавшем срабатывание хука, также будут предоставлены.
settings.add_hook_success=Был добавлен новый webhook.
settings.update_webhook=Обновление Webhook
settings.update_hook_success=Webhook обновлен.
@@ -598,16 +606,16 @@ settings.slack_token=Token
settings.slack_domain=Домен
settings.slack_channel=Канал
settings.deploy_keys=Ключи развертывания
settings.add_deploy_key=Add Deploy Key
settings.no_deploy_keys=You haven't added any deploy key.
settings.title=Title
settings.deploy_key_content=Content
settings.key_been_used=Deploy key content has been used.
settings.key_name_used=Deploy key with same name has already existed.
settings.add_key_success=New deploy key '%s' has been added successfully!
settings.deploy_key_deletion=Delete Deploy Key
settings.deploy_key_deletion_desc=Delete this deploy key will remove all related accesses for this repository. Do you want to continue?
settings.deploy_key_deletion_success=Deploy key has been deleted successfully!
settings.add_deploy_key=Добавить ключ развертывания
settings.no_deploy_keys=Вы не добавляли ключи развертывания.
settings.title=Заголовок
settings.deploy_key_content=Содержимое
settings.key_been_used=Содержимое ключа развертывания уже используется.
settings.key_name_used=Ключ развертывания с таким заголовком уже существует.
settings.add_key_success=Новый ключ развертывания '%s' успешно добавлен!
settings.deploy_key_deletion=Удалить ключ развертывания
settings.deploy_key_deletion_desc=Удаление ключа развертывания приведет к удалению всех связанных прав доступа к репозиторию. Вы хотите продолжить?
settings.deploy_key_deletion_success=Ключ развертывания успешно удален!
diff.browse_source=Просмотр исходного кода
diff.parent=Родитель
@@ -636,7 +644,7 @@ release.preview=Предварительный просмотр
release.content_placeholder=Напишите что-нибудь
release.loading=Загрузка...
release.prerelease_desc=Это предварительный релиз
release.prerelease_helper=Well point out that this release is not production-ready.
release.prerelease_helper=Отдельно отметим, что этот релиз не готов к использованию в продакшене.
release.publish=Опубликовать релиз
release.save_draft=Сохранить черновик
release.edit_release=Редактировать релиз
@@ -644,6 +652,7 @@ release.tag_name_already_exist=Релиз с этим именем тега уж
[org]
org_name_holder=Название организации
org_full_name_holder=Organization Full Name
org_name_helper=Лучшие названия организаций коротки и запоминаемы.
create_org=Создать Организацию
repo_updated=Обновлено
@@ -657,7 +666,7 @@ org_desc=Описание
team_name=Название команды
team_desc=Описание
team_name_helper=Вы будете использовать это имя для упоминания этой команды в обсуждении.
team_desc_helper=What is this team all about?
team_desc_helper=Что это за команда?
team_permission_desc=Какой уровень разрешений должен быть у этой команды?
form.name_reserved=Наименование организации '%s' зарезервированно.
@@ -670,8 +679,8 @@ settings.website=Сайт
settings.location=Местоположение
settings.update_settings=Обновить настройки
settings.update_setting_success=Настройки Организации были успешно обновлены.
settings.change_orgname_prompt=This change will affect how links relate to the organization.
settings.update_avatar_success=Organization avatar setting has been updated successfully.
settings.change_orgname_prompt=Это изменение затронет все связанные с организацией, ссылки.
settings.update_avatar_success=Аватар организации успешно обновлен.
settings.delete=Удалить Организацию
settings.delete_account=Удалить Эту Организацию
settings.delete_prompt=Это действие безвозвратно удалит эту организацию навсегда.
@@ -712,7 +721,7 @@ teams.delete_team_desc=Эта команда будет удалена. Вы х
teams.delete_team_success=Данная команда была удалена успешно.
teams.read_permission_desc=Эта команда предоставляет доступ на <strong>Чтение</strong>: члены могут просматривать и клонировать репозитории команды.
teams.write_permission_desc=Эта команда предоставляет доступ на <strong>Запись</strong>: члены могут получать и выполнять push команды в репозитории.
teams.admin_permission_desc=This team grants <strong>Admin</strong> access: members can read from, push to, and add collaborators to the team's repositories.
teams.admin_permission_desc=Эта команда дает <strong>административный</strong> доступ: участники могут читать, пушить и добавлять соавторов к ее репозиториям.
teams.repositories=Репозитории группы разработки
teams.add_team_repository=Добавить репозиторий группы разработки
teams.remove_repo=Удалить
@@ -727,9 +736,9 @@ authentication=Авторизация
config=Настройки
notices=Системные уведомления
monitor=Мониторинг
first_page=First
last_page=Last
total=Total: %d
first_page=Первый
last_page=Последний
total=Всего: %d
dashboard.statistic=Статистика
dashboard.operations=Операции
@@ -748,70 +757,71 @@ dashboard.git_gc_repos=Выполнить сборку мусора на реп
dashboard.git_gc_repos_success=Сборка мусора на всех репозиториях успешно выполнена.
dashboard.resync_all_sshkeys=Переписать файл «.ssh/authorized_keys» (осторожно: не Gogs ключи будут утеряны)
dashboard.resync_all_sshkeys_success=Были успешно переписаны все открытые ключи.
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.
dashboard.resync_all_update_hooks=Перезаписать все апдейт-хуки этого репозитория (необходимо, когда изменен путь до папки конфигураций)
dashboard.resync_all_update_hooks_success=Апдейт-хуки всех репозиториев успешно перезаписаны.
dashboard.server_uptime=Время непрерывной работы сервера
dashboard.current_goroutine=Текущий Goroutines
dashboard.current_memory_usage=Текущее использование памяти
dashboard.total_memory_allocated=Всего памяти выделено
dashboard.memory_obtained=Memory Obtained
dashboard.pointer_lookup_times=Pointer Lookup Times
dashboard.memory_allocate_times=Memory Allocate Times
dashboard.memory_free_times=Memory Free Times
dashboard.memory_obtained=Памяти использовано
dashboard.pointer_lookup_times=Запросов указателя
dashboard.memory_allocate_times=Выделений памяти
dashboard.memory_free_times=Освобождений памяти
dashboard.current_heap_usage=Текущее использование кучи
dashboard.heap_memory_obtained=Heap Memory Obtained
dashboard.heap_memory_idle=Heap Memory Idle
dashboard.heap_memory_obtained=Получено динамической памяти
dashboard.heap_memory_idle=Не используется динамической памяти
dashboard.heap_memory_in_use=Кучи памяти в работе
dashboard.heap_memory_released=Heap Memory Released
dashboard.heap_objects=Heap Objects
dashboard.bootstrap_stack_usage=Bootstrap Stack Usage
dashboard.stack_memory_obtained=Stack Memory Obtained
dashboard.mspan_structures_usage=MSpan Structures Usage
dashboard.mspan_structures_obtained=MSpan Structures Obtained
dashboard.mcache_structures_usage=MCache Structures Usage
dashboard.mcache_structures_obtained=MCache Structures Obtained
dashboard.profiling_bucket_hash_table_obtained=Profiling Bucket Hash Table Obtained
dashboard.gc_metadata_obtained=GC Metadada Obtained
dashboard.other_system_allocation_obtained=Other System Allocation Obtained
dashboard.next_gc_recycle=Next GC Recycle
dashboard.last_gc_time=Since Last GC Time
dashboard.total_gc_time=Total GC Pause
dashboard.total_gc_pause=Total GC Pause
dashboard.last_gc_pause=Last GC Pause
dashboard.gc_times=GC Times
dashboard.heap_memory_released=Освобождено динамической памяти
dashboard.heap_objects=Объектов динамической памяти
dashboard.bootstrap_stack_usage=Использование стека загрузчика
dashboard.stack_memory_obtained=Память, занятая под стек
dashboard.mspan_structures_usage=Использование структур MSpan
dashboard.mspan_structures_obtained=Получено структур MSpan
dashboard.mcache_structures_usage=Использование структур MCache
dashboard.mcache_structures_obtained=Получено структур MCache
dashboard.profiling_bucket_hash_table_obtained=Хеш-таблиц получено при профилировании
dashboard.gc_metadata_obtained=Получены метаданные сборщика мусора
dashboard.other_system_allocation_obtained=Получено других системных выделений памяти
dashboard.next_gc_recycle=Следующая очистка сборщика мусора
dashboard.last_gc_time=Прошло с последнего сбора мусора
dashboard.total_gc_time=Итоговое время GC
dashboard.total_gc_pause=Итоговая задержка GC
dashboard.last_gc_pause=Последняя пауза сборщика мусора
dashboard.gc_times=Количество сборок мусора
users.user_manage_panel=User Manage Panel
users.user_manage_panel=Панель управления пользователями
users.new_account=Создать новый аккаунт
users.name=Имя
users.activated=Активирован
users.admin=Администратор
users.repos=Репозитории
users.created=Создано
users.send_register_notify=Send Registration Notification To User
users.new_success=New account '%s' has been created successfully.
users.send_register_notify=Отправить пользователю уведомление о регистрации
users.new_success=Новая учетная запись '%s' успешно создана.
users.edit=Редактировать
users.auth_source=Authentication Source
users.auth_source=Источник аутентификации
users.local=Локальный
users.auth_login_name=Authentication Login Name
users.password_helper=Leave it empty to remain unchanged.
users.auth_login_name=Логин для авторизации
users.password_helper=Оставьте пустым, чтобы оставить без изменений.
users.update_profile_success=Профиль учетной записи обновлен успешно.
users.edit_account=Изменение учетной записи
users.is_activated=Эта учетная запись активирована
users.is_admin=У этой учетной записи есть права администратора
users.allow_git_hook=Пользователь имеет право создать Git перехватчик
users.allow_import_local=This account has permissions to import local repositories
users.update_profile=Обновить профиль учетной записи
users.delete_account=Удалить эту учетную запись
users.still_own_repo=На вашем аккаунте все еще остается как минимум один репозиторий, сначала вам нужно удалить или передать его.
users.still_has_org=This account still has membership in at least one organization, you have to leave or delete the organizations first.
users.deletion_success=Account has been deleted successfully!
users.still_has_org=Эта учетная запись все еще является членом как минимум одной организации. Для продолжения, покиньте или удалите эту организацию.
users.deletion_success=Учетная запись успешно удалена!
orgs.org_manage_panel=Управление группами
orgs.name=Имя
orgs.teams=Команды
orgs.members=Участники
repos.repo_manage_panel=Repository Manage Panel
repos.repo_manage_panel=Панель управления репозиторием
repos.owner=Владелец
repos.name=Имя
repos.private=Приватный
@@ -819,47 +829,47 @@ repos.watches=Следят
repos.stars=В избранном
repos.issues=Вопросы
auths.auth_manage_panel=Authentication Manage Panel
auths.new=Add New Source
auths.auth_manage_panel=Панель управления аутнентификациями
auths.new=Добавить новый источник
auths.name=Имя
auths.type=Тип
auths.enabled=Включено
auths.updated=Обновлено
auths.auth_type=Authentication Type
auths.auth_name=Authentication Name
auths.auth_type=Тип аутентификации
auths.auth_name=Имя аутентификации
auths.domain=Домен
auths.host=Хост
auths.port=Порт
auths.bind_dn=Bind DN
auths.bind_password=Bind Password
auths.bind_password_helper=Warning: This password is stored in plain text. Do not use a high privileged account.
auths.user_base=User Search Base
auths.user_dn=User DN
auths.attribute_name=First name attribute
auths.attribute_surname=Surname attribute
auths.attribute_mail=E-mail attribute
auths.filter=User Filter
auths.admin_filter=Admin Filter
auths.bind_dn=Привязать DN
auths.bind_password=Привязать пароль
auths.bind_password_helper=Внимание: Этот пароль сохранен в небезопасном виде. Не используйте высоко-привилегированную учетную запись.
auths.user_base=База для поиска пользователя
auths.user_dn=DN пользователя
auths.attribute_name=Имя аттрибута
auths.attribute_surname=Фамилия аттрибута
auths.attribute_mail=Электронная почта аттрибута
auths.filter=Фильтр пользователя
auths.admin_filter=Фильтр администратора
auths.ms_ad_sa=Ms Ad SA
auths.smtp_auth=SMTP Authentication Type
auths.smtp_auth=Тип аутентификации SMTP
auths.smtphost=Узел SMTP
auths.smtpport=SMTP-порт
auths.allowed_domains=Allowed Domains
auths.allowed_domains_helper=Leave it empty to not restrict any domains. Multiple domains should be separated by comma ','.
auths.allowed_domains=Разрешенные домены
auths.allowed_domains_helper=Оставьте пустым чтобы не ограничивать домены. Несколько доменов должны быть разделены запятыми ','.
auths.enable_tls=Включение шифрования TLS
auths.skip_tls_verify=Skip TLS Verify
auths.pam_service_name=PAM Service Name
auths.skip_tls_verify=Пропустить проверку TLS
auths.pam_service_name=Имя службы PAM
auths.enable_auto_register=Включить автоматическую регистрацию
auths.tips=Советы
auths.edit=Edit Authentication Setting
auths.edit=Изменить параметры канала аутентификации
auths.activated=Эта аутентификация активирована
auths.new_success=New authentication '%s' has been added successfully.
auths.update_success=Authentication setting has been updated successfully.
auths.update=Update Authentication Setting
auths.delete=Delete This Authentication
auths.delete_auth_title=Authentication Deletion
auths.delete_auth_desc=This authentication is going to be deleted, do you want to continue?
auths.deletion_success=Authentication has been deleted successfully!
auths.new_success=Новый канал аутентификации '%s' успешно создан.
auths.update_success=Настройки канала аутентификации успешно сохранены.
auths.update=Обновить параметры аутентификации
auths.delete=Удалить этот канал аутентификации
auths.delete_auth_title=Удаление канала аутентификации
auths.delete_auth_desc=Этот канал аутентификации будет удален. Вы уверены что хотите продолжить?
auths.deletion_success=Канал аутентификации успешно удален!
config.server_config=Конфигурация сервера
config.app_name=Имя приложения
@@ -870,11 +880,11 @@ config.offline_mode=Автономный режим
config.disable_router_log=Отключение журнала маршрутизатора
config.run_user=Запуск пользователем
config.run_mode=Режим выполнения
config.repo_root_path=Repository Root Path
config.static_file_root_path=Static File Root Path
config.log_file_root_path=Log File Root Path
config.repo_root_path=Путь до корня репозитория
config.static_file_root_path=Статичный путь до файла
config.log_file_root_path=Путь до папки с логами
config.script_type=Тип сценария
config.reverse_auth_user=Reverse Authentication User
config.reverse_auth_user=Заголовок с именем пользователя для авторизации на reverse proxy
config.db_config=Конфигурация базы данных
config.db_type=Тип
config.db_host=Хост
@@ -883,20 +893,20 @@ config.db_user=Пользователь
config.db_ssl_mode=Режим SSL
config.db_ssl_mode_helper=(только для «postgres»)
config.db_path=Путь
config.db_path_helper=(for "sqlite3" and "tidb")
config.service_config=Service Configuration
config.register_email_confirm=Require E-mail Confirmation
config.db_path_helper=(для "SQLite3" и "TiDB")
config.service_config=Сервисная конфигурация
config.register_email_confirm=Требуется подтверждение по электронной почте
config.disable_register=Отключить регистрацию
config.show_registration_button=Show Register Button
config.show_registration_button=Показать кнопку регистрации
config.require_sign_in_view=Для просмотра необходима авторизация
config.enable_cache_avatar=Кешировать аватар
config.mail_notify=Почтовые уведомления
config.disable_key_size_check=Disable Minimum Key Size Check
config.enable_captcha=Enable Captcha
config.active_code_lives=Active Code Lives
config.reset_password_code_lives=Reset Password Code Lives
config.disable_key_size_check=Отключить проверку на минимальный размер ключа
config.enable_captcha=Включить капчу
config.active_code_lives=Время жизни кода для активации
config.reset_password_code_lives=Время жизни кода сброса пароля
config.webhook_config=Настройка автоматического обновления репозиции
config.queue_length=Queue Length
config.queue_length=Длина очереди
config.deliver_timeout=Задержка доставки
config.skip_tls_verify=Пропустить TLS проверка
config.mailer_config=Настройки почты
@@ -908,20 +918,20 @@ config.mailer_user=Пользователь
config.oauth_config=Конфигурация OAuth
config.oauth_enabled=Включено
config.cache_config=Настройки кеша
config.cache_adapter=Cache Adapter
config.cache_interval=Cache Interval
config.cache_conn=Cache Connection
config.session_config=Session Configuration
config.session_provider=Session Provider
config.provider_config=Provider Config
config.cache_adapter=Адаптер кэша
config.cache_interval=Интервал кэширования
config.cache_conn=Подключение кэша
config.session_config=Конфигурация сессии
config.session_provider=Провайдер сессии
config.provider_config=Конфигурация провайдера
config.cookie_name=Имя файла cookie
config.enable_set_cookie=Enable Set Cookie
config.gc_interval_time=GC Interval Time
config.enable_set_cookie=Включить установку cookies
config.gc_interval_time=Интервал работы сборщика мусора
config.session_life_time=Время жизни сессии
config.https_only=Только HTTPS
config.cookie_life_time=Время жизни файла cookie
config.picture_config=Настройка изображения
config.picture_service=Picture Service
config.picture_service=Сервис изображений
config.disable_gravatar=Отключить Gravatar
config.log_config=Конфигурация журнала
config.log_mode=Режим журналирования
@@ -931,7 +941,7 @@ monitor.name=Имя
monitor.schedule=Расписание
monitor.next=В следующий раз
monitor.previous=Предыдущий раз
monitor.execute_times=Execute Times
monitor.execute_times=Количество выполнений
monitor.process=Запущенные процессы
monitor.desc=Описание
monitor.start=Момент начала
@@ -946,40 +956,40 @@ notices.delete_success=Системное уведомление успешно
[action]
create_repo=создан репозиторий <a href="%s"> %s</a>
rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
commit_repo=pushed to <a href="%s/src/%s">%[2]s</a> at <a href="%[1]s">%[3]s</a>
create_issue=`opened issue <a href="%s/issues/%s">%s#%[2]s</a>`
create_pull_request=`created 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>
push_tag=pushed tag <a href="%s/src/%s">%[2]s</a> to <a href="%[1]s">%[3]s</a>
rename_repo=репозиторий переименован из <code>%[1]s</code>на <a href="%[2]s">%[3]s</a>
commit_repo=запушил <a href="%s/src/%s">%[2]s</a> в <a href="%[1]s">%[3]s</a>
create_issue=`открытый вопрос <a href="%s/issues/%s">%s#%[2]</a>`
create_pull_request=`созданный пулл-реквест <a href="%s/pulls/%s">%s#%[2]s</a>`
comment_issue=`прокомментировал(а) вопрос <a href="%s/issues/%s">%s#%[2]s</a>`
merge_pull_request=`слил пул реквест <a href="%s/pulls/%s">%s#%[2]s</a>`
transfer_repo=перенес репозиторий <code>%s</code> в <a href="%s">%s</a>
push_tag=запушил тэг <a href="%s/src/%s">%[2]s</a> в <a href="%[1]s">%[3]s</a>
compare_2_commits=Просмотреть сравнение двух коммитов
[tool]
ago=назад
from_now=from now
from_now=с этого момента
now=сейчас
1s=1 second %s
1s=1 секунду %s
1m=1 минута %s
1h=1 час %s
1d=1 день %s
1w=1 неделя %s
1mon=1 month %s
1mon=1 месяц %s
1y=1 год %s
seconds=%d секунд %s
minutes=%d минут %s
hours=%d часов %s
days=%d дней %s
weeks=%d weeks %s
months=%d months %s
years=%d years %s
weeks=недель %s: %d
months=месяцев %s: %d
years=лет %s: %d
raw_seconds=секунд
raw_minutes=минут
[dropzone]
default_message=Drop files here or click to upload.
invalid_input_type=You can't upload files of this type.
file_too_big=File size({{filesize}} MB) exceeds maximum size({{maxFilesize}} MB).
remove_file=Remove file
default_message=Перетащите файл сюда, или кликните для загрузки.
invalid_input_type=Вы не можете загружать файлы этого типа.
file_too_big=Размер файла ({{filesize}} МБ) больше чем максимальный размер ({{maxFilesize}} МБ).
remove_file=Удалить файл

View File

@@ -148,7 +148,6 @@ forgot_password=忘记密码
forget_password=忘记密码?
sign_up_now=还没帐户?马上注册。
confirmation_mail_sent_prompt=一封新的确认邮件已经被发送至 <b>%s</b>,请检查您的收件箱并在 %d 小时内完成确认注册操作。
sign_in_to_account=登录到您的帐户
active_your_account=激活您的帐户
resent_limit_prompt=对不起,您请求发送激活邮件过于频繁,请等待 3 分钟后再试!
has_unconfirmed_mail=%s 您好,系统检测到您有一封发送至 <b>%s</b> 但未被确认的邮件。如果您未收到激活邮件,或需要重新发送,请单击下方的按钮。
@@ -192,6 +191,7 @@ min_size_error=长度最小为 %s 个字符。
max_size_error=长度最大为 %s 个字符。
email_error=不是一个有效的邮箱地址。
url_error=不是一个有效的 URL。
include_error=必须包含子字符串 '%s'。
unknown_error=未知错误:
captcha_incorrect=验证码未匹配。
password_not_match=密码与确认密码未匹配。
@@ -334,6 +334,7 @@ repo_name=仓库名称
repo_name_helper=伟大的仓库名称一般都较短、令人深刻并且 <strong>独一无二</strong> 的。
visibility=可见性
visiblity_helper=该仓库为 <span class="ui red text">私有的</span>
visiblity_helper_forced=网站管理员已强制要求所有新建仓库必须为 <span class="ui red text">私有的</span>
visiblity_fork_helper=(修改该值将会影响到所有派生仓库)
fork_repo=派生仓库
fork_from=派生自
@@ -359,11 +360,14 @@ migrate_type_helper=该仓库将是一个 <span class="text blue">镜像</span>
migrate_repo=迁移仓库
migrate.clone_address=克隆地址
migrate.clone_address_desc=该地址可以是 HTTP/HTTPS/GIT URL 或本地服务器路径。
migrate.permission_denied=您没有获得导入本地仓库的权限。
migrate.invalid_local_path=无效的本地路径,不存在或不是一个目录!
forked_from=派生自
fork_from_self=无法派生已经拥有的仓库!
copy_link=复制链接
copy_link_success=复制成功!
copy_link_error=请按下 ⌘-C 或 Ctrl-C 复制
click_to_copy=复制到剪切板
copied=复制成功
clone_helper=不知道如何操作?访问 <a target="_blank" href="%s">此处</a> 查看帮助!
@@ -378,6 +382,8 @@ quick_guide=快速帮助
clone_this_repo=克隆当前仓库
create_new_repo_command=从命令行创建一个新的仓库
push_exist_repo=从命令行推送已经创建的仓库
repo_is_empty=该仓库不包含任何内容,请稍后再进行访问!
branch=分支
tree=目录树
@@ -450,9 +456,9 @@ issues.num_comments=%d 条评论
issues.commented_at=`于 <a id="%[1]s" href="#%[1]s">%[2]s</a> 评论`
issues.no_content=这个人很懒,什么都没留下。
issues.close_issue=关闭
issues.close_comment_issue=关闭并评论
issues.close_comment_issue=评论并关闭
issues.reopen_issue=重新开启
issues.reopen_comment_issue=重新开启并评论
issues.reopen_comment_issue=评论并重新开启
issues.create_comment=评论
issues.closed_at=`于 <a id="%[1]s" href="#%[1]s">%[2]s</a> 关闭`
issues.reopened_at=`于 <a id="%[1]s" href="#%[1]s">%[2]s</a> 重新开启`
@@ -494,10 +500,12 @@ pulls.reopen_to_merge=请重新开启合并请求来完成合并操作。
pulls.merged=已合并
pulls.has_merged=该合并请求已经成功合并!
pulls.data_broken=该合并请求的数据由于派生仓库的相关信息被删除而被破坏。
pulls.is_checking=该合并请求正在进行冲突检查,请稍后再刷新页面。
pulls.can_auto_merge_desc=您可以实现该合并请求的自动合并操作。
pulls.cannot_auto_merge_desc=因为代码提交存在冲突,您无法对该合并请求执行自动合并操作。
pulls.cannot_auto_merge_helper=请使用命令行工具来解决冲突。
pulls.merge_pull_request=合并请求
pulls.open_unmerged_pull_exists=`由于已经存在来自相同仓库和合并信息的未合并请求(#%d您无法执行重新开启操作。`
milestones.new=新的里程碑
milestones.open_tab=%d 开启中
@@ -512,7 +520,7 @@ milestones.title=标题
milestones.desc=描述
milestones.due_date=截止日期(可选)
milestones.clear=清除
milestones.invalid_due_date_format=截止日期的格式错误,必须是 'year-mm-dd' 的形式。
milestones.invalid_due_date_format=截止日期的格式错误,必须是 'yyyy-mm-dd' 的形式。
milestones.create_success=里程碑 '%s' 创建成功!
milestones.edit=编辑里程碑
milestones.edit_subheader=使用更加清晰的描述来帮助人们更好地理解里程碑的作用。
@@ -644,6 +652,7 @@ release.tag_name_already_exist=已经存在使用相同标签进行发布的版
[org]
org_name_holder=组织名称
org_full_name_holder=组织全名
org_name_helper=伟大的组织都有一个简短而寓意深刻的名字。
create_org=创建组织
repo_updated=最后更新于
@@ -799,7 +808,8 @@ users.update_profile_success=该用户信息更新成功!
users.edit_account=编辑用户信息
users.is_activated=该用户已被激活
users.is_admin=该用户具有管理员权限
users.allow_git_hook=户具有创建 Git 钩子的权限
users.allow_git_hook=户具有创建 Git 钩子的权限
users.allow_import_local=该用户具有导入本地仓库的权限
users.update_profile=更新用户信息
users.delete_account=删除该用户
users.still_own_repo=该帐户仍然是某些仓库的拥有者,您必须先转移或删除它们才能执行删除帐户操作!

View File

@@ -111,7 +111,7 @@ admin_title=管理員帳號設置
admin_name=管理員用戶名
admin_password=管理員密碼
confirm_password=確認密碼
admin_email=管理員郵箱
admin_email=Admin E-mail
install_gogs=立即安裝
test_git_failed=無法識別 'git' 命令:%v
sqlite3_not_available=您所使用的發行版本不支持 SQLite3請從 %s 下載官方構建版,而不是 gobuild 版本。
@@ -148,7 +148,6 @@ forgot_password=忘記密碼
forget_password=忘記密碼?
sign_up_now=還沒帳戶?馬上註冊。
confirmation_mail_sent_prompt=一封新的確認郵件已經被發送至 <b>%s</b>,請檢查您的收件箱並在 %d 小時內完成確認註冊操作。
sign_in_to_account=Sign in to your account
active_your_account=激活您的帳戶
resent_limit_prompt=對不起,您請求發送激活郵件過於頻繁,請等待 3 分鐘後再試!
has_unconfirmed_mail=%s 您好,您有一封發送至( <b>%s</b>) 但未被確認的郵件。如果您未收到激活郵件,或需要重新發送,請單擊下方的按鈕。
@@ -192,6 +191,7 @@ min_size_error=長度最小為 %s 個字符。
max_size_error=長度最大為 %s 個字符。
email_error=不是一個有效的郵箱地址。
url_error=不是一個有效的 URL。
include_error=` must contain substring '%s'.`
unknown_error=未知錯誤:
captcha_incorrect=驗證碼未匹配。
password_not_match=密碼與確認密碼未匹配。
@@ -334,6 +334,7 @@ repo_name=倉庫名稱
repo_name_helper=偉大的倉庫名稱一般都較短、令人深刻並且 <strong>獨一無二</strong> 的。
visibility=可見度
visiblity_helper=該倉庫為 <span class="ui red text">私有的</span>
visiblity_helper_forced=Site admin has forced all new repositories to be <span class="ui red text">Private</span>
visiblity_fork_helper=(修改該值將會影響到所有派生倉庫)
fork_repo=派生倉庫
fork_from=派生自
@@ -359,11 +360,14 @@ migrate_type_helper=該倉庫將是一個 <span class="text blue">鏡像</span>
migrate_repo=遷移倉庫
migrate.clone_address=複製地址
migrate.clone_address_desc=該地址可以是 HTTP/HTTPS/GIT URL 或本地服務器路徑。
migrate.permission_denied=You are not allowed to import local repositories.
migrate.invalid_local_path=無效的本地路徑,該路徑不存在或不是一個目錄!
forked_from=派生自
fork_from_self=無法派生已經擁有的倉庫!
copy_link=複製連結
copy_link_success=Copied!
copy_link_error=Press ⌘-C or Ctrl-C to copy
click_to_copy=複製到剪切簿
copied=複製成功
clone_helper=不知道如何操作?訪問 <a target="_blank"href="%s"> 帮助説明</a>
@@ -378,6 +382,8 @@ quick_guide=快速幫助
clone_this_repo=複製當前倉庫
create_new_repo_command=從命令行創建一個新的倉庫
push_exist_repo=從命令行推送已經創建的倉庫
repo_is_empty=This repository is empty, please come back later!
branch=分支
tree=目錄樹
@@ -494,10 +500,12 @@ pulls.reopen_to_merge=Please reopen this pull request to perform merge operation
pulls.merged=Merged
pulls.has_merged=This pull request has been merged successfully!
pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments.
pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
pulls.merge_pull_request=Merge Pull Request
pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.`
milestones.new=新的里程碑
milestones.open_tab=%d 開啟中
@@ -512,7 +520,7 @@ milestones.title=標題
milestones.desc=描述
milestones.due_date=截止日期(可選)
milestones.clear=清除
milestones.invalid_due_date_format=截止日期的格式錯誤,必須是 'year-mm-dd' 的形式。
milestones.invalid_due_date_format=截止日期的格式錯誤,必須是 'yyyy-mm-dd' 的形式。
milestones.create_success=里程碑 '%s' 創建成功!
milestones.edit=編輯里程碑
milestones.edit_subheader=使用更加清晰的描述來幫助人們更好地理解里程碑的作用。
@@ -644,6 +652,7 @@ release.tag_name_already_exist=已經存在使用相同標籤的發佈版本。
[org]
org_name_holder=組織名稱
org_full_name_holder=Organization Full Name
org_name_helper=偉大的組織都有一個簡短而寓意深刻的名字。
create_org=創建組織
repo_updated=最後更新於
@@ -800,6 +809,7 @@ users.edit_account=編輯用戶信息
users.is_activated=該用戶已被激活
users.is_admin=該用戶具有管理員權限
users.allow_git_hook=該帳戶具有創建 Git 鉤子的權限
users.allow_import_local=This account has permissions to import local repositories
users.update_profile=更新用戶信息
users.delete_account=刪除該用戶
users.still_own_repo=該帳戶仍然是某些倉庫的擁有者,您必須先轉移或刪除它們才能執行刪除帳戶操作!

View File

@@ -17,12 +17,12 @@ $ mkdir -p /var/gogs
$ 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
$ docker start gogs
```
Files will be store in local path `/var/gogs` in my case.
Directory `/var/gogs` keeps Git repoistories and Gogs data:
Directory `/var/gogs` keeps Git repositories and Gogs data:
/var/gogs
|-- git
@@ -35,6 +35,17 @@ Directory `/var/gogs` keeps Git repoistories and Gogs data:
|-- log
|-- templates
### 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
```
## Settings
Most of settings are obvious and easy to understand, but there are some settings can be confusing by running Gogs inside Docker:
@@ -44,7 +55,7 @@ Most of settings are obvious and easy to understand, but there are some settings
- **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.
- **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/`).
- **Application URL**: Use combination of **Domain** and **exposed HTTP Port** values(e.g. `http://192.168.99.100:10080/`).
Full documentation of settings can be found [here](http://gogs.io/docs/advanced/configuration_cheat_sheet.html).
@@ -59,16 +70,6 @@ Steps to upgrade Gogs with Docker:
- `docker rm gogs`
- Finally, create container as the first time and don't forget to do same volume and port mapping.
## Troubleshooting
If you see the following error:
```
checkVersion()] [E] Binary and template file version does not match
```
Run `rm -fr /var/gogs/gogs/templates/` should fix this it. Just remember to backup templates file if you have made modifications youself.
## Known Issues
- [Use ctrl+c when clone through SSH makes Docker exit unexpectedly](https://github.com/gogits/gogs/issues/1499)
- `.dockerignore` seems to be ignored during Docker Hub Automated build

25
docker/build.sh Executable file
View File

@@ -0,0 +1,25 @@
#!/bin/sh
# Set temp environment vars
export GOPATH=/tmp/go
export PATH=${PATH}:${GOPATH}/bin
# Install build deps
apk -U --no-progress add linux-pam-dev go@community gcc musl-dev
# Init go environment to 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
go get -v -tags "sqlite redis memcache cert pam"
go build -tags "sqlite redis memcache cert pam"
# Cleanup GOPATH
rm -r $GOPATH
# Remove build deps
apk --no-progress del linux-pam-dev go gcc musl-dev
# 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

5
docker/s6/.s6-svscan/finish Executable file
View File

@@ -0,0 +1,5 @@
#!/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_*

8
docker/s6/gogs/run Executable file
View File

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

23
docker/s6/gogs/setup Executable file
View File

@@ -0,0 +1,23 @@
#!/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/

7
docker/s6/openssh/run Executable file
View File

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

27
docker/s6/openssh/setup Executable file
View File

@@ -0,0 +1,27 @@
#!/bin/sh
# Check if host keys are present, else create them
if ! test -f /data/ssh/ssh_host_key; then
ssh-keygen -q -f /data/ssh/ssh_host_key -N '' -t rsa1
fi
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/*

7
docker/s6/syslogd/run Executable file
View File

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

17
docker/sshd_config Normal file
View File

@@ -0,0 +1,17 @@
Port 22
AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::
Protocol 2
LogLevel INFO
HostKey /data/ssh/ssh_host_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
PermitUserEnvironment yes
AllowUsers git

View File

@@ -1,43 +1,56 @@
#!/bin/bash -
#
#!/bin/sh
if ! test -d /data/gogs
then
mkdir -p /var/run/sshd
mkdir -p /data/gogs/data /data/gogs/conf /data/gogs/log /data/git
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
if ! test -d /data/ssh
then
mkdir /data/ssh
ssh-keygen -q -f /data/ssh/ssh_host_key -N '' -t rsa1
ssh-keygen -q -f /data/ssh/ssh_host_rsa_key -N '' -t rsa
ssh-keygen -q -f /data/ssh/ssh_host_dsa_key -N '' -t dsa
ssh-keygen -q -f /data/ssh/ssh_host_ecdsa_key -N '' -t ecdsa
ssh-keygen -q -f /data/ssh/ssh_host_ed25519_key -N '' -t ed25519
chown -R root:root /data/ssh/*
chmod 600 /data/ssh/*
# Exec CMD or S6 by default if nothing present
if [ $# -gt 0 ];then
exec "$@"
else
exec /usr/bin/s6-svscan /app/gogs/docker/s6/
fi
service ssh start
ln -sf /data/gogs/log ./log
ln -sf /data/gogs/data ./data
ln -sf /data/git /home/git
if ! test -d ~git/.ssh
then
mkdir ~git/.ssh
chmod 700 ~git/.ssh
fi
if ! test -f ~git/.ssh/environment
then
echo "GOGS_CUSTOM=/data/gogs" > ~git/.ssh/environment
chown git:git ~git/.ssh/environment
chown 600 ~git/.ssh/environment
fi
chown -R git:git /data .
exec su git -c "./gogs web"

View File

@@ -1,10 +1,10 @@
// +build go1.2
// +build go1.3
// 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 written in Go.
// Gogs (Go Git Service) is a painless self-hosted Git Service.
package main
import (
@@ -17,7 +17,7 @@ import (
"github.com/gogits/gogs/modules/setting"
)
const APP_VER = "0.6.15.0926 Beta"
const APP_VER = "0.7.0.1107 Beta"
func init() {
runtime.GOMAXPROCS(runtime.NumCPU())

View File

@@ -337,6 +337,12 @@ func CommitRepoAction(
return fmt.Errorf("GetOwner: %v", err)
}
// Change repository bare status and update last updated time.
repo.IsBare = false
if err = UpdateRepository(repo, false); err != nil {
return fmt.Errorf("UpdateRepository: %v", err)
}
isNewBranch := false
opType := COMMIT_REPO
// Check it's tag push or branch.
@@ -351,12 +357,6 @@ func CommitRepoAction(
isNewBranch = true
}
// Change repository bare status and update last updated time.
repo.IsBare = false
if err = UpdateRepository(repo, false); err != nil {
return fmt.Errorf("UpdateRepository: %v", err)
}
if err = updateIssuesCommit(u, repo, repoUserName, repoName, commit.Commits); err != nil {
log.Error(4, "updateIssuesCommit: %v", err)
}

View File

@@ -18,7 +18,7 @@ func IsErrNameReserved(err error) bool {
}
func (err ErrNameReserved) Error() string {
return fmt.Sprintf("name is reserved: [name: %s]", err.Name)
return fmt.Sprintf("name is reserved [name: %s]", err.Name)
}
type ErrNamePatternNotAllowed struct {
@@ -31,7 +31,7 @@ func IsErrNamePatternNotAllowed(err error) bool {
}
func (err ErrNamePatternNotAllowed) Error() string {
return fmt.Sprintf("name pattern is not allowed: [pattern: %s]", err.Pattern)
return fmt.Sprintf("name pattern is not allowed [pattern: %s]", err.Pattern)
}
// ____ ___
@@ -51,7 +51,7 @@ func IsErrUserAlreadyExist(err error) bool {
}
func (err ErrUserAlreadyExist) Error() string {
return fmt.Sprintf("user already exists: [name: %s]", err.Name)
return fmt.Sprintf("user already exists [name: %s]", err.Name)
}
type ErrUserNotExist struct {
@@ -65,7 +65,7 @@ func IsErrUserNotExist(err error) bool {
}
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]", err.UID, err.Name)
}
type ErrEmailAlreadyUsed struct {
@@ -78,7 +78,7 @@ func IsErrEmailAlreadyUsed(err error) bool {
}
func (err ErrEmailAlreadyUsed) Error() string {
return fmt.Sprintf("e-mail has been used: [email: %s]", err.Email)
return fmt.Sprintf("e-mail has been used [email: %s]", err.Email)
}
type ErrUserOwnRepos struct {
@@ -91,7 +91,7 @@ func IsErrUserOwnRepos(err error) bool {
}
func (err ErrUserOwnRepos) Error() string {
return fmt.Sprintf("user still has ownership of repositories: [uid: %d]", err.UID)
return fmt.Sprintf("user still has ownership of repositories [uid: %d]", err.UID)
}
type ErrUserHasOrgs struct {
@@ -104,7 +104,7 @@ func IsErrUserHasOrgs(err error) bool {
}
func (err ErrUserHasOrgs) Error() string {
return fmt.Sprintf("user still has membership of organizations: [uid: %d]", err.UID)
return fmt.Sprintf("user still has membership of organizations [uid: %d]", err.UID)
}
// __________ ___. .__ .__ ____ __.
@@ -124,7 +124,7 @@ func IsErrKeyNotExist(err error) bool {
}
func (err ErrKeyNotExist) Error() string {
return fmt.Sprintf("public key does not exist: [id: %d]", err.ID)
return fmt.Sprintf("public key does not exist [id: %d]", err.ID)
}
type ErrKeyAlreadyExist struct {
@@ -138,7 +138,7 @@ func IsErrKeyAlreadyExist(err error) bool {
}
func (err ErrKeyAlreadyExist) Error() string {
return fmt.Sprintf("public key already exists: [owner_id: %d, content: %s]", err.OwnerID, err.Content)
return fmt.Sprintf("public key already exists [owner_id: %d, content: %s]", err.OwnerID, err.Content)
}
type ErrKeyNameAlreadyUsed struct {
@@ -152,7 +152,7 @@ func IsErrKeyNameAlreadyUsed(err error) bool {
}
func (err ErrKeyNameAlreadyUsed) Error() string {
return fmt.Sprintf("public key already exists: [owner_id: %d, name: %s]", err.OwnerID, err.Name)
return fmt.Sprintf("public key already exists [owner_id: %d, name: %s]", err.OwnerID, err.Name)
}
type ErrDeployKeyAlreadyExist struct {
@@ -166,7 +166,7 @@ func IsErrDeployKeyAlreadyExist(err error) bool {
}
func (err ErrDeployKeyAlreadyExist) Error() string {
return fmt.Sprintf("public key already exists: [key_id: %d, repo_id: %d]", err.KeyID, err.RepoID)
return fmt.Sprintf("public key already exists [key_id: %d, repo_id: %d]", err.KeyID, err.RepoID)
}
type ErrDeployKeyNameAlreadyUsed struct {
@@ -180,7 +180,7 @@ func IsErrDeployKeyNameAlreadyUsed(err error) bool {
}
func (err ErrDeployKeyNameAlreadyUsed) Error() string {
return fmt.Sprintf("public key already exists: [repo_id: %d, name: %s]", err.RepoID, err.Name)
return fmt.Sprintf("public key already exists [repo_id: %d, name: %s]", err.RepoID, err.Name)
}
// _____ ___________ __
@@ -200,7 +200,7 @@ func IsErrAccessTokenNotExist(err error) bool {
}
func (err ErrAccessTokenNotExist) Error() string {
return fmt.Sprintf("access token does not exist: [sha: %s]", err.SHA)
return fmt.Sprintf("access token does not exist [sha: %s]", err.SHA)
}
// ________ .__ __ .__
@@ -220,7 +220,7 @@ func IsErrLastOrgOwner(err error) bool {
}
func (err ErrLastOrgOwner) Error() string {
return fmt.Sprintf("user is the last member of owner team: [uid: %d]", err.UID)
return fmt.Sprintf("user is the last member of owner team [uid: %d]", err.UID)
}
// __________ .__ __
@@ -259,6 +259,35 @@ func (err ErrRepoAlreadyExist) Error() string {
return fmt.Sprintf("repository already exists [uname: %s, name: %s]", err.Uname, err.Name)
}
type ErrInvalidCloneAddr struct {
IsURLError bool
IsInvalidPath bool
IsPermissionDenied bool
}
func IsErrInvalidCloneAddr(err error) bool {
_, ok := err.(ErrInvalidCloneAddr)
return ok
}
func (err ErrInvalidCloneAddr) Error() string {
return fmt.Sprintf("invalid clone address [is_url_error: %v, is_invalid_path: %v, is_permission_denied: %v]",
err.IsURLError, err.IsInvalidPath, err.IsPermissionDenied)
}
type ErrUpdateTaskNotExist struct {
UUID string
}
func IsErrUpdateTaskNotExist(err error) bool {
_, ok := err.(ErrUpdateTaskNotExist)
return ok
}
func (err ErrUpdateTaskNotExist) Error() string {
return fmt.Sprintf("update task does not exist [uuid: %s]", err.UUID)
}
// __ __ ___. .__ __
// / \ / \ ____\_ |__ | |__ ____ ____ | | __
// \ \/\/ // __ \| __ \| | \ / _ \ / _ \| |/ /
@@ -310,7 +339,7 @@ func (err ErrIssueNotExist) Error() string {
type ErrPullRequestNotExist struct {
ID int64
PullID int64
IssueID int64
HeadRepoID int64
BaseRepoID int64
HeadBarcnh string
@@ -323,8 +352,8 @@ func IsErrPullRequestNotExist(err error) bool {
}
func (err ErrPullRequestNotExist) Error() string {
return fmt.Sprintf("pull request does not exist [id: %d, pull_id: %d, head_repo_id: %d, base_repo_id: %d, head_branch: %s, base_branch: %s]",
err.ID, err.PullID, err.HeadRepoID, err.BaseRepoID, err.HeadBarcnh, err.BaseBranch)
return fmt.Sprintf("pull request does not exist [id: %d, issue_id: %d, head_repo_id: %d, base_repo_id: %d, head_branch: %s, base_branch: %s]",
err.ID, err.IssueID, err.HeadRepoID, err.BaseRepoID, err.HeadBarcnh, err.BaseBranch)
}
// _________ __

View File

@@ -37,6 +37,7 @@ const (
DIFF_FILE_ADD = iota + 1
DIFF_FILE_CHANGE
DIFF_FILE_DEL
DIFF_FILE_RENAME
)
type DiffLine struct {
@@ -57,12 +58,14 @@ type DiffSection struct {
type DiffFile struct {
Name string
OldName string
Index int
Addition, Deletion int
Type int
IsCreated bool
IsDeleted bool
IsBin bool
IsRenamed bool
Sections []*DiffSection
}
@@ -86,7 +89,6 @@ func ParsePatch(pid int64, maxlines int, cmd *exec.Cmd, reader io.Reader) (*Diff
}
leftLine, rightLine int
isTooLong bool
// FIXME: Should use cache in the future.
buf bytes.Buffer
)
@@ -95,7 +97,7 @@ func ParsePatch(pid int64, maxlines int, cmd *exec.Cmd, reader io.Reader) (*Diff
var i int
for scanner.Scan() {
line := scanner.Text()
// fmt.Println(i, line)
if strings.HasPrefix(line, "+++ ") || strings.HasPrefix(line, "--- ") {
continue
}
@@ -107,9 +109,10 @@ func ParsePatch(pid int64, maxlines int, cmd *exec.Cmd, reader io.Reader) (*Diff
i = i + 1
// Diff data too large, we only show the first about maxlines lines
if i == maxlines {
isTooLong = true
if i >= maxlines {
log.Warn("Diff data too large")
diff.Files = nil
return diff, nil
}
switch {
@@ -120,10 +123,6 @@ func ParsePatch(pid int64, maxlines int, cmd *exec.Cmd, reader io.Reader) (*Diff
curSection.Lines = append(curSection.Lines, diffLine)
continue
case line[0] == '@':
if isTooLong {
break
}
curSection = &DiffSection{}
curFile.Sections = append(curFile.Sections, curSection)
ss := strings.Split(line, "@@")
@@ -162,21 +161,27 @@ func ParsePatch(pid int64, maxlines int, cmd *exec.Cmd, reader io.Reader) (*Diff
// Get new file.
if strings.HasPrefix(line, DIFF_HEAD) {
if isTooLong {
break
middle := -1
// Note: In case file name is surrounded by double quotes(it happens only in git-shell).
hasQuote := strings.Index(line, `\"`) > -1
if hasQuote {
line = strings.Replace(line, `\"`, `"`, -1)
middle = strings.Index(line, ` "b/`)
} else {
middle = strings.Index(line, " b/")
}
beg := len(DIFF_HEAD)
a := line[beg : (len(line)-beg)/2+beg]
// In case file name is surrounded by double quotes(it happens only in git-shell).
if a[0] == '"' {
a := line[beg+2 : middle]
b := line[middle+3:]
if hasQuote {
a = a[1 : len(a)-1]
a = strings.Replace(a, `\"`, `"`, -1)
b = b[1 : len(b)-1]
}
curFile = &DiffFile{
Name: a[strings.Index(a, "/")+1:],
Name: a,
Index: len(diff.Files) + 1,
Type: DIFF_FILE_CHANGE,
Sections: make([]*DiffSection, 0, 10),
@@ -188,16 +193,17 @@ func ParsePatch(pid int64, maxlines int, cmd *exec.Cmd, reader io.Reader) (*Diff
switch {
case strings.HasPrefix(scanner.Text(), "new file"):
curFile.Type = DIFF_FILE_ADD
curFile.IsDeleted = false
curFile.IsCreated = true
case strings.HasPrefix(scanner.Text(), "deleted"):
curFile.Type = DIFF_FILE_DEL
curFile.IsCreated = false
curFile.IsDeleted = true
case strings.HasPrefix(scanner.Text(), "index"):
curFile.Type = DIFF_FILE_CHANGE
curFile.IsCreated = false
curFile.IsDeleted = false
case strings.HasPrefix(scanner.Text(), "similarity index 100%"):
curFile.Type = DIFF_FILE_RENAME
curFile.IsRenamed = true
curFile.OldName = curFile.Name
curFile.Name = b
}
if curFile.Type > 0 {
break
@@ -252,10 +258,10 @@ func GetDiffRange(repoPath, beforeCommitId string, afterCommitId string, maxline
cmd = exec.Command("git", "show", afterCommitId)
} else {
c, _ := commit.Parent(0)
cmd = exec.Command("git", "diff", c.Id.String(), afterCommitId)
cmd = exec.Command("git", "diff", "-M", c.ID.String(), afterCommitId)
}
} else {
cmd = exec.Command("git", "diff", beforeCommitId, afterCommitId)
cmd = exec.Command("git", "diff", "-M", beforeCommitId, afterCommitId)
}
cmd.Dir = repoPath
cmd.Stdout = wr

View File

@@ -9,7 +9,6 @@ import (
"errors"
"fmt"
"io"
"io/ioutil"
"mime/multipart"
"os"
"path"
@@ -20,9 +19,7 @@ import (
"github.com/go-xorm/xorm"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/git"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/process"
"github.com/gogits/gogs/modules/setting"
gouuid "github.com/gogits/gogs/modules/uuid"
)
@@ -95,15 +92,6 @@ func (i *Issue) AfterSet(colName string, _ xorm.Cell) {
if err != nil {
log.Error(3, "GetUserByID[%d]: %v", i.ID, err)
}
case "is_pull":
if !i.IsPull {
return
}
i.PullRequest, err = GetPullRequestByPullID(i.ID)
if err != nil {
log.Error(3, "GetPullRequestByPullID[%d]: %v", i.ID, err)
}
case "created":
i.Created = regulateTimeZone(i.Created)
}
@@ -236,7 +224,7 @@ func (i *Issue) changeStatus(e *xorm.Session, doer *User, isClosed bool) (err er
}
i.IsClosed = isClosed
if err = updateIssue(e, i); err != nil {
if err = updateIssueCols(e, i, "is_closed"); err != nil {
return err
} else if err = updateIssueUsersByStatus(e, i.ID, isClosed); err != nil {
return err
@@ -285,6 +273,15 @@ func (i *Issue) ChangeStatus(doer *User, isClosed bool) (err error) {
return sess.Commit()
}
func (i *Issue) GetPullRequest() (err error) {
if i.PullRequest != nil {
return nil
}
i.PullRequest, err = GetPullRequestByIssueID(i.ID)
return err
}
// It's caller's responsibility to create action.
func newIssue(e *xorm.Session, repo *Repository, issue *Issue, labelIDs []int64, uuids []string, isPull bool) (err error) {
if _, err = e.Insert(issue); err != nil {
@@ -821,11 +818,17 @@ func updateIssue(e Engine, issue *Issue) error {
return err
}
// UpdateIssue updates information of issue.
// UpdateIssue updates all fields of given issue.
func UpdateIssue(issue *Issue) error {
return updateIssue(x, issue)
}
// updateIssueCols updates specific fields of given issue.
func updateIssueCols(e Engine, issue *Issue, cols ...string) error {
_, err := e.Id(issue.ID).Cols(cols...).Update(issue)
return err
}
func updateIssueUsersByStatus(e Engine, issueID int64, isClosed bool) error {
_, err := e.Exec("UPDATE `issue_user` SET is_closed=? WHERE issue_id=?", isClosed, issueID)
return err
@@ -894,233 +897,6 @@ func UpdateIssueUsersByMentions(uids []int64, iid int64) error {
return nil
}
// __________ .__ .__ __________ __
// \______ \__ __| | | |\______ \ ____ ________ __ ____ _______/ |_
// | ___/ | \ | | | | _// __ \/ ____/ | \_/ __ \ / ___/\ __\
// | | | | / |_| |_| | \ ___< <_| | | /\ ___/ \___ \ | |
// |____| |____/|____/____/____|_ /\___ >__ |____/ \___ >____ > |__|
// \/ \/ |__| \/ \/
type PullRequestType int
const (
PULL_REQUEST_GOGS = iota
PLLL_ERQUEST_GIT
)
// PullRequest represents relation between pull request and repositories.
type PullRequest struct {
ID int64 `xorm:"pk autoincr"`
PullID int64 `xorm:"INDEX"`
Pull *Issue `xorm:"-"`
PullIndex int64
HeadRepoID int64
HeadRepo *Repository `xorm:"-"`
BaseRepoID int64
HeadUserName string
HeadBarcnh string
BaseBranch string
MergeBase string `xorm:"VARCHAR(40)"`
MergedCommitID string `xorm:"VARCHAR(40)"`
Type PullRequestType
CanAutoMerge bool
HasMerged bool
Merged time.Time
MergerID int64
Merger *User `xorm:"-"`
}
func (pr *PullRequest) AfterSet(colName string, _ xorm.Cell) {
var err error
switch colName {
case "head_repo_id":
pr.HeadRepo, err = GetRepositoryByID(pr.HeadRepoID)
if err != nil {
log.Error(3, "GetRepositoryByID[%d]: %v", pr.ID, err)
}
case "merger_id":
if !pr.HasMerged {
return
}
pr.Merger, err = GetUserByID(pr.MergerID)
if err != nil {
if IsErrUserNotExist(err) {
pr.MergerID = -1
pr.Merger = NewFakeUser()
} else {
log.Error(3, "GetUserByID[%d]: %v", pr.ID, err)
}
}
case "merged":
if !pr.HasMerged {
return
}
pr.Merged = regulateTimeZone(pr.Merged)
}
}
// Merge merges pull request to base repository.
func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
if err = sess.Begin(); err != nil {
return err
}
if err = pr.Pull.changeStatus(sess, doer, true); err != nil {
return fmt.Errorf("Pull.changeStatus: %v", err)
}
headRepoPath := RepoPath(pr.HeadUserName, pr.HeadRepo.Name)
headGitRepo, err := git.OpenRepository(headRepoPath)
if err != nil {
return fmt.Errorf("OpenRepository: %v", err)
}
pr.MergedCommitID, err = headGitRepo.GetCommitIdOfBranch(pr.HeadBarcnh)
if err != nil {
return fmt.Errorf("GetCommitIdOfBranch: %v", err)
}
if err = mergePullRequestAction(sess, doer, pr.Pull.Repo, pr.Pull); err != nil {
return fmt.Errorf("mergePullRequestAction: %v", err)
}
pr.HasMerged = true
pr.Merged = time.Now()
pr.MergerID = doer.Id
if _, err = sess.Id(pr.ID).AllCols().Update(pr); err != nil {
return fmt.Errorf("update pull request: %v", err)
}
// Clone base repo.
tmpBasePath := path.Join("data/tmp/repos", com.ToStr(time.Now().Nanosecond())+".git")
os.MkdirAll(path.Dir(tmpBasePath), os.ModePerm)
defer os.RemoveAll(path.Dir(tmpBasePath))
var stderr string
if _, stderr, err = process.ExecTimeout(5*time.Minute,
fmt.Sprintf("PullRequest.Merge(git clone): %s", tmpBasePath),
"git", "clone", baseGitRepo.Path, tmpBasePath); err != nil {
return fmt.Errorf("git clone: %s", stderr)
}
// Check out base branch.
if _, stderr, err = process.ExecDir(-1, tmpBasePath,
fmt.Sprintf("PullRequest.Merge(git checkout): %s", tmpBasePath),
"git", "checkout", pr.BaseBranch); err != nil {
return fmt.Errorf("git checkout: %s", stderr)
}
// Pull commits.
if _, stderr, err = process.ExecDir(-1, tmpBasePath,
fmt.Sprintf("PullRequest.Merge(git pull): %s", tmpBasePath),
"git", "pull", headRepoPath, pr.HeadBarcnh); err != nil {
return fmt.Errorf("git pull: %s", stderr)
}
// Push back to upstream.
if _, stderr, err = process.ExecDir(-1, tmpBasePath,
fmt.Sprintf("PullRequest.Merge(git push): %s", tmpBasePath),
"git", "push", baseGitRepo.Path, pr.BaseBranch); err != nil {
return fmt.Errorf("git push: %s", stderr)
}
return sess.Commit()
}
// NewPullRequest creates new pull request with labels for repository.
func NewPullRequest(repo *Repository, pull *Issue, labelIDs []int64, uuids []string, pr *PullRequest, patch []byte) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
if err = sess.Begin(); err != nil {
return err
}
if err = newIssue(sess, repo, pull, labelIDs, uuids, true); err != nil {
return fmt.Errorf("newIssue: %v", err)
}
// Notify watchers.
act := &Action{
ActUserID: pull.Poster.Id,
ActUserName: pull.Poster.Name,
ActEmail: pull.Poster.Email,
OpType: CREATE_PULL_REQUEST,
Content: fmt.Sprintf("%d|%s", pull.Index, pull.Name),
RepoID: repo.ID,
RepoUserName: repo.Owner.Name,
RepoName: repo.Name,
IsPrivate: repo.IsPrivate,
}
if err = notifyWatchers(sess, act); err != nil {
return err
}
// Test apply patch.
repoPath, err := repo.RepoPath()
if err != nil {
return fmt.Errorf("RepoPath: %v", err)
}
patchPath := path.Join(repoPath, "pulls", com.ToStr(pr.ID)+".patch")
os.MkdirAll(path.Dir(patchPath), os.ModePerm)
if err = ioutil.WriteFile(patchPath, patch, 0644); err != nil {
return fmt.Errorf("save patch: %v", err)
}
defer os.Remove(patchPath)
stdout, stderr, err := process.ExecDir(-1, repoPath,
fmt.Sprintf("NewPullRequest(git apply --check): %d", repo.ID),
"git", "apply", "--check", "-v", patchPath)
if err != nil {
if strings.Contains(stderr, "fatal:") {
return fmt.Errorf("git apply --check: %v - %s", err, stderr)
}
}
pr.CanAutoMerge = !strings.Contains(stdout, "error: patch failed:")
pr.PullID = pull.ID
pr.PullIndex = pull.Index
if _, err = sess.Insert(pr); err != nil {
return fmt.Errorf("insert pull repo: %v", err)
}
return sess.Commit()
}
// GetUnmergedPullRequest returnss a pull request hasn't been merged by given info.
func GetUnmergedPullRequest(headRepoID, baseRepoID int64, headBranch, baseBranch string) (*PullRequest, error) {
pr := &PullRequest{
HeadRepoID: headRepoID,
BaseRepoID: baseRepoID,
HeadBarcnh: headBranch,
BaseBranch: baseBranch,
}
has, err := x.Where("has_merged=?", false).Get(pr)
if err != nil {
return nil, err
} else if !has {
return nil, ErrPullRequestNotExist{0, 0, headRepoID, baseRepoID, headBranch, baseBranch}
}
return pr, nil
}
// GetPullRequestByPullID returns pull repo by given pull ID.
func GetPullRequestByPullID(pullID int64) (*PullRequest, error) {
pr := new(PullRequest)
has, err := x.Where("pull_id=?", pullID).Get(pr)
if err != nil {
return nil, err
} else if !has {
return nil, ErrPullRequestNotExist{0, pullID, 0, 0, "", ""}
}
return pr, nil
}
// .____ ___. .__
// | | _____ \_ |__ ____ | |
// | | \__ \ | __ \_/ __ \| |

View File

@@ -11,6 +11,7 @@ import (
"io/ioutil"
"os"
"path"
"path/filepath"
"strings"
"time"
@@ -65,6 +66,8 @@ var migrations = []Migration{
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
NewMigration("clean up migrate repo info", cleanUpMigrateRepoInfo), // V9 -> V10:v0.6.20
}
// Migrate database to current version
@@ -606,3 +609,96 @@ func attachmentRefactor(x *xorm.Engine) error {
return sess.Commit()
}
func renamePullRequestFields(x *xorm.Engine) (err error) {
type PullRequest struct {
ID int64 `xorm:"pk autoincr"`
PullID int64 `xorm:"INDEX"`
PullIndex int64
HeadBarcnh string
IssueID int64 `xorm:"INDEX"`
Index int64
HeadBranch string
}
if err = x.Sync(new(PullRequest)); err != nil {
return fmt.Errorf("sync: %v", err)
}
results, err := x.Query("SELECT `id`,`pull_id`,`pull_index`,`head_barcnh` FROM `pull_request`")
if err != nil {
if strings.Contains(err.Error(), "no such column") {
return nil
}
return fmt.Errorf("select pull requests: %v", err)
}
sess := x.NewSession()
defer sessionRelease(sess)
if err = sess.Begin(); err != nil {
return err
}
var pull *PullRequest
for _, pr := range results {
pull = &PullRequest{
ID: com.StrTo(pr["id"]).MustInt64(),
IssueID: com.StrTo(pr["pull_id"]).MustInt64(),
Index: com.StrTo(pr["pull_index"]).MustInt64(),
HeadBranch: string(pr["head_barcnh"]),
}
if _, err = sess.Id(pull.ID).Update(pull); err != nil {
return err
}
}
return sess.Commit()
}
func cleanUpMigrateRepoInfo(x *xorm.Engine) (err error) {
type (
User struct {
ID int64 `xorm:"pk autoincr"`
LowerName string
}
Repository struct {
ID int64 `xorm:"pk autoincr"`
OwnerID int64
LowerName string
}
)
repos := make([]*Repository, 0, 25)
if err = x.Where("is_mirror=?", false).Find(&repos); err != nil {
return fmt.Errorf("select all non-mirror repositories: %v", err)
}
var user *User
for _, repo := range repos {
user = &User{ID: repo.OwnerID}
has, err := x.Get(user)
if err != nil {
return fmt.Errorf("get owner of repository[%d - %d]: %v", repo.ID, repo.OwnerID, err)
} else if !has {
continue
}
configPath := filepath.Join(setting.RepoRootPath, user.LowerName, repo.LowerName+".git/config")
// In case repository file is somehow missing.
if !com.IsFile(configPath) {
continue
}
cfg, err := ini.Load(configPath)
if err != nil {
return fmt.Errorf("open config file: %v", err)
}
cfg.DeleteSection("remote \"origin\"")
if err = cfg.SaveToIndent(configPath, "\t"); err != nil {
return fmt.Errorf("save config file: %v", err)
}
}
return nil
}

View File

@@ -20,6 +20,7 @@ import (
_ "github.com/lib/pq"
"github.com/gogits/gogs/models/migrations"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
)
@@ -52,6 +53,7 @@ func regulateTimeZone(t time.Time) time.Time {
zone := t.Local().Format("-0700")
if len(zone) != 5 {
log.Error(4, "Unprocessable timezone: %s - %s", t.Local(), zone)
return t
}
hour := com.StrTo(zone[2:3]).MustInt()
@@ -88,7 +90,7 @@ func init() {
new(Team), new(OrgUser), new(TeamUser), new(TeamRepo),
new(Notice), new(EmailAddress))
gonicNames := []string{"UID", "SSL"}
gonicNames := []string{"SSL"}
for _, name := range gonicNames {
core.LintGonicMapper[name] = true
}

View File

@@ -117,16 +117,6 @@ func (key *PublicKey) GetAuthorizedString() string {
return fmt.Sprintf(_TPL_PUBLICK_KEY, appPath, key.ID, setting.CustomConf, key.Content)
}
var minimumKeySizes = map[string]int{
"(ED25519)": 256,
"(ECDSA)": 256,
"(NTRU)": 1087,
"(MCE)": 1702,
"(McE)": 1702,
"(RSA)": 1024,
"(DSA)": 1024,
}
func extractTypeFromBase64Key(key string) (string, error) {
b, err := base64.StdEncoding.DecodeString(key)
if err != nil || len(b) < 4 {
@@ -228,9 +218,9 @@ func CheckPublicKeyString(content string) (_ string, err error) {
tmpFile.Close()
// Check if ssh-keygen recognizes its contents.
stdout, stderr, err := process.Exec("CheckPublicKeyString", "ssh-keygen", "-l", "-f", tmpPath)
stdout, stderr, err := process.Exec("CheckPublicKeyString", "ssh-keygen", "-lf", tmpPath)
if err != nil {
return "", errors.New("ssh-keygen -l -f: " + stderr)
return "", errors.New("ssh-keygen -lf: " + stderr)
} else if len(stdout) < 2 {
return "", errors.New("ssh-keygen returned not enough output to evaluate the key: " + stdout)
}
@@ -251,9 +241,10 @@ func CheckPublicKeyString(content string) (_ string, err error) {
if keySize == 0 {
return "", errors.New("cannot get key size of the given key")
}
keyType := strings.TrimSpace(sshKeygenOutput[len(sshKeygenOutput)-1])
if minimumKeySize := minimumKeySizes[keyType]; minimumKeySize == 0 {
return "", errors.New("sorry, unrecognized public key type")
keyType := strings.Trim(sshKeygenOutput[len(sshKeygenOutput)-1], " ()\n")
if minimumKeySize := setting.Service.MinimumKeySizes[keyType]; minimumKeySize == 0 {
return "", fmt.Errorf("unrecognized public key type: %s", keyType)
} else if keySize < minimumKeySize {
return "", fmt.Errorf("the minimum accepted size of a public key %s is %d", keyType, minimumKeySize)
}
@@ -321,9 +312,9 @@ func addKey(e Engine, key *PublicKey) (err error) {
if err = ioutil.WriteFile(tmpPath, []byte(key.Content), 0644); err != nil {
return err
}
stdout, stderr, err := process.Exec("AddPublicKey", "ssh-keygen", "-l", "-f", tmpPath)
stdout, stderr, err := process.Exec("AddPublicKey", "ssh-keygen", "-lf", tmpPath)
if err != nil {
return errors.New("ssh-keygen -l -f: " + stderr)
return errors.New("ssh-keygen -lf: " + stderr)
} else if len(stdout) < 2 {
return errors.New("not enough output for calculating fingerprint: " + stdout)
}

548
models/pull.go Normal file
View File

@@ -0,0 +1,548 @@
// 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 models
import (
"fmt"
"os"
"path"
"strings"
"time"
"github.com/Unknwon/com"
"github.com/go-xorm/xorm"
"github.com/gogits/gogs/modules/git"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/process"
"github.com/gogits/gogs/modules/setting"
)
type PullRequestType int
const (
PULL_REQUEST_GOGS PullRequestType = iota
PLLL_ERQUEST_GIT
)
type PullRequestStatus int
const (
PULL_REQUEST_STATUS_CONFLICT PullRequestStatus = iota
PULL_REQUEST_STATUS_CHECKING
PULL_REQUEST_STATUS_MERGEABLE
)
// PullRequest represents relation between pull request and repositories.
type PullRequest struct {
ID int64 `xorm:"pk autoincr"`
Type PullRequestType
Status PullRequestStatus
IssueID int64 `xorm:"INDEX"`
Issue *Issue `xorm:"-"`
Index int64
HeadRepoID int64
HeadRepo *Repository `xorm:"-"`
BaseRepoID int64
BaseRepo *Repository `xorm:"-"`
HeadUserName string
HeadBranch string
BaseBranch string
MergeBase string `xorm:"VARCHAR(40)"`
HasMerged bool
MergedCommitID string `xorm:"VARCHAR(40)"`
Merged time.Time
MergerID int64
Merger *User `xorm:"-"`
}
// Note: don't try to get Pull because will end up recursive querying.
func (pr *PullRequest) AfterSet(colName string, _ xorm.Cell) {
switch colName {
case "merged":
if !pr.HasMerged {
return
}
pr.Merged = regulateTimeZone(pr.Merged)
}
}
func (pr *PullRequest) getHeadRepo(e Engine) (err error) {
pr.HeadRepo, err = getRepositoryByID(e, pr.HeadRepoID)
if err != nil && !IsErrRepoNotExist(err) {
return fmt.Errorf("getRepositoryByID(head): %v", err)
}
return nil
}
func (pr *PullRequest) GetHeadRepo() (err error) {
return pr.getHeadRepo(x)
}
func (pr *PullRequest) GetBaseRepo() (err error) {
if pr.BaseRepo != nil {
return nil
}
pr.BaseRepo, err = GetRepositoryByID(pr.BaseRepoID)
if err != nil {
return fmt.Errorf("GetRepositoryByID(base): %v", err)
}
return nil
}
func (pr *PullRequest) GetMerger() (err error) {
if !pr.HasMerged || pr.Merger != nil {
return nil
}
pr.Merger, err = GetUserByID(pr.MergerID)
if IsErrUserNotExist(err) {
pr.MergerID = -1
pr.Merger = NewFakeUser()
} else if err != nil {
return fmt.Errorf("GetUserByID: %v", err)
}
return nil
}
// IsChecking returns true if this pull request is still checking conflict.
func (pr *PullRequest) IsChecking() bool {
return pr.Status == PULL_REQUEST_STATUS_CHECKING
}
// CanAutoMerge returns true if this pull request can be merged automatically.
func (pr *PullRequest) CanAutoMerge() bool {
return pr.Status == PULL_REQUEST_STATUS_MERGEABLE
}
// Merge merges pull request to base repository.
func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
if err = sess.Begin(); err != nil {
return err
}
if err = pr.Issue.changeStatus(sess, doer, true); err != nil {
return fmt.Errorf("Issue.changeStatus: %v", err)
}
if err = pr.getHeadRepo(sess); err != nil {
return fmt.Errorf("getHeadRepo: %v", err)
}
headRepoPath := RepoPath(pr.HeadUserName, pr.HeadRepo.Name)
headGitRepo, err := git.OpenRepository(headRepoPath)
if err != nil {
return fmt.Errorf("OpenRepository: %v", err)
}
pr.MergedCommitID, err = headGitRepo.GetCommitIdOfBranch(pr.HeadBranch)
if err != nil {
return fmt.Errorf("GetCommitIdOfBranch: %v", err)
}
if err = mergePullRequestAction(sess, doer, pr.Issue.Repo, pr.Issue); err != nil {
return fmt.Errorf("mergePullRequestAction: %v", err)
}
pr.HasMerged = true
pr.Merged = time.Now()
pr.MergerID = doer.Id
if _, err = sess.Id(pr.ID).AllCols().Update(pr); err != nil {
return fmt.Errorf("update pull request: %v", err)
}
// Clone base repo.
tmpBasePath := path.Join(setting.AppDataPath, "tmp/repos", com.ToStr(time.Now().Nanosecond())+".git")
os.MkdirAll(path.Dir(tmpBasePath), os.ModePerm)
defer os.RemoveAll(path.Dir(tmpBasePath))
var stderr string
if _, stderr, err = process.ExecTimeout(5*time.Minute,
fmt.Sprintf("PullRequest.Merge(git clone): %s", tmpBasePath),
"git", "clone", baseGitRepo.Path, tmpBasePath); err != nil {
return fmt.Errorf("git clone: %s", stderr)
}
// Check out base branch.
if _, stderr, err = process.ExecDir(-1, tmpBasePath,
fmt.Sprintf("PullRequest.Merge(git checkout): %s", tmpBasePath),
"git", "checkout", pr.BaseBranch); err != nil {
return fmt.Errorf("git checkout: %s", stderr)
}
// Add head repo remote.
if _, stderr, err = process.ExecDir(-1, tmpBasePath,
fmt.Sprintf("PullRequest.Merge(git remote add): %s", tmpBasePath),
"git", "remote", "add", "head_repo", headRepoPath); err != nil {
return fmt.Errorf("git remote add[%s -> %s]: %s", headRepoPath, tmpBasePath, stderr)
}
// Merge commits.
if _, stderr, err = process.ExecDir(-1, tmpBasePath,
fmt.Sprintf("PullRequest.Merge(git fetch): %s", tmpBasePath),
"git", "fetch", "head_repo"); err != nil {
return fmt.Errorf("git fetch[%s -> %s]: %s", headRepoPath, tmpBasePath, stderr)
}
if _, stderr, err = process.ExecDir(-1, tmpBasePath,
fmt.Sprintf("PullRequest.Merge(git merge): %s", tmpBasePath),
"git", "merge", "--no-ff", "-m",
fmt.Sprintf("Merge branch '%s' of %s/%s into %s", pr.HeadBranch, pr.HeadUserName, pr.HeadRepo.Name, pr.BaseBranch),
"head_repo/"+pr.HeadBranch); err != nil {
return fmt.Errorf("git merge[%s]: %s", tmpBasePath, stderr)
}
// Push back to upstream.
if _, stderr, err = process.ExecDir(-1, tmpBasePath,
fmt.Sprintf("PullRequest.Merge(git push): %s", tmpBasePath),
"git", "push", baseGitRepo.Path, pr.BaseBranch); err != nil {
return fmt.Errorf("git push: %s", stderr)
}
return sess.Commit()
}
// patchConflicts is a list of conflit description from Git.
var patchConflicts = []string{
"patch does not apply",
"already exists in working directory",
"unrecognized input",
}
// testPatch checks if patch can be merged to base repository without conflit.
func (pr *PullRequest) testPatch() (err error) {
if pr.BaseRepo == nil {
pr.BaseRepo, err = GetRepositoryByID(pr.BaseRepoID)
if err != nil {
return fmt.Errorf("GetRepositoryByID: %v", err)
}
}
patchPath, err := pr.BaseRepo.PatchPath(pr.Index)
if err != nil {
return fmt.Errorf("BaseRepo.PatchPath: %v", err)
}
// Fast fail if patch does not exist, this assumes data is cruppted.
if !com.IsFile(patchPath) {
log.Trace("PullRequest[%d].testPatch: ignored cruppted data", pr.ID)
return nil
}
log.Trace("PullRequest[%d].testPatch(patchPath): %s", pr.ID, patchPath)
if err := pr.BaseRepo.UpdateLocalCopy(); err != nil {
return fmt.Errorf("UpdateLocalCopy: %v", err)
}
pr.Status = PULL_REQUEST_STATUS_CHECKING
_, stderr, err := process.ExecDir(-1, pr.BaseRepo.LocalCopyPath(),
fmt.Sprintf("testPatch(git apply --check): %d", pr.BaseRepo.ID),
"git", "apply", "--check", patchPath)
if err != nil {
for i := range patchConflicts {
if strings.Contains(stderr, patchConflicts[i]) {
log.Trace("PullRequest[%d].testPatch(apply): has conflit", pr.ID)
pr.Status = PULL_REQUEST_STATUS_CONFLICT
return nil
}
}
return fmt.Errorf("git apply --check: %v - %s", err, stderr)
}
return nil
}
// NewPullRequest creates new pull request with labels for repository.
func NewPullRequest(repo *Repository, pull *Issue, labelIDs []int64, uuids []string, pr *PullRequest, patch []byte) (err error) {
sess := x.NewSession()
defer sessionRelease(sess)
if err = sess.Begin(); err != nil {
return err
}
if err = newIssue(sess, repo, pull, labelIDs, uuids, true); err != nil {
return fmt.Errorf("newIssue: %v", err)
}
// Notify watchers.
act := &Action{
ActUserID: pull.Poster.Id,
ActUserName: pull.Poster.Name,
ActEmail: pull.Poster.Email,
OpType: CREATE_PULL_REQUEST,
Content: fmt.Sprintf("%d|%s", pull.Index, pull.Name),
RepoID: repo.ID,
RepoUserName: repo.Owner.Name,
RepoName: repo.Name,
IsPrivate: repo.IsPrivate,
}
if err = notifyWatchers(sess, act); err != nil {
return err
}
pr.Index = pull.Index
if err = repo.SavePatch(pr.Index, patch); err != nil {
return fmt.Errorf("SavePatch: %v", err)
}
pr.BaseRepo = repo
if err = pr.testPatch(); err != nil {
return fmt.Errorf("testPatch: %v", err)
}
if pr.Status == PULL_REQUEST_STATUS_CHECKING {
pr.Status = PULL_REQUEST_STATUS_MERGEABLE
}
pr.IssueID = pull.ID
if _, err = sess.Insert(pr); err != nil {
return fmt.Errorf("insert pull repo: %v", err)
}
return sess.Commit()
}
// GetUnmergedPullRequest returnss a pull request that is open and has not been merged
// by given head/base and repo/branch.
func GetUnmergedPullRequest(headRepoID, baseRepoID int64, headBranch, baseBranch string) (*PullRequest, error) {
pr := new(PullRequest)
has, err := x.Where("head_repo_id=? AND head_branch=? AND base_repo_id=? AND base_branch=? AND has_merged=? AND issue.is_closed=?",
headRepoID, headBranch, baseRepoID, baseBranch, false, false).
Join("INNER", "issue", "issue.id=pull_request.issue_id").Get(pr)
if err != nil {
return nil, err
} else if !has {
return nil, ErrPullRequestNotExist{0, 0, headRepoID, baseRepoID, headBranch, baseBranch}
}
return pr, nil
}
// GetUnmergedPullRequestsByHeadInfo returnss all pull requests that are open and has not been merged
// by given head information (repo and branch).
func GetUnmergedPullRequestsByHeadInfo(repoID int64, branch string) ([]*PullRequest, error) {
prs := make([]*PullRequest, 0, 2)
return prs, x.Where("head_repo_id=? AND head_branch=? AND has_merged=? AND issue.is_closed=?",
repoID, branch, false, false).
Join("INNER", "issue", "issue.id=pull_request.issue_id").Find(&prs)
}
// GetUnmergedPullRequestsByBaseInfo returnss all pull requests that are open and has not been merged
// by given base information (repo and branch).
func GetUnmergedPullRequestsByBaseInfo(repoID int64, branch string) ([]*PullRequest, error) {
prs := make([]*PullRequest, 0, 2)
return prs, x.Where("base_repo_id=? AND base_branch=? AND has_merged=? AND issue.is_closed=?",
repoID, branch, false, false).
Join("INNER", "issue", "issue.id=pull_request.issue_id").Find(&prs)
}
// GetPullRequestByID returns a pull request by given ID.
func GetPullRequestByID(id int64) (*PullRequest, error) {
pr := new(PullRequest)
has, err := x.Id(id).Get(pr)
if err != nil {
return nil, err
} else if !has {
return nil, ErrPullRequestNotExist{id, 0, 0, 0, "", ""}
}
return pr, nil
}
// GetPullRequestByIssueID returns pull request by given issue ID.
func GetPullRequestByIssueID(issueID int64) (*PullRequest, error) {
pr := &PullRequest{
IssueID: issueID,
}
has, err := x.Get(pr)
if err != nil {
return nil, err
} else if !has {
return nil, ErrPullRequestNotExist{0, issueID, 0, 0, "", ""}
}
return pr, nil
}
// Update updates all fields of pull request.
func (pr *PullRequest) Update() error {
_, err := x.Id(pr.ID).AllCols().Update(pr)
return err
}
// Update updates specific fields of pull request.
func (pr *PullRequest) UpdateCols(cols ...string) error {
_, err := x.Id(pr.ID).Cols(cols...).Update(pr)
return err
}
var PullRequestQueue = NewUniqueQueue(setting.Repository.PullRequestQueueLength)
// UpdatePatch generates and saves a new patch.
func (pr *PullRequest) UpdatePatch() (err error) {
if err = pr.GetHeadRepo(); err != nil {
return fmt.Errorf("GetHeadRepo: %v", err)
} else if pr.HeadRepo == nil {
log.Trace("PullRequest[%d].UpdatePatch: ignored cruppted data", pr.ID)
return nil
}
if err = pr.GetBaseRepo(); err != nil {
return fmt.Errorf("GetBaseRepo: %v", err)
} else if err = pr.BaseRepo.GetOwner(); err != nil {
return fmt.Errorf("GetOwner: %v", err)
}
headRepoPath, err := pr.HeadRepo.RepoPath()
if err != nil {
return fmt.Errorf("HeadRepo.RepoPath: %v", err)
}
headGitRepo, err := git.OpenRepository(headRepoPath)
if err != nil {
return fmt.Errorf("OpenRepository: %v", err)
}
// Add a temporary remote.
tmpRemote := com.ToStr(time.Now().UnixNano())
if err = headGitRepo.AddRemote(tmpRemote, RepoPath(pr.BaseRepo.Owner.Name, pr.BaseRepo.Name)); err != nil {
return fmt.Errorf("AddRemote: %v", err)
}
defer func() {
headGitRepo.RemoveRemote(tmpRemote)
}()
remoteBranch := "remotes/" + tmpRemote + "/" + pr.BaseBranch
pr.MergeBase, err = headGitRepo.GetMergeBase(remoteBranch, pr.HeadBranch)
if err != nil {
return fmt.Errorf("GetMergeBase: %v", err)
} else if err = pr.Update(); err != nil {
return fmt.Errorf("Update: %v", err)
}
patch, err := headGitRepo.GetPatch(pr.MergeBase, pr.HeadBranch)
if err != nil {
return fmt.Errorf("GetPatch: %v", err)
}
if err = pr.BaseRepo.SavePatch(pr.Index, patch); err != nil {
return fmt.Errorf("BaseRepo.SavePatch: %v", err)
}
return nil
}
// AddToTaskQueue adds itself to pull request test task queue.
func (pr *PullRequest) AddToTaskQueue() {
go PullRequestQueue.AddFunc(pr.ID, func() {
pr.Status = PULL_REQUEST_STATUS_CHECKING
if err := pr.UpdateCols("status"); err != nil {
log.Error(5, "AddToTaskQueue.UpdateCols[%d].(add to queue): %v", pr.ID, err)
}
})
}
func addHeadRepoTasks(prs []*PullRequest) {
for _, pr := range prs {
log.Trace("addHeadRepoTasks[%d]: composing new test task", pr.ID)
if err := pr.UpdatePatch(); err != nil {
log.Error(4, "UpdatePatch: %v", err)
continue
}
pr.AddToTaskQueue()
}
}
// AddTestPullRequestTask adds new test tasks by given head/base repository and head/base branch,
// and generate new patch for testing as needed.
func AddTestPullRequestTask(repoID int64, branch string) {
log.Trace("AddTestPullRequestTask[head_repo_id: %d, head_branch: %s]: finding pull requests", repoID, branch)
prs, err := GetUnmergedPullRequestsByHeadInfo(repoID, branch)
if err != nil {
log.Error(4, "Find pull requests[head_repo_id: %d, head_branch: %s]: %v", repoID, branch, err)
return
}
addHeadRepoTasks(prs)
log.Trace("AddTestPullRequestTask[base_repo_id: %d, base_branch: %s]: finding pull requests", repoID, branch)
prs, err = GetUnmergedPullRequestsByBaseInfo(repoID, branch)
if err != nil {
log.Error(4, "Find pull requests[base_repo_id: %d, base_branch: %s]: %v", repoID, branch, err)
return
}
for _, pr := range prs {
pr.AddToTaskQueue()
}
}
// checkAndUpdateStatus checks if pull request is possible to levaing checking status,
// and set to be either conflict or mergeable.
func (pr *PullRequest) checkAndUpdateStatus() {
// Status is not changed to conflict means mergeable.
if pr.Status == PULL_REQUEST_STATUS_CHECKING {
pr.Status = PULL_REQUEST_STATUS_MERGEABLE
}
// Make sure there is no waiting test to process before levaing the checking status.
if !PullRequestQueue.Exist(pr.ID) {
if err := pr.UpdateCols("status"); err != nil {
log.Error(4, "Update[%d]: %v", pr.ID, err)
}
}
}
// TestPullRequests checks and tests untested patches of pull requests.
// TODO: test more pull requests at same time.
func TestPullRequests() {
prs := make([]*PullRequest, 0, 10)
x.Iterate(PullRequest{
Status: PULL_REQUEST_STATUS_CHECKING,
},
func(idx int, bean interface{}) error {
pr := bean.(*PullRequest)
if err := pr.GetBaseRepo(); err != nil {
log.Error(3, "GetBaseRepo: %v", err)
return nil
}
if err := pr.testPatch(); err != nil {
log.Error(3, "testPatch: %v", err)
return nil
}
prs = append(prs, pr)
return nil
})
// Update pull request status.
for _, pr := range prs {
pr.checkAndUpdateStatus()
}
// Start listening on new test requests.
for prID := range PullRequestQueue.Queue() {
log.Trace("TestPullRequests[%v]: processing test task", prID)
PullRequestQueue.Remove(prID)
pr, err := GetPullRequestByID(com.StrTo(prID).MustInt64())
if err != nil {
log.Error(4, "GetPullRequestByID[%d]: %v", prID, err)
continue
} else if err = pr.testPatch(); err != nil {
log.Error(4, "testPatch[%d]: %v", pr.ID, err)
continue
}
pr.checkAndUpdateStatus()
}
}
func InitTestPullRequests() {
go TestPullRequests()
}

View File

@@ -64,7 +64,7 @@ func createTag(gitRepo *git.Repository, rel *Release) error {
return err
}
if err = gitRepo.CreateTag(rel.TagName, commit.Id.String()); err != nil {
if err = gitRepo.CreateTag(rel.TagName, commit.ID.String()); err != nil {
return err
}
} else {

View File

@@ -23,6 +23,7 @@ import (
"github.com/Unknwon/cae/zip"
"github.com/Unknwon/com"
"github.com/go-xorm/xorm"
"gopkg.in/ini.v1"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/bindata"
@@ -46,6 +47,9 @@ var (
var (
Gitignores, Licenses, Readmes []string
// Maximum items per page in forks, watchers and stars of a repo
ItemsPerPage = 54
)
func LoadRepoConfig() {
@@ -102,6 +106,7 @@ func NewRepoContext() {
if ver.LessThan(reqVer) {
log.Fatal(4, "Gogs requires Git version greater or equal to 1.7.1")
}
log.Info("Git Version: %s", ver.String())
// Git requires setting user.name and user.email in order to commit changes.
for configKey, defaultValue := range map[string]string{"user.name": "Gogs", "user.email": "gogs@fake.local"} {
@@ -179,9 +184,11 @@ func (repo *Repository) AfterSet(colName string, _ xorm.Cell) {
}
func (repo *Repository) getOwner(e Engine) (err error) {
if repo.Owner == nil {
repo.Owner, err = getUserByID(e, repo.OwnerID)
if repo.Owner != nil {
return nil
}
repo.Owner, err = getUserByID(e, repo.OwnerID)
return err
}
@@ -293,6 +300,59 @@ func (repo *Repository) DescriptionHtml() template.HTML {
return template.HTML(DescPattern.ReplaceAllStringFunc(base.Sanitizer.Sanitize(repo.Description), sanitize))
}
func (repo *Repository) LocalCopyPath() string {
return path.Join(setting.AppDataPath, "tmp/local", com.ToStr(repo.ID))
}
// UpdateLocalCopy makes sure the local copy of repository is up-to-date.
func (repo *Repository) UpdateLocalCopy() error {
repoPath, err := repo.RepoPath()
if err != nil {
return err
}
localPath := repo.LocalCopyPath()
if !com.IsExist(localPath) {
_, stderr, err := process.Exec(
fmt.Sprintf("UpdateLocalCopy(git clone): %s", repoPath), "git", "clone", repoPath, localPath)
if err != nil {
return fmt.Errorf("git clone: %v - %s", err, stderr)
}
} else {
_, stderr, err := process.ExecDir(-1, localPath,
fmt.Sprintf("UpdateLocalCopy(git pull): %s", repoPath), "git", "pull")
if err != nil {
return fmt.Errorf("git pull: %v - %s", err, stderr)
}
}
return nil
}
// PatchPath returns corresponding patch file path of repository by given issue ID.
func (repo *Repository) PatchPath(index int64) (string, error) {
if err := repo.GetOwner(); err != nil {
return "", err
}
return filepath.Join(RepoPath(repo.Owner.Name, repo.Name), "pulls", com.ToStr(index)+".patch"), nil
}
// SavePatch saves patch data to corresponding location by given issue ID.
func (repo *Repository) SavePatch(index int64, patch []byte) error {
patchPath, err := repo.PatchPath(index)
if err != nil {
return fmt.Errorf("PatchPath: %v", err)
}
os.MkdirAll(path.Dir(patchPath), os.ModePerm)
if err = ioutil.WriteFile(patchPath, patch, 0644); err != nil {
return fmt.Errorf("WriteFile: %v", err)
}
return nil
}
func isRepositoryExist(e Engine, u *User, repoName string) (bool, error) {
has, err := e.Get(&Repository{
OwnerID: u.Id,
@@ -322,9 +382,9 @@ func (repo *Repository) CloneLink() (cl CloneLink, err error) {
if setting.SSHPort != 22 {
cl.SSH = fmt.Sprintf("ssh://%s@%s:%d/%s/%s.git", setting.RunUser, setting.SSHDomain, setting.SSHPort, repo.Owner.LowerName, repo.LowerName)
} else {
cl.SSH = fmt.Sprintf("%s@%s:%s/%s.git", setting.RunUser, setting.SSHDomain, repo.Owner.LowerName, repo.LowerName)
cl.SSH = fmt.Sprintf("%s@%s:%s/%s.git", setting.RunUser, setting.SSHDomain, repo.Owner.Name, repo.Name)
}
cl.HTTPS = fmt.Sprintf("%s%s/%s.git", setting.AppUrl, repo.Owner.LowerName, repo.LowerName)
cl.HTTPS = fmt.Sprintf("%s%s/%s.git", setting.AppUrl, repo.Owner.Name, repo.Name)
return cl, nil
}
@@ -421,13 +481,21 @@ func MirrorRepository(repoId int64, userName, repoName, repoPath, url string) er
return nil
}
type MigrateRepoOptions struct {
Name string
Description string
IsPrivate bool
IsMirror bool
RemoteAddr string
}
// MigrateRepository migrates a existing repository from other project hosting.
func MigrateRepository(u *User, name, desc string, private, mirror bool, url string) (*Repository, error) {
func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) {
repo, err := CreateRepository(u, CreateRepoOptions{
Name: name,
Description: desc,
IsPrivate: private,
IsMirror: mirror,
Name: opts.Name,
Description: opts.Description,
IsPrivate: opts.IsPrivate,
IsMirror: opts.IsMirror,
})
if err != nil {
return nil, err
@@ -437,7 +505,7 @@ func MigrateRepository(u *User, name, desc string, private, mirror bool, url str
tmpDir := filepath.Join(os.TempDir(), fmt.Sprintf("%d", time.Now().Nanosecond()))
os.MkdirAll(tmpDir, os.ModePerm)
repoPath := RepoPath(u.Name, name)
repoPath := RepoPath(u.Name, opts.Name)
if u.IsOrganization() {
t, err := u.GetOwnerTeam()
@@ -450,8 +518,8 @@ func MigrateRepository(u *User, name, desc string, private, mirror bool, url str
}
repo.IsBare = false
if mirror {
if err = MirrorRepository(repo.ID, u.Name, repo.Name, repoPath, url); err != nil {
if opts.IsMirror {
if err = MirrorRepository(repo.ID, u.Name, repo.Name, repoPath, opts.RemoteAddr); err != nil {
return repo, err
}
repo.IsMirror = true
@@ -463,13 +531,24 @@ func MigrateRepository(u *User, name, desc string, private, mirror bool, url str
// FIXME: this command could for both migrate and mirror
_, stderr, err := process.ExecTimeout(10*time.Minute,
fmt.Sprintf("MigrateRepository: %s", repoPath),
"git", "clone", "--mirror", "--bare", "--quiet", url, repoPath)
"git", "clone", "--mirror", "--bare", "--quiet", opts.RemoteAddr, repoPath)
if err != nil {
return repo, fmt.Errorf("git clone --mirror --bare --quiet: %v", stderr)
} else if err = createUpdateHook(repoPath); err != nil {
return repo, fmt.Errorf("create update hook: %v", err)
}
// Clean up mirror info which prevents "push --all".
configPath := filepath.Join(repoPath, "/config")
cfg, err := ini.Load(configPath)
if err != nil {
return repo, fmt.Errorf("open config file: %v", err)
}
cfg.DeleteSection("remote \"origin\"")
if err = cfg.SaveToIndent(configPath, "\t"); err != nil {
return repo, fmt.Errorf("save config file: %v", err)
}
// Check if repository is empty.
_, stderr, err = com.ExecCmdDir(repoPath, "git", "log", "-1")
if err != nil {
@@ -831,9 +910,9 @@ func TransferOwnership(u *User, newOwnerName string, repo *Repository) error {
}
// Remove redundant collaborators.
collaborators, err := repo.GetCollaborators()
collaborators, err := repo.getCollaborators(sess)
if err != nil {
return fmt.Errorf("GetCollaborators: %v", err)
return fmt.Errorf("getCollaborators: %v", err)
}
// Dummy object.
@@ -869,9 +948,9 @@ func TransferOwnership(u *User, newOwnerName string, repo *Repository) error {
}
if newOwner.IsOrganization() {
t, err := newOwner.GetOwnerTeam()
t, err := newOwner.getOwnerTeam(sess)
if err != nil {
return fmt.Errorf("GetOwnerTeam: %v", err)
return fmt.Errorf("getOwnerTeam: %v", err)
} else if err = t.addRepository(sess, repo); err != nil {
return fmt.Errorf("add to owner team: %v", err)
}
@@ -950,13 +1029,11 @@ func updateRepository(e Engine, repo *Repository, visibilityChanged bool) (err e
if err = repo.getOwner(e); err != nil {
return fmt.Errorf("getOwner: %v", err)
}
if !repo.Owner.IsOrganization() {
return nil
}
// Organization repository need to recalculate access table when visivility is changed.
if err = repo.recalculateTeamAccesses(e, 0); err != nil {
return fmt.Errorf("recalculateTeamAccesses: %v", err)
if repo.Owner.IsOrganization() {
// Organization repository need to recalculate access table when visivility is changed.
if err = repo.recalculateTeamAccesses(e, 0); err != nil {
return fmt.Errorf("recalculateTeamAccesses: %v", err)
}
}
forkRepos, err := getRepositoriesByForkID(e, repo.ID)
@@ -1094,7 +1171,7 @@ func DeleteRepository(uid, repoID int64) error {
desc := fmt.Sprintf("delete repository files[%s]: %v", repoPath, err)
log.Warn(desc)
if err = CreateRepositoryNotice(desc); err != nil {
log.Error(4, "add notice: %v", err)
log.Error(4, "CreateRepositoryNotice: %v", err)
}
}
@@ -1237,10 +1314,14 @@ func DeleteRepositoryArchives() error {
return x.Where("id > 0").Iterate(new(Repository),
func(idx int, bean interface{}) error {
repo := bean.(*Repository)
if err := repo.GetOwner(); err != nil {
return err
repoPath, err := repo.RepoPath()
if err != nil {
if err2 := CreateRepositoryNotice(fmt.Sprintf("DeleteRepositoryArchives[%d]: %v", repo.ID, err)); err2 != nil {
log.Error(4, "CreateRepositoryNotice: %v", err2)
}
return nil
}
return os.RemoveAll(filepath.Join(RepoPath(repo.Owner.Name, repo.Name), "archives"))
return os.RemoveAll(filepath.Join(repoPath, "archives"))
})
}
@@ -1249,10 +1330,14 @@ func RewriteRepositoryUpdateHook() error {
return x.Where("id > 0").Iterate(new(Repository),
func(idx int, bean interface{}) error {
repo := bean.(*Repository)
if err := repo.GetOwner(); err != nil {
return err
repoPath, err := repo.RepoPath()
if err != nil {
if err2 := CreateRepositoryNotice(fmt.Sprintf("RewriteRepositoryUpdateHook[%d]: %v", repo.ID, err)); err2 != nil {
log.Error(4, "CreateRepositoryNotice: %v", err2)
}
return nil
}
return createUpdateHook(RepoPath(repo.Owner.Name, repo.Name))
return createUpdateHook(repoPath)
})
}
@@ -1419,6 +1504,12 @@ func CheckRepoStats() {
"UPDATE `user` SET num_repos=(SELECT COUNT(*) FROM `repository` WHERE owner_id=?) WHERE id=?",
"user count 'num_repos'",
},
// Issue.NumComments
{
"SELECT `issue`.id FROM `issue` WHERE `issue`.num_comments!=(SELECT COUNT(*) FROM `comment` WHERE issue_id=`issue`.id AND type=0)",
"UPDATE `issue` SET num_comments=(SELECT COUNT(*) FROM `comment` WHERE issue_id=? AND type=0) WHERE id=?",
"issue count 'num_comments'",
},
}
for i := range checkers {
repoStatsCheck(checkers[i])
@@ -1569,15 +1660,19 @@ type Watch struct {
RepoID int64 `xorm:"UNIQUE(watch)"`
}
func isWatching(e Engine, uid, repoId int64) bool {
has, _ := e.Get(&Watch{0, uid, repoId})
return has
}
// IsWatching checks if user has watched given repository.
func IsWatching(uid, repoId int64) bool {
has, _ := x.Get(&Watch{0, uid, repoId})
return has
return isWatching(x, uid, repoId)
}
func watchRepo(e Engine, uid, repoId int64, watch bool) (err error) {
if watch {
if IsWatching(uid, repoId) {
if isWatching(e, uid, repoId) {
return nil
}
if _, err = e.Insert(&Watch{RepoID: repoId, UserID: uid}); err != nil {
@@ -1585,7 +1680,7 @@ func watchRepo(e Engine, uid, repoId int64, watch bool) (err error) {
}
_, err = e.Exec("UPDATE `repository` SET num_watches = num_watches + 1 WHERE id = ?", repoId)
} else {
if !IsWatching(uid, repoId) {
if !isWatching(e, uid, repoId) {
return nil
}
if _, err = e.Delete(&Watch{0, uid, repoId}); err != nil {
@@ -1612,6 +1707,16 @@ func GetWatchers(rid int64) ([]*Watch, error) {
return getWatchers(x, rid)
}
// Repository.GetWatchers returns all users watching given repository.
func (repo *Repository) GetWatchers(offset int) ([]*User, error) {
users := make([]*User, 0, 10)
offset = (offset - 1) * ItemsPerPage
err := x.Limit(ItemsPerPage, offset).Where("repo_id=?", repo.ID).Join("LEFT", "watch", "user.id=watch.user_id").Find(&users)
return users, err
}
func notifyWatchers(e Engine, act *Action) error {
// Add feeds for user self and all watchers.
watches, err := getWatchers(e, act.RepoID)
@@ -1689,6 +1794,15 @@ func IsStaring(uid, repoId int64) bool {
return has
}
func (repo *Repository) GetStars(offset int) ([]*User, error) {
users := make([]*User, 0, 10)
offset = (offset - 1) * ItemsPerPage
err := x.Limit(ItemsPerPage, offset).Where("repo_id=?", repo.ID).Join("LEFT", "star", "user.id=star.uid").Find(&users)
return users, err
}
// ___________ __
// \_ _____/__________| | __
// | __)/ _ \_ __ \ |/ /
@@ -1756,3 +1870,11 @@ func ForkRepository(u *User, oldRepo *Repository, name, desc string) (_ *Reposit
return repo, sess.Commit()
}
func (repo *Repository) GetForks() ([]*Repository, error) {
forks := make([]*Repository, 0, 10)
err := x.Find(&forks, &Repository{ForkID: repo.ID})
return forks, err
}

View File

@@ -16,11 +16,11 @@ import (
)
type UpdateTask struct {
Id int64
Uuid string `xorm:"index"`
ID int64 `xorm:"pk autoincr"`
UUID string `xorm:"index"`
RefName string
OldCommitId string
NewCommitId string
OldCommitID string
NewCommitID string
}
func AddUpdateTask(task *UpdateTask) error {
@@ -28,27 +28,29 @@ func AddUpdateTask(task *UpdateTask) error {
return err
}
func GetUpdateTasksByUuid(uuid string) ([]*UpdateTask, error) {
// GetUpdateTaskByUUID returns update task by given UUID.
func GetUpdateTaskByUUID(uuid string) (*UpdateTask, error) {
task := &UpdateTask{
Uuid: uuid,
UUID: uuid,
}
tasks := make([]*UpdateTask, 0)
err := x.Find(&tasks, task)
has, err := x.Get(task)
if err != nil {
return nil, err
} else if !has {
return nil, ErrUpdateTaskNotExist{uuid}
}
return tasks, nil
return task, nil
}
func DelUpdateTasksByUuid(uuid string) error {
_, err := x.Delete(&UpdateTask{Uuid: uuid})
func DeleteUpdateTaskByUUID(uuid string) error {
_, err := x.Delete(&UpdateTask{UUID: uuid})
return err
}
func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName string, userId int64) error {
isNew := strings.HasPrefix(oldCommitId, "0000000")
func Update(refName, oldCommitID, newCommitID, userName, repoUserName, repoName string, userID int64) error {
isNew := strings.HasPrefix(oldCommitID, "0000000")
if isNew &&
strings.HasPrefix(newCommitId, "0000000") {
strings.HasPrefix(newCommitID, "0000000") {
return fmt.Errorf("old rev and new rev both 000000")
}
@@ -58,23 +60,23 @@ func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName
gitUpdate.Dir = f
gitUpdate.Run()
isDel := strings.HasPrefix(newCommitId, "0000000")
isDel := strings.HasPrefix(newCommitID, "0000000")
if isDel {
log.GitLogger.Info("del rev", refName, "from", userName+"/"+repoName+".git", "by", userId)
log.GitLogger.Info("del rev", refName, "from", userName+"/"+repoName+".git", "by", userID)
return nil
}
repo, err := git.OpenRepository(f)
gitRepo, err := git.OpenRepository(f)
if err != nil {
return fmt.Errorf("runUpdate.Open repoId: %v", err)
}
ru, err := GetUserByName(repoUserName)
user, err := GetUserByName(repoUserName)
if err != nil {
return fmt.Errorf("runUpdate.GetUserByName: %v", err)
}
repos, err := GetRepositoryByName(ru.Id, repoName)
repo, err := GetRepositoryByName(user.Id, repoName)
if err != nil {
return fmt.Errorf("runUpdate.GetRepositoryByName userId: %v", err)
}
@@ -82,7 +84,7 @@ func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName
// Push tags.
if strings.HasPrefix(refName, "refs/tags/") {
tagName := git.RefEndName(refName)
tag, err := repo.GetTag(tagName)
tag, err := gitRepo.GetTag(tagName)
if err != nil {
log.GitLogger.Fatal(4, "runUpdate.GetTag: %v", err)
}
@@ -100,14 +102,14 @@ func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName
commit := &base.PushCommits{}
if err = CommitRepoAction(userId, ru.Id, userName, actEmail,
repos.ID, repoUserName, repoName, refName, commit, oldCommitId, newCommitId); err != nil {
if err = CommitRepoAction(userID, user.Id, userName, actEmail,
repo.ID, repoUserName, repoName, refName, commit, oldCommitID, newCommitID); err != nil {
log.GitLogger.Fatal(4, "CommitRepoAction: %s/%s:%v", repoUserName, repoName, err)
}
return err
}
newCommit, err := repo.GetCommit(newCommitId)
newCommit, err := gitRepo.GetCommit(newCommitID)
if err != nil {
return fmt.Errorf("runUpdate GetCommit of newCommitId: %v", err)
}
@@ -117,12 +119,12 @@ func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName
if isNew {
l, err = newCommit.CommitsBefore()
if err != nil {
return fmt.Errorf("Find CommitsBefore erro: %v", err)
return fmt.Errorf("CommitsBefore: %v", err)
}
} else {
l, err = newCommit.CommitsBeforeUntil(oldCommitId)
l, err = newCommit.CommitsBeforeUntil(oldCommitID)
if err != nil {
return fmt.Errorf("Find CommitsBeforeUntil erro: %v", err)
return fmt.Errorf("CommitsBeforeUntil: %v", err)
}
}
@@ -139,15 +141,15 @@ func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName
actEmail = commit.Committer.Email
}
commits = append(commits,
&base.PushCommit{commit.Id.String(),
&base.PushCommit{commit.ID.String(),
commit.Message(),
commit.Author.Email,
commit.Author.Name,
})
}
if err = CommitRepoAction(userId, ru.Id, userName, actEmail,
repos.ID, repoUserName, repoName, refName, &base.PushCommits{l.Len(), commits, ""}, oldCommitId, newCommitId); err != nil {
if err = CommitRepoAction(userID, user.Id, userName, actEmail,
repo.ID, repoUserName, repoName, refName, &base.PushCommits{l.Len(), commits, ""}, oldCommitID, newCommitID); err != nil {
return fmt.Errorf("runUpdate.models.CommitRepoAction: %s/%s:%v", repoUserName, repoName, err)
}
return nil

View File

@@ -71,13 +71,14 @@ type User struct {
Created time.Time `xorm:"CREATED"`
Updated time.Time `xorm:"UPDATED"`
// Remember visibility choice for convenience.
// Remember visibility choice for convenience, true for private
LastRepoVisibility bool
// Permissions.
IsActive bool
IsAdmin bool
AllowGitHook bool
IsActive bool
IsAdmin bool
AllowGitHook bool
AllowImportLocal bool // Allow migrate repository by local path
// Avatar.
Avatar string `xorm:"VARCHAR(2048) NOT NULL"`
@@ -107,6 +108,16 @@ func (u *User) AfterSet(colName string, _ xorm.Cell) {
}
}
// CanEditGitHook returns true if user can edit Git hooks.
func (u *User) CanEditGitHook() bool {
return u.IsAdmin || u.AllowGitHook
}
// CanImportLocal returns true if user can migrate repository by local path.
func (u *User) CanImportLocal() bool {
return u.IsAdmin || u.AllowImportLocal
}
// EmailAdresses is the list of all email addresses of a user. Can contain the
// primary email address, but is not obligatory
type EmailAddress struct {
@@ -717,9 +728,9 @@ func UserPath(userName string) string {
return filepath.Join(setting.RepoRootPath, strings.ToLower(userName))
}
func GetUserByKeyId(keyId int64) (*User, error) {
func GetUserByKeyID(keyID int64) (*User, error) {
user := new(User)
has, err := x.Sql("SELECT a.* FROM `user` AS a, public_key AS b WHERE a.id = b.owner_id AND b.id=?", keyId).Get(user)
has, err := x.Sql("SELECT a.* FROM `user` AS a, public_key AS b WHERE a.id = b.owner_id AND b.id=?", keyID).Get(user)
if err != nil {
return nil, err
} else if !has {

View File

@@ -13,6 +13,7 @@ import (
"sync"
"time"
"github.com/Unknwon/com"
"github.com/go-xorm/xorm"
api "github.com/gogits/go-gogs-client"
@@ -435,39 +436,65 @@ func PrepareWebhooks(repo *Repository, event HookEventType, p api.Payloader) err
return nil
}
type hookQueue struct {
// Make sure one repository only occur once in the queue.
lock sync.Mutex
repoIDs map[int64]bool
// UniqueQueue represents a queue that guarantees only one instance of same ID is in the line.
type UniqueQueue struct {
lock sync.Mutex
ids map[string]bool
queue chan int64
queue chan string
}
func (q *hookQueue) removeRepoID(id int64) {
func (q *UniqueQueue) Queue() <-chan string {
return q.queue
}
func NewUniqueQueue(queueLength int) *UniqueQueue {
if queueLength <= 0 {
queueLength = 100
}
return &UniqueQueue{
ids: make(map[string]bool),
queue: make(chan string, queueLength),
}
}
func (q *UniqueQueue) Remove(id interface{}) {
q.lock.Lock()
defer q.lock.Unlock()
delete(q.repoIDs, id)
delete(q.ids, com.ToStr(id))
}
func (q *hookQueue) addRepoID(id int64) {
q.lock.Lock()
if q.repoIDs[id] {
q.lock.Unlock()
func (q *UniqueQueue) AddFunc(id interface{}, fn func()) {
newid := com.ToStr(id)
if q.Exist(id) {
return
}
q.repoIDs[id] = true
q.lock.Lock()
q.ids[newid] = true
if fn != nil {
fn()
}
q.lock.Unlock()
q.queue <- id
q.queue <- newid
}
// AddRepoID adds repository ID to hook delivery queue.
func (q *hookQueue) AddRepoID(id int64) {
go q.addRepoID(id)
func (q *UniqueQueue) Add(id interface{}) {
q.AddFunc(id, nil)
}
var HookQueue *hookQueue
func (q *UniqueQueue) Exist(id interface{}) bool {
q.lock.Lock()
defer q.lock.Unlock()
func deliverHook(t *HookTask) {
return q.ids[com.ToStr(id)]
}
var HookQueue = NewUniqueQueue(setting.Webhook.QueueLength)
func (t *HookTask) deliver() {
t.IsDelivered = true
timeout := time.Duration(setting.Webhook.DeliverTimeout) * time.Second
@@ -549,12 +576,13 @@ func deliverHook(t *HookTask) {
}
// DeliverHooks checks and delivers undelivered hooks.
// TODO: shoot more hooks at same time.
func DeliverHooks() {
tasks := make([]*HookTask, 0, 10)
x.Where("is_delivered=?", false).Iterate(new(HookTask),
func(idx int, bean interface{}) error {
t := bean.(*HookTask)
deliverHook(t)
t.deliver()
tasks = append(tasks, t)
return nil
})
@@ -566,15 +594,10 @@ func DeliverHooks() {
}
}
HookQueue = &hookQueue{
lock: sync.Mutex{},
repoIDs: make(map[int64]bool),
queue: make(chan int64, setting.Webhook.QueueLength),
}
// Start listening on new hook requests.
for repoID := range HookQueue.queue {
HookQueue.removeRepoID(repoID)
for repoID := range HookQueue.Queue() {
log.Trace("DeliverHooks[%v]: processing delivery hooks", repoID)
HookQueue.Remove(repoID)
tasks = make([]*HookTask, 0, 5)
if err := x.Where("repo_id=? AND is_delivered=?", repoID, false).Find(&tasks); err != nil {
@@ -582,9 +605,10 @@ func DeliverHooks() {
continue
}
for _, t := range tasks {
deliverHook(t)
t.deliver()
if err := UpdateHookTask(t); err != nil {
log.Error(4, "UpdateHookTask(%d): %v", t.ID, err)
log.Error(4, "UpdateHookTask[%d]: %v", t.ID, err)
continue
}
}
}

View File

@@ -5,9 +5,9 @@
package auth
import (
"github.com/Unknwon/macaron"
"gopkg.in/macaron.v1"
"github.com/macaron-contrib/binding"
"github.com/go-macaron/binding"
)
type AdminCrateUserForm struct {
@@ -24,16 +24,17 @@ func (f *AdminCrateUserForm) Validate(ctx *macaron.Context, errs binding.Errors)
}
type AdminEditUserForm struct {
LoginType string `binding:"Required"`
LoginName string
FullName string `binding:"MaxSize(100)"`
Email string `binding:"Required;Email;MaxSize(254)"`
Password string `binding:"MaxSize(255)"`
Website string `binding:"MaxSize(50)"`
Location string `binding:"MaxSize(50)"`
Active bool
Admin bool
AllowGitHook bool
LoginType string `binding:"Required"`
LoginName string
FullName string `binding:"MaxSize(100)"`
Email string `binding:"Required;Email;MaxSize(254)"`
Password string `binding:"MaxSize(255)"`
Website string `binding:"MaxSize(50)"`
Location string `binding:"MaxSize(50)"`
Active bool
Admin bool
AllowGitHook bool
AllowImportLocal bool
}
func (f *AdminEditUserForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {

View File

@@ -7,8 +7,8 @@ package apiv1
import (
"reflect"
"github.com/Unknwon/macaron"
"github.com/macaron-contrib/binding"
"github.com/go-macaron/binding"
"gopkg.in/macaron.v1"
"github.com/gogits/gogs/modules/auth"
)

View File

@@ -10,9 +10,9 @@ import (
"time"
"github.com/Unknwon/com"
"github.com/Unknwon/macaron"
"github.com/macaron-contrib/binding"
"github.com/macaron-contrib/session"
"github.com/go-macaron/binding"
"github.com/go-macaron/session"
"gopkg.in/macaron.v1"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base"
@@ -181,7 +181,7 @@ func AssignForm(form interface{}, data map[string]interface{}) {
}
}
func getSize(field reflect.StructField, prefix string) string {
func getRuleBody(field reflect.StructField, prefix string) string {
for _, rule := range strings.Split(field.Tag.Get("binding"), ";") {
if strings.HasPrefix(rule, prefix) {
return rule[len(prefix) : len(rule)-1]
@@ -191,15 +191,19 @@ func getSize(field reflect.StructField, prefix string) string {
}
func GetSize(field reflect.StructField) string {
return getSize(field, "Size(")
return getRuleBody(field, "Size(")
}
func GetMinSize(field reflect.StructField) string {
return getSize(field, "MinSize(")
return getRuleBody(field, "MinSize(")
}
func GetMaxSize(field reflect.StructField) string {
return getSize(field, "MaxSize(")
return getRuleBody(field, "MaxSize(")
}
func GetInclude(field reflect.StructField) string {
return getRuleBody(field, "Include(")
}
// FIXME: struct contains a struct
@@ -260,6 +264,8 @@ func validate(errs binding.Errors, data map[string]interface{}, f Form, l macaro
data["ErrorMsg"] = trName + l.Tr("form.email_error")
case binding.ERR_URL:
data["ErrorMsg"] = trName + l.Tr("form.url_error")
case binding.ERR_INCLUDE:
data["ErrorMsg"] = trName + l.Tr("form.include_error", GetInclude(field))
default:
data["ErrorMsg"] = l.Tr("form.unknown_error") + " " + errs[0].Classification
}

View File

@@ -5,8 +5,8 @@
package auth
import (
"github.com/Unknwon/macaron"
"github.com/macaron-contrib/binding"
"github.com/go-macaron/binding"
"gopkg.in/macaron.v1"
)
type AuthenticationForm struct {

View File

@@ -9,6 +9,7 @@ package ldap
import (
"crypto/tls"
"fmt"
"strings"
"github.com/gogits/gogs/modules/ldap"
"github.com/gogits/gogs/modules/log"
@@ -33,6 +34,28 @@ type Source struct {
Enabled bool // if this source is disabled
}
func (ls *Source) sanitizedUserQuery(username string) (string, bool) {
// See http://tools.ietf.org/search/rfc4515
badCharacters := "\x00()*\\"
if strings.ContainsAny(username, badCharacters) {
log.Debug("'%s' contains invalid query characters. Aborting.", username)
return "", false
}
return fmt.Sprintf(ls.Filter, username), true
}
func (ls *Source) sanitizedUserDN(username string) (string, bool) {
// See http://tools.ietf.org/search/rfc4514: "special characters"
badCharacters := "\x00()*\\,='\"#+;<> "
if strings.ContainsAny(username, badCharacters) {
log.Debug("'%s' contains invalid DN characters. Aborting.", username)
return "", false
}
return fmt.Sprintf(ls.UserDN, username), true
}
func (ls *Source) FindUserDN(name string) (string, bool) {
l, err := ldapDial(ls)
if err != nil {
@@ -55,7 +78,11 @@ func (ls *Source) FindUserDN(name string) (string, bool) {
}
// A search for the user.
userFilter := fmt.Sprintf(ls.Filter, name)
userFilter, ok := ls.sanitizedUserQuery(name)
if !ok {
return "", false
}
log.Trace("Searching using filter %s", userFilter)
search := ldap.NewSearchRequest(
ls.UserBase, ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0,
@@ -85,7 +112,12 @@ func (ls *Source) SearchEntry(name, passwd string, directBind bool) (string, str
var userDN string
if directBind {
log.Trace("LDAP will bind directly via UserDN template: %s", ls.UserDN)
userDN = fmt.Sprintf(ls.UserDN, name)
var ok bool
userDN, ok = ls.sanitizedUserDN(name)
if !ok {
return "", "", "", false, false
}
} else {
log.Trace("LDAP will use BindDN.")
@@ -98,7 +130,7 @@ func (ls *Source) SearchEntry(name, passwd string, directBind bool) (string, str
l, err := ldapDial(ls)
if err != nil {
log.Error(4, "LDAP Connect error, %s:%v", ls.Host, err)
log.Error(4, "LDAP Connect error (%s): %v", ls.Host, err)
ls.Enabled = false
return "", "", "", false, false
}
@@ -112,7 +144,11 @@ func (ls *Source) SearchEntry(name, passwd string, directBind bool) (string, str
}
log.Trace("Bound successfully with userDN: %s", userDN)
userFilter := fmt.Sprintf(ls.Filter, name)
userFilter, ok := ls.sanitizedUserQuery(name)
if !ok {
return "", "", "", false, false
}
search := ldap.NewSearchRequest(
userDN, ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false, userFilter,
[]string{ls.AttributeName, ls.AttributeSurname, ls.AttributeMail},

View File

@@ -5,8 +5,8 @@
package auth
import (
"github.com/Unknwon/macaron"
"github.com/macaron-contrib/binding"
"github.com/go-macaron/binding"
"gopkg.in/macaron.v1"
)
// ________ .__ __ .__

View File

@@ -5,8 +5,14 @@
package auth
import (
"github.com/Unknwon/macaron"
"github.com/macaron-contrib/binding"
"net/url"
"strings"
"github.com/Unknwon/com"
"github.com/go-macaron/binding"
"gopkg.in/macaron.v1"
"github.com/gogits/gogs/models"
)
// _______________________________________ _________.______________________ _______________.___.
@@ -37,8 +43,8 @@ type MigrateRepoForm struct {
AuthPassword string `json:"auth_password"`
Uid int64 `json:"uid" binding:"Required"`
RepoName string `json:"repo_name" binding:"Required;AlphaDashDot;MaxSize(100)"`
Private bool `json:"mirror"`
Mirror bool `json:"private"`
Mirror bool `json:"mirror"`
Private bool `json:"private"`
Description string `json:"description" binding:"MaxSize(255)"`
}
@@ -46,6 +52,34 @@ func (f *MigrateRepoForm) Validate(ctx *macaron.Context, errs binding.Errors) bi
return validate(errs, ctx.Data, f, ctx.Locale)
}
// ParseRemoteAddr checks if given remote address is valid,
// and returns composed URL with needed username and passowrd.
// It also checks if given user has permission when remote address
// is actually a local path.
func (f MigrateRepoForm) ParseRemoteAddr(user *models.User) (string, error) {
remoteAddr := f.CloneAddr
// Remote address can be HTTP/HTTPS/Git URL or local path.
if strings.HasPrefix(remoteAddr, "http://") ||
strings.HasPrefix(remoteAddr, "https://") ||
strings.HasPrefix(remoteAddr, "git://") {
u, err := url.Parse(remoteAddr)
if err != nil {
return "", models.ErrInvalidCloneAddr{IsURLError: true}
}
if len(f.AuthUsername)+len(f.AuthPassword) > 0 {
u.User = url.UserPassword(f.AuthUsername, f.AuthPassword)
}
remoteAddr = u.String()
} else if !user.CanImportLocal() {
return "", models.ErrInvalidCloneAddr{IsPermissionDenied: true}
} else if !com.IsDir(remoteAddr) {
return "", models.ErrInvalidCloneAddr{IsInvalidPath: true}
}
return remoteAddr, nil
}
type RepoSettingForm struct {
RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)"`
Description string `binding:"MaxSize(255)"`

View File

@@ -7,8 +7,8 @@ package auth
import (
"mime/multipart"
"github.com/Unknwon/macaron"
"github.com/macaron-contrib/binding"
"github.com/go-macaron/binding"
"gopkg.in/macaron.v1"
)
type InstallForm struct {
@@ -30,7 +30,7 @@ type InstallForm struct {
SMTPHost string
SMTPFrom string
SMTPEmail string `binding:"OmitEmpty;Email;MaxSize(50)" locale:"install.mailer_user"`
SMTPEmail string `binding:"OmitEmpty;Email;MaxSize(254)" locale:"install.mailer_user"`
SMTPPasswd string
RegisterConfirm bool
MailNotify bool
@@ -44,7 +44,7 @@ type InstallForm struct {
AdminName string `binding:"OmitEmpty;AlphaDashDot;MaxSize(30)" locale:"install.admin_name"`
AdminPasswd string `binding:"OmitEmpty;MaxSize(255)" locale:"install.admin_password"`
AdminConfirmPasswd string
AdminEmail string `binding:"OmitEmpty;Email;MaxSize(50)" locale:"install.admin_email"`
AdminEmail string `binding:"OmitEmpty;MinSize(3);MaxSize(254);Include(@)" locale:"install.admin_email"`
}
func (f *InstallForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {

View File

@@ -32,9 +32,9 @@ import (
"sync"
"time"
"github.com/issue9/identicon"
"github.com/nfnt/resize"
"github.com/gogits/gogs/modules/identicon"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
)

View File

@@ -8,11 +8,6 @@ const DOC_URL = "https://github.com/gogits/go-gogs-client/wiki"
type (
TplName string
ApiJsonErr struct {
Message string `json:"message"`
DocUrl string `json:"url"`
}
)
var GoGetMetas = make(map[string]bool)

View File

@@ -100,11 +100,20 @@ func (options *CustomRender) Link(out *bytes.Buffer, link []byte, title []byte,
}
func (options *CustomRender) Image(out *bytes.Buffer, link []byte, title []byte, alt []byte) {
prefix := strings.Replace(options.urlPrefix, "/src/", "/raw/", 1)
if len(link) > 0 && !isLink(link) {
link = []byte(path.Join(strings.Replace(options.urlPrefix, "/src/", "/raw/", 1), string(link)))
if link[0] != '/' {
prefix += "/"
}
link = []byte(prefix + string(link))
}
fmt.Println(2, string(link))
out.WriteString(`<a href="`)
out.Write(link)
out.WriteString(`">`)
options.Renderer.Image(out, link, title, alt)
out.WriteString("</a>")
}
var (

View File

@@ -59,8 +59,8 @@ func ShortSha(sha1 string) string {
func DetectEncoding(content []byte) (string, error) {
detector := chardet.NewTextDetector()
result, err := detector.DetectBest(content)
if result.Charset != "UTF-8" && len(setting.AnsiCharset) > 0 {
return setting.AnsiCharset, err
if result.Charset != "UTF-8" && len(setting.Repository.AnsiCharset) > 0 {
return setting.Repository.AnsiCharset, err
}
return result.Charset, err
}
@@ -263,7 +263,7 @@ func ActionContent2Commits(act Actioner) *PushCommits {
func DiffTypeToStr(diffType int) string {
diffTypes := map[int]string{
1: "add", 2: "modify", 3: "del",
1: "add", 2: "modify", 3: "del", 4: "rename",
}
return diffTypes[diffType]
}

File diff suppressed because one or more lines are too long

View File

@@ -18,7 +18,7 @@ type Blob struct {
}
func (b *Blob) Data() (io.Reader, error) {
stdout, stderr, err := com.ExecCmdDirBytes(b.repo.Path, "git", "show", b.Id.String())
stdout, stderr, err := com.ExecCmdDirBytes(b.repo.Path, "git", "show", b.ID.String())
if err != nil {
return nil, errors.New(string(stderr))
}

View File

@@ -14,7 +14,7 @@ import (
// Commit represents a git commit.
type Commit struct {
Tree
Id sha1 // The id of this commit object
ID sha1 // The id of this commit object
Author *Signature
Committer *Signature
CommitMessage string
@@ -35,7 +35,7 @@ func (c *Commit) Summary() string {
// Return oid of the parent number n (0-based index). Return nil if no such parent exists.
func (c *Commit) ParentId(n int) (id sha1, err error) {
if n >= len(c.parents) {
err = IdNotExist
err = IDNotExist
return
}
return c.parents[n], nil
@@ -61,7 +61,7 @@ func (c *Commit) ParentCount() int {
}
func (c *Commit) CommitsBefore() (*list.List, error) {
return c.repo.getCommitsBefore(c.Id)
return c.repo.getCommitsBefore(c.ID)
}
func (c *Commit) CommitsBeforeUntil(commitId string) (*list.List, error) {
@@ -73,19 +73,19 @@ func (c *Commit) CommitsBeforeUntil(commitId string) (*list.List, error) {
}
func (c *Commit) CommitsCount() (int, error) {
return c.repo.commitsCount(c.Id)
return c.repo.commitsCount(c.ID)
}
func (c *Commit) SearchCommits(keyword string) (*list.List, error) {
return c.repo.searchCommits(c.Id, keyword)
return c.repo.searchCommits(c.ID, keyword)
}
func (c *Commit) CommitsByRange(page int) (*list.List, error) {
return c.repo.commitsByRange(c.Id, page)
return c.repo.commitsByRange(c.ID, page)
}
func (c *Commit) GetCommitOfRelPath(relPath string) (*Commit, error) {
return c.repo.getCommitOfRelPath(c.Id, relPath)
return c.repo.getCommitOfRelPath(c.ID, relPath)
}
func (c *Commit) GetSubModule(entryname string) (*SubModule, error) {

View File

@@ -28,7 +28,7 @@ func (c *Commit) CreateArchive(path string, archiveType ArchiveType) error {
return fmt.Errorf("unknown format: %v", archiveType)
}
_, stderr, err := com.ExecCmdDir(c.repo.Path, "git", "archive", "--format="+format, "-o", path, c.Id.String())
_, stderr, err := com.ExecCmdDir(c.repo.Path, "git", "archive", "--format="+format, "-o", path, c.ID.String())
if err != nil {
return fmt.Errorf("%s", stderr)
}

View File

@@ -70,7 +70,7 @@ l:
if err != nil {
return nil, err
}
commit.Tree.Id = id
commit.Tree.ID = id
case "parent":
// A commit can have one or more parents
oid, err := NewIdFromString(string(line[spacepos+1:]))
@@ -111,9 +111,9 @@ func (repo *Repository) getCommit(id sha1) (*Commit, error) {
repo.commitCache = make(map[sha1]*Commit, 10)
}
data, bytErr, err := com.ExecCmdDirBytes(repo.Path, "git", "cat-file", "-p", id.String())
data, stderr, err := com.ExecCmdDirBytes(repo.Path, "git", "cat-file", "-p", id.String())
if err != nil {
return nil, errors.New(err.Error() + ": " + string(bytErr))
return nil, concatenateError(err, string(stderr))
}
commit, err := parseCommitData(data)
@@ -121,7 +121,7 @@ func (repo *Repository) getCommit(id sha1) (*Commit, error) {
return nil, err
}
commit.repo = repo
commit.Id = id
commit.ID = id
repo.commitCache[id] = commit
return commit, nil
@@ -211,7 +211,7 @@ func (repo *Repository) CommitsBetween(last *Commit, before *Commit) (*list.List
var err error
cur := last
for {
if cur.Id.Equal(before.Id) {
if cur.ID.Equal(before.ID) {
break
}
l.PushBack(cur)
@@ -229,7 +229,7 @@ func (repo *Repository) CommitsBetween(last *Commit, before *Commit) (*list.List
func (repo *Repository) commitsBefore(lock *sync.Mutex, l *list.List, parent *list.Element, id sha1, limit int) error {
commit, err := repo.getCommit(id)
if err != nil {
return err
return fmt.Errorf("getCommit: %v", err)
}
var e *list.Element
@@ -240,7 +240,7 @@ func (repo *Repository) commitsBefore(lock *sync.Mutex, l *list.List, parent *li
for {
if in == nil {
break
} else if in.Value.(*Commit).Id.Equal(commit.Id) {
} else if in.Value.(*Commit).ID.Equal(commit.ID) {
return nil
} else {
if in.Next() == nil {
@@ -301,8 +301,7 @@ func (repo *Repository) CommitsByFileAndRange(branch, file string, page int) (*l
func (repo *Repository) getCommitsBefore(id sha1) (*list.List, error) {
l := list.New()
lock := new(sync.Mutex)
err := repo.commitsBefore(lock, l, nil, id, 0)
return l, err
return l, repo.commitsBefore(lock, l, nil, id, 0)
}
func (repo *Repository) searchCommits(id sha1, keyword string) (*list.List, error) {

View File

@@ -20,31 +20,55 @@ type PullRequestInfo struct {
NumFiles int
}
// GetMergeBase checks and returns merge base of two branches.
func (repo *Repository) GetMergeBase(remoteBranch, headBranch string) (string, error) {
// Get merge base commit.
stdout, stderr, err := com.ExecCmdDir(repo.Path, "git", "merge-base", remoteBranch, headBranch)
if err != nil {
return "", fmt.Errorf("get merge base: %v", concatenateError(err, stderr))
}
return strings.TrimSpace(stdout), nil
}
// AddRemote adds a remote to repository.
func (repo *Repository) AddRemote(name, path string) error {
_, stderr, err := com.ExecCmdDir(repo.Path, "git", "remote", "add", "-f", name, path)
if err != nil {
return fmt.Errorf("add remote(%s - %s): %v", name, path, concatenateError(err, stderr))
}
return nil
}
// RemoveRemote removes a remote from repository.
func (repo *Repository) RemoveRemote(name string) error {
_, stderr, err := com.ExecCmdDir(repo.Path, "git", "remote", "remove", name)
if err != nil {
return fmt.Errorf("remove remote(%s): %v", name, concatenateError(err, stderr))
}
return nil
}
// GetPullRequestInfo generates and returns pull request information
// between base and head branches of repositories.
func (repo *Repository) GetPullRequestInfo(basePath, baseBranch, headBranch string) (*PullRequestInfo, error) {
func (repo *Repository) GetPullRequestInfo(basePath, baseBranch, headBranch string) (_ *PullRequestInfo, err error) {
// Add a temporary remote.
tmpRemote := com.ToStr(time.Now().UnixNano())
_, stderr, err := com.ExecCmdDir(repo.Path, "git", "remote", "add", "-f", tmpRemote, basePath)
if err != nil {
return nil, fmt.Errorf("add base as remote: %v", concatenateError(err, stderr))
if err = repo.AddRemote(tmpRemote, basePath); err != nil {
return nil, fmt.Errorf("AddRemote: %v", err)
}
defer func() {
com.ExecCmdDir(repo.Path, "git", "remote", "remove", tmpRemote)
repo.RemoveRemote(tmpRemote)
}()
prInfo := new(PullRequestInfo)
var stdout string
remoteBranch := "remotes/" + tmpRemote + "/" + baseBranch
// Get merge base commit.
stdout, stderr, err = com.ExecCmdDir(repo.Path, "git", "merge-base", remoteBranch, headBranch)
if err != nil {
return nil, fmt.Errorf("get merge base: %v", concatenateError(err, stderr))
}
prInfo.MergeBase = strings.TrimSpace(stdout)
stdout, stderr, err = com.ExecCmdDir(repo.Path, "git", "log", remoteBranch+"..."+headBranch, prettyLogFormat)
prInfo := new(PullRequestInfo)
prInfo.MergeBase, err = repo.GetMergeBase(remoteBranch, headBranch)
if err != nil {
return nil, fmt.Errorf("GetMergeBase: %v", err)
}
stdout, stderr, err := com.ExecCmdDir(repo.Path, "git", "log", prInfo.MergeBase+"..."+headBranch, prettyLogFormat)
if err != nil {
return nil, fmt.Errorf("list diff logs: %v", concatenateError(err, stderr))
}
@@ -64,20 +88,8 @@ func (repo *Repository) GetPullRequestInfo(basePath, baseBranch, headBranch stri
}
// GetPatch generates and returns patch data between given branches.
func (repo *Repository) GetPatch(basePath, baseBranch, headBranch string) ([]byte, error) {
// Add a temporary remote.
tmpRemote := com.ToStr(time.Now().UnixNano())
_, stderr, err := com.ExecCmdDirBytes(repo.Path, "git", "remote", "add", "-f", tmpRemote, basePath)
if err != nil {
return nil, fmt.Errorf("add base as remote: %v", concatenateError(err, string(stderr)))
}
defer func() {
com.ExecCmdDir(repo.Path, "git", "remote", "remove", tmpRemote)
}()
var stdout []byte
remoteBranch := "remotes/" + tmpRemote + "/" + baseBranch
stdout, stderr, err = com.ExecCmdDirBytes(repo.Path, "git", "diff", "-p", remoteBranch, headBranch)
func (repo *Repository) GetPatch(mergeBase, headBranch string) ([]byte, error) {
stdout, stderr, err := com.ExecCmdDirBytes(repo.Path, "git", "diff", "-p", mergeBase, headBranch)
if err != nil {
return nil, concatenateError(err, string(stderr))
}

View File

@@ -69,7 +69,7 @@ func (repo *Repository) getTag(id sha1) (*Tag, error) {
// Tag is a commit.
if ObjectType(tp) == COMMIT {
tag := &Tag{
Id: id,
ID: id,
Object: id,
Type: string(COMMIT),
repo: repo,
@@ -89,7 +89,7 @@ func (repo *Repository) getTag(id sha1) (*Tag, error) {
return nil, err
}
tag.Id = id
tag.ID = id
tag.repo = repo
repo.tagCache[id] = tag

View File

@@ -12,7 +12,7 @@ import (
)
var (
IdNotExist = errors.New("sha1 id not exist")
IDNotExist = errors.New("sha1 ID does not exist")
)
type sha1 [20]byte

View File

@@ -26,23 +26,23 @@ type Signature struct {
// FIXME: include timezone for timestamp!
func newSignatureFromCommitline(line []byte) (_ *Signature, err error) {
sig := new(Signature)
emailstart := bytes.IndexByte(line, '<')
sig.Name = string(line[:emailstart-1])
emailstop := bytes.IndexByte(line, '>')
sig.Email = string(line[emailstart+1 : emailstop])
emailStart := bytes.IndexByte(line, '<')
sig.Name = string(line[:emailStart-1])
emailEnd := bytes.IndexByte(line, '>')
sig.Email = string(line[emailStart+1 : emailEnd])
// Check date format.
firstChar := line[emailstop+2]
firstChar := line[emailEnd+2]
if firstChar >= 48 && firstChar <= 57 {
timestop := bytes.IndexByte(line[emailstop+2:], ' ')
timestring := string(line[emailstop+2 : emailstop+2+timestop])
timestop := bytes.IndexByte(line[emailEnd+2:], ' ')
timestring := string(line[emailEnd+2 : emailEnd+2+timestop])
seconds, err := strconv.ParseInt(timestring, 10, 64)
if err != nil {
return nil, err
}
sig.When = time.Unix(seconds, 0)
} else {
sig.When, err = time.Parse("Mon Jan _2 15:04:05 2006 -0700", string(line[emailstop+2:]))
sig.When, err = time.Parse("Mon Jan _2 15:04:05 2006 -0700", string(line[emailEnd+2:]))
if err != nil {
return nil, err
}

View File

@@ -0,0 +1,20 @@
// 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 git
import (
"testing"
. "github.com/smartystreets/goconvey/convey"
)
func Test_newSignatureFromCommitline(t *testing.T) {
Convey("Parse signature from commit line", t, func() {
line := "Intern <intern@macbook-intern.(none)> 1445412825 +0200"
sig, err := newSignatureFromCommitline([]byte(line))
So(err, ShouldBeNil)
So(sig, ShouldNotBeNil)
})
}

View File

@@ -6,6 +6,8 @@ package git
import (
"strings"
"github.com/gogits/gogs/modules/setting"
)
type SubModule struct {
@@ -51,8 +53,14 @@ func (sf *SubModuleFile) RefUrl() string {
i := strings.Index(url, "@")
j := strings.LastIndex(url, ":")
if i > -1 && j > -1 {
return "http://" + url[i+1:j] + "/" + url[j+1:]
// fix problem with reverse proxy works only with local server
if strings.Contains(setting.AppUrl, url[i+1:j]) {
return setting.AppUrl + url[j+1:]
} else {
return "http://" + url[i+1:j] + "/" + url[j+1:]
}
}
return url
}

View File

@@ -11,7 +11,7 @@ import (
// Tag represents a Git tag.
type Tag struct {
Name string
Id sha1
ID sha1
repo *Repository
Object sha1 // The id of this commit object
Type string

View File

@@ -18,7 +18,7 @@ var (
// A tree is a flat directory listing.
type Tree struct {
Id sha1
ID sha1
repo *Repository
// parent tree
@@ -66,7 +66,7 @@ func parseTreeData(tree *Tree, data []byte) ([]*TreeEntry, error) {
if err != nil {
return nil, err
}
entry.Id = id
entry.ID = id
pos += step + 1 // Skip half of sha1.
step = bytes.IndexByte(data[pos:], '\n')
@@ -100,7 +100,7 @@ func (t *Tree) SubTree(rpath string) (*Tree, error) {
return nil, err
}
g, err = t.repo.getTree(te.Id)
g, err = t.repo.getTree(te.ID)
if err != nil {
return nil, err
}
@@ -117,7 +117,7 @@ func (t *Tree) ListEntries(relpath string) (Entries, error) {
t.entriesParsed = true
stdout, stderr, err := com.ExecCmdDirBytes(t.repo.Path,
"git", "ls-tree", t.Id.String())
"git", "ls-tree", t.ID.String())
if err != nil {
if strings.Contains(err.Error(), "exit status 128") {
return nil, errors.New(strings.TrimSpace(string(stderr)))
@@ -130,7 +130,7 @@ func (t *Tree) ListEntries(relpath string) (Entries, error) {
func NewTree(repo *Repository, id sha1) *Tree {
tree := new(Tree)
tree.Id = id
tree.ID = id
tree.repo = repo
return tree
}

View File

@@ -13,7 +13,7 @@ import (
func (t *Tree) GetTreeEntryByPath(relpath string) (*TreeEntry, error) {
if len(relpath) == 0 {
return &TreeEntry{
Id: t.Id,
ID: t.ID,
Type: TREE,
mode: ModeTree,
}, nil

View File

@@ -24,7 +24,7 @@ const (
)
type TreeEntry struct {
Id sha1
ID sha1
Type ObjectType
mode EntryMode
@@ -51,7 +51,7 @@ func (te *TreeEntry) Size() int64 {
return te.size
}
stdout, _, err := com.ExecCmdDir(te.ptree.repo.Path, "git", "cat-file", "-s", te.Id.String())
stdout, _, err := com.ExecCmdDir(te.ptree.repo.Path, "git", "cat-file", "-s", te.ID.String())
if err != nil {
return 0
}

View File

@@ -6,6 +6,7 @@ package git
import (
"errors"
"fmt"
"strings"
"github.com/Unknwon/com"
@@ -78,6 +79,10 @@ func (v *Version) AtLeast(that *Version) bool {
return v.Compare(that) >= 0
}
func (v *Version) String() string {
return fmt.Sprintf("%d.%d.%d", v.Major, v.Minor, v.Patch)
}
// GetVersion returns current Git version installed.
func GetVersion() (*Version, error) {
if gitVer != nil {

View File

@@ -50,7 +50,7 @@ func SetDefaultSetting(setting Settings) {
}
// return *Request with specific method
func newBeegoRequest(url, method string) *Request {
func newRequest(url, method string) *Request {
var resp http.Response
req := http.Request{
Method: method,
@@ -64,27 +64,27 @@ func newBeegoRequest(url, method string) *Request {
// Get returns *Request with GET method.
func Get(url string) *Request {
return newBeegoRequest(url, "GET")
return newRequest(url, "GET")
}
// Post returns *Request with POST method.
func Post(url string) *Request {
return newBeegoRequest(url, "POST")
return newRequest(url, "POST")
}
// Put returns *Request with PUT method.
func Put(url string) *Request {
return newBeegoRequest(url, "PUT")
return newRequest(url, "PUT")
}
// Delete returns *Request DELETE method.
func Delete(url string) *Request {
return newBeegoRequest(url, "DELETE")
return newRequest(url, "DELETE")
}
// Head returns *Request with HEAD method.
func Head(url string) *Request {
return newBeegoRequest(url, "HEAD")
return newRequest(url, "HEAD")
}
type Settings struct {

View File

@@ -1,405 +0,0 @@
// Copyright 2015 by caixw, All rights reserved
// Use of this source code is governed by a MIT
// license that can be found in the LICENSE file.
package identicon
import (
"image"
)
var (
// 可以出现在中间的方块,一般为了美观,都是对称图像。
centerBlocks = []blockFunc{b0, b1, b2, b3}
// 所有方块
blocks = []blockFunc{b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16}
)
// 所有block函数的类型
type blockFunc func(img *image.Paletted, x, y, size float64, angle int)
// 将多边形points旋转angle个角度然后输出到img上起点为x,y坐标
func drawBlock(img *image.Paletted, x, y, size float64, angle int, points []float64) {
if angle > 0 { // 0角度不需要转换
// 中心坐标与x,y的距离方便下面指定中心坐标(x+m,y+m)
// 0.5的偏移值不能少,否则坐靠右,非正中央
m := size/2 - 0.5
rotate(points, x+m, y+m, angle)
}
for i := x; i < x+size; i++ {
for j := y; j < y+size; j++ {
if pointInPolygon(i, j, points) {
img.SetColorIndex(int(i), int(j), 1)
}
}
}
}
// 全空白
//
// --------
// | |
// | |
// | |
// --------
func b0(img *image.Paletted, x, y, size float64, angle int) {
}
// 全填充正方形
//
// --------
// |######|
// |######|
// |######|
// --------
func b1(img *image.Paletted, x, y, size float64, angle int) {
isize := int(size)
ix := int(x)
iy := int(y)
for i := ix + 1; i < ix+isize; i++ {
for j := iy + 1; j < iy+isize; j++ {
img.SetColorIndex(i, j, 1)
}
}
}
// 中间小方块
// ----------
// | |
// | #### |
// | #### |
// | |
// ----------
func b2(img *image.Paletted, x, y, size float64, angle int) {
l := size / 4
x = x + l
y = y + l
for i := x; i < x+2*l; i++ {
for j := y; j < y+2*l; j++ {
img.SetColorIndex(int(i), int(j), 1)
}
}
}
// 菱形
//
// ---------
// | # |
// | ### |
// | ##### |
// |#######|
// | ##### |
// | ### |
// | # |
// ---------
func b3(img *image.Paletted, x, y, size float64, angle int) {
m := size / 2
points := []float64{}
drawBlock(img, x, y, size, 0, append(points,
x+m, y,
x+size, y+m,
x+m, y+size,
x, y+m,
x+m, y,
))
}
// b4
//
// -------
// |#####|
// |#### |
// |### |
// |## |
// |# |
// |------
func b4(img *image.Paletted, x, y, size float64, angle int) {
points := []float64{}
drawBlock(img, x, y, size, angle, append(points,
x, y,
x+size, y,
x, y+size,
x, y,
))
}
// b5
//
// ---------
// | # |
// | ### |
// | ##### |
// |#######|
func b5(img *image.Paletted, x, y, size float64, angle int) {
points := []float64{}
m := size / 2
drawBlock(img, x, y, size, angle, append(points,
x+m, y,
x+size,
y+size,
x, y+size,
x+m, y,
))
}
// b6 矩形
//
// --------
// |### |
// |### |
// |### |
// --------
func b6(img *image.Paletted, x, y, size float64, angle int) {
points := []float64{}
m := size / 2
drawBlock(img, x, y, size, angle, append(points,
x, y,
x+m, y,
x+m, y+size,
x, y+size,
x, y,
))
}
// b7 斜放的锥形
//
// ---------
// | # |
// | ## |
// | #####|
// | ####|
// |--------
func b7(img *image.Paletted, x, y, size float64, angle int) {
points := []float64{}
m := size / 2
drawBlock(img, x, y, size, angle, append(points,
x, y,
x+size, y+m,
x+size, y+size,
x+m, y+size,
x, y,
))
}
// b8 三个堆叠的三角形
//
// -----------
// | # |
// | ### |
// | ##### |
// | # # |
// | ### ### |
// |#########|
// -----------
func b8(img *image.Paletted, x, y, size float64, angle int) {
points := []float64{}
m := size / 2
mm := m / 2
// 顶部三角形
drawBlock(img, x, y, size, angle, append(points,
x+m, y,
x+3*mm, y+m,
x+mm, y+m,
x+m, y,
))
// 底下左边
drawBlock(img, x, y, size, angle, append(points[:0],
x+mm, y+m,
x+m, y+size,
x, y+size,
x+mm, y+m,
))
// 底下右边
drawBlock(img, x, y, size, angle, append(points[:0],
x+3*mm, y+m,
x+size, y+size,
x+m, y+size,
x+3*mm, y+m,
))
}
// b9 斜靠的三角形
//
// ---------
// |# |
// | #### |
// | #####|
// | #### |
// | # |
// ---------
func b9(img *image.Paletted, x, y, size float64, angle int) {
points := []float64{}
m := size / 2
drawBlock(img, x, y, size, angle, append(points,
x, y,
x+size, y+m,
x+m, y+size,
x, y,
))
}
// b10
//
// ----------
// | ####|
// | ### |
// | ## |
// | # |
// |#### |
// |### |
// |## |
// |# |
// ----------
func b10(img *image.Paletted, x, y, size float64, angle int) {
points := []float64{}
m := size / 2
drawBlock(img, x, y, size, angle, append(points,
x+m, y,
x+size, y,
x+m, y+m,
x+m, y,
))
drawBlock(img, x, y, size, angle, append(points[:0],
x, y+m,
x+m, y+m,
x, y+size,
x, y+m,
))
}
// b11 左上角1/4大小的方块
//
// ----------
// |#### |
// |#### |
// |#### |
// | |
// | |
// ----------
func b11(img *image.Paletted, x, y, size float64, angle int) {
points := []float64{}
m := size / 2
drawBlock(img, x, y, size, angle, append(points,
x, y,
x+m, y,
x+m, y+m,
x, y+m,
x, y,
))
}
// b12
//
// -----------
// | |
// | |
// |#########|
// | ##### |
// | # |
// -----------
func b12(img *image.Paletted, x, y, size float64, angle int) {
points := []float64{}
m := size / 2
drawBlock(img, x, y, size, angle, append(points,
x, y+m,
x+size, y+m,
x+m, y+size,
x, y+m,
))
}
// b13
//
// -----------
// | |
// | |
// | # |
// | ##### |
// |#########|
// -----------
func b13(img *image.Paletted, x, y, size float64, angle int) {
points := []float64{}
m := size / 2
drawBlock(img, x, y, size, angle, append(points,
x+m, y+m,
x+size, y+size,
x, y+size,
x+m, y+m,
))
}
// b14
//
// ---------
// | # |
// | ### |
// |#### |
// | |
// | |
// ---------
func b14(img *image.Paletted, x, y, size float64, angle int) {
points := []float64{}
m := size / 2
drawBlock(img, x, y, size, angle, append(points,
x+m, y,
x+m, y+m,
x, y+m,
x+m, y,
))
}
// b15
//
// ----------
// |##### |
// |### |
// |# |
// | |
// | |
// ----------
func b15(img *image.Paletted, x, y, size float64, angle int) {
points := []float64{}
m := size / 2
drawBlock(img, x, y, size, angle, append(points,
x, y,
x+m, y,
x, y+m,
x, y,
))
}
// b16
//
// ---------
// | # |
// | ##### |
// |#######|
// | # |
// | ##### |
// |#######|
// ---------
func b16(img *image.Paletted, x, y, size float64, angle int) {
points := []float64{}
m := size / 2
drawBlock(img, x, y, size, angle, append(points,
x+m, y,
x+size, y+m,
x, y+m,
x+m, y,
))
drawBlock(img, x, y, size, angle, append(points[:0],
x+m, y+m,
x+size, y+size,
x, y+size,
x+m, y+m,
))
}

View File

@@ -1,39 +0,0 @@
// Copyright 2015 by caixw, All rights reserved.
// Use of this source code is governed by a MIT
// license that can be found in the LICENSE file.
// 一个基于hash值生成随机图像的包。
//
// 关于identicon并没有统一的标准一般用于在用户注册时
// 取用户的邮箱或是访问IP等数据(也可以是其它任何数据)
// 进行hash运算之后根据hash数据产生一张图像
// 这样即可以为用户产生一张独特的头像,又不会泄漏用户的隐藏。
//
// 在identicon中把图像分成以下九个部分:
// -------------
// | 1 | 2 | 3 |
// -------------
// | 4 | 5 | 6 |
// -------------
// | 7 | 8 | 9 |
// -------------
// 其中1、3、9、7为不同角度(依次增加90度)的同一张图片,
// 2、6、8、4也是如此这样可以保持图像是对称的比较美观。
// 5则单独使用一张图片。
//
// // 根据用户访问的IP为其生成一张头像
// img, _ := identicon.Make(128, color.NRGBA{},color.NRGBA{}, []byte("192.168.1.1"))
// fi, _ := os.Create("/tmp/u1.png")
// png.Encode(fi, img)
// fi.Close()
//
// // 或者
// ii, _ := identicon.New(128, color.NRGBA{}, color.NRGBA{}, color.NRGBA{})
// img := ii.Make([]byte("192.168.1.1"))
// img = ii.Make([]byte("192.168.1.2"))
//
// NOTE: go test 会在当前目录的testdata文件夹下产生大量的随机图片。
// 要运行测试,必须保证该文件夹是存在的,且有相应的写入权限。
package identicon
const Version = "0.2.6.150603"

View File

@@ -1,147 +0,0 @@
// Copyright 2015 by caixw, All rights reserved.
// Use of this source code is governed by a MIT
// license that can be found in the LICENSE file.
package identicon
import (
"crypto/md5"
"fmt"
"image"
"image/color"
)
const (
minSize = 16 // 图片的最小尺寸
maxForeColors = 32 // 在New()函数中可以指定的最大颜色数量
)
// Identicon 用于产生统一尺寸的头像。
// 可以根据用户提供的数据,经过一定的算法,自动产生相应的图案和颜色。
type Identicon struct {
foreColors []color.Color
backColor color.Color
size int
rect image.Rectangle
}
// 声明一个Identicon实例。
// size表示整个头像的大小。
// back表示前景色。
// fore表示所有可能的前景色会为每个图像随机挑选一个作为其前景色。
// NOTE:前景色不要与背景色太相近。
func New(size int, back color.Color, fore ...color.Color) (*Identicon, error) {
if len(fore) == 0 || len(fore) > maxForeColors {
return nil, fmt.Errorf("前景色数量必须介于[1]~[%v]之间,当前为[%v]", maxForeColors, len(fore))
}
if size < minSize {
return nil, fmt.Errorf("参数size的值(%v)不能小于%v", size, minSize)
}
return &Identicon{
foreColors: fore,
backColor: back,
size: size,
// 画布坐标从0开始其长度应该是size-1
rect: image.Rect(0, 0, size, size),
}, nil
}
// 根据data数据产生一张唯一性的头像图片。
func (i *Identicon) Make(data []byte) image.Image {
h := md5.New()
h.Write(data)
sum := h.Sum(nil)
// 第一个方块
index := int(sum[0]+sum[1]+sum[2]+sum[3]) % len(blocks)
b1 := blocks[index]
// 第二个方块
index = int(sum[4]+sum[5]+sum[6]+sum[7]) % len(blocks)
b2 := blocks[index]
// 中间方块
index = int(sum[8]+sum[9]+sum[10]+sum[11]) % len(centerBlocks)
c := centerBlocks[index]
// 旋转角度
angle := int(sum[12]+sum[13]+sum[14]) % 4
// 根据最后一个字段,获取前景颜色
index = int(sum[15]) % len(i.foreColors)
p := image.NewPaletted(i.rect, []color.Color{i.backColor, i.foreColors[index]})
drawBlocks(p, i.size, c, b1, b2, angle)
return p
}
// 根据data数据产生一张唯一性的头像图片。
// size 头像的大小。
// back, fore头像的背景和前景色。
func Make(size int, back, fore color.Color, data []byte) (image.Image, error) {
if size < minSize {
return nil, fmt.Errorf("参数size的值(%v)不能小于%v", size, minSize)
}
h := md5.New()
h.Write(data)
sum := h.Sum(nil)
// 第一个方块
index := int(sum[0]+sum[1]+sum[2]+sum[3]) % len(blocks)
b1 := blocks[index]
// 第二个方块
index = int(sum[4]+sum[5]+sum[6]+sum[7]) % len(blocks)
b2 := blocks[index]
// 中间方块
index = int(sum[8]+sum[9]+sum[10]+sum[11]) % len(centerBlocks)
c := centerBlocks[index]
// 旋转角度
angle := int(sum[12]+sum[13]+sum[14]+sum[15]) % 4
// 画布坐标从0开始其长度应该是size-1
p := image.NewPaletted(image.Rect(0, 0, size, size), []color.Color{back, fore})
drawBlocks(p, size, c, b1, b2, angle)
return p, nil
}
// 将九个方格都填上内容。
// p为画板。
// c为中间方格的填充函数。
// b1,b2为边上8格的填充函数。
// angle为b1,b2的起始旋转角度。
func drawBlocks(p *image.Paletted, size int, c, b1, b2 blockFunc, angle int) {
// 每个格子的长宽。先转换成float再计算
blockSize := float64(size) / 3
twoBlockSize := 2 * blockSize
incr := func() { // 增加angle的值但不会大于3
angle++
if angle > 3 {
angle = 0
}
}
c(p, blockSize, blockSize, blockSize, 0)
b1(p, 0, 0, blockSize, angle)
b2(p, blockSize, 0, blockSize, angle)
incr()
b1(p, twoBlockSize, 0, blockSize, angle)
b2(p, twoBlockSize, blockSize, blockSize, angle)
incr()
b1(p, twoBlockSize, twoBlockSize, blockSize, angle)
b2(p, blockSize, twoBlockSize, blockSize, angle)
incr()
b1(p, 0, twoBlockSize, blockSize, angle)
b2(p, 0, blockSize, blockSize, angle)
}

View File

@@ -1,114 +0,0 @@
// Copyright 2015 by caixw, All rights reserved.
// Use of this source code is governed by a MIT
// license that can be found in the LICENSE file.
package identicon
import (
"image"
"image/color"
"image/png"
"os"
"strconv"
"testing"
"github.com/issue9/assert"
)
var (
back = color.RGBA{255, 0, 0, 100}
fore = color.RGBA{0, 255, 255, 100}
fores = []color.Color{color.Black, color.RGBA{200, 2, 5, 100}, color.RGBA{2, 200, 5, 100}}
size = 128
)
// 依次画出各个网络的图像。
func TestBlocks(t *testing.T) {
p := []color.Color{back, fore}
a := assert.New(t)
for k, v := range blocks {
img := image.NewPaletted(image.Rect(0, 0, size*4, size), p) // 横向4张图片大小
for i := 0; i < 4; i++ {
v(img, float64(i*size), 0, float64(size), i)
}
fi, err := os.Create("./testdata/block-" + strconv.Itoa(k) + ".png")
a.NotError(err).NotNil(fi)
a.NotError(png.Encode(fi, img))
a.NotError(fi.Close()) // 关闭文件
}
}
// 产生一组测试图片
func TestDrawBlocks(t *testing.T) {
a := assert.New(t)
for i := 0; i < 20; i++ {
p := image.NewPaletted(image.Rect(0, 0, size, size), []color.Color{back, fore})
c := (i + 1) % len(centerBlocks)
b1 := (i + 2) % len(blocks)
b2 := (i + 3) % len(blocks)
drawBlocks(p, size, centerBlocks[c], blocks[b1], blocks[b2], 0)
fi, err := os.Create("./testdata/draw-" + strconv.Itoa(i) + ".png")
a.NotError(err).NotNil(fi)
a.NotError(png.Encode(fi, p))
a.NotError(fi.Close()) // 关闭文件
}
}
func TestMake(t *testing.T) {
a := assert.New(t)
for i := 0; i < 20; i++ {
img, err := Make(size, back, fore, []byte("make-"+strconv.Itoa(i)))
a.NotError(err).NotNil(img)
fi, err := os.Create("./testdata/make-" + strconv.Itoa(i) + ".png")
a.NotError(err).NotNil(fi)
a.NotError(png.Encode(fi, img))
a.NotError(fi.Close()) // 关闭文件
}
}
func TestIdenticon(t *testing.T) {
a := assert.New(t)
ii, err := New(size, back, fores...)
a.NotError(err).NotNil(ii)
for i := 0; i < 20; i++ {
img := ii.Make([]byte("identicon-" + strconv.Itoa(i)))
a.NotNil(img)
fi, err := os.Create("./testdata/identicon-" + strconv.Itoa(i) + ".png")
a.NotError(err).NotNil(fi)
a.NotError(png.Encode(fi, img))
a.NotError(fi.Close()) // 关闭文件
}
}
// BenchmarkMake 5000 229378 ns/op
func BenchmarkMake(b *testing.B) {
a := assert.New(b)
for i := 0; i < b.N; i++ {
img, err := Make(size, back, fore, []byte("Make"))
a.NotError(err).NotNil(img)
}
}
// BenchmarkIdenticon_Make 10000 222127 ns/op
func BenchmarkIdenticon_Make(b *testing.B) {
a := assert.New(b)
ii, err := New(size, back, fores...)
a.NotError(err).NotNil(ii)
for i := 0; i < b.N; i++ {
img := ii.Make([]byte("Make"))
a.NotNil(img)
}
}

View File

@@ -1,69 +0,0 @@
// Copyright 2015 by caixw, All rights reserved.
// Use of this source code is governed by a MIT
// license that can be found in the LICENSE file.
package identicon
var (
// 4个元素分别表示cos(0),cos(90),cos(180),cos(270)
cos = []float64{1, 0, -1, 0}
// 4个元素分别表示sin(0),sin(90),sin(180),sin(270)
sin = []float64{0, 1, 0, -1}
)
// 将points中的所有点以x,y为原点旋转angle个角度。
// angle取值只能是[0,1,2,3],分别表示[090180270]
func rotate(points []float64, x, y float64, angle int) {
if angle > 3 {
panic("rotate:参数angle必须0,1,2,3三值之一")
}
for i := 0; i < len(points); i += 2 {
px := points[i] - x
py := points[i+1] - y
points[i] = px*cos[angle] - py*sin[angle] + x
points[i+1] = px*sin[angle] + py*cos[angle] + y
}
}
// 判断某个点是否在多边形之内,不包含构成多边形的线和点
// x,y 需要判断的点坐标
// points 组成多边形的所顶点,每两个元素表示一点顶点,其中最后一个顶点必须与第一个顶点相同。
func pointInPolygon(x float64, y float64, points []float64) bool {
if len(points) < 8 { // 只有2个以上的点才能组成闭合多边形
return false
}
// 大致算法如下:
// 把整个平面以给定的测试点为原点分两部分:
// - y>0包含(x>0 && y==0)
// - y<0包含(x<0 && y==0)
// 依次扫描每一个点当该点与前一个点处于不同部分时即一个在y>0区一个在y<0区
// 则判断从前一点到当前点是顺时针还是逆时针以给定的测试点为原点如果是顺时针r++否则r--。
// 结果为2==abs(r)。
r := 0
x1, y1 := points[0], points[1]
prev := (y1 > y) || ((x1 > x) && (y1 == y))
for i := 2; i < len(points); i += 2 {
x2, y2 := points[i], points[i+1]
curr := (y2 > y) || ((x2 > x) && (y2 == y))
if curr == prev {
x1, y1 = x2, y2
continue
}
mul := (x1-x)*(y2-y) - (x2-x)*(y1-y)
if mul > 0 {
r++
} else if mul < 0 {
r--
}
x1, y1 = x2, y2
prev = curr
}
return r == 2 || r == -2
}

View File

@@ -8,7 +8,7 @@ import (
"fmt"
"path"
"github.com/Unknwon/macaron"
"gopkg.in/macaron.v1"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base"

View File

@@ -8,8 +8,8 @@ import (
"fmt"
"net/url"
"github.com/Unknwon/macaron"
"github.com/macaron-contrib/csrf"
"github.com/go-macaron/csrf"
"gopkg.in/macaron.v1"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/auth"
@@ -95,7 +95,7 @@ func Toggle(options *ToggleOptions) macaron.Handler {
if !ctx.IsSigned {
// Restrict API calls with error message.
if auth.IsAPIPath(ctx.Req.URL.Path) {
ctx.HandleAPI(403, "Only signed in user is allowed to call APIs.")
ctx.APIError(403, "", "Only signed in user is allowed to call APIs.")
return
}

View File

@@ -12,11 +12,11 @@ import (
"strings"
"time"
"github.com/Unknwon/macaron"
"github.com/macaron-contrib/cache"
"github.com/macaron-contrib/csrf"
"github.com/macaron-contrib/i18n"
"github.com/macaron-contrib/session"
"github.com/go-macaron/cache"
"github.com/go-macaron/csrf"
"github.com/go-macaron/i18n"
"github.com/go-macaron/session"
"gopkg.in/macaron.v1"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/auth"
@@ -154,18 +154,25 @@ func (ctx *Context) HandleText(status int, title string) {
if (status/100 == 4) || (status/100 == 5) {
log.Error(4, "%s", title)
}
ctx.RenderData(status, []byte(title))
ctx.PlainText(status, []byte(title))
}
func (ctx *Context) HandleAPI(status int, obj interface{}) {
// APIError logs error with title if status is 500.
func (ctx *Context) APIError(status int, title string, obj interface{}) {
var message string
if err, ok := obj.(error); ok {
message = err.Error()
} else {
message = obj.(string)
}
if status == 500 {
log.Error(4, "%s: %s", title, message)
}
ctx.JSON(status, map[string]string{
"message": message,
"url": base.DOC_URL,
})
}

View File

@@ -5,7 +5,7 @@
package middleware
import (
"github.com/Unknwon/macaron"
"gopkg.in/macaron.v1"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/log"

View File

@@ -7,14 +7,14 @@ package middleware
import (
"fmt"
"net/url"
"path"
"strings"
"github.com/Unknwon/macaron"
"github.com/mcuadros/go-version"
"github.com/mssola/user_agent"
"gopkg.in/macaron.v1"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/git"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
@@ -31,43 +31,43 @@ func ApiRepoAssignment() macaron.Handler {
repoName := ctx.Params(":reponame")
var (
u *models.User
err error
owner *models.User
err error
)
// Check if the user is the same as the repository owner.
if ctx.IsSigned && ctx.User.LowerName == strings.ToLower(userName) {
u = ctx.User
owner = ctx.User
} else {
u, err = models.GetUserByName(userName)
owner, err = models.GetUserByName(userName)
if err != nil {
if models.IsErrUserNotExist(err) {
ctx.Error(404)
} else {
ctx.JSON(500, &base.ApiJsonErr{"GetUserByName: " + err.Error(), base.DOC_URL})
ctx.APIError(500, "GetUserByName", err)
}
return
}
}
ctx.Repo.Owner = u
ctx.Repo.Owner = owner
// Get repository.
repo, err := models.GetRepositoryByName(u.Id, repoName)
repo, err := models.GetRepositoryByName(owner.Id, repoName)
if err != nil {
if models.IsErrRepoNotExist(err) {
ctx.Error(404)
} else {
ctx.JSON(500, &base.ApiJsonErr{"GetRepositoryByName: " + err.Error(), base.DOC_URL})
ctx.APIError(500, "GetRepositoryByName", err)
}
return
} else if err = repo.GetOwner(); err != nil {
ctx.JSON(500, &base.ApiJsonErr{"GetOwner: " + err.Error(), base.DOC_URL})
ctx.APIError(500, "GetOwner", err)
return
}
mode, err := models.AccessLevel(ctx.User, repo)
if err != nil {
ctx.JSON(500, &base.ApiJsonErr{"AccessLevel: " + err.Error(), base.DOC_URL})
ctx.APIError(500, "AccessLevel", err)
return
}
@@ -118,7 +118,7 @@ func RepoRef() macaron.Handler {
ctx.Handle(500, "GetCommitOfBranch", err)
return
}
ctx.Repo.CommitID = ctx.Repo.Commit.Id.String()
ctx.Repo.CommitID = ctx.Repo.Commit.ID.String()
ctx.Repo.IsBranch = true
} else {
@@ -149,7 +149,7 @@ func RepoRef() macaron.Handler {
ctx.Handle(500, "GetCommitOfBranch", err)
return
}
ctx.Repo.CommitID = ctx.Repo.Commit.Id.String()
ctx.Repo.CommitID = ctx.Repo.Commit.ID.String()
} else if ctx.Repo.GitRepo.IsTagExist(refName) {
ctx.Repo.IsTag = true
@@ -158,7 +158,7 @@ func RepoRef() macaron.Handler {
ctx.Handle(500, "GetCommitOfTag", err)
return
}
ctx.Repo.CommitID = ctx.Repo.Commit.Id.String()
ctx.Repo.CommitID = ctx.Repo.Commit.ID.String()
} else if len(refName) == 40 {
ctx.Repo.IsCommit = true
ctx.Repo.CommitID = refName
@@ -235,8 +235,8 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler {
}
var (
u *models.User
err error
owner *models.User
err error
)
userName := ctx.Params(":username")
@@ -248,9 +248,9 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler {
// Check if the user is the same as the repository owner
if ctx.IsSigned && ctx.User.LowerName == strings.ToLower(userName) {
u = ctx.User
owner = ctx.User
} else {
u, err = models.GetUserByName(userName)
owner, err = models.GetUserByName(userName)
if err != nil {
if models.IsErrUserNotExist(err) {
ctx.Handle(404, "GetUserByName", err)
@@ -260,10 +260,10 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler {
return
}
}
ctx.Repo.Owner = u
ctx.Repo.Owner = owner
// Get repository.
repo, err := models.GetRepositoryByName(u.Id, repoName)
repo, err := models.GetRepositoryByName(owner.Id, repoName)
if err != nil {
if models.IsErrRepoNotExist(err) {
ctx.Handle(404, "GetRepositoryByName", err)
@@ -332,7 +332,7 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler {
}
}
ctx.Data["Title"] = u.Name + "/" + repo.Name
ctx.Data["Title"] = owner.Name + "/" + repo.Name
ctx.Data["Repository"] = repo
ctx.Data["Owner"] = ctx.Repo.Repository.Owner
ctx.Data["IsRepositoryOwner"] = ctx.Repo.IsOwner()
@@ -346,8 +346,9 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler {
}
ctx.Data["CloneLink"] = ctx.Repo.CloneLink
if ctx.Query("go-get") == "1" {
ctx.Data["GoGetImport"] = fmt.Sprintf("%s/%s/%s", setting.Domain, u.Name, repo.Name)
if ctx.IsSigned {
ctx.Data["IsWatchingRepo"] = models.IsWatching(ctx.User.Id, repo.ID)
ctx.Data["IsStaringRepo"] = models.IsStaring(ctx.User.Id, repo.ID)
}
// repo is bare and display enable
@@ -356,16 +357,14 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler {
// NOTE: to prevent templating error
ctx.Data["BranchName"] = ""
if displayBare {
if !ctx.Repo.IsAdmin() {
ctx.Flash.Info(ctx.Tr("repo.repo_is_empty"), true)
}
ctx.HTML(200, "repo/bare")
}
return
}
if ctx.IsSigned {
ctx.Data["IsWatchingRepo"] = models.IsWatching(ctx.User.Id, repo.ID)
ctx.Data["IsStaringRepo"] = models.IsStaring(ctx.User.Id, repo.ID)
}
ctx.Data["TagName"] = ctx.Repo.TagName
brs, err := ctx.Repo.GitRepo.GetBranches()
if err != nil {
@@ -388,6 +387,13 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler {
ctx.Data["BranchName"] = ctx.Repo.BranchName
ctx.Data["CommitID"] = ctx.Repo.CommitID
if ctx.Query("go-get") == "1" {
ctx.Data["GoGetImport"] = path.Join(setting.Domain, setting.AppSubUrl, owner.Name, repo.Name)
prefix := path.Join(setting.AppUrl, owner.Name, repo.Name, "src", ctx.Repo.BranchName)
ctx.Data["GoDocDirectory"] = prefix + "{/dir}"
ctx.Data["GoDocFile"] = prefix + "{/dir}/{file}#L{line}"
}
userAgent := ctx.Req.Header.Get("User-Agent")
ua := user_agent.New(userAgent)
browserName, browserVer := ua.Browser()
@@ -414,7 +420,7 @@ func RequireRepoAdmin() macaron.Handler {
// GitHookService checks if repository Git hooks service has been enabled.
func GitHookService() macaron.Handler {
return func(ctx *Context) {
if !ctx.User.AllowGitHook && !ctx.User.IsAdmin {
if !ctx.User.CanEditGitHook() {
ctx.Handle(404, "GitHookService", nil)
return
}

View File

@@ -18,7 +18,7 @@ import (
"gopkg.in/ini.v1"
"github.com/Unknwon/com"
"github.com/macaron-contrib/session"
"github.com/go-macaron/session"
"github.com/gogits/gogs/modules/bindata"
"github.com/gogits/gogs/modules/log"
@@ -42,11 +42,16 @@ const (
)
var (
// Build information.
BuildTime string
BuildGitHash string
// App settings.
AppVer string
AppName string
AppUrl string
AppSubUrl string
AppVer string
AppName string
AppUrl string
AppSubUrl string
AppDataPath = "data"
// Server settings.
Protocol Scheme
@@ -86,9 +91,13 @@ var (
}
// Repository settings.
Repository struct {
AnsiCharset string
ForcePrivate bool
PullRequestQueueLength int
}
RepoRootPath string
ScriptType string
AnsiCharset string
// UI settings.
ExplorePagingNum int
@@ -315,7 +324,7 @@ func NewContext() {
ReverseProxyAuthUser = sec.Key("REVERSE_PROXY_AUTHENTICATION_USER").MustString("X-WEBAUTH-USER")
sec = Cfg.Section("attachment")
AttachmentPath = sec.Key("PATH").MustString("data/attachments")
AttachmentPath = sec.Key("PATH").MustString(path.Join(AppDataPath, "attachments"))
if !filepath.IsAbs(AttachmentPath) {
AttachmentPath = path.Join(workDir, AttachmentPath)
}
@@ -365,7 +374,9 @@ func NewContext() {
RepoRootPath = path.Clean(RepoRootPath)
}
ScriptType = sec.Key("SCRIPT_TYPE").MustString("bash")
AnsiCharset = sec.Key("ANSI_CHARSET").MustString("")
Repository.AnsiCharset = sec.Key("ANSI_CHARSET").String()
Repository.ForcePrivate = sec.Key("FORCE_PRIVATE").MustBool()
Repository.PullRequestQueueLength = sec.Key("PULL_REQUEST_QUEUE_LENGTH").MustInt(10000)
// UI settings.
sec = Cfg.Section("ui")
@@ -381,7 +392,7 @@ func NewContext() {
sec = Cfg.Section("picture")
PictureService = sec.Key("SERVICE").In("server", []string{"server"})
AvatarUploadPath = sec.Key("AVATAR_UPLOAD_PATH").MustString("data/avatars")
AvatarUploadPath = sec.Key("AVATAR_UPLOAD_PATH").MustString(path.Join(AppDataPath, "avatars"))
forcePathSeparator(AvatarUploadPath)
if !filepath.IsAbs(AvatarUploadPath) {
AvatarUploadPath = path.Join(workDir, AvatarUploadPath)
@@ -428,6 +439,7 @@ var Service struct {
EnableReverseProxyAuth bool
EnableReverseProxyAutoRegister bool
DisableMinimumKeySizeCheck bool
MinimumKeySizes map[string]int
EnableCaptcha bool
}
@@ -443,6 +455,12 @@ func newService() {
Service.EnableReverseProxyAutoRegister = sec.Key("ENABLE_REVERSE_PROXY_AUTO_REGISTRATION").MustBool()
Service.DisableMinimumKeySizeCheck = sec.Key("DISABLE_MINIMUM_KEY_SIZE_CHECK").MustBool()
Service.EnableCaptcha = sec.Key("ENABLE_CAPTCHA").MustBool()
minimumKeySizes := Cfg.Section("service.minimum_key_sizes").Keys()
Service.MinimumKeySizes = make(map[string]int)
for _, key := range minimumKeySizes {
Service.MinimumKeySizes[key.Name()] = key.MustInt()
}
}
var logLevels = map[string]string{
@@ -457,6 +475,11 @@ var logLevels = map[string]string{
func newLogService() {
log.Info("%s %s", AppName, AppVer)
if len(BuildTime) > 0 {
log.Info("Build Time: %s", BuildTime)
log.Info("Build Git Hash: %s", BuildGitHash)
}
// Get and check log mode.
LogModes = strings.Split(Cfg.Section("log").Key("MODE").MustString("console"), ",")
LogConfigs = make([]string, len(LogModes))

View File

@@ -7,7 +7,7 @@
package setting
import (
_ "github.com/macaron-contrib/cache/memcache"
_ "github.com/go-macaron/cache/memcache"
)
func init() {

View File

@@ -7,8 +7,8 @@
package setting
import (
_ "github.com/macaron-contrib/cache/redis"
_ "github.com/macaron-contrib/session/redis"
_ "github.com/go-macaron/cache/redis"
_ "github.com/go-macaron/session/redis"
)
func init() {

View File

@@ -28,6 +28,10 @@ case "$1" in
# scale
${CLI} scale web=1 || true
# restart the service
service gogs restart || true
;;
esac

View File

@@ -1,11 +1,11 @@
{
"CodeKitInfo": "This is a CodeKit 2.x project configuration file. It is designed to sync project settings across multiple machines. MODIFYING THE CONTENTS OF THIS FILE IS A POOR LIFE DECISION. If you do so, you will likely cause CodeKit to crash. This file is not useful unless accompanied by the project that created it in CodeKit 2. This file is not backwards-compatible with CodeKit 1.x. For more information, see: http:\/\/incident57.com\/codekit",
"creatorBuild": "19051",
"creatorBuild": "19076",
"files": {
"\/css\/dropzone-4.0.1.css": {
"fileType": 16,
"ignore": 0,
"ignoreWasSetByUser": 0,
"ignoreWasSetByUser": 1,
"inputAbbreviatedPath": "\/css\/dropzone-4.0.1.css",
"outputAbbreviatedPath": "No Output Path",
"outputPathIsOutsideProject": 0,
@@ -74,11 +74,11 @@
"outputPathIsOutsideProject": 0,
"outputPathIsSetByUser": 0
},
"\/css\/semantic-2.1.3.min.css": {
"\/css\/semantic-2.1.5.min.css": {
"fileType": 16,
"ignore": 0,
"ignoreWasSetByUser": 0,
"inputAbbreviatedPath": "\/css\/semantic-2.1.3.min.css",
"inputAbbreviatedPath": "\/css\/semantic-2.1.5.min.css",
"outputAbbreviatedPath": "No Output Path",
"outputPathIsOutsideProject": 0,
"outputPathIsSetByUser": 0
@@ -204,6 +204,17 @@
"outputStyle": 1,
"syntaxCheckerStyle": 1
},
"\/js\/libs\/clipboard-1.5.3.min.js": {
"fileType": 64,
"ignore": 0,
"ignoreWasSetByUser": 0,
"inputAbbreviatedPath": "\/js\/libs\/clipboard-1.5.3.min.js",
"outputAbbreviatedPath": "\/js\/libs\/min\/clipboard-1.5.3.min-min.js",
"outputPathIsOutsideProject": 0,
"outputPathIsSetByUser": 0,
"outputStyle": 1,
"syntaxCheckerStyle": 1
},
"\/js\/libs\/dropzone-4.0.1.js": {
"fileType": 64,
"ignore": 0,
@@ -270,12 +281,12 @@
"outputPathIsSetByUser": 0,
"processed": 0
},
"\/js\/semantic-2.1.3.min.js": {
"\/js\/semantic-2.1.5.min.js": {
"fileType": 64,
"ignore": 0,
"ignoreWasSetByUser": 0,
"inputAbbreviatedPath": "\/js\/semantic-2.1.3.min.js",
"outputAbbreviatedPath": "\/js\/min\/semantic-2.1.3.min-min.js",
"inputAbbreviatedPath": "\/js\/semantic-2.1.5.min.js",
"outputAbbreviatedPath": "\/js\/min\/semantic-2.1.5.min-min.js",
"outputPathIsOutsideProject": 0,
"outputPathIsSetByUser": 0,
"outputStyle": 1,
@@ -548,12 +559,12 @@
"fileType": 1,
"ieCompatibility": 1,
"ignore": 0,
"ignoreWasSetByUser": 0,
"ignoreWasSetByUser": 1,
"inputAbbreviatedPath": "\/less\/gogs.less",
"outputAbbreviatedPath": "\/css\/gogs.min.css",
"outputAbbreviatedPath": "\/css\/gogs.css",
"outputPathIsOutsideProject": 0,
"outputPathIsSetByUser": 1,
"outputStyle": 1,
"outputStyle": 0,
"relativeURLS": 0,
"shouldRunAutoprefixer": 0,
"shouldRunBless": 0,
@@ -1823,7 +1834,9 @@
"typescriptAutoOutputPathStyle": 2,
"typescriptCreateDeclarationFile": 0,
"typescriptCreateSourceMap": 0,
"typescriptJSXMode": 0,
"typescriptMinifyOutput": 0,
"typescriptModuleResolutionType": 0,
"typescriptModuleType": 0,
"typescriptNoImplicitAny": 0,
"typescriptPreserveConstEnums": 0,

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