Show More
The requested changes are too big and content was truncated. Show full diff
@@ -0,0 +1,11 b'' | |||||
|
1 | [default] | |||
|
2 | api_url = http://your.rhodecode.server:5000/_admin/api | |||
|
3 | api_user = admin | |||
|
4 | api_key = XXXXXXXXXXXX | |||
|
5 | ||||
|
6 | ldap_uri = ldap://your.ldap.server:389 | |||
|
7 | ldap_user = cn=rhodecode,ou=binders,dc=linaro,dc=org | |||
|
8 | ldap_key = XXXXXXXXX | |||
|
9 | base_dn = dc=linaro,dc=org | |||
|
10 | ||||
|
11 | sync_users = True No newline at end of file |
@@ -0,0 +1,237 b'' | |||||
|
1 | # This program is free software: you can redistribute it and/or modify | |||
|
2 | # it under the terms of the GNU General Public License as published by | |||
|
3 | # the Free Software Foundation, either version 3 of the License, or | |||
|
4 | # (at your option) any later version. | |||
|
5 | # | |||
|
6 | # This program is distributed in the hope that it will be useful, | |||
|
7 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|
8 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
|
9 | # GNU General Public License for more details. | |||
|
10 | # | |||
|
11 | # You should have received a copy of the GNU General Public License | |||
|
12 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
|
13 | ||||
|
14 | import ldap | |||
|
15 | import urllib2 | |||
|
16 | import uuid | |||
|
17 | import json | |||
|
18 | ||||
|
19 | from ConfigParser import ConfigParser | |||
|
20 | ||||
|
21 | config = ConfigParser() | |||
|
22 | config.read('ldap_sync.conf') | |||
|
23 | ||||
|
24 | ||||
|
25 | class InvalidResponseIDError(Exception): | |||
|
26 | """ Request and response don't have the same UUID. """ | |||
|
27 | ||||
|
28 | ||||
|
29 | class RhodecodeResponseError(Exception): | |||
|
30 | """ Response has an error, something went wrong with request execution. """ | |||
|
31 | ||||
|
32 | ||||
|
33 | class UserAlreadyInGroupError(Exception): | |||
|
34 | """ User is already a member of the target group. """ | |||
|
35 | ||||
|
36 | ||||
|
37 | class UserNotInGroupError(Exception): | |||
|
38 | """ User is not a member of the target group. """ | |||
|
39 | ||||
|
40 | ||||
|
41 | class RhodecodeAPI(): | |||
|
42 | ||||
|
43 | def __init__(self, url, key): | |||
|
44 | self.url = url | |||
|
45 | self.key = key | |||
|
46 | ||||
|
47 | def get_api_data(self, uid, method, args): | |||
|
48 | """Prepare dict for API post.""" | |||
|
49 | return { | |||
|
50 | "id": uid, | |||
|
51 | "api_key": self.key, | |||
|
52 | "method": method, | |||
|
53 | "args": args | |||
|
54 | } | |||
|
55 | ||||
|
56 | def rhodecode_api_post(self, method, args): | |||
|
57 | """Send a generic API post to Rhodecode. | |||
|
58 | ||||
|
59 | This will generate the UUID for validation check after the | |||
|
60 | response is returned. Handle errors and get the result back. | |||
|
61 | """ | |||
|
62 | uid = str(uuid.uuid1()) | |||
|
63 | data = self.get_api_data(uid, method, args) | |||
|
64 | ||||
|
65 | data = json.dumps(data) | |||
|
66 | headers = {'content-type': 'text/plain'} | |||
|
67 | req = urllib2.Request(self.url, data, headers) | |||
|
68 | ||||
|
69 | response = urllib2.urlopen(req) | |||
|
70 | response = json.load(response) | |||
|
71 | ||||
|
72 | if uid != response["id"]: | |||
|
73 | raise InvalidResponseIDError("UUID does not match.") | |||
|
74 | ||||
|
75 | if response["error"] != None: | |||
|
76 | raise RhodecodeResponseError(response["error"]) | |||
|
77 | ||||
|
78 | return response["result"] | |||
|
79 | ||||
|
80 | def create_group(self, name, active=True): | |||
|
81 | """Create the Rhodecode user group.""" | |||
|
82 | args = { | |||
|
83 | "group_name": name, | |||
|
84 | "active": str(active) | |||
|
85 | } | |||
|
86 | self.rhodecode_api_post("create_users_group", args) | |||
|
87 | ||||
|
88 | def add_membership(self, group, username): | |||
|
89 | """Add specific user to a group.""" | |||
|
90 | args = { | |||
|
91 | "usersgroupid": group, | |||
|
92 | "userid": username | |||
|
93 | } | |||
|
94 | result = self.rhodecode_api_post("add_user_to_users_group", args) | |||
|
95 | if not result["success"]: | |||
|
96 | raise UserAlreadyInGroupError("User %s already in group %s." % | |||
|
97 | (username, group)) | |||
|
98 | ||||
|
99 | def remove_membership(self, group, username): | |||
|
100 | """Remove specific user from a group.""" | |||
|
101 | args = { | |||
|
102 | "usersgroupid": group, | |||
|
103 | "userid": username | |||
|
104 | } | |||
|
105 | result = self.rhodecode_api_post("remove_user_from_users_group", args) | |||
|
106 | if not result["success"]: | |||
|
107 | raise UserNotInGroupError("User %s not in group %s." % | |||
|
108 | (username, group)) | |||
|
109 | ||||
|
110 | def get_group_members(self, name): | |||
|
111 | """Get the list of member usernames from a user group.""" | |||
|
112 | args = {"usersgroupid": name} | |||
|
113 | members = self.rhodecode_api_post("get_users_group", args)['members'] | |||
|
114 | member_list = [] | |||
|
115 | for member in members: | |||
|
116 | member_list.append(member["username"]) | |||
|
117 | return member_list | |||
|
118 | ||||
|
119 | def get_group(self, name): | |||
|
120 | """Return group info.""" | |||
|
121 | args = {"usersgroupid": name} | |||
|
122 | return self.rhodecode_api_post("get_users_group", args) | |||
|
123 | ||||
|
124 | def get_user(self, username): | |||
|
125 | """Return user info.""" | |||
|
126 | args = {"userid": username} | |||
|
127 | return self.rhodecode_api_post("get_user", args) | |||
|
128 | ||||
|
129 | ||||
|
130 | class LdapClient(): | |||
|
131 | ||||
|
132 | def __init__(self, uri, user, key, base_dn): | |||
|
133 | self.client = ldap.initialize(uri, trace_level=0) | |||
|
134 | self.client.set_option(ldap.OPT_REFERRALS, 0) | |||
|
135 | self.client.simple_bind(user, key) | |||
|
136 | self.base_dn = base_dn | |||
|
137 | ||||
|
138 | def __del__(self): | |||
|
139 | self.client.unbind() | |||
|
140 | ||||
|
141 | def get_groups(self): | |||
|
142 | """Get all the groups in form of dict {group_name: group_info,...}.""" | |||
|
143 | searchFilter = "objectClass=groupOfUniqueNames" | |||
|
144 | result = self.client.search_s(self.base_dn, ldap.SCOPE_SUBTREE, | |||
|
145 | searchFilter) | |||
|
146 | ||||
|
147 | groups = {} | |||
|
148 | for group in result: | |||
|
149 | groups[group[1]['cn'][0]] = group[1] | |||
|
150 | ||||
|
151 | return groups | |||
|
152 | ||||
|
153 | def get_group_users(self, groups, group): | |||
|
154 | """Returns all the users belonging to a single group. | |||
|
155 | ||||
|
156 | Based on the list of groups and memberships, returns all the | |||
|
157 | users belonging to a single group, searching recursively. | |||
|
158 | """ | |||
|
159 | users = [] | |||
|
160 | for member in groups[group]["uniqueMember"]: | |||
|
161 | member = self.parse_member_string(member) | |||
|
162 | if member[0] == "uid": | |||
|
163 | users.append(member[1]) | |||
|
164 | elif member[0] == "cn": | |||
|
165 | users += self.get_group_users(groups, member[1]) | |||
|
166 | ||||
|
167 | return users | |||
|
168 | ||||
|
169 | def parse_member_string(self, member): | |||
|
170 | """Parses the member string and returns a touple of type and name. | |||
|
171 | ||||
|
172 | Unique member can be either user or group. Users will have 'uid' as | |||
|
173 | prefix while groups will have 'cn'. | |||
|
174 | """ | |||
|
175 | member = member.split(",")[0] | |||
|
176 | return member.split('=') | |||
|
177 | ||||
|
178 | ||||
|
179 | class LdapSync(object): | |||
|
180 | ||||
|
181 | def __init__(self): | |||
|
182 | self.ldap_client = LdapClient(config.get("default", "ldap_uri"), | |||
|
183 | config.get("default", "ldap_user"), | |||
|
184 | config.get("default", "ldap_key"), | |||
|
185 | config.get("default", "base_dn")) | |||
|
186 | self.rhodocode_api = RhodecodeAPI(config.get("default", "api_url"), | |||
|
187 | config.get("default", "api_key")) | |||
|
188 | ||||
|
189 | def update_groups_from_ldap(self): | |||
|
190 | """Add all the groups from LDAP to Rhodecode.""" | |||
|
191 | added = existing = 0 | |||
|
192 | groups = self.ldap_client.get_groups() | |||
|
193 | for group in groups: | |||
|
194 | try: | |||
|
195 | self.rhodecode_api.create_group(group) | |||
|
196 | added += 1 | |||
|
197 | except Exception: | |||
|
198 | existing += 1 | |||
|
199 | ||||
|
200 | return added, existing | |||
|
201 | ||||
|
202 | def update_memberships_from_ldap(self, group): | |||
|
203 | """Update memberships in rhodecode based on the LDAP groups.""" | |||
|
204 | groups = self.ldap_client.get_groups() | |||
|
205 | group_users = self.ldap_client.get_group_users(groups, group) | |||
|
206 | ||||
|
207 | # Delete memberships first from each group which are not part | |||
|
208 | # of the group any more. | |||
|
209 | rhodecode_members = self.rhodecode_api.get_group_members(group) | |||
|
210 | for rhodecode_member in rhodecode_members: | |||
|
211 | if rhodecode_member not in group_users: | |||
|
212 | try: | |||
|
213 | self.rhodocode_api.remove_membership(group, | |||
|
214 | rhodecode_member) | |||
|
215 | except UserNotInGroupError: | |||
|
216 | pass | |||
|
217 | ||||
|
218 | # Add memberships. | |||
|
219 | for member in group_users: | |||
|
220 | try: | |||
|
221 | self.rhodecode_api.add_membership(group, member) | |||
|
222 | except UserAlreadyInGroupError: | |||
|
223 | # TODO: handle somehow maybe.. | |||
|
224 | pass | |||
|
225 | ||||
|
226 | ||||
|
227 | if __name__ == '__main__': | |||
|
228 | sync = LdapSync() | |||
|
229 | print sync.update_groups_from_ldap() | |||
|
230 | ||||
|
231 | for gr in sync.ldap_client.get_groups(): | |||
|
232 | # TODO: exception when user does not exist during add membership... | |||
|
233 | # How should we handle this.. Either sync users as well at this step, | |||
|
234 | # or just ignore those who don't exist. If we want the second case, | |||
|
235 | # we need to find a way to recognize the right exception (we always get | |||
|
236 | # RhodecodeResponseError with no error code so maybe by return msg (?) | |||
|
237 | sync.update_memberships_from_ldap(gr) |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100644 |
|
NO CONTENT: new file 100644 | ||
The requested commit or file is too big and content was truncated. Show full diff |
@@ -33,3 +33,4 b' List of contributors to RhodeCode projec' | |||||
33 | Philip Jameson <philip.j@hostdime.com> |
|
33 | Philip Jameson <philip.j@hostdime.com> | |
34 | Mads Kiilerich <madski@unity3d.com> |
|
34 | Mads Kiilerich <madski@unity3d.com> | |
35 | Dan Sheridan <djs@adelard.com> |
|
35 | Dan Sheridan <djs@adelard.com> | |
|
36 | Dennis Brakhane <brakhane@googlemail.com> |
@@ -75,7 +75,7 b' RhodeCode Features' | |||||
75 | - Supports http/https, LDAP, AD, proxy-pass authentication. |
|
75 | - Supports http/https, LDAP, AD, proxy-pass authentication. | |
76 | - Full permissions (private/read/write/admin) together with IP restrictions for each repository, |
|
76 | - Full permissions (private/read/write/admin) together with IP restrictions for each repository, | |
77 | additional explicit forking and repository creation permissions. |
|
77 | additional explicit forking and repository creation permissions. | |
78 |
- User |
|
78 | - User groups for easier permission management | |
79 | - Repository groups let you group repos and manage them easier. |
|
79 | - Repository groups let you group repos and manage them easier. | |
80 | - Users can fork other users repos, and compare them at any time. |
|
80 | - Users can fork other users repos, and compare them at any time. | |
81 | - Integrates easily with other systems, with custom created mappers you can connect it to almost |
|
81 | - Integrates easily with other systems, with custom created mappers you can connect it to almost |
@@ -25,59 +25,92 b' pdebug = false' | |||||
25 | #smtp_port = |
|
25 | #smtp_port = | |
26 | #smtp_use_tls = false |
|
26 | #smtp_use_tls = false | |
27 | #smtp_use_ssl = true |
|
27 | #smtp_use_ssl = true | |
28 | # Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) |
|
28 | ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) | |
29 | #smtp_auth = |
|
29 | #smtp_auth = | |
30 |
|
30 | |||
31 | [server:main] |
|
31 | [server:main] | |
32 | ## PASTE |
|
32 | ## PASTE | |
33 | ##nr of threads to spawn |
|
33 | ## nr of threads to spawn | |
34 | #threadpool_workers = 5 |
|
34 | #threadpool_workers = 5 | |
35 |
|
35 | |||
36 | ##max request before thread respawn |
|
36 | ## max request before thread respawn | |
37 | #threadpool_max_requests = 10 |
|
37 | #threadpool_max_requests = 10 | |
38 |
|
38 | |||
39 | ##option to use threads of process |
|
39 | ## option to use threads of process | |
40 | #use_threadpool = true |
|
40 | #use_threadpool = true | |
41 |
|
41 | |||
42 | #use = egg:Paste#http |
|
42 | #use = egg:Paste#http | |
43 |
|
43 | |||
44 | #WAITRESS |
|
44 | ## WAITRESS | |
45 | threads = 5 |
|
45 | threads = 5 | |
|
46 | ## 100GB | |||
|
47 | max_request_body_size = 107374182400 | |||
46 | use = egg:waitress#main |
|
48 | use = egg:waitress#main | |
47 |
|
49 | |||
48 | host = 0.0.0.0 |
|
50 | host = 0.0.0.0 | |
49 | port = 5000 |
|
51 | port = 5000 | |
50 |
|
52 | |||
51 | [filter:proxy-prefix] |
|
53 | ## prefix middleware for rc | |
52 | # prefix middleware for rc |
|
54 | #[filter:proxy-prefix] | |
53 | use = egg:PasteDeploy#prefix |
|
55 | #use = egg:PasteDeploy#prefix | |
54 | prefix = /<your-prefix> |
|
56 | #prefix = /<your-prefix> | |
55 |
|
57 | |||
56 | [app:main] |
|
58 | [app:main] | |
57 | use = egg:rhodecode |
|
59 | use = egg:rhodecode | |
|
60 | ## enable proxy prefix middleware | |||
58 | #filter-with = proxy-prefix |
|
61 | #filter-with = proxy-prefix | |
|
62 | ||||
59 | full_stack = true |
|
63 | full_stack = true | |
60 | static_files = true |
|
64 | static_files = true | |
61 | # Optional Languages |
|
65 | ## Optional Languages | |
62 | # en, fr, ja, pt_BR, zh_CN, zh_TW, pl |
|
66 | ## en, fr, ja, pt_BR, zh_CN, zh_TW, pl | |
63 | lang = en |
|
67 | lang = en | |
64 | cache_dir = %(here)s/data |
|
68 | cache_dir = %(here)s/data | |
65 | index_dir = %(here)s/data/index |
|
69 | index_dir = %(here)s/data/index | |
66 | app_instance_uuid = rc-develop |
|
70 | ||
|
71 | ## uncomment and set this path to use archive download cache | |||
|
72 | #archive_cache_dir = /tmp/tarballcache | |||
|
73 | ||||
|
74 | ## change this to unique ID for security | |||
|
75 | app_instance_uuid = rc-production | |||
|
76 | ||||
|
77 | ## cut off limit for large diffs (size in bytes) | |||
67 | cut_off_limit = 256000 |
|
78 | cut_off_limit = 256000 | |
68 | vcs_full_cache = True |
|
79 | ||
|
80 | ## use cache version of scm repo everywhere | |||
|
81 | vcs_full_cache = true | |||
|
82 | ||||
|
83 | ## force https in RhodeCode, fixes https redirects, assumes it's always https | |||
69 | force_https = false |
|
84 | force_https = false | |
|
85 | ||||
|
86 | ## use Strict-Transport-Security headers | |||
|
87 | use_htsts = false | |||
|
88 | ||||
|
89 | ## number of commits stats will parse on each iteration | |||
70 | commit_parse_limit = 25 |
|
90 | commit_parse_limit = 25 | |
71 | # number of items displayed in lightweight dashboard before paginating |
|
91 | ||
|
92 | ## number of items displayed in lightweight dashboard before paginating is shown | |||
72 | dashboard_items = 100 |
|
93 | dashboard_items = 100 | |
|
94 | ||||
|
95 | ## use gravatar service to display avatars | |||
73 | use_gravatar = true |
|
96 | use_gravatar = true | |
74 |
|
97 | |||
|
98 | ## path to git executable | |||
|
99 | git_path = git | |||
|
100 | ||||
|
101 | ## git rev filter option, --all is the default filter, if you need to | |||
|
102 | ## hide all refs in changelog switch this to --branches --tags | |||
|
103 | git_rev_filter=--all | |||
|
104 | ||||
75 | ## RSS feed options |
|
105 | ## RSS feed options | |
76 |
|
||||
77 | rss_cut_off_limit = 256000 |
|
106 | rss_cut_off_limit = 256000 | |
78 | rss_items_per_page = 10 |
|
107 | rss_items_per_page = 10 | |
79 | rss_include_diff = false |
|
108 | rss_include_diff = false | |
80 |
|
109 | |||
|
110 | ## options for showing and identifying changesets | |||
|
111 | show_sha_length = 12 | |||
|
112 | show_revision_number = true | |||
|
113 | ||||
81 |
|
114 | |||
82 | ## alternative_gravatar_url allows you to use your own avatar server application |
|
115 | ## alternative_gravatar_url allows you to use your own avatar server application | |
83 | ## the following parts of the URL will be replaced |
|
116 | ## the following parts of the URL will be replaced | |
@@ -89,8 +122,11 b' rss_include_diff = false' | |||||
89 | #alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size} |
|
122 | #alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size} | |
90 | #alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size} |
|
123 | #alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size} | |
91 |
|
124 | |||
|
125 | ||||
|
126 | ## container auth options | |||
92 | container_auth_enabled = false |
|
127 | container_auth_enabled = false | |
93 | proxypass_auth_enabled = false |
|
128 | proxypass_auth_enabled = false | |
|
129 | ||||
94 | ## default encoding used to convert from and to unicode |
|
130 | ## default encoding used to convert from and to unicode | |
95 | ## can be also a comma seperated list of encoding in case of mixed encodings |
|
131 | ## can be also a comma seperated list of encoding in case of mixed encodings | |
96 | default_encoding = utf8 |
|
132 | default_encoding = utf8 | |
@@ -146,6 +182,11 b' instance_id =' | |||||
146 | ## handling that. Set this variable to 403 to return HTTPForbidden |
|
182 | ## handling that. Set this variable to 403 to return HTTPForbidden | |
147 | auth_ret_code = |
|
183 | auth_ret_code = | |
148 |
|
184 | |||
|
185 | ## locking return code. When repository is locked return this HTTP code. 2XX | |||
|
186 | ## codes don't break the transactions while 4XX codes do | |||
|
187 | lock_ret_code = 423 | |||
|
188 | ||||
|
189 | ||||
149 | #################################### |
|
190 | #################################### | |
150 | ### CELERY CONFIG #### |
|
191 | ### CELERY CONFIG #### | |
151 | #################################### |
|
192 | #################################### | |
@@ -170,7 +211,7 b' celeryd.concurrency = 2' | |||||
170 | celeryd.log.level = debug |
|
211 | celeryd.log.level = debug | |
171 | celeryd.max.tasks.per.child = 1 |
|
212 | celeryd.max.tasks.per.child = 1 | |
172 |
|
213 | |||
173 | #tasks will never be sent to the queue, but executed locally instead. |
|
214 | ## tasks will never be sent to the queue, but executed locally instead. | |
174 | celery.always.eager = false |
|
215 | celery.always.eager = false | |
175 |
|
216 | |||
176 | #################################### |
|
217 | #################################### | |
@@ -226,18 +267,19 b' beaker.cache.sql_cache_long.key_length =' | |||||
226 |
|
267 | |||
227 |
|
268 | |||
228 | beaker.session.key = rhodecode |
|
269 | beaker.session.key = rhodecode | |
229 |
## secure cookie requires AES python libraries |
|
270 | ## secure cookie requires AES python libraries | |
230 |
#beaker.session.encrypt_key = |
|
271 | #beaker.session.encrypt_key = <key_for_encryption> | |
231 |
#beaker.session.validate_key = |
|
272 | #beaker.session.validate_key = <validation_key> | |
|
273 | ||||
232 | ## sets session as invalid if it haven't been accessed for given amount of time |
|
274 | ## sets session as invalid if it haven't been accessed for given amount of time | |
233 | beaker.session.timeout = 2592000 |
|
275 | beaker.session.timeout = 2592000 | |
234 | beaker.session.httponly = true |
|
276 | beaker.session.httponly = true | |
235 | #beaker.session.cookie_path = /<your-prefix> |
|
277 | #beaker.session.cookie_path = /<your-prefix> | |
236 |
|
278 | |||
237 |
## uncomment for https secure cookie |
|
279 | ## uncomment for https secure cookie | |
238 | beaker.session.secure = false |
|
280 | beaker.session.secure = false | |
239 |
|
281 | |||
240 |
## auto save the session to not to use .save() |
|
282 | ## auto save the session to not to use .save() | |
241 | beaker.session.auto = False |
|
283 | beaker.session.auto = False | |
242 |
|
284 | |||
243 | ## default cookie expiration time in seconds `true` expire at browser close ## |
|
285 | ## default cookie expiration time in seconds `true` expire at browser close ## | |
@@ -252,57 +294,57 b' beaker.session.auto = False' | |||||
252 | ### [errormator] ### |
|
294 | ### [errormator] ### | |
253 | #################### |
|
295 | #################### | |
254 |
|
296 | |||
255 | # Errormator is tailored to work with RhodeCode, see |
|
297 | ## Errormator is tailored to work with RhodeCode, see | |
256 | # http://errormator.com for details how to obtain an account |
|
298 | ## http://errormator.com for details how to obtain an account | |
257 | # you must install python package `errormator_client` to make it work |
|
299 | ## you must install python package `errormator_client` to make it work | |
258 |
|
300 | |||
259 | # errormator enabled |
|
301 | ## errormator enabled | |
260 |
errormator = |
|
302 | errormator = false | |
261 |
|
303 | |||
262 | errormator.server_url = https://api.errormator.com |
|
304 | errormator.server_url = https://api.errormator.com | |
263 | errormator.api_key = YOUR_API_KEY |
|
305 | errormator.api_key = YOUR_API_KEY | |
264 |
|
306 | |||
265 | # TWEAK AMOUNT OF INFO SENT HERE |
|
307 | ## TWEAK AMOUNT OF INFO SENT HERE | |
266 |
|
308 | |||
267 | # enables 404 error logging (default False) |
|
309 | ## enables 404 error logging (default False) | |
268 | errormator.report_404 = false |
|
310 | errormator.report_404 = false | |
269 |
|
311 | |||
270 | # time in seconds after request is considered being slow (default 1) |
|
312 | ## time in seconds after request is considered being slow (default 1) | |
271 | errormator.slow_request_time = 1 |
|
313 | errormator.slow_request_time = 1 | |
272 |
|
314 | |||
273 | # record slow requests in application |
|
315 | ## record slow requests in application | |
274 | # (needs to be enabled for slow datastore recording and time tracking) |
|
316 | ## (needs to be enabled for slow datastore recording and time tracking) | |
275 | errormator.slow_requests = true |
|
317 | errormator.slow_requests = true | |
276 |
|
318 | |||
277 | # enable hooking to application loggers |
|
319 | ## enable hooking to application loggers | |
278 | # errormator.logging = true |
|
320 | # errormator.logging = true | |
279 |
|
321 | |||
280 | # minimum log level for log capture |
|
322 | ## minimum log level for log capture | |
281 | # errormator.logging.level = WARNING |
|
323 | # errormator.logging.level = WARNING | |
282 |
|
324 | |||
283 | # send logs only from erroneous/slow requests |
|
325 | ## send logs only from erroneous/slow requests | |
284 | # (saves API quota for intensive logging) |
|
326 | ## (saves API quota for intensive logging) | |
285 | errormator.logging_on_error = false |
|
327 | errormator.logging_on_error = false | |
286 |
|
328 | |||
287 | # list of additonal keywords that should be grabbed from environ object |
|
329 | ## list of additonal keywords that should be grabbed from environ object | |
288 | # can be string with comma separated list of words in lowercase |
|
330 | ## can be string with comma separated list of words in lowercase | |
289 | # (by default client will always send following info: |
|
331 | ## (by default client will always send following info: | |
290 | # 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that |
|
332 | ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that | |
291 | # start with HTTP* this list be extended with additional keywords here |
|
333 | ## start with HTTP* this list be extended with additional keywords here | |
292 | errormator.environ_keys_whitelist = |
|
334 | errormator.environ_keys_whitelist = | |
293 |
|
335 | |||
294 |
|
336 | |||
295 | # list of keywords that should be blanked from request object |
|
337 | ## list of keywords that should be blanked from request object | |
296 | # can be string with comma separated list of words in lowercase |
|
338 | ## can be string with comma separated list of words in lowercase | |
297 | # (by default client will always blank keys that contain following words |
|
339 | ## (by default client will always blank keys that contain following words | |
298 | # 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' |
|
340 | ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' | |
299 | # this list be extended with additional keywords set here |
|
341 | ## this list be extended with additional keywords set here | |
300 | errormator.request_keys_blacklist = |
|
342 | errormator.request_keys_blacklist = | |
301 |
|
343 | |||
302 |
|
344 | |||
303 | # list of namespaces that should be ignores when gathering log entries |
|
345 | ## list of namespaces that should be ignores when gathering log entries | |
304 | # can be string with comma separated list of namespaces |
|
346 | ## can be string with comma separated list of namespaces | |
305 | # (by default the client ignores own entries: errormator_client.client) |
|
347 | ## (by default the client ignores own entries: errormator_client.client) | |
306 | errormator.log_namespace_blacklist = |
|
348 | errormator.log_namespace_blacklist = | |
307 |
|
349 | |||
308 |
|
350 | |||
@@ -310,8 +352,8 b' errormator.log_namespace_blacklist =' | |||||
310 | ### [sentry] ### |
|
352 | ### [sentry] ### | |
311 | ################ |
|
353 | ################ | |
312 |
|
354 | |||
313 | # sentry is a alternative open source error aggregator |
|
355 | ## sentry is a alternative open source error aggregator | |
314 | # you must install python packages `sentry` and `raven` to enable |
|
356 | ## you must install python packages `sentry` and `raven` to enable | |
315 |
|
357 | |||
316 | sentry.dsn = YOUR_DNS |
|
358 | sentry.dsn = YOUR_DNS | |
317 | sentry.servers = |
|
359 | sentry.servers = | |
@@ -371,7 +413,7 b' handlers = console' | |||||
371 | level = DEBUG |
|
413 | level = DEBUG | |
372 | handlers = |
|
414 | handlers = | |
373 | qualname = routes.middleware |
|
415 | qualname = routes.middleware | |
374 | # "level = DEBUG" logs the route matched and routing variables. |
|
416 | ## "level = DEBUG" logs the route matched and routing variables. | |
375 | propagate = 1 |
|
417 | propagate = 1 | |
376 |
|
418 | |||
377 | [logger_beaker] |
|
419 | [logger_beaker] |
@@ -13,10 +13,10 b' with JSON protocol both ways. An url to ' | |||||
13 | API ACCESS FOR WEB VIEWS |
|
13 | API ACCESS FOR WEB VIEWS | |
14 | ++++++++++++++++++++++++ |
|
14 | ++++++++++++++++++++++++ | |
15 |
|
15 | |||
16 |
API access can also be turned on for each web view in RhodeCode that is |
|
16 | API access can also be turned on for each web view in RhodeCode that is | |
17 |
decorated with `@LoginRequired` decorator. To enable API access simple change |
|
17 | decorated with `@LoginRequired` decorator. To enable API access simple change | |
18 |
the standard login decorator to `@LoginRequired(api_access=True)`. |
|
18 | the standard login decorator to `@LoginRequired(api_access=True)`. | |
19 |
After this change, a rhodecode view can be accessed without login by adding a |
|
19 | After this change, a rhodecode view can be accessed without login by adding a | |
20 | GET parameter `?api_key=<api_key>` to url. By default this is only |
|
20 | GET parameter `?api_key=<api_key>` to url. By default this is only | |
21 | enabled on RSS/ATOM feed views. |
|
21 | enabled on RSS/ATOM feed views. | |
22 |
|
22 | |||
@@ -26,7 +26,7 b' API ACCESS' | |||||
26 |
|
26 | |||
27 | All clients are required to send JSON-RPC spec JSON data:: |
|
27 | All clients are required to send JSON-RPC spec JSON data:: | |
28 |
|
28 | |||
29 |
{ |
|
29 | { | |
30 | "id:"<id>", |
|
30 | "id:"<id>", | |
31 | "api_key":"<api_key>", |
|
31 | "api_key":"<api_key>", | |
32 | "method":"<method_name>", |
|
32 | "method":"<method_name>", | |
@@ -49,7 +49,7 b' Simply provide' | |||||
49 |
|
49 | |||
50 | RhodeCode API will return always a JSON-RPC response:: |
|
50 | RhodeCode API will return always a JSON-RPC response:: | |
51 |
|
51 | |||
52 |
{ |
|
52 | { | |
53 | "id":<id>, # matching id sent by request |
|
53 | "id":<id>, # matching id sent by request | |
54 | "result": "<result>"|null, # JSON formatted result, null if any errors |
|
54 | "result": "<result>"|null, # JSON formatted result, null if any errors | |
55 | "error": "null"|<error_message> # JSON formatted error (if any) |
|
55 | "error": "null"|<error_message> # JSON formatted error (if any) | |
@@ -70,14 +70,14 b' will be available.' | |||||
70 | To get started quickly simply run:: |
|
70 | To get started quickly simply run:: | |
71 |
|
71 | |||
72 | rhodecode-api _create_config --apikey=<youapikey> --apihost=<rhodecode host> |
|
72 | rhodecode-api _create_config --apikey=<youapikey> --apihost=<rhodecode host> | |
73 |
|
73 | |||
74 | This will create a file named .config in the directory you executed it storing |
|
74 | This will create a file named .config in the directory you executed it storing | |
75 | json config file with credentials. You can skip this step and always provide |
|
75 | json config file with credentials. You can skip this step and always provide | |
76 | both of the arguments to be able to communicate with server |
|
76 | both of the arguments to be able to communicate with server | |
77 |
|
77 | |||
78 |
|
78 | |||
79 | after that simply run any api command for example get_repo:: |
|
79 | after that simply run any api command for example get_repo:: | |
80 |
|
80 | |||
81 | rhodecode-api get_repo |
|
81 | rhodecode-api get_repo | |
82 |
|
82 | |||
83 | calling {"api_key": "<apikey>", "id": 75, "args": {}, "method": "get_repo"} to http://127.0.0.1:5000 |
|
83 | calling {"api_key": "<apikey>", "id": 75, "args": {}, "method": "get_repo"} to http://127.0.0.1:5000 | |
@@ -90,8 +90,8 b' Ups looks like we forgot to add an argum' | |||||
90 |
|
90 | |||
91 | Let's try again now giving the repoid as parameters:: |
|
91 | Let's try again now giving the repoid as parameters:: | |
92 |
|
92 | |||
93 |
rhodecode-api get_repo repoid:rhodecode |
|
93 | rhodecode-api get_repo repoid:rhodecode | |
94 |
|
94 | |||
95 | calling {"api_key": "<apikey>", "id": 39, "args": {"repoid": "rhodecode"}, "method": "get_repo"} to http://127.0.0.1:5000 |
|
95 | calling {"api_key": "<apikey>", "id": 39, "args": {"repoid": "rhodecode"}, "method": "get_repo"} to http://127.0.0.1:5000 | |
96 | rhodecode said: |
|
96 | rhodecode said: | |
97 | {'error': None, |
|
97 | {'error': None, | |
@@ -132,7 +132,7 b' rescan_repos' | |||||
132 |
|
132 | |||
133 | Dispatch rescan repositories action. If remove_obsolete is set |
|
133 | Dispatch rescan repositories action. If remove_obsolete is set | |
134 | RhodeCode will delete repos that are in database but not in the filesystem. |
|
134 | RhodeCode will delete repos that are in database but not in the filesystem. | |
135 |
This command can be executed only using api_key belonging to user with admin |
|
135 | This command can be executed only using api_key belonging to user with admin | |
136 | rights. |
|
136 | rights. | |
137 |
|
137 | |||
138 | INPUT:: |
|
138 | INPUT:: | |
@@ -147,17 +147,40 b' INPUT::' | |||||
147 | OUTPUT:: |
|
147 | OUTPUT:: | |
148 |
|
148 | |||
149 | id : <id_given_in_input> |
|
149 | id : <id_given_in_input> | |
150 |
result : "{'added': [<list of names of added repos>], |
|
150 | result : "{'added': [<list of names of added repos>], | |
151 | 'removed': [<list of names of removed repos>]}" |
|
151 | 'removed': [<list of names of removed repos>]}" | |
152 | error : null |
|
152 | error : null | |
153 |
|
153 | |||
154 |
|
154 | |||
|
155 | invalidate_cache | |||
|
156 | ---------------- | |||
|
157 | ||||
|
158 | Invalidate cache for repository. | |||
|
159 | This command can be executed only using api_key belonging to user with admin | |||
|
160 | rights or regular user that have write or admin or write access to repository. | |||
|
161 | ||||
|
162 | INPUT:: | |||
|
163 | ||||
|
164 | id : <id_for_response> | |||
|
165 | api_key : "<api_key>" | |||
|
166 | method : "invalidate_cache" | |||
|
167 | args : { | |||
|
168 | "repoid" : "<reponame or repo_id>" | |||
|
169 | } | |||
|
170 | ||||
|
171 | OUTPUT:: | |||
|
172 | ||||
|
173 | id : <id_given_in_input> | |||
|
174 | result : "Cache for repository `<reponame>` was invalidated: invalidated cache keys: <list_of_cache_keys>" | |||
|
175 | error : null | |||
|
176 | ||||
155 | lock |
|
177 | lock | |
156 | ---- |
|
178 | ---- | |
157 |
|
179 | |||
158 | Set locking state on given repository by given user. If userid param is skipped |
|
180 | Set locking state on given repository by given user. If userid param is skipped | |
159 | , then it is set to id of user whos calling this method. |
|
181 | , then it is set to id of user whos calling this method. If locked param is skipped | |
160 | This command can be executed only using api_key belonging to user with admin |
|
182 | then function shows current lock state of given repo. | |
|
183 | This command can be executed only using api_key belonging to user with admin | |||
161 | rights or regular user that have admin or write access to repository. |
|
184 | rights or regular user that have admin or write access to repository. | |
162 |
|
185 | |||
163 | INPUT:: |
|
186 | INPUT:: | |
@@ -168,7 +191,7 b' INPUT::' | |||||
168 | args : { |
|
191 | args : { | |
169 | "repoid" : "<reponame or repo_id>" |
|
192 | "repoid" : "<reponame or repo_id>" | |
170 | "userid" : "<user_id or username = Optional(=apiuser)>", |
|
193 | "userid" : "<user_id or username = Optional(=apiuser)>", | |
171 | "locked" : "<bool true|false>" |
|
194 | "locked" : "<bool true|false = Optional(=None)>" | |
172 | } |
|
195 | } | |
173 |
|
196 | |||
174 | OUTPUT:: |
|
197 | OUTPUT:: | |
@@ -183,7 +206,7 b' show_ip' | |||||
183 |
|
206 | |||
184 | Shows IP address as seen from RhodeCode server, together with all |
|
207 | Shows IP address as seen from RhodeCode server, together with all | |
185 | defined IP addresses for given user. |
|
208 | defined IP addresses for given user. | |
186 |
This command can be executed only using api_key belonging to user with admin |
|
209 | This command can be executed only using api_key belonging to user with admin | |
187 | rights. |
|
210 | rights. | |
188 |
|
211 | |||
189 | INPUT:: |
|
212 | INPUT:: | |
@@ -208,7 +231,7 b' OUTPUT::' | |||||
208 | ... |
|
231 | ... | |
209 | ] |
|
232 | ] | |
210 | } |
|
233 | } | |
211 |
|
234 | |||
212 | error : null |
|
235 | error : null | |
213 |
|
236 | |||
214 |
|
237 | |||
@@ -217,7 +240,7 b' get_user' | |||||
217 |
|
240 | |||
218 | Get's an user by username or user_id, Returns empty result if user is not found. |
|
241 | Get's an user by username or user_id, Returns empty result if user is not found. | |
219 | If userid param is skipped it is set to id of user who is calling this method. |
|
242 | If userid param is skipped it is set to id of user who is calling this method. | |
220 |
This command can be executed only using api_key belonging to user with admin |
|
243 | This command can be executed only using api_key belonging to user with admin | |
221 | rights, or regular users that cannot specify different userid than theirs |
|
244 | rights, or regular users that cannot specify different userid than theirs | |
222 |
|
245 | |||
223 |
|
246 | |||
@@ -226,16 +249,17 b' INPUT::' | |||||
226 | id : <id_for_response> |
|
249 | id : <id_for_response> | |
227 | api_key : "<api_key>" |
|
250 | api_key : "<api_key>" | |
228 | method : "get_user" |
|
251 | method : "get_user" | |
229 |
args : { |
|
252 | args : { | |
230 | "userid" : "<username or user_id Optional(=apiuser)>" |
|
253 | "userid" : "<username or user_id Optional(=apiuser)>" | |
231 | } |
|
254 | } | |
232 |
|
255 | |||
233 | OUTPUT:: |
|
256 | OUTPUT:: | |
234 |
|
257 | |||
235 | id : <id_given_in_input> |
|
258 | id : <id_given_in_input> | |
236 |
result: None if user does not exist or |
|
259 | result: None if user does not exist or | |
237 | { |
|
260 | { | |
238 | "user_id" : "<user_id>", |
|
261 | "user_id" : "<user_id>", | |
|
262 | "api_key" : "<api_key>", | |||
239 | "username" : "<username>", |
|
263 | "username" : "<username>", | |
240 | "firstname": "<firstname>", |
|
264 | "firstname": "<firstname>", | |
241 | "lastname" : "<lastname>", |
|
265 | "lastname" : "<lastname>", | |
@@ -289,7 +313,7 b' OUTPUT::' | |||||
289 | "ldap_dn" : "<ldap_dn>", |
|
313 | "ldap_dn" : "<ldap_dn>", | |
290 | "last_login": "<last_login>", |
|
314 | "last_login": "<last_login>", | |
291 | }, |
|
315 | }, | |
292 |
|
|
316 | … | |
293 | ] |
|
317 | ] | |
294 | error: null |
|
318 | error: null | |
295 |
|
319 | |||
@@ -297,7 +321,7 b' OUTPUT::' | |||||
297 | create_user |
|
321 | create_user | |
298 | ----------- |
|
322 | ----------- | |
299 |
|
323 | |||
300 |
Creates new user. This command can |
|
324 | Creates new user. This command can | |
301 | be executed only using api_key belonging to user with admin rights. |
|
325 | be executed only using api_key belonging to user with admin rights. | |
302 |
|
326 | |||
303 |
|
327 | |||
@@ -341,7 +365,7 b' OUTPUT::' | |||||
341 | update_user |
|
365 | update_user | |
342 | ----------- |
|
366 | ----------- | |
343 |
|
367 | |||
344 |
updates given user if such user exists. This command can |
|
368 | updates given user if such user exists. This command can | |
345 | be executed only using api_key belonging to user with admin rights. |
|
369 | be executed only using api_key belonging to user with admin rights. | |
346 |
|
370 | |||
347 |
|
371 | |||
@@ -378,7 +402,7 b' OUTPUT::' | |||||
378 | "admin" : "<bool>", |
|
402 | "admin" : "<bool>", | |
379 | "ldap_dn" : "<ldap_dn>", |
|
403 | "ldap_dn" : "<ldap_dn>", | |
380 | "last_login": "<last_login>", |
|
404 | "last_login": "<last_login>", | |
381 |
}, |
|
405 | }, | |
382 | } |
|
406 | } | |
383 | error: null |
|
407 | error: null | |
384 |
|
408 | |||
@@ -387,7 +411,7 b' delete_user' | |||||
387 | ----------- |
|
411 | ----------- | |
388 |
|
412 | |||
389 |
|
413 | |||
390 |
deletes givenuser if such user exists. This command can |
|
414 | deletes givenuser if such user exists. This command can | |
391 | be executed only using api_key belonging to user with admin rights. |
|
415 | be executed only using api_key belonging to user with admin rights. | |
392 |
|
416 | |||
393 |
|
417 | |||
@@ -413,7 +437,7 b' OUTPUT::' | |||||
413 | get_users_group |
|
437 | get_users_group | |
414 | --------------- |
|
438 | --------------- | |
415 |
|
439 | |||
416 |
Gets an existing user |
|
440 | Gets an existing user group. This command can be executed only using api_key | |
417 | belonging to user with admin rights. |
|
441 | belonging to user with admin rights. | |
418 |
|
442 | |||
419 |
|
443 | |||
@@ -423,7 +447,7 b' INPUT::' | |||||
423 | api_key : "<api_key>" |
|
447 | api_key : "<api_key>" | |
424 | method : "get_users_group" |
|
448 | method : "get_users_group" | |
425 | args : { |
|
449 | args : { | |
426 |
"usersgroupid" : "<user |
|
450 | "usersgroupid" : "<user group id or name>" | |
427 | } |
|
451 | } | |
428 |
|
452 | |||
429 | OUTPUT:: |
|
453 | OUTPUT:: | |
@@ -435,7 +459,7 b' OUTPUT::' | |||||
435 | "group_name" : "<groupname>", |
|
459 | "group_name" : "<groupname>", | |
436 | "active": "<bool>", |
|
460 | "active": "<bool>", | |
437 | "members" : [ |
|
461 | "members" : [ | |
438 |
{ |
|
462 | { | |
439 | "user_id" : "<user_id>", |
|
463 | "user_id" : "<user_id>", | |
440 | "username" : "<username>", |
|
464 | "username" : "<username>", | |
441 | "firstname": "<firstname>", |
|
465 | "firstname": "<firstname>", | |
@@ -456,7 +480,7 b' OUTPUT::' | |||||
456 | get_users_groups |
|
480 | get_users_groups | |
457 | ---------------- |
|
481 | ---------------- | |
458 |
|
482 | |||
459 |
Lists all existing user |
|
483 | Lists all existing user groups. This command can be executed only using | |
460 | api_key belonging to user with admin rights. |
|
484 | api_key belonging to user with admin rights. | |
461 |
|
485 | |||
462 |
|
486 | |||
@@ -484,7 +508,7 b' OUTPUT::' | |||||
484 | create_users_group |
|
508 | create_users_group | |
485 | ------------------ |
|
509 | ------------------ | |
486 |
|
510 | |||
487 |
Creates new user |
|
511 | Creates new user group. This command can be executed only using api_key | |
488 | belonging to user with admin rights |
|
512 | belonging to user with admin rights | |
489 |
|
513 | |||
490 |
|
514 | |||
@@ -502,7 +526,7 b' OUTPUT::' | |||||
502 |
|
526 | |||
503 | id : <id_given_in_input> |
|
527 | id : <id_given_in_input> | |
504 | result: { |
|
528 | result: { | |
505 |
"msg": "created new user |
|
529 | "msg": "created new user group `<groupname>`", | |
506 | "users_group": { |
|
530 | "users_group": { | |
507 | "users_group_id" : "<id>", |
|
531 | "users_group_id" : "<id>", | |
508 | "group_name" : "<groupname>", |
|
532 | "group_name" : "<groupname>", | |
@@ -515,7 +539,7 b' OUTPUT::' | |||||
515 | add_user_to_users_group |
|
539 | add_user_to_users_group | |
516 | ----------------------- |
|
540 | ----------------------- | |
517 |
|
541 | |||
518 |
Adds a user to a user |
|
542 | Adds a user to a user group. If user exists in that group success will be | |
519 | `false`. This command can be executed only using api_key |
|
543 | `false`. This command can be executed only using api_key | |
520 | belonging to user with admin rights |
|
544 | belonging to user with admin rights | |
521 |
|
545 | |||
@@ -526,7 +550,7 b' INPUT::' | |||||
526 | api_key : "<api_key>" |
|
550 | api_key : "<api_key>" | |
527 | method : "add_user_users_group" |
|
551 | method : "add_user_users_group" | |
528 | args: { |
|
552 | args: { | |
529 |
"usersgroupid" : "<user |
|
553 | "usersgroupid" : "<user group id or name>", | |
530 | "userid" : "<user_id or username>", |
|
554 | "userid" : "<user_id or username>", | |
531 | } |
|
555 | } | |
532 |
|
556 | |||
@@ -535,7 +559,7 b' OUTPUT::' | |||||
535 | id : <id_given_in_input> |
|
559 | id : <id_given_in_input> | |
536 | result: { |
|
560 | result: { | |
537 | "success": True|False # depends on if member is in group |
|
561 | "success": True|False # depends on if member is in group | |
538 |
"msg": "added member `<username>` to user |
|
562 | "msg": "added member `<username>` to user group `<groupname>` | | |
539 | User is already in that group" |
|
563 | User is already in that group" | |
540 | } |
|
564 | } | |
541 | error: null |
|
565 | error: null | |
@@ -544,8 +568,8 b' OUTPUT::' | |||||
544 | remove_user_from_users_group |
|
568 | remove_user_from_users_group | |
545 | ---------------------------- |
|
569 | ---------------------------- | |
546 |
|
570 | |||
547 |
Removes a user from a user |
|
571 | Removes a user from a user group. If user is not in given group success will | |
548 |
be `false`. This command can be executed only |
|
572 | be `false`. This command can be executed only | |
549 | using api_key belonging to user with admin rights |
|
573 | using api_key belonging to user with admin rights | |
550 |
|
574 | |||
551 |
|
575 | |||
@@ -555,7 +579,7 b' INPUT::' | |||||
555 | api_key : "<api_key>" |
|
579 | api_key : "<api_key>" | |
556 | method : "remove_user_from_users_group" |
|
580 | method : "remove_user_from_users_group" | |
557 | args: { |
|
581 | args: { | |
558 |
"usersgroupid" : "<user |
|
582 | "usersgroupid" : "<user group id or name>", | |
559 | "userid" : "<user_id or username>", |
|
583 | "userid" : "<user_id or username>", | |
560 | } |
|
584 | } | |
561 |
|
585 | |||
@@ -564,7 +588,7 b' OUTPUT::' | |||||
564 | id : <id_given_in_input> |
|
588 | id : <id_given_in_input> | |
565 | result: { |
|
589 | result: { | |
566 | "success": True|False, # depends on if member is in group |
|
590 | "success": True|False, # depends on if member is in group | |
567 |
"msg": "removed member <username> from user |
|
591 | "msg": "removed member <username> from user group <groupname> | | |
568 | User wasn't in group" |
|
592 | User wasn't in group" | |
569 | } |
|
593 | } | |
570 | error: null |
|
594 | error: null | |
@@ -574,8 +598,8 b' get_repo' | |||||
574 | -------- |
|
598 | -------- | |
575 |
|
599 | |||
576 | Gets an existing repository by it's name or repository_id. Members will return |
|
600 | Gets an existing repository by it's name or repository_id. Members will return | |
577 |
either users_group or user associated to that repository. This command can be |
|
601 | either users_group or user associated to that repository. This command can be | |
578 |
executed only using api_key belonging to user with admin |
|
602 | executed only using api_key belonging to user with admin | |
579 | rights or regular user that have at least read access to repository. |
|
603 | rights or regular user that have at least read access to repository. | |
580 |
|
604 | |||
581 |
|
605 | |||
@@ -599,9 +623,9 b' OUTPUT::' | |||||
599 | "clone_uri" : "<clone_uri>", |
|
623 | "clone_uri" : "<clone_uri>", | |
600 | "enable_downloads": "<bool>", |
|
624 | "enable_downloads": "<bool>", | |
601 | "enable_locking": "<bool>", |
|
625 | "enable_locking": "<bool>", | |
602 |
"enable_statistics": "<bool>", |
|
626 | "enable_statistics": "<bool>", | |
603 | "private": "<bool>", |
|
627 | "private": "<bool>", | |
604 |
"created_on" : "<date_time_created>", |
|
628 | "created_on" : "<date_time_created>", | |
605 | "description" : "<description>", |
|
629 | "description" : "<description>", | |
606 | "landing_rev": "<landing_rev>", |
|
630 | "landing_rev": "<landing_rev>", | |
607 | "last_changeset": { |
|
631 | "last_changeset": { | |
@@ -615,8 +639,8 b' OUTPUT::' | |||||
615 | "owner": "<repo_owner>", |
|
639 | "owner": "<repo_owner>", | |
616 | "fork_of": "<name_of_fork_parent>", |
|
640 | "fork_of": "<name_of_fork_parent>", | |
617 | "members" : [ |
|
641 | "members" : [ | |
618 |
{ |
|
642 | { | |
619 | "type": "user", |
|
643 | "type": "user", | |
620 | "user_id" : "<user_id>", |
|
644 | "user_id" : "<user_id>", | |
621 | "username" : "<username>", |
|
645 | "username" : "<username>", | |
622 | "firstname": "<firstname>", |
|
646 | "firstname": "<firstname>", | |
@@ -630,8 +654,8 b' OUTPUT::' | |||||
630 | "permission" : "repository.(read|write|admin)" |
|
654 | "permission" : "repository.(read|write|admin)" | |
631 | }, |
|
655 | }, | |
632 | … |
|
656 | … | |
633 |
{ |
|
657 | { | |
634 | "type": "users_group", |
|
658 | "type": "users_group", | |
635 | "id" : "<usersgroupid>", |
|
659 | "id" : "<usersgroupid>", | |
636 | "name" : "<usersgroupname>", |
|
660 | "name" : "<usersgroupname>", | |
637 | "active": "<bool>", |
|
661 | "active": "<bool>", | |
@@ -639,6 +663,22 b' OUTPUT::' | |||||
639 | }, |
|
663 | }, | |
640 | … |
|
664 | … | |
641 | ] |
|
665 | ] | |
|
666 | "followers": [ | |||
|
667 | { | |||
|
668 | "user_id" : "<user_id>", | |||
|
669 | "username" : "<username>", | |||
|
670 | "firstname": "<firstname>", | |||
|
671 | "lastname" : "<lastname>", | |||
|
672 | "email" : "<email>", | |||
|
673 | "emails": "<list_of_all_additional_emails>", | |||
|
674 | "ip_addresses": "<list_of_ip_addresses_for_user>", | |||
|
675 | "active" : "<bool>", | |||
|
676 | "admin" : "<bool>", | |||
|
677 | "ldap_dn" : "<ldap_dn>", | |||
|
678 | "last_login": "<last_login>", | |||
|
679 | }, | |||
|
680 | … | |||
|
681 | ] | |||
642 | } |
|
682 | } | |
643 | error: null |
|
683 | error: null | |
644 |
|
684 | |||
@@ -646,8 +686,8 b' OUTPUT::' | |||||
646 | get_repos |
|
686 | get_repos | |
647 | --------- |
|
687 | --------- | |
648 |
|
688 | |||
649 |
Lists all existing repositories. This command can be executed only using |
|
689 | Lists all existing repositories. This command can be executed only using | |
650 |
api_key belonging to user with admin rights or regular user that have |
|
690 | api_key belonging to user with admin rights or regular user that have | |
651 | admin, write or read access to repository. |
|
691 | admin, write or read access to repository. | |
652 |
|
692 | |||
653 |
|
693 | |||
@@ -668,14 +708,14 b' OUTPUT::' | |||||
668 | "repo_type" : "<repo_type>", |
|
708 | "repo_type" : "<repo_type>", | |
669 | "clone_uri" : "<clone_uri>", |
|
709 | "clone_uri" : "<clone_uri>", | |
670 | "private": : "<bool>", |
|
710 | "private": : "<bool>", | |
671 |
"created_on" : "<datetimecreated>", |
|
711 | "created_on" : "<datetimecreated>", | |
672 | "description" : "<description>", |
|
712 | "description" : "<description>", | |
673 | "landing_rev": "<landing_rev>", |
|
713 | "landing_rev": "<landing_rev>", | |
674 | "owner": "<repo_owner>", |
|
714 | "owner": "<repo_owner>", | |
675 | "fork_of": "<name_of_fork_parent>", |
|
715 | "fork_of": "<name_of_fork_parent>", | |
676 | "enable_downloads": "<bool>", |
|
716 | "enable_downloads": "<bool>", | |
677 | "enable_locking": "<bool>", |
|
717 | "enable_locking": "<bool>", | |
678 |
"enable_statistics": "<bool>", |
|
718 | "enable_statistics": "<bool>", | |
679 | }, |
|
719 | }, | |
680 | … |
|
720 | … | |
681 | ] |
|
721 | ] | |
@@ -685,9 +725,9 b' OUTPUT::' | |||||
685 | get_repo_nodes |
|
725 | get_repo_nodes | |
686 | -------------- |
|
726 | -------------- | |
687 |
|
727 | |||
688 |
returns a list of nodes and it's children in a flat list for a given path |
|
728 | returns a list of nodes and it's children in a flat list for a given path | |
689 |
at given revision. It's possible to specify ret_type to show only `files` or |
|
729 | at given revision. It's possible to specify ret_type to show only `files` or | |
690 |
`dirs`. This command can be executed only using api_key belonging to user |
|
730 | `dirs`. This command can be executed only using api_key belonging to user | |
691 | with admin rights |
|
731 | with admin rights | |
692 |
|
732 | |||
693 |
|
733 | |||
@@ -720,9 +760,9 b' create_repo' | |||||
720 | ----------- |
|
760 | ----------- | |
721 |
|
761 | |||
722 | Creates a repository. If repository name contains "/", all needed repository |
|
762 | Creates a repository. If repository name contains "/", all needed repository | |
723 |
groups will be created. For example "foo/bar/baz" will create groups |
|
763 | groups will be created. For example "foo/bar/baz" will create groups | |
724 |
"foo", "bar" (with "foo" as parent), and create "baz" repository with |
|
764 | "foo", "bar" (with "foo" as parent), and create "baz" repository with | |
725 |
"bar" as group. This command can be executed only using api_key belonging to user with admin |
|
765 | "bar" as group. This command can be executed only using api_key belonging to user with admin | |
726 | rights or regular user that have create repository permission. Regular users |
|
766 | rights or regular user that have create repository permission. Regular users | |
727 | cannot specify owner parameter |
|
767 | cannot specify owner parameter | |
728 |
|
768 | |||
@@ -756,14 +796,14 b' OUTPUT::' | |||||
756 | "repo_type" : "<repo_type>", |
|
796 | "repo_type" : "<repo_type>", | |
757 | "clone_uri" : "<clone_uri>", |
|
797 | "clone_uri" : "<clone_uri>", | |
758 | "private": : "<bool>", |
|
798 | "private": : "<bool>", | |
759 |
"created_on" : "<datetimecreated>", |
|
799 | "created_on" : "<datetimecreated>", | |
760 | "description" : "<description>", |
|
800 | "description" : "<description>", | |
761 | "landing_rev": "<landing_rev>", |
|
801 | "landing_rev": "<landing_rev>", | |
762 | "owner": "<username or user_id>", |
|
802 | "owner": "<username or user_id>", | |
763 | "fork_of": "<name_of_fork_parent>", |
|
803 | "fork_of": "<name_of_fork_parent>", | |
764 | "enable_downloads": "<bool>", |
|
804 | "enable_downloads": "<bool>", | |
765 | "enable_locking": "<bool>", |
|
805 | "enable_locking": "<bool>", | |
766 |
"enable_statistics": "<bool>", |
|
806 | "enable_statistics": "<bool>", | |
767 | }, |
|
807 | }, | |
768 | } |
|
808 | } | |
769 | error: null |
|
809 | error: null | |
@@ -792,7 +832,7 b' INPUT::' | |||||
792 | "copy_permissions": "<bool>", |
|
832 | "copy_permissions": "<bool>", | |
793 | "private": "<bool>", |
|
833 | "private": "<bool>", | |
794 | "landing_rev": "<landing_rev>" |
|
834 | "landing_rev": "<landing_rev>" | |
795 |
|
835 | |||
796 | } |
|
836 | } | |
797 |
|
837 | |||
798 | OUTPUT:: |
|
838 | OUTPUT:: | |
@@ -808,8 +848,10 b' OUTPUT::' | |||||
808 | delete_repo |
|
848 | delete_repo | |
809 | ----------- |
|
849 | ----------- | |
810 |
|
850 | |||
811 |
Deletes a repository. This command can be executed only using api_key belonging |
|
851 | Deletes a repository. This command can be executed only using api_key belonging | |
812 | rights or regular user that have admin access to repository. |
|
852 | to user with admin rights or regular user that have admin access to repository. | |
|
853 | When `forks` param is set it's possible to detach or delete forks of deleting | |||
|
854 | repository | |||
813 |
|
855 | |||
814 |
|
856 | |||
815 | INPUT:: |
|
857 | INPUT:: | |
@@ -818,7 +860,8 b' INPUT::' | |||||
818 | api_key : "<api_key>" |
|
860 | api_key : "<api_key>" | |
819 | method : "delete_repo" |
|
861 | method : "delete_repo" | |
820 | args: { |
|
862 | args: { | |
821 | "repoid" : "<reponame or repo_id>" |
|
863 | "repoid" : "<reponame or repo_id>", | |
|
864 | "forks" : "`delete` or `detach` = Optional(None)" | |||
822 | } |
|
865 | } | |
823 |
|
866 | |||
824 | OUTPUT:: |
|
867 | OUTPUT:: | |
@@ -835,7 +878,7 b' grant_user_permission' | |||||
835 | --------------------- |
|
878 | --------------------- | |
836 |
|
879 | |||
837 | Grant permission for user on given repository, or update existing one |
|
880 | Grant permission for user on given repository, or update existing one | |
838 |
if found. This command can be executed only using api_key belonging to user |
|
881 | if found. This command can be executed only using api_key belonging to user | |
839 | with admin rights. |
|
882 | with admin rights. | |
840 |
|
883 | |||
841 |
|
884 | |||
@@ -863,7 +906,7 b' OUTPUT::' | |||||
863 | revoke_user_permission |
|
906 | revoke_user_permission | |
864 | ---------------------- |
|
907 | ---------------------- | |
865 |
|
908 | |||
866 |
Revoke permission for user on given repository. This command can be executed |
|
909 | Revoke permission for user on given repository. This command can be executed | |
867 | only using api_key belonging to user with admin rights. |
|
910 | only using api_key belonging to user with admin rights. | |
868 |
|
911 | |||
869 |
|
912 | |||
@@ -890,8 +933,8 b' OUTPUT::' | |||||
890 | grant_users_group_permission |
|
933 | grant_users_group_permission | |
891 | ---------------------------- |
|
934 | ---------------------------- | |
892 |
|
935 | |||
893 |
Grant permission for user |
|
936 | Grant permission for user group on given repository, or update | |
894 |
existing one if found. This command can be executed only using |
|
937 | existing one if found. This command can be executed only using | |
895 | api_key belonging to user with admin rights. |
|
938 | api_key belonging to user with admin rights. | |
896 |
|
939 | |||
897 |
|
940 | |||
@@ -902,7 +945,7 b' INPUT::' | |||||
902 | method : "grant_users_group_permission" |
|
945 | method : "grant_users_group_permission" | |
903 | args: { |
|
946 | args: { | |
904 | "repoid" : "<reponame or repo_id>" |
|
947 | "repoid" : "<reponame or repo_id>" | |
905 |
"usersgroupid" : "<user |
|
948 | "usersgroupid" : "<user group id or name>" | |
906 | "perm" : "(repository.(none|read|write|admin))", |
|
949 | "perm" : "(repository.(none|read|write|admin))", | |
907 | } |
|
950 | } | |
908 |
|
951 | |||
@@ -914,12 +957,12 b' OUTPUT::' | |||||
914 | "success": true |
|
957 | "success": true | |
915 | } |
|
958 | } | |
916 | error: null |
|
959 | error: null | |
917 |
|
960 | |||
918 |
|
961 | |||
919 | revoke_users_group_permission |
|
962 | revoke_users_group_permission | |
920 | ----------------------------- |
|
963 | ----------------------------- | |
921 |
|
964 | |||
922 |
Revoke permission for user |
|
965 | Revoke permission for user group on given repository.This command can be | |
923 | executed only using api_key belonging to user with admin rights. |
|
966 | executed only using api_key belonging to user with admin rights. | |
924 |
|
967 | |||
925 | INPUT:: |
|
968 | INPUT:: | |
@@ -929,7 +972,7 b' INPUT::' | |||||
929 | method : "revoke_users_group_permission" |
|
972 | method : "revoke_users_group_permission" | |
930 | args: { |
|
973 | args: { | |
931 | "repoid" : "<reponame or repo_id>" |
|
974 | "repoid" : "<reponame or repo_id>" | |
932 |
"usersgroupid" : "<user |
|
975 | "usersgroupid" : "<user group id or name>" | |
933 | } |
|
976 | } | |
934 |
|
977 | |||
935 | OUTPUT:: |
|
978 | OUTPUT:: | |
@@ -939,4 +982,4 b' OUTPUT::' | |||||
939 | "msg" : "Revoked perm for group: `<usersgroupname>` in repo: `<reponame>`", |
|
982 | "msg" : "Revoked perm for group: `<usersgroupname>` in repo: `<reponame>`", | |
940 | "success": true |
|
983 | "success": true | |
941 | } |
|
984 | } | |
942 | error: null No newline at end of file |
|
985 | error: null |
@@ -6,30 +6,30 b' The :mod:`models` Module' | |||||
6 |
|
6 | |||
7 | .. automodule:: rhodecode.model |
|
7 | .. automodule:: rhodecode.model | |
8 | :members: |
|
8 | :members: | |
9 |
|
9 | |||
10 | .. automodule:: rhodecode.model.comment |
|
10 | .. automodule:: rhodecode.model.comment | |
11 | :members: |
|
11 | :members: | |
12 |
|
12 | |||
13 | .. automodule:: rhodecode.model.notification |
|
13 | .. automodule:: rhodecode.model.notification | |
14 |
:members: |
|
14 | :members: | |
15 |
|
15 | |||
16 | .. automodule:: rhodecode.model.permission |
|
16 | .. automodule:: rhodecode.model.permission | |
17 | :members: |
|
17 | :members: | |
18 |
|
18 | |||
19 | .. automodule:: rhodecode.model.repo_permission |
|
19 | .. automodule:: rhodecode.model.repo_permission | |
20 |
:members: |
|
20 | :members: | |
21 |
|
21 | |||
22 | .. automodule:: rhodecode.model.repo |
|
22 | .. automodule:: rhodecode.model.repo | |
23 |
:members: |
|
23 | :members: | |
24 |
|
24 | |||
25 | .. automodule:: rhodecode.model.repos_group |
|
25 | .. automodule:: rhodecode.model.repos_group | |
26 | :members: |
|
26 | :members: | |
27 |
|
27 | |||
28 | .. automodule:: rhodecode.model.scm |
|
28 | .. automodule:: rhodecode.model.scm | |
29 | :members: |
|
29 | :members: | |
30 |
|
30 | |||
31 | .. automodule:: rhodecode.model.user |
|
31 | .. automodule:: rhodecode.model.user | |
32 |
:members: |
|
32 | :members: | |
33 |
|
33 | |||
34 | .. automodule:: rhodecode.model.users_group |
|
34 | .. automodule:: rhodecode.model.users_group | |
35 |
:members: |
|
35 | :members: |
@@ -4,6 +4,82 b'' | |||||
4 | Changelog |
|
4 | Changelog | |
5 | ========= |
|
5 | ========= | |
6 |
|
6 | |||
|
7 | 1.6.0rc1 (**2013-04-07**) | |||
|
8 | ------------------------- | |||
|
9 | ||||
|
10 | news | |||
|
11 | ++++ | |||
|
12 | ||||
|
13 | - Redesign UI, with lots of small improvements. | |||
|
14 | - Group management delegation. Group admin can manage a group, and repos | |||
|
15 | under it, admin can create child groups inside group he manages. | |||
|
16 | - Repository extra fields. Optional unlimited extra fields can be defined for | |||
|
17 | each repository to store custom data. | |||
|
18 | - API get_repo call includes repo followers now. | |||
|
19 | - Large amounts of improvements in pull requests. | |||
|
20 | - #734 repo switcher is available in all pages. | |||
|
21 | - #733 API invalidate_cache function. | |||
|
22 | - Added option to turn on HSTS headers when using SSL. | |||
|
23 | - #83 show repo size on summary page. | |||
|
24 | - #745 added show full diff link into to big diff message. | |||
|
25 | - Deprecated RSS links - ATOM is the present and the future. | |||
|
26 | - Add option to define custom lexers for custom extensions for code highlight | |||
|
27 | in rcextension module. | |||
|
28 | - Git executable is now configurable via .ini files. | |||
|
29 | - #689 repositories now has optional detach/delete option for connected forks. | |||
|
30 | - Obfuscate password when cloning a remote repo with credentials. | |||
|
31 | - #788 tarball cache. zip or compressed tarballs can be optionally cached for | |||
|
32 | faster serving. | |||
|
33 | - Speed up of last_changeset extraction in VCS. | |||
|
34 | - API get_locks function. | |||
|
35 | - Configurable HTTP codes for repository locking. | |||
|
36 | - Possible to use closed branches in ?branch= in changelog. | |||
|
37 | - Linaro's ldap sync scripts. | |||
|
38 | - #797 git refs filter is now configurable via .ini file. | |||
|
39 | - New ishell paster command for easier administrative tasks. | |||
|
40 | ||||
|
41 | fixes | |||
|
42 | +++++ | |||
|
43 | ||||
|
44 | - #654 switch to handles `/` in branch/tag/bookmark names. | |||
|
45 | - #572 moved out password reset tasks from celery. | |||
|
46 | - #730 filter out repo groups choices to only ones that you have write+ access. | |||
|
47 | - #462 disable file editing when not on branch head. | |||
|
48 | - #731 update-repoinfo sometimes failed to update data when changesets were | |||
|
49 | initial commits. | |||
|
50 | - #749,#805 and #516 Removed duplication of repo settings for rhodecode admins | |||
|
51 | and repo admins. | |||
|
52 | - Global permission update with "overwrite existing settings" shouldn't | |||
|
53 | override private repositories. | |||
|
54 | - #642 added recursion limit for stats gathering. | |||
|
55 | - #739 Delete/Edit repositories should only point to admin links if the user | |||
|
56 | is an super admin. | |||
|
57 | - Fixed escaping of html in "patch" view for GIT repos. | |||
|
58 | - #747 load changeset cache after forking to refresh lightweight dashboard caches. | |||
|
59 | - Quick repo list: public/private icon control should only control icons, | |||
|
60 | not repo visibility. | |||
|
61 | - #746 UnicodeDedode errors on feed controllers. | |||
|
62 | - #756 cleanup repos didn't properly compose paths of repos to be cleaned up. | |||
|
63 | - #763 gravatar helper function should fallback into default image if somehow | |||
|
64 | email provided is empty. | |||
|
65 | - Fixes #762, LDAP and container created users are now activated based on | |||
|
66 | the registration settings in permissions. | |||
|
67 | - Cleanup would recurse into every leaf and could thus not be used on lots of | |||
|
68 | large repositories. | |||
|
69 | - Better detection of deleting groups with subgroups inside. | |||
|
70 | - Fixed issue with renaming repos group together with changing parents with | |||
|
71 | multiple nested trees. | |||
|
72 | - #594 web interface file committing executes push hooks. | |||
|
73 | - Disallow cloning from different URI's that http[s]/svn/git/hg. | |||
|
74 | - Handling of RhodeCode extra params in consistent way. | |||
|
75 | - Don't normalize path if it's empty on adding a file through web interface. | |||
|
76 | - #808 missing changesets and files should return 404 not redirect | |||
|
77 | - #809 added url quote in clone url. | |||
|
78 | - Fixed issues with importing non-ascii repo names. | |||
|
79 | - Automatically assign instance_id for host and process if it has been set to * | |||
|
80 | - Fixed multiple IP addresses in each of extracted IP. | |||
|
81 | - Lot of other small bug fixes and improvements. | |||
|
82 | ||||
7 | 1.5.4 (**2013-03-13**) |
|
83 | 1.5.4 (**2013-03-13**) | |
8 | ---------------------- |
|
84 | ---------------------- | |
9 |
|
85 | |||
@@ -20,8 +96,8 b' fixes' | |||||
20 | if email is empty |
|
96 | if email is empty | |
21 | - fixes #762 user global activation flag is also respected for LDAP created |
|
97 | - fixes #762 user global activation flag is also respected for LDAP created | |
22 | accounts |
|
98 | accounts | |
23 |
- use password obfuscate when clonning a remote repo with credentials inside |
|
99 | - use password obfuscate when clonning a remote repo with credentials inside | |
24 | - fixed issue with renaming repos group together with changing parents |
|
100 | - fixed issue with renaming repository group together with changing parents | |
25 | - disallow cloning from file:/// URIs |
|
101 | - disallow cloning from file:/// URIs | |
26 | - handle all cases with multiple IP addresses in proxy headers |
|
102 | - handle all cases with multiple IP addresses in proxy headers | |
27 |
|
103 | |||
@@ -84,7 +160,7 b' 1.5.1 (**2012-12-13**)' | |||||
84 | news |
|
160 | news | |
85 | ++++ |
|
161 | ++++ | |
86 |
|
162 | |||
87 |
- implements #677: Don't allow to close pull requests when they are |
|
163 | - implements #677: Don't allow to close pull requests when they are | |
88 | under-review status |
|
164 | under-review status | |
89 | - implemented #670 Implementation of Roles in Pull Request |
|
165 | - implemented #670 Implementation of Roles in Pull Request | |
90 |
|
166 | |||
@@ -95,6 +171,7 b' fixes' | |||||
95 | - fixed changeset status labels, they now select radio buttons |
|
171 | - fixed changeset status labels, they now select radio buttons | |
96 | - #682 translation difficult for multi-line text |
|
172 | - #682 translation difficult for multi-line text | |
97 | - #683 fixed difference between messages about not mapped repositories |
|
173 | - #683 fixed difference between messages about not mapped repositories | |
|
174 | - email: fail nicely when no SMTP server has been configured | |||
98 |
|
175 | |||
99 | 1.5.0 (**2012-12-12**) |
|
176 | 1.5.0 (**2012-12-12**) | |
100 | ---------------------- |
|
177 | ---------------------- | |
@@ -120,7 +197,7 b' news' | |||||
120 | - implemented #638 permissions overview to groups |
|
197 | - implemented #638 permissions overview to groups | |
121 | - implements #636, lazy loading of history and authors to speed up source |
|
198 | - implements #636, lazy loading of history and authors to speed up source | |
122 | pages rendering |
|
199 | pages rendering | |
123 |
- implemented #647, option to pass list of default encoding used to |
|
200 | - implemented #647, option to pass list of default encoding used to | |
124 | encode to/decode from unicode |
|
201 | encode to/decode from unicode | |
125 | - added caching layer into RSS/ATOM feeds. |
|
202 | - added caching layer into RSS/ATOM feeds. | |
126 | - basic implementation of cherry picking changesets for pull request, ref #575 |
|
203 | - basic implementation of cherry picking changesets for pull request, ref #575 | |
@@ -143,17 +220,17 b' fixes' | |||||
143 | - fixes #612 Double quotes to Single quotes result in bad html in diff |
|
220 | - fixes #612 Double quotes to Single quotes result in bad html in diff | |
144 | - fixes #630 git statistics do too much work making them slow. |
|
221 | - fixes #630 git statistics do too much work making them slow. | |
145 | - fixes #625 Git-Tags are not displayed in Shortlog |
|
222 | - fixes #625 Git-Tags are not displayed in Shortlog | |
146 |
- fix for issue #602, enforce str when setting mercurial UI object. |
|
223 | - fix for issue #602, enforce str when setting mercurial UI object. | |
147 | When this is used together with mercurial internal translation system |
|
224 | When this is used together with mercurial internal translation system | |
148 | it can lead to UnicodeDecodeErrors |
|
225 | it can lead to UnicodeDecodeErrors | |
149 | - fixes #645 Fix git handler when doing delete remote branch |
|
226 | - fixes #645 Fix git handler when doing delete remote branch | |
150 | - implements #649 added two seperate method for author and commiter to VCS |
|
227 | - implements #649 added two seperate method for author and committer to VCS | |
151 | changeset class switch author for git backed to be the real author not commiter |
|
228 | changeset class switch author for git backed to be the real author not committer | |
152 | - fix issue #504 RhodeCode is showing different versions of README on |
|
229 | - fix issue #504 RhodeCode is showing different versions of README on | |
153 | different summary page loads |
|
230 | different summary page loads | |
154 | - implemented #658 Changing username in LDAP-Mode should not be allowed. |
|
231 | - implemented #658 Changing username in LDAP-Mode should not be allowed. | |
155 | - fixes #652 switch to generator approach when doing file annotation to prevent |
|
232 | - fixes #652 switch to generator approach when doing file annotation to prevent | |
156 |
huge memory consumption |
|
233 | huge memory consumption | |
157 | - fixes #666 move lockkey path location to cache_dir to ensure this path is |
|
234 | - fixes #666 move lockkey path location to cache_dir to ensure this path is | |
158 | always writable for rhodecode server |
|
235 | always writable for rhodecode server | |
159 | - many more small fixes and improvements |
|
236 | - many more small fixes and improvements | |
@@ -204,9 +281,9 b' news' | |||||
204 | fixes |
|
281 | fixes | |
205 | +++++ |
|
282 | +++++ | |
206 |
|
283 | |||
207 |
- fixed #570 explicit user |
|
284 | - fixed #570 explicit user group permissions can overwrite owner permissions | |
208 | - fixed #578 set proper PATH with current Python for Git |
|
285 | - fixed #578 set proper PATH with current Python for Git | |
209 |
hooks to execute within same Python as RhodeCode |
|
286 | hooks to execute within same Python as RhodeCode | |
210 | - fixed issue with Git bare repos that ends with .git in name |
|
287 | - fixed issue with Git bare repos that ends with .git in name | |
211 |
|
288 | |||
212 | 1.4.2 (**2012-09-12**) |
|
289 | 1.4.2 (**2012-09-12**) | |
@@ -221,12 +298,12 b' news' | |||||
221 | groups. Now only write access to group allows to create a repostiory |
|
298 | groups. Now only write access to group allows to create a repostiory | |
222 | within that group |
|
299 | within that group | |
223 | - #565 Add support for {netloc} and {scheme} to alternative_gravatar_url |
|
300 | - #565 Add support for {netloc} and {scheme} to alternative_gravatar_url | |
224 |
- updated translation for zh_CN |
|
301 | - updated translation for zh_CN | |
225 |
|
302 | |||
226 | fixes |
|
303 | fixes | |
227 | +++++ |
|
304 | +++++ | |
228 |
|
305 | |||
229 | - fixed visual permissions check on repos groups inside groups |
|
306 | - fixed visual permissions check on repository groups inside groups | |
230 | - fixed issues with non-ascii search terms in search, and indexers |
|
307 | - fixed issues with non-ascii search terms in search, and indexers | |
231 | - fixed parsing of page number in GET parameters |
|
308 | - fixed parsing of page number in GET parameters | |
232 | - fixed issues with generating pull-request overview for repos with |
|
309 | - fixed issues with generating pull-request overview for repos with | |
@@ -240,7 +317,7 b' news' | |||||
240 | ++++ |
|
317 | ++++ | |
241 |
|
318 | |||
242 | - always put a comment about code-review status change even if user send |
|
319 | - always put a comment about code-review status change even if user send | |
243 |
empty data |
|
320 | empty data | |
244 | - modified_on column saves repository update and it's going to be used |
|
321 | - modified_on column saves repository update and it's going to be used | |
245 | later for light version of main page ref #500 |
|
322 | later for light version of main page ref #500 | |
246 | - pull request notifications send much nicer emails with details about pull |
|
323 | - pull request notifications send much nicer emails with details about pull | |
@@ -251,10 +328,10 b' fixes' | |||||
251 | +++++ |
|
328 | +++++ | |
252 |
|
329 | |||
253 | - fixed migrations of permissions that can lead to inconsistency. |
|
330 | - fixed migrations of permissions that can lead to inconsistency. | |
254 |
Some users sent feedback that after upgrading from older versions issues |
|
331 | Some users sent feedback that after upgrading from older versions issues | |
255 | with updating default permissions occurred. RhodeCode detects that now and |
|
332 | with updating default permissions occurred. RhodeCode detects that now and | |
256 | resets default user permission to initial state if there is a need for that. |
|
333 | resets default user permission to initial state if there is a need for that. | |
257 |
Also forces users to set the default value for new forking permission. |
|
334 | Also forces users to set the default value for new forking permission. | |
258 | - #535 improved apache wsgi example configuration in docs |
|
335 | - #535 improved apache wsgi example configuration in docs | |
259 | - fixes #550 mercurial repositories comparision failed when origin repo had |
|
336 | - fixes #550 mercurial repositories comparision failed when origin repo had | |
260 | additional not-common changesets |
|
337 | additional not-common changesets | |
@@ -273,7 +350,7 b' 1.4.0 (**2012-09-03**)' | |||||
273 |
|
350 | |||
274 | news |
|
351 | news | |
275 | ++++ |
|
352 | ++++ | |
276 |
|
353 | |||
277 | - new codereview system |
|
354 | - new codereview system | |
278 | - email map, allowing users to have multiple email addresses mapped into |
|
355 | - email map, allowing users to have multiple email addresses mapped into | |
279 | their accounts |
|
356 | their accounts | |
@@ -284,11 +361,11 b' news' | |||||
284 | - #464 added links to groups in permission box |
|
361 | - #464 added links to groups in permission box | |
285 | - #465 mentions autocomplete inside comments boxes |
|
362 | - #465 mentions autocomplete inside comments boxes | |
286 | - #469 added --update-only option to whoosh to re-index only given list |
|
363 | - #469 added --update-only option to whoosh to re-index only given list | |
287 |
of repos in index |
|
364 | of repos in index | |
288 | - rhodecode-api CLI client |
|
365 | - rhodecode-api CLI client | |
289 | - new git http protocol replaced buggy dulwich implementation. |
|
366 | - new git http protocol replaced buggy dulwich implementation. | |
290 | Now based on pygrack & gitweb |
|
367 | Now based on pygrack & gitweb | |
291 |
- Improved RSS/ATOM feeds. Discoverable by browsers using proper headers, and |
|
368 | - Improved RSS/ATOM feeds. Discoverable by browsers using proper headers, and | |
292 | reformated based on user suggestions. Additional rss/atom feeds for user |
|
369 | reformated based on user suggestions. Additional rss/atom feeds for user | |
293 | journal |
|
370 | journal | |
294 | - various i18n improvements |
|
371 | - various i18n improvements | |
@@ -296,21 +373,21 b' news' | |||||
296 | - File view now displays small gravatars off all authors of given file |
|
373 | - File view now displays small gravatars off all authors of given file | |
297 | - Implemented landing revisions. Each repository will get landing_rev attribute |
|
374 | - Implemented landing revisions. Each repository will get landing_rev attribute | |
298 | that defines 'default' revision/branch for generating readme files |
|
375 | that defines 'default' revision/branch for generating readme files | |
299 |
- Implemented #509, RhodeCode enforces SSL for push/pulling if requested at |
|
376 | - Implemented #509, RhodeCode enforces SSL for push/pulling if requested at | |
300 | earliest possible call. |
|
377 | earliest possible call. | |
301 | - Import remote svn repositories to mercurial using hgsubversion. |
|
378 | - Import remote svn repositories to mercurial using hgsubversion. | |
302 | - Fixed #508 RhodeCode now has a option to explicitly set forking permissions |
|
379 | - Fixed #508 RhodeCode now has a option to explicitly set forking permissions | |
303 | - RhodeCode can use alternative server for generating avatar icons |
|
380 | - RhodeCode can use alternative server for generating avatar icons | |
304 | - implemented repositories locking. Pull locks, push unlocks. Also can be done |
|
381 | - implemented repositories locking. Pull locks, push unlocks. Also can be done | |
305 | via API calls |
|
382 | via API calls | |
306 |
- #538 form for permissions can handle multiple users at once |
|
383 | - #538 form for permissions can handle multiple users at once | |
307 |
|
384 | |||
308 | fixes |
|
385 | fixes | |
309 | +++++ |
|
386 | +++++ | |
310 |
|
387 | |||
311 | - improved translations |
|
388 | - improved translations | |
312 | - fixes issue #455 Creating an archive generates an exception on Windows |
|
389 | - fixes issue #455 Creating an archive generates an exception on Windows | |
313 |
- fixes #448 Download ZIP archive keeps file in /tmp open and results |
|
390 | - fixes #448 Download ZIP archive keeps file in /tmp open and results | |
314 | in out of disk space |
|
391 | in out of disk space | |
315 | - fixes issue #454 Search results under Windows include proceeding |
|
392 | - fixes issue #454 Search results under Windows include proceeding | |
316 | backslash |
|
393 | backslash | |
@@ -322,9 +399,9 b' fixes' | |||||
322 | - fixed issue #459. Changed the way of obtaining logger in reindex task. |
|
399 | - fixed issue #459. Changed the way of obtaining logger in reindex task. | |
323 | - fixed #453 added ID field in whoosh SCHEMA that solves the issue of |
|
400 | - fixed #453 added ID field in whoosh SCHEMA that solves the issue of | |
324 | reindexing modified files |
|
401 | reindexing modified files | |
325 |
- fixed #481 rhodecode emails are sent without Date header |
|
402 | - fixed #481 rhodecode emails are sent without Date header | |
326 | - fixed #458 wrong count when no repos are present |
|
403 | - fixed #458 wrong count when no repos are present | |
327 |
- fixed issue #492 missing `\ No newline at end of file` test at the end of |
|
404 | - fixed issue #492 missing `\ No newline at end of file` test at the end of | |
328 | new chunk in html diff |
|
405 | new chunk in html diff | |
329 | - full text search now works also for commit messages |
|
406 | - full text search now works also for commit messages | |
330 |
|
407 | |||
@@ -335,8 +412,8 b' news' | |||||
335 | ++++ |
|
412 | ++++ | |
336 |
|
413 | |||
337 | - chinese traditional translation |
|
414 | - chinese traditional translation | |
338 |
- changed setup-app into setup-rhodecode and added arguments for auto-setup |
|
415 | - changed setup-app into setup-rhodecode and added arguments for auto-setup | |
339 |
mode that doesn't need user interaction |
|
416 | mode that doesn't need user interaction | |
340 |
|
417 | |||
341 | fixes |
|
418 | fixes | |
342 | +++++ |
|
419 | +++++ | |
@@ -356,11 +433,11 b' news' | |||||
356 | - use ext_json for json module |
|
433 | - use ext_json for json module | |
357 | - unified annotation view with file source view |
|
434 | - unified annotation view with file source view | |
358 | - notification improvements, better inbox + css |
|
435 | - notification improvements, better inbox + css | |
359 |
- #419 don't strip passwords for login forms, make rhodecode |
|
436 | - #419 don't strip passwords for login forms, make rhodecode | |
360 | more compatible with LDAP servers |
|
437 | more compatible with LDAP servers | |
361 |
- Added HTTP_X_FORWARDED_FOR as another method of extracting |
|
438 | - Added HTTP_X_FORWARDED_FOR as another method of extracting | |
362 |
IP for pull/push logs. - moved all to base controller |
|
439 | IP for pull/push logs. - moved all to base controller | |
363 |
- #415: Adding comment to changeset causes reload. |
|
440 | - #415: Adding comment to changeset causes reload. | |
364 | Comments are now added via ajax and doesn't reload the page |
|
441 | Comments are now added via ajax and doesn't reload the page | |
365 | - #374 LDAP config is discarded when LDAP can't be activated |
|
442 | - #374 LDAP config is discarded when LDAP can't be activated | |
366 | - limited push/pull operations are now logged for git in the journal |
|
443 | - limited push/pull operations are now logged for git in the journal | |
@@ -376,7 +453,7 b' fixes' | |||||
376 | - #418 cast to unicode fixes in notification objects |
|
453 | - #418 cast to unicode fixes in notification objects | |
377 | - #426 fixed mention extracting regex |
|
454 | - #426 fixed mention extracting regex | |
378 | - fixed remote-pulling for git remotes remopositories |
|
455 | - fixed remote-pulling for git remotes remopositories | |
379 |
- fixed #434: Error when accessing files or changesets of a git repository |
|
456 | - fixed #434: Error when accessing files or changesets of a git repository | |
380 | with submodules |
|
457 | with submodules | |
381 | - fixed issue with empty APIKEYS for users after registration ref. #438 |
|
458 | - fixed issue with empty APIKEYS for users after registration ref. #438 | |
382 | - fixed issue with getting README files from git repositories |
|
459 | - fixed issue with getting README files from git repositories | |
@@ -393,15 +470,15 b' news' | |||||
393 | - created rcextensions module with additional mappings (ref #322) and |
|
470 | - created rcextensions module with additional mappings (ref #322) and | |
394 | post push/pull/create repo hooks callbacks |
|
471 | post push/pull/create repo hooks callbacks | |
395 | - implemented #377 Users view for his own permissions on account page |
|
472 | - implemented #377 Users view for his own permissions on account page | |
396 |
- #399 added inheritance of permissions for user |
|
473 | - #399 added inheritance of permissions for user group on repository groups | |
397 |
- #401 repository group is automatically pre-selected when adding repos |
|
474 | - #401 repository group is automatically pre-selected when adding repos | |
398 | inside a repository group |
|
475 | inside a repository group | |
399 |
- added alternative HTTP 403 response when client failed to authenticate. Helps |
|
476 | - added alternative HTTP 403 response when client failed to authenticate. Helps | |
400 | solving issues with Mercurial and LDAP |
|
477 | solving issues with Mercurial and LDAP | |
401 |
- #402 removed group prefix from repository name when listing repositories |
|
478 | - #402 removed group prefix from repository name when listing repositories | |
402 | inside a group |
|
479 | inside a group | |
403 | - added gravatars into permission view and permissions autocomplete |
|
480 | - added gravatars into permission view and permissions autocomplete | |
404 |
- #347 when running multiple RhodeCode instances, properly invalidates cache |
|
481 | - #347 when running multiple RhodeCode instances, properly invalidates cache | |
405 | for all registered servers |
|
482 | for all registered servers | |
406 |
|
483 | |||
407 | fixes |
|
484 | fixes | |
@@ -411,15 +488,15 b' fixes' | |||||
411 | - fixed #385 clone by ID url was loosing proxy prefix in URL |
|
488 | - fixed #385 clone by ID url was loosing proxy prefix in URL | |
412 | - fixed some unicode problems with waitress |
|
489 | - fixed some unicode problems with waitress | |
413 | - fixed issue with escaping < and > in changeset commits |
|
490 | - fixed issue with escaping < and > in changeset commits | |
414 |
- fixed error occurring during recursive group creation in API |
|
491 | - fixed error occurring during recursive group creation in API | |
415 | create_repo function |
|
492 | create_repo function | |
416 | - fixed #393 py2.5 fixes for routes url generator |
|
493 | - fixed #393 py2.5 fixes for routes url generator | |
417 | - fixed #397 Private repository groups shows up before login |
|
494 | - fixed #397 Private repository groups shows up before login | |
418 | - fixed #396 fixed problems with revoking users in nested groups |
|
495 | - fixed #396 fixed problems with revoking users in nested groups | |
419 |
- fixed mysql unicode issues + specified InnoDB as default engine with |
|
496 | - fixed mysql unicode issues + specified InnoDB as default engine with | |
420 | utf8 charset |
|
497 | utf8 charset | |
421 | - #406 trim long branch/tag names in changelog to not break UI |
|
498 | - #406 trim long branch/tag names in changelog to not break UI | |
422 |
|
499 | |||
423 | 1.3.3 (**2012-03-02**) |
|
500 | 1.3.3 (**2012-03-02**) | |
424 | ---------------------- |
|
501 | ---------------------- | |
425 |
|
502 | |||
@@ -430,11 +507,11 b' news' | |||||
430 | fixes |
|
507 | fixes | |
431 | +++++ |
|
508 | +++++ | |
432 |
|
509 | |||
433 |
- fixed some python2.5 compatibility issues |
|
510 | - fixed some python2.5 compatibility issues | |
434 | - fixed issues with removed repos was accidentally added as groups, after |
|
511 | - fixed issues with removed repos was accidentally added as groups, after | |
435 | full rescan of paths |
|
512 | full rescan of paths | |
436 | - fixes #376 Cannot edit user (using container auth) |
|
513 | - fixes #376 Cannot edit user (using container auth) | |
437 |
- fixes #378 Invalid image urls on changeset screen with proxy-prefix |
|
514 | - fixes #378 Invalid image urls on changeset screen with proxy-prefix | |
438 | configuration |
|
515 | configuration | |
439 | - fixed initial sorting of repos inside repo group |
|
516 | - fixed initial sorting of repos inside repo group | |
440 | - fixes issue when user tried to resubmit same permission into user/user_groups |
|
517 | - fixes issue when user tried to resubmit same permission into user/user_groups | |
@@ -442,7 +519,7 b' fixes' | |||||
442 | - fixed raw_changeset for git. It was generated with hg patch headers |
|
519 | - fixed raw_changeset for git. It was generated with hg patch headers | |
443 | - fixed vcs issue with last_changeset for filenodes |
|
520 | - fixed vcs issue with last_changeset for filenodes | |
444 | - fixed missing commit after hook delete |
|
521 | - fixed missing commit after hook delete | |
445 |
- fixed #372 issues with git operation detection that caused a security issue |
|
522 | - fixed #372 issues with git operation detection that caused a security issue | |
446 | for git repos |
|
523 | for git repos | |
447 |
|
524 | |||
448 | 1.3.2 (**2012-02-28**) |
|
525 | 1.3.2 (**2012-02-28**) | |
@@ -459,9 +536,9 b' fixes' | |||||
459 | - fixed git remote repos validator that prevented from cloning remote git repos |
|
536 | - fixed git remote repos validator that prevented from cloning remote git repos | |
460 | - fixes #370 ending slashes fixes for repo and groups |
|
537 | - fixes #370 ending slashes fixes for repo and groups | |
461 | - fixes #368 improved git-protocol detection to handle other clients |
|
538 | - fixes #368 improved git-protocol detection to handle other clients | |
462 |
- fixes #366 When Setting Repository Group To Blank Repo Group Wont Be |
|
539 | - fixes #366 When Setting Repository Group To Blank Repo Group Wont Be | |
463 | Moved To Root |
|
540 | Moved To Root | |
464 |
- fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys |
|
541 | - fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys | |
465 | - fixed #373 missing cascade drop on user_group_to_perm table |
|
542 | - fixed #373 missing cascade drop on user_group_to_perm table | |
466 |
|
543 | |||
467 | 1.3.1 (**2012-02-27**) |
|
544 | 1.3.1 (**2012-02-27**) | |
@@ -475,7 +552,7 b' fixes' | |||||
475 | +++++ |
|
552 | +++++ | |
476 |
|
553 | |||
477 | - redirection loop occurs when remember-me wasn't checked during login |
|
554 | - redirection loop occurs when remember-me wasn't checked during login | |
478 |
- fixes issues with git blob history generation |
|
555 | - fixes issues with git blob history generation | |
479 | - don't fetch branch for git in file history dropdown. Causes unneeded slowness |
|
556 | - don't fetch branch for git in file history dropdown. Causes unneeded slowness | |
480 |
|
557 | |||
481 | 1.3.0 (**2012-02-26**) |
|
558 | 1.3.0 (**2012-02-26**) | |
@@ -484,19 +561,19 b' 1.3.0 (**2012-02-26**)' | |||||
484 | news |
|
561 | news | |
485 | ++++ |
|
562 | ++++ | |
486 |
|
563 | |||
487 |
- code review, inspired by github code-comments |
|
564 | - code review, inspired by github code-comments | |
488 | - #215 rst and markdown README files support |
|
565 | - #215 rst and markdown README files support | |
489 | - #252 Container-based and proxy pass-through authentication support |
|
566 | - #252 Container-based and proxy pass-through authentication support | |
490 | - #44 branch browser. Filtering of changelog by branches |
|
567 | - #44 branch browser. Filtering of changelog by branches | |
491 | - mercurial bookmarks support |
|
568 | - mercurial bookmarks support | |
492 | - new hover top menu, optimized to add maximum size for important views |
|
569 | - new hover top menu, optimized to add maximum size for important views | |
493 |
- configurable clone url template with possibility to specify protocol like |
|
570 | - configurable clone url template with possibility to specify protocol like | |
494 | ssh:// or http:// and also manually alter other parts of clone_url. |
|
571 | ssh:// or http:// and also manually alter other parts of clone_url. | |
495 | - enabled largefiles extension by default |
|
572 | - enabled largefiles extension by default | |
496 | - optimized summary file pages and saved a lot of unused space in them |
|
573 | - optimized summary file pages and saved a lot of unused space in them | |
497 | - #239 option to manually mark repository as fork |
|
574 | - #239 option to manually mark repository as fork | |
498 | - #320 mapping of commit authors to RhodeCode users |
|
575 | - #320 mapping of commit authors to RhodeCode users | |
499 |
- #304 hashes are displayed using monospace font |
|
576 | - #304 hashes are displayed using monospace font | |
500 | - diff configuration, toggle white lines and context lines |
|
577 | - diff configuration, toggle white lines and context lines | |
501 | - #307 configurable diffs, whitespace toggle, increasing context lines |
|
578 | - #307 configurable diffs, whitespace toggle, increasing context lines | |
502 | - sorting on branches, tags and bookmarks using YUI datatable |
|
579 | - sorting on branches, tags and bookmarks using YUI datatable | |
@@ -504,17 +581,17 b' news' | |||||
504 | - implements #330 api method for listing nodes ar particular revision |
|
581 | - implements #330 api method for listing nodes ar particular revision | |
505 | - #73 added linking issues in commit messages to chosen issue tracker url |
|
582 | - #73 added linking issues in commit messages to chosen issue tracker url | |
506 | based on user defined regular expression |
|
583 | based on user defined regular expression | |
507 |
- added linking of changesets in commit messages |
|
584 | - added linking of changesets in commit messages | |
508 | - new compact changelog with expandable commit messages |
|
585 | - new compact changelog with expandable commit messages | |
509 | - firstname and lastname are optional in user creation |
|
586 | - firstname and lastname are optional in user creation | |
510 | - #348 added post-create repository hook |
|
587 | - #348 added post-create repository hook | |
511 |
- #212 global encoding settings is now configurable from .ini files |
|
588 | - #212 global encoding settings is now configurable from .ini files | |
512 | - #227 added repository groups permissions |
|
589 | - #227 added repository groups permissions | |
513 | - markdown gets codehilite extensions |
|
590 | - markdown gets codehilite extensions | |
514 |
- new API methods, delete_repositories, grante/revoke permissions for groups |
|
591 | - new API methods, delete_repositories, grante/revoke permissions for groups | |
515 | and repos |
|
592 | and repos | |
516 |
|
593 | |||
517 |
|
594 | |||
518 | fixes |
|
595 | fixes | |
519 | +++++ |
|
596 | +++++ | |
520 |
|
597 | |||
@@ -522,15 +599,15 b' fixes' | |||||
522 | - fixed sorting of repo tables |
|
599 | - fixed sorting of repo tables | |
523 | - #326 escape of special html entities in diffs |
|
600 | - #326 escape of special html entities in diffs | |
524 | - normalized user_name => username in api attributes |
|
601 | - normalized user_name => username in api attributes | |
525 |
- fixes #298 ldap created users with mixed case emails created conflicts |
|
602 | - fixes #298 ldap created users with mixed case emails created conflicts | |
526 | on saving a form |
|
603 | on saving a form | |
527 |
- fixes issue when owner of a repo couldn't revoke permissions for users |
|
604 | - fixes issue when owner of a repo couldn't revoke permissions for users | |
528 | and groups |
|
605 | and groups | |
529 | - fixes #271 rare JSON serialization problem with statistics |
|
606 | - fixes #271 rare JSON serialization problem with statistics | |
530 | - fixes #337 missing validation check for conflicting names of a group with a |
|
607 | - fixes #337 missing validation check for conflicting names of a group with a | |
531 |
repositor |
|
608 | repository group | |
532 | - #340 fixed session problem for mysql and celery tasks |
|
609 | - #340 fixed session problem for mysql and celery tasks | |
533 |
- fixed #331 RhodeCode mangles repository names if the a repository group |
|
610 | - fixed #331 RhodeCode mangles repository names if the a repository group | |
534 | contains the "full path" to the repositories |
|
611 | contains the "full path" to the repositories | |
535 | - #355 RhodeCode doesn't store encrypted LDAP passwords |
|
612 | - #355 RhodeCode doesn't store encrypted LDAP passwords | |
536 |
|
613 | |||
@@ -551,7 +628,7 b' fixes' | |||||
551 | operation leading to crash. |
|
628 | operation leading to crash. | |
552 | - fixed missing email in account page. |
|
629 | - fixed missing email in account page. | |
553 | - Reverted Mercurial to 2.0.1 for windows due to bug in Mercurial that makes |
|
630 | - Reverted Mercurial to 2.0.1 for windows due to bug in Mercurial that makes | |
554 |
forking on windows impossible |
|
631 | forking on windows impossible | |
555 |
|
632 | |||
556 | 1.2.4 (**2012-01-19**) |
|
633 | 1.2.4 (**2012-01-19**) | |
557 | ---------------------- |
|
634 | ---------------------- | |
@@ -563,23 +640,23 b' news' | |||||
563 | full support to largefiles extension. Enabled by default in new installations |
|
640 | full support to largefiles extension. Enabled by default in new installations | |
564 | - #329 Ability to Add/Remove Groups to/from a Repository via AP |
|
641 | - #329 Ability to Add/Remove Groups to/from a Repository via AP | |
565 | - added requires.txt file with requirements |
|
642 | - added requires.txt file with requirements | |
566 |
|
643 | |||
567 | fixes |
|
644 | fixes | |
568 | +++++ |
|
645 | +++++ | |
569 |
|
646 | |||
570 | - fixes db session issues with celery when emailing admins |
|
647 | - fixes db session issues with celery when emailing admins | |
571 |
- #331 RhodeCode mangles repository names if the a repository group |
|
648 | - #331 RhodeCode mangles repository names if the a repository group | |
572 | contains the "full path" to the repositories |
|
649 | contains the "full path" to the repositories | |
573 | - #298 Conflicting e-mail addresses for LDAP and RhodeCode users |
|
650 | - #298 Conflicting e-mail addresses for LDAP and RhodeCode users | |
574 | - DB session cleanup after hg protocol operations, fixes issues with |
|
651 | - DB session cleanup after hg protocol operations, fixes issues with | |
575 | `mysql has gone away` errors |
|
652 | `mysql has gone away` errors | |
576 | - #333 doc fixes for get_repo api function |
|
653 | - #333 doc fixes for get_repo api function | |
577 | - #271 rare JSON serialization problem with statistics enabled |
|
654 | - #271 rare JSON serialization problem with statistics enabled | |
578 |
- #337 Fixes issues with validation of repository name conflicting with |
|
655 | - #337 Fixes issues with validation of repository name conflicting with | |
579 | a group name. A proper message is now displayed. |
|
656 | a group name. A proper message is now displayed. | |
580 | - #292 made ldap_dn in user edit readonly, to get rid of confusion that field |
|
657 | - #292 made ldap_dn in user edit readonly, to get rid of confusion that field | |
581 |
doesn't work |
|
658 | doesn't work | |
582 |
- #316 fixes issues with web description in hgrc files |
|
659 | - #316 fixes issues with web description in hgrc files | |
583 |
|
660 | |||
584 | 1.2.3 (**2011-11-02**) |
|
661 | 1.2.3 (**2011-11-02**) | |
585 | ---------------------- |
|
662 | ---------------------- | |
@@ -587,21 +664,21 b' 1.2.3 (**2011-11-02**)' | |||||
587 | news |
|
664 | news | |
588 | ++++ |
|
665 | ++++ | |
589 |
|
666 | |||
590 | - added option to manage repos group for non admin users |
|
667 | - added option to manage repository group for non admin users | |
591 |
- added following API methods for get_users, create_user, get_users_groups, |
|
668 | - added following API methods for get_users, create_user, get_users_groups, | |
592 |
get_users_group, create_users_group, add_user_to_users_groups, get_repos, |
|
669 | get_users_group, create_users_group, add_user_to_users_groups, get_repos, | |
593 | get_repo, create_repo, add_user_to_repo |
|
670 | get_repo, create_repo, add_user_to_repo | |
594 |
- implements #237 added password confirmation for my account |
|
671 | - implements #237 added password confirmation for my account | |
595 | and admin edit user. |
|
672 | and admin edit user. | |
596 | - implements #291 email notification for global events are now sent to all |
|
673 | - implements #291 email notification for global events are now sent to all | |
597 | administrator users, and global config email. |
|
674 | administrator users, and global config email. | |
598 |
|
675 | |||
599 | fixes |
|
676 | fixes | |
600 | +++++ |
|
677 | +++++ | |
601 |
|
678 | |||
602 | - added option for passing auth method for smtp mailer |
|
679 | - added option for passing auth method for smtp mailer | |
603 | - #276 issue with adding a single user with id>10 to usergroups |
|
680 | - #276 issue with adding a single user with id>10 to usergroups | |
604 |
- #277 fixes windows LDAP settings in which missing values breaks the ldap auth |
|
681 | - #277 fixes windows LDAP settings in which missing values breaks the ldap auth | |
605 | - #288 fixes managing of repos in a group for non admin user |
|
682 | - #288 fixes managing of repos in a group for non admin user | |
606 |
|
683 | |||
607 | 1.2.2 (**2011-10-17**) |
|
684 | 1.2.2 (**2011-10-17**) | |
@@ -611,17 +688,17 b' news' | |||||
611 | ++++ |
|
688 | ++++ | |
612 |
|
689 | |||
613 | - #226 repo groups are available by path instead of numerical id |
|
690 | - #226 repo groups are available by path instead of numerical id | |
614 |
|
691 | |||
615 | fixes |
|
692 | fixes | |
616 | +++++ |
|
693 | +++++ | |
617 |
|
694 | |||
618 | - #259 Groups with the same name but with different parent group |
|
695 | - #259 Groups with the same name but with different parent group | |
619 | - #260 Put repo in group, then move group to another group -> repo becomes unavailable |
|
696 | - #260 Put repo in group, then move group to another group -> repo becomes unavailable | |
620 | - #258 RhodeCode 1.2 assumes egg folder is writable (lockfiles problems) |
|
697 | - #258 RhodeCode 1.2 assumes egg folder is writable (lockfiles problems) | |
621 |
- #265 ldap save fails sometimes on converting attributes to booleans, |
|
698 | - #265 ldap save fails sometimes on converting attributes to booleans, | |
622 | added getter and setter into model that will prevent from this on db model level |
|
699 | added getter and setter into model that will prevent from this on db model level | |
623 | - fixed problems with timestamps issues #251 and #213 |
|
700 | - fixed problems with timestamps issues #251 and #213 | |
624 |
- fixes #266 RhodeCode allows to create repo with the same name and in |
|
701 | - fixes #266 RhodeCode allows to create repo with the same name and in | |
625 | the same parent as group |
|
702 | the same parent as group | |
626 | - fixes #245 Rescan of the repositories on Windows |
|
703 | - fixes #245 Rescan of the repositories on Windows | |
627 | - fixes #248 cannot edit repos inside a group on windows |
|
704 | - fixes #248 cannot edit repos inside a group on windows | |
@@ -637,7 +714,7 b' news' | |||||
637 | fixes |
|
714 | fixes | |
638 | +++++ |
|
715 | +++++ | |
639 |
|
716 | |||
640 |
- fixed problems with basic auth and push problems |
|
717 | - fixed problems with basic auth and push problems | |
641 | - gui fixes |
|
718 | - gui fixes | |
642 | - fixed logger |
|
719 | - fixed logger | |
643 |
|
720 | |||
@@ -655,30 +732,30 b' news' | |||||
655 | - implemented #84 downloads can be enabled/disabled for each repository |
|
732 | - implemented #84 downloads can be enabled/disabled for each repository | |
656 | - anonymous repository can be cloned without having to pass default:default |
|
733 | - anonymous repository can be cloned without having to pass default:default | |
657 | into clone url |
|
734 | into clone url | |
658 |
- fixed #90 whoosh indexer can index chooses repositories passed in command |
|
735 | - fixed #90 whoosh indexer can index chooses repositories passed in command | |
659 | line |
|
736 | line | |
660 | - extended journal with day aggregates and paging |
|
737 | - extended journal with day aggregates and paging | |
661 | - implemented #107 source code lines highlight ranges |
|
738 | - implemented #107 source code lines highlight ranges | |
662 |
- implemented #93 customizable changelog on combined revision ranges - |
|
739 | - implemented #93 customizable changelog on combined revision ranges - | |
663 |
equivalent of githubs compare view |
|
740 | equivalent of githubs compare view | |
664 | - implemented #108 extended and more powerful LDAP configuration |
|
741 | - implemented #108 extended and more powerful LDAP configuration | |
665 |
- implemented #56 user |
|
742 | - implemented #56 user groups | |
666 | - major code rewrites optimized codes for speed and memory usage |
|
743 | - major code rewrites optimized codes for speed and memory usage | |
667 | - raw and diff downloads are now in git format |
|
744 | - raw and diff downloads are now in git format | |
668 | - setup command checks for write access to given path |
|
745 | - setup command checks for write access to given path | |
669 | - fixed many issues with international characters and unicode. It uses utf8 |
|
746 | - fixed many issues with international characters and unicode. It uses utf8 | |
670 | decode with replace to provide less errors even with non utf8 encoded strings |
|
747 | decode with replace to provide less errors even with non utf8 encoded strings | |
671 | - #125 added API KEY access to feeds |
|
748 | - #125 added API KEY access to feeds | |
672 |
- #109 Repository can be created from external Mercurial link (aka. remote |
|
749 | - #109 Repository can be created from external Mercurial link (aka. remote | |
673 | repository, and manually updated (via pull) from admin panel |
|
750 | repository, and manually updated (via pull) from admin panel | |
674 | - beta git support - push/pull server + basic view for git repos |
|
751 | - beta git support - push/pull server + basic view for git repos | |
675 | - added followers page and forks page |
|
752 | - added followers page and forks page | |
676 |
- server side file creation (with binary file upload interface) |
|
753 | - server side file creation (with binary file upload interface) | |
677 |
and edition with commits powered by codemirror |
|
754 | and edition with commits powered by codemirror | |
678 |
- #111 file browser file finder, quick lookup files on whole file tree |
|
755 | - #111 file browser file finder, quick lookup files on whole file tree | |
679 | - added quick login sliding menu into main page |
|
756 | - added quick login sliding menu into main page | |
680 |
- changelog uses lazy loading of affected files details, in some scenarios |
|
757 | - changelog uses lazy loading of affected files details, in some scenarios | |
681 |
this can improve speed of changelog page dramatically especially for |
|
758 | this can improve speed of changelog page dramatically especially for | |
682 | larger repositories. |
|
759 | larger repositories. | |
683 | - implements #214 added support for downloading subrepos in download menu. |
|
760 | - implements #214 added support for downloading subrepos in download menu. | |
684 | - Added basic API for direct operations on rhodecode via JSON |
|
761 | - Added basic API for direct operations on rhodecode via JSON | |
@@ -687,7 +764,7 b' news' | |||||
687 | fixes |
|
764 | fixes | |
688 | +++++ |
|
765 | +++++ | |
689 |
|
766 | |||
690 |
- fixed file browser bug, when switching into given form revision the url was |
|
767 | - fixed file browser bug, when switching into given form revision the url was | |
691 | not changing |
|
768 | not changing | |
692 | - fixed propagation to error controller on simplehg and simplegit middlewares |
|
769 | - fixed propagation to error controller on simplehg and simplegit middlewares | |
693 | - fixed error when trying to make a download on empty repository |
|
770 | - fixed error when trying to make a download on empty repository | |
@@ -696,8 +773,8 b' fixes' | |||||
696 | - journal fork fixes |
|
773 | - journal fork fixes | |
697 | - removed issue with space inside renamed repository after deletion |
|
774 | - removed issue with space inside renamed repository after deletion | |
698 | - fixed strange issue on formencode imports |
|
775 | - fixed strange issue on formencode imports | |
699 |
- fixed #126 Deleting repository on Windows, rename used incompatible chars. |
|
776 | - fixed #126 Deleting repository on Windows, rename used incompatible chars. | |
700 |
- #150 fixes for errors on repositories mapped in db but corrupted in |
|
777 | - #150 fixes for errors on repositories mapped in db but corrupted in | |
701 | filesystem |
|
778 | filesystem | |
702 | - fixed problem with ascendant characters in realm #181 |
|
779 | - fixed problem with ascendant characters in realm #181 | |
703 | - fixed problem with sqlite file based database connection pool |
|
780 | - fixed problem with sqlite file based database connection pool | |
@@ -707,12 +784,12 b' fixes' | |||||
707 | - fixes issue #197 Relative paths for pidlocks |
|
784 | - fixes issue #197 Relative paths for pidlocks | |
708 | - fixes issue #198 password will require only 3 chars now for login form |
|
785 | - fixes issue #198 password will require only 3 chars now for login form | |
709 | - fixes issue #199 wrong redirection for non admin users after creating a repository |
|
786 | - fixes issue #199 wrong redirection for non admin users after creating a repository | |
710 |
- fixes issues #202, bad db constraint made impossible to attach same group |
|
787 | - fixes issues #202, bad db constraint made impossible to attach same group | |
711 | more than one time. Affects only mysql/postgres |
|
788 | more than one time. Affects only mysql/postgres | |
712 | - fixes #218 os.kill patch for windows was missing sig param |
|
789 | - fixes #218 os.kill patch for windows was missing sig param | |
713 |
- improved rendering of dag (they are not trimmed anymore when number of |
|
790 | - improved rendering of dag (they are not trimmed anymore when number of | |
714 | heads exceeds 5) |
|
791 | heads exceeds 5) | |
715 |
|
792 | |||
716 | 1.1.8 (**2011-04-12**) |
|
793 | 1.1.8 (**2011-04-12**) | |
717 | ---------------------- |
|
794 | ---------------------- | |
718 |
|
795 | |||
@@ -739,7 +816,7 b' fixes' | |||||
739 | - fixed problems with displaying binary files, thanks to Thomas Waldmann |
|
816 | - fixed problems with displaying binary files, thanks to Thomas Waldmann | |
740 | - removed name from archive files since it's breaking ui for long repo names |
|
817 | - removed name from archive files since it's breaking ui for long repo names | |
741 | - fixed issue with archive headers sent to browser, thanks to Thomas Waldmann |
|
818 | - fixed issue with archive headers sent to browser, thanks to Thomas Waldmann | |
742 |
- fixed compatibility for 1024px displays, and larger dpi settings, thanks to |
|
819 | - fixed compatibility for 1024px displays, and larger dpi settings, thanks to | |
743 | Thomas Waldmann |
|
820 | Thomas Waldmann | |
744 | - fixed issue #166 summary pager was skipping 10 revisions on second page |
|
821 | - fixed issue #166 summary pager was skipping 10 revisions on second page | |
745 |
|
822 | |||
@@ -783,8 +860,8 b' fixes' | |||||
783 | - fixed sorting by author in main page |
|
860 | - fixed sorting by author in main page | |
784 | - fixed crashes with diffs on binary files |
|
861 | - fixed crashes with diffs on binary files | |
785 | - fixed #131 problem with boolean values for LDAP |
|
862 | - fixed #131 problem with boolean values for LDAP | |
786 |
- fixed #122 mysql problems thanks to striker69 |
|
863 | - fixed #122 mysql problems thanks to striker69 | |
787 |
- fixed problem with errors on calling raw/raw_files/annotate functions |
|
864 | - fixed problem with errors on calling raw/raw_files/annotate functions | |
788 | with unknown revisions |
|
865 | with unknown revisions | |
789 | - fixed returned rawfiles attachment names with international character |
|
866 | - fixed returned rawfiles attachment names with international character | |
790 | - cleaned out docs, big thanks to Jason Harris |
|
867 | - cleaned out docs, big thanks to Jason Harris | |
@@ -801,7 +878,7 b' fixes' | |||||
801 | - fixed formencode import problem on settings page, that caused server crash |
|
878 | - fixed formencode import problem on settings page, that caused server crash | |
802 | when that page was accessed as first after server start |
|
879 | when that page was accessed as first after server start | |
803 | - journal fixes |
|
880 | - journal fixes | |
804 |
- fixed option to access repository just by entering http://server/<repo_name> |
|
881 | - fixed option to access repository just by entering http://server/<repo_name> | |
805 |
|
882 | |||
806 | 1.1.3 (**2011-02-16**) |
|
883 | 1.1.3 (**2011-02-16**) | |
807 | ---------------------- |
|
884 | ---------------------- | |
@@ -816,11 +893,11 b' news' | |||||
816 | fixes |
|
893 | fixes | |
817 | +++++ |
|
894 | +++++ | |
818 |
|
895 | |||
819 |
- fixed ehlo command and non auth mail servers on smtp_lib. Thanks to |
|
896 | - fixed ehlo command and non auth mail servers on smtp_lib. Thanks to | |
820 | apollo13 and Johan Walles |
|
897 | apollo13 and Johan Walles | |
821 | - small fixes in journal |
|
898 | - small fixes in journal | |
822 | - fixed problems with getting setting for celery from .ini files |
|
899 | - fixed problems with getting setting for celery from .ini files | |
823 |
- registration, password reset and login boxes share the same title as main |
|
900 | - registration, password reset and login boxes share the same title as main | |
824 | application now |
|
901 | application now | |
825 | - fixed #113: to high permissions to fork repository |
|
902 | - fixed #113: to high permissions to fork repository | |
826 | - fixed problem with '[' chars in commit messages in journal |
|
903 | - fixed problem with '[' chars in commit messages in journal | |
@@ -841,11 +918,11 b' fixes' | |||||
841 |
|
918 | |||
842 | - fixes #98 protection against float division of percentage stats |
|
919 | - fixes #98 protection against float division of percentage stats | |
843 | - fixed graph bug |
|
920 | - fixed graph bug | |
844 |
- forced webhelpers version since it was making troubles during installation |
|
921 | - forced webhelpers version since it was making troubles during installation | |
845 |
|
922 | |||
846 | 1.1.1 (**2011-01-06**) |
|
923 | 1.1.1 (**2011-01-06**) | |
847 | ---------------------- |
|
924 | ---------------------- | |
848 |
|
925 | |||
849 | news |
|
926 | news | |
850 | ++++ |
|
927 | ++++ | |
851 |
|
928 | |||
@@ -869,10 +946,10 b' news' | |||||
869 | ++++ |
|
946 | ++++ | |
870 |
|
947 | |||
871 | - rewrite of internals for vcs >=0.1.10 |
|
948 | - rewrite of internals for vcs >=0.1.10 | |
872 |
- uses mercurial 1.7 with dotencode disabled for maintaining compatibility |
|
949 | - uses mercurial 1.7 with dotencode disabled for maintaining compatibility | |
873 | with older clients |
|
950 | with older clients | |
874 | - anonymous access, authentication via ldap |
|
951 | - anonymous access, authentication via ldap | |
875 |
- performance upgrade for cached repos list - each repository has its own |
|
952 | - performance upgrade for cached repos list - each repository has its own | |
876 | cache that's invalidated when needed. |
|
953 | cache that's invalidated when needed. | |
877 | - performance upgrades on repositories with large amount of commits (20K+) |
|
954 | - performance upgrades on repositories with large amount of commits (20K+) | |
878 | - main page quick filter for filtering repositories |
|
955 | - main page quick filter for filtering repositories | |
@@ -882,7 +959,7 b' news' | |||||
882 | - more detailed action logger (based on hooks) with pushed changesets lists |
|
959 | - more detailed action logger (based on hooks) with pushed changesets lists | |
883 | and options to disable those hooks from admin panel |
|
960 | and options to disable those hooks from admin panel | |
884 | - introduced new enhanced changelog for merges that shows more accurate results |
|
961 | - introduced new enhanced changelog for merges that shows more accurate results | |
885 |
- new improved and faster code stats (based on pygments lexers mapping tables, |
|
962 | - new improved and faster code stats (based on pygments lexers mapping tables, | |
886 | showing up to 10 trending sources for each repository. Additionally stats |
|
963 | showing up to 10 trending sources for each repository. Additionally stats | |
887 | can be disabled in repository settings. |
|
964 | can be disabled in repository settings. | |
888 | - gui optimizations, fixed application width to 1024px |
|
965 | - gui optimizations, fixed application width to 1024px | |
@@ -903,10 +980,10 b' fixes' | |||||
903 | - a lot of fixes and tweaks for file browser |
|
980 | - a lot of fixes and tweaks for file browser | |
904 | - fixed detached session issues |
|
981 | - fixed detached session issues | |
905 | - fixed when user had no repos he would see all repos listed in my account |
|
982 | - fixed when user had no repos he would see all repos listed in my account | |
906 |
- fixed ui() instance bug when global hgrc settings was loaded for server |
|
983 | - fixed ui() instance bug when global hgrc settings was loaded for server | |
907 | instance and all hgrc options were merged with our db ui() object |
|
984 | instance and all hgrc options were merged with our db ui() object | |
908 | - numerous small bugfixes |
|
985 | - numerous small bugfixes | |
909 |
|
986 | |||
910 | (special thanks for TkSoh for detailed feedback) |
|
987 | (special thanks for TkSoh for detailed feedback) | |
911 |
|
988 | |||
912 |
|
989 | |||
@@ -971,6 +1048,6 b' 1.0.0rc3 (**2010-10-11**)' | |||||
971 | 1.0.0rc2 (**2010-10-11**) |
|
1048 | 1.0.0rc2 (**2010-10-11**) | |
972 | ------------------------- |
|
1049 | ------------------------- | |
973 |
|
1050 | |||
974 |
- Disabled dirsize in file browser, it's causing nasty bug when dir renames |
|
1051 | - Disabled dirsize in file browser, it's causing nasty bug when dir renames | |
975 | occure. After vcs is fixed it'll be put back again. |
|
1052 | occure. After vcs is fixed it'll be put back again. | |
976 | - templating/css rewrites, optimized css. |
|
1053 | - templating/css rewrites, optimized css. |
@@ -10,9 +10,9 b' greatly appreciated!' | |||||
10 | Could I request that you make your source contributions by first forking the |
|
10 | Could I request that you make your source contributions by first forking the | |
11 | RhodeCode repository on bitbucket_ |
|
11 | RhodeCode repository on bitbucket_ | |
12 | https://bitbucket.org/marcinkuzminski/rhodecode and then make your changes to |
|
12 | https://bitbucket.org/marcinkuzminski/rhodecode and then make your changes to | |
13 |
your forked repository. Please post all fixes into **BETA** branch since your |
|
13 | your forked repository. Please post all fixes into **BETA** branch since your | |
14 | fix might be already fixed there and i try to merge all fixes from beta into |
|
14 | fix might be already fixed there and i try to merge all fixes from beta into | |
15 |
stable, and not the other way. Finally, when you are finished making a change, |
|
15 | stable, and not the other way. Finally, when you are finished making a change, | |
16 | please send me a pull request. |
|
16 | please send me a pull request. | |
17 |
|
17 | |||
18 | To run RhodeCode in a development version you always need to install the latest |
|
18 | To run RhodeCode in a development version you always need to install the latest | |
@@ -22,7 +22,7 b' after downloading/pulling RhodeCode make' | |||||
22 |
|
22 | |||
23 | python setup.py develop |
|
23 | python setup.py develop | |
24 |
|
24 | |||
25 |
command to install/verify all required packages, and prepare development |
|
25 | command to install/verify all required packages, and prepare development | |
26 | enviroment. |
|
26 | enviroment. | |
27 |
|
27 | |||
28 |
|
28 |
@@ -13,7 +13,7 b' Users Guide' | |||||
13 | installation |
|
13 | installation | |
14 | setup |
|
14 | setup | |
15 | upgrade |
|
15 | upgrade | |
16 |
|
16 | |||
17 | **Usage** |
|
17 | **Usage** | |
18 |
|
18 | |||
19 | .. toctree:: |
|
19 | .. toctree:: | |
@@ -33,7 +33,7 b' Users Guide' | |||||
33 |
|
33 | |||
34 | .. toctree:: |
|
34 | .. toctree:: | |
35 | :maxdepth: 1 |
|
35 | :maxdepth: 1 | |
36 |
|
36 | |||
37 | contributing |
|
37 | contributing | |
38 | changelog |
|
38 | changelog | |
39 |
|
39 | |||
@@ -44,7 +44,7 b' Users Guide' | |||||
44 |
|
44 | |||
45 | api/api |
|
45 | api/api | |
46 | api/models |
|
46 | api/models | |
47 |
|
47 | |||
48 |
|
48 | |||
49 | Other topics |
|
49 | Other topics | |
50 | ------------ |
|
50 | ------------ | |
@@ -61,4 +61,4 b' Other topics' | |||||
61 | .. _git: http://git-scm.com/ |
|
61 | .. _git: http://git-scm.com/ | |
62 | .. _celery: http://celeryproject.org/ |
|
62 | .. _celery: http://celeryproject.org/ | |
63 | .. _Sphinx: http://sphinx.pocoo.org/ |
|
63 | .. _Sphinx: http://sphinx.pocoo.org/ | |
64 | .. _vcs: http://pypi.python.org/pypi/vcs No newline at end of file |
|
64 | .. _vcs: http://pypi.python.org/pypi/vcs |
@@ -4,8 +4,8 b'' | |||||
4 | Installation |
|
4 | Installation | |
5 | ============ |
|
5 | ============ | |
6 |
|
6 | |||
7 |
``RhodeCode`` is written entirely in Python. Before posting any issues make |
|
7 | ``RhodeCode`` is written entirely in Python. Before posting any issues make | |
8 |
sure, your not missing any system libraries and using right version of |
|
8 | sure, your not missing any system libraries and using right version of | |
9 | libraries required by RhodeCode. There's also restriction in terms of mercurial |
|
9 | libraries required by RhodeCode. There's also restriction in terms of mercurial | |
10 | clients. Minimal version of hg client known working fine with RhodeCode is |
|
10 | clients. Minimal version of hg client known working fine with RhodeCode is | |
11 | **1.6**. If you're using older client, please upgrade. |
|
11 | **1.6**. If you're using older client, please upgrade. | |
@@ -41,14 +41,14 b' Step by step installation example for Li' | |||||
41 |
|
41 | |||
42 | For installing RhodeCode i highly recommend using separate virtualenv_. This |
|
42 | For installing RhodeCode i highly recommend using separate virtualenv_. This | |
43 | way many required by RhodeCode libraries will remain sandboxed from your main |
|
43 | way many required by RhodeCode libraries will remain sandboxed from your main | |
44 |
python and making things less problematic when doing system python updates. |
|
44 | python and making things less problematic when doing system python updates. | |
45 |
|
45 | |||
46 | Alternative very detailed installation instructions for Ubuntu Server with |
|
46 | Alternative very detailed installation instructions for Ubuntu Server with | |
47 | celery, indexer and daemon scripts: https://gist.github.com/4546398 |
|
47 | celery, indexer and daemon scripts: https://gist.github.com/4546398 | |
48 |
|
48 | |||
49 |
|
49 | |||
50 |
- Assuming you have installed virtualenv_ create a new virtual environment |
|
50 | - Assuming you have installed virtualenv_ create a new virtual environment | |
51 |
using virtualenv command:: |
|
51 | using virtualenv command:: | |
52 |
|
|
52 | ||
53 | virtualenv --no-site-packages /opt/rhodecode-venv |
|
53 | virtualenv --no-site-packages /opt/rhodecode-venv | |
54 |
|
54 | |||
@@ -63,7 +63,7 b' celery, indexer and daemon scripts: http' | |||||
63 | Python's "main" site-packages dir. |
|
63 | Python's "main" site-packages dir. | |
64 |
|
64 | |||
65 |
|
65 | |||
66 |
- this will install new virtualenv_ into `/opt/rhodecode-venv`. |
|
66 | - this will install new virtualenv_ into `/opt/rhodecode-venv`. | |
67 | - Activate the virtualenv_ by running:: |
|
67 | - Activate the virtualenv_ by running:: | |
68 |
|
68 | |||
69 | source /opt/rhodecode-venv/bin/activate |
|
69 | source /opt/rhodecode-venv/bin/activate | |
@@ -71,52 +71,52 b' celery, indexer and daemon scripts: http' | |||||
71 | .. note:: If you're using UNIX, *do not* use ``sudo`` to run the |
|
71 | .. note:: If you're using UNIX, *do not* use ``sudo`` to run the | |
72 | ``virtualenv`` script. It's perfectly acceptable (and desirable) |
|
72 | ``virtualenv`` script. It's perfectly acceptable (and desirable) | |
73 | to create a virtualenv as a normal user. |
|
73 | to create a virtualenv as a normal user. | |
74 |
|
74 | |||
75 |
- Make a folder for rhodecode data files, and configuration somewhere on the |
|
75 | - Make a folder for rhodecode data files, and configuration somewhere on the | |
76 | filesystem. For example:: |
|
76 | filesystem. For example:: | |
77 |
|
77 | |||
78 | mkdir /opt/rhodecode |
|
78 | mkdir /opt/rhodecode | |
79 |
|
79 | |||
80 |
|
80 | |||
81 | - Go into the created directory run this command to install rhodecode:: |
|
81 | - Go into the created directory run this command to install rhodecode:: | |
82 |
|
82 | |||
83 | easy_install rhodecode |
|
83 | easy_install rhodecode | |
84 |
|
84 | |||
85 | or:: |
|
85 | or:: | |
86 |
|
||||
87 | pip install rhodecode |
|
|||
88 |
|
|
86 | ||
89 | - This will install rhodecode together with pylons and all other required |
|
87 | pip install rhodecode | |
|
88 | ||||
|
89 | - This will install rhodecode together with pylons and all other required | |||
90 | python libraries into activated virtualenv |
|
90 | python libraries into activated virtualenv | |
91 |
|
91 | |||
92 | Requirements for Celery (optional) |
|
92 | Requirements for Celery (optional) | |
93 | ---------------------------------- |
|
93 | ---------------------------------- | |
94 |
|
94 | |||
95 | In order to gain maximum performance |
|
95 | In order to gain maximum performance | |
96 |
there are some third-party you must install. When RhodeCode is used |
|
96 | there are some third-party you must install. When RhodeCode is used | |
97 | together with celery you have to install some kind of message broker, |
|
97 | together with celery you have to install some kind of message broker, | |
98 | recommended one is rabbitmq_ to make the async tasks work. |
|
98 | recommended one is rabbitmq_ to make the async tasks work. | |
99 |
|
99 | |||
100 | Of course RhodeCode works in sync mode also and then you do not have to install |
|
100 | Of course RhodeCode works in sync mode also and then you do not have to install | |
101 |
any third party applications. However, using Celery_ will give you a large |
|
101 | any third party applications. However, using Celery_ will give you a large | |
102 |
speed improvement when using many big repositories. If you plan to use |
|
102 | speed improvement when using many big repositories. If you plan to use | |
103 |
RhodeCode for say 7 to 10 repositories, RhodeCode will perform perfectly well |
|
103 | RhodeCode for say 7 to 10 repositories, RhodeCode will perform perfectly well | |
104 | without celery running. |
|
104 | without celery running. | |
105 |
|
105 | |||
106 |
If you make the decision to run RhodeCode with celery make sure you run |
|
106 | If you make the decision to run RhodeCode with celery make sure you run | |
107 |
celeryd using paster and message broker together with the application. |
|
107 | celeryd using paster and message broker together with the application. | |
108 |
|
108 | |||
109 | .. note:: |
|
109 | .. note:: | |
110 | Installing message broker and using celery is optional, RhodeCode will |
|
110 | Installing message broker and using celery is optional, RhodeCode will | |
111 | work perfectly fine without them. |
|
111 | work perfectly fine without them. | |
112 |
|
112 | |||
113 |
|
113 | |||
114 |
**Message Broker** |
|
114 | **Message Broker** | |
115 |
|
115 | |||
116 | - preferred is `RabbitMq <http://www.rabbitmq.com/>`_ |
|
116 | - preferred is `RabbitMq <http://www.rabbitmq.com/>`_ | |
117 | - A possible alternative is `Redis <http://code.google.com/p/redis/>`_ |
|
117 | - A possible alternative is `Redis <http://code.google.com/p/redis/>`_ | |
118 |
|
118 | |||
119 |
For installation instructions you can visit: |
|
119 | For installation instructions you can visit: | |
120 | http://ask.github.com/celery/getting-started/index.html. |
|
120 | http://ask.github.com/celery/getting-started/index.html. | |
121 | This is a very nice tutorial on how to start using celery_ with rabbitmq_ |
|
121 | This is a very nice tutorial on how to start using celery_ with rabbitmq_ | |
122 |
|
122 | |||
@@ -126,7 +126,7 b' You can now proceed to :ref:`setup`' | |||||
126 |
|
126 | |||
127 |
|
127 | |||
128 |
|
128 | |||
129 |
.. _virtualenv: http://pypi.python.org/pypi/virtualenv |
|
129 | .. _virtualenv: http://pypi.python.org/pypi/virtualenv | |
130 | .. _python: http://www.python.org/ |
|
130 | .. _python: http://www.python.org/ | |
131 | .. _mercurial: http://mercurial.selenic.com/ |
|
131 | .. _mercurial: http://mercurial.selenic.com/ | |
132 | .. _celery: http://celeryproject.org/ |
|
132 | .. _celery: http://celeryproject.org/ |
@@ -47,7 +47,7 b' choose "Visual C++ 2008 Express" when in' | |||||
47 | required, you can uncheck them |
|
47 | required, you can uncheck them | |
48 |
|
48 | |||
49 | .. note:: |
|
49 | .. note:: | |
50 |
|
50 | |||
51 | 64bit: You also need to install the Microsoft Windows SDK for .NET 3.5 SP1 (.NET 4.0 won't work). |
|
51 | 64bit: You also need to install the Microsoft Windows SDK for .NET 3.5 SP1 (.NET 4.0 won't work). | |
52 | Download from: http://www.microsoft.com/en-us/download/details.aspx?id=3138 |
|
52 | Download from: http://www.microsoft.com/en-us/download/details.aspx?id=3138 | |
53 |
|
53 | |||
@@ -90,7 +90,7 b' http://sourceforge.net/projects/pywin32/' | |||||
90 | .. note:: |
|
90 | .. note:: | |
91 |
|
91 | |||
92 | 64bit: Download and install the 64bit version. |
|
92 | 64bit: Download and install the 64bit version. | |
93 |
At the time of writing you can find this at: |
|
93 | At the time of writing you can find this at: | |
94 | http://sourceforge.net/projects/pywin32/files/pywin32/Build%20218/pywin32-218.win-amd64-py2.7.exe/download |
|
94 | http://sourceforge.net/projects/pywin32/files/pywin32/Build%20218/pywin32-218.win-amd64-py2.7.exe/download | |
95 |
|
95 | |||
96 | Step4 - Python BIN |
|
96 | Step4 - Python BIN |
@@ -478,7 +478,7 b' Changing default encoding' | |||||
478 |
|
478 | |||
479 | By default RhodeCode uses utf8 encoding, starting from 1.3 series this |
|
479 | By default RhodeCode uses utf8 encoding, starting from 1.3 series this | |
480 | can be changed, simply edit default_encoding in .ini file to desired one. |
|
480 | can be changed, simply edit default_encoding in .ini file to desired one. | |
481 | This affects many parts in rhodecode including commiters names, filenames, |
|
481 | This affects many parts in rhodecode including committers names, filenames, | |
482 | encoding of commit messages. In addition RhodeCode can detect if `chardet` |
|
482 | encoding of commit messages. In addition RhodeCode can detect if `chardet` | |
483 | library is installed. If `chardet` is detected RhodeCode will fallback to it |
|
483 | library is installed. If `chardet` is detected RhodeCode will fallback to it | |
484 | when there are encode/decode errors. |
|
484 | when there are encode/decode errors. | |
@@ -652,7 +652,7 b' Add the following at the end of the .ini' | |||||
652 | prefix = /<someprefix> |
|
652 | prefix = /<someprefix> | |
653 |
|
653 | |||
654 |
|
654 | |||
655 |
then change <someprefix> into your cho |
|
655 | then change <someprefix> into your chosen prefix | |
656 |
|
656 | |||
657 | Apache's WSGI config |
|
657 | Apache's WSGI config | |
658 | -------------------- |
|
658 | -------------------- |
@@ -3,16 +3,16 b'' | |||||
3 | {% block sidebarlogo %} |
|
3 | {% block sidebarlogo %} | |
4 | <h3>Support RhodeCode development.</h3> |
|
4 | <h3>Support RhodeCode development.</h3> | |
5 | <div style="text-align:center"> |
|
5 | <div style="text-align:center"> | |
6 |
|
|
6 | <form action="https://www.paypal.com/cgi-bin/webscr" method="post"> | |
7 |
|
|
7 | <input type="hidden" name="cmd" value="_s-xclick"> | |
8 |
|
|
8 | <input type="hidden" name="hosted_button_id" value="8U2LLRPLBKWDU"> | |
9 |
|
|
9 | <input style="border:0px !important" type="image" src="https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif" | |
10 |
|
|
10 | border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"> | |
11 |
|
|
11 | <img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1"> | |
12 |
|
|
12 | </form> | |
13 | <div style="padding:5px"> |
|
13 | <div style="padding:5px"> | |
14 | <a href="http://flattr.com/thing/167489/RhodeCode" target="_blank"> |
|
14 | <a href="http://flattr.com/thing/167489/RhodeCode" target="_blank"> | |
15 | <img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /></a> |
|
15 | <img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /></a> | |
16 | </div> |
|
16 | </div> | |
17 | </div> |
|
17 | </div> | |
18 | {% endblock %}} |
|
18 | {% endblock %}} |
@@ -51,4 +51,4 b'' | |||||
51 | .vc { color: #ff99ff } /* Name.Variable.Class */ |
|
51 | .vc { color: #ff99ff } /* Name.Variable.Class */ | |
52 | .vg { color: #ff99ff } /* Name.Variable.Global */ |
|
52 | .vg { color: #ff99ff } /* Name.Variable.Global */ | |
53 | .vi { color: #ff99ff } /* Name.Variable.Instance */ |
|
53 | .vi { color: #ff99ff } /* Name.Variable.Instance */ | |
54 | .il { color: #009999 } /* Literal.Number.Integer.Long */ No newline at end of file |
|
54 | .il { color: #009999 } /* Literal.Number.Integer.Long */ |
@@ -23,4 +23,4 b' Database' | |||||
23 | When using sqlite just copy rhodecode.db. |
|
23 | When using sqlite just copy rhodecode.db. | |
24 | Any other database engine requires a manual backup operation. |
|
24 | Any other database engine requires a manual backup operation. | |
25 |
|
25 | |||
26 | Database backup will contain all gathered statistics No newline at end of file |
|
26 | Database backup will contain all gathered statistics |
@@ -14,7 +14,7 b' enable detailed debug' | |||||
14 |
|
14 | |||
15 | RhodeCode uses standard python logging modules to log it's output. |
|
15 | RhodeCode uses standard python logging modules to log it's output. | |
16 | By default only loggers with INFO level are displayed. To enable full output |
|
16 | By default only loggers with INFO level are displayed. To enable full output | |
17 |
change `level = DEBUG` for all logging handlers in currently used .ini file. |
|
17 | change `level = DEBUG` for all logging handlers in currently used .ini file. | |
18 | This change will allow to see much more detailed output in the logfile or |
|
18 | This change will allow to see much more detailed output in the logfile or | |
19 | console. This generally helps a lot to track issues. |
|
19 | console. This generally helps a lot to track issues. | |
20 |
|
20 |
@@ -38,7 +38,7 b' Compare view from changelog' | |||||
38 | Checkboxes in compare view allow users to view combined compare view. You can |
|
38 | Checkboxes in compare view allow users to view combined compare view. You can | |
39 | only show the range between the first and last checkbox (no cherry pick). |
|
39 | only show the range between the first and last checkbox (no cherry pick). | |
40 | Clicking more than one checkbox will activate a link in top saying |
|
40 | Clicking more than one checkbox will activate a link in top saying | |
41 | `Show selected changes <from-rev> -> <to-rev>` clicking this will bring |
|
41 | `Show selected changesets <from-rev> -> <to-rev>` clicking this will bring | |
42 | compare view. In this view also it's possible to switch to combined compare. |
|
42 | compare view. In this view also it's possible to switch to combined compare. | |
43 |
|
43 | |||
44 | Compare view is also available from the journal on pushes having more than |
|
44 | Compare view is also available from the journal on pushes having more than | |
@@ -105,7 +105,7 b' Currently it support following options:' | |||||
105 |
|
105 | |||
106 | .. note:: |
|
106 | .. note:: | |
107 |
|
107 | |||
108 |
|
|
108 | - *`svn -> hg` cloning requires `hgsubversion` library to be installed.* | |
109 |
|
109 | |||
110 | If you need to clone repositories that are protected via basic auth, you |
|
110 | If you need to clone repositories that are protected via basic auth, you | |
111 | might pass the url with stored credentials inside eg. |
|
111 | might pass the url with stored credentials inside eg. |
@@ -11,10 +11,10 b' client installed on the machine to make ' | |||||
11 | Although There is one limitation on git usage. |
|
11 | Although There is one limitation on git usage. | |
12 |
|
12 | |||
13 | - large pushes requires a http server with chunked encoding support. |
|
13 | - large pushes requires a http server with chunked encoding support. | |
14 |
|
14 | |||
15 | if you plan to use git you need to run RhodeCode with some |
|
15 | if you plan to use git you need to run RhodeCode with some | |
16 |
http server that supports chunked encoding which git http protocol uses, |
|
16 | http server that supports chunked encoding which git http protocol uses, | |
17 |
i recommend using waitress_ or gunicorn_ (linux only) for `paste` wsgi app |
|
17 | i recommend using waitress_ or gunicorn_ (linux only) for `paste` wsgi app | |
18 | replacement. Starting from version 1.4 waitress_ is the default wsgi server |
|
18 | replacement. Starting from version 1.4 waitress_ is the default wsgi server | |
19 | used in RhodeCode. |
|
19 | used in RhodeCode. | |
20 |
|
20 | |||
@@ -23,33 +23,33 b' To use, simply change change the followi' | |||||
23 | use = egg:Paste#http |
|
23 | use = egg:Paste#http | |
24 |
|
24 | |||
25 | to:: |
|
25 | to:: | |
26 |
|
26 | |||
27 | use = egg:waitress#main |
|
27 | use = egg:waitress#main | |
28 |
|
28 | |||
29 | or:: |
|
29 | or:: | |
30 |
|
30 | |||
31 | use = egg:gunicorn#main |
|
31 | use = egg:gunicorn#main | |
32 |
|
32 | |||
33 |
|
33 | |||
34 | And comment out bellow options:: |
|
34 | And comment out bellow options:: | |
35 |
|
35 | |||
36 |
threadpool_workers = |
|
36 | threadpool_workers = | |
37 |
threadpool_max_requests = |
|
37 | threadpool_max_requests = | |
38 |
use_threadpool = |
|
38 | use_threadpool = | |
39 |
|
39 | |||
40 |
|
40 | |||
41 | You can simply run `paster serve` as usual. |
|
41 | You can simply run `paster serve` as usual. | |
42 |
|
42 | |||
43 |
|
43 | |||
44 |
You can always disable git/hg support by editing a |
|
44 | You can always disable git/hg support by editing a | |
45 | file **rhodecode/__init__.py** and commenting out backends |
|
45 | file **rhodecode/__init__.py** and commenting out backends | |
46 |
|
46 | |||
47 | .. code-block:: python |
|
47 | .. code-block:: python | |
48 |
|
48 | |||
49 | BACKENDS = { |
|
49 | BACKENDS = { | |
50 | 'hg': 'Mercurial repository', |
|
50 | 'hg': 'Mercurial repository', | |
51 | #'git': 'Git repository', |
|
51 | #'git': 'Git repository', | |
52 | } |
|
52 | } | |
53 |
|
53 | |||
54 | .. _waitress: http://pypi.python.org/pypi/waitress |
|
54 | .. _waitress: http://pypi.python.org/pypi/waitress | |
55 | .. _gunicorn: http://pypi.python.org/pypi/gunicorn No newline at end of file |
|
55 | .. _gunicorn: http://pypi.python.org/pypi/gunicorn |
@@ -5,37 +5,37 b' RhodeCode repository locking system' | |||||
5 | =================================== |
|
5 | =================================== | |
6 |
|
6 | |||
7 |
|
7 | |||
8 |
| Repos with **locking function=disabled** is the default, that's how repos work |
|
8 | | Repos with **locking function=disabled** is the default, that's how repos work | |
9 | today. |
|
9 | today. | |
10 | | Repos with **locking function=enabled** behaves like follows: |
|
10 | | Repos with **locking function=enabled** behaves like follows: | |
11 |
|
11 | |||
12 | Repos have a state called `locked` that can be true or false. |
|
12 | Repos have a state called `locked` that can be true or false. | |
13 |
The hg/git commands `hg/git clone`, `hg/git pull`, and `hg/git push` |
|
13 | The hg/git commands `hg/git clone`, `hg/git pull`, and `hg/git push` | |
14 | influence this state: |
|
14 | influence this state: | |
15 |
|
15 | |||
16 |
- The command `hg/git pull <repo>` will lock that repo (locked=true) |
|
16 | - The command `hg/git pull <repo>` will lock that repo (locked=true) | |
17 | if the user has write/admin permissions on this repo |
|
17 | if the user has write/admin permissions on this repo | |
18 |
|
18 | |||
19 |
- The command `hg/git clone <repo>` will lock that repo (locked=true) if the |
|
19 | - The command `hg/git clone <repo>` will lock that repo (locked=true) if the | |
20 | user has write/admin permissions on this repo |
|
20 | user has write/admin permissions on this repo | |
21 |
|
21 | |||
22 |
|
22 | |||
23 | RhodeCode will remember the user id who locked the repo |
|
23 | RhodeCode will remember the user id who locked the repo | |
24 |
only this specific user can unlock the repo (locked=false) by calling |
|
24 | only this specific user can unlock the repo (locked=false) by calling | |
25 |
|
25 | |||
26 |
- `hg/git push <repo>` |
|
26 | - `hg/git push <repo>` | |
27 |
|
27 | |||
28 |
every other command on that repo from this user and |
|
28 | every other command on that repo from this user and | |
29 | every command from any other user will result in http return code 423 (locked) |
|
29 | every command from any other user will result in http return code 423 (locked) | |
30 |
|
30 | |||
31 |
|
31 | |||
32 |
additionally the http error includes the <user> that locked the repo |
|
32 | additionally the http error includes the <user> that locked the repo | |
33 | (e.g. “repository <repo> locked by user <user>”) |
|
33 | (e.g. “repository <repo> locked by user <user>”) | |
34 |
|
34 | |||
35 |
|
35 | |||
36 |
So the scenario of use for repos with `locking function` enabled is that |
|
36 | So the scenario of use for repos with `locking function` enabled is that | |
37 | every initial clone and every pull gives users (with write permission) |
|
37 | every initial clone and every pull gives users (with write permission) | |
38 | the exclusive right to do a push. |
|
38 | the exclusive right to do a push. | |
39 |
|
39 | |||
40 |
|
40 | |||
41 | Each repo can be manually unlocked by admin from the repo settings menu. No newline at end of file |
|
41 | Each repo can be manually unlocked by admin from the repo settings menu. |
@@ -13,7 +13,8 b' the best performance.' | |||||
13 | more important to have faster disk than faster CPU. |
|
13 | more important to have faster disk than faster CPU. | |
14 |
|
14 | |||
15 | * Slowness on initial page can be easily fixed by grouping repositories, and/or |
|
15 | * Slowness on initial page can be easily fixed by grouping repositories, and/or | |
16 | increasing cache size (see below) |
|
16 | increasing cache size (see below), that includes using lightweight dashboard | |
|
17 | option and vcs_full_cache setting in .ini file | |||
17 |
|
18 | |||
18 |
|
19 | |||
19 | Follow these few steps to improve performance of RhodeCode system. |
|
20 | Follow these few steps to improve performance of RhodeCode system. | |
@@ -22,7 +23,7 b' Follow these few steps to improve perfor' | |||||
22 | 1. Increase cache |
|
23 | 1. Increase cache | |
23 |
|
24 | |||
24 | in the .ini file:: |
|
25 | in the .ini file:: | |
25 |
|
26 | |||
26 | beaker.cache.sql_cache_long.expire=3600 <-- set this to higher number |
|
27 | beaker.cache.sql_cache_long.expire=3600 <-- set this to higher number | |
27 |
|
28 | |||
28 | This option affects the cache expiration time for main page. Having |
|
29 | This option affects the cache expiration time for main page. Having | |
@@ -33,18 +34,29 b' 1. Increase cache' | |||||
33 | system and it will expire cache for repositories that had been changed. |
|
34 | system and it will expire cache for repositories that had been changed. | |
34 |
|
35 | |||
35 | 2. Switch from sqlite to postgres or mysql |
|
36 | 2. Switch from sqlite to postgres or mysql | |
36 |
|
37 | |||
37 | sqlite is a good option when having small load on the system. But due to |
|
38 | sqlite is a good option when having small load on the system. But due to | |
38 | locking issues with sqlite, it's not recommended to use it for larger |
|
39 | locking issues with sqlite, it's not recommended to use it for larger | |
39 | setup. Switching to mysql or postgres will result in a immediate |
|
40 | setup. Switching to mysql or postgres will result in a immediate | |
40 | performance increase. |
|
41 | performance increase. | |
41 |
|
42 | |||
42 | 3. Scale RhodeCode horizontally |
|
43 | 3. Scale RhodeCode horizontally | |
43 |
|
44 | |||
44 | - running two or more instances on the same server can speed up things a lot |
|
45 | Scaling horizontally can give huge performance increase when dealing with | |
45 | - load balance using round robin or ip hash |
|
46 | large traffic (large amount of users, CI servers etc). RhodeCode can be | |
46 | - you need to handle consistent user session storage by switching to |
|
47 | scaled horizontally on one (recommended) or multiple machines. In order | |
47 | db sessions, client side sessions or sharing session data folder across |
|
48 | to scale horizontally you need to do the following: | |
48 | instances. See http://beaker.readthedocs.org/ docs for details. |
|
49 | ||
49 |
|
|
50 | - each instance needs it's own .ini file and unique `instance_id` set in them | |
50 | `instance_id` set in them No newline at end of file |
|
51 | - each instance `data` storage needs to be configured to be stored on a | |
|
52 | shared disk storage, preferably together with repositories. This `data` | |||
|
53 | dir contains template caches, sessions, whoosh index and it's used for | |||
|
54 | tasks locking (so it's safe across multiple instances). Set the | |||
|
55 | `cache_dir`, `index_dir`, `beaker.cache.data_dir`, `beaker.cache.lock_dir` | |||
|
56 | variables in each .ini file to shared location across RhodeCode instances | |||
|
57 | - if celery is used each instance should run separate celery instance, but | |||
|
58 | the message broken should be common to all of them (ex one rabbitmq | |||
|
59 | shared server) | |||
|
60 | - load balance using round robin or ip hash, recommended is writing LB rules | |||
|
61 | that will separate regular user traffic from automated processes like CI | |||
|
62 | servers or build bots. |
@@ -5,14 +5,14 b' working with RhodeCode and mercurial sub' | |||||
5 | ============================================= |
|
5 | ============================================= | |
6 |
|
6 | |||
7 | example usage of Subrepos with RhodeCode:: |
|
7 | example usage of Subrepos with RhodeCode:: | |
8 |
|
8 | |||
9 | ## init a simple repo |
|
9 | ## init a simple repo | |
10 | hg init repo1 |
|
10 | hg init repo1 | |
11 | cd repo1 |
|
11 | cd repo1 | |
12 | echo "file1" > file1 |
|
12 | echo "file1" > file1 | |
13 |
hg add file1 |
|
13 | hg add file1 | |
14 | hg ci --message "initial file 1" |
|
14 | hg ci --message "initial file 1" | |
15 |
|
15 | |||
16 | #clone subrepo we want to add |
|
16 | #clone subrepo we want to add | |
17 | hg clone http://rc.local/subrepo |
|
17 | hg clone http://rc.local/subrepo | |
18 |
|
18 | |||
@@ -22,7 +22,7 b' example usage of Subrepos with RhodeCode' | |||||
22 | hg add .hgsub |
|
22 | hg add .hgsub | |
23 | hg ci --message "added remote subrepo" |
|
23 | hg ci --message "added remote subrepo" | |
24 |
|
24 | |||
25 |
|
25 | |||
26 |
|
26 | |||
27 | In file list of repo1 you will see a connected subrepo at revision it was |
|
27 | In file list of repo1 you will see a connected subrepo at revision it was | |
28 | during cloning. |
|
28 | during cloning. | |
@@ -34,4 +34,4 b' Next we can edit the subrepo data, and p' | |||||
34 | both of repositories. |
|
34 | both of repositories. | |
35 |
|
35 | |||
36 | see http://mercurial.aragost.com/kick-start/en/subrepositories/ for more |
|
36 | see http://mercurial.aragost.com/kick-start/en/subrepositories/ for more | |
37 |
information about subrepositories |
|
37 | information about subrepositories |
@@ -2,7 +2,7 b'' | |||||
2 | ######################################## |
|
2 | ######################################## | |
3 | #### THIS IS A DEBIAN INIT.D SCRIPT #### |
|
3 | #### THIS IS A DEBIAN INIT.D SCRIPT #### | |
4 | ######################################## |
|
4 | ######################################## | |
5 |
|
5 | |||
6 | ### BEGIN INIT INFO |
|
6 | ### BEGIN INIT INFO | |
7 | # Provides: rhodecode |
|
7 | # Provides: rhodecode | |
8 | # Required-Start: $all |
|
8 | # Required-Start: $all | |
@@ -12,29 +12,29 b'' | |||||
12 | # Short-Description: starts instance of rhodecode |
|
12 | # Short-Description: starts instance of rhodecode | |
13 | # Description: starts instance of rhodecode using start-stop-daemon |
|
13 | # Description: starts instance of rhodecode using start-stop-daemon | |
14 | ### END INIT INFO |
|
14 | ### END INIT INFO | |
15 |
|
15 | |||
16 | APP_NAME="rhodecode" |
|
16 | APP_NAME="rhodecode" | |
17 | APP_HOMEDIR="marcink/python_workspace" |
|
17 | APP_HOMEDIR="opt" | |
18 |
APP_PATH="/ |
|
18 | APP_PATH="/$APP_HOMEDIR/$APP_NAME" | |
19 |
|
19 | |||
20 | CONF_NAME="production.ini" |
|
20 | CONF_NAME="production.ini" | |
21 |
|
21 | |||
22 | PID_PATH="$APP_PATH/$APP_NAME.pid" |
|
22 | PID_PATH="$APP_PATH/$APP_NAME.pid" | |
23 | LOG_PATH="$APP_PATH/$APP_NAME.log" |
|
23 | LOG_PATH="$APP_PATH/$APP_NAME.log" | |
24 |
|
24 | |||
25 |
PYTHON_PATH="/ |
|
25 | PYTHON_PATH="/$APP_HOMEDIR/$APP_NAME-venv" | |
26 |
|
26 | |||
27 |
RUN_AS=" |
|
27 | RUN_AS="root" | |
28 |
|
28 | |||
29 | DAEMON="$PYTHON_PATH/bin/paster" |
|
29 | DAEMON="$PYTHON_PATH/bin/paster" | |
30 |
|
30 | |||
31 | DAEMON_OPTS="serve --daemon \ |
|
31 | DAEMON_OPTS="serve --daemon \ | |
32 |
|
|
32 | --user=$RUN_AS \ | |
33 |
|
|
33 | --group=$RUN_AS \ | |
34 |
|
|
34 | --pid-file=$PID_PATH \ | |
35 |
|
|
35 | --log-file=$LOG_PATH $APP_PATH/$CONF_NAME" | |
36 |
|
36 | |||
37 |
|
37 | |||
38 | start() { |
|
38 | start() { | |
39 | echo "Starting $APP_NAME" |
|
39 | echo "Starting $APP_NAME" | |
40 | PYTHON_EGG_CACHE="/tmp" start-stop-daemon -d $APP_PATH \ |
|
40 | PYTHON_EGG_CACHE="/tmp" start-stop-daemon -d $APP_PATH \ | |
@@ -43,19 +43,33 b' start() {' | |||||
43 | --user $RUN_AS \ |
|
43 | --user $RUN_AS \ | |
44 | --exec $DAEMON -- $DAEMON_OPTS |
|
44 | --exec $DAEMON -- $DAEMON_OPTS | |
45 | } |
|
45 | } | |
46 |
|
46 | |||
47 | stop() { |
|
47 | stop() { | |
48 | echo "Stopping $APP_NAME" |
|
48 | echo "Stopping $APP_NAME" | |
49 | start-stop-daemon -d $APP_PATH \ |
|
49 | start-stop-daemon -d $APP_PATH \ | |
50 | --stop --quiet \ |
|
50 | --stop --quiet \ | |
51 | --pidfile $PID_PATH || echo "$APP_NAME - Not running!" |
|
51 | --pidfile $PID_PATH || echo "$APP_NAME - Not running!" | |
52 |
|
|
52 | ||
53 | if [ -f $PID_PATH ]; then |
|
53 | if [ -f $PID_PATH ]; then | |
54 | rm $PID_PATH |
|
54 | rm $PID_PATH | |
55 | fi |
|
55 | fi | |
56 | } |
|
56 | } | |
57 |
|
57 | |||
|
58 | status() { | |||
|
59 | echo -n "Checking status of $APP_NAME ... " | |||
|
60 | pid=`cat $PID_PATH` | |||
|
61 | status=`ps ax | grep $pid | grep -ve grep` | |||
|
62 | if [ "$?" -eq 0 ]; then | |||
|
63 | echo "running" | |||
|
64 | else | |||
|
65 | echo "NOT running" | |||
|
66 | fi | |||
|
67 | } | |||
|
68 | ||||
58 | case "$1" in |
|
69 | case "$1" in | |
|
70 | status) | |||
|
71 | status | |||
|
72 | ;; | |||
59 | start) |
|
73 | start) | |
60 | start |
|
74 | start | |
61 | ;; |
|
75 | ;; | |
@@ -73,4 +87,4 b' case "$1" in' | |||||
73 | *) |
|
87 | *) | |
74 | echo "Usage: $0 {start|stop|restart}" |
|
88 | echo "Usage: $0 {start|stop|restart}" | |
75 | exit 1 |
|
89 | exit 1 | |
76 | esac |
|
90 | esac No newline at end of file |
@@ -25,59 +25,92 b' pdebug = false' | |||||
25 | #smtp_port = |
|
25 | #smtp_port = | |
26 | #smtp_use_tls = false |
|
26 | #smtp_use_tls = false | |
27 | #smtp_use_ssl = true |
|
27 | #smtp_use_ssl = true | |
28 | # Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) |
|
28 | ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) | |
29 | #smtp_auth = |
|
29 | #smtp_auth = | |
30 |
|
30 | |||
31 | [server:main] |
|
31 | [server:main] | |
32 | ## PASTE |
|
32 | ## PASTE | |
33 | ##nr of threads to spawn |
|
33 | ## nr of threads to spawn | |
34 | #threadpool_workers = 5 |
|
34 | #threadpool_workers = 5 | |
35 |
|
35 | |||
36 | ##max request before thread respawn |
|
36 | ## max request before thread respawn | |
37 | #threadpool_max_requests = 10 |
|
37 | #threadpool_max_requests = 10 | |
38 |
|
38 | |||
39 | ##option to use threads of process |
|
39 | ## option to use threads of process | |
40 | #use_threadpool = true |
|
40 | #use_threadpool = true | |
41 |
|
41 | |||
42 | #use = egg:Paste#http |
|
42 | #use = egg:Paste#http | |
43 |
|
43 | |||
44 | #WAITRESS |
|
44 | ## WAITRESS | |
45 | threads = 5 |
|
45 | threads = 5 | |
|
46 | ## 100GB | |||
|
47 | max_request_body_size = 107374182400 | |||
46 | use = egg:waitress#main |
|
48 | use = egg:waitress#main | |
47 |
|
49 | |||
48 | host = 127.0.0.1 |
|
50 | host = 127.0.0.1 | |
49 | port = 8001 |
|
51 | port = 8001 | |
50 |
|
52 | |||
51 | [filter:proxy-prefix] |
|
53 | ## prefix middleware for rc | |
52 | # prefix middleware for rc |
|
54 | #[filter:proxy-prefix] | |
53 | use = egg:PasteDeploy#prefix |
|
55 | #use = egg:PasteDeploy#prefix | |
54 | prefix = /<your-prefix> |
|
56 | #prefix = /<your-prefix> | |
55 |
|
57 | |||
56 | [app:main] |
|
58 | [app:main] | |
57 | use = egg:rhodecode |
|
59 | use = egg:rhodecode | |
|
60 | ## enable proxy prefix middleware | |||
58 | #filter-with = proxy-prefix |
|
61 | #filter-with = proxy-prefix | |
|
62 | ||||
59 | full_stack = true |
|
63 | full_stack = true | |
60 | static_files = true |
|
64 | static_files = true | |
61 | # Optional Languages |
|
65 | ## Optional Languages | |
62 | # en, fr, ja, pt_BR, zh_CN, zh_TW, pl |
|
66 | ## en, fr, ja, pt_BR, zh_CN, zh_TW, pl | |
63 | lang = en |
|
67 | lang = en | |
64 | cache_dir = %(here)s/data |
|
68 | cache_dir = %(here)s/data | |
65 | index_dir = %(here)s/data/index |
|
69 | index_dir = %(here)s/data/index | |
|
70 | ||||
|
71 | ## uncomment and set this path to use archive download cache | |||
|
72 | #archive_cache_dir = /tmp/tarballcache | |||
|
73 | ||||
|
74 | ## change this to unique ID for security | |||
66 | app_instance_uuid = rc-production |
|
75 | app_instance_uuid = rc-production | |
|
76 | ||||
|
77 | ## cut off limit for large diffs (size in bytes) | |||
67 | cut_off_limit = 256000 |
|
78 | cut_off_limit = 256000 | |
68 | vcs_full_cache = True |
|
79 | ||
|
80 | ## use cache version of scm repo everywhere | |||
|
81 | vcs_full_cache = true | |||
|
82 | ||||
|
83 | ## force https in RhodeCode, fixes https redirects, assumes it's always https | |||
69 | force_https = false |
|
84 | force_https = false | |
70 | commit_parse_limit = 50 |
|
85 | ||
71 | # number of items displayed in lightweight dashboard before paginating |
|
86 | ## use Strict-Transport-Security headers | |
|
87 | use_htsts = false | |||
|
88 | ||||
|
89 | ## number of commits stats will parse on each iteration | |||
|
90 | commit_parse_limit = 25 | |||
|
91 | ||||
|
92 | ## number of items displayed in lightweight dashboard before paginating is shown | |||
72 | dashboard_items = 100 |
|
93 | dashboard_items = 100 | |
|
94 | ||||
|
95 | ## use gravatar service to display avatars | |||
73 | use_gravatar = true |
|
96 | use_gravatar = true | |
74 |
|
97 | |||
|
98 | ## path to git executable | |||
|
99 | git_path = git | |||
|
100 | ||||
|
101 | ## git rev filter option, --all is the default filter, if you need to | |||
|
102 | ## hide all refs in changelog switch this to --branches --tags | |||
|
103 | git_rev_filter=--all | |||
|
104 | ||||
75 | ## RSS feed options |
|
105 | ## RSS feed options | |
76 |
|
||||
77 | rss_cut_off_limit = 256000 |
|
106 | rss_cut_off_limit = 256000 | |
78 | rss_items_per_page = 10 |
|
107 | rss_items_per_page = 10 | |
79 | rss_include_diff = false |
|
108 | rss_include_diff = false | |
80 |
|
109 | |||
|
110 | ## options for showing and identifying changesets | |||
|
111 | show_sha_length = 12 | |||
|
112 | show_revision_number = true | |||
|
113 | ||||
81 |
|
114 | |||
82 | ## alternative_gravatar_url allows you to use your own avatar server application |
|
115 | ## alternative_gravatar_url allows you to use your own avatar server application | |
83 | ## the following parts of the URL will be replaced |
|
116 | ## the following parts of the URL will be replaced | |
@@ -89,8 +122,11 b' rss_include_diff = false' | |||||
89 | #alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size} |
|
122 | #alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size} | |
90 | #alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size} |
|
123 | #alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size} | |
91 |
|
124 | |||
|
125 | ||||
|
126 | ## container auth options | |||
92 | container_auth_enabled = false |
|
127 | container_auth_enabled = false | |
93 | proxypass_auth_enabled = false |
|
128 | proxypass_auth_enabled = false | |
|
129 | ||||
94 | ## default encoding used to convert from and to unicode |
|
130 | ## default encoding used to convert from and to unicode | |
95 | ## can be also a comma seperated list of encoding in case of mixed encodings |
|
131 | ## can be also a comma seperated list of encoding in case of mixed encodings | |
96 | default_encoding = utf8 |
|
132 | default_encoding = utf8 | |
@@ -146,6 +182,11 b' instance_id =' | |||||
146 | ## handling that. Set this variable to 403 to return HTTPForbidden |
|
182 | ## handling that. Set this variable to 403 to return HTTPForbidden | |
147 | auth_ret_code = |
|
183 | auth_ret_code = | |
148 |
|
184 | |||
|
185 | ## locking return code. When repository is locked return this HTTP code. 2XX | |||
|
186 | ## codes don't break the transactions while 4XX codes do | |||
|
187 | lock_ret_code = 423 | |||
|
188 | ||||
|
189 | ||||
149 | #################################### |
|
190 | #################################### | |
150 | ### CELERY CONFIG #### |
|
191 | ### CELERY CONFIG #### | |
151 | #################################### |
|
192 | #################################### | |
@@ -170,7 +211,7 b' celeryd.concurrency = 2' | |||||
170 | celeryd.log.level = debug |
|
211 | celeryd.log.level = debug | |
171 | celeryd.max.tasks.per.child = 1 |
|
212 | celeryd.max.tasks.per.child = 1 | |
172 |
|
213 | |||
173 | #tasks will never be sent to the queue, but executed locally instead. |
|
214 | ## tasks will never be sent to the queue, but executed locally instead. | |
174 | celery.always.eager = false |
|
215 | celery.always.eager = false | |
175 |
|
216 | |||
176 | #################################### |
|
217 | #################################### | |
@@ -226,18 +267,19 b' beaker.cache.sql_cache_long.key_length =' | |||||
226 |
|
267 | |||
227 |
|
268 | |||
228 | beaker.session.key = rhodecode |
|
269 | beaker.session.key = rhodecode | |
229 |
## secure cookie requires AES python libraries |
|
270 | ## secure cookie requires AES python libraries | |
230 |
#beaker.session.encrypt_key = |
|
271 | #beaker.session.encrypt_key = <key_for_encryption> | |
231 |
#beaker.session.validate_key = |
|
272 | #beaker.session.validate_key = <validation_key> | |
|
273 | ||||
232 | ## sets session as invalid if it haven't been accessed for given amount of time |
|
274 | ## sets session as invalid if it haven't been accessed for given amount of time | |
233 | beaker.session.timeout = 2592000 |
|
275 | beaker.session.timeout = 2592000 | |
234 | beaker.session.httponly = true |
|
276 | beaker.session.httponly = true | |
235 | #beaker.session.cookie_path = /<your-prefix> |
|
277 | #beaker.session.cookie_path = /<your-prefix> | |
236 |
|
278 | |||
237 |
## uncomment for https secure cookie |
|
279 | ## uncomment for https secure cookie | |
238 | beaker.session.secure = false |
|
280 | beaker.session.secure = false | |
239 |
|
281 | |||
240 |
## auto save the session to not to use .save() |
|
282 | ## auto save the session to not to use .save() | |
241 | beaker.session.auto = False |
|
283 | beaker.session.auto = False | |
242 |
|
284 | |||
243 | ## default cookie expiration time in seconds `true` expire at browser close ## |
|
285 | ## default cookie expiration time in seconds `true` expire at browser close ## | |
@@ -252,57 +294,57 b' beaker.session.auto = False' | |||||
252 | ### [errormator] ### |
|
294 | ### [errormator] ### | |
253 | #################### |
|
295 | #################### | |
254 |
|
296 | |||
255 | # Errormator is tailored to work with RhodeCode, see |
|
297 | ## Errormator is tailored to work with RhodeCode, see | |
256 | # http://errormator.com for details how to obtain an account |
|
298 | ## http://errormator.com for details how to obtain an account | |
257 | # you must install python package `errormator_client` to make it work |
|
299 | ## you must install python package `errormator_client` to make it work | |
258 |
|
300 | |||
259 | # errormator enabled |
|
301 | ## errormator enabled | |
260 |
errormator = |
|
302 | errormator = false | |
261 |
|
303 | |||
262 | errormator.server_url = https://api.errormator.com |
|
304 | errormator.server_url = https://api.errormator.com | |
263 | errormator.api_key = YOUR_API_KEY |
|
305 | errormator.api_key = YOUR_API_KEY | |
264 |
|
306 | |||
265 | # TWEAK AMOUNT OF INFO SENT HERE |
|
307 | ## TWEAK AMOUNT OF INFO SENT HERE | |
266 |
|
308 | |||
267 | # enables 404 error logging (default False) |
|
309 | ## enables 404 error logging (default False) | |
268 | errormator.report_404 = false |
|
310 | errormator.report_404 = false | |
269 |
|
311 | |||
270 | # time in seconds after request is considered being slow (default 1) |
|
312 | ## time in seconds after request is considered being slow (default 1) | |
271 | errormator.slow_request_time = 1 |
|
313 | errormator.slow_request_time = 1 | |
272 |
|
314 | |||
273 | # record slow requests in application |
|
315 | ## record slow requests in application | |
274 | # (needs to be enabled for slow datastore recording and time tracking) |
|
316 | ## (needs to be enabled for slow datastore recording and time tracking) | |
275 | errormator.slow_requests = true |
|
317 | errormator.slow_requests = true | |
276 |
|
318 | |||
277 | # enable hooking to application loggers |
|
319 | ## enable hooking to application loggers | |
278 | # errormator.logging = true |
|
320 | # errormator.logging = true | |
279 |
|
321 | |||
280 | # minimum log level for log capture |
|
322 | ## minimum log level for log capture | |
281 | # errormator.logging.level = WARNING |
|
323 | # errormator.logging.level = WARNING | |
282 |
|
324 | |||
283 | # send logs only from erroneous/slow requests |
|
325 | ## send logs only from erroneous/slow requests | |
284 | # (saves API quota for intensive logging) |
|
326 | ## (saves API quota for intensive logging) | |
285 | errormator.logging_on_error = false |
|
327 | errormator.logging_on_error = false | |
286 |
|
328 | |||
287 | # list of additonal keywords that should be grabbed from environ object |
|
329 | ## list of additonal keywords that should be grabbed from environ object | |
288 | # can be string with comma separated list of words in lowercase |
|
330 | ## can be string with comma separated list of words in lowercase | |
289 | # (by default client will always send following info: |
|
331 | ## (by default client will always send following info: | |
290 | # 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that |
|
332 | ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that | |
291 | # start with HTTP* this list be extended with additional keywords here |
|
333 | ## start with HTTP* this list be extended with additional keywords here | |
292 | errormator.environ_keys_whitelist = |
|
334 | errormator.environ_keys_whitelist = | |
293 |
|
335 | |||
294 |
|
336 | |||
295 | # list of keywords that should be blanked from request object |
|
337 | ## list of keywords that should be blanked from request object | |
296 | # can be string with comma separated list of words in lowercase |
|
338 | ## can be string with comma separated list of words in lowercase | |
297 | # (by default client will always blank keys that contain following words |
|
339 | ## (by default client will always blank keys that contain following words | |
298 | # 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' |
|
340 | ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' | |
299 | # this list be extended with additional keywords set here |
|
341 | ## this list be extended with additional keywords set here | |
300 | errormator.request_keys_blacklist = |
|
342 | errormator.request_keys_blacklist = | |
301 |
|
343 | |||
302 |
|
344 | |||
303 | # list of namespaces that should be ignores when gathering log entries |
|
345 | ## list of namespaces that should be ignores when gathering log entries | |
304 | # can be string with comma separated list of namespaces |
|
346 | ## can be string with comma separated list of namespaces | |
305 | # (by default the client ignores own entries: errormator_client.client) |
|
347 | ## (by default the client ignores own entries: errormator_client.client) | |
306 | errormator.log_namespace_blacklist = |
|
348 | errormator.log_namespace_blacklist = | |
307 |
|
349 | |||
308 |
|
350 | |||
@@ -310,8 +352,8 b' errormator.log_namespace_blacklist =' | |||||
310 | ### [sentry] ### |
|
352 | ### [sentry] ### | |
311 | ################ |
|
353 | ################ | |
312 |
|
354 | |||
313 | # sentry is a alternative open source error aggregator |
|
355 | ## sentry is a alternative open source error aggregator | |
314 | # you must install python packages `sentry` and `raven` to enable |
|
356 | ## you must install python packages `sentry` and `raven` to enable | |
315 |
|
357 | |||
316 | sentry.dsn = YOUR_DNS |
|
358 | sentry.dsn = YOUR_DNS | |
317 | sentry.servers = |
|
359 | sentry.servers = | |
@@ -371,7 +413,7 b' handlers = console' | |||||
371 | level = DEBUG |
|
413 | level = DEBUG | |
372 | handlers = |
|
414 | handlers = | |
373 | qualname = routes.middleware |
|
415 | qualname = routes.middleware | |
374 | # "level = DEBUG" logs the route matched and routing variables. |
|
416 | ## "level = DEBUG" logs the route matched and routing variables. | |
375 | propagate = 1 |
|
417 | propagate = 1 | |
376 |
|
418 | |||
377 | [logger_beaker] |
|
419 | [logger_beaker] |
@@ -26,7 +26,7 b'' | |||||
26 | import sys |
|
26 | import sys | |
27 | import platform |
|
27 | import platform | |
28 |
|
28 | |||
29 |
VERSION = (1, |
|
29 | VERSION = (1, 6, 0, 'rc1') | |
30 |
|
30 | |||
31 | try: |
|
31 | try: | |
32 | from rhodecode.lib import get_current_revision |
|
32 | from rhodecode.lib import get_current_revision | |
@@ -38,7 +38,7 b' except ImportError:' | |||||
38 |
|
38 | |||
39 | __version__ = ('.'.join((str(each) for each in VERSION[:3])) + |
|
39 | __version__ = ('.'.join((str(each) for each in VERSION[:3])) + | |
40 | '.'.join(VERSION[3:])) |
|
40 | '.'.join(VERSION[3:])) | |
41 |
__dbversion__ = 1 |
|
41 | __dbversion__ = 11 # defines current db version for migrations | |
42 | __platform__ = platform.system() |
|
42 | __platform__ = platform.system() | |
43 | __license__ = 'GPLv3' |
|
43 | __license__ = 'GPLv3' | |
44 | __py_version__ = sys.version_info |
|
44 | __py_version__ = sys.version_info |
@@ -238,7 +238,7 b' def main(argv=None):' | |||||
238 |
|
238 | |||
239 | try: |
|
239 | try: | |
240 | margs = dict(map(lambda s: s.split(':', 1), other)) |
|
240 | margs = dict(map(lambda s: s.split(':', 1), other)) | |
241 | except: |
|
241 | except Exception: | |
242 | sys.stderr.write('Error parsing arguments \n') |
|
242 | sys.stderr.write('Error parsing arguments \n') | |
243 | sys.exit() |
|
243 | sys.exit() | |
244 |
|
244 |
@@ -25,59 +25,92 b' pdebug = false' | |||||
25 | #smtp_port = |
|
25 | #smtp_port = | |
26 | #smtp_use_tls = false |
|
26 | #smtp_use_tls = false | |
27 | #smtp_use_ssl = true |
|
27 | #smtp_use_ssl = true | |
28 | # Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) |
|
28 | ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) | |
29 | #smtp_auth = |
|
29 | #smtp_auth = | |
30 |
|
30 | |||
31 | [server:main] |
|
31 | [server:main] | |
32 | ## PASTE |
|
32 | ## PASTE | |
33 | ##nr of threads to spawn |
|
33 | ## nr of threads to spawn | |
34 | #threadpool_workers = 5 |
|
34 | #threadpool_workers = 5 | |
35 |
|
35 | |||
36 | ##max request before thread respawn |
|
36 | ## max request before thread respawn | |
37 | #threadpool_max_requests = 10 |
|
37 | #threadpool_max_requests = 10 | |
38 |
|
38 | |||
39 | ##option to use threads of process |
|
39 | ## option to use threads of process | |
40 | #use_threadpool = true |
|
40 | #use_threadpool = true | |
41 |
|
41 | |||
42 | #use = egg:Paste#http |
|
42 | #use = egg:Paste#http | |
43 |
|
43 | |||
44 | #WAITRESS |
|
44 | ## WAITRESS | |
45 | threads = 5 |
|
45 | threads = 5 | |
|
46 | ## 100GB | |||
|
47 | max_request_body_size = 107374182400 | |||
46 | use = egg:waitress#main |
|
48 | use = egg:waitress#main | |
47 |
|
49 | |||
48 | host = 127.0.0.1 |
|
50 | host = 127.0.0.1 | |
49 | port = 5000 |
|
51 | port = 5000 | |
50 |
|
52 | |||
51 | [filter:proxy-prefix] |
|
53 | ## prefix middleware for rc | |
52 | # prefix middleware for rc |
|
54 | #[filter:proxy-prefix] | |
53 | use = egg:PasteDeploy#prefix |
|
55 | #use = egg:PasteDeploy#prefix | |
54 | prefix = /<your-prefix> |
|
56 | #prefix = /<your-prefix> | |
55 |
|
57 | |||
56 | [app:main] |
|
58 | [app:main] | |
57 | use = egg:rhodecode |
|
59 | use = egg:rhodecode | |
|
60 | ## enable proxy prefix middleware | |||
58 | #filter-with = proxy-prefix |
|
61 | #filter-with = proxy-prefix | |
|
62 | ||||
59 | full_stack = true |
|
63 | full_stack = true | |
60 | static_files = true |
|
64 | static_files = true | |
61 | # Optional Languages |
|
65 | ## Optional Languages | |
62 | # en, fr, ja, pt_BR, zh_CN, zh_TW, pl |
|
66 | ## en, fr, ja, pt_BR, zh_CN, zh_TW, pl | |
63 | lang = en |
|
67 | lang = en | |
64 | cache_dir = %(here)s/data |
|
68 | cache_dir = %(here)s/data | |
65 | index_dir = %(here)s/data/index |
|
69 | index_dir = %(here)s/data/index | |
|
70 | ||||
|
71 | ## uncomment and set this path to use archive download cache | |||
|
72 | #archive_cache_dir = /tmp/tarballcache | |||
|
73 | ||||
|
74 | ## change this to unique ID for security | |||
66 | app_instance_uuid = ${app_instance_uuid} |
|
75 | app_instance_uuid = ${app_instance_uuid} | |
|
76 | ||||
|
77 | ## cut off limit for large diffs (size in bytes) | |||
67 | cut_off_limit = 256000 |
|
78 | cut_off_limit = 256000 | |
68 | vcs_full_cache = True |
|
79 | ||
|
80 | ## use cache version of scm repo everywhere | |||
|
81 | vcs_full_cache = true | |||
|
82 | ||||
|
83 | ## force https in RhodeCode, fixes https redirects, assumes it's always https | |||
69 | force_https = false |
|
84 | force_https = false | |
70 | commit_parse_limit = 50 |
|
85 | ||
71 | # number of items displayed in lightweight dashboard before paginating |
|
86 | ## use Strict-Transport-Security headers | |
|
87 | use_htsts = false | |||
|
88 | ||||
|
89 | ## number of commits stats will parse on each iteration | |||
|
90 | commit_parse_limit = 25 | |||
|
91 | ||||
|
92 | ## number of items displayed in lightweight dashboard before paginating is shown | |||
72 | dashboard_items = 100 |
|
93 | dashboard_items = 100 | |
|
94 | ||||
|
95 | ## use gravatar service to display avatars | |||
73 | use_gravatar = true |
|
96 | use_gravatar = true | |
74 |
|
97 | |||
|
98 | ## path to git executable | |||
|
99 | git_path = git | |||
|
100 | ||||
|
101 | ## git rev filter option, --all is the default filter, if you need to | |||
|
102 | ## hide all refs in changelog switch this to --branches --tags | |||
|
103 | git_rev_filter=--all | |||
|
104 | ||||
75 | ## RSS feed options |
|
105 | ## RSS feed options | |
76 |
|
||||
77 | rss_cut_off_limit = 256000 |
|
106 | rss_cut_off_limit = 256000 | |
78 | rss_items_per_page = 10 |
|
107 | rss_items_per_page = 10 | |
79 | rss_include_diff = false |
|
108 | rss_include_diff = false | |
80 |
|
109 | |||
|
110 | ## options for showing and identifying changesets | |||
|
111 | show_sha_length = 12 | |||
|
112 | show_revision_number = true | |||
|
113 | ||||
81 |
|
114 | |||
82 | ## alternative_gravatar_url allows you to use your own avatar server application |
|
115 | ## alternative_gravatar_url allows you to use your own avatar server application | |
83 | ## the following parts of the URL will be replaced |
|
116 | ## the following parts of the URL will be replaced | |
@@ -89,8 +122,11 b' rss_include_diff = false' | |||||
89 | #alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size} |
|
122 | #alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size} | |
90 | #alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size} |
|
123 | #alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size} | |
91 |
|
124 | |||
|
125 | ||||
|
126 | ## container auth options | |||
92 | container_auth_enabled = false |
|
127 | container_auth_enabled = false | |
93 | proxypass_auth_enabled = false |
|
128 | proxypass_auth_enabled = false | |
|
129 | ||||
94 | ## default encoding used to convert from and to unicode |
|
130 | ## default encoding used to convert from and to unicode | |
95 | ## can be also a comma seperated list of encoding in case of mixed encodings |
|
131 | ## can be also a comma seperated list of encoding in case of mixed encodings | |
96 | default_encoding = utf8 |
|
132 | default_encoding = utf8 | |
@@ -146,6 +182,11 b' instance_id =' | |||||
146 | ## handling that. Set this variable to 403 to return HTTPForbidden |
|
182 | ## handling that. Set this variable to 403 to return HTTPForbidden | |
147 | auth_ret_code = |
|
183 | auth_ret_code = | |
148 |
|
184 | |||
|
185 | ## locking return code. When repository is locked return this HTTP code. 2XX | |||
|
186 | ## codes don't break the transactions while 4XX codes do | |||
|
187 | lock_ret_code = 423 | |||
|
188 | ||||
|
189 | ||||
149 | #################################### |
|
190 | #################################### | |
150 | ### CELERY CONFIG #### |
|
191 | ### CELERY CONFIG #### | |
151 | #################################### |
|
192 | #################################### | |
@@ -170,7 +211,7 b' celeryd.concurrency = 2' | |||||
170 | celeryd.log.level = debug |
|
211 | celeryd.log.level = debug | |
171 | celeryd.max.tasks.per.child = 1 |
|
212 | celeryd.max.tasks.per.child = 1 | |
172 |
|
213 | |||
173 | #tasks will never be sent to the queue, but executed locally instead. |
|
214 | ## tasks will never be sent to the queue, but executed locally instead. | |
174 | celery.always.eager = false |
|
215 | celery.always.eager = false | |
175 |
|
216 | |||
176 | #################################### |
|
217 | #################################### | |
@@ -226,18 +267,19 b' beaker.cache.sql_cache_long.key_length =' | |||||
226 |
|
267 | |||
227 |
|
268 | |||
228 | beaker.session.key = rhodecode |
|
269 | beaker.session.key = rhodecode | |
229 |
## secure cookie requires AES python libraries |
|
270 | ## secure cookie requires AES python libraries | |
230 |
#beaker.session.encrypt_key = |
|
271 | #beaker.session.encrypt_key = <key_for_encryption> | |
231 |
#beaker.session.validate_key = |
|
272 | #beaker.session.validate_key = <validation_key> | |
|
273 | ||||
232 | ## sets session as invalid if it haven't been accessed for given amount of time |
|
274 | ## sets session as invalid if it haven't been accessed for given amount of time | |
233 | beaker.session.timeout = 2592000 |
|
275 | beaker.session.timeout = 2592000 | |
234 | beaker.session.httponly = true |
|
276 | beaker.session.httponly = true | |
235 | #beaker.session.cookie_path = /<your-prefix> |
|
277 | #beaker.session.cookie_path = /<your-prefix> | |
236 |
|
278 | |||
237 |
## uncomment for https secure cookie |
|
279 | ## uncomment for https secure cookie | |
238 | beaker.session.secure = false |
|
280 | beaker.session.secure = false | |
239 |
|
281 | |||
240 |
## auto save the session to not to use .save() |
|
282 | ## auto save the session to not to use .save() | |
241 | beaker.session.auto = False |
|
283 | beaker.session.auto = False | |
242 |
|
284 | |||
243 | ## default cookie expiration time in seconds `true` expire at browser close ## |
|
285 | ## default cookie expiration time in seconds `true` expire at browser close ## | |
@@ -252,57 +294,57 b' beaker.session.auto = False' | |||||
252 | ### [errormator] ### |
|
294 | ### [errormator] ### | |
253 | #################### |
|
295 | #################### | |
254 |
|
296 | |||
255 | # Errormator is tailored to work with RhodeCode, see |
|
297 | ## Errormator is tailored to work with RhodeCode, see | |
256 | # http://errormator.com for details how to obtain an account |
|
298 | ## http://errormator.com for details how to obtain an account | |
257 | # you must install python package `errormator_client` to make it work |
|
299 | ## you must install python package `errormator_client` to make it work | |
258 |
|
300 | |||
259 | # errormator enabled |
|
301 | ## errormator enabled | |
260 |
errormator = |
|
302 | errormator = false | |
261 |
|
303 | |||
262 | errormator.server_url = https://api.errormator.com |
|
304 | errormator.server_url = https://api.errormator.com | |
263 | errormator.api_key = YOUR_API_KEY |
|
305 | errormator.api_key = YOUR_API_KEY | |
264 |
|
306 | |||
265 | # TWEAK AMOUNT OF INFO SENT HERE |
|
307 | ## TWEAK AMOUNT OF INFO SENT HERE | |
266 |
|
308 | |||
267 | # enables 404 error logging (default False) |
|
309 | ## enables 404 error logging (default False) | |
268 | errormator.report_404 = false |
|
310 | errormator.report_404 = false | |
269 |
|
311 | |||
270 | # time in seconds after request is considered being slow (default 1) |
|
312 | ## time in seconds after request is considered being slow (default 1) | |
271 | errormator.slow_request_time = 1 |
|
313 | errormator.slow_request_time = 1 | |
272 |
|
314 | |||
273 | # record slow requests in application |
|
315 | ## record slow requests in application | |
274 | # (needs to be enabled for slow datastore recording and time tracking) |
|
316 | ## (needs to be enabled for slow datastore recording and time tracking) | |
275 | errormator.slow_requests = true |
|
317 | errormator.slow_requests = true | |
276 |
|
318 | |||
277 | # enable hooking to application loggers |
|
319 | ## enable hooking to application loggers | |
278 | # errormator.logging = true |
|
320 | # errormator.logging = true | |
279 |
|
321 | |||
280 | # minimum log level for log capture |
|
322 | ## minimum log level for log capture | |
281 | # errormator.logging.level = WARNING |
|
323 | # errormator.logging.level = WARNING | |
282 |
|
324 | |||
283 | # send logs only from erroneous/slow requests |
|
325 | ## send logs only from erroneous/slow requests | |
284 | # (saves API quota for intensive logging) |
|
326 | ## (saves API quota for intensive logging) | |
285 | errormator.logging_on_error = false |
|
327 | errormator.logging_on_error = false | |
286 |
|
328 | |||
287 | # list of additonal keywords that should be grabbed from environ object |
|
329 | ## list of additonal keywords that should be grabbed from environ object | |
288 | # can be string with comma separated list of words in lowercase |
|
330 | ## can be string with comma separated list of words in lowercase | |
289 | # (by default client will always send following info: |
|
331 | ## (by default client will always send following info: | |
290 | # 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that |
|
332 | ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that | |
291 | # start with HTTP* this list be extended with additional keywords here |
|
333 | ## start with HTTP* this list be extended with additional keywords here | |
292 | errormator.environ_keys_whitelist = |
|
334 | errormator.environ_keys_whitelist = | |
293 |
|
335 | |||
294 |
|
336 | |||
295 | # list of keywords that should be blanked from request object |
|
337 | ## list of keywords that should be blanked from request object | |
296 | # can be string with comma separated list of words in lowercase |
|
338 | ## can be string with comma separated list of words in lowercase | |
297 | # (by default client will always blank keys that contain following words |
|
339 | ## (by default client will always blank keys that contain following words | |
298 | # 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' |
|
340 | ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' | |
299 | # this list be extended with additional keywords set here |
|
341 | ## this list be extended with additional keywords set here | |
300 | errormator.request_keys_blacklist = |
|
342 | errormator.request_keys_blacklist = | |
301 |
|
343 | |||
302 |
|
344 | |||
303 | # list of namespaces that should be ignores when gathering log entries |
|
345 | ## list of namespaces that should be ignores when gathering log entries | |
304 | # can be string with comma separated list of namespaces |
|
346 | ## can be string with comma separated list of namespaces | |
305 | # (by default the client ignores own entries: errormator_client.client) |
|
347 | ## (by default the client ignores own entries: errormator_client.client) | |
306 | errormator.log_namespace_blacklist = |
|
348 | errormator.log_namespace_blacklist = | |
307 |
|
349 | |||
308 |
|
350 | |||
@@ -310,8 +352,8 b' errormator.log_namespace_blacklist =' | |||||
310 | ### [sentry] ### |
|
352 | ### [sentry] ### | |
311 | ################ |
|
353 | ################ | |
312 |
|
354 | |||
313 | # sentry is a alternative open source error aggregator |
|
355 | ## sentry is a alternative open source error aggregator | |
314 | # you must install python packages `sentry` and `raven` to enable |
|
356 | ## you must install python packages `sentry` and `raven` to enable | |
315 |
|
357 | |||
316 | sentry.dsn = YOUR_DNS |
|
358 | sentry.dsn = YOUR_DNS | |
317 | sentry.servers = |
|
359 | sentry.servers = | |
@@ -381,7 +423,7 b' handlers = console' | |||||
381 | level = DEBUG |
|
423 | level = DEBUG | |
382 | handlers = |
|
424 | handlers = | |
383 | qualname = routes.middleware |
|
425 | qualname = routes.middleware | |
384 | # "level = DEBUG" logs the route matched and routing variables. |
|
426 | ## "level = DEBUG" logs the route matched and routing variables. | |
385 | propagate = 1 |
|
427 | propagate = 1 | |
386 |
|
428 | |||
387 | [logger_beaker] |
|
429 | [logger_beaker] |
@@ -20,6 +20,7 b' from rhodecode.lib.auth import set_avail' | |||||
20 | from rhodecode.lib.utils import repo2db_mapper, make_ui, set_rhodecode_config,\ |
|
20 | from rhodecode.lib.utils import repo2db_mapper, make_ui, set_rhodecode_config,\ | |
21 | load_rcextensions, check_git_version |
|
21 | load_rcextensions, check_git_version | |
22 | from rhodecode.lib.utils2 import engine_from_config, str2bool |
|
22 | from rhodecode.lib.utils2 import engine_from_config, str2bool | |
|
23 | from rhodecode.lib.db_manage import DbManage | |||
23 | from rhodecode.model import init_model |
|
24 | from rhodecode.model import init_model | |
24 | from rhodecode.model.scm import ScmModel |
|
25 | from rhodecode.model.scm import ScmModel | |
25 |
|
26 | |||
@@ -88,7 +89,7 b' def load_environment(global_conf, app_co' | |||||
88 |
|
89 | |||
89 | #check git version |
|
90 | #check git version | |
90 | check_git_version() |
|
91 | check_git_version() | |
91 |
|
92 | DbManage.check_waitress() | ||
92 | # MULTIPLE DB configs |
|
93 | # MULTIPLE DB configs | |
93 | # Setup the SQLAlchemy database engine |
|
94 | # Setup the SQLAlchemy database engine | |
94 | sa_engine_db1 = engine_from_config(config, 'sqlalchemy.db1.') |
|
95 | sa_engine_db1 = engine_from_config(config, 'sqlalchemy.db1.') | |
@@ -100,6 +101,12 b' def load_environment(global_conf, app_co' | |||||
100 | set_available_permissions(config) |
|
101 | set_available_permissions(config) | |
101 | config['base_path'] = repos_path |
|
102 | config['base_path'] = repos_path | |
102 | set_rhodecode_config(config) |
|
103 | set_rhodecode_config(config) | |
|
104 | ||||
|
105 | instance_id = rhodecode.CONFIG.get('instance_id') | |||
|
106 | if instance_id == '*': | |||
|
107 | instance_id = '%s-%s' % (os.uname()[1], os.getpid()) | |||
|
108 | rhodecode.CONFIG['instance_id'] = instance_id | |||
|
109 | ||||
103 | # CONFIGURATION OPTIONS HERE (note: all config options will override |
|
110 | # CONFIGURATION OPTIONS HERE (note: all config options will override | |
104 | # any Pylons config options) |
|
111 | # any Pylons config options) | |
105 |
|
112 |
@@ -15,6 +15,7 b' from rhodecode.lib.middleware.simplehg i' | |||||
15 | from rhodecode.lib.middleware.simplegit import SimpleGit |
|
15 | from rhodecode.lib.middleware.simplegit import SimpleGit | |
16 | from rhodecode.lib.middleware.https_fixup import HttpsFixup |
|
16 | from rhodecode.lib.middleware.https_fixup import HttpsFixup | |
17 | from rhodecode.config.environment import load_environment |
|
17 | from rhodecode.config.environment import load_environment | |
|
18 | from rhodecode.lib.middleware.wrapper import RequestWrapper | |||
18 |
|
19 | |||
19 |
|
20 | |||
20 | def make_app(global_conf, full_stack=True, static_files=True, **app_conf): |
|
21 | def make_app(global_conf, full_stack=True, static_files=True, **app_conf): | |
@@ -55,7 +56,7 b' def make_app(global_conf, full_stack=Tru' | |||||
55 |
|
56 | |||
56 | from rhodecode.lib.middleware.sentry import Sentry |
|
57 | from rhodecode.lib.middleware.sentry import Sentry | |
57 | from rhodecode.lib.middleware.errormator import Errormator |
|
58 | from rhodecode.lib.middleware.errormator import Errormator | |
58 | if Errormator: |
|
59 | if Errormator and asbool(config['app_conf'].get('errormator')): | |
59 | app = Errormator(app, config) |
|
60 | app = Errormator(app, config) | |
60 | elif Sentry: |
|
61 | elif Sentry: | |
61 | app = Sentry(app, config) |
|
62 | app = Sentry(app, config) | |
@@ -67,7 +68,7 b' def make_app(global_conf, full_stack=Tru' | |||||
67 | # need any pylons stack middleware in them |
|
68 | # need any pylons stack middleware in them | |
68 | app = SimpleHg(app, config) |
|
69 | app = SimpleHg(app, config) | |
69 | app = SimpleGit(app, config) |
|
70 | app = SimpleGit(app, config) | |
70 |
|
71 | app = RequestWrapper(app, config) | ||
71 | # Display error documents for 401, 403, 404 status codes (and |
|
72 | # Display error documents for 401, 403, 404 status codes (and | |
72 | # 500 when debug is disabled) |
|
73 | # 500 when debug is disabled) | |
73 | if asbool(config['debug']): |
|
74 | if asbool(config['debug']): |
@@ -6,6 +6,14 b'' | |||||
6 | # build by pygments |
|
6 | # build by pygments | |
7 | EXTRA_MAPPINGS = {} |
|
7 | EXTRA_MAPPINGS = {} | |
8 |
|
8 | |||
|
9 | # additional lexer definitions for custom files | |||
|
10 | # it's overrides pygments lexers, and uses defined name of lexer to colorize the | |||
|
11 | # files. Format is {'ext': 'lexer_name'} | |||
|
12 | # List of lexers can be printed running: | |||
|
13 | # python -c "import pprint;from pygments import lexers;pprint.pprint([(x[0], x[1]) for x in lexers.get_all_lexers()]);" | |||
|
14 | ||||
|
15 | EXTRA_LEXERS = {} | |||
|
16 | ||||
9 | #============================================================================== |
|
17 | #============================================================================== | |
10 | # WHOOSH INDEX EXTENSIONS |
|
18 | # WHOOSH INDEX EXTENSIONS | |
11 | #============================================================================== |
|
19 | #============================================================================== |
@@ -41,21 +41,32 b' def make_map(config):' | |||||
41 | if len(by_id) == 2 and by_id[1].isdigit() and by_id[0] == '': |
|
41 | if len(by_id) == 2 and by_id[1].isdigit() and by_id[0] == '': | |
42 | repo_name = Repository.get(by_id[1]).repo_name |
|
42 | repo_name = Repository.get(by_id[1]).repo_name | |
43 | match_dict['repo_name'] = repo_name |
|
43 | match_dict['repo_name'] = repo_name | |
44 | except: |
|
44 | except Exception: | |
45 | pass |
|
45 | pass | |
46 |
|
46 | |||
47 | return is_valid_repo(repo_name, config['base_path']) |
|
47 | return is_valid_repo(repo_name, config['base_path']) | |
48 |
|
48 | |||
49 | def check_group(environ, match_dict): |
|
49 | def check_group(environ, match_dict): | |
50 | """ |
|
50 | """ | |
51 |
check for valid repositor |
|
51 | check for valid repository group for proper 404 handling | |
52 |
|
52 | |||
53 | :param environ: |
|
53 | :param environ: | |
54 | :param match_dict: |
|
54 | :param match_dict: | |
55 | """ |
|
55 | """ | |
56 | repos_group_name = match_dict.get('group_name') |
|
56 | repos_group_name = match_dict.get('group_name') | |
|
57 | return is_valid_repos_group(repos_group_name, config['base_path']) | |||
57 |
|
58 | |||
58 | return is_valid_repos_group(repos_group_name, config['base_path']) |
|
59 | def check_group_skip_path(environ, match_dict): | |
|
60 | """ | |||
|
61 | check for valid repository group for proper 404 handling, but skips | |||
|
62 | verification of existing path | |||
|
63 | ||||
|
64 | :param environ: | |||
|
65 | :param match_dict: | |||
|
66 | """ | |||
|
67 | repos_group_name = match_dict.get('group_name') | |||
|
68 | return is_valid_repos_group(repos_group_name, config['base_path'], | |||
|
69 | skip_path_check=True) | |||
59 |
|
70 | |||
60 | def check_int(environ, match_dict): |
|
71 | def check_int(environ, match_dict): | |
61 | return match_dict.get('id').isdigit() |
|
72 | return match_dict.get('id').isdigit() | |
@@ -93,19 +104,14 b' def make_map(config):' | |||||
93 | m.connect("formatted_repos", "/repos.{format}", |
|
104 | m.connect("formatted_repos", "/repos.{format}", | |
94 | action="index", |
|
105 | action="index", | |
95 | conditions=dict(method=["GET"])) |
|
106 | conditions=dict(method=["GET"])) | |
96 |
m.connect("new_repo", "/ |
|
107 | m.connect("new_repo", "/create_repository", | |
97 |
action=" |
|
108 | action="create_repository", conditions=dict(method=["GET"])) | |
98 | m.connect("formatted_new_repo", "/repos/new.{format}", |
|
|||
99 | action="new", conditions=dict(method=["GET"])) |
|
|||
100 | m.connect("/repos/{repo_name:.*?}", |
|
109 | m.connect("/repos/{repo_name:.*?}", | |
101 | action="update", conditions=dict(method=["PUT"], |
|
110 | action="update", conditions=dict(method=["PUT"], | |
102 | function=check_repo)) |
|
111 | function=check_repo)) | |
103 | m.connect("/repos/{repo_name:.*?}", |
|
112 | m.connect("/repos/{repo_name:.*?}", | |
104 | action="delete", conditions=dict(method=["DELETE"], |
|
113 | action="delete", conditions=dict(method=["DELETE"], | |
105 | function=check_repo)) |
|
114 | function=check_repo)) | |
106 | m.connect("edit_repo", "/repos/{repo_name:.*?}/edit", |
|
|||
107 | action="edit", conditions=dict(method=["GET"], |
|
|||
108 | function=check_repo)) |
|
|||
109 | m.connect("formatted_edit_repo", "/repos/{repo_name:.*?}.{format}/edit", |
|
115 | m.connect("formatted_edit_repo", "/repos/{repo_name:.*?}.{format}/edit", | |
110 | action="edit", conditions=dict(method=["GET"], |
|
116 | action="edit", conditions=dict(method=["GET"], | |
111 | function=check_repo)) |
|
117 | function=check_repo)) | |
@@ -115,6 +121,11 b' def make_map(config):' | |||||
115 | m.connect("formatted_repo", "/repos/{repo_name:.*?}.{format}", |
|
121 | m.connect("formatted_repo", "/repos/{repo_name:.*?}.{format}", | |
116 | action="show", conditions=dict(method=["GET"], |
|
122 | action="show", conditions=dict(method=["GET"], | |
117 | function=check_repo)) |
|
123 | function=check_repo)) | |
|
124 | #add repo perm member | |||
|
125 | m.connect('set_repo_perm_member', "/set_repo_perm_member/{repo_name:.*?}", | |||
|
126 | action="set_repo_perm_member", | |||
|
127 | conditions=dict(method=["POST"], function=check_repo)) | |||
|
128 | ||||
118 | #ajax delete repo perm user |
|
129 | #ajax delete repo perm user | |
119 | m.connect('delete_repo_user', "/repos_delete_user/{repo_name:.*?}", |
|
130 | m.connect('delete_repo_user', "/repos_delete_user/{repo_name:.*?}", | |
120 | action="delete_perm_user", |
|
131 | action="delete_perm_user", | |
@@ -145,6 +156,18 b' def make_map(config):' | |||||
145 | m.connect('repo_locking', "/repo_locking/{repo_name:.*?}", |
|
156 | m.connect('repo_locking', "/repo_locking/{repo_name:.*?}", | |
146 | action="repo_locking", conditions=dict(method=["PUT"], |
|
157 | action="repo_locking", conditions=dict(method=["PUT"], | |
147 | function=check_repo)) |
|
158 | function=check_repo)) | |
|
159 | m.connect('toggle_locking', "/locking_toggle/{repo_name:.*?}", | |||
|
160 | action="toggle_locking", conditions=dict(method=["GET"], | |||
|
161 | function=check_repo)) | |||
|
162 | ||||
|
163 | #repo fields | |||
|
164 | m.connect('create_repo_fields', "/repo_fields/{repo_name:.*?}/new", | |||
|
165 | action="create_repo_field", conditions=dict(method=["PUT"], | |||
|
166 | function=check_repo)) | |||
|
167 | ||||
|
168 | m.connect('delete_repo_fields', "/repo_fields/{repo_name:.*?}/{field_id}", | |||
|
169 | action="delete_repo_field", conditions=dict(method=["DELETE"], | |||
|
170 | function=check_repo)) | |||
148 |
|
171 | |||
149 | with rmap.submapper(path_prefix=ADMIN_PREFIX, |
|
172 | with rmap.submapper(path_prefix=ADMIN_PREFIX, | |
150 | controller='admin/repos_groups') as m: |
|
173 | controller='admin/repos_groups') as m: | |
@@ -158,33 +181,34 b' def make_map(config):' | |||||
158 | action="new", conditions=dict(method=["GET"])) |
|
181 | action="new", conditions=dict(method=["GET"])) | |
159 | m.connect("formatted_new_repos_group", "/repos_groups/new.{format}", |
|
182 | m.connect("formatted_new_repos_group", "/repos_groups/new.{format}", | |
160 | action="new", conditions=dict(method=["GET"])) |
|
183 | action="new", conditions=dict(method=["GET"])) | |
161 |
m.connect("update_repos_group", "/repos_groups/{ |
|
184 | m.connect("update_repos_group", "/repos_groups/{group_name:.*?}", | |
162 | action="update", conditions=dict(method=["PUT"], |
|
185 | action="update", conditions=dict(method=["PUT"], | |
163 |
function=check_ |
|
186 | function=check_group)) | |
164 |
m.connect("delete_repos_group", "/repos_groups/{ |
|
187 | m.connect("delete_repos_group", "/repos_groups/{group_name:.*?}", | |
165 | action="delete", conditions=dict(method=["DELETE"], |
|
188 | action="delete", conditions=dict(method=["DELETE"], | |
166 |
function=check_ |
|
189 | function=check_group_skip_path)) | |
167 |
m.connect("edit_repos_group", "/repos_groups/{ |
|
190 | m.connect("edit_repos_group", "/repos_groups/{group_name:.*?}/edit", | |
168 | action="edit", conditions=dict(method=["GET"],)) |
|
|||
169 | m.connect("formatted_edit_repos_group", |
|
|||
170 | "/repos_groups/{id}.{format}/edit", |
|
|||
171 | action="edit", conditions=dict(method=["GET"], |
|
191 | action="edit", conditions=dict(method=["GET"], | |
172 |
function=check_ |
|
192 | function=check_group)) | |
173 |
m.connect(" |
|
193 | m.connect("formatted_edit_repos_group", | |
|
194 | "/repos_groups/{group_name:.*?}.{format}/edit", | |||
|
195 | action="edit", conditions=dict(method=["GET"], | |||
|
196 | function=check_group)) | |||
|
197 | m.connect("repos_group", "/repos_groups/{group_name:.*?}", | |||
174 | action="show", conditions=dict(method=["GET"], |
|
198 | action="show", conditions=dict(method=["GET"], | |
175 |
function=check_ |
|
199 | function=check_group)) | |
176 |
m.connect("formatted_repos_group", "/repos_groups/{ |
|
200 | m.connect("formatted_repos_group", "/repos_groups/{group_name:.*?}.{format}", | |
177 | action="show", conditions=dict(method=["GET"], |
|
201 | action="show", conditions=dict(method=["GET"], | |
178 |
function=check_ |
|
202 | function=check_group)) | |
179 | # ajax delete repos group perm user |
|
203 | # ajax delete repository group perm user | |
180 | m.connect('delete_repos_group_user_perm', |
|
204 | m.connect('delete_repos_group_user_perm', | |
181 | "/delete_repos_group_user_perm/{group_name:.*}", |
|
205 | "/delete_repos_group_user_perm/{group_name:.*?}", | |
182 | action="delete_repos_group_user_perm", |
|
206 | action="delete_repos_group_user_perm", | |
183 | conditions=dict(method=["DELETE"], function=check_group)) |
|
207 | conditions=dict(method=["DELETE"], function=check_group)) | |
184 |
|
208 | |||
185 | # ajax delete repos group perm users_group |
|
209 | # ajax delete repository group perm users_group | |
186 | m.connect('delete_repos_group_users_group_perm', |
|
210 | m.connect('delete_repos_group_users_group_perm', | |
187 | "/delete_repos_group_users_group_perm/{group_name:.*}", |
|
211 | "/delete_repos_group_users_group_perm/{group_name:.*?}", | |
188 | action="delete_repos_group_users_group_perm", |
|
212 | action="delete_repos_group_users_group_perm", | |
189 | conditions=dict(method=["DELETE"], function=check_group)) |
|
213 | conditions=dict(method=["DELETE"], function=check_group)) | |
190 |
|
214 | |||
@@ -227,7 +251,7 b' def make_map(config):' | |||||
227 | m.connect("user_ips_delete", "/users_ips/{id}", |
|
251 | m.connect("user_ips_delete", "/users_ips/{id}", | |
228 | action="delete_ip", conditions=dict(method=["DELETE"])) |
|
252 | action="delete_ip", conditions=dict(method=["DELETE"])) | |
229 |
|
253 | |||
230 |
#ADMIN USER |
|
254 | #ADMIN USER GROUPS REST ROUTES | |
231 | with rmap.submapper(path_prefix=ADMIN_PREFIX, |
|
255 | with rmap.submapper(path_prefix=ADMIN_PREFIX, | |
232 | controller='admin/users_groups') as m: |
|
256 | controller='admin/users_groups') as m: | |
233 | m.connect("users_groups", "/users_groups", |
|
257 | m.connect("users_groups", "/users_groups", | |
@@ -308,8 +332,6 b' def make_map(config):' | |||||
308 | action="my_account", conditions=dict(method=["GET"])) |
|
332 | action="my_account", conditions=dict(method=["GET"])) | |
309 | m.connect("admin_settings_my_account_update", "/my_account_update", |
|
333 | m.connect("admin_settings_my_account_update", "/my_account_update", | |
310 | action="my_account_update", conditions=dict(method=["PUT"])) |
|
334 | action="my_account_update", conditions=dict(method=["PUT"])) | |
311 | m.connect("admin_settings_create_repository", "/create_repository", |
|
|||
312 | action="create_repository", conditions=dict(method=["GET"])) |
|
|||
313 | m.connect("admin_settings_my_repos", "/my_account/repos", |
|
335 | m.connect("admin_settings_my_repos", "/my_account/repos", | |
314 | action="my_account_my_repos", conditions=dict(method=["GET"])) |
|
336 | action="my_account_my_repos", conditions=dict(method=["GET"])) | |
315 | m.connect("admin_settings_my_pullrequests", "/my_account/pull_requests", |
|
337 | m.connect("admin_settings_my_pullrequests", "/my_account/pull_requests", | |
@@ -389,8 +411,13 b' def make_map(config):' | |||||
389 |
|
411 | |||
390 | #SEARCH |
|
412 | #SEARCH | |
391 | rmap.connect('search', '%s/search' % ADMIN_PREFIX, controller='search',) |
|
413 | rmap.connect('search', '%s/search' % ADMIN_PREFIX, controller='search',) | |
392 |
rmap.connect('search_repo', '%s/search/{ |
|
414 | rmap.connect('search_repo_admin', '%s/search/{repo_name:.*}' % ADMIN_PREFIX, | |
393 |
|
|
415 | controller='search', | |
|
416 | conditions=dict(function=check_repo)) | |||
|
417 | rmap.connect('search_repo', '/{repo_name:.*?}/search', | |||
|
418 | controller='search', | |||
|
419 | conditions=dict(function=check_repo), | |||
|
420 | ) | |||
394 |
|
421 | |||
395 | #LOGIN/LOGOUT/REGISTER/SIGN IN |
|
422 | #LOGIN/LOGOUT/REGISTER/SIGN IN | |
396 | rmap.connect('login_home', '%s/login' % ADMIN_PREFIX, controller='login') |
|
423 | rmap.connect('login_home', '%s/login' % ADMIN_PREFIX, controller='login') | |
@@ -423,6 +450,10 b' def make_map(config):' | |||||
423 | controller='summary', |
|
450 | controller='summary', | |
424 | conditions=dict(function=check_repo)) |
|
451 | conditions=dict(function=check_repo)) | |
425 |
|
452 | |||
|
453 | rmap.connect('repo_size', '/{repo_name:.*?}/repo_size', | |||
|
454 | controller='summary', action='repo_size', | |||
|
455 | conditions=dict(function=check_repo)) | |||
|
456 | ||||
426 | rmap.connect('repos_group_home', '/{group_name:.*}', |
|
457 | rmap.connect('repos_group_home', '/{group_name:.*}', | |
427 | controller='admin/repos_groups', action="show_by_name", |
|
458 | controller='admin/repos_groups', action="show_by_name", | |
428 | conditions=dict(function=check_group)) |
|
459 | conditions=dict(function=check_group)) | |
@@ -431,6 +462,17 b' def make_map(config):' | |||||
431 | controller='changeset', revision='tip', |
|
462 | controller='changeset', revision='tip', | |
432 | conditions=dict(function=check_repo)) |
|
463 | conditions=dict(function=check_repo)) | |
433 |
|
464 | |||
|
465 | # no longer user, but kept for routes to work | |||
|
466 | rmap.connect("_edit_repo", "/{repo_name:.*?}/edit", | |||
|
467 | controller='admin/repos', action="edit", | |||
|
468 | conditions=dict(method=["GET"], function=check_repo) | |||
|
469 | ) | |||
|
470 | ||||
|
471 | rmap.connect("edit_repo", "/{repo_name:.*?}/settings", | |||
|
472 | controller='admin/repos', action="edit", | |||
|
473 | conditions=dict(method=["GET"], function=check_repo) | |||
|
474 | ) | |||
|
475 | ||||
434 | #still working url for backward compat. |
|
476 | #still working url for backward compat. | |
435 | rmap.connect('raw_changeset_home_depraced', |
|
477 | rmap.connect('raw_changeset_home_depraced', | |
436 | '/{repo_name:.*?}/raw-changeset/{revision}', |
|
478 | '/{repo_name:.*?}/raw-changeset/{revision}', | |
@@ -471,8 +513,8 b' def make_map(config):' | |||||
471 | controller='compare', action='index', |
|
513 | controller='compare', action='index', | |
472 | conditions=dict(function=check_repo), |
|
514 | conditions=dict(function=check_repo), | |
473 | requirements=dict( |
|
515 | requirements=dict( | |
474 |
org_ref_type='(branch|book|tag|rev|or |
|
516 | org_ref_type='(branch|book|tag|rev|__other_ref_type__)', | |
475 |
other_ref_type='(branch|book|tag|rev|o |
|
517 | other_ref_type='(branch|book|tag|rev|__org_ref_type__)') | |
476 | ) |
|
518 | ) | |
477 |
|
519 | |||
478 | rmap.connect('pullrequest_home', |
|
520 | rmap.connect('pullrequest_home', | |
@@ -518,7 +560,7 b' def make_map(config):' | |||||
518 | controller='pullrequests', action='delete_comment', |
|
560 | controller='pullrequests', action='delete_comment', | |
519 | conditions=dict(function=check_repo, method=["DELETE"])) |
|
561 | conditions=dict(function=check_repo, method=["DELETE"])) | |
520 |
|
562 | |||
521 | rmap.connect('summary_home', '/{repo_name:.*?}/summary', |
|
563 | rmap.connect('summary_home_summary', '/{repo_name:.*?}/summary', | |
522 | controller='summary', conditions=dict(function=check_repo)) |
|
564 | controller='summary', conditions=dict(function=check_repo)) | |
523 |
|
565 | |||
524 | rmap.connect('shortlog_home', '/{repo_name:.*?}/shortlog', |
|
566 | rmap.connect('shortlog_home', '/{repo_name:.*?}/shortlog', | |
@@ -548,6 +590,10 b' def make_map(config):' | |||||
548 | controller='files', revision='tip', f_path='', |
|
590 | controller='files', revision='tip', f_path='', | |
549 | conditions=dict(function=check_repo)) |
|
591 | conditions=dict(function=check_repo)) | |
550 |
|
592 | |||
|
593 | rmap.connect('files_home_nopath', '/{repo_name:.*?}/files/{revision}', | |||
|
594 | controller='files', revision='tip', f_path='', | |||
|
595 | conditions=dict(function=check_repo)) | |||
|
596 | ||||
551 | rmap.connect('files_history_home', |
|
597 | rmap.connect('files_history_home', | |
552 | '/{repo_name:.*?}/history/{revision}/{f_path:.*}', |
|
598 | '/{repo_name:.*?}/history/{revision}/{f_path:.*}', | |
553 | controller='files', action='history', revision='tip', f_path='', |
|
599 | controller='files', action='history', revision='tip', f_path='', | |
@@ -591,22 +637,6 b' def make_map(config):' | |||||
591 | controller='files', action='nodelist', |
|
637 | controller='files', action='nodelist', | |
592 | conditions=dict(function=check_repo)) |
|
638 | conditions=dict(function=check_repo)) | |
593 |
|
639 | |||
594 | rmap.connect('repo_settings_delete', '/{repo_name:.*?}/settings', |
|
|||
595 | controller='settings', action="delete", |
|
|||
596 | conditions=dict(method=["DELETE"], function=check_repo)) |
|
|||
597 |
|
||||
598 | rmap.connect('repo_settings_update', '/{repo_name:.*?}/settings', |
|
|||
599 | controller='settings', action="update", |
|
|||
600 | conditions=dict(method=["PUT"], function=check_repo)) |
|
|||
601 |
|
||||
602 | rmap.connect('repo_settings_home', '/{repo_name:.*?}/settings', |
|
|||
603 | controller='settings', action='index', |
|
|||
604 | conditions=dict(function=check_repo)) |
|
|||
605 |
|
||||
606 | rmap.connect('toggle_locking', "/{repo_name:.*?}/locking_toggle", |
|
|||
607 | controller='settings', action="toggle_locking", |
|
|||
608 | conditions=dict(method=["GET"], function=check_repo)) |
|
|||
609 |
|
||||
610 | rmap.connect('repo_fork_create_home', '/{repo_name:.*?}/fork', |
|
640 | rmap.connect('repo_fork_create_home', '/{repo_name:.*?}/fork', | |
611 | controller='forks', action='fork_create', |
|
641 | controller='forks', action='fork_create', | |
612 | conditions=dict(function=check_repo, method=["POST"])) |
|
642 | conditions=dict(function=check_repo, method=["POST"])) |
@@ -130,7 +130,7 b' class AdminController(BaseController):' | |||||
130 | c.search_term = request.GET.get('filter') |
|
130 | c.search_term = request.GET.get('filter') | |
131 | try: |
|
131 | try: | |
132 | users_log = _journal_filter(users_log, c.search_term) |
|
132 | users_log = _journal_filter(users_log, c.search_term) | |
133 | except: |
|
133 | except Exception: | |
134 | # we want this to crash for now |
|
134 | # we want this to crash for now | |
135 | raise |
|
135 | raise | |
136 |
|
136 |
@@ -107,7 +107,7 b' class DefaultsController(BaseController)' | |||||
107 | encoding="UTF-8") |
|
107 | encoding="UTF-8") | |
108 | except Exception: |
|
108 | except Exception: | |
109 | log.error(traceback.format_exc()) |
|
109 | log.error(traceback.format_exc()) | |
110 |
h.flash(_(' |
|
110 | h.flash(_('Error occurred during update of defaults'), | |
111 | category='error') |
|
111 | category='error') | |
112 |
|
112 | |||
113 | return redirect(url('defaults')) |
|
113 | return redirect(url('defaults')) |
@@ -123,7 +123,7 b' class LdapSettingsController(BaseControl' | |||||
123 | Session().add(setting) |
|
123 | Session().add(setting) | |
124 |
|
124 | |||
125 | Session().commit() |
|
125 | Session().commit() | |
126 |
h.flash(_('L |
|
126 | h.flash(_('LDAP settings updated successfully'), | |
127 | category='success') |
|
127 | category='success') | |
128 | if not ldap_active: |
|
128 | if not ldap_active: | |
129 | #if ldap is missing send an info to user |
|
129 | #if ldap is missing send an info to user | |
@@ -144,7 +144,7 b' class LdapSettingsController(BaseControl' | |||||
144 | encoding="UTF-8") |
|
144 | encoding="UTF-8") | |
145 | except Exception: |
|
145 | except Exception: | |
146 | log.error(traceback.format_exc()) |
|
146 | log.error(traceback.format_exc()) | |
147 |
h.flash(_(' |
|
147 | h.flash(_('Error occurred during update of ldap settings'), | |
148 | category='error') |
|
148 | category='error') | |
149 |
|
149 | |||
150 | return redirect(url('ldap_home')) |
|
150 | return redirect(url('ldap_home')) |
@@ -28,7 +28,7 b' import traceback' | |||||
28 |
|
28 | |||
29 | from pylons import request |
|
29 | from pylons import request | |
30 | from pylons import tmpl_context as c, url |
|
30 | from pylons import tmpl_context as c, url | |
31 | from pylons.controllers.util import redirect |
|
31 | from pylons.controllers.util import redirect, abort | |
32 |
|
32 | |||
33 | from webhelpers.paginate import Page |
|
33 | from webhelpers.paginate import Page | |
34 |
|
34 | |||
@@ -117,7 +117,7 b' class NotificationsController(BaseContro' | |||||
117 | Session().commit() |
|
117 | Session().commit() | |
118 | return 'ok' |
|
118 | return 'ok' | |
119 | except Exception: |
|
119 | except Exception: | |
120 | Session.rollback() |
|
120 | Session().rollback() | |
121 | log.error(traceback.format_exc()) |
|
121 | log.error(traceback.format_exc()) | |
122 | return 'fail' |
|
122 | return 'fail' | |
123 |
|
123 | |||
@@ -139,7 +139,7 b' class NotificationsController(BaseContro' | |||||
139 | Session().commit() |
|
139 | Session().commit() | |
140 | return 'ok' |
|
140 | return 'ok' | |
141 | except Exception: |
|
141 | except Exception: | |
142 | Session.rollback() |
|
142 | Session().rollback() | |
143 | log.error(traceback.format_exc()) |
|
143 | log.error(traceback.format_exc()) | |
144 | return 'fail' |
|
144 | return 'fail' | |
145 |
|
145 | |||
@@ -149,8 +149,9 b' class NotificationsController(BaseContro' | |||||
149 | c.user = self.rhodecode_user |
|
149 | c.user = self.rhodecode_user | |
150 | no = Notification.get(notification_id) |
|
150 | no = Notification.get(notification_id) | |
151 |
|
151 | |||
152 |
owner = a |
|
152 | owner = any(un.user.user_id == c.rhodecode_user.user_id | |
153 | for un in no.notifications_to_users) |
|
153 | for un in no.notifications_to_users) | |
|
154 | ||||
154 | if no and (h.HasPermissionAny('hg.admin', 'repository.admin')() or owner): |
|
155 | if no and (h.HasPermissionAny('hg.admin', 'repository.admin')() or owner): | |
155 | unotification = NotificationModel()\ |
|
156 | unotification = NotificationModel()\ | |
156 | .get_user_notification(c.user.user_id, no) |
|
157 | .get_user_notification(c.user.user_id, no) | |
@@ -158,14 +159,14 b' class NotificationsController(BaseContro' | |||||
158 | # if this association to user is not valid, we don't want to show |
|
159 | # if this association to user is not valid, we don't want to show | |
159 | # this message |
|
160 | # this message | |
160 | if unotification: |
|
161 | if unotification: | |
161 |
if unotification.read |
|
162 | if not unotification.read: | |
162 | unotification.mark_as_read() |
|
163 | unotification.mark_as_read() | |
163 | Session().commit() |
|
164 | Session().commit() | |
164 | c.notification = no |
|
165 | c.notification = no | |
165 |
|
166 | |||
166 | return render('admin/notifications/show_notification.html') |
|
167 | return render('admin/notifications/show_notification.html') | |
167 |
|
168 | |||
168 | return redirect(url('notifications')) |
|
169 | return abort(403) | |
169 |
|
170 | |||
170 | def edit(self, notification_id, format='html'): |
|
171 | def edit(self, notification_id, format='html'): | |
171 | """GET /_admin/notifications/id/edit: Form to edit an existing item""" |
|
172 | """GET /_admin/notifications/id/edit: Form to edit an existing item""" |
@@ -67,11 +67,11 b' class PermissionsController(BaseControll' | |||||
67 | ('group.admin', _('Admin'),)] |
|
67 | ('group.admin', _('Admin'),)] | |
68 | self.register_choices = [ |
|
68 | self.register_choices = [ | |
69 | ('hg.register.none', |
|
69 | ('hg.register.none', | |
70 |
_(' |
|
70 | _('Disabled')), | |
71 | ('hg.register.manual_activate', |
|
71 | ('hg.register.manual_activate', | |
72 |
_(' |
|
72 | _('Allowed with manual account activation')), | |
73 | ('hg.register.auto_activate', |
|
73 | ('hg.register.auto_activate', | |
74 |
_(' |
|
74 | _('Allowed with automatic account activation')), ] | |
75 |
|
75 | |||
76 | self.create_choices = [('hg.create.none', _('Disabled')), |
|
76 | self.create_choices = [('hg.create.none', _('Disabled')), | |
77 | ('hg.create.repository', _('Enabled'))] |
|
77 | ('hg.create.repository', _('Enabled'))] | |
@@ -139,7 +139,7 b' class PermissionsController(BaseControll' | |||||
139 | encoding="UTF-8") |
|
139 | encoding="UTF-8") | |
140 | except Exception: |
|
140 | except Exception: | |
141 | log.error(traceback.format_exc()) |
|
141 | log.error(traceback.format_exc()) | |
142 |
h.flash(_(' |
|
142 | h.flash(_('Error occurred during update of permissions'), | |
143 | category='error') |
|
143 | category='error') | |
144 |
|
144 | |||
145 | return redirect(url('edit_permission', id=id)) |
|
145 | return redirect(url('edit_permission', id=id)) |
@@ -28,7 +28,7 b' import traceback' | |||||
28 | import formencode |
|
28 | import formencode | |
29 | from formencode import htmlfill |
|
29 | from formencode import htmlfill | |
30 |
|
30 | |||
31 | from webob.exc import HTTPInternalServerError |
|
31 | from webob.exc import HTTPInternalServerError, HTTPForbidden | |
32 | from pylons import request, session, tmpl_context as c, url |
|
32 | from pylons import request, session, tmpl_context as c, url | |
33 | from pylons.controllers.util import redirect |
|
33 | from pylons.controllers.util import redirect | |
34 | from pylons.i18n.translation import _ |
|
34 | from pylons.i18n.translation import _ | |
@@ -37,23 +37,25 b' from sqlalchemy.exc import IntegrityErro' | |||||
37 | import rhodecode |
|
37 | import rhodecode | |
38 | from rhodecode.lib import helpers as h |
|
38 | from rhodecode.lib import helpers as h | |
39 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \ |
|
39 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \ | |
40 | HasPermissionAnyDecorator, HasRepoPermissionAllDecorator |
|
40 | HasPermissionAnyDecorator, HasRepoPermissionAllDecorator, NotAnonymous,\ | |
41 | from rhodecode.lib.base import BaseController, render |
|
41 | HasPermissionAny, HasReposGroupPermissionAny, HasRepoPermissionAnyDecorator | |
|
42 | from rhodecode.lib.base import BaseRepoController, render | |||
42 | from rhodecode.lib.utils import invalidate_cache, action_logger, repo_name_slug |
|
43 | from rhodecode.lib.utils import invalidate_cache, action_logger, repo_name_slug | |
43 | from rhodecode.lib.helpers import get_token |
|
44 | from rhodecode.lib.helpers import get_token | |
44 | from rhodecode.model.meta import Session |
|
45 | from rhodecode.model.meta import Session | |
45 | from rhodecode.model.db import User, Repository, UserFollowing, RepoGroup,\ |
|
46 | from rhodecode.model.db import User, Repository, UserFollowing, RepoGroup,\ | |
46 | RhodeCodeSetting |
|
47 | RhodeCodeSetting, RepositoryField | |
47 | from rhodecode.model.forms import RepoForm |
|
48 | from rhodecode.model.forms import RepoForm, RepoFieldForm, RepoPermsForm | |
48 | from rhodecode.model.scm import ScmModel |
|
49 | from rhodecode.model.scm import ScmModel, GroupList | |
49 | from rhodecode.model.repo import RepoModel |
|
50 | from rhodecode.model.repo import RepoModel | |
50 | from rhodecode.lib.compat import json |
|
51 | from rhodecode.lib.compat import json | |
51 | from sqlalchemy.sql.expression import func |
|
52 | from sqlalchemy.sql.expression import func | |
|
53 | from rhodecode.lib.exceptions import AttachedForksError | |||
52 |
|
54 | |||
53 | log = logging.getLogger(__name__) |
|
55 | log = logging.getLogger(__name__) | |
54 |
|
56 | |||
55 |
|
57 | |||
56 | class ReposController(BaseController): |
|
58 | class ReposController(BaseRepoController): | |
57 | """ |
|
59 | """ | |
58 | REST Controller styled on the Atom Publishing Protocol""" |
|
60 | REST Controller styled on the Atom Publishing Protocol""" | |
59 | # To properly map this controller, ensure your config/routing.py |
|
61 | # To properly map this controller, ensure your config/routing.py | |
@@ -61,14 +63,15 b' class ReposController(BaseController):' | |||||
61 | # map.resource('repo', 'repos') |
|
63 | # map.resource('repo', 'repos') | |
62 |
|
64 | |||
63 | @LoginRequired() |
|
65 | @LoginRequired() | |
64 | @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository') |
|
|||
65 | def __before__(self): |
|
66 | def __before__(self): | |
66 | c.admin_user = session.get('admin_user') |
|
67 | c.admin_user = session.get('admin_user') | |
67 | c.admin_username = session.get('admin_username') |
|
68 | c.admin_username = session.get('admin_username') | |
68 | super(ReposController, self).__before__() |
|
69 | super(ReposController, self).__before__() | |
69 |
|
70 | |||
70 | def __load_defaults(self): |
|
71 | def __load_defaults(self): | |
71 | c.repo_groups = RepoGroup.groups_choices(check_perms=True) |
|
72 | acl_groups = GroupList(RepoGroup.query().all(), | |
|
73 | perm_set=['group.write', 'group.admin']) | |||
|
74 | c.repo_groups = RepoGroup.groups_choices(groups=acl_groups) | |||
72 | c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) |
|
75 | c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) | |
73 |
|
76 | |||
74 | repo_model = RepoModel() |
|
77 | repo_model = RepoModel() | |
@@ -116,6 +119,9 b' class ReposController(BaseController):' | |||||
116 | c.stats_percentage = '%.2f' % ((float((last_rev)) / |
|
119 | c.stats_percentage = '%.2f' % ((float((last_rev)) / | |
117 | c.repo_last_rev) * 100) |
|
120 | c.repo_last_rev) * 100) | |
118 |
|
121 | |||
|
122 | c.repo_fields = RepositoryField.query()\ | |||
|
123 | .filter(RepositoryField.repository == db_repo).all() | |||
|
124 | ||||
119 | defaults = RepoModel()._get_defaults(repo_name) |
|
125 | defaults = RepoModel()._get_defaults(repo_name) | |
120 |
|
126 | |||
121 | c.repos_list = [('', _('--REMOVE FORK--'))] |
|
127 | c.repos_list = [('', _('--REMOVE FORK--'))] | |
@@ -136,13 +142,14 b' class ReposController(BaseController):' | |||||
136 | .all() |
|
142 | .all() | |
137 |
|
143 | |||
138 | repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list, |
|
144 | repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list, | |
139 |
admin=True |
|
145 | admin=True, | |
|
146 | super_user_actions=True) | |||
140 | #json used to render the grid |
|
147 | #json used to render the grid | |
141 | c.data = json.dumps(repos_data) |
|
148 | c.data = json.dumps(repos_data) | |
142 |
|
149 | |||
143 | return render('admin/repos/repos.html') |
|
150 | return render('admin/repos/repos.html') | |
144 |
|
151 | |||
145 | @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository') |
|
152 | @NotAnonymous() | |
146 | def create(self): |
|
153 | def create(self): | |
147 | """ |
|
154 | """ | |
148 | POST /repos: Create a new item""" |
|
155 | POST /repos: Create a new item""" | |
@@ -154,15 +161,18 b' class ReposController(BaseController):' | |||||
154 | form_result = RepoForm(repo_groups=c.repo_groups_choices, |
|
161 | form_result = RepoForm(repo_groups=c.repo_groups_choices, | |
155 | landing_revs=c.landing_revs_choices)()\ |
|
162 | landing_revs=c.landing_revs_choices)()\ | |
156 | .to_python(dict(request.POST)) |
|
163 | .to_python(dict(request.POST)) | |
|
164 | ||||
157 | new_repo = RepoModel().create(form_result, |
|
165 | new_repo = RepoModel().create(form_result, | |
158 | self.rhodecode_user.user_id) |
|
166 | self.rhodecode_user.user_id) | |
159 | if form_result['clone_uri']: |
|
167 | if form_result['clone_uri']: | |
160 |
h.flash(_(' |
|
168 | h.flash(_('Created repository %s from %s') \ | |
161 | % (form_result['repo_name'], form_result['clone_uri']), |
|
169 | % (form_result['repo_name'], form_result['clone_uri']), | |
162 | category='success') |
|
170 | category='success') | |
163 | else: |
|
171 | else: | |
164 |
h. |
|
172 | repo_url = h.link_to(form_result['repo_name'], | |
165 | category='success') |
|
173 | h.url('summary_home', repo_name=form_result['repo_name_full'])) | |
|
174 | h.flash(h.literal(_('Created repository %s') % repo_url), | |||
|
175 | category='success') | |||
166 |
|
176 | |||
167 | if request.POST.get('user_created'): |
|
177 | if request.POST.get('user_created'): | |
168 | # created by regular non admin user |
|
178 | # created by regular non admin user | |
@@ -175,16 +185,8 b' class ReposController(BaseController):' | |||||
175 | self.sa) |
|
185 | self.sa) | |
176 | Session().commit() |
|
186 | Session().commit() | |
177 | except formencode.Invalid, errors: |
|
187 | except formencode.Invalid, errors: | |
178 |
|
||||
179 | c.new_repo = errors.value['repo_name'] |
|
|||
180 |
|
||||
181 | if request.POST.get('user_created'): |
|
|||
182 | r = render('admin/repos/repo_add_create_repository.html') |
|
|||
183 | else: |
|
|||
184 | r = render('admin/repos/repo_add.html') |
|
|||
185 |
|
||||
186 | return htmlfill.render( |
|
188 | return htmlfill.render( | |
187 | r, |
|
189 | render('admin/repos/repo_add.html'), | |
188 | defaults=errors.value, |
|
190 | defaults=errors.value, | |
189 | errors=errors.error_dict or {}, |
|
191 | errors=errors.error_dict or {}, | |
190 | prefix_error=False, |
|
192 | prefix_error=False, | |
@@ -192,21 +194,41 b' class ReposController(BaseController):' | |||||
192 |
|
194 | |||
193 | except Exception: |
|
195 | except Exception: | |
194 | log.error(traceback.format_exc()) |
|
196 | log.error(traceback.format_exc()) | |
195 |
msg = _(' |
|
197 | msg = _('Error creating repository %s') \ | |
196 | % form_result.get('repo_name') |
|
198 | % form_result.get('repo_name') | |
197 | h.flash(msg, category='error') |
|
199 | h.flash(msg, category='error') | |
198 | return redirect(url('repos')) |
|
200 | if c.rhodecode_user.is_admin: | |
|
201 | return redirect(url('repos')) | |||
|
202 | return redirect(url('home')) | |||
199 | #redirect to our new repo ! |
|
203 | #redirect to our new repo ! | |
200 | return redirect(url('summary_home', repo_name=new_repo.repo_name)) |
|
204 | return redirect(url('summary_home', repo_name=new_repo.repo_name)) | |
201 |
|
205 | |||
202 | @HasPermissionAllDecorator('hg.admin') |
|
206 | @NotAnonymous() | |
203 | def new(self, format='html'): |
|
207 | def create_repository(self): | |
204 |
"""GET / |
|
208 | """GET /_admin/create_repository: Form to create a new item""" | |
205 | new_repo = request.GET.get('repo', '') |
|
209 | new_repo = request.GET.get('repo', '') | |
|
210 | parent_group = request.GET.get('parent_group') | |||
|
211 | if not HasPermissionAny('hg.admin', 'hg.create.repository')(): | |||
|
212 | #you're not super admin nor have global create permissions, | |||
|
213 | #but maybe you have at least write permission to a parent group ? | |||
|
214 | _gr = RepoGroup.get(parent_group) | |||
|
215 | gr_name = _gr.group_name if _gr else None | |||
|
216 | if not HasReposGroupPermissionAny('group.admin', 'group.write')(group_name=gr_name): | |||
|
217 | raise HTTPForbidden | |||
|
218 | ||||
|
219 | acl_groups = GroupList(RepoGroup.query().all(), | |||
|
220 | perm_set=['group.write', 'group.admin']) | |||
|
221 | c.repo_groups = RepoGroup.groups_choices(groups=acl_groups) | |||
|
222 | c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) | |||
|
223 | choices, c.landing_revs = ScmModel().get_repo_landing_revs() | |||
|
224 | ||||
206 | c.new_repo = repo_name_slug(new_repo) |
|
225 | c.new_repo = repo_name_slug(new_repo) | |
207 | self.__load_defaults() |
|
226 | ||
208 | ## apply the defaults from defaults page |
|
227 | ## apply the defaults from defaults page | |
209 | defaults = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True) |
|
228 | defaults = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True) | |
|
229 | if parent_group: | |||
|
230 | defaults.update({'repo_group': parent_group}) | |||
|
231 | ||||
210 | return htmlfill.render( |
|
232 | return htmlfill.render( | |
211 | render('admin/repos/repo_add.html'), |
|
233 | render('admin/repos/repo_add.html'), | |
212 | defaults=defaults, |
|
234 | defaults=defaults, | |
@@ -215,7 +237,7 b' class ReposController(BaseController):' | |||||
215 | encoding="UTF-8" |
|
237 | encoding="UTF-8" | |
216 | ) |
|
238 | ) | |
217 |
|
239 | |||
218 |
@HasPermissionAllDecorator(' |
|
240 | @HasRepoPermissionAllDecorator('repository.admin') | |
219 | def update(self, repo_name): |
|
241 | def update(self, repo_name): | |
220 | """ |
|
242 | """ | |
221 | PUT /repos/repo_name: Update an existing item""" |
|
243 | PUT /repos/repo_name: Update an existing item""" | |
@@ -259,11 +281,11 b' class ReposController(BaseController):' | |||||
259 |
|
281 | |||
260 | except Exception: |
|
282 | except Exception: | |
261 | log.error(traceback.format_exc()) |
|
283 | log.error(traceback.format_exc()) | |
262 |
h.flash(_(' |
|
284 | h.flash(_('Error occurred during update of repository %s') \ | |
263 | % repo_name, category='error') |
|
285 | % repo_name, category='error') | |
264 | return redirect(url('edit_repo', repo_name=changed_name)) |
|
286 | return redirect(url('edit_repo', repo_name=changed_name)) | |
265 |
|
287 | |||
266 |
@HasPermissionAllDecorator(' |
|
288 | @HasRepoPermissionAllDecorator('repository.admin') | |
267 | def delete(self, repo_name): |
|
289 | def delete(self, repo_name): | |
268 | """ |
|
290 | """ | |
269 | DELETE /repos/repo_name: Delete an existing item""" |
|
291 | DELETE /repos/repo_name: Delete an existing item""" | |
@@ -280,25 +302,27 b' class ReposController(BaseController):' | |||||
280 | h.not_mapped_error(repo_name) |
|
302 | h.not_mapped_error(repo_name) | |
281 | return redirect(url('repos')) |
|
303 | return redirect(url('repos')) | |
282 | try: |
|
304 | try: | |
|
305 | _forks = repo.forks.count() | |||
|
306 | handle_forks = None | |||
|
307 | if _forks and request.POST.get('forks'): | |||
|
308 | do = request.POST['forks'] | |||
|
309 | if do == 'detach_forks': | |||
|
310 | handle_forks = 'detach' | |||
|
311 | h.flash(_('Detached %s forks') % _forks, category='success') | |||
|
312 | elif do == 'delete_forks': | |||
|
313 | handle_forks = 'delete' | |||
|
314 | h.flash(_('Deleted %s forks') % _forks, category='success') | |||
|
315 | repo_model.delete(repo, forks=handle_forks) | |||
283 | action_logger(self.rhodecode_user, 'admin_deleted_repo', |
|
316 | action_logger(self.rhodecode_user, 'admin_deleted_repo', | |
284 |
|
|
317 | repo_name, self.ip_addr, self.sa) | |
285 | repo_model.delete(repo) |
|
|||
286 | invalidate_cache('get_repo_cached_%s' % repo_name) |
|
318 | invalidate_cache('get_repo_cached_%s' % repo_name) | |
287 |
h.flash(_(' |
|
319 | h.flash(_('Deleted repository %s') % repo_name, category='success') | |
288 | Session().commit() |
|
320 | Session().commit() | |
289 |
except |
|
321 | except AttachedForksError: | |
290 | if e.message.find('repositories_fork_id_fkey') != -1: |
|
322 | h.flash(_('Cannot delete %s it still contains attached forks') | |
291 | log.error(traceback.format_exc()) |
|
323 | % repo_name, category='warning') | |
292 | h.flash(_('Cannot delete %s it still contains attached ' |
|
|||
293 | 'forks') % repo_name, |
|
|||
294 | category='warning') |
|
|||
295 | else: |
|
|||
296 | log.error(traceback.format_exc()) |
|
|||
297 | h.flash(_('An error occurred during ' |
|
|||
298 | 'deletion of %s') % repo_name, |
|
|||
299 | category='error') |
|
|||
300 |
|
324 | |||
301 |
except Exception |
|
325 | except Exception: | |
302 | log.error(traceback.format_exc()) |
|
326 | log.error(traceback.format_exc()) | |
303 | h.flash(_('An error occurred during deletion of %s') % repo_name, |
|
327 | h.flash(_('An error occurred during deletion of %s') % repo_name, | |
304 | category='error') |
|
328 | category='error') | |
@@ -306,6 +330,42 b' class ReposController(BaseController):' | |||||
306 | return redirect(url('repos')) |
|
330 | return redirect(url('repos')) | |
307 |
|
331 | |||
308 | @HasRepoPermissionAllDecorator('repository.admin') |
|
332 | @HasRepoPermissionAllDecorator('repository.admin') | |
|
333 | def set_repo_perm_member(self, repo_name): | |||
|
334 | form = RepoPermsForm()().to_python(request.POST) | |||
|
335 | ||||
|
336 | perms_new = form['perms_new'] | |||
|
337 | perms_updates = form['perms_updates'] | |||
|
338 | cur_repo = repo_name | |||
|
339 | ||||
|
340 | # update permissions | |||
|
341 | for member, perm, member_type in perms_updates: | |||
|
342 | if member_type == 'user': | |||
|
343 | # this updates existing one | |||
|
344 | RepoModel().grant_user_permission( | |||
|
345 | repo=cur_repo, user=member, perm=perm | |||
|
346 | ) | |||
|
347 | else: | |||
|
348 | RepoModel().grant_users_group_permission( | |||
|
349 | repo=cur_repo, group_name=member, perm=perm | |||
|
350 | ) | |||
|
351 | # set new permissions | |||
|
352 | for member, perm, member_type in perms_new: | |||
|
353 | if member_type == 'user': | |||
|
354 | RepoModel().grant_user_permission( | |||
|
355 | repo=cur_repo, user=member, perm=perm | |||
|
356 | ) | |||
|
357 | else: | |||
|
358 | RepoModel().grant_users_group_permission( | |||
|
359 | repo=cur_repo, group_name=member, perm=perm | |||
|
360 | ) | |||
|
361 | #TODO: implement this | |||
|
362 | #action_logger(self.rhodecode_user, 'admin_changed_repo_permissions', | |||
|
363 | # repo_name, self.ip_addr, self.sa) | |||
|
364 | Session().commit() | |||
|
365 | h.flash(_('Repository permissions updated'), category='success') | |||
|
366 | return redirect(url('edit_repo', repo_name=repo_name)) | |||
|
367 | ||||
|
368 | @HasRepoPermissionAllDecorator('repository.admin') | |||
309 | def delete_perm_user(self, repo_name): |
|
369 | def delete_perm_user(self, repo_name): | |
310 | """ |
|
370 | """ | |
311 | DELETE an existing repository permission user |
|
371 | DELETE an existing repository permission user | |
@@ -315,6 +375,9 b' class ReposController(BaseController):' | |||||
315 | try: |
|
375 | try: | |
316 | RepoModel().revoke_user_permission(repo=repo_name, |
|
376 | RepoModel().revoke_user_permission(repo=repo_name, | |
317 | user=request.POST['user_id']) |
|
377 | user=request.POST['user_id']) | |
|
378 | #TODO: implement this | |||
|
379 | #action_logger(self.rhodecode_user, 'admin_revoked_repo_permissions', | |||
|
380 | # repo_name, self.ip_addr, self.sa) | |||
318 | Session().commit() |
|
381 | Session().commit() | |
319 | except Exception: |
|
382 | except Exception: | |
320 | log.error(traceback.format_exc()) |
|
383 | log.error(traceback.format_exc()) | |
@@ -325,7 +388,7 b' class ReposController(BaseController):' | |||||
325 | @HasRepoPermissionAllDecorator('repository.admin') |
|
388 | @HasRepoPermissionAllDecorator('repository.admin') | |
326 | def delete_perm_users_group(self, repo_name): |
|
389 | def delete_perm_users_group(self, repo_name): | |
327 | """ |
|
390 | """ | |
328 |
DELETE an existing repository permission user |
|
391 | DELETE an existing repository permission user group | |
329 |
|
392 | |||
330 | :param repo_name: |
|
393 | :param repo_name: | |
331 | """ |
|
394 | """ | |
@@ -338,11 +401,11 b' class ReposController(BaseController):' | |||||
338 | except Exception: |
|
401 | except Exception: | |
339 | log.error(traceback.format_exc()) |
|
402 | log.error(traceback.format_exc()) | |
340 | h.flash(_('An error occurred during deletion of repository' |
|
403 | h.flash(_('An error occurred during deletion of repository' | |
341 |
' user |
|
404 | ' user groups'), | |
342 | category='error') |
|
405 | category='error') | |
343 | raise HTTPInternalServerError() |
|
406 | raise HTTPInternalServerError() | |
344 |
|
407 | |||
345 |
@HasPermissionAllDecorator(' |
|
408 | @HasRepoPermissionAllDecorator('repository.admin') | |
346 | def repo_stats(self, repo_name): |
|
409 | def repo_stats(self, repo_name): | |
347 | """ |
|
410 | """ | |
348 | DELETE an existing repository statistics |
|
411 | DELETE an existing repository statistics | |
@@ -359,7 +422,7 b' class ReposController(BaseController):' | |||||
359 | category='error') |
|
422 | category='error') | |
360 | return redirect(url('edit_repo', repo_name=repo_name)) |
|
423 | return redirect(url('edit_repo', repo_name=repo_name)) | |
361 |
|
424 | |||
362 |
@HasPermissionAllDecorator(' |
|
425 | @HasRepoPermissionAllDecorator('repository.admin') | |
363 | def repo_cache(self, repo_name): |
|
426 | def repo_cache(self, repo_name): | |
364 | """ |
|
427 | """ | |
365 | INVALIDATE existing repository cache |
|
428 | INVALIDATE existing repository cache | |
@@ -376,7 +439,7 b' class ReposController(BaseController):' | |||||
376 | category='error') |
|
439 | category='error') | |
377 | return redirect(url('edit_repo', repo_name=repo_name)) |
|
440 | return redirect(url('edit_repo', repo_name=repo_name)) | |
378 |
|
441 | |||
379 |
@HasPermissionAllDecorator(' |
|
442 | @HasRepoPermissionAllDecorator('repository.admin') | |
380 | def repo_locking(self, repo_name): |
|
443 | def repo_locking(self, repo_name): | |
381 | """ |
|
444 | """ | |
382 | Unlock repository when it is locked ! |
|
445 | Unlock repository when it is locked ! | |
@@ -396,7 +459,34 b' class ReposController(BaseController):' | |||||
396 | category='error') |
|
459 | category='error') | |
397 | return redirect(url('edit_repo', repo_name=repo_name)) |
|
460 | return redirect(url('edit_repo', repo_name=repo_name)) | |
398 |
|
461 | |||
399 |
@HasPermissionA |
|
462 | @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') | |
|
463 | def toggle_locking(self, repo_name): | |||
|
464 | """ | |||
|
465 | Toggle locking of repository by simple GET call to url | |||
|
466 | ||||
|
467 | :param repo_name: | |||
|
468 | """ | |||
|
469 | ||||
|
470 | try: | |||
|
471 | repo = Repository.get_by_repo_name(repo_name) | |||
|
472 | ||||
|
473 | if repo.enable_locking: | |||
|
474 | if repo.locked[0]: | |||
|
475 | Repository.unlock(repo) | |||
|
476 | action = _('Unlocked') | |||
|
477 | else: | |||
|
478 | Repository.lock(repo, c.rhodecode_user.user_id) | |||
|
479 | action = _('Locked') | |||
|
480 | ||||
|
481 | h.flash(_('Repository has been %s') % action, | |||
|
482 | category='success') | |||
|
483 | except Exception, e: | |||
|
484 | log.error(traceback.format_exc()) | |||
|
485 | h.flash(_('An error occurred during unlocking'), | |||
|
486 | category='error') | |||
|
487 | return redirect(url('summary_home', repo_name=repo_name)) | |||
|
488 | ||||
|
489 | @HasRepoPermissionAllDecorator('repository.admin') | |||
400 | def repo_public_journal(self, repo_name): |
|
490 | def repo_public_journal(self, repo_name): | |
401 | """ |
|
491 | """ | |
402 | Set's this repository to be visible in public journal, |
|
492 | Set's this repository to be visible in public journal, | |
@@ -415,7 +505,7 b' class ReposController(BaseController):' | |||||
415 | h.flash(_('Updated repository visibility in public journal'), |
|
505 | h.flash(_('Updated repository visibility in public journal'), | |
416 | category='success') |
|
506 | category='success') | |
417 | Session().commit() |
|
507 | Session().commit() | |
418 | except: |
|
508 | except Exception: | |
419 | h.flash(_('An error occurred during setting this' |
|
509 | h.flash(_('An error occurred during setting this' | |
420 | ' repository in public journal'), |
|
510 | ' repository in public journal'), | |
421 | category='error') |
|
511 | category='error') | |
@@ -424,7 +514,7 b' class ReposController(BaseController):' | |||||
424 | h.flash(_('Token mismatch'), category='error') |
|
514 | h.flash(_('Token mismatch'), category='error') | |
425 | return redirect(url('edit_repo', repo_name=repo_name)) |
|
515 | return redirect(url('edit_repo', repo_name=repo_name)) | |
426 |
|
516 | |||
427 |
@HasPermissionAllDecorator(' |
|
517 | @HasRepoPermissionAllDecorator('repository.admin') | |
428 | def repo_pull(self, repo_name): |
|
518 | def repo_pull(self, repo_name): | |
429 | """ |
|
519 | """ | |
430 | Runs task to update given repository with remote changes, |
|
520 | Runs task to update given repository with remote changes, | |
@@ -441,7 +531,7 b' class ReposController(BaseController):' | |||||
441 |
|
531 | |||
442 | return redirect(url('edit_repo', repo_name=repo_name)) |
|
532 | return redirect(url('edit_repo', repo_name=repo_name)) | |
443 |
|
533 | |||
444 |
@HasPermissionAllDecorator(' |
|
534 | @HasRepoPermissionAllDecorator('repository.admin') | |
445 | def repo_as_fork(self, repo_name): |
|
535 | def repo_as_fork(self, repo_name): | |
446 | """ |
|
536 | """ | |
447 | Mark given repository as a fork of another |
|
537 | Mark given repository as a fork of another | |
@@ -468,7 +558,7 b' class ReposController(BaseController):' | |||||
468 | """GET /repos/repo_name: Show a specific item""" |
|
558 | """GET /repos/repo_name: Show a specific item""" | |
469 | # url('repo', repo_name=ID) |
|
559 | # url('repo', repo_name=ID) | |
470 |
|
560 | |||
471 |
@HasPermissionAllDecorator(' |
|
561 | @HasRepoPermissionAllDecorator('repository.admin') | |
472 | def edit(self, repo_name, format='html'): |
|
562 | def edit(self, repo_name, format='html'): | |
473 | """GET /repos/repo_name/edit: Form to edit an existing item""" |
|
563 | """GET /repos/repo_name/edit: Form to edit an existing item""" | |
474 | # url('edit_repo', repo_name=ID) |
|
564 | # url('edit_repo', repo_name=ID) | |
@@ -480,3 +570,37 b' class ReposController(BaseController):' | |||||
480 | encoding="UTF-8", |
|
570 | encoding="UTF-8", | |
481 | force_defaults=False |
|
571 | force_defaults=False | |
482 | ) |
|
572 | ) | |
|
573 | ||||
|
574 | @HasPermissionAllDecorator('hg.admin') | |||
|
575 | def create_repo_field(self, repo_name): | |||
|
576 | try: | |||
|
577 | form_result = RepoFieldForm()().to_python(dict(request.POST)) | |||
|
578 | new_field = RepositoryField() | |||
|
579 | new_field.repository = Repository.get_by_repo_name(repo_name) | |||
|
580 | new_field.field_key = form_result['new_field_key'] | |||
|
581 | new_field.field_type = form_result['new_field_type'] # python type | |||
|
582 | new_field.field_value = form_result['new_field_value'] # set initial blank value | |||
|
583 | new_field.field_desc = form_result['new_field_desc'] | |||
|
584 | new_field.field_label = form_result['new_field_label'] | |||
|
585 | Session().add(new_field) | |||
|
586 | Session().commit() | |||
|
587 | ||||
|
588 | except Exception, e: | |||
|
589 | log.error(traceback.format_exc()) | |||
|
590 | msg = _('An error occurred during creation of field') | |||
|
591 | if isinstance(e, formencode.Invalid): | |||
|
592 | msg += ". " + e.msg | |||
|
593 | h.flash(msg, category='error') | |||
|
594 | return redirect(url('edit_repo', repo_name=repo_name)) | |||
|
595 | ||||
|
596 | @HasPermissionAllDecorator('hg.admin') | |||
|
597 | def delete_repo_field(self, repo_name, field_id): | |||
|
598 | field = RepositoryField.get_or_404(field_id) | |||
|
599 | try: | |||
|
600 | Session().delete(field) | |||
|
601 | Session().commit() | |||
|
602 | except Exception, e: | |||
|
603 | log.error(traceback.format_exc()) | |||
|
604 | msg = _('An error occurred during removal of field') | |||
|
605 | h.flash(msg, category='error') | |||
|
606 | return redirect(url('edit_repo', repo_name=repo_name)) |
@@ -3,7 +3,7 b'' | |||||
3 | rhodecode.controllers.admin.repos_groups |
|
3 | rhodecode.controllers.admin.repos_groups | |
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
5 |
|
5 | |||
6 |
Repositor |
|
6 | Repository groups controller for RhodeCode | |
7 |
|
7 | |||
8 | :created_on: Mar 23, 2010 |
|
8 | :created_on: Mar 23, 2010 | |
9 | :author: marcink |
|
9 | :author: marcink | |
@@ -30,7 +30,7 b' import formencode' | |||||
30 | from formencode import htmlfill |
|
30 | from formencode import htmlfill | |
31 |
|
31 | |||
32 | from pylons import request, tmpl_context as c, url |
|
32 | from pylons import request, tmpl_context as c, url | |
33 | from pylons.controllers.util import redirect |
|
33 | from pylons.controllers.util import abort, redirect | |
34 | from pylons.i18n.translation import _ |
|
34 | from pylons.i18n.translation import _ | |
35 |
|
35 | |||
36 | from sqlalchemy.exc import IntegrityError |
|
36 | from sqlalchemy.exc import IntegrityError | |
@@ -39,7 +39,8 b' import rhodecode' | |||||
39 | from rhodecode.lib import helpers as h |
|
39 | from rhodecode.lib import helpers as h | |
40 | from rhodecode.lib.ext_json import json |
|
40 | from rhodecode.lib.ext_json import json | |
41 | from rhodecode.lib.auth import LoginRequired, HasPermissionAnyDecorator,\ |
|
41 | from rhodecode.lib.auth import LoginRequired, HasPermissionAnyDecorator,\ | |
42 | HasReposGroupPermissionAnyDecorator |
|
42 | HasReposGroupPermissionAnyDecorator, HasReposGroupPermissionAll,\ | |
|
43 | HasPermissionAll | |||
43 | from rhodecode.lib.base import BaseController, render |
|
44 | from rhodecode.lib.base import BaseController, render | |
44 | from rhodecode.model.db import RepoGroup, Repository |
|
45 | from rhodecode.model.db import RepoGroup, Repository | |
45 | from rhodecode.model.repos_group import ReposGroupModel |
|
46 | from rhodecode.model.repos_group import ReposGroupModel | |
@@ -47,8 +48,9 b' from rhodecode.model.forms import ReposG' | |||||
47 | from rhodecode.model.meta import Session |
|
48 | from rhodecode.model.meta import Session | |
48 | from rhodecode.model.repo import RepoModel |
|
49 | from rhodecode.model.repo import RepoModel | |
49 | from webob.exc import HTTPInternalServerError, HTTPNotFound |
|
50 | from webob.exc import HTTPInternalServerError, HTTPNotFound | |
50 | from rhodecode.lib.utils2 import str2bool |
|
51 | from rhodecode.lib.utils2 import str2bool, safe_int | |
51 | from sqlalchemy.sql.expression import func |
|
52 | from sqlalchemy.sql.expression import func | |
|
53 | from rhodecode.model.scm import GroupList | |||
52 |
|
54 | |||
53 | log = logging.getLogger(__name__) |
|
55 | log = logging.getLogger(__name__) | |
54 |
|
56 | |||
@@ -63,10 +65,21 b' class ReposGroupsController(BaseControll' | |||||
63 | def __before__(self): |
|
65 | def __before__(self): | |
64 | super(ReposGroupsController, self).__before__() |
|
66 | super(ReposGroupsController, self).__before__() | |
65 |
|
67 | |||
66 | def __load_defaults(self): |
|
68 | def __load_defaults(self, allow_empty_group=False, exclude_group_ids=[]): | |
67 | c.repo_groups = RepoGroup.groups_choices() |
|
69 | if HasPermissionAll('hg.admin')('group edit'): | |
|
70 | #we're global admin, we're ok and we can create TOP level groups | |||
|
71 | allow_empty_group = True | |||
|
72 | ||||
|
73 | #override the choices for this form, we need to filter choices | |||
|
74 | #and display only those we have ADMIN right | |||
|
75 | groups_with_admin_rights = GroupList(RepoGroup.query().all(), | |||
|
76 | perm_set=['group.admin']) | |||
|
77 | c.repo_groups = RepoGroup.groups_choices(groups=groups_with_admin_rights, | |||
|
78 | show_empty_group=allow_empty_group) | |||
|
79 | # exclude filtered ids | |||
|
80 | c.repo_groups = filter(lambda x: x[0] not in exclude_group_ids, | |||
|
81 | c.repo_groups) | |||
68 | c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) |
|
82 | c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) | |
69 |
|
||||
70 | repo_model = RepoModel() |
|
83 | repo_model = RepoModel() | |
71 | c.users_array = repo_model.get_users_js() |
|
84 | c.users_array = repo_model.get_users_js() | |
72 | c.users_groups_array = repo_model.get_users_groups_js() |
|
85 | c.users_groups_array = repo_model.get_users_groups_js() | |
@@ -77,7 +90,6 b' class ReposGroupsController(BaseControll' | |||||
77 |
|
90 | |||
78 | :param group_id: |
|
91 | :param group_id: | |
79 | """ |
|
92 | """ | |
80 | self.__load_defaults() |
|
|||
81 | repo_group = RepoGroup.get_or_404(group_id) |
|
93 | repo_group = RepoGroup.get_or_404(group_id) | |
82 | data = repo_group.get_dict() |
|
94 | data = repo_group.get_dict() | |
83 | data['group_name'] = repo_group.name |
|
95 | data['group_name'] = repo_group.name | |
@@ -94,34 +106,46 b' class ReposGroupsController(BaseControll' | |||||
94 |
|
106 | |||
95 | return data |
|
107 | return data | |
96 |
|
108 | |||
97 | @HasPermissionAnyDecorator('hg.admin') |
|
109 | def _revoke_perms_on_yourself(self, form_result): | |
|
110 | _up = filter(lambda u: c.rhodecode_user.username == u[0], | |||
|
111 | form_result['perms_updates']) | |||
|
112 | _new = filter(lambda u: c.rhodecode_user.username == u[0], | |||
|
113 | form_result['perms_new']) | |||
|
114 | if _new and _new[0][1] != 'group.admin' or _up and _up[0][1] != 'group.admin': | |||
|
115 | return True | |||
|
116 | return False | |||
|
117 | ||||
98 | def index(self, format='html'): |
|
118 | def index(self, format='html'): | |
99 | """GET /repos_groups: All items in the collection""" |
|
119 | """GET /repos_groups: All items in the collection""" | |
100 | # url('repos_groups') |
|
120 | # url('repos_groups') | |
|
121 | group_iter = GroupList(RepoGroup.query().all(), perm_set=['group.admin']) | |||
101 | sk = lambda g: g.parents[0].group_name if g.parents else g.group_name |
|
122 | sk = lambda g: g.parents[0].group_name if g.parents else g.group_name | |
102 |
c.groups = sorted( |
|
123 | c.groups = sorted(group_iter, key=sk) | |
103 | return render('admin/repos_groups/repos_groups_show.html') |
|
124 | return render('admin/repos_groups/repos_groups_show.html') | |
104 |
|
125 | |||
105 | @HasPermissionAnyDecorator('hg.admin') |
|
|||
106 | def create(self): |
|
126 | def create(self): | |
107 | """POST /repos_groups: Create a new item""" |
|
127 | """POST /repos_groups: Create a new item""" | |
108 | # url('repos_groups') |
|
128 | # url('repos_groups') | |
|
129 | ||||
109 | self.__load_defaults() |
|
130 | self.__load_defaults() | |
110 | repos_group_form = ReposGroupForm(available_groups = |
|
131 | ||
111 | c.repo_groups_choices)() |
|
132 | # permissions for can create group based on parent_id are checked | |
|
133 | # here in the Form | |||
|
134 | repos_group_form = ReposGroupForm(available_groups= | |||
|
135 | map(lambda k: unicode(k[0]), c.repo_groups))() | |||
112 | try: |
|
136 | try: | |
113 | form_result = repos_group_form.to_python(dict(request.POST)) |
|
137 | form_result = repos_group_form.to_python(dict(request.POST)) | |
114 | ReposGroupModel().create( |
|
138 | ReposGroupModel().create( | |
115 | group_name=form_result['group_name'], |
|
139 | group_name=form_result['group_name'], | |
116 | group_description=form_result['group_description'], |
|
140 | group_description=form_result['group_description'], | |
117 | parent=form_result['group_parent_id'] |
|
141 | parent=form_result['group_parent_id'], | |
|
142 | owner=self.rhodecode_user.user_id | |||
118 | ) |
|
143 | ) | |
119 | Session().commit() |
|
144 | Session().commit() | |
120 |
h.flash(_(' |
|
145 | h.flash(_('Created repository group %s') \ | |
121 | % form_result['group_name'], category='success') |
|
146 | % form_result['group_name'], category='success') | |
122 | #TODO: in futureaction_logger(, '', '', '', self.sa) |
|
147 | #TODO: in futureaction_logger(, '', '', '', self.sa) | |
123 | except formencode.Invalid, errors: |
|
148 | except formencode.Invalid, errors: | |
124 |
|
||||
125 | return htmlfill.render( |
|
149 | return htmlfill.render( | |
126 | render('admin/repos_groups/repos_groups_add.html'), |
|
150 | render('admin/repos_groups/repos_groups_add.html'), | |
127 | defaults=errors.value, |
|
151 | defaults=errors.value, | |
@@ -130,42 +154,73 b' class ReposGroupsController(BaseControll' | |||||
130 | encoding="UTF-8") |
|
154 | encoding="UTF-8") | |
131 | except Exception: |
|
155 | except Exception: | |
132 | log.error(traceback.format_exc()) |
|
156 | log.error(traceback.format_exc()) | |
133 |
h.flash(_(' |
|
157 | h.flash(_('Error occurred during creation of repository group %s') \ | |
134 | % request.POST.get('group_name'), category='error') |
|
158 | % request.POST.get('group_name'), category='error') | |
|
159 | parent_group_id = form_result['group_parent_id'] | |||
|
160 | #TODO: maybe we should get back to the main view, not the admin one | |||
|
161 | return redirect(url('repos_groups', parent_group=parent_group_id)) | |||
135 |
|
162 | |||
136 | return redirect(url('repos_groups')) |
|
|||
137 |
|
||||
138 | @HasPermissionAnyDecorator('hg.admin') |
|
|||
139 | def new(self, format='html'): |
|
163 | def new(self, format='html'): | |
140 | """GET /repos_groups/new: Form to create a new item""" |
|
164 | """GET /repos_groups/new: Form to create a new item""" | |
141 | # url('new_repos_group') |
|
165 | # url('new_repos_group') | |
|
166 | if HasPermissionAll('hg.admin')('group create'): | |||
|
167 | #we're global admin, we're ok and we can create TOP level groups | |||
|
168 | pass | |||
|
169 | else: | |||
|
170 | # we pass in parent group into creation form, thus we know | |||
|
171 | # what would be the group, we can check perms here ! | |||
|
172 | group_id = safe_int(request.GET.get('parent_group')) | |||
|
173 | group = RepoGroup.get(group_id) if group_id else None | |||
|
174 | group_name = group.group_name if group else None | |||
|
175 | if HasReposGroupPermissionAll('group.admin')(group_name, 'group create'): | |||
|
176 | pass | |||
|
177 | else: | |||
|
178 | return abort(403) | |||
|
179 | ||||
142 | self.__load_defaults() |
|
180 | self.__load_defaults() | |
143 | return render('admin/repos_groups/repos_groups_add.html') |
|
181 | return render('admin/repos_groups/repos_groups_add.html') | |
144 |
|
182 | |||
145 |
@HasPermissionAnyDecorator(' |
|
183 | @HasReposGroupPermissionAnyDecorator('group.admin') | |
146 |
def update(self, |
|
184 | def update(self, group_name): | |
147 |
"""PUT /repos_groups/ |
|
185 | """PUT /repos_groups/group_name: Update an existing item""" | |
148 | # Forms posted to this method should contain a hidden field: |
|
186 | # Forms posted to this method should contain a hidden field: | |
149 | # <input type="hidden" name="_method" value="PUT" /> |
|
187 | # <input type="hidden" name="_method" value="PUT" /> | |
150 | # Or using helpers: |
|
188 | # Or using helpers: | |
151 |
# h.form(url('repos_group', |
|
189 | # h.form(url('repos_group', group_name=GROUP_NAME), | |
152 | # method='put') |
|
190 | # method='put') | |
153 |
# url('repos_group', |
|
191 | # url('repos_group', group_name=GROUP_NAME) | |
154 |
|
192 | |||
155 | self.__load_defaults() |
|
193 | c.repos_group = ReposGroupModel()._get_repos_group(group_name) | |
156 | c.repos_group = RepoGroup.get(id) |
|
194 | if HasPermissionAll('hg.admin')('group edit'): | |
|
195 | #we're global admin, we're ok and we can create TOP level groups | |||
|
196 | allow_empty_group = True | |||
|
197 | elif not c.repos_group.parent_group: | |||
|
198 | allow_empty_group = True | |||
|
199 | else: | |||
|
200 | allow_empty_group = False | |||
|
201 | self.__load_defaults(allow_empty_group=allow_empty_group, | |||
|
202 | exclude_group_ids=[c.repos_group.group_id]) | |||
157 |
|
203 | |||
158 | repos_group_form = ReposGroupForm( |
|
204 | repos_group_form = ReposGroupForm( | |
159 | edit=True, |
|
205 | edit=True, | |
160 | old_data=c.repos_group.get_dict(), |
|
206 | old_data=c.repos_group.get_dict(), | |
161 | available_groups=c.repo_groups_choices |
|
207 | available_groups=c.repo_groups_choices, | |
|
208 | can_create_in_root=allow_empty_group, | |||
162 | )() |
|
209 | )() | |
163 | try: |
|
210 | try: | |
164 | form_result = repos_group_form.to_python(dict(request.POST)) |
|
211 | form_result = repos_group_form.to_python(dict(request.POST)) | |
165 | ReposGroupModel().update(id, form_result) |
|
212 | if not c.rhodecode_user.is_admin: | |
|
213 | if self._revoke_perms_on_yourself(form_result): | |||
|
214 | msg = _('Cannot revoke permission for yourself as admin') | |||
|
215 | h.flash(msg, category='warning') | |||
|
216 | raise Exception('revoke admin permission on self') | |||
|
217 | ||||
|
218 | new_gr = ReposGroupModel().update(group_name, form_result) | |||
166 | Session().commit() |
|
219 | Session().commit() | |
167 |
h.flash(_(' |
|
220 | h.flash(_('Updated repository group %s') \ | |
168 | % form_result['group_name'], category='success') |
|
221 | % form_result['group_name'], category='success') | |
|
222 | # we now have new name ! | |||
|
223 | group_name = new_gr.group_name | |||
169 | #TODO: in future action_logger(, '', '', '', self.sa) |
|
224 | #TODO: in future action_logger(, '', '', '', self.sa) | |
170 | except formencode.Invalid, errors: |
|
225 | except formencode.Invalid, errors: | |
171 |
|
226 | |||
@@ -177,61 +232,60 b' class ReposGroupsController(BaseControll' | |||||
177 | encoding="UTF-8") |
|
232 | encoding="UTF-8") | |
178 | except Exception: |
|
233 | except Exception: | |
179 | log.error(traceback.format_exc()) |
|
234 | log.error(traceback.format_exc()) | |
180 |
h.flash(_(' |
|
235 | h.flash(_('Error occurred during update of repository group %s') \ | |
181 | % request.POST.get('group_name'), category='error') |
|
236 | % request.POST.get('group_name'), category='error') | |
182 |
|
237 | |||
183 |
return redirect(url('edit_repos_group', |
|
238 | return redirect(url('edit_repos_group', group_name=group_name)) | |
184 |
|
239 | |||
185 |
@HasPermissionAnyDecorator(' |
|
240 | @HasReposGroupPermissionAnyDecorator('group.admin') | |
186 |
def delete(self, |
|
241 | def delete(self, group_name): | |
187 |
"""DELETE /repos_groups/ |
|
242 | """DELETE /repos_groups/group_name: Delete an existing item""" | |
188 | # Forms posted to this method should contain a hidden field: |
|
243 | # Forms posted to this method should contain a hidden field: | |
189 | # <input type="hidden" name="_method" value="DELETE" /> |
|
244 | # <input type="hidden" name="_method" value="DELETE" /> | |
190 | # Or using helpers: |
|
245 | # Or using helpers: | |
191 |
# h.form(url('repos_group', |
|
246 | # h.form(url('repos_group', group_name=GROUP_NAME), | |
192 | # method='delete') |
|
247 | # method='delete') | |
193 |
# url('repos_group', |
|
248 | # url('repos_group', group_name=GROUP_NAME) | |
194 |
|
249 | |||
195 | gr = RepoGroup.get(id) |
|
250 | gr = c.repos_group = ReposGroupModel()._get_repos_group(group_name) | |
196 | repos = gr.repositories.all() |
|
251 | repos = gr.repositories.all() | |
197 | if repos: |
|
252 | if repos: | |
198 | h.flash(_('This group contains %s repositores and cannot be ' |
|
253 | h.flash(_('This group contains %s repositores and cannot be ' | |
199 | 'deleted') % len(repos), |
|
254 | 'deleted') % len(repos), category='warning') | |
200 | category='error') |
|
255 | return redirect(url('repos_groups')) | |
|
256 | ||||
|
257 | children = gr.children.all() | |||
|
258 | if children: | |||
|
259 | h.flash(_('This group contains %s subgroups and cannot be deleted' | |||
|
260 | % (len(children))), category='warning') | |||
201 | return redirect(url('repos_groups')) |
|
261 | return redirect(url('repos_groups')) | |
202 |
|
262 | |||
203 | try: |
|
263 | try: | |
204 |
ReposGroupModel().delete( |
|
264 | ReposGroupModel().delete(group_name) | |
205 | Session().commit() |
|
265 | Session().commit() | |
206 |
h.flash(_(' |
|
266 | h.flash(_('Removed repository group %s') % group_name, | |
207 | category='success') |
|
267 | category='success') | |
208 | #TODO: in future action_logger(, '', '', '', self.sa) |
|
268 | #TODO: in future action_logger(, '', '', '', self.sa) | |
209 | except IntegrityError, e: |
|
|||
210 | if str(e.message).find('groups_group_parent_id_fkey') != -1: |
|
|||
211 | log.error(traceback.format_exc()) |
|
|||
212 | h.flash(_('Cannot delete this group it still contains ' |
|
|||
213 | 'subgroups'), |
|
|||
214 | category='warning') |
|
|||
215 | else: |
|
|||
216 | log.error(traceback.format_exc()) |
|
|||
217 | h.flash(_('error occurred during deletion of repos ' |
|
|||
218 | 'group %s') % gr.group_name, category='error') |
|
|||
219 |
|
||||
220 | except Exception: |
|
269 | except Exception: | |
221 | log.error(traceback.format_exc()) |
|
270 | log.error(traceback.format_exc()) | |
222 |
h.flash(_(' |
|
271 | h.flash(_('Error occurred during deletion of repos ' | |
223 |
'group %s') % |
|
272 | 'group %s') % group_name, category='error') | |
224 |
|
273 | |||
225 | return redirect(url('repos_groups')) |
|
274 | return redirect(url('repos_groups')) | |
226 |
|
275 | |||
227 | @HasReposGroupPermissionAnyDecorator('group.admin') |
|
276 | @HasReposGroupPermissionAnyDecorator('group.admin') | |
228 | def delete_repos_group_user_perm(self, group_name): |
|
277 | def delete_repos_group_user_perm(self, group_name): | |
229 | """ |
|
278 | """ | |
230 |
DELETE an existing repositor |
|
279 | DELETE an existing repository group permission user | |
231 |
|
280 | |||
232 | :param group_name: |
|
281 | :param group_name: | |
233 | """ |
|
282 | """ | |
234 | try: |
|
283 | try: | |
|
284 | if not c.rhodecode_user.is_admin: | |||
|
285 | if c.rhodecode_user.user_id == safe_int(request.POST['user_id']): | |||
|
286 | msg = _('Cannot revoke permission for yourself as admin') | |||
|
287 | h.flash(msg, category='warning') | |||
|
288 | raise Exception('revoke admin permission on self') | |||
235 | recursive = str2bool(request.POST.get('recursive', False)) |
|
289 | recursive = str2bool(request.POST.get('recursive', False)) | |
236 | ReposGroupModel().delete_permission( |
|
290 | ReposGroupModel().delete_permission( | |
237 | repos_group=group_name, obj=request.POST['user_id'], |
|
291 | repos_group=group_name, obj=request.POST['user_id'], | |
@@ -247,7 +301,7 b' class ReposGroupsController(BaseControll' | |||||
247 | @HasReposGroupPermissionAnyDecorator('group.admin') |
|
301 | @HasReposGroupPermissionAnyDecorator('group.admin') | |
248 | def delete_repos_group_users_group_perm(self, group_name): |
|
302 | def delete_repos_group_users_group_perm(self, group_name): | |
249 | """ |
|
303 | """ | |
250 |
DELETE an existing repositor |
|
304 | DELETE an existing repository group permission user group | |
251 |
|
305 | |||
252 | :param group_name: |
|
306 | :param group_name: | |
253 | """ |
|
307 | """ | |
@@ -262,7 +316,7 b' class ReposGroupsController(BaseControll' | |||||
262 | except Exception: |
|
316 | except Exception: | |
263 | log.error(traceback.format_exc()) |
|
317 | log.error(traceback.format_exc()) | |
264 | h.flash(_('An error occurred during deletion of group' |
|
318 | h.flash(_('An error occurred during deletion of group' | |
265 |
' user |
|
319 | ' user groups'), | |
266 | category='error') |
|
320 | category='error') | |
267 | raise HTTPInternalServerError() |
|
321 | raise HTTPInternalServerError() | |
268 |
|
322 | |||
@@ -279,11 +333,11 b' class ReposGroupsController(BaseControll' | |||||
279 |
|
333 | |||
280 | @HasReposGroupPermissionAnyDecorator('group.read', 'group.write', |
|
334 | @HasReposGroupPermissionAnyDecorator('group.read', 'group.write', | |
281 | 'group.admin') |
|
335 | 'group.admin') | |
282 |
def show(self, |
|
336 | def show(self, group_name, format='html'): | |
283 |
"""GET /repos_groups/ |
|
337 | """GET /repos_groups/group_name: Show a specific item""" | |
284 |
# url('repos_group', |
|
338 | # url('repos_group', group_name=GROUP_NAME) | |
285 |
|
339 | |||
286 | c.group = RepoGroup.get_or_404(id) |
|
340 | c.group = c.repos_group = ReposGroupModel()._get_repos_group(group_name) | |
287 | c.group_repos = c.group.repositories.all() |
|
341 | c.group_repos = c.group.repositories.all() | |
288 |
|
342 | |||
289 | #overwrite our cached list with current filter |
|
343 | #overwrite our cached list with current filter | |
@@ -291,15 +345,15 b' class ReposGroupsController(BaseControll' | |||||
291 | c.repo_cnt = 0 |
|
345 | c.repo_cnt = 0 | |
292 |
|
346 | |||
293 | groups = RepoGroup.query().order_by(RepoGroup.group_name)\ |
|
347 | groups = RepoGroup.query().order_by(RepoGroup.group_name)\ | |
294 | .filter(RepoGroup.group_parent_id == id).all() |
|
348 | .filter(RepoGroup.group_parent_id == c.group.group_id).all() | |
295 | c.groups = self.scm_model.get_repos_groups(groups) |
|
349 | c.groups = self.scm_model.get_repos_groups(groups) | |
296 |
|
350 | |||
297 |
if c.visual.lightweight_dashboard |
|
351 | if not c.visual.lightweight_dashboard: | |
298 | c.repos_list = self.scm_model.get_repos(all_repos=gr_filter) |
|
352 | c.repos_list = self.scm_model.get_repos(all_repos=gr_filter) | |
299 | ## lightweight version of dashboard |
|
353 | ## lightweight version of dashboard | |
300 | else: |
|
354 | else: | |
301 | c.repos_list = Repository.query()\ |
|
355 | c.repos_list = Repository.query()\ | |
302 | .filter(Repository.group_id == id)\ |
|
356 | .filter(Repository.group_id == c.group.group_id)\ | |
303 | .order_by(func.lower(Repository.repo_name))\ |
|
357 | .order_by(func.lower(Repository.repo_name))\ | |
304 | .all() |
|
358 | .all() | |
305 |
|
359 | |||
@@ -310,17 +364,25 b' class ReposGroupsController(BaseControll' | |||||
310 |
|
364 | |||
311 | return render('admin/repos_groups/repos_groups.html') |
|
365 | return render('admin/repos_groups/repos_groups.html') | |
312 |
|
366 | |||
313 |
@HasPermissionAnyDecorator(' |
|
367 | @HasReposGroupPermissionAnyDecorator('group.admin') | |
314 |
def edit(self, |
|
368 | def edit(self, group_name, format='html'): | |
315 |
"""GET /repos_groups/ |
|
369 | """GET /repos_groups/group_name/edit: Form to edit an existing item""" | |
316 |
# url('edit_repos_group', |
|
370 | # url('edit_repos_group', group_name=GROUP_NAME) | |
317 |
|
371 | |||
318 |
c.repos_group = ReposGroupModel()._get_repos_group( |
|
372 | c.repos_group = ReposGroupModel()._get_repos_group(group_name) | |
319 | defaults = self.__load_data(c.repos_group.group_id) |
|
373 | #we can only allow moving empty group if it's already a top-level | |
|
374 | #group, ie has no parents, or we're admin | |||
|
375 | if HasPermissionAll('hg.admin')('group edit'): | |||
|
376 | #we're global admin, we're ok and we can create TOP level groups | |||
|
377 | allow_empty_group = True | |||
|
378 | elif not c.repos_group.parent_group: | |||
|
379 | allow_empty_group = True | |||
|
380 | else: | |||
|
381 | allow_empty_group = False | |||
320 |
|
382 | |||
321 | # we need to exclude this group from the group list for editing |
|
383 | self.__load_defaults(allow_empty_group=allow_empty_group, | |
322 | c.repo_groups = filter(lambda x: x[0] != c.repos_group.group_id, |
|
384 | exclude_group_ids=[c.repos_group.group_id]) | |
323 | c.repo_groups) |
|
385 | defaults = self.__load_data(c.repos_group.group_id) | |
324 |
|
386 | |||
325 | return htmlfill.render( |
|
387 | return htmlfill.render( | |
326 | render('admin/repos_groups/repos_groups_edit.html'), |
|
388 | render('admin/repos_groups/repos_groups_edit.html'), |
@@ -37,7 +37,8 b' from pylons.i18n.translation import _' | |||||
37 |
|
37 | |||
38 | from rhodecode.lib import helpers as h |
|
38 | from rhodecode.lib import helpers as h | |
39 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \ |
|
39 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \ | |
40 | HasPermissionAnyDecorator, NotAnonymous |
|
40 | HasPermissionAnyDecorator, NotAnonymous, HasPermissionAny,\ | |
|
41 | HasReposGroupPermissionAll, HasReposGroupPermissionAny, AuthUser | |||
41 | from rhodecode.lib.base import BaseController, render |
|
42 | from rhodecode.lib.base import BaseController, render | |
42 | from rhodecode.lib.celerylib import tasks, run_task |
|
43 | from rhodecode.lib.celerylib import tasks, run_task | |
43 | from rhodecode.lib.utils import repo2db_mapper, invalidate_cache, \ |
|
44 | from rhodecode.lib.utils import repo2db_mapper, invalidate_cache, \ | |
@@ -46,7 +47,7 b' from rhodecode.model.db import RhodeCode' | |||||
46 | RhodeCodeSetting, PullRequest, PullRequestReviewers |
|
47 | RhodeCodeSetting, PullRequest, PullRequestReviewers | |
47 | from rhodecode.model.forms import UserForm, ApplicationSettingsForm, \ |
|
48 | from rhodecode.model.forms import UserForm, ApplicationSettingsForm, \ | |
48 | ApplicationUiSettingsForm, ApplicationVisualisationForm |
|
49 | ApplicationUiSettingsForm, ApplicationVisualisationForm | |
49 | from rhodecode.model.scm import ScmModel |
|
50 | from rhodecode.model.scm import ScmModel, GroupList | |
50 | from rhodecode.model.user import UserModel |
|
51 | from rhodecode.model.user import UserModel | |
51 | from rhodecode.model.repo import RepoModel |
|
52 | from rhodecode.model.repo import RepoModel | |
52 | from rhodecode.model.db import User |
|
53 | from rhodecode.model.db import User | |
@@ -54,6 +55,7 b' from rhodecode.model.notification import' | |||||
54 | from rhodecode.model.meta import Session |
|
55 | from rhodecode.model.meta import Session | |
55 | from rhodecode.lib.utils2 import str2bool, safe_unicode |
|
56 | from rhodecode.lib.utils2 import str2bool, safe_unicode | |
56 | from rhodecode.lib.compat import json |
|
57 | from rhodecode.lib.compat import json | |
|
58 | from webob.exc import HTTPForbidden | |||
57 | log = logging.getLogger(__name__) |
|
59 | log = logging.getLogger(__name__) | |
58 |
|
60 | |||
59 |
|
61 | |||
@@ -165,7 +167,7 b' class SettingsController(BaseController)' | |||||
165 |
|
167 | |||
166 | except Exception: |
|
168 | except Exception: | |
167 | log.error(traceback.format_exc()) |
|
169 | log.error(traceback.format_exc()) | |
168 |
h.flash(_(' |
|
170 | h.flash(_('Error occurred during updating ' | |
169 | 'application settings'), |
|
171 | 'application settings'), | |
170 | category='error') |
|
172 | category='error') | |
171 |
|
173 | |||
@@ -204,6 +206,11 b' class SettingsController(BaseController)' | |||||
204 | form_result['rhodecode_lightweight_dashboard'] |
|
206 | form_result['rhodecode_lightweight_dashboard'] | |
205 | Session().add(sett4) |
|
207 | Session().add(sett4) | |
206 |
|
208 | |||
|
209 | sett4 = RhodeCodeSetting.get_by_name_or_create('repository_fields') | |||
|
210 | sett4.app_settings_value = \ | |||
|
211 | form_result['rhodecode_repository_fields'] | |||
|
212 | Session().add(sett4) | |||
|
213 | ||||
207 | Session().commit() |
|
214 | Session().commit() | |
208 | set_rhodecode_config(config) |
|
215 | set_rhodecode_config(config) | |
209 | h.flash(_('Updated visualisation settings'), |
|
216 | h.flash(_('Updated visualisation settings'), | |
@@ -211,7 +218,7 b' class SettingsController(BaseController)' | |||||
211 |
|
218 | |||
212 | except Exception: |
|
219 | except Exception: | |
213 | log.error(traceback.format_exc()) |
|
220 | log.error(traceback.format_exc()) | |
214 |
h.flash(_(' |
|
221 | h.flash(_('Error occurred during updating ' | |
215 | 'visualisation settings'), |
|
222 | 'visualisation settings'), | |
216 | category='error') |
|
223 | category='error') | |
217 |
|
224 | |||
@@ -229,9 +236,6 b' class SettingsController(BaseController)' | |||||
229 | ) |
|
236 | ) | |
230 |
|
237 | |||
231 | try: |
|
238 | try: | |
232 | # fix namespaces for hooks and extensions |
|
|||
233 | _f = lambda s: s.replace('.', '_') |
|
|||
234 |
|
||||
235 | sett = RhodeCodeUi.get_by_key('push_ssl') |
|
239 | sett = RhodeCodeUi.get_by_key('push_ssl') | |
236 | sett.ui_value = form_result['web_push_ssl'] |
|
240 | sett.ui_value = form_result['web_push_ssl'] | |
237 | Session().add(sett) |
|
241 | Session().add(sett) | |
@@ -242,23 +246,19 b' class SettingsController(BaseController)' | |||||
242 |
|
246 | |||
243 | #HOOKS |
|
247 | #HOOKS | |
244 | sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_UPDATE) |
|
248 | sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_UPDATE) | |
245 |
sett.ui_active = form_result[ |
|
249 | sett.ui_active = form_result['hooks_changegroup_update'] | |
246 | RhodeCodeUi.HOOK_UPDATE)] |
|
|||
247 | Session().add(sett) |
|
250 | Session().add(sett) | |
248 |
|
251 | |||
249 | sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_REPO_SIZE) |
|
252 | sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_REPO_SIZE) | |
250 |
sett.ui_active = form_result[ |
|
253 | sett.ui_active = form_result['hooks_changegroup_repo_size'] | |
251 | RhodeCodeUi.HOOK_REPO_SIZE)] |
|
|||
252 | Session().add(sett) |
|
254 | Session().add(sett) | |
253 |
|
255 | |||
254 | sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_PUSH) |
|
256 | sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_PUSH) | |
255 |
sett.ui_active = form_result[ |
|
257 | sett.ui_active = form_result['hooks_changegroup_push_logger'] | |
256 | RhodeCodeUi.HOOK_PUSH)] |
|
|||
257 | Session().add(sett) |
|
258 | Session().add(sett) | |
258 |
|
259 | |||
259 | sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_PULL) |
|
260 | sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_PULL) | |
260 |
sett.ui_active = form_result[ |
|
261 | sett.ui_active = form_result['hooks_outgoing_pull_logger'] | |
261 | RhodeCodeUi.HOOK_PULL)] |
|
|||
262 |
|
262 | |||
263 | Session().add(sett) |
|
263 | Session().add(sett) | |
264 |
|
264 | |||
@@ -269,7 +269,7 b' class SettingsController(BaseController)' | |||||
269 | sett = RhodeCodeUi() |
|
269 | sett = RhodeCodeUi() | |
270 | sett.ui_key = 'largefiles' |
|
270 | sett.ui_key = 'largefiles' | |
271 | sett.ui_section = 'extensions' |
|
271 | sett.ui_section = 'extensions' | |
272 |
sett.ui_active = form_result[ |
|
272 | sett.ui_active = form_result['extensions_largefiles'] | |
273 | Session().add(sett) |
|
273 | Session().add(sett) | |
274 |
|
274 | |||
275 | sett = RhodeCodeUi.get_by_key('hgsubversion') |
|
275 | sett = RhodeCodeUi.get_by_key('hgsubversion') | |
@@ -279,7 +279,7 b' class SettingsController(BaseController)' | |||||
279 | sett.ui_key = 'hgsubversion' |
|
279 | sett.ui_key = 'hgsubversion' | |
280 | sett.ui_section = 'extensions' |
|
280 | sett.ui_section = 'extensions' | |
281 |
|
281 | |||
282 |
sett.ui_active = form_result[ |
|
282 | sett.ui_active = form_result['extensions_hgsubversion'] | |
283 | Session().add(sett) |
|
283 | Session().add(sett) | |
284 |
|
284 | |||
285 | # sett = RhodeCodeUi.get_by_key('hggit') |
|
285 | # sett = RhodeCodeUi.get_by_key('hggit') | |
@@ -289,7 +289,7 b' class SettingsController(BaseController)' | |||||
289 | # sett.ui_key = 'hggit' |
|
289 | # sett.ui_key = 'hggit' | |
290 | # sett.ui_section = 'extensions' |
|
290 | # sett.ui_section = 'extensions' | |
291 | # |
|
291 | # | |
292 |
# sett.ui_active = form_result[ |
|
292 | # sett.ui_active = form_result['extensions_hggit'] | |
293 | # Session().add(sett) |
|
293 | # Session().add(sett) | |
294 |
|
294 | |||
295 | Session().commit() |
|
295 | Session().commit() | |
@@ -298,7 +298,7 b' class SettingsController(BaseController)' | |||||
298 |
|
298 | |||
299 | except Exception: |
|
299 | except Exception: | |
300 | log.error(traceback.format_exc()) |
|
300 | log.error(traceback.format_exc()) | |
301 |
h.flash(_(' |
|
301 | h.flash(_('Error occurred during updating ' | |
302 | 'application settings'), category='error') |
|
302 | 'application settings'), category='error') | |
303 |
|
303 | |||
304 | if setting_id == 'hooks': |
|
304 | if setting_id == 'hooks': | |
@@ -324,7 +324,7 b' class SettingsController(BaseController)' | |||||
324 | Session().commit() |
|
324 | Session().commit() | |
325 | except Exception: |
|
325 | except Exception: | |
326 | log.error(traceback.format_exc()) |
|
326 | log.error(traceback.format_exc()) | |
327 |
h.flash(_(' |
|
327 | h.flash(_('Error occurred during hook creation'), | |
328 | category='error') |
|
328 | category='error') | |
329 |
|
329 | |||
330 | return redirect(url('admin_edit_setting', setting_id='hooks')) |
|
330 | return redirect(url('admin_edit_setting', setting_id='hooks')) | |
@@ -402,6 +402,8 b' class SettingsController(BaseController)' | |||||
402 | # url('admin_settings_my_account') |
|
402 | # url('admin_settings_my_account') | |
403 |
|
403 | |||
404 | c.user = User.get(self.rhodecode_user.user_id) |
|
404 | c.user = User.get(self.rhodecode_user.user_id) | |
|
405 | c.perm_user = AuthUser(user_id=self.rhodecode_user.user_id, | |||
|
406 | ip_addr=self.ip_addr) | |||
405 | c.ldap_dn = c.user.ldap_dn |
|
407 | c.ldap_dn = c.user.ldap_dn | |
406 |
|
408 | |||
407 | if c.user.username == 'default': |
|
409 | if c.user.username == 'default': | |
@@ -433,6 +435,8 b' class SettingsController(BaseController)' | |||||
433 | # url('admin_settings_my_account_update', id=ID) |
|
435 | # url('admin_settings_my_account_update', id=ID) | |
434 | uid = self.rhodecode_user.user_id |
|
436 | uid = self.rhodecode_user.user_id | |
435 | c.user = User.get(self.rhodecode_user.user_id) |
|
437 | c.user = User.get(self.rhodecode_user.user_id) | |
|
438 | c.perm_user = AuthUser(user_id=self.rhodecode_user.user_id, | |||
|
439 | ip_addr=self.ip_addr) | |||
436 | c.ldap_dn = c.user.ldap_dn |
|
440 | c.ldap_dn = c.user.ldap_dn | |
437 | email = self.rhodecode_user.email |
|
441 | email = self.rhodecode_user.email | |
438 | _form = UserForm(edit=True, |
|
442 | _form = UserForm(edit=True, | |
@@ -460,45 +464,32 b' class SettingsController(BaseController)' | |||||
460 | return render('admin/users/user_edit_my_account.html') |
|
464 | return render('admin/users/user_edit_my_account.html') | |
461 | except Exception: |
|
465 | except Exception: | |
462 | log.error(traceback.format_exc()) |
|
466 | log.error(traceback.format_exc()) | |
463 |
h.flash(_(' |
|
467 | h.flash(_('Error occurred during update of user %s') \ | |
464 | % form_result.get('username'), category='error') |
|
468 | % form_result.get('username'), category='error') | |
465 |
|
469 | |||
466 | return redirect(url('my_account')) |
|
470 | return redirect(url('my_account')) | |
467 |
|
471 | |||
468 | @NotAnonymous() |
|
472 | @NotAnonymous() | |
469 | def my_account_my_pullrequests(self): |
|
473 | def my_account_my_pullrequests(self): | |
470 | c.my_pull_requests = PullRequest.query()\ |
|
474 | c.show_closed = request.GET.get('pr_show_closed') | |
|
475 | ||||
|
476 | def _filter(pr): | |||
|
477 | s = sorted(pr, key=lambda o: o.created_on, reverse=True) | |||
|
478 | if not c.show_closed: | |||
|
479 | s = filter(lambda p: p.status != PullRequest.STATUS_CLOSED, s) | |||
|
480 | return s | |||
|
481 | ||||
|
482 | c.my_pull_requests = _filter(PullRequest.query()\ | |||
471 | .filter(PullRequest.user_id == |
|
483 | .filter(PullRequest.user_id == | |
472 | self.rhodecode_user.user_id)\ |
|
484 | self.rhodecode_user.user_id)\ | |
473 | .all() |
|
485 | .all()) | |
474 | c.participate_in_pull_requests = \ |
|
|||
475 | [x.pull_request for x in PullRequestReviewers.query()\ |
|
|||
476 | .filter(PullRequestReviewers.user_id == |
|
|||
477 | self.rhodecode_user.user_id)\ |
|
|||
478 | .all()] |
|
|||
479 | return render('admin/users/user_edit_my_account_pullrequests.html') |
|
|||
480 |
|
||||
481 | @NotAnonymous() |
|
|||
482 | @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository') |
|
|||
483 | def create_repository(self): |
|
|||
484 | """GET /_admin/create_repository: Form to create a new item""" |
|
|||
485 |
|
486 | |||
486 | c.repo_groups = RepoGroup.groups_choices(check_perms=True) |
|
487 | c.participate_in_pull_requests = _filter([ | |
487 | c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) |
|
488 | x.pull_request for x in PullRequestReviewers.query()\ | |
488 | choices, c.landing_revs = ScmModel().get_repo_landing_revs() |
|
489 | .filter(PullRequestReviewers.user_id == | |
489 |
|
490 | self.rhodecode_user.user_id).all()]) | ||
490 | new_repo = request.GET.get('repo', '') |
|
|||
491 | c.new_repo = repo_name_slug(new_repo) |
|
|||
492 |
|
491 | |||
493 | ## apply the defaults from defaults page |
|
492 | return render('admin/users/user_edit_my_account_pullrequests.html') | |
494 | defaults = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True) |
|
|||
495 | return htmlfill.render( |
|
|||
496 | render('admin/repos/repo_add_create_repository.html'), |
|
|||
497 | defaults=defaults, |
|
|||
498 | errors={}, |
|
|||
499 | prefix_error=False, |
|
|||
500 | encoding="UTF-8" |
|
|||
501 | ) |
|
|||
502 |
|
493 | |||
503 | def _get_hg_ui_settings(self): |
|
494 | def _get_hg_ui_settings(self): | |
504 | ret = RhodeCodeUi.query().all() |
|
495 | ret = RhodeCodeUi.query().all() |
@@ -99,9 +99,9 b' class UsersController(BaseController):' | |||||
99 | "lastname": user.lastname, |
|
99 | "lastname": user.lastname, | |
100 | "last_login": h.fmt_date(user.last_login), |
|
100 | "last_login": h.fmt_date(user.last_login), | |
101 | "last_login_raw": datetime_to_time(user.last_login), |
|
101 | "last_login_raw": datetime_to_time(user.last_login), | |
102 |
"active": h.bool |
|
102 | "active": h.boolicon(user.active), | |
103 |
"admin": h.bool |
|
103 | "admin": h.boolicon(user.admin), | |
104 |
"ldap": h.bool |
|
104 | "ldap": h.boolicon(bool(user.ldap_dn)), | |
105 | "action": user_actions(user.user_id, user.username), |
|
105 | "action": user_actions(user.user_id, user.username), | |
106 | }) |
|
106 | }) | |
107 |
|
107 | |||
@@ -127,7 +127,7 b' class UsersController(BaseController):' | |||||
127 | usr = form_result['username'] |
|
127 | usr = form_result['username'] | |
128 | action_logger(self.rhodecode_user, 'admin_created_user:%s' % usr, |
|
128 | action_logger(self.rhodecode_user, 'admin_created_user:%s' % usr, | |
129 | None, self.ip_addr, self.sa) |
|
129 | None, self.ip_addr, self.sa) | |
130 |
h.flash(_(' |
|
130 | h.flash(_('Created user %s') % usr, | |
131 | category='success') |
|
131 | category='success') | |
132 | Session().commit() |
|
132 | Session().commit() | |
133 | except formencode.Invalid, errors: |
|
133 | except formencode.Invalid, errors: | |
@@ -139,7 +139,7 b' class UsersController(BaseController):' | |||||
139 | encoding="UTF-8") |
|
139 | encoding="UTF-8") | |
140 | except Exception: |
|
140 | except Exception: | |
141 | log.error(traceback.format_exc()) |
|
141 | log.error(traceback.format_exc()) | |
142 |
h.flash(_(' |
|
142 | h.flash(_('Error occurred during creation of user %s') \ | |
143 | % request.POST.get('username'), category='error') |
|
143 | % request.POST.get('username'), category='error') | |
144 | return redirect(url('users')) |
|
144 | return redirect(url('users')) | |
145 |
|
145 | |||
@@ -195,7 +195,7 b' class UsersController(BaseController):' | |||||
195 | encoding="UTF-8") |
|
195 | encoding="UTF-8") | |
196 | except Exception: |
|
196 | except Exception: | |
197 | log.error(traceback.format_exc()) |
|
197 | log.error(traceback.format_exc()) | |
198 |
h.flash(_(' |
|
198 | h.flash(_('Error occurred during update of user %s') \ | |
199 | % form_result.get('username'), category='error') |
|
199 | % form_result.get('username'), category='error') | |
200 | return redirect(url('edit_user', id=id)) |
|
200 | return redirect(url('edit_user', id=id)) | |
201 |
|
201 | |||
@@ -211,7 +211,7 b' class UsersController(BaseController):' | |||||
211 | try: |
|
211 | try: | |
212 | UserModel().delete(usr) |
|
212 | UserModel().delete(usr) | |
213 | Session().commit() |
|
213 | Session().commit() | |
214 |
h.flash(_(' |
|
214 | h.flash(_('Successfully deleted user'), category='success') | |
215 | except (UserOwnsReposException, DefaultUserException), e: |
|
215 | except (UserOwnsReposException, DefaultUserException), e: | |
216 | h.flash(e, category='warning') |
|
216 | h.flash(e, category='warning') | |
217 | except Exception: |
|
217 | except Exception: |
@@ -3,7 +3,7 b'' | |||||
3 | rhodecode.controllers.admin.users_groups |
|
3 | rhodecode.controllers.admin.users_groups | |
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
5 |
|
5 | |||
6 |
User |
|
6 | User Groups crud controller for pylons | |
7 |
|
7 | |||
8 | :created_on: Jan 25, 2011 |
|
8 | :created_on: Jan 25, 2011 | |
9 | :author: marcink |
|
9 | :author: marcink | |
@@ -33,16 +33,16 b' from pylons.controllers.util import abor' | |||||
33 | from pylons.i18n.translation import _ |
|
33 | from pylons.i18n.translation import _ | |
34 |
|
34 | |||
35 | from rhodecode.lib import helpers as h |
|
35 | from rhodecode.lib import helpers as h | |
36 |
from rhodecode.lib.exceptions import User |
|
36 | from rhodecode.lib.exceptions import UserGroupsAssignedException | |
37 | from rhodecode.lib.utils2 import safe_unicode, str2bool |
|
37 | from rhodecode.lib.utils2 import safe_unicode, str2bool | |
38 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator |
|
38 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator | |
39 | from rhodecode.lib.base import BaseController, render |
|
39 | from rhodecode.lib.base import BaseController, render | |
40 |
|
40 | |||
41 |
from rhodecode.model.users_group import User |
|
41 | from rhodecode.model.users_group import UserGroupModel | |
42 |
|
42 | |||
43 |
from rhodecode.model.db import User, User |
|
43 | from rhodecode.model.db import User, UserGroup, UserGroupToPerm,\ | |
44 |
User |
|
44 | UserGroupRepoToPerm, UserGroupRepoGroupToPerm | |
45 |
from rhodecode.model.forms import User |
|
45 | from rhodecode.model.forms import UserGroupForm | |
46 | from rhodecode.model.meta import Session |
|
46 | from rhodecode.model.meta import Session | |
47 | from rhodecode.lib.utils import action_logger |
|
47 | from rhodecode.lib.utils import action_logger | |
48 | from sqlalchemy.orm import joinedload |
|
48 | from sqlalchemy.orm import joinedload | |
@@ -67,23 +67,23 b' class UsersGroupsController(BaseControll' | |||||
67 | def index(self, format='html'): |
|
67 | def index(self, format='html'): | |
68 | """GET /users_groups: All items in the collection""" |
|
68 | """GET /users_groups: All items in the collection""" | |
69 | # url('users_groups') |
|
69 | # url('users_groups') | |
70 |
c.users_groups_list = User |
|
70 | c.users_groups_list = UserGroup().query().all() | |
71 | return render('admin/users_groups/users_groups.html') |
|
71 | return render('admin/users_groups/users_groups.html') | |
72 |
|
72 | |||
73 | def create(self): |
|
73 | def create(self): | |
74 | """POST /users_groups: Create a new item""" |
|
74 | """POST /users_groups: Create a new item""" | |
75 | # url('users_groups') |
|
75 | # url('users_groups') | |
76 |
|
76 | |||
77 |
users_group_form = User |
|
77 | users_group_form = UserGroupForm()() | |
78 | try: |
|
78 | try: | |
79 | form_result = users_group_form.to_python(dict(request.POST)) |
|
79 | form_result = users_group_form.to_python(dict(request.POST)) | |
80 |
User |
|
80 | UserGroupModel().create(name=form_result['users_group_name'], | |
81 | active=form_result['users_group_active']) |
|
81 | active=form_result['users_group_active']) | |
82 | gr = form_result['users_group_name'] |
|
82 | gr = form_result['users_group_name'] | |
83 | action_logger(self.rhodecode_user, |
|
83 | action_logger(self.rhodecode_user, | |
84 | 'admin_created_users_group:%s' % gr, |
|
84 | 'admin_created_users_group:%s' % gr, | |
85 | None, self.ip_addr, self.sa) |
|
85 | None, self.ip_addr, self.sa) | |
86 |
h.flash(_(' |
|
86 | h.flash(_('Created user group %s') % gr, category='success') | |
87 | Session().commit() |
|
87 | Session().commit() | |
88 | except formencode.Invalid, errors: |
|
88 | except formencode.Invalid, errors: | |
89 | return htmlfill.render( |
|
89 | return htmlfill.render( | |
@@ -94,7 +94,7 b' class UsersGroupsController(BaseControll' | |||||
94 | encoding="UTF-8") |
|
94 | encoding="UTF-8") | |
95 | except Exception: |
|
95 | except Exception: | |
96 | log.error(traceback.format_exc()) |
|
96 | log.error(traceback.format_exc()) | |
97 |
h.flash(_(' |
|
97 | h.flash(_('Error occurred during creation of user group %s') \ | |
98 | % request.POST.get('users_group_name'), category='error') |
|
98 | % request.POST.get('users_group_name'), category='error') | |
99 |
|
99 | |||
100 | return redirect(url('users_groups')) |
|
100 | return redirect(url('users_groups')) | |
@@ -110,31 +110,33 b' class UsersGroupsController(BaseControll' | |||||
110 | 'repositories_groups': {} |
|
110 | 'repositories_groups': {} | |
111 | } |
|
111 | } | |
112 |
|
112 | |||
113 |
ugroup_repo_perms = User |
|
113 | ugroup_repo_perms = UserGroupRepoToPerm.query()\ | |
114 |
.options(joinedload(User |
|
114 | .options(joinedload(UserGroupRepoToPerm.permission))\ | |
115 |
.options(joinedload(User |
|
115 | .options(joinedload(UserGroupRepoToPerm.repository))\ | |
116 |
.filter(User |
|
116 | .filter(UserGroupRepoToPerm.users_group_id == id)\ | |
117 | .all() |
|
117 | .all() | |
118 |
|
118 | |||
119 | for gr in ugroup_repo_perms: |
|
119 | for gr in ugroup_repo_perms: | |
120 | c.users_group.permissions['repositories'][gr.repository.repo_name] \ |
|
120 | c.users_group.permissions['repositories'][gr.repository.repo_name] \ | |
121 | = gr.permission.permission_name |
|
121 | = gr.permission.permission_name | |
122 |
|
122 | |||
123 |
ugroup_group_perms = User |
|
123 | ugroup_group_perms = UserGroupRepoGroupToPerm.query()\ | |
124 |
.options(joinedload(User |
|
124 | .options(joinedload(UserGroupRepoGroupToPerm.permission))\ | |
125 |
.options(joinedload(User |
|
125 | .options(joinedload(UserGroupRepoGroupToPerm.group))\ | |
126 |
.filter(User |
|
126 | .filter(UserGroupRepoGroupToPerm.users_group_id == id)\ | |
127 | .all() |
|
127 | .all() | |
128 |
|
128 | |||
129 | for gr in ugroup_group_perms: |
|
129 | for gr in ugroup_group_perms: | |
130 | c.users_group.permissions['repositories_groups'][gr.group.group_name] \ |
|
130 | c.users_group.permissions['repositories_groups'][gr.group.group_name] \ | |
131 | = gr.permission.permission_name |
|
131 | = gr.permission.permission_name | |
132 |
|
132 | |||
133 |
c.group_members_obj = |
|
133 | c.group_members_obj = sorted((x.user for x in c.users_group.members), | |
|
134 | key=lambda u: u.username.lower()) | |||
134 | c.group_members = [(x.user_id, x.username) for x in |
|
135 | c.group_members = [(x.user_id, x.username) for x in | |
135 | c.group_members_obj] |
|
136 | c.group_members_obj] | |
136 |
c.available_members = |
|
137 | c.available_members = sorted(((x.user_id, x.username) for x in | |
137 |
User.query().all() |
|
138 | User.query().all()), | |
|
139 | key=lambda u: u[1].lower()) | |||
138 |
|
140 | |||
139 | def update(self, id): |
|
141 | def update(self, id): | |
140 | """PUT /users_groups/id: Update an existing item""" |
|
142 | """PUT /users_groups/id: Update an existing item""" | |
@@ -145,26 +147,26 b' class UsersGroupsController(BaseControll' | |||||
145 | # method='put') |
|
147 | # method='put') | |
146 | # url('users_group', id=ID) |
|
148 | # url('users_group', id=ID) | |
147 |
|
149 | |||
148 |
c.users_group = User |
|
150 | c.users_group = UserGroup.get_or_404(id) | |
149 | self._load_data(id) |
|
151 | self._load_data(id) | |
150 |
|
152 | |||
151 | available_members = [safe_unicode(x[0]) for x in c.available_members] |
|
153 | available_members = [safe_unicode(x[0]) for x in c.available_members] | |
152 |
|
154 | |||
153 |
users_group_form = User |
|
155 | users_group_form = UserGroupForm(edit=True, | |
154 | old_data=c.users_group.get_dict(), |
|
156 | old_data=c.users_group.get_dict(), | |
155 | available_members=available_members)() |
|
157 | available_members=available_members)() | |
156 |
|
158 | |||
157 | try: |
|
159 | try: | |
158 | form_result = users_group_form.to_python(request.POST) |
|
160 | form_result = users_group_form.to_python(request.POST) | |
159 |
User |
|
161 | UserGroupModel().update(c.users_group, form_result) | |
160 | gr = form_result['users_group_name'] |
|
162 | gr = form_result['users_group_name'] | |
161 | action_logger(self.rhodecode_user, |
|
163 | action_logger(self.rhodecode_user, | |
162 | 'admin_updated_users_group:%s' % gr, |
|
164 | 'admin_updated_users_group:%s' % gr, | |
163 | None, self.ip_addr, self.sa) |
|
165 | None, self.ip_addr, self.sa) | |
164 |
h.flash(_(' |
|
166 | h.flash(_('Updated user group %s') % gr, category='success') | |
165 | Session().commit() |
|
167 | Session().commit() | |
166 | except formencode.Invalid, errors: |
|
168 | except formencode.Invalid, errors: | |
167 |
ug_model = User |
|
169 | ug_model = UserGroupModel() | |
168 | defaults = errors.value |
|
170 | defaults = errors.value | |
169 | e = errors.error_dict or {} |
|
171 | e = errors.error_dict or {} | |
170 | defaults.update({ |
|
172 | defaults.update({ | |
@@ -183,7 +185,7 b' class UsersGroupsController(BaseControll' | |||||
183 | encoding="UTF-8") |
|
185 | encoding="UTF-8") | |
184 | except Exception: |
|
186 | except Exception: | |
185 | log.error(traceback.format_exc()) |
|
187 | log.error(traceback.format_exc()) | |
186 |
h.flash(_(' |
|
188 | h.flash(_('Error occurred during update of user group %s') \ | |
187 | % request.POST.get('users_group_name'), category='error') |
|
189 | % request.POST.get('users_group_name'), category='error') | |
188 |
|
190 | |||
189 | return redirect(url('edit_users_group', id=id)) |
|
191 | return redirect(url('edit_users_group', id=id)) | |
@@ -196,16 +198,16 b' class UsersGroupsController(BaseControll' | |||||
196 | # h.form(url('users_group', id=ID), |
|
198 | # h.form(url('users_group', id=ID), | |
197 | # method='delete') |
|
199 | # method='delete') | |
198 | # url('users_group', id=ID) |
|
200 | # url('users_group', id=ID) | |
199 |
usr_gr = User |
|
201 | usr_gr = UserGroup.get_or_404(id) | |
200 | try: |
|
202 | try: | |
201 |
User |
|
203 | UserGroupModel().delete(usr_gr) | |
202 | Session().commit() |
|
204 | Session().commit() | |
203 |
h.flash(_(' |
|
205 | h.flash(_('Successfully deleted user group'), category='success') | |
204 |
except User |
|
206 | except UserGroupsAssignedException, e: | |
205 | h.flash(e, category='error') |
|
207 | h.flash(e, category='error') | |
206 | except Exception: |
|
208 | except Exception: | |
207 | log.error(traceback.format_exc()) |
|
209 | log.error(traceback.format_exc()) | |
208 |
h.flash(_('An error occurred during deletion of user |
|
210 | h.flash(_('An error occurred during deletion of user group'), | |
209 | category='error') |
|
211 | category='error') | |
210 | return redirect(url('users_groups')) |
|
212 | return redirect(url('users_groups')) | |
211 |
|
213 | |||
@@ -217,10 +219,10 b' class UsersGroupsController(BaseControll' | |||||
217 | """GET /users_groups/id/edit: Form to edit an existing item""" |
|
219 | """GET /users_groups/id/edit: Form to edit an existing item""" | |
218 | # url('edit_users_group', id=ID) |
|
220 | # url('edit_users_group', id=ID) | |
219 |
|
221 | |||
220 |
c.users_group = User |
|
222 | c.users_group = UserGroup.get_or_404(id) | |
221 | self._load_data(id) |
|
223 | self._load_data(id) | |
222 |
|
224 | |||
223 |
ug_model = User |
|
225 | ug_model = UserGroupModel() | |
224 | defaults = c.users_group.get_dict() |
|
226 | defaults = c.users_group.get_dict() | |
225 | defaults.update({ |
|
227 | defaults.update({ | |
226 | 'create_repo_perm': ug_model.has_perm(c.users_group, |
|
228 | 'create_repo_perm': ug_model.has_perm(c.users_group, | |
@@ -240,37 +242,37 b' class UsersGroupsController(BaseControll' | |||||
240 | """PUT /users_perm/id: Update an existing item""" |
|
242 | """PUT /users_perm/id: Update an existing item""" | |
241 | # url('users_group_perm', id=ID, method='put') |
|
243 | # url('users_group_perm', id=ID, method='put') | |
242 |
|
244 | |||
243 |
users_group = User |
|
245 | users_group = UserGroup.get_or_404(id) | |
244 | grant_create_perm = str2bool(request.POST.get('create_repo_perm')) |
|
246 | grant_create_perm = str2bool(request.POST.get('create_repo_perm')) | |
245 | grant_fork_perm = str2bool(request.POST.get('fork_repo_perm')) |
|
247 | grant_fork_perm = str2bool(request.POST.get('fork_repo_perm')) | |
246 | inherit_perms = str2bool(request.POST.get('inherit_default_permissions')) |
|
248 | inherit_perms = str2bool(request.POST.get('inherit_default_permissions')) | |
247 |
|
249 | |||
248 |
user |
|
250 | usergroup_model = UserGroupModel() | |
249 |
|
251 | |||
250 | try: |
|
252 | try: | |
251 | users_group.inherit_default_permissions = inherit_perms |
|
253 | users_group.inherit_default_permissions = inherit_perms | |
252 | Session().add(users_group) |
|
254 | Session().add(users_group) | |
253 |
|
255 | |||
254 | if grant_create_perm: |
|
256 | if grant_create_perm: | |
255 |
user |
|
257 | usergroup_model.revoke_perm(id, 'hg.create.none') | |
256 |
user |
|
258 | usergroup_model.grant_perm(id, 'hg.create.repository') | |
257 |
h.flash(_("Granted 'repository create' permission to user |
|
259 | h.flash(_("Granted 'repository create' permission to user group"), | |
258 | category='success') |
|
260 | category='success') | |
259 | else: |
|
261 | else: | |
260 |
user |
|
262 | usergroup_model.revoke_perm(id, 'hg.create.repository') | |
261 |
user |
|
263 | usergroup_model.grant_perm(id, 'hg.create.none') | |
262 |
h.flash(_("Revoked 'repository create' permission to user |
|
264 | h.flash(_("Revoked 'repository create' permission to user group"), | |
263 | category='success') |
|
265 | category='success') | |
264 |
|
266 | |||
265 | if grant_fork_perm: |
|
267 | if grant_fork_perm: | |
266 |
user |
|
268 | usergroup_model.revoke_perm(id, 'hg.fork.none') | |
267 |
user |
|
269 | usergroup_model.grant_perm(id, 'hg.fork.repository') | |
268 |
h.flash(_("Granted 'repository fork' permission to user |
|
270 | h.flash(_("Granted 'repository fork' permission to user group"), | |
269 | category='success') |
|
271 | category='success') | |
270 | else: |
|
272 | else: | |
271 |
user |
|
273 | usergroup_model.revoke_perm(id, 'hg.fork.repository') | |
272 |
user |
|
274 | usergroup_model.grant_perm(id, 'hg.fork.none') | |
273 |
h.flash(_("Revoked 'repository fork' permission to user |
|
275 | h.flash(_("Revoked 'repository fork' permission to user group"), | |
274 | category='success') |
|
276 | category='success') | |
275 |
|
277 | |||
276 | Session().commit() |
|
278 | Session().commit() |
@@ -27,20 +27,22 b'' | |||||
27 |
|
27 | |||
28 | import traceback |
|
28 | import traceback | |
29 | import logging |
|
29 | import logging | |
30 | from pylons.controllers.util import abort |
|
|||
31 |
|
30 | |||
32 | from rhodecode.controllers.api import JSONRPCController, JSONRPCError |
|
31 | from rhodecode.controllers.api import JSONRPCController, JSONRPCError | |
33 | from rhodecode.lib.auth import PasswordGenerator, AuthUser, \ |
|
32 | from rhodecode.lib.auth import PasswordGenerator, AuthUser, \ | |
34 | HasPermissionAllDecorator, HasPermissionAnyDecorator, \ |
|
33 | HasPermissionAllDecorator, HasPermissionAnyDecorator, \ | |
35 | HasPermissionAnyApi, HasRepoPermissionAnyApi |
|
34 | HasPermissionAnyApi, HasRepoPermissionAnyApi | |
36 | from rhodecode.lib.utils import map_groups, repo2db_mapper |
|
35 | from rhodecode.lib.utils import map_groups, repo2db_mapper | |
|
36 | from rhodecode.lib.utils2 import str2bool, time_to_datetime, safe_int | |||
|
37 | from rhodecode.lib import helpers as h | |||
37 | from rhodecode.model.meta import Session |
|
38 | from rhodecode.model.meta import Session | |
38 | from rhodecode.model.scm import ScmModel |
|
39 | from rhodecode.model.scm import ScmModel | |
39 | from rhodecode.model.repo import RepoModel |
|
40 | from rhodecode.model.repo import RepoModel | |
40 | from rhodecode.model.user import UserModel |
|
41 | from rhodecode.model.user import UserModel | |
41 |
from rhodecode.model.users_group import User |
|
42 | from rhodecode.model.users_group import UserGroupModel | |
42 | from rhodecode.model.permission import PermissionModel |
|
43 | from rhodecode.model.permission import PermissionModel | |
43 | from rhodecode.model.db import Repository, RhodeCodeSetting, UserIpMap |
|
44 | from rhodecode.model.db import Repository, RhodeCodeSetting, UserIpMap | |
|
45 | from rhodecode.lib.compat import json | |||
44 |
|
46 | |||
45 | log = logging.getLogger(__name__) |
|
47 | log = logging.getLogger(__name__) | |
46 |
|
48 | |||
@@ -121,13 +123,13 b' def get_repo_or_error(repoid):' | |||||
121 |
|
123 | |||
122 | def get_users_group_or_error(usersgroupid): |
|
124 | def get_users_group_or_error(usersgroupid): | |
123 | """ |
|
125 | """ | |
124 |
Get user |
|
126 | Get user group by id or name or return JsonRPCError if not found | |
125 |
|
127 | |||
126 | :param userid: |
|
128 | :param userid: | |
127 | """ |
|
129 | """ | |
128 |
users_group = User |
|
130 | users_group = UserGroupModel().get_group(usersgroupid) | |
129 | if users_group is None: |
|
131 | if users_group is None: | |
130 |
raise JSONRPCError('user |
|
132 | raise JSONRPCError('user group `%s` does not exist' % usersgroupid) | |
131 | return users_group |
|
133 | return users_group | |
132 |
|
134 | |||
133 |
|
135 | |||
@@ -202,7 +204,34 b' class ApiController(JSONRPCController):' | |||||
202 | 'Error occurred during rescan repositories action' |
|
204 | 'Error occurred during rescan repositories action' | |
203 | ) |
|
205 | ) | |
204 |
|
206 | |||
205 | def lock(self, apiuser, repoid, locked, userid=Optional(OAttr('apiuser'))): |
|
207 | def invalidate_cache(self, apiuser, repoid): | |
|
208 | """ | |||
|
209 | Dispatch cache invalidation action on given repo | |||
|
210 | ||||
|
211 | :param apiuser: | |||
|
212 | :param repoid: | |||
|
213 | """ | |||
|
214 | repo = get_repo_or_error(repoid) | |||
|
215 | if HasPermissionAnyApi('hg.admin')(user=apiuser) is False: | |||
|
216 | # check if we have admin permission for this repo ! | |||
|
217 | if HasRepoPermissionAnyApi('repository.admin', | |||
|
218 | 'repository.write')(user=apiuser, | |||
|
219 | repo_name=repo.repo_name) is False: | |||
|
220 | raise JSONRPCError('repository `%s` does not exist' % (repoid)) | |||
|
221 | ||||
|
222 | try: | |||
|
223 | invalidated_keys = ScmModel().mark_for_invalidation(repo.repo_name) | |||
|
224 | Session().commit() | |||
|
225 | return ('Cache for repository `%s` was invalidated: ' | |||
|
226 | 'invalidated cache keys: %s' % (repoid, invalidated_keys)) | |||
|
227 | except Exception: | |||
|
228 | log.error(traceback.format_exc()) | |||
|
229 | raise JSONRPCError( | |||
|
230 | 'Error occurred during cache invalidation action' | |||
|
231 | ) | |||
|
232 | ||||
|
233 | def lock(self, apiuser, repoid, locked=Optional(None), | |||
|
234 | userid=Optional(OAttr('apiuser'))): | |||
206 | """ |
|
235 | """ | |
207 | Set locking state on particular repository by given user, if |
|
236 | Set locking state on particular repository by given user, if | |
208 | this command is runned by non-admin account userid is set to user |
|
237 | this command is runned by non-admin account userid is set to user | |
@@ -230,21 +259,77 b' class ApiController(JSONRPCController):' | |||||
230 |
|
259 | |||
231 | if isinstance(userid, Optional): |
|
260 | if isinstance(userid, Optional): | |
232 | userid = apiuser.user_id |
|
261 | userid = apiuser.user_id | |
|
262 | ||||
233 | user = get_user_or_error(userid) |
|
263 | user = get_user_or_error(userid) | |
234 | locked = bool(locked) |
|
264 | ||
235 | try: |
|
265 | if isinstance(locked, Optional): | |
236 | if locked: |
|
266 | lockobj = Repository.getlock(repo) | |
237 | Repository.lock(repo, user.user_id) |
|
267 | ||
|
268 | if lockobj[0] is None: | |||
|
269 | return ('Repo `%s` not locked. Locked=`False`.' | |||
|
270 | % (repo.repo_name)) | |||
238 | else: |
|
271 | else: | |
239 |
|
|
272 | userid, time_ = lockobj | |
|
273 | user = get_user_or_error(userid) | |||
|
274 | ||||
|
275 | return ('Repo `%s` locked by `%s`. Locked=`True`. ' | |||
|
276 | 'Locked since: `%s`' | |||
|
277 | % (repo.repo_name, user.username, | |||
|
278 | json.dumps(time_to_datetime(time_)))) | |||
|
279 | ||||
|
280 | else: | |||
|
281 | locked = str2bool(locked) | |||
|
282 | try: | |||
|
283 | if locked: | |||
|
284 | Repository.lock(repo, user.user_id) | |||
|
285 | else: | |||
|
286 | Repository.unlock(repo) | |||
|
287 | ||||
|
288 | return ('User `%s` set lock state for repo `%s` to `%s`' | |||
|
289 | % (user.username, repo.repo_name, locked)) | |||
|
290 | except Exception: | |||
|
291 | log.error(traceback.format_exc()) | |||
|
292 | raise JSONRPCError( | |||
|
293 | 'Error occurred locking repository `%s`' % repo.repo_name | |||
|
294 | ) | |||
240 |
|
295 | |||
241 | return ('User `%s` set lock state for repo `%s` to `%s`' |
|
296 | def get_locks(self, apiuser, userid=Optional(OAttr('apiuser'))): | |
242 | % (user.username, repo.repo_name, locked)) |
|
297 | """ | |
243 | except Exception: |
|
298 | Get all locks for given userid, if | |
244 | log.error(traceback.format_exc()) |
|
299 | this command is runned by non-admin account userid is set to user | |
245 | raise JSONRPCError( |
|
300 | who is calling this method, thus returning locks for himself | |
246 | 'Error occurred locking repository `%s`' % repo.repo_name |
|
301 | ||
247 | ) |
|
302 | :param apiuser: | |
|
303 | :param userid: | |||
|
304 | """ | |||
|
305 | if HasPermissionAnyApi('hg.admin')(user=apiuser): | |||
|
306 | pass | |||
|
307 | else: | |||
|
308 | #make sure normal user does not pass someone else userid, | |||
|
309 | #he is not allowed to do that | |||
|
310 | if not isinstance(userid, Optional) and userid != apiuser.user_id: | |||
|
311 | raise JSONRPCError( | |||
|
312 | 'userid is not the same as your user' | |||
|
313 | ) | |||
|
314 | ret = [] | |||
|
315 | if isinstance(userid, Optional): | |||
|
316 | user = None | |||
|
317 | else: | |||
|
318 | user = get_user_or_error(userid) | |||
|
319 | ||||
|
320 | #show all locks | |||
|
321 | for r in Repository.getAll(): | |||
|
322 | userid, time_ = r.locked | |||
|
323 | if time_: | |||
|
324 | _api_data = r.get_api_data() | |||
|
325 | # if we use userfilter just show the locks for this user | |||
|
326 | if user: | |||
|
327 | if safe_int(userid) == user.user_id: | |||
|
328 | ret.append(_api_data) | |||
|
329 | else: | |||
|
330 | ret.append(_api_data) | |||
|
331 | ||||
|
332 | return ret | |||
248 |
|
333 | |||
249 | @HasPermissionAllDecorator('hg.admin') |
|
334 | @HasPermissionAllDecorator('hg.admin') | |
250 | def show_ip(self, apiuser, userid): |
|
335 | def show_ip(self, apiuser, userid): | |
@@ -423,7 +508,7 b' class ApiController(JSONRPCController):' | |||||
423 | @HasPermissionAllDecorator('hg.admin') |
|
508 | @HasPermissionAllDecorator('hg.admin') | |
424 | def get_users_group(self, apiuser, usersgroupid): |
|
509 | def get_users_group(self, apiuser, usersgroupid): | |
425 | """" |
|
510 | """" | |
426 |
Get user |
|
511 | Get user group by name or id | |
427 |
|
512 | |||
428 | :param apiuser: |
|
513 | :param apiuser: | |
429 | :param usersgroupid: |
|
514 | :param usersgroupid: | |
@@ -442,13 +527,13 b' class ApiController(JSONRPCController):' | |||||
442 | @HasPermissionAllDecorator('hg.admin') |
|
527 | @HasPermissionAllDecorator('hg.admin') | |
443 | def get_users_groups(self, apiuser): |
|
528 | def get_users_groups(self, apiuser): | |
444 | """" |
|
529 | """" | |
445 |
Get all user |
|
530 | Get all user groups | |
446 |
|
531 | |||
447 | :param apiuser: |
|
532 | :param apiuser: | |
448 | """ |
|
533 | """ | |
449 |
|
534 | |||
450 | result = [] |
|
535 | result = [] | |
451 |
for users_group in User |
|
536 | for users_group in UserGroupModel().get_all(): | |
452 | result.append(users_group.get_api_data()) |
|
537 | result.append(users_group.get_api_data()) | |
453 | return result |
|
538 | return result | |
454 |
|
539 | |||
@@ -462,15 +547,15 b' class ApiController(JSONRPCController):' | |||||
462 | :param active: |
|
547 | :param active: | |
463 | """ |
|
548 | """ | |
464 |
|
549 | |||
465 |
if User |
|
550 | if UserGroupModel().get_by_name(group_name): | |
466 |
raise JSONRPCError("user |
|
551 | raise JSONRPCError("user group `%s` already exist" % group_name) | |
467 |
|
552 | |||
468 | try: |
|
553 | try: | |
469 | active = Optional.extract(active) |
|
554 | active = Optional.extract(active) | |
470 |
ug = User |
|
555 | ug = UserGroupModel().create(name=group_name, active=active) | |
471 | Session().commit() |
|
556 | Session().commit() | |
472 | return dict( |
|
557 | return dict( | |
473 |
msg='created new user |
|
558 | msg='created new user group `%s`' % group_name, | |
474 | users_group=ug.get_api_data() |
|
559 | users_group=ug.get_api_data() | |
475 | ) |
|
560 | ) | |
476 | except Exception: |
|
561 | except Exception: | |
@@ -480,7 +565,7 b' class ApiController(JSONRPCController):' | |||||
480 | @HasPermissionAllDecorator('hg.admin') |
|
565 | @HasPermissionAllDecorator('hg.admin') | |
481 | def add_user_to_users_group(self, apiuser, usersgroupid, userid): |
|
566 | def add_user_to_users_group(self, apiuser, usersgroupid, userid): | |
482 | """" |
|
567 | """" | |
483 |
Add a user to a user |
|
568 | Add a user to a user group | |
484 |
|
569 | |||
485 | :param apiuser: |
|
570 | :param apiuser: | |
486 | :param usersgroupid: |
|
571 | :param usersgroupid: | |
@@ -490,9 +575,9 b' class ApiController(JSONRPCController):' | |||||
490 | users_group = get_users_group_or_error(usersgroupid) |
|
575 | users_group = get_users_group_or_error(usersgroupid) | |
491 |
|
576 | |||
492 | try: |
|
577 | try: | |
493 |
ugm = User |
|
578 | ugm = UserGroupModel().add_user_to_group(users_group, user) | |
494 | success = True if ugm != True else False |
|
579 | success = True if ugm != True else False | |
495 |
msg = 'added member `%s` to user |
|
580 | msg = 'added member `%s` to user group `%s`' % ( | |
496 | user.username, users_group.users_group_name |
|
581 | user.username, users_group.users_group_name | |
497 | ) |
|
582 | ) | |
498 | msg = msg if success else 'User is already in that group' |
|
583 | msg = msg if success else 'User is already in that group' | |
@@ -505,7 +590,7 b' class ApiController(JSONRPCController):' | |||||
505 | except Exception: |
|
590 | except Exception: | |
506 | log.error(traceback.format_exc()) |
|
591 | log.error(traceback.format_exc()) | |
507 | raise JSONRPCError( |
|
592 | raise JSONRPCError( | |
508 |
'failed to add member to user |
|
593 | 'failed to add member to user group `%s`' % ( | |
509 | users_group.users_group_name |
|
594 | users_group.users_group_name | |
510 | ) |
|
595 | ) | |
511 | ) |
|
596 | ) | |
@@ -523,9 +608,9 b' class ApiController(JSONRPCController):' | |||||
523 | users_group = get_users_group_or_error(usersgroupid) |
|
608 | users_group = get_users_group_or_error(usersgroupid) | |
524 |
|
609 | |||
525 | try: |
|
610 | try: | |
526 |
success = User |
|
611 | success = UserGroupModel().remove_user_from_group(users_group, | |
527 | user) |
|
612 | user) | |
528 |
msg = 'removed member `%s` from user |
|
613 | msg = 'removed member `%s` from user group `%s`' % ( | |
529 | user.username, users_group.users_group_name |
|
614 | user.username, users_group.users_group_name | |
530 | ) |
|
615 | ) | |
531 | msg = msg if success else "User wasn't in group" |
|
616 | msg = msg if success else "User wasn't in group" | |
@@ -534,7 +619,7 b' class ApiController(JSONRPCController):' | |||||
534 | except Exception: |
|
619 | except Exception: | |
535 | log.error(traceback.format_exc()) |
|
620 | log.error(traceback.format_exc()) | |
536 | raise JSONRPCError( |
|
621 | raise JSONRPCError( | |
537 |
'failed to remove member from user |
|
622 | 'failed to remove member from user group `%s`' % ( | |
538 | users_group.users_group_name |
|
623 | users_group.users_group_name | |
539 | ) |
|
624 | ) | |
540 | ) |
|
625 | ) | |
@@ -555,6 +640,7 b' class ApiController(JSONRPCController):' | |||||
555 | raise JSONRPCError('repository `%s` does not exist' % (repoid)) |
|
640 | raise JSONRPCError('repository `%s` does not exist' % (repoid)) | |
556 |
|
641 | |||
557 | members = [] |
|
642 | members = [] | |
|
643 | followers = [] | |||
558 | for user in repo.repo_to_perm: |
|
644 | for user in repo.repo_to_perm: | |
559 | perm = user.permission.permission_name |
|
645 | perm = user.permission.permission_name | |
560 | user = user.user |
|
646 | user = user.user | |
@@ -571,8 +657,12 b' class ApiController(JSONRPCController):' | |||||
571 | users_group_data['permission'] = perm |
|
657 | users_group_data['permission'] = perm | |
572 | members.append(users_group_data) |
|
658 | members.append(users_group_data) | |
573 |
|
659 | |||
|
660 | for user in repo.followers: | |||
|
661 | followers.append(user.user.get_api_data()) | |||
|
662 | ||||
574 | data = repo.get_api_data() |
|
663 | data = repo.get_api_data() | |
575 | data['members'] = members |
|
664 | data['members'] = members | |
|
665 | data['followers'] = followers | |||
576 | return data |
|
666 | return data | |
577 |
|
667 | |||
578 | def get_repos(self, apiuser): |
|
668 | def get_repos(self, apiuser): | |
@@ -763,12 +853,13 b' class ApiController(JSONRPCController):' | |||||
763 | fork_name) |
|
853 | fork_name) | |
764 | ) |
|
854 | ) | |
765 |
|
855 | |||
766 | def delete_repo(self, apiuser, repoid): |
|
856 | def delete_repo(self, apiuser, repoid, forks=Optional(None)): | |
767 | """ |
|
857 | """ | |
768 | Deletes a given repository |
|
858 | Deletes a given repository | |
769 |
|
859 | |||
770 | :param apiuser: |
|
860 | :param apiuser: | |
771 | :param repoid: |
|
861 | :param repoid: | |
|
862 | :param forks: detach or delete, what do do with attached forks for repo | |||
772 | """ |
|
863 | """ | |
773 | repo = get_repo_or_error(repoid) |
|
864 | repo = get_repo_or_error(repoid) | |
774 |
|
865 | |||
@@ -776,13 +867,26 b' class ApiController(JSONRPCController):' | |||||
776 | # check if we have admin permission for this repo ! |
|
867 | # check if we have admin permission for this repo ! | |
777 | if HasRepoPermissionAnyApi('repository.admin')(user=apiuser, |
|
868 | if HasRepoPermissionAnyApi('repository.admin')(user=apiuser, | |
778 | repo_name=repo.repo_name) is False: |
|
869 | repo_name=repo.repo_name) is False: | |
779 |
|
|
870 | raise JSONRPCError('repository `%s` does not exist' % (repoid)) | |
780 |
|
871 | |||
781 | try: |
|
872 | try: | |
782 | RepoModel().delete(repo) |
|
873 | handle_forks = Optional.extract(forks) | |
|
874 | _forks_msg = '' | |||
|
875 | _forks = [f for f in repo.forks] | |||
|
876 | if handle_forks == 'detach': | |||
|
877 | _forks_msg = ' ' + _('Detached %s forks') % len(_forks) | |||
|
878 | elif handle_forks == 'delete': | |||
|
879 | _forks_msg = ' ' + _('Deleted %s forks') % len(_forks) | |||
|
880 | elif _forks: | |||
|
881 | raise JSONRPCError( | |||
|
882 | 'Cannot delete `%s` it still contains attached forks' | |||
|
883 | % repo.repo_name | |||
|
884 | ) | |||
|
885 | ||||
|
886 | RepoModel().delete(repo, forks=forks) | |||
783 | Session().commit() |
|
887 | Session().commit() | |
784 | return dict( |
|
888 | return dict( | |
785 | msg='Deleted repository `%s`' % repo.repo_name, |
|
889 | msg='Deleted repository `%s`%s' % (repo.repo_name, _forks_msg), | |
786 | success=True |
|
890 | success=True | |
787 | ) |
|
891 | ) | |
788 | except Exception: |
|
892 | except Exception: | |
@@ -859,7 +963,7 b' class ApiController(JSONRPCController):' | |||||
859 | def grant_users_group_permission(self, apiuser, repoid, usersgroupid, |
|
963 | def grant_users_group_permission(self, apiuser, repoid, usersgroupid, | |
860 | perm): |
|
964 | perm): | |
861 | """ |
|
965 | """ | |
862 |
Grant permission for user |
|
966 | Grant permission for user group on given repository, or update | |
863 | existing one if found |
|
967 | existing one if found | |
864 |
|
968 | |||
865 | :param apiuser: |
|
969 | :param apiuser: | |
@@ -878,7 +982,7 b' class ApiController(JSONRPCController):' | |||||
878 |
|
982 | |||
879 | Session().commit() |
|
983 | Session().commit() | |
880 | return dict( |
|
984 | return dict( | |
881 |
msg='Granted perm: `%s` for user |
|
985 | msg='Granted perm: `%s` for user group: `%s` in ' | |
882 | 'repo: `%s`' % ( |
|
986 | 'repo: `%s`' % ( | |
883 | perm.permission_name, users_group.users_group_name, |
|
987 | perm.permission_name, users_group.users_group_name, | |
884 | repo.repo_name |
|
988 | repo.repo_name | |
@@ -888,7 +992,7 b' class ApiController(JSONRPCController):' | |||||
888 | except Exception: |
|
992 | except Exception: | |
889 | log.error(traceback.format_exc()) |
|
993 | log.error(traceback.format_exc()) | |
890 | raise JSONRPCError( |
|
994 | raise JSONRPCError( | |
891 |
'failed to edit permission for user |
|
995 | 'failed to edit permission for user group: `%s` in ' | |
892 | 'repo: `%s`' % ( |
|
996 | 'repo: `%s`' % ( | |
893 | usersgroupid, repo.repo_name |
|
997 | usersgroupid, repo.repo_name | |
894 | ) |
|
998 | ) | |
@@ -897,7 +1001,7 b' class ApiController(JSONRPCController):' | |||||
897 | @HasPermissionAllDecorator('hg.admin') |
|
1001 | @HasPermissionAllDecorator('hg.admin') | |
898 | def revoke_users_group_permission(self, apiuser, repoid, usersgroupid): |
|
1002 | def revoke_users_group_permission(self, apiuser, repoid, usersgroupid): | |
899 | """ |
|
1003 | """ | |
900 |
Revoke permission for user |
|
1004 | Revoke permission for user group on given repository | |
901 |
|
1005 | |||
902 | :param apiuser: |
|
1006 | :param apiuser: | |
903 | :param repoid: |
|
1007 | :param repoid: | |
@@ -912,7 +1016,7 b' class ApiController(JSONRPCController):' | |||||
912 |
|
1016 | |||
913 | Session().commit() |
|
1017 | Session().commit() | |
914 | return dict( |
|
1018 | return dict( | |
915 |
msg='Revoked perm for user |
|
1019 | msg='Revoked perm for user group: `%s` in repo: `%s`' % ( | |
916 | users_group.users_group_name, repo.repo_name |
|
1020 | users_group.users_group_name, repo.repo_name | |
917 | ), |
|
1021 | ), | |
918 | success=True |
|
1022 | success=True | |
@@ -920,7 +1024,7 b' class ApiController(JSONRPCController):' | |||||
920 | except Exception: |
|
1024 | except Exception: | |
921 | log.error(traceback.format_exc()) |
|
1025 | log.error(traceback.format_exc()) | |
922 | raise JSONRPCError( |
|
1026 | raise JSONRPCError( | |
923 |
'failed to edit permission for user |
|
1027 | 'failed to edit permission for user group: `%s` in ' | |
924 | 'repo: `%s`' % ( |
|
1028 | 'repo: `%s`' % ( | |
925 | users_group.users_group_name, repo.repo_name |
|
1029 | users_group.users_group_name, repo.repo_name | |
926 | ) |
|
1030 | ) |
@@ -86,8 +86,8 b' class ChangelogController(BaseRepoContro' | |||||
86 | c.statuses = c.rhodecode_db_repo.statuses(page_revisions) |
|
86 | c.statuses = c.rhodecode_db_repo.statuses(page_revisions) | |
87 | except (RepositoryError, ChangesetDoesNotExistError, Exception), e: |
|
87 | except (RepositoryError, ChangesetDoesNotExistError, Exception), e: | |
88 | log.error(traceback.format_exc()) |
|
88 | log.error(traceback.format_exc()) | |
89 |
h.flash(str(e), category=' |
|
89 | h.flash(str(e), category='error') | |
90 | return redirect(url('home')) |
|
90 | return redirect(url('changelog_home', repo_name=c.repo_name)) | |
91 |
|
91 | |||
92 | self._graph(c.rhodecode_repo, collection, c.total_cs, c.size, p) |
|
92 | self._graph(c.rhodecode_repo, collection, c.total_cs, c.size, p) | |
93 |
|
93 |
@@ -26,7 +26,7 b'' | |||||
26 | import logging |
|
26 | import logging | |
27 | import traceback |
|
27 | import traceback | |
28 | from collections import defaultdict |
|
28 | from collections import defaultdict | |
29 | from webob.exc import HTTPForbidden, HTTPBadRequest |
|
29 | from webob.exc import HTTPForbidden, HTTPBadRequest, HTTPNotFound | |
30 |
|
30 | |||
31 | from pylons import tmpl_context as c, url, request, response |
|
31 | from pylons import tmpl_context as c, url, request, response | |
32 | from pylons.i18n.translation import _ |
|
32 | from pylons.i18n.translation import _ | |
@@ -71,7 +71,7 b' def get_ignore_ws(fid, GET):' | |||||
71 | if ig_ws: |
|
71 | if ig_ws: | |
72 | try: |
|
72 | try: | |
73 | return int(ig_ws[0].split(':')[-1]) |
|
73 | return int(ig_ws[0].split(':')[-1]) | |
74 | except: |
|
74 | except Exception: | |
75 | pass |
|
75 | pass | |
76 | return ig_ws_global |
|
76 | return ig_ws_global | |
77 |
|
77 | |||
@@ -80,21 +80,21 b' def _ignorews_url(GET, fileid=None):' | |||||
80 | fileid = str(fileid) if fileid else None |
|
80 | fileid = str(fileid) if fileid else None | |
81 | params = defaultdict(list) |
|
81 | params = defaultdict(list) | |
82 | _update_with_GET(params, GET) |
|
82 | _update_with_GET(params, GET) | |
83 |
lbl = _(' |
|
83 | lbl = _('Show white space') | |
84 | ig_ws = get_ignore_ws(fileid, GET) |
|
84 | ig_ws = get_ignore_ws(fileid, GET) | |
85 | ln_ctx = get_line_ctx(fileid, GET) |
|
85 | ln_ctx = get_line_ctx(fileid, GET) | |
86 | # global option |
|
86 | # global option | |
87 | if fileid is None: |
|
87 | if fileid is None: | |
88 | if ig_ws is None: |
|
88 | if ig_ws is None: | |
89 | params['ignorews'] += [1] |
|
89 | params['ignorews'] += [1] | |
90 |
lbl = _(' |
|
90 | lbl = _('Ignore white space') | |
91 | ctx_key = 'context' |
|
91 | ctx_key = 'context' | |
92 | ctx_val = ln_ctx |
|
92 | ctx_val = ln_ctx | |
93 | # per file options |
|
93 | # per file options | |
94 | else: |
|
94 | else: | |
95 | if ig_ws is None: |
|
95 | if ig_ws is None: | |
96 | params[fileid] += ['WS:1'] |
|
96 | params[fileid] += ['WS:1'] | |
97 |
lbl = _(' |
|
97 | lbl = _('Ignore white space') | |
98 |
|
98 | |||
99 | ctx_key = fileid |
|
99 | ctx_key = fileid | |
100 | ctx_val = 'C:%s' % ln_ctx |
|
100 | ctx_val = 'C:%s' % ln_ctx | |
@@ -124,7 +124,7 b' def get_line_ctx(fid, GET):' | |||||
124 |
|
124 | |||
125 | try: |
|
125 | try: | |
126 | return int(retval) |
|
126 | return int(retval) | |
127 | except: |
|
127 | except Exception: | |
128 | return 3 |
|
128 | return 3 | |
129 |
|
129 | |||
130 |
|
130 | |||
@@ -203,8 +203,8 b' class ChangesetController(BaseRepoContro' | |||||
203 |
|
203 | |||
204 | except (RepositoryError, ChangesetDoesNotExistError, Exception), e: |
|
204 | except (RepositoryError, ChangesetDoesNotExistError, Exception), e: | |
205 | log.error(traceback.format_exc()) |
|
205 | log.error(traceback.format_exc()) | |
206 |
h.flash(str(e), category=' |
|
206 | h.flash(str(e), category='error') | |
207 | return redirect(url('home')) |
|
207 | raise HTTPNotFound() | |
208 |
|
208 | |||
209 | c.changes = OrderedDict() |
|
209 | c.changes = OrderedDict() | |
210 |
|
210 | |||
@@ -329,7 +329,7 b' class ChangesetController(BaseRepoContro' | |||||
329 | text = text or (_('Status change -> %s') |
|
329 | text = text or (_('Status change -> %s') | |
330 | % ChangesetStatus.get_status_lbl(status)) |
|
330 | % ChangesetStatus.get_status_lbl(status)) | |
331 |
|
331 | |||
332 | comm = ChangesetCommentsModel().create( |
|
332 | c.co = comm = ChangesetCommentsModel().create( | |
333 | text=text, |
|
333 | text=text, | |
334 | repo=c.rhodecode_db_repo.repo_id, |
|
334 | repo=c.rhodecode_db_repo.repo_id, | |
335 | user=c.rhodecode_user.user_id, |
|
335 | user=c.rhodecode_user.user_id, | |
@@ -371,12 +371,11 b' class ChangesetController(BaseRepoContro' | |||||
371 | if not request.environ.get('HTTP_X_PARTIAL_XHR'): |
|
371 | if not request.environ.get('HTTP_X_PARTIAL_XHR'): | |
372 | return redirect(h.url('changeset_home', repo_name=repo_name, |
|
372 | return redirect(h.url('changeset_home', repo_name=repo_name, | |
373 | revision=revision)) |
|
373 | revision=revision)) | |
374 |
|
374 | #only ajax below | ||
375 | data = { |
|
375 | data = { | |
376 | 'target_id': h.safeid(h.safe_unicode(request.POST.get('f_path'))), |
|
376 | 'target_id': h.safeid(h.safe_unicode(request.POST.get('f_path'))), | |
377 | } |
|
377 | } | |
378 | if comm: |
|
378 | if comm: | |
379 | c.co = comm |
|
|||
380 | data.update(comm.get_dict()) |
|
379 | data.update(comm.get_dict()) | |
381 | data.update({'rendered_text': |
|
380 | data.update({'rendered_text': | |
382 | render('changeset/changeset_comment_block.html')}) |
|
381 | render('changeset/changeset_comment_block.html')}) |
@@ -3,7 +3,7 b'' | |||||
3 | rhodecode.controllers.compare |
|
3 | rhodecode.controllers.compare | |
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
5 |
|
5 | |||
6 |
compare controller for pylons show |
|
6 | compare controller for pylons showing differences between two | |
7 | repos, branches, bookmarks or tips |
|
7 | repos, branches, bookmarks or tips | |
8 |
|
8 | |||
9 | :created_on: May 6, 2012 |
|
9 | :created_on: May 6, 2012 | |
@@ -40,7 +40,6 b' from rhodecode.lib import diffs' | |||||
40 | from rhodecode.model.db import Repository |
|
40 | from rhodecode.model.db import Repository | |
41 | from rhodecode.model.pull_request import PullRequestModel |
|
41 | from rhodecode.model.pull_request import PullRequestModel | |
42 | from webob.exc import HTTPBadRequest |
|
42 | from webob.exc import HTTPBadRequest | |
43 | from rhodecode.lib.utils2 import str2bool |
|
|||
44 | from rhodecode.lib.diffs import LimitedDiffContainer |
|
43 | from rhodecode.lib.diffs import LimitedDiffContainer | |
45 | from rhodecode.lib.vcs.backends.base import EmptyChangeset |
|
44 | from rhodecode.lib.vcs.backends.base import EmptyChangeset | |
46 |
|
45 | |||
@@ -84,80 +83,85 b' class CompareController(BaseRepoControll' | |||||
84 | raise HTTPBadRequest() |
|
83 | raise HTTPBadRequest() | |
85 |
|
84 | |||
86 | def index(self, org_ref_type, org_ref, other_ref_type, other_ref): |
|
85 | def index(self, org_ref_type, org_ref, other_ref_type, other_ref): | |
87 |
|
86 | # org_ref will be evaluated in org_repo | ||
88 | org_repo = c.rhodecode_db_repo.repo_name |
|
87 | org_repo = c.rhodecode_db_repo.repo_name | |
89 | org_ref = (org_ref_type, org_ref) |
|
88 | org_ref = (org_ref_type, org_ref) | |
|
89 | # other_ref will be evaluated in other_repo | |||
90 | other_ref = (other_ref_type, other_ref) |
|
90 | other_ref = (other_ref_type, other_ref) | |
91 | other_repo = request.GET.get('repo', org_repo) |
|
91 | other_repo = request.GET.get('other_repo', org_repo) | |
92 | incoming_changesets = str2bool(request.GET.get('bundle', False)) |
|
92 | # If merge is True: | |
93 | c.fulldiff = fulldiff = request.GET.get('fulldiff') |
|
93 | # Show what org would get if merged with other: | |
94 | rev_start = request.GET.get('rev_start') |
|
94 | # List changesets that are ancestors of other but not of org. | |
95 | rev_end = request.GET.get('rev_end') |
|
95 | # New changesets in org is thus ignored. | |
|
96 | # Diff will be from common ancestor, and merges of org to other will thus be ignored. | |||
|
97 | # If merge is False: | |||
|
98 | # Make a raw diff from org to other, no matter if related or not. | |||
|
99 | # Changesets in one and not in the other will be ignored | |||
|
100 | merge = bool(request.GET.get('merge')) | |||
|
101 | # fulldiff disables cut_off_limit | |||
|
102 | c.fulldiff = request.GET.get('fulldiff') | |||
|
103 | # partial uses compare_cs.html template directly | |||
|
104 | partial = request.environ.get('HTTP_X_PARTIAL_XHR') | |||
|
105 | # as_form puts hidden input field with changeset revisions | |||
|
106 | c.as_form = partial and request.GET.get('as_form') | |||
|
107 | # swap url for compare_diff page - never partial and never as_form | |||
|
108 | c.swap_url = h.url('compare_url', | |||
|
109 | repo_name=other_repo, | |||
|
110 | org_ref_type=other_ref[0], org_ref=other_ref[1], | |||
|
111 | other_repo=org_repo, | |||
|
112 | other_ref_type=org_ref[0], other_ref=org_ref[1], | |||
|
113 | merge=merge or '') | |||
96 |
|
114 | |||
97 | c.swap_url = h.url('compare_url', repo_name=other_repo, |
|
115 | org_repo = Repository.get_by_repo_name(org_repo) | |
98 | org_ref_type=other_ref[0], org_ref=other_ref[1], |
|
116 | other_repo = Repository.get_by_repo_name(other_repo) | |
99 | other_ref_type=org_ref[0], other_ref=org_ref[1], |
|
|||
100 | repo=org_repo, as_form=request.GET.get('as_form'), |
|
|||
101 | bundle=incoming_changesets) |
|
|||
102 |
|
117 | |||
103 | c.org_repo = org_repo = Repository.get_by_repo_name(org_repo) |
|
118 | if org_repo is None: | |
104 | c.other_repo = other_repo = Repository.get_by_repo_name(other_repo) |
|
|||
105 |
|
||||
106 | if c.org_repo is None: |
|
|||
107 | log.error('Could not find org repo %s' % org_repo) |
|
119 | log.error('Could not find org repo %s' % org_repo) | |
108 | raise HTTPNotFound |
|
120 | raise HTTPNotFound | |
109 |
if |
|
121 | if other_repo is None: | |
110 | log.error('Could not find other repo %s' % other_repo) |
|
122 | log.error('Could not find other repo %s' % other_repo) | |
111 | raise HTTPNotFound |
|
123 | raise HTTPNotFound | |
112 |
|
124 | |||
113 |
if |
|
125 | if org_repo != other_repo and h.is_git(org_repo): | |
114 | log.error('compare of two remote repos not available for GIT REPOS') |
|
126 | log.error('compare of two remote repos not available for GIT REPOS') | |
115 | raise HTTPNotFound |
|
127 | raise HTTPNotFound | |
116 |
|
128 | |||
117 |
if |
|
129 | if org_repo.scm_instance.alias != other_repo.scm_instance.alias: | |
118 | log.error('compare of two different kind of remote repos not available') |
|
130 | log.error('compare of two different kind of remote repos not available') | |
119 | raise HTTPNotFound |
|
131 | raise HTTPNotFound | |
120 |
|
132 | |||
121 | partial = request.environ.get('HTTP_X_PARTIAL_XHR') |
|
|||
122 | self.__get_cs_or_redirect(rev=org_ref, repo=org_repo, partial=partial) |
|
133 | self.__get_cs_or_redirect(rev=org_ref, repo=org_repo, partial=partial) | |
123 | self.__get_cs_or_redirect(rev=other_ref, repo=other_repo, partial=partial) |
|
134 | self.__get_cs_or_redirect(rev=other_ref, repo=other_repo, partial=partial) | |
124 |
|
135 | |||
125 | if rev_start and rev_end: |
|
136 | c.org_repo = org_repo | |
126 | #replace our org_ref with given CS |
|
137 | c.other_repo = other_repo | |
127 | org_ref = ('rev', rev_start) |
|
138 | c.org_ref = org_ref[1] | |
128 | other_ref = ('rev', rev_end) |
|
139 | c.other_ref = other_ref[1] | |
|
140 | c.org_ref_type = org_ref[0] | |||
|
141 | c.other_ref_type = other_ref[0] | |||
129 |
|
142 | |||
130 |
c.cs_ranges, |
|
143 | c.cs_ranges, c.ancestor = PullRequestModel().get_compare_data( | |
131 |
|
|
144 | org_repo, org_ref, other_repo, other_ref, merge) | |
132 | ) |
|
|||
133 |
|
145 | |||
134 | c.statuses = c.rhodecode_db_repo.statuses([x.raw_id for x in |
|
146 | c.statuses = c.rhodecode_db_repo.statuses([x.raw_id for x in | |
135 | c.cs_ranges]) |
|
147 | c.cs_ranges]) | |
136 | c.target_repo = c.repo_name |
|
|||
137 | # defines that we need hidden inputs with changesets |
|
|||
138 | c.as_form = request.GET.get('as_form', False) |
|
|||
139 | if partial: |
|
148 | if partial: | |
|
149 | assert c.ancestor | |||
140 | return render('compare/compare_cs.html') |
|
150 | return render('compare/compare_cs.html') | |
141 |
|
151 | |||
142 | c.org_ref = org_ref[1] |
|
152 | if c.ancestor: | |
143 | c.other_ref = other_ref[1] |
|
153 | assert merge | |
|
154 | # case we want a simple diff without incoming changesets, | |||
|
155 | # previewing what will be merged. | |||
|
156 | # Make the diff on the other repo (which is known to have other_ref) | |||
|
157 | log.debug('Using ancestor %s as org_ref instead of %s' | |||
|
158 | % (c.ancestor, org_ref)) | |||
|
159 | org_ref = ('rev', c.ancestor) | |||
|
160 | org_repo = other_repo | |||
144 |
|
161 | |||
145 | if not incoming_changesets and c.cs_ranges and c.org_repo != c.other_repo: |
|
162 | diff_limit = self.cut_off_limit if not c.fulldiff else None | |
146 | # case we want a simple diff without incoming changesets, just |
|
|||
147 | # for review purposes. Make the diff on the forked repo, with |
|
|||
148 | # revision that is common ancestor |
|
|||
149 | _org_ref = org_ref |
|
|||
150 | org_ref = ('rev', getattr(c.cs_ranges[0].parents[0] |
|
|||
151 | if c.cs_ranges[0].parents |
|
|||
152 | else EmptyChangeset(), 'raw_id')) |
|
|||
153 | log.debug('Changed org_ref from %s to %s' % (_org_ref, org_ref)) |
|
|||
154 | other_repo = org_repo |
|
|||
155 |
|
163 | |||
156 | diff_limit = self.cut_off_limit if not fulldiff else None |
|
164 | _diff = diffs.differ(org_repo, org_ref, other_repo, other_ref) | |
157 |
|
||||
158 | _diff = diffs.differ(org_repo, org_ref, other_repo, other_ref, |
|
|||
159 | discovery_data, |
|
|||
160 | remote_compare=incoming_changesets) |
|
|||
161 |
|
165 | |||
162 | diff_processor = diffs.DiffProcessor(_diff or '', format='gitdiff', |
|
166 | diff_processor = diffs.DiffProcessor(_diff or '', format='gitdiff', | |
163 | diff_limit=diff_limit) |
|
167 | diff_limit=diff_limit) |
@@ -91,7 +91,7 b' class ErrorController(BaseController):' | |||||
91 | [400, 401, 403, 404, 500]''' |
|
91 | [400, 401, 403, 404, 500]''' | |
92 | try: |
|
92 | try: | |
93 | code = int(code) |
|
93 | code = int(code) | |
94 | except: |
|
94 | except Exception: | |
95 | code = 500 |
|
95 | code = 500 | |
96 |
|
96 | |||
97 | if code == 400: |
|
97 | if code == 400: |
@@ -88,9 +88,8 b' class FeedController(BaseRepoController)' | |||||
88 |
|
88 | |||
89 | def __get_desc(self, cs): |
|
89 | def __get_desc(self, cs): | |
90 | desc_msg = [] |
|
90 | desc_msg = [] | |
91 | desc_msg.append('%s %s %s<br/>' % (h.person(cs.author), |
|
91 | desc_msg.append((_('%s committed on %s') | |
92 | _('commited on'), |
|
92 | % (h.person(cs.author), h.fmt_date(cs.date))) + '<br/>') | |
93 | h.fmt_date(cs.date))) |
|
|||
94 | #branches, tags, bookmarks |
|
93 | #branches, tags, bookmarks | |
95 | if cs.branch: |
|
94 | if cs.branch: | |
96 | desc_msg.append('branch: %s<br/>' % cs.branch) |
|
95 | desc_msg.append('branch: %s<br/>' % cs.branch) | |
@@ -103,7 +102,7 b' class FeedController(BaseRepoController)' | |||||
103 | # rev link |
|
102 | # rev link | |
104 | _url = url('changeset_home', repo_name=cs.repository.name, |
|
103 | _url = url('changeset_home', repo_name=cs.repository.name, | |
105 | revision=cs.raw_id, qualified=True) |
|
104 | revision=cs.raw_id, qualified=True) | |
106 |
desc_msg.append('changese |
|
105 | desc_msg.append('changeset: <a href="%s">%s</a>' % (_url, cs.raw_id[:8])) | |
107 |
|
106 | |||
108 | desc_msg.append('<pre>') |
|
107 | desc_msg.append('<pre>') | |
109 | desc_msg.append(cs.message) |
|
108 | desc_msg.append(cs.message) |
@@ -27,6 +27,7 b' import os' | |||||
27 | import logging |
|
27 | import logging | |
28 | import traceback |
|
28 | import traceback | |
29 | import tempfile |
|
29 | import tempfile | |
|
30 | import shutil | |||
30 |
|
31 | |||
31 | from pylons import request, response, tmpl_context as c, url |
|
32 | from pylons import request, response, tmpl_context as c, url | |
32 | from pylons.i18n.translation import _ |
|
33 | from pylons.i18n.translation import _ | |
@@ -55,6 +56,7 b' from rhodecode.model.db import Repositor' | |||||
55 |
|
56 | |||
56 | from rhodecode.controllers.changeset import anchor_url, _ignorews_url,\ |
|
57 | from rhodecode.controllers.changeset import anchor_url, _ignorews_url,\ | |
57 | _context_url, get_line_ctx, get_ignore_ws |
|
58 | _context_url, get_line_ctx, get_ignore_ws | |
|
59 | from webob.exc import HTTPNotFound | |||
58 |
|
60 | |||
59 |
|
61 | |||
60 | log = logging.getLogger(__name__) |
|
62 | log = logging.getLogger(__name__) | |
@@ -83,14 +85,14 b' class FilesController(BaseRepoController' | |||||
83 | url_ = url('files_add_home', |
|
85 | url_ = url('files_add_home', | |
84 | repo_name=c.repo_name, |
|
86 | repo_name=c.repo_name, | |
85 | revision=0, f_path='') |
|
87 | revision=0, f_path='') | |
86 |
add_new = |
|
88 | add_new = h.link_to(_('Click here to add new file'), url_) | |
87 | h.flash(h.literal(_('There are no files yet %s') % add_new), |
|
89 | h.flash(h.literal(_('There are no files yet %s') % add_new), | |
88 | category='warning') |
|
90 | category='warning') | |
89 | redirect(h.url('summary_home', repo_name=repo_name)) |
|
91 | redirect(h.url('summary_home', repo_name=repo_name)) | |
90 |
|
92 | |||
91 | except RepositoryError, e: |
|
93 | except RepositoryError, e: # including ChangesetDoesNotExistError | |
92 |
h.flash(str(e), category=' |
|
94 | h.flash(str(e), category='error') | |
93 | redirect(h.url('files_home', repo_name=repo_name, revision='tip')) |
|
95 | raise HTTPNotFound() | |
94 |
|
96 | |||
95 | def __get_filenode_or_redirect(self, repo_name, cs, path): |
|
97 | def __get_filenode_or_redirect(self, repo_name, cs, path): | |
96 | """ |
|
98 | """ | |
@@ -107,9 +109,8 b' class FilesController(BaseRepoController' | |||||
107 | if file_node.is_dir(): |
|
109 | if file_node.is_dir(): | |
108 | raise RepositoryError('given path is a directory') |
|
110 | raise RepositoryError('given path is a directory') | |
109 | except RepositoryError, e: |
|
111 | except RepositoryError, e: | |
110 |
h.flash(str(e), category=' |
|
112 | h.flash(str(e), category='error') | |
111 | redirect(h.url('files_home', repo_name=repo_name, |
|
113 | raise HTTPNotFound() | |
112 | revision=cs.raw_id)) |
|
|||
113 |
|
114 | |||
114 | return file_node |
|
115 | return file_node | |
115 |
|
116 | |||
@@ -121,13 +122,12 b' class FilesController(BaseRepoController' | |||||
121 | post_revision = request.POST.get('at_rev', None) |
|
122 | post_revision = request.POST.get('at_rev', None) | |
122 | if post_revision: |
|
123 | if post_revision: | |
123 | cs = self.__get_cs_or_redirect(post_revision, repo_name) |
|
124 | cs = self.__get_cs_or_redirect(post_revision, repo_name) | |
124 | redirect(url('files_home', repo_name=c.repo_name, |
|
|||
125 | revision=cs.raw_id, f_path=f_path)) |
|
|||
126 |
|
125 | |||
127 | c.changeset = self.__get_cs_or_redirect(revision, repo_name) |
|
126 | c.changeset = self.__get_cs_or_redirect(revision, repo_name) | |
128 | c.branch = request.GET.get('branch', None) |
|
127 | c.branch = request.GET.get('branch', None) | |
129 | c.f_path = f_path |
|
128 | c.f_path = f_path | |
130 | c.annotate = annotate |
|
129 | c.annotate = annotate | |
|
130 | c.changeset = self.__get_cs_or_redirect(revision, repo_name) | |||
131 | cur_rev = c.changeset.revision |
|
131 | cur_rev = c.changeset.revision | |
132 |
|
132 | |||
133 | # prev link |
|
133 | # prev link | |
@@ -160,6 +160,9 b' class FilesController(BaseRepoController' | |||||
160 | c.file_changeset = (c.changeset |
|
160 | c.file_changeset = (c.changeset | |
161 | if c.changeset.revision < file_last_cs.revision |
|
161 | if c.changeset.revision < file_last_cs.revision | |
162 | else file_last_cs) |
|
162 | else file_last_cs) | |
|
163 | #determine if we're on branch head | |||
|
164 | _branches = c.rhodecode_repo.branches | |||
|
165 | c.on_branch_head = revision in _branches.keys() + _branches.values() | |||
163 | _hist = [] |
|
166 | _hist = [] | |
164 | c.file_history = [] |
|
167 | c.file_history = [] | |
165 | if c.load_full_history: |
|
168 | if c.load_full_history: | |
@@ -171,9 +174,8 b' class FilesController(BaseRepoController' | |||||
171 | else: |
|
174 | else: | |
172 | c.authors = c.file_history = [] |
|
175 | c.authors = c.file_history = [] | |
173 | except RepositoryError, e: |
|
176 | except RepositoryError, e: | |
174 |
h.flash(str(e), category=' |
|
177 | h.flash(str(e), category='error') | |
175 | redirect(h.url('files_home', repo_name=repo_name, |
|
178 | raise HTTPNotFound() | |
176 | revision='tip')) |
|
|||
177 |
|
179 | |||
178 | if request.environ.get('HTTP_X_PARTIAL_XHR'): |
|
180 | if request.environ.get('HTTP_X_PARTIAL_XHR'): | |
179 | return render('files/files_ypjax.html') |
|
181 | return render('files/files_ypjax.html') | |
@@ -260,7 +262,7 b' class FilesController(BaseRepoController' | |||||
260 | @LoginRequired() |
|
262 | @LoginRequired() | |
261 | @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') |
|
263 | @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') | |
262 | def edit(self, repo_name, revision, f_path): |
|
264 | def edit(self, repo_name, revision, f_path): | |
263 | repo = Repository.get_by_repo_name(repo_name) |
|
265 | repo = c.rhodecode_db_repo | |
264 | if repo.enable_locking and repo.locked[0]: |
|
266 | if repo.enable_locking and repo.locked[0]: | |
265 | h.flash(_('This repository is has been locked by %s on %s') |
|
267 | h.flash(_('This repository is has been locked by %s on %s') | |
266 | % (h.person_by_id(repo.locked[0]), |
|
268 | % (h.person_by_id(repo.locked[0]), | |
@@ -269,6 +271,17 b' class FilesController(BaseRepoController' | |||||
269 | return redirect(h.url('files_home', |
|
271 | return redirect(h.url('files_home', | |
270 | repo_name=repo_name, revision='tip')) |
|
272 | repo_name=repo_name, revision='tip')) | |
271 |
|
273 | |||
|
274 | # check if revision is a branch identifier- basically we cannot | |||
|
275 | # create multiple heads via file editing | |||
|
276 | _branches = repo.scm_instance.branches | |||
|
277 | # check if revision is a branch name or branch hash | |||
|
278 | if revision not in _branches.keys() + _branches.values(): | |||
|
279 | h.flash(_('You can only edit files with revision ' | |||
|
280 | 'being a valid branch '), category='warning') | |||
|
281 | return redirect(h.url('files_home', | |||
|
282 | repo_name=repo_name, revision='tip', | |||
|
283 | f_path=f_path)) | |||
|
284 | ||||
272 | r_post = request.POST |
|
285 | r_post = request.POST | |
273 |
|
286 | |||
274 | c.cs = self.__get_cs_or_redirect(revision, repo_name) |
|
287 | c.cs = self.__get_cs_or_redirect(revision, repo_name) | |
@@ -277,7 +290,7 b' class FilesController(BaseRepoController' | |||||
277 | if c.file.is_binary: |
|
290 | if c.file.is_binary: | |
278 | return redirect(url('files_home', repo_name=c.repo_name, |
|
291 | return redirect(url('files_home', repo_name=c.repo_name, | |
279 | revision=c.cs.raw_id, f_path=f_path)) |
|
292 | revision=c.cs.raw_id, f_path=f_path)) | |
280 |
|
293 | c.default_message = _('Edited file %s via RhodeCode') % (f_path) | ||
281 | c.f_path = f_path |
|
294 | c.f_path = f_path | |
282 |
|
295 | |||
283 | if r_post: |
|
296 | if r_post: | |
@@ -289,20 +302,17 b' class FilesController(BaseRepoController' | |||||
289 | mode = detect_mode(first_line, 0) |
|
302 | mode = detect_mode(first_line, 0) | |
290 | content = convert_line_endings(r_post.get('content'), mode) |
|
303 | content = convert_line_endings(r_post.get('content'), mode) | |
291 |
|
304 | |||
292 |
message = r_post.get('message') or |
|
305 | message = r_post.get('message') or c.default_message | |
293 | % (f_path)) |
|
|||
294 | author = self.rhodecode_user.full_contact |
|
306 | author = self.rhodecode_user.full_contact | |
295 |
|
307 | |||
296 | if content == old_content: |
|
308 | if content == old_content: | |
297 | h.flash(_('No changes'), |
|
309 | h.flash(_('No changes'), category='warning') | |
298 | category='warning') |
|
|||
299 | return redirect(url('changeset_home', repo_name=c.repo_name, |
|
310 | return redirect(url('changeset_home', repo_name=c.repo_name, | |
300 | revision='tip')) |
|
311 | revision='tip')) | |
301 |
|
||||
302 | try: |
|
312 | try: | |
303 | self.scm_model.commit_change(repo=c.rhodecode_repo, |
|
313 | self.scm_model.commit_change(repo=c.rhodecode_repo, | |
304 | repo_name=repo_name, cs=c.cs, |
|
314 | repo_name=repo_name, cs=c.cs, | |
305 | user=self.rhodecode_user, |
|
315 | user=self.rhodecode_user.user_id, | |
306 | author=author, message=message, |
|
316 | author=author, message=message, | |
307 | content=content, f_path=f_path) |
|
317 | content=content, f_path=f_path) | |
308 | h.flash(_('Successfully committed to %s') % f_path, |
|
318 | h.flash(_('Successfully committed to %s') % f_path, | |
@@ -334,26 +344,22 b' class FilesController(BaseRepoController' | |||||
334 | redirect_after=False) |
|
344 | redirect_after=False) | |
335 | if c.cs is None: |
|
345 | if c.cs is None: | |
336 | c.cs = EmptyChangeset(alias=c.rhodecode_repo.alias) |
|
346 | c.cs = EmptyChangeset(alias=c.rhodecode_repo.alias) | |
337 |
|
347 | c.default_message = (_('Added file via RhodeCode')) | ||
338 | c.f_path = f_path |
|
348 | c.f_path = f_path | |
339 |
|
349 | |||
340 | if r_post: |
|
350 | if r_post: | |
341 | unix_mode = 0 |
|
351 | unix_mode = 0 | |
342 | content = convert_line_endings(r_post.get('content'), unix_mode) |
|
352 | content = convert_line_endings(r_post.get('content'), unix_mode) | |
343 |
|
353 | |||
344 |
message = r_post.get('message') or |
|
354 | message = r_post.get('message') or c.default_message | |
345 | % (f_path)) |
|
355 | filename = r_post.get('filename') | |
346 | location = r_post.get('location') |
|
356 | location = r_post.get('location') | |
347 | filename = r_post.get('filename') |
|
|||
348 | file_obj = r_post.get('upload_file', None) |
|
357 | file_obj = r_post.get('upload_file', None) | |
349 |
|
358 | |||
350 | if file_obj is not None and hasattr(file_obj, 'filename'): |
|
359 | if file_obj is not None and hasattr(file_obj, 'filename'): | |
351 | filename = file_obj.filename |
|
360 | filename = file_obj.filename | |
352 | content = file_obj.file |
|
361 | content = file_obj.file | |
353 |
|
362 | |||
354 | node_path = os.path.join(location, filename) |
|
|||
355 | author = self.rhodecode_user.full_contact |
|
|||
356 |
|
||||
357 | if not content: |
|
363 | if not content: | |
358 | h.flash(_('No content'), category='warning') |
|
364 | h.flash(_('No content'), category='warning') | |
359 | return redirect(url('changeset_home', repo_name=c.repo_name, |
|
365 | return redirect(url('changeset_home', repo_name=c.repo_name, | |
@@ -362,16 +368,26 b' class FilesController(BaseRepoController' | |||||
362 | h.flash(_('No filename'), category='warning') |
|
368 | h.flash(_('No filename'), category='warning') | |
363 | return redirect(url('changeset_home', repo_name=c.repo_name, |
|
369 | return redirect(url('changeset_home', repo_name=c.repo_name, | |
364 | revision='tip')) |
|
370 | revision='tip')) | |
|
371 | if location.startswith('/') or location.startswith('.') or '../' in location: | |||
|
372 | h.flash(_('Location must be relative path and must not ' | |||
|
373 | 'contain .. in path'), category='warning') | |||
|
374 | return redirect(url('changeset_home', repo_name=c.repo_name, | |||
|
375 | revision='tip')) | |||
|
376 | if location: | |||
|
377 | location = os.path.normpath(location) | |||
|
378 | filename = os.path.basename(filename) | |||
|
379 | node_path = os.path.join(location, filename) | |||
|
380 | author = self.rhodecode_user.full_contact | |||
365 |
|
381 | |||
366 | try: |
|
382 | try: | |
367 | self.scm_model.create_node(repo=c.rhodecode_repo, |
|
383 | self.scm_model.create_node(repo=c.rhodecode_repo, | |
368 | repo_name=repo_name, cs=c.cs, |
|
384 | repo_name=repo_name, cs=c.cs, | |
369 | user=self.rhodecode_user, |
|
385 | user=self.rhodecode_user.user_id, | |
370 | author=author, message=message, |
|
386 | author=author, message=message, | |
371 | content=content, f_path=node_path) |
|
387 | content=content, f_path=node_path) | |
372 | h.flash(_('Successfully committed to %s') % node_path, |
|
388 | h.flash(_('Successfully committed to %s') % node_path, | |
373 | category='success') |
|
389 | category='success') | |
374 | except NodeAlreadyExistsError, e: |
|
390 | except (NodeError, NodeAlreadyExistsError), e: | |
375 | h.flash(_(e), category='error') |
|
391 | h.flash(_(e), category='error') | |
376 | except Exception: |
|
392 | except Exception: | |
377 | log.error(traceback.format_exc()) |
|
393 | log.error(traceback.format_exc()) | |
@@ -400,8 +416,8 b' class FilesController(BaseRepoController' | |||||
400 |
|
416 | |||
401 | try: |
|
417 | try: | |
402 | dbrepo = RepoModel().get_by_repo_name(repo_name) |
|
418 | dbrepo = RepoModel().get_by_repo_name(repo_name) | |
403 |
if dbrepo.enable_downloads |
|
419 | if not dbrepo.enable_downloads: | |
404 |
return _(' |
|
420 | return _('Downloads disabled') | |
405 |
|
421 | |||
406 | if c.rhodecode_repo.alias == 'hg': |
|
422 | if c.rhodecode_repo.alias == 'hg': | |
407 | # patch and reset hooks section of UI config to not run any |
|
423 | # patch and reset hooks section of UI config to not run any | |
@@ -417,11 +433,40 b' class FilesController(BaseRepoController' | |||||
417 | return _('Empty repository') |
|
433 | return _('Empty repository') | |
418 | except (ImproperArchiveTypeError, KeyError): |
|
434 | except (ImproperArchiveTypeError, KeyError): | |
419 | return _('Unknown archive type') |
|
435 | return _('Unknown archive type') | |
|
436 | # archive cache | |||
|
437 | from rhodecode import CONFIG | |||
|
438 | rev_name = cs.raw_id[:12] | |||
|
439 | archive_name = '%s-%s%s' % (safe_str(repo_name.replace('/', '_')), | |||
|
440 | safe_str(rev_name), ext) | |||
420 |
|
441 | |||
421 | fd, archive = tempfile.mkstemp() |
|
442 | use_cached_archive = False # defines if we use cached version of archive | |
422 | t = open(archive, 'wb') |
|
443 | archive_cache_enabled = CONFIG.get('archive_cache_dir') | |
423 | cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos) |
|
444 | if not subrepos and archive_cache_enabled: | |
424 | t.close() |
|
445 | #check if we it's ok to write | |
|
446 | if not os.path.isdir(CONFIG['archive_cache_dir']): | |||
|
447 | os.makedirs(CONFIG['archive_cache_dir']) | |||
|
448 | cached_archive_path = os.path.join(CONFIG['archive_cache_dir'], archive_name) | |||
|
449 | if os.path.isfile(cached_archive_path): | |||
|
450 | log.debug('Found cached archive in %s' % cached_archive_path) | |||
|
451 | fd, archive = None, cached_archive_path | |||
|
452 | use_cached_archive = True | |||
|
453 | else: | |||
|
454 | log.debug('Archive %s is not yet cached' % (archive_name)) | |||
|
455 | ||||
|
456 | if not use_cached_archive: | |||
|
457 | #generate new archive | |||
|
458 | try: | |||
|
459 | fd, archive = tempfile.mkstemp() | |||
|
460 | t = open(archive, 'wb') | |||
|
461 | log.debug('Creating new temp archive in %s' % archive) | |||
|
462 | cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos) | |||
|
463 | if archive_cache_enabled: | |||
|
464 | #if we generated the archive and use cache rename that | |||
|
465 | log.debug('Storing new archive in %s' % cached_archive_path) | |||
|
466 | shutil.move(archive, cached_archive_path) | |||
|
467 | archive = cached_archive_path | |||
|
468 | finally: | |||
|
469 | t.close() | |||
425 |
|
470 | |||
426 | def get_chunked_archive(archive): |
|
471 | def get_chunked_archive(archive): | |
427 | stream = open(archive, 'rb') |
|
472 | stream = open(archive, 'rb') | |
@@ -429,13 +474,15 b' class FilesController(BaseRepoController' | |||||
429 | data = stream.read(16 * 1024) |
|
474 | data = stream.read(16 * 1024) | |
430 | if not data: |
|
475 | if not data: | |
431 | stream.close() |
|
476 | stream.close() | |
432 | os.close(fd) |
|
477 | if fd: # fd means we used temporary file | |
433 |
os. |
|
478 | os.close(fd) | |
|
479 | if not archive_cache_enabled: | |||
|
480 | log.debug('Destroing temp archive %s' % archive) | |||
|
481 | os.remove(archive) | |||
434 | break |
|
482 | break | |
435 | yield data |
|
483 | yield data | |
436 |
|
484 | |||
437 |
response.content_disposition = str('attachment; filename=%s |
|
485 | response.content_disposition = str('attachment; filename=%s' % (archive_name)) | |
438 | % (repo_name, revision[:12], ext)) |
|
|||
439 | response.content_type = str(content_type) |
|
486 | response.content_type = str(content_type) | |
440 | return get_chunked_archive(archive) |
|
487 | return get_chunked_archive(archive) | |
441 |
|
488 | |||
@@ -474,6 +521,9 b' class FilesController(BaseRepoController' | |||||
474 | c.changeset_1 = c.rhodecode_repo.get_changeset(diff1) |
|
521 | c.changeset_1 = c.rhodecode_repo.get_changeset(diff1) | |
475 | try: |
|
522 | try: | |
476 | node1 = c.changeset_1.get_node(f_path) |
|
523 | node1 = c.changeset_1.get_node(f_path) | |
|
524 | if node1.is_dir(): | |||
|
525 | raise NodeError('%s path is a %s not a file' | |||
|
526 | % (node1, type(node1))) | |||
477 | except NodeDoesNotExistError: |
|
527 | except NodeDoesNotExistError: | |
478 | c.changeset_1 = EmptyChangeset(cs=diff1, |
|
528 | c.changeset_1 = EmptyChangeset(cs=diff1, | |
479 | revision=c.changeset_1.revision, |
|
529 | revision=c.changeset_1.revision, | |
@@ -487,6 +537,9 b' class FilesController(BaseRepoController' | |||||
487 | c.changeset_2 = c.rhodecode_repo.get_changeset(diff2) |
|
537 | c.changeset_2 = c.rhodecode_repo.get_changeset(diff2) | |
488 | try: |
|
538 | try: | |
489 | node2 = c.changeset_2.get_node(f_path) |
|
539 | node2 = c.changeset_2.get_node(f_path) | |
|
540 | if node2.is_dir(): | |||
|
541 | raise NodeError('%s path is a %s not a file' | |||
|
542 | % (node2, type(node2))) | |||
490 | except NodeDoesNotExistError: |
|
543 | except NodeDoesNotExistError: | |
491 | c.changeset_2 = EmptyChangeset(cs=diff2, |
|
544 | c.changeset_2 = EmptyChangeset(cs=diff2, | |
492 | revision=c.changeset_2.revision, |
|
545 | revision=c.changeset_2.revision, |
@@ -38,10 +38,11 b' from rhodecode.lib.auth import LoginRequ' | |||||
38 | NotAnonymous, HasRepoPermissionAny, HasPermissionAllDecorator,\ |
|
38 | NotAnonymous, HasRepoPermissionAny, HasPermissionAllDecorator,\ | |
39 | HasPermissionAnyDecorator |
|
39 | HasPermissionAnyDecorator | |
40 | from rhodecode.lib.base import BaseRepoController, render |
|
40 | from rhodecode.lib.base import BaseRepoController, render | |
41 | from rhodecode.model.db import Repository, RepoGroup, UserFollowing, User |
|
41 | from rhodecode.model.db import Repository, RepoGroup, UserFollowing, User,\ | |
|
42 | RhodeCodeUi | |||
42 | from rhodecode.model.repo import RepoModel |
|
43 | from rhodecode.model.repo import RepoModel | |
43 | from rhodecode.model.forms import RepoForkForm |
|
44 | from rhodecode.model.forms import RepoForkForm | |
44 | from rhodecode.model.scm import ScmModel |
|
45 | from rhodecode.model.scm import ScmModel, GroupList | |
45 | from rhodecode.lib.utils2 import safe_int |
|
46 | from rhodecode.lib.utils2 import safe_int | |
46 |
|
47 | |||
47 | log = logging.getLogger(__name__) |
|
48 | log = logging.getLogger(__name__) | |
@@ -54,7 +55,9 b' class ForksController(BaseRepoController' | |||||
54 | super(ForksController, self).__before__() |
|
55 | super(ForksController, self).__before__() | |
55 |
|
56 | |||
56 | def __load_defaults(self): |
|
57 | def __load_defaults(self): | |
57 | c.repo_groups = RepoGroup.groups_choices(check_perms=True) |
|
58 | acl_groups = GroupList(RepoGroup.query().all(), | |
|
59 | perm_set=['group.write', 'group.admin']) | |||
|
60 | c.repo_groups = RepoGroup.groups_choices(groups=acl_groups) | |||
58 | c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) |
|
61 | c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) | |
59 | choices, c.landing_revs = ScmModel().get_repo_landing_revs() |
|
62 | choices, c.landing_revs = ScmModel().get_repo_landing_revs() | |
60 | c.landing_revs_choices = choices |
|
63 | c.landing_revs_choices = choices | |
@@ -93,9 +96,16 b' class ForksController(BaseRepoController' | |||||
93 | c.stats_percentage = '%.2f' % ((float((last_rev)) / |
|
96 | c.stats_percentage = '%.2f' % ((float((last_rev)) / | |
94 | c.repo_last_rev) * 100) |
|
97 | c.repo_last_rev) * 100) | |
95 |
|
98 | |||
|
99 | c.can_update = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_UPDATE).ui_active | |||
|
100 | ||||
96 | defaults = RepoModel()._get_defaults(repo_name) |
|
101 | defaults = RepoModel()._get_defaults(repo_name) | |
|
102 | # alter the description to indicate a fork | |||
|
103 | defaults['description'] = ('fork of repository: %s \n%s' | |||
|
104 | % (defaults['repo_name'], | |||
|
105 | defaults['description'])) | |||
97 | # add suffix to fork |
|
106 | # add suffix to fork | |
98 | defaults['repo_name'] = '%s-fork' % defaults['repo_name'] |
|
107 | defaults['repo_name'] = '%s-fork' % defaults['repo_name'] | |
|
108 | ||||
99 | return defaults |
|
109 | return defaults | |
100 |
|
110 | |||
101 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
|
111 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |
@@ -152,11 +162,18 b' class ForksController(BaseRepoController' | |||||
152 | try: |
|
162 | try: | |
153 | form_result = _form.to_python(dict(request.POST)) |
|
163 | form_result = _form.to_python(dict(request.POST)) | |
154 |
|
164 | |||
|
165 | # an approximation that is better than nothing | |||
|
166 | if not RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_UPDATE).ui_active: | |||
|
167 | form_result['update_after_clone'] = False | |||
|
168 | ||||
155 | # create fork is done sometimes async on celery, db transaction |
|
169 | # create fork is done sometimes async on celery, db transaction | |
156 | # management is handled there. |
|
170 | # management is handled there. | |
157 | RepoModel().create_fork(form_result, self.rhodecode_user.user_id) |
|
171 | RepoModel().create_fork(form_result, self.rhodecode_user.user_id) | |
158 | h.flash(_('forked %s repository as %s') \ |
|
172 | fork_url = h.link_to(form_result['repo_name_full'], | |
159 |
|
|
173 | h.url('summary_home', repo_name=form_result['repo_name_full'])) | |
|
174 | ||||
|
175 | h.flash(h.literal(_('Forked repository %s as %s') \ | |||
|
176 | % (repo_name, fork_url)), | |||
160 | category='success') |
|
177 | category='success') | |
161 | except formencode.Invalid, errors: |
|
178 | except formencode.Invalid, errors: | |
162 | c.new_repo = errors.value['repo_name'] |
|
179 | c.new_repo = errors.value['repo_name'] | |
@@ -172,4 +189,4 b' class ForksController(BaseRepoController' | |||||
172 | h.flash(_('An error occurred during repository forking %s') % |
|
189 | h.flash(_('An error occurred during repository forking %s') % | |
173 | repo_name, category='error') |
|
190 | repo_name, category='error') | |
174 |
|
191 | |||
175 | return redirect(url('home')) |
|
192 | return redirect(h.url('summary_home', repo_name=repo_name)) |
@@ -52,7 +52,7 b' class HomeController(BaseController):' | |||||
52 | c.groups = self.scm_model.get_repos_groups() |
|
52 | c.groups = self.scm_model.get_repos_groups() | |
53 | c.group = None |
|
53 | c.group = None | |
54 |
|
54 | |||
55 |
if c.visual.lightweight_dashboard |
|
55 | if not c.visual.lightweight_dashboard: | |
56 | c.repos_list = self.scm_model.get_repos() |
|
56 | c.repos_list = self.scm_model.get_repos() | |
57 | ## lightweight version of dashboard |
|
57 | ## lightweight version of dashboard | |
58 | else: |
|
58 | else: | |
@@ -81,7 +81,7 b' class HomeController(BaseController):' | |||||
81 | def branch_tag_switcher(self, repo_name): |
|
81 | def branch_tag_switcher(self, repo_name): | |
82 | if request.is_xhr: |
|
82 | if request.is_xhr: | |
83 | c.rhodecode_db_repo = Repository.get_by_repo_name(c.repo_name) |
|
83 | c.rhodecode_db_repo = Repository.get_by_repo_name(c.repo_name) | |
84 |
|
|
84 | if c.rhodecode_db_repo: | |
85 | return render('/switch_to_list.html') |
|
85 | c.rhodecode_repo = c.rhodecode_db_repo.scm_instance | |
86 | else: |
|
86 | return render('/switch_to_list.html') | |
87 |
|
|
87 | raise HTTPBadRequest() |
@@ -207,7 +207,7 b' class JournalController(BaseController):' | |||||
207 | #filter |
|
207 | #filter | |
208 | try: |
|
208 | try: | |
209 | journal = _journal_filter(journal, c.search_term) |
|
209 | journal = _journal_filter(journal, c.search_term) | |
210 | except: |
|
210 | except Exception: | |
211 | # we want this to crash for now |
|
211 | # we want this to crash for now | |
212 | raise |
|
212 | raise | |
213 | journal = journal.filter(filtering_criterion)\ |
|
213 | journal = journal.filter(filtering_criterion)\ | |
@@ -231,7 +231,7 b' class JournalController(BaseController):' | |||||
231 | self.rhodecode_user.user_id) |
|
231 | self.rhodecode_user.user_id) | |
232 | Session.commit() |
|
232 | Session.commit() | |
233 | return 'ok' |
|
233 | return 'ok' | |
234 | except: |
|
234 | except Exception: | |
235 | raise HTTPBadRequest() |
|
235 | raise HTTPBadRequest() | |
236 |
|
236 | |||
237 | repo_id = request.POST.get('follows_repo_id') |
|
237 | repo_id = request.POST.get('follows_repo_id') | |
@@ -241,7 +241,7 b' class JournalController(BaseController):' | |||||
241 | self.rhodecode_user.user_id) |
|
241 | self.rhodecode_user.user_id) | |
242 | Session.commit() |
|
242 | Session.commit() | |
243 | return 'ok' |
|
243 | return 'ok' | |
244 | except: |
|
244 | except Exception: | |
245 | raise HTTPBadRequest() |
|
245 | raise HTTPBadRequest() | |
246 |
|
246 | |||
247 | log.debug('token mismatch %s vs %s' % (cur_token, token)) |
|
247 | log.debug('token mismatch %s vs %s' % (cur_token, token)) |
@@ -76,7 +76,7 b' class LoginController(BaseController):' | |||||
76 | Session().commit() |
|
76 | Session().commit() | |
77 |
|
77 | |||
78 | # If they want to be remembered, update the cookie |
|
78 | # If they want to be remembered, update the cookie | |
79 |
if c.form_result['remember'] |
|
79 | if c.form_result['remember']: | |
80 | _year = (datetime.datetime.now() + |
|
80 | _year = (datetime.datetime.now() + | |
81 | datetime.timedelta(seconds=60 * 60 * 24 * 365)) |
|
81 | datetime.timedelta(seconds=60 * 60 * 24 * 365)) | |
82 | session._set_cookie_expires(_year) |
|
82 | session._set_cookie_expires(_year) |
@@ -38,6 +38,7 b' from rhodecode.lib.compat import json' | |||||
38 | from rhodecode.lib.base import BaseRepoController, render |
|
38 | from rhodecode.lib.base import BaseRepoController, render | |
39 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator,\ |
|
39 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator,\ | |
40 | NotAnonymous |
|
40 | NotAnonymous | |
|
41 | from rhodecode.lib.helpers import Page | |||
41 | from rhodecode.lib import helpers as h |
|
42 | from rhodecode.lib import helpers as h | |
42 | from rhodecode.lib import diffs |
|
43 | from rhodecode.lib import diffs | |
43 | from rhodecode.lib.utils import action_logger, jsonify |
|
44 | from rhodecode.lib.utils import action_logger, jsonify | |
@@ -52,6 +53,8 b' from rhodecode.model.repo import RepoMod' | |||||
52 | from rhodecode.model.comment import ChangesetCommentsModel |
|
53 | from rhodecode.model.comment import ChangesetCommentsModel | |
53 | from rhodecode.model.changeset_status import ChangesetStatusModel |
|
54 | from rhodecode.model.changeset_status import ChangesetStatusModel | |
54 | from rhodecode.model.forms import PullRequestForm |
|
55 | from rhodecode.model.forms import PullRequestForm | |
|
56 | from mercurial import scmutil | |||
|
57 | from rhodecode.lib.utils2 import safe_int | |||
55 |
|
58 | |||
56 | log = logging.getLogger(__name__) |
|
59 | log = logging.getLogger(__name__) | |
57 |
|
60 | |||
@@ -67,34 +70,68 b' class PullrequestsController(BaseRepoCon' | |||||
67 | c.users_array = repo_model.get_users_js() |
|
70 | c.users_array = repo_model.get_users_js() | |
68 | c.users_groups_array = repo_model.get_users_groups_js() |
|
71 | c.users_groups_array = repo_model.get_users_groups_js() | |
69 |
|
72 | |||
70 | def _get_repo_refs(self, repo): |
|
73 | def _get_repo_refs(self, repo, rev=None, branch_rev=None): | |
71 | hist_l = [] |
|
74 | """return a structure with repo's interesting changesets, suitable for | |
|
75 | the selectors in pullrequest.html""" | |||
72 |
|
76 | |||
73 | branches_group = ([('branch:%s:%s' % (k, v), k) for |
|
77 | # list named branches that has been merged to this named branch - it should probably merge back | |
74 | k, v in repo.branches.iteritems()], _("Branches")) |
|
78 | peers = [] | |
75 | bookmarks_group = ([('book:%s:%s' % (k, v), k) for |
|
79 | if branch_rev: | |
76 | k, v in repo.bookmarks.iteritems()], _("Bookmarks")) |
|
80 | # not restricting to merge() would also get branch point and be better | |
77 | tags_group = ([('tag:%s:%s' % (k, v), k) for |
|
81 | # (especially because it would get the branch point) ... but is currently too expensive | |
78 | k, v in repo.tags.iteritems()], _("Tags")) |
|
82 | revs = ["sort(parents(branch(id('%s')) and merge()) - branch(id('%s')))" % | |
79 |
|
83 | (branch_rev, branch_rev)] | ||
80 | hist_l.append(bookmarks_group) |
|
84 | otherbranches = {} | |
81 | hist_l.append(branches_group) |
|
85 | for i in scmutil.revrange(repo._repo, revs): | |
82 | hist_l.append(tags_group) |
|
86 | cs = repo.get_changeset(i) | |
|
87 | otherbranches[cs.branch] = cs.raw_id | |||
|
88 | for branch, node in otherbranches.iteritems(): | |||
|
89 | selected = 'branch:%s:%s' % (branch, node) | |||
|
90 | peers.append((selected, branch)) | |||
83 |
|
91 | |||
84 | return hist_l |
|
92 | selected = None | |
|
93 | branches = [] | |||
|
94 | for branch, branchrev in repo.branches.iteritems(): | |||
|
95 | n = 'branch:%s:%s' % (branch, branchrev) | |||
|
96 | branches.append((n, branch)) | |||
|
97 | if rev == branchrev: | |||
|
98 | selected = n | |||
|
99 | bookmarks = [] | |||
|
100 | for bookmark, bookmarkrev in repo.bookmarks.iteritems(): | |||
|
101 | n = 'book:%s:%s' % (bookmark, bookmarkrev) | |||
|
102 | bookmarks.append((n, bookmark)) | |||
|
103 | if rev == bookmarkrev: | |||
|
104 | selected = n | |||
|
105 | tags = [] | |||
|
106 | for tag, tagrev in repo.tags.iteritems(): | |||
|
107 | n = 'tag:%s:%s' % (tag, tagrev) | |||
|
108 | tags.append((n, tag)) | |||
|
109 | if rev == tagrev and tag != 'tip': # tip is not a real tag - and its branch is better | |||
|
110 | selected = n | |||
85 |
|
111 | |||
86 | def _get_default_rev(self, repo): |
|
112 | # prio 1: rev was selected as existing entry above | |
87 | """ |
|
|||
88 | Get's default revision to do compare on pull request |
|
|||
89 |
|
113 | |||
90 | :param repo: |
|
114 | # prio 2: create special entry for rev; rev _must_ be used | |
91 | """ |
|
115 | specials = [] | |
92 | repo = repo.scm_instance |
|
116 | if rev and selected is None: | |
93 | if 'default' in repo.branches: |
|
117 | selected = 'rev:%s:%s' % (rev, rev) | |
94 | return 'default' |
|
118 | specials = [(selected, '%s: %s' % (_("Changeset"), rev[:12]))] | |
95 | else: |
|
119 | ||
96 | #if repo doesn't have default branch return first found |
|
120 | # prio 3: most recent peer branch | |
97 | return repo.branches.keys()[0] |
|
121 | if peers and not selected: | |
|
122 | selected = peers[0][0][0] | |||
|
123 | ||||
|
124 | # prio 4: tip revision | |||
|
125 | if not selected: | |||
|
126 | selected = 'tag:tip:%s' % repo.tags['tip'] | |||
|
127 | ||||
|
128 | groups = [(specials, _("Special")), | |||
|
129 | (peers, _("Peer branches")), | |||
|
130 | (bookmarks, _("Bookmarks")), | |||
|
131 | (branches, _("Branches")), | |||
|
132 | (tags, _("Tags")), | |||
|
133 | ] | |||
|
134 | return [g for g in groups if g[0]], selected | |||
98 |
|
135 | |||
99 | def _get_is_allowed_change_status(self, pull_request): |
|
136 | def _get_is_allowed_change_status(self, pull_request): | |
100 | owner = self.rhodecode_user.user_id == pull_request.user_id |
|
137 | owner = self.rhodecode_user.user_id == pull_request.user_id | |
@@ -105,6 +142,15 b' class PullrequestsController(BaseRepoCon' | |||||
105 | def show_all(self, repo_name): |
|
142 | def show_all(self, repo_name): | |
106 | c.pull_requests = PullRequestModel().get_all(repo_name) |
|
143 | c.pull_requests = PullRequestModel().get_all(repo_name) | |
107 | c.repo_name = repo_name |
|
144 | c.repo_name = repo_name | |
|
145 | p = safe_int(request.params.get('page', 1), 1) | |||
|
146 | ||||
|
147 | c.pullrequests_pager = Page(c.pull_requests, page=p, items_per_page=10) | |||
|
148 | ||||
|
149 | c.pullrequest_data = render('/pullrequests/pullrequest_data.html') | |||
|
150 | ||||
|
151 | if request.environ.get('HTTP_X_PARTIAL_XHR'): | |||
|
152 | return c.pullrequest_data | |||
|
153 | ||||
108 | return render('/pullrequests/pullrequest_show_all.html') |
|
154 | return render('/pullrequests/pullrequest_show_all.html') | |
109 |
|
155 | |||
110 | @NotAnonymous() |
|
156 | @NotAnonymous() | |
@@ -122,59 +168,51 b' class PullrequestsController(BaseRepoCon' | |||||
122 | category='warning') |
|
168 | category='warning') | |
123 | redirect(url('summary_home', repo_name=org_repo.repo_name)) |
|
169 | redirect(url('summary_home', repo_name=org_repo.repo_name)) | |
124 |
|
170 | |||
|
171 | org_rev = request.GET.get('rev_end') | |||
|
172 | # rev_start is not directly useful - its parent could however be used | |||
|
173 | # as default for other and thus give a simple compare view | |||
|
174 | #other_rev = request.POST.get('rev_start') | |||
|
175 | ||||
|
176 | c.org_repos = [] | |||
|
177 | c.org_repos.append((org_repo.repo_name, org_repo.repo_name)) | |||
|
178 | c.default_org_repo = org_repo.repo_name | |||
|
179 | c.org_refs, c.default_org_ref = self._get_repo_refs(org_repo.scm_instance, org_rev) | |||
|
180 | ||||
|
181 | c.other_repos = [] | |||
125 | other_repos_info = {} |
|
182 | other_repos_info = {} | |
126 |
|
183 | |||
127 | c.org_refs = self._get_repo_refs(c.rhodecode_repo) |
|
184 | def add_other_repo(repo, branch_rev=None): | |
128 | c.org_repos = [] |
|
185 | if repo.repo_name in other_repos_info: # shouldn't happen | |
129 | c.other_repos = [] |
|
186 | return | |
130 |
c.or |
|
187 | c.other_repos.append((repo.repo_name, repo.repo_name)) | |
131 | org_repo.user.username, c.repo_name)) |
|
188 | other_refs, selected_other_ref = self._get_repo_refs(repo.scm_instance, branch_rev=branch_rev) | |
132 | ) |
|
189 | other_repos_info[repo.repo_name] = { | |
133 |
|
190 | 'user': dict(user_id=repo.user.user_id, | ||
134 | # add org repo to other so we can open pull request agains itself |
|
191 | username=repo.user.username, | |
135 | c.other_repos.extend(c.org_repos) |
|
192 | firstname=repo.user.firstname, | |
136 |
|
193 | lastname=repo.user.lastname, | ||
137 | c.default_pull_request = org_repo.repo_name # repo name pre-selected |
|
194 | gravatar_link=h.gravatar_url(repo.user.email, 14)), | |
138 | c.default_pull_request_rev = self._get_default_rev(org_repo) # revision pre-selected |
|
195 | 'description': repo.description.split('\n', 1)[0], | |
139 | c.default_revs = self._get_repo_refs(org_repo.scm_instance) |
|
196 | 'revs': h.select('other_ref', selected_other_ref, other_refs, class_='refs') | |
140 | #add orginal repo |
|
|||
141 | other_repos_info[org_repo.repo_name] = { |
|
|||
142 | 'gravatar': h.gravatar_url(org_repo.user.email, 24), |
|
|||
143 | 'description': org_repo.description, |
|
|||
144 | 'revs': h.select('other_ref', '', c.default_revs, class_='refs') |
|
|||
145 | } |
|
|||
146 |
|
||||
147 | #gather forks and add to this list |
|
|||
148 | for fork in org_repo.forks: |
|
|||
149 | c.other_repos.append((fork.repo_name, '%s/%s' % ( |
|
|||
150 | fork.user.username, fork.repo_name)) |
|
|||
151 | ) |
|
|||
152 | other_repos_info[fork.repo_name] = { |
|
|||
153 | 'gravatar': h.gravatar_url(fork.user.email, 24), |
|
|||
154 | 'description': fork.description, |
|
|||
155 | 'revs': h.select('other_ref', '', |
|
|||
156 | self._get_repo_refs(fork.scm_instance), |
|
|||
157 | class_='refs') |
|
|||
158 | } |
|
|||
159 | #add parents of this fork also, but only if it's not empty |
|
|||
160 | if org_repo.parent and org_repo.parent.scm_instance.revisions: |
|
|||
161 | c.default_pull_request = org_repo.parent.repo_name |
|
|||
162 | c.default_pull_request_rev = self._get_default_rev(org_repo.parent) |
|
|||
163 | c.default_revs = self._get_repo_refs(org_repo.parent.scm_instance) |
|
|||
164 | c.other_repos.append((org_repo.parent.repo_name, '%s/%s' % ( |
|
|||
165 | org_repo.parent.user.username, |
|
|||
166 | org_repo.parent.repo_name)) |
|
|||
167 | ) |
|
|||
168 | other_repos_info[org_repo.parent.repo_name] = { |
|
|||
169 | 'gravatar': h.gravatar_url(org_repo.parent.user.email, 24), |
|
|||
170 | 'description': org_repo.parent.description, |
|
|||
171 | 'revs': h.select('other_ref', '', |
|
|||
172 | self._get_repo_refs(org_repo.parent.scm_instance), |
|
|||
173 | class_='refs') |
|
|||
174 | } |
|
197 | } | |
175 |
|
198 | |||
|
199 | # add org repo to other so we can open pull request against peer branches on itself | |||
|
200 | add_other_repo(org_repo, branch_rev=org_rev) | |||
|
201 | c.default_other_repo = org_repo.repo_name | |||
|
202 | ||||
|
203 | # gather forks and add to this list ... even though it is rare to | |||
|
204 | # request forks to pull from their parent | |||
|
205 | for fork in org_repo.forks: | |||
|
206 | add_other_repo(fork) | |||
|
207 | ||||
|
208 | # add parents of this fork also, but only if it's not empty | |||
|
209 | if org_repo.parent and org_repo.parent.scm_instance.revisions: | |||
|
210 | add_other_repo(org_repo.parent) | |||
|
211 | c.default_other_repo = org_repo.parent.repo_name | |||
|
212 | ||||
|
213 | c.default_other_repo_info = other_repos_info[c.default_other_repo] | |||
176 | c.other_repos_info = json.dumps(other_repos_info) |
|
214 | c.other_repos_info = json.dumps(other_repos_info) | |
177 | c.review_members = [org_repo.user] |
|
215 | ||
178 | return render('/pullrequests/pullrequest.html') |
|
216 | return render('/pullrequests/pullrequest.html') | |
179 |
|
217 | |||
180 | @NotAnonymous() |
|
218 | @NotAnonymous() | |
@@ -189,29 +227,18 b' class PullrequestsController(BaseRepoCon' | |||||
189 | elif errors.error_dict.get('pullrequest_title'): |
|
227 | elif errors.error_dict.get('pullrequest_title'): | |
190 | msg = _('Pull request requires a title with min. 3 chars') |
|
228 | msg = _('Pull request requires a title with min. 3 chars') | |
191 | else: |
|
229 | else: | |
192 |
msg = _(' |
|
230 | msg = _('Error creating pull request') | |
193 |
|
231 | |||
194 | h.flash(msg, 'error') |
|
232 | h.flash(msg, 'error') | |
195 | return redirect(url('pullrequest_home', repo_name=repo_name)) |
|
233 | return redirect(url('pullrequest_home', repo_name=repo_name)) | |
196 |
|
234 | |||
197 | org_repo = _form['org_repo'] |
|
235 | org_repo = _form['org_repo'] | |
198 |
org_ref = _form[' |
|
236 | org_ref = 'rev:merge:%s' % _form['merge_rev'] | |
199 | other_repo = _form['other_repo'] |
|
237 | other_repo = _form['other_repo'] | |
200 |
other_ref = _form[' |
|
238 | other_ref = 'rev:ancestor:%s' % _form['ancestor_rev'] | |
201 | revisions = _form['revisions'] |
|
239 | revisions = _form['revisions'] | |
202 | reviewers = _form['review_members'] |
|
240 | reviewers = _form['review_members'] | |
203 |
|
241 | |||
204 | # if we have cherry picked pull request we don't care what is in |
|
|||
205 | # org_ref/other_ref |
|
|||
206 | rev_start = request.POST.get('rev_start') |
|
|||
207 | rev_end = request.POST.get('rev_end') |
|
|||
208 |
|
||||
209 | if rev_start and rev_end: |
|
|||
210 | # this is swapped to simulate that rev_end is a revision from |
|
|||
211 | # parent of the fork |
|
|||
212 | org_ref = 'rev:%s:%s' % (rev_end, rev_end) |
|
|||
213 | other_ref = 'rev:%s:%s' % (rev_start, rev_start) |
|
|||
214 |
|
||||
215 | title = _form['pullrequest_title'] |
|
242 | title = _form['pullrequest_title'] | |
216 | description = _form['pullrequest_desc'] |
|
243 | description = _form['pullrequest_desc'] | |
217 |
|
244 | |||
@@ -269,9 +296,6 b' class PullrequestsController(BaseRepoCon' | |||||
269 | :param pull_request: |
|
296 | :param pull_request: | |
270 | :type pull_request: |
|
297 | :type pull_request: | |
271 | """ |
|
298 | """ | |
272 | rev_start = request.GET.get('rev_start') |
|
|||
273 | rev_end = request.GET.get('rev_end') |
|
|||
274 |
|
||||
275 | org_repo = pull_request.org_repo |
|
299 | org_repo = pull_request.org_repo | |
276 | (org_ref_type, |
|
300 | (org_ref_type, | |
277 | org_ref_name, |
|
301 | org_ref_name, | |
@@ -283,7 +307,7 b' class PullrequestsController(BaseRepoCon' | |||||
283 | other_ref_rev) = pull_request.other_ref.split(':') |
|
307 | other_ref_rev) = pull_request.other_ref.split(':') | |
284 |
|
308 | |||
285 | # despite opening revisions for bookmarks/branches/tags, we always |
|
309 | # despite opening revisions for bookmarks/branches/tags, we always | |
286 | # convert this to rev to prevent changes after book or branch change |
|
310 | # convert this to rev to prevent changes after bookmark or branch change | |
287 | org_ref = ('rev', org_ref_rev) |
|
311 | org_ref = ('rev', org_ref_rev) | |
288 | other_ref = ('rev', other_ref_rev) |
|
312 | other_ref = ('rev', other_ref_rev) | |
289 |
|
313 | |||
@@ -294,17 +318,12 b' class PullrequestsController(BaseRepoCon' | |||||
294 |
|
318 | |||
295 | c.cs_ranges = [org_repo.get_changeset(x) for x in pull_request.revisions] |
|
319 | c.cs_ranges = [org_repo.get_changeset(x) for x in pull_request.revisions] | |
296 |
|
320 | |||
297 | other_ref = ('rev', getattr(c.cs_ranges[0].parents[0] |
|
|||
298 | if c.cs_ranges[0].parents |
|
|||
299 | else EmptyChangeset(), 'raw_id')) |
|
|||
300 |
|
||||
301 | c.statuses = org_repo.statuses([x.raw_id for x in c.cs_ranges]) |
|
321 | c.statuses = org_repo.statuses([x.raw_id for x in c.cs_ranges]) | |
302 | c.target_repo = other_repo.repo_name |
|
|||
303 | # defines that we need hidden inputs with changesets |
|
|||
304 | c.as_form = request.GET.get('as_form', False) |
|
|||
305 |
|
322 | |||
306 | c.org_ref = org_ref[1] |
|
323 | c.org_ref = org_ref[1] | |
|
324 | c.org_ref_type = org_ref[0] | |||
307 | c.other_ref = other_ref[1] |
|
325 | c.other_ref = other_ref[1] | |
|
326 | c.other_ref_type = other_ref[0] | |||
308 |
|
327 | |||
309 | diff_limit = self.cut_off_limit if not fulldiff else None |
|
328 | diff_limit = self.cut_off_limit if not fulldiff else None | |
310 |
|
329 | |||
@@ -386,7 +405,7 b' class PullrequestsController(BaseRepoCon' | |||||
386 |
|
405 | |||
387 | try: |
|
406 | try: | |
388 | cur_status = c.statuses[c.pull_request.revisions[0]][0] |
|
407 | cur_status = c.statuses[c.pull_request.revisions[0]][0] | |
389 | except: |
|
408 | except Exception: | |
390 | log.error(traceback.format_exc()) |
|
409 | log.error(traceback.format_exc()) | |
391 | cur_status = 'undefined' |
|
410 | cur_status = 'undefined' | |
392 | if c.pull_request.is_closed() and 0: |
|
411 | if c.pull_request.is_closed() and 0: | |
@@ -398,6 +417,8 b' class PullrequestsController(BaseRepoCon' | |||||
398 | ) |
|
417 | ) | |
399 | c.changeset_statuses = ChangesetStatus.STATUSES |
|
418 | c.changeset_statuses = ChangesetStatus.STATUSES | |
400 |
|
419 | |||
|
420 | c.as_form = False | |||
|
421 | c.ancestor = None # there is one - but right here we don't know which | |||
401 | return render('/pullrequests/pullrequest_show.html') |
|
422 | return render('/pullrequests/pullrequest_show.html') | |
402 |
|
423 | |||
403 | @NotAnonymous() |
|
424 | @NotAnonymous() | |
@@ -410,11 +431,15 b' class PullrequestsController(BaseRepoCon' | |||||
410 | status = request.POST.get('changeset_status') |
|
431 | status = request.POST.get('changeset_status') | |
411 | change_status = request.POST.get('change_changeset_status') |
|
432 | change_status = request.POST.get('change_changeset_status') | |
412 | text = request.POST.get('text') |
|
433 | text = request.POST.get('text') | |
|
434 | close_pr = request.POST.get('save_close') | |||
413 |
|
435 | |||
414 | allowed_to_change_status = self._get_is_allowed_change_status(pull_request) |
|
436 | allowed_to_change_status = self._get_is_allowed_change_status(pull_request) | |
415 | if status and change_status and allowed_to_change_status: |
|
437 | if status and change_status and allowed_to_change_status: | |
416 |
|
|
438 | _def = (_('Status change -> %s') | |
417 | % ChangesetStatus.get_status_lbl(status)) |
|
439 | % ChangesetStatus.get_status_lbl(status)) | |
|
440 | if close_pr: | |||
|
441 | _def = _('Closing with') + ' ' + _def | |||
|
442 | text = text or _def | |||
418 | comm = ChangesetCommentsModel().create( |
|
443 | comm = ChangesetCommentsModel().create( | |
419 | text=text, |
|
444 | text=text, | |
420 | repo=c.rhodecode_db_repo.repo_id, |
|
445 | repo=c.rhodecode_db_repo.repo_id, | |
@@ -423,7 +448,9 b' class PullrequestsController(BaseRepoCon' | |||||
423 | f_path=request.POST.get('f_path'), |
|
448 | f_path=request.POST.get('f_path'), | |
424 | line_no=request.POST.get('line'), |
|
449 | line_no=request.POST.get('line'), | |
425 | status_change=(ChangesetStatus.get_status_lbl(status) |
|
450 | status_change=(ChangesetStatus.get_status_lbl(status) | |
426 | if status and change_status and allowed_to_change_status else None) |
|
451 | if status and change_status | |
|
452 | and allowed_to_change_status else None), | |||
|
453 | closing_pr=close_pr | |||
427 | ) |
|
454 | ) | |
428 |
|
455 | |||
429 | action_logger(self.rhodecode_user, |
|
456 | action_logger(self.rhodecode_user, | |
@@ -441,7 +468,7 b' class PullrequestsController(BaseRepoCon' | |||||
441 | pull_request=pull_request_id |
|
468 | pull_request=pull_request_id | |
442 | ) |
|
469 | ) | |
443 |
|
470 | |||
444 |
if |
|
471 | if close_pr: | |
445 | if status in ['rejected', 'approved']: |
|
472 | if status in ['rejected', 'approved']: | |
446 | PullRequestModel().close_pull_request(pull_request_id) |
|
473 | PullRequestModel().close_pull_request(pull_request_id) | |
447 | action_logger(self.rhodecode_user, |
|
474 | action_logger(self.rhodecode_user, |
@@ -29,7 +29,7 b' from pylons.i18n.translation import _' | |||||
29 | from pylons import request, config, tmpl_context as c |
|
29 | from pylons import request, config, tmpl_context as c | |
30 |
|
30 | |||
31 | from rhodecode.lib.auth import LoginRequired |
|
31 | from rhodecode.lib.auth import LoginRequired | |
32 | from rhodecode.lib.base import BaseController, render |
|
32 | from rhodecode.lib.base import BaseRepoController, render | |
33 | from rhodecode.lib.indexers import CHGSETS_SCHEMA, SCHEMA, CHGSET_IDX_NAME, \ |
|
33 | from rhodecode.lib.indexers import CHGSETS_SCHEMA, SCHEMA, CHGSET_IDX_NAME, \ | |
34 | IDX_NAME, WhooshResultWrapper |
|
34 | IDX_NAME, WhooshResultWrapper | |
35 |
|
35 | |||
@@ -46,14 +46,14 b' from rhodecode.lib.utils2 import safe_st' | |||||
46 | log = logging.getLogger(__name__) |
|
46 | log = logging.getLogger(__name__) | |
47 |
|
47 | |||
48 |
|
48 | |||
49 | class SearchController(BaseController): |
|
49 | class SearchController(BaseRepoController): | |
50 |
|
50 | |||
51 | @LoginRequired() |
|
51 | @LoginRequired() | |
52 | def __before__(self): |
|
52 | def __before__(self): | |
53 | super(SearchController, self).__before__() |
|
53 | super(SearchController, self).__before__() | |
54 |
|
54 | |||
55 |
def index(self, |
|
55 | def index(self, repo_name=None): | |
56 |
c.repo_name = |
|
56 | c.repo_name = repo_name | |
57 | c.formated_results = [] |
|
57 | c.formated_results = [] | |
58 | c.runtime = '' |
|
58 | c.runtime = '' | |
59 | c.cur_query = request.GET.get('q', None) |
|
59 | c.cur_query = request.GET.get('q', None) |
@@ -30,20 +30,23 b' import urllib' | |||||
30 | from time import mktime |
|
30 | from time import mktime | |
31 | from datetime import timedelta, date |
|
31 | from datetime import timedelta, date | |
32 | from urlparse import urlparse |
|
32 | from urlparse import urlparse | |
33 | from rhodecode.lib.compat import product |
|
|||
34 |
|
||||
35 | from rhodecode.lib.vcs.exceptions import ChangesetError, EmptyRepositoryError, \ |
|
|||
36 | NodeDoesNotExistError |
|
|||
37 |
|
33 | |||
38 | from pylons import tmpl_context as c, request, url, config |
|
34 | from pylons import tmpl_context as c, request, url, config | |
39 | from pylons.i18n.translation import _ |
|
35 | from pylons.i18n.translation import _ | |
|
36 | from webob.exc import HTTPBadRequest | |||
40 |
|
37 | |||
41 | from beaker.cache import cache_region, region_invalidate |
|
38 | from beaker.cache import cache_region, region_invalidate | |
42 |
|
39 | |||
|
40 | from rhodecode.lib import helpers as h | |||
|
41 | from rhodecode.lib.compat import product | |||
|
42 | from rhodecode.lib.vcs.exceptions import ChangesetError, EmptyRepositoryError, \ | |||
|
43 | NodeDoesNotExistError | |||
43 | from rhodecode.config.conf import ALL_READMES, ALL_EXTS, LANGUAGES_EXTENSIONS_MAP |
|
44 | from rhodecode.config.conf import ALL_READMES, ALL_EXTS, LANGUAGES_EXTENSIONS_MAP | |
44 | from rhodecode.model.db import Statistics, CacheInvalidation |
|
45 | from rhodecode.model.db import Statistics, CacheInvalidation | |
45 |
from rhodecode.lib.utils |
|
46 | from rhodecode.lib.utils import jsonify | |
46 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator |
|
47 | from rhodecode.lib.utils2 import safe_unicode, safe_str | |
|
48 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator,\ | |||
|
49 | NotAnonymous | |||
47 | from rhodecode.lib.base import BaseRepoController, render |
|
50 | from rhodecode.lib.base import BaseRepoController, render | |
48 | from rhodecode.lib.vcs.backends.base import EmptyChangeset |
|
51 | from rhodecode.lib.vcs.backends.base import EmptyChangeset | |
49 | from rhodecode.lib.markup_renderer import MarkupRenderer |
|
52 | from rhodecode.lib.markup_renderer import MarkupRenderer | |
@@ -70,8 +73,6 b' class SummaryController(BaseRepoControll' | |||||
70 |
|
73 | |||
71 | def index(self, repo_name): |
|
74 | def index(self, repo_name): | |
72 | c.dbrepo = dbrepo = c.rhodecode_db_repo |
|
75 | c.dbrepo = dbrepo = c.rhodecode_db_repo | |
73 | c.following = self.scm_model.is_following_repo(repo_name, |
|
|||
74 | self.rhodecode_user.user_id) |
|
|||
75 |
|
76 | |||
76 | def url_generator(**kw): |
|
77 | def url_generator(**kw): | |
77 | return url('shortlog_home', repo_name=repo_name, size=10, **kw) |
|
78 | return url('shortlog_home', repo_name=repo_name, size=10, **kw) | |
@@ -101,10 +102,10 b' class SummaryController(BaseRepoControll' | |||||
101 | 'pass': password, |
|
102 | 'pass': password, | |
102 | 'scheme': parsed_url.scheme, |
|
103 | 'scheme': parsed_url.scheme, | |
103 | 'netloc': parsed_url.netloc, |
|
104 | 'netloc': parsed_url.netloc, | |
104 | 'path': decoded_path |
|
105 | 'path': urllib.quote(safe_str(decoded_path)) | |
105 | } |
|
106 | } | |
106 |
|
107 | |||
107 | uri = uri_tmpl % uri_dict |
|
108 | uri = (uri_tmpl % uri_dict) | |
108 | # generate another clone url by id |
|
109 | # generate another clone url by id | |
109 | uri_dict.update( |
|
110 | uri_dict.update( | |
110 | {'path': decoded_path.replace(repo_name, '_%s' % c.dbrepo.repo_id)} |
|
111 | {'path': decoded_path.replace(repo_name, '_%s' % c.dbrepo.repo_id)} | |
@@ -138,7 +139,9 b' class SummaryController(BaseRepoControll' | |||||
138 | if dbrepo.enable_statistics: |
|
139 | if dbrepo.enable_statistics: | |
139 | c.show_stats = True |
|
140 | c.show_stats = True | |
140 | c.no_data_msg = _('No data loaded yet') |
|
141 | c.no_data_msg = _('No data loaded yet') | |
141 | run_task(get_commits_stats, c.dbrepo.repo_name, ts_min_y, ts_max_y) |
|
142 | recurse_limit = 500 # don't recurse more than 500 times when parsing | |
|
143 | run_task(get_commits_stats, c.dbrepo.repo_name, ts_min_y, | |||
|
144 | ts_max_y, recurse_limit) | |||
142 | else: |
|
145 | else: | |
143 | c.show_stats = False |
|
146 | c.show_stats = False | |
144 | c.no_data_msg = _('Statistics are disabled for this repository') |
|
147 | c.no_data_msg = _('Statistics are disabled for this repository') | |
@@ -186,6 +189,14 b' class SummaryController(BaseRepoControll' | |||||
186 | self.__get_readme_data(c.rhodecode_db_repo) |
|
189 | self.__get_readme_data(c.rhodecode_db_repo) | |
187 | return render('summary/summary.html') |
|
190 | return render('summary/summary.html') | |
188 |
|
191 | |||
|
192 | @NotAnonymous() | |||
|
193 | @jsonify | |||
|
194 | def repo_size(self, repo_name): | |||
|
195 | if request.is_xhr: | |||
|
196 | return c.rhodecode_db_repo._repo_size() | |||
|
197 | else: | |||
|
198 | raise HTTPBadRequest() | |||
|
199 | ||||
189 | def __get_readme_data(self, db_repo): |
|
200 | def __get_readme_data(self, db_repo): | |
190 | repo_name = db_repo.repo_name |
|
201 | repo_name = db_repo.repo_name | |
191 |
|
202 |
1 | NO CONTENT: modified file, binary diff hidden |
|
NO CONTENT: modified file, binary diff hidden |
This diff has been collapsed as it changes many lines, (4015 lines changed) Show them Hide them | |||||
@@ -7,7 +7,7 b' msgid ""' | |||||
7 | msgstr "" |
|
7 | msgstr "" | |
8 | "Project-Id-Version: rhodecode 0.1\n" |
|
8 | "Project-Id-Version: rhodecode 0.1\n" | |
9 | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" |
|
9 | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | |
10 |
"POT-Creation-Date: 201 |
|
10 | "POT-Creation-Date: 2013-04-05 10:19-0700\n" | |
11 | "PO-Revision-Date: 2011-02-25 19:13+0100\n" |
|
11 | "PO-Revision-Date: 2011-02-25 19:13+0100\n" | |
12 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
|
12 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
13 | "Language-Team: en <LL@li.org>\n" |
|
13 | "Language-Team: en <LL@li.org>\n" | |
@@ -22,11 +22,11 b' msgid "All Branches"' | |||||
22 | msgstr "" |
|
22 | msgstr "" | |
23 |
|
23 | |||
24 | #: rhodecode/controllers/changeset.py:83 |
|
24 | #: rhodecode/controllers/changeset.py:83 | |
25 |
msgid " |
|
25 | msgid "Show white space" | |
26 | msgstr "" |
|
26 | msgstr "" | |
27 |
|
27 | |||
28 | #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97 |
|
28 | #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97 | |
29 |
msgid " |
|
29 | msgid "Ignore white space" | |
30 | msgstr "" |
|
30 | msgstr "" | |
31 |
|
31 | |||
32 | #: rhodecode/controllers/changeset.py:163 |
|
32 | #: rhodecode/controllers/changeset.py:163 | |
@@ -34,20 +34,20 b' msgstr ""' | |||||
34 | msgid "%s line context" |
|
34 | msgid "%s line context" | |
35 | msgstr "" |
|
35 | msgstr "" | |
36 |
|
36 | |||
37 |
#: rhodecode/controllers/changeset.py:3 |
|
37 | #: rhodecode/controllers/changeset.py:329 | |
38 |
#: rhodecode/controllers/pullrequests.py:4 |
|
38 | #: rhodecode/controllers/pullrequests.py:438 | |
39 | #, python-format |
|
39 | #, python-format | |
40 | msgid "Status change -> %s" |
|
40 | msgid "Status change -> %s" | |
41 | msgstr "" |
|
41 | msgstr "" | |
42 |
|
42 | |||
43 |
#: rhodecode/controllers/changeset.py:3 |
|
43 | #: rhodecode/controllers/changeset.py:360 | |
44 | msgid "" |
|
44 | msgid "" | |
45 | "Changing status on a changeset associated witha closed pull request is " |
|
45 | "Changing status on a changeset associated with a closed pull request is " | |
46 | "not allowed" |
|
46 | "not allowed" | |
47 | msgstr "" |
|
47 | msgstr "" | |
48 |
|
48 | |||
49 |
#: rhodecode/controllers/compare.py:7 |
|
49 | #: rhodecode/controllers/compare.py:74 | |
50 |
#: rhodecode/controllers/pullrequests.py:1 |
|
50 | #: rhodecode/controllers/pullrequests.py:167 | |
51 | #: rhodecode/controllers/shortlog.py:100 |
|
51 | #: rhodecode/controllers/shortlog.py:100 | |
52 | msgid "There are no changesets yet" |
|
52 | msgid "There are no changesets yet" | |
53 | msgstr "" |
|
53 | msgstr "" | |
@@ -89,156 +89,187 b' msgid "%s %s feed"' | |||||
89 | msgstr "" |
|
89 | msgstr "" | |
90 |
|
90 | |||
91 | #: rhodecode/controllers/feed.py:86 |
|
91 | #: rhodecode/controllers/feed.py:86 | |
92 |
#: rhodecode/templates/changeset/changeset.html:13 |
|
92 | #: rhodecode/templates/changeset/changeset.html:134 | |
93 |
#: rhodecode/templates/changeset/changeset.html:14 |
|
93 | #: rhodecode/templates/changeset/changeset.html:146 | |
94 |
#: rhodecode/templates/compare/compare_diff.html: |
|
94 | #: rhodecode/templates/compare/compare_diff.html:58 | |
95 |
#: rhodecode/templates/compare/compare_diff.html: |
|
95 | #: rhodecode/templates/compare/compare_diff.html:69 | |
96 |
#: rhodecode/templates/pullrequests/pullrequest_show.html: |
|
96 | #: rhodecode/templates/pullrequests/pullrequest_show.html:131 | |
97 |
#: rhodecode/templates/pullrequests/pullrequest_show.html:15 |
|
97 | #: rhodecode/templates/pullrequests/pullrequest_show.html:195 | |
98 | msgid "Changeset was too big and was cut off..." |
|
98 | msgid "Changeset was too big and was cut off..." | |
99 | msgstr "" |
|
99 | msgstr "" | |
100 |
|
100 | |||
101 |
#: rhodecode/controllers/feed.py:9 |
|
101 | #: rhodecode/controllers/feed.py:91 | |
102 | msgid "commited on" |
|
102 | #, python-format | |
103 | msgstr "" |
|
103 | msgid "%s committed on %s" | |
104 |
|
104 | msgstr "" | ||
105 | #: rhodecode/controllers/files.py:86 |
|
105 | ||
106 | msgid "click here to add new file" |
|
106 | #: rhodecode/controllers/files.py:88 | |
107 | msgstr "" |
|
107 | msgid "Click here to add new file" | |
108 |
|
108 | msgstr "" | ||
109 | #: rhodecode/controllers/files.py:87 |
|
109 | ||
|
110 | #: rhodecode/controllers/files.py:89 | |||
110 | #, python-format |
|
111 | #, python-format | |
111 | msgid "There are no files yet %s" |
|
112 | msgid "There are no files yet %s" | |
112 | msgstr "" |
|
113 | msgstr "" | |
113 |
|
114 | |||
114 |
#: rhodecode/controllers/files.py:26 |
|
115 | #: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335 | |
115 | #, python-format |
|
116 | #, python-format | |
116 | msgid "This repository is has been locked by %s on %s" |
|
117 | msgid "This repository is has been locked by %s on %s" | |
117 | msgstr "" |
|
118 | msgstr "" | |
118 |
|
119 | |||
119 |
#: rhodecode/controllers/files.py:29 |
|
120 | #: rhodecode/controllers/files.py:279 | |
|
121 | msgid "You can only edit files with revision being a valid branch " | |||
|
122 | msgstr "" | |||
|
123 | ||||
|
124 | #: rhodecode/controllers/files.py:293 | |||
120 | #, python-format |
|
125 | #, python-format | |
121 | msgid "Edited %s via RhodeCode" |
|
126 | msgid "Edited file %s via RhodeCode" | |
122 | msgstr "" |
|
127 | msgstr "" | |
123 |
|
128 | |||
124 |
#: rhodecode/controllers/files.py: |
|
129 | #: rhodecode/controllers/files.py:309 | |
125 | msgid "No changes" |
|
130 | msgid "No changes" | |
126 | msgstr "" |
|
131 | msgstr "" | |
127 |
|
132 | |||
128 |
#: rhodecode/controllers/files.py:3 |
|
133 | #: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388 | |
129 | #, python-format |
|
134 | #, python-format | |
130 | msgid "Successfully committed to %s" |
|
135 | msgid "Successfully committed to %s" | |
131 | msgstr "" |
|
136 | msgstr "" | |
132 |
|
137 | |||
133 |
#: rhodecode/controllers/files.py:3 |
|
138 | #: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394 | |
134 | msgid "Error occurred during commit" |
|
139 | msgid "Error occurred during commit" | |
135 | msgstr "" |
|
140 | msgstr "" | |
136 |
|
141 | |||
137 |
#: rhodecode/controllers/files.py:34 |
|
142 | #: rhodecode/controllers/files.py:347 | |
138 | #, python-format |
|
143 | msgid "Added file via RhodeCode" | |
139 | msgid "Added %s via RhodeCode" |
|
144 | msgstr "" | |
140 | msgstr "" |
|
145 | ||
141 |
|
146 | #: rhodecode/controllers/files.py:364 | ||
142 | #: rhodecode/controllers/files.py:358 |
|
|||
143 | msgid "No content" |
|
147 | msgid "No content" | |
144 | msgstr "" |
|
148 | msgstr "" | |
145 |
|
149 | |||
146 |
#: rhodecode/controllers/files.py:36 |
|
150 | #: rhodecode/controllers/files.py:368 | |
147 | msgid "No filename" |
|
151 | msgid "No filename" | |
148 | msgstr "" |
|
152 | msgstr "" | |
149 |
|
153 | |||
150 |
#: rhodecode/controllers/files.py: |
|
154 | #: rhodecode/controllers/files.py:372 | |
151 | msgid "downloads disabled" |
|
155 | msgid "Location must be relative path and must not contain .. in path" | |
152 | msgstr "" |
|
156 | msgstr "" | |
153 |
|
157 | |||
154 |
#: rhodecode/controllers/files.py:4 |
|
158 | #: rhodecode/controllers/files.py:420 | |
|
159 | msgid "Downloads disabled" | |||
|
160 | msgstr "" | |||
|
161 | ||||
|
162 | #: rhodecode/controllers/files.py:431 | |||
155 | #, python-format |
|
163 | #, python-format | |
156 | msgid "Unknown revision %s" |
|
164 | msgid "Unknown revision %s" | |
157 | msgstr "" |
|
165 | msgstr "" | |
158 |
|
166 | |||
159 |
#: rhodecode/controllers/files.py:4 |
|
167 | #: rhodecode/controllers/files.py:433 | |
160 | msgid "Empty repository" |
|
168 | msgid "Empty repository" | |
161 | msgstr "" |
|
169 | msgstr "" | |
162 |
|
170 | |||
163 |
#: rhodecode/controllers/files.py:4 |
|
171 | #: rhodecode/controllers/files.py:435 | |
164 | msgid "Unknown archive type" |
|
172 | msgid "Unknown archive type" | |
165 | msgstr "" |
|
173 | msgstr "" | |
166 |
|
174 | |||
167 |
#: rhodecode/controllers/files.py: |
|
175 | #: rhodecode/controllers/files.py:617 | |
168 |
#: rhodecode/templates/changeset/changeset_range.html: |
|
176 | #: rhodecode/templates/changeset/changeset_range.html:9 | |
169 | #: rhodecode/templates/changeset/changeset_range.html:31 |
|
|||
170 | msgid "Changesets" |
|
177 | msgid "Changesets" | |
171 | msgstr "" |
|
178 | msgstr "" | |
172 |
|
179 | |||
173 |
#: rhodecode/controllers/files.py: |
|
180 | #: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131 | |
174 |
#: rhodecode/controllers/summary.py:2 |
|
181 | #: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606 | |
|
182 | #: rhodecode/templates/switch_to_list.html:3 | |||
|
183 | #: rhodecode/templates/branches/branches.html:10 | |||
175 | msgid "Branches" |
|
184 | msgid "Branches" | |
176 | msgstr "" |
|
185 | msgstr "" | |
177 |
|
186 | |||
178 |
#: rhodecode/controllers/files.py: |
|
187 | #: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132 | |
179 |
#: rhodecode/controllers/summary.py:2 |
|
188 | #: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617 | |
|
189 | #: rhodecode/templates/switch_to_list.html:15 | |||
|
190 | #: rhodecode/templates/shortlog/shortlog_data.html:10 | |||
|
191 | #: rhodecode/templates/tags/tags.html:10 | |||
180 | msgid "Tags" |
|
192 | msgid "Tags" | |
181 | msgstr "" |
|
193 | msgstr "" | |
182 |
|
194 | |||
183 |
#: rhodecode/controllers/forks.py:15 |
|
195 | #: rhodecode/controllers/forks.py:175 | |
184 | #, python-format |
|
196 | #, python-format | |
185 |
msgid " |
|
197 | msgid "Forked repository %s as %s" | |
186 | msgstr "" |
|
198 | msgstr "" | |
187 |
|
199 | |||
188 |
#: rhodecode/controllers/forks.py:1 |
|
200 | #: rhodecode/controllers/forks.py:189 | |
189 | #, python-format |
|
201 | #, python-format | |
190 | msgid "An error occurred during repository forking %s" |
|
202 | msgid "An error occurred during repository forking %s" | |
191 | msgstr "" |
|
203 | msgstr "" | |
192 |
|
204 | |||
193 |
#: rhodecode/controllers/journal.py:2 |
|
205 | #: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318 | |
194 | msgid "public journal" |
|
206 | msgid "public journal" | |
195 | msgstr "" |
|
207 | msgstr "" | |
196 |
|
208 | |||
197 |
#: rhodecode/controllers/journal.py:2 |
|
209 | #: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322 | |
198 | #: rhodecode/templates/base/base.html:232 |
|
|||
199 | #: rhodecode/templates/journal/journal.html:12 |
|
210 | #: rhodecode/templates/journal/journal.html:12 | |
200 | msgid "journal" |
|
211 | msgid "journal" | |
201 | msgstr "" |
|
212 | msgstr "" | |
202 |
|
213 | |||
203 |
#: rhodecode/controllers/login.py:1 |
|
214 | #: rhodecode/controllers/login.py:138 | |
204 |
msgid "You have successfully registered into |
|
215 | msgid "You have successfully registered into RhodeCode" | |
205 | msgstr "" |
|
216 | msgstr "" | |
206 |
|
217 | |||
207 |
#: rhodecode/controllers/login.py:1 |
|
218 | #: rhodecode/controllers/login.py:159 | |
208 | msgid "Your password reset link was sent" |
|
219 | msgid "Your password reset link was sent" | |
209 | msgstr "" |
|
220 | msgstr "" | |
210 |
|
221 | |||
211 |
#: rhodecode/controllers/login.py:1 |
|
222 | #: rhodecode/controllers/login.py:179 | |
212 | msgid "" |
|
223 | msgid "" | |
213 | "Your password reset was successful, new password has been sent to your " |
|
224 | "Your password reset was successful, new password has been sent to your " | |
214 | "email" |
|
225 | "email" | |
215 | msgstr "" |
|
226 | msgstr "" | |
216 |
|
227 | |||
217 |
#: rhodecode/controllers/pullrequests.py: |
|
228 | #: rhodecode/controllers/pullrequests.py:118 | |
|
229 | #: rhodecode/templates/changeset/changeset.html:10 | |||
|
230 | #: rhodecode/templates/email_templates/changeset_comment.html:15 | |||
|
231 | msgid "Changeset" | |||
|
232 | msgstr "" | |||
|
233 | ||||
|
234 | #: rhodecode/controllers/pullrequests.py:128 | |||
|
235 | msgid "Special" | |||
|
236 | msgstr "" | |||
|
237 | ||||
|
238 | #: rhodecode/controllers/pullrequests.py:129 | |||
|
239 | msgid "Peer branches" | |||
|
240 | msgstr "" | |||
|
241 | ||||
|
242 | #: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612 | |||
|
243 | #: rhodecode/templates/switch_to_list.html:28 | |||
|
244 | #: rhodecode/templates/bookmarks/bookmarks.html:10 | |||
218 | msgid "Bookmarks" |
|
245 | msgid "Bookmarks" | |
219 | msgstr "" |
|
246 | msgstr "" | |
220 |
|
247 | |||
221 |
#: rhodecode/controllers/pullrequests.py: |
|
248 | #: rhodecode/controllers/pullrequests.py:228 | |
222 | msgid "Pull request requires a title with min. 3 chars" |
|
249 | msgid "Pull request requires a title with min. 3 chars" | |
223 | msgstr "" |
|
250 | msgstr "" | |
224 |
|
251 | |||
225 |
#: rhodecode/controllers/pullrequests.py: |
|
252 | #: rhodecode/controllers/pullrequests.py:230 | |
226 |
msgid " |
|
253 | msgid "Error creating pull request" | |
227 | msgstr "" |
|
254 | msgstr "" | |
228 |
|
255 | |||
229 |
#: rhodecode/controllers/pullrequests.py:2 |
|
256 | #: rhodecode/controllers/pullrequests.py:251 | |
230 | msgid "Successfully opened new pull request" |
|
257 | msgid "Successfully opened new pull request" | |
231 | msgstr "" |
|
258 | msgstr "" | |
232 |
|
259 | |||
233 |
#: rhodecode/controllers/pullrequests.py:2 |
|
260 | #: rhodecode/controllers/pullrequests.py:254 | |
234 | msgid "Error occurred during sending pull request" |
|
261 | msgid "Error occurred during sending pull request" | |
235 | msgstr "" |
|
262 | msgstr "" | |
236 |
|
263 | |||
237 |
#: rhodecode/controllers/pullrequests.py:2 |
|
264 | #: rhodecode/controllers/pullrequests.py:287 | |
238 | msgid "Successfully deleted pull request" |
|
265 | msgid "Successfully deleted pull request" | |
239 | msgstr "" |
|
266 | msgstr "" | |
240 |
|
267 | |||
241 |
#: rhodecode/controllers/pullrequests.py:4 |
|
268 | #: rhodecode/controllers/pullrequests.py:441 | |
|
269 | msgid "Closing with" | |||
|
270 | msgstr "" | |||
|
271 | ||||
|
272 | #: rhodecode/controllers/pullrequests.py:478 | |||
242 | msgid "Closing pull request on other statuses than rejected or approved forbidden" |
|
273 | msgid "Closing pull request on other statuses than rejected or approved forbidden" | |
243 | msgstr "" |
|
274 | msgstr "" | |
244 |
|
275 | |||
@@ -254,55 +285,12 b' msgstr ""' | |||||
254 | msgid "An error occurred during this search operation" |
|
285 | msgid "An error occurred during this search operation" | |
255 | msgstr "" |
|
286 | msgstr "" | |
256 |
|
287 | |||
257 |
#: rhodecode/controllers/s |
|
288 | #: rhodecode/controllers/summary.py:141 | |
258 | #: rhodecode/controllers/admin/repos.py:272 |
|
|||
259 | #, python-format |
|
|||
260 | msgid "Repository %s updated successfully" |
|
|||
261 | msgstr "" |
|
|||
262 |
|
||||
263 | #: rhodecode/controllers/settings.py:137 |
|
|||
264 | #: rhodecode/controllers/admin/repos.py:290 |
|
|||
265 | #, python-format |
|
|||
266 | msgid "error occurred during update of repository %s" |
|
|||
267 | msgstr "" |
|
|||
268 |
|
||||
269 | #: rhodecode/controllers/settings.py:162 |
|
|||
270 | #: rhodecode/controllers/admin/repos.py:315 |
|
|||
271 | #, python-format |
|
|||
272 | msgid "deleted repository %s" |
|
|||
273 | msgstr "" |
|
|||
274 |
|
||||
275 | #: rhodecode/controllers/settings.py:166 |
|
|||
276 | #: rhodecode/controllers/admin/repos.py:325 |
|
|||
277 | #: rhodecode/controllers/admin/repos.py:331 |
|
|||
278 | #, python-format |
|
|||
279 | msgid "An error occurred during deletion of %s" |
|
|||
280 | msgstr "" |
|
|||
281 |
|
||||
282 | #: rhodecode/controllers/settings.py:185 |
|
|||
283 | msgid "unlocked" |
|
|||
284 | msgstr "" |
|
|||
285 |
|
||||
286 | #: rhodecode/controllers/settings.py:188 |
|
|||
287 | msgid "locked" |
|
|||
288 | msgstr "" |
|
|||
289 |
|
||||
290 | #: rhodecode/controllers/settings.py:190 |
|
|||
291 | #, python-format |
|
|||
292 | msgid "Repository has been %s" |
|
|||
293 | msgstr "" |
|
|||
294 |
|
||||
295 | #: rhodecode/controllers/settings.py:194 |
|
|||
296 | #: rhodecode/controllers/admin/repos.py:423 |
|
|||
297 | msgid "An error occurred during unlocking" |
|
|||
298 | msgstr "" |
|
|||
299 |
|
||||
300 | #: rhodecode/controllers/summary.py:140 |
|
|||
301 | msgid "No data loaded yet" |
|
289 | msgid "No data loaded yet" | |
302 | msgstr "" |
|
290 | msgstr "" | |
303 |
|
291 | |||
304 |
#: rhodecode/controllers/summary.py:14 |
|
292 | #: rhodecode/controllers/summary.py:147 | |
305 |
#: rhodecode/templates/summary/summary.html:1 |
|
293 | #: rhodecode/templates/summary/summary.html:149 | |
306 | msgid "Statistics are disabled for this repository" |
|
294 | msgid "Statistics are disabled for this repository" | |
307 | msgstr "" |
|
295 | msgstr "" | |
308 |
|
296 | |||
@@ -311,7 +299,7 b' msgid "Default settings updated successf' | |||||
311 | msgstr "" |
|
299 | msgstr "" | |
312 |
|
300 | |||
313 | #: rhodecode/controllers/admin/defaults.py:110 |
|
301 | #: rhodecode/controllers/admin/defaults.py:110 | |
314 |
msgid " |
|
302 | msgid "Error occurred during update of defaults" | |
315 | msgstr "" |
|
303 | msgstr "" | |
316 |
|
304 | |||
317 | #: rhodecode/controllers/admin/ldap_settings.py:50 |
|
305 | #: rhodecode/controllers/admin/ldap_settings.py:50 | |
@@ -359,7 +347,7 b' msgid "START_TLS on LDAP connection"' | |||||
359 | msgstr "" |
|
347 | msgstr "" | |
360 |
|
348 | |||
361 | #: rhodecode/controllers/admin/ldap_settings.py:126 |
|
349 | #: rhodecode/controllers/admin/ldap_settings.py:126 | |
362 |
msgid "L |
|
350 | msgid "LDAP settings updated successfully" | |
363 | msgstr "" |
|
351 | msgstr "" | |
364 |
|
352 | |||
365 | #: rhodecode/controllers/admin/ldap_settings.py:130 |
|
353 | #: rhodecode/controllers/admin/ldap_settings.py:130 | |
@@ -367,533 +355,616 b' msgid "Unable to activate ldap. The \\"py' | |||||
367 | msgstr "" |
|
355 | msgstr "" | |
368 |
|
356 | |||
369 | #: rhodecode/controllers/admin/ldap_settings.py:147 |
|
357 | #: rhodecode/controllers/admin/ldap_settings.py:147 | |
370 |
msgid " |
|
358 | msgid "Error occurred during update of ldap settings" | |
371 | msgstr "" |
|
|||
372 |
|
||||
373 | #: rhodecode/controllers/admin/permissions.py:59 |
|
|||
374 | #: rhodecode/controllers/admin/permissions.py:63 |
|
|||
375 | msgid "None" |
|
|||
376 | msgstr "" |
|
359 | msgstr "" | |
377 |
|
360 | |||
378 | #: rhodecode/controllers/admin/permissions.py:60 |
|
361 | #: rhodecode/controllers/admin/permissions.py:60 | |
379 | #: rhodecode/controllers/admin/permissions.py:64 |
|
362 | #: rhodecode/controllers/admin/permissions.py:64 | |
380 |
msgid " |
|
363 | msgid "None" | |
381 | msgstr "" |
|
364 | msgstr "" | |
382 |
|
365 | |||
383 | #: rhodecode/controllers/admin/permissions.py:61 |
|
366 | #: rhodecode/controllers/admin/permissions.py:61 | |
384 | #: rhodecode/controllers/admin/permissions.py:65 |
|
367 | #: rhodecode/controllers/admin/permissions.py:65 | |
385 |
msgid " |
|
368 | msgid "Read" | |
386 | msgstr "" |
|
369 | msgstr "" | |
387 |
|
370 | |||
388 | #: rhodecode/controllers/admin/permissions.py:62 |
|
371 | #: rhodecode/controllers/admin/permissions.py:62 | |
389 | #: rhodecode/controllers/admin/permissions.py:66 |
|
372 | #: rhodecode/controllers/admin/permissions.py:66 | |
|
373 | msgid "Write" | |||
|
374 | msgstr "" | |||
|
375 | ||||
|
376 | #: rhodecode/controllers/admin/permissions.py:63 | |||
|
377 | #: rhodecode/controllers/admin/permissions.py:67 | |||
390 | #: rhodecode/templates/admin/defaults/defaults.html:9 |
|
378 | #: rhodecode/templates/admin/defaults/defaults.html:9 | |
391 | #: rhodecode/templates/admin/ldap/ldap.html:9 |
|
379 | #: rhodecode/templates/admin/ldap/ldap.html:9 | |
392 | #: rhodecode/templates/admin/permissions/permissions.html:9 |
|
380 | #: rhodecode/templates/admin/permissions/permissions.html:9 | |
393 |
#: rhodecode/templates/admin/repos/repo_add.html: |
|
381 | #: rhodecode/templates/admin/repos/repo_add.html:10 | |
394 |
#: rhodecode/templates/admin/repos/repo_ |
|
382 | #: rhodecode/templates/admin/repos/repo_add.html:14 | |
395 | #: rhodecode/templates/admin/repos/repos.html:9 |
|
383 | #: rhodecode/templates/admin/repos/repos.html:9 | |
396 |
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html: |
|
384 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:9 | |
397 |
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html: |
|
385 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:9 | |
398 |
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:1 |
|
386 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:11 | |
|
387 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:13 | |||
399 | #: rhodecode/templates/admin/settings/hooks.html:9 |
|
388 | #: rhodecode/templates/admin/settings/hooks.html:9 | |
400 | #: rhodecode/templates/admin/settings/settings.html:9 |
|
389 | #: rhodecode/templates/admin/settings/settings.html:9 | |
401 | #: rhodecode/templates/admin/users/user_add.html:8 |
|
390 | #: rhodecode/templates/admin/users/user_add.html:8 | |
402 | #: rhodecode/templates/admin/users/user_edit.html:9 |
|
391 | #: rhodecode/templates/admin/users/user_edit.html:9 | |
403 |
#: rhodecode/templates/admin/users/user_edit.html:1 |
|
392 | #: rhodecode/templates/admin/users/user_edit.html:133 | |
404 | #: rhodecode/templates/admin/users/users.html:9 |
|
393 | #: rhodecode/templates/admin/users/users.html:9 | |
|
394 | #: rhodecode/templates/admin/users/users.html:85 | |||
405 | #: rhodecode/templates/admin/users_groups/users_group_add.html:8 |
|
395 | #: rhodecode/templates/admin/users_groups/users_group_add.html:8 | |
406 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:9 |
|
396 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:9 | |
407 | #: rhodecode/templates/admin/users_groups/users_groups.html:9 |
|
397 | #: rhodecode/templates/admin/users_groups/users_groups.html:9 | |
408 |
#: rhodecode/templates/base/base.html: |
|
398 | #: rhodecode/templates/base/base.html:292 | |
409 |
#: rhodecode/templates/base/base.html:3 |
|
399 | #: rhodecode/templates/base/base.html:293 | |
410 |
#: rhodecode/templates/base/base.html: |
|
400 | #: rhodecode/templates/base/base.html:299 | |
411 |
#: rhodecode/templates/base/base.html:3 |
|
401 | #: rhodecode/templates/base/base.html:300 | |
412 | msgid "Admin" |
|
402 | msgid "Admin" | |
413 | msgstr "" |
|
403 | msgstr "" | |
414 |
|
404 | |||
415 |
#: rhodecode/controllers/admin/permissions.py: |
|
405 | #: rhodecode/controllers/admin/permissions.py:70 | |
416 | msgid "disabled" |
|
|||
417 | msgstr "" |
|
|||
418 |
|
||||
419 | #: rhodecode/controllers/admin/permissions.py:71 |
|
|||
420 | msgid "allowed with manual account activation" |
|
|||
421 | msgstr "" |
|
|||
422 |
|
||||
423 | #: rhodecode/controllers/admin/permissions.py:73 |
|
|||
424 | msgid "allowed with automatic account activation" |
|
|||
425 | msgstr "" |
|
|||
426 |
|
||||
427 | #: rhodecode/controllers/admin/permissions.py:75 |
|
|||
428 | #: rhodecode/controllers/admin/permissions.py:78 |
|
|||
429 | msgid "Disabled" |
|
|||
430 | msgstr "" |
|
|||
431 |
|
||||
432 | #: rhodecode/controllers/admin/permissions.py:76 |
|
406 | #: rhodecode/controllers/admin/permissions.py:76 | |
433 | #: rhodecode/controllers/admin/permissions.py:79 |
|
407 | #: rhodecode/controllers/admin/permissions.py:79 | |
|
408 | msgid "Disabled" | |||
|
409 | msgstr "" | |||
|
410 | ||||
|
411 | #: rhodecode/controllers/admin/permissions.py:72 | |||
|
412 | msgid "Allowed with manual account activation" | |||
|
413 | msgstr "" | |||
|
414 | ||||
|
415 | #: rhodecode/controllers/admin/permissions.py:74 | |||
|
416 | msgid "Allowed with automatic account activation" | |||
|
417 | msgstr "" | |||
|
418 | ||||
|
419 | #: rhodecode/controllers/admin/permissions.py:77 | |||
|
420 | #: rhodecode/controllers/admin/permissions.py:80 | |||
434 | msgid "Enabled" |
|
421 | msgid "Enabled" | |
435 | msgstr "" |
|
422 | msgstr "" | |
436 |
|
423 | |||
437 |
#: rhodecode/controllers/admin/permissions.py:12 |
|
424 | #: rhodecode/controllers/admin/permissions.py:128 | |
438 | msgid "Default permissions updated successfully" |
|
425 | msgid "Default permissions updated successfully" | |
439 | msgstr "" |
|
426 | msgstr "" | |
440 |
|
427 | |||
441 |
#: rhodecode/controllers/admin/permissions.py:1 |
|
428 | #: rhodecode/controllers/admin/permissions.py:142 | |
442 |
msgid " |
|
429 | msgid "Error occurred during update of permissions" | |
443 | msgstr "" |
|
430 | msgstr "" | |
444 |
|
431 | |||
445 |
#: rhodecode/controllers/admin/repos.py:12 |
|
432 | #: rhodecode/controllers/admin/repos.py:127 | |
446 | msgid "--REMOVE FORK--" |
|
433 | msgid "--REMOVE FORK--" | |
447 | msgstr "" |
|
434 | msgstr "" | |
448 |
|
435 | |||
449 |
#: rhodecode/controllers/admin/repos.py:1 |
|
436 | #: rhodecode/controllers/admin/repos.py:168 | |
|
437 | #, python-format | |||
|
438 | msgid "Created repository %s from %s" | |||
|
439 | msgstr "" | |||
|
440 | ||||
|
441 | #: rhodecode/controllers/admin/repos.py:174 | |||
450 | #, python-format |
|
442 | #, python-format | |
451 |
msgid " |
|
443 | msgid "Created repository %s" | |
452 | msgstr "" |
|
444 | msgstr "" | |
453 |
|
445 | |||
454 |
#: rhodecode/controllers/admin/repos.py:19 |
|
446 | #: rhodecode/controllers/admin/repos.py:197 | |
|
447 | #, python-format | |||
|
448 | msgid "Error creating repository %s" | |||
|
449 | msgstr "" | |||
|
450 | ||||
|
451 | #: rhodecode/controllers/admin/repos.py:266 | |||
|
452 | #, python-format | |||
|
453 | msgid "Repository %s updated successfully" | |||
|
454 | msgstr "" | |||
|
455 | ||||
|
456 | #: rhodecode/controllers/admin/repos.py:284 | |||
455 | #, python-format |
|
457 | #, python-format | |
456 |
msgid " |
|
458 | msgid "Error occurred during update of repository %s" | |
457 | msgstr "" |
|
459 | msgstr "" | |
458 |
|
460 | |||
459 |
#: rhodecode/controllers/admin/repos.py: |
|
461 | #: rhodecode/controllers/admin/repos.py:311 | |
|
462 | #: rhodecode/controllers/api/api.py:877 | |||
460 | #, python-format |
|
463 | #, python-format | |
461 | msgid "error occurred during creation of repository %s" |
|
464 | msgid "Detached %s forks" | |
462 | msgstr "" |
|
465 | msgstr "" | |
463 |
|
466 | |||
464 |
#: rhodecode/controllers/admin/repos.py:3 |
|
467 | #: rhodecode/controllers/admin/repos.py:314 | |
|
468 | #: rhodecode/controllers/api/api.py:879 | |||
|
469 | #, python-format | |||
|
470 | msgid "Deleted %s forks" | |||
|
471 | msgstr "" | |||
|
472 | ||||
|
473 | #: rhodecode/controllers/admin/repos.py:319 | |||
|
474 | #, python-format | |||
|
475 | msgid "Deleted repository %s" | |||
|
476 | msgstr "" | |||
|
477 | ||||
|
478 | #: rhodecode/controllers/admin/repos.py:322 | |||
465 | #, python-format |
|
479 | #, python-format | |
466 | msgid "Cannot delete %s it still contains attached forks" |
|
480 | msgid "Cannot delete %s it still contains attached forks" | |
467 | msgstr "" |
|
481 | msgstr "" | |
468 |
|
482 | |||
469 |
#: rhodecode/controllers/admin/repos.py:3 |
|
483 | #: rhodecode/controllers/admin/repos.py:327 | |
|
484 | #, python-format | |||
|
485 | msgid "An error occurred during deletion of %s" | |||
|
486 | msgstr "" | |||
|
487 | ||||
|
488 | #: rhodecode/controllers/admin/repos.py:365 | |||
|
489 | msgid "Repository permissions updated" | |||
|
490 | msgstr "" | |||
|
491 | ||||
|
492 | #: rhodecode/controllers/admin/repos.py:384 | |||
470 | msgid "An error occurred during deletion of repository user" |
|
493 | msgid "An error occurred during deletion of repository user" | |
471 | msgstr "" |
|
494 | msgstr "" | |
472 |
|
495 | |||
473 | #: rhodecode/controllers/admin/repos.py:368 |
|
|||
474 | msgid "An error occurred during deletion of repository users groups" |
|
|||
475 | msgstr "" |
|
|||
476 |
|
||||
477 | #: rhodecode/controllers/admin/repos.py:386 |
|
|||
478 | msgid "An error occurred during deletion of repository stats" |
|
|||
479 | msgstr "" |
|
|||
480 |
|
||||
481 | #: rhodecode/controllers/admin/repos.py:403 |
|
496 | #: rhodecode/controllers/admin/repos.py:403 | |
|
497 | msgid "An error occurred during deletion of repository user groups" | |||
|
498 | msgstr "" | |||
|
499 | ||||
|
500 | #: rhodecode/controllers/admin/repos.py:421 | |||
|
501 | msgid "An error occurred during deletion of repository stats" | |||
|
502 | msgstr "" | |||
|
503 | ||||
|
504 | #: rhodecode/controllers/admin/repos.py:438 | |||
482 | msgid "An error occurred during cache invalidation" |
|
505 | msgid "An error occurred during cache invalidation" | |
483 | msgstr "" |
|
506 | msgstr "" | |
484 |
|
507 | |||
485 |
#: rhodecode/controllers/admin/repos.py:4 |
|
508 | #: rhodecode/controllers/admin/repos.py:458 | |
|
509 | #: rhodecode/controllers/admin/repos.py:485 | |||
|
510 | msgid "An error occurred during unlocking" | |||
|
511 | msgstr "" | |||
|
512 | ||||
|
513 | #: rhodecode/controllers/admin/repos.py:476 | |||
|
514 | msgid "Unlocked" | |||
|
515 | msgstr "" | |||
|
516 | ||||
|
517 | #: rhodecode/controllers/admin/repos.py:479 | |||
|
518 | msgid "Locked" | |||
|
519 | msgstr "" | |||
|
520 | ||||
|
521 | #: rhodecode/controllers/admin/repos.py:481 | |||
|
522 | #, python-format | |||
|
523 | msgid "Repository has been %s" | |||
|
524 | msgstr "" | |||
|
525 | ||||
|
526 | #: rhodecode/controllers/admin/repos.py:505 | |||
486 | msgid "Updated repository visibility in public journal" |
|
527 | msgid "Updated repository visibility in public journal" | |
487 | msgstr "" |
|
528 | msgstr "" | |
488 |
|
529 | |||
489 |
#: rhodecode/controllers/admin/repos.py: |
|
530 | #: rhodecode/controllers/admin/repos.py:509 | |
490 | msgid "An error occurred during setting this repository in public journal" |
|
531 | msgid "An error occurred during setting this repository in public journal" | |
491 | msgstr "" |
|
532 | msgstr "" | |
492 |
|
533 | |||
493 |
#: rhodecode/controllers/admin/repos.py: |
|
534 | #: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302 | |
494 | msgid "Token mismatch" |
|
535 | msgid "Token mismatch" | |
495 | msgstr "" |
|
536 | msgstr "" | |
496 |
|
537 | |||
497 |
#: rhodecode/controllers/admin/repos.py: |
|
538 | #: rhodecode/controllers/admin/repos.py:527 | |
498 | msgid "Pulled from remote location" |
|
539 | msgid "Pulled from remote location" | |
499 | msgstr "" |
|
540 | msgstr "" | |
500 |
|
541 | |||
501 |
#: rhodecode/controllers/admin/repos.py: |
|
542 | #: rhodecode/controllers/admin/repos.py:529 | |
502 | msgid "An error occurred during pull from remote location" |
|
543 | msgid "An error occurred during pull from remote location" | |
503 | msgstr "" |
|
544 | msgstr "" | |
504 |
|
545 | |||
505 |
#: rhodecode/controllers/admin/repos.py: |
|
546 | #: rhodecode/controllers/admin/repos.py:545 | |
506 | msgid "Nothing" |
|
547 | msgid "Nothing" | |
507 | msgstr "" |
|
548 | msgstr "" | |
508 |
|
549 | |||
509 |
#: rhodecode/controllers/admin/repos.py: |
|
550 | #: rhodecode/controllers/admin/repos.py:547 | |
510 | #, python-format |
|
551 | #, python-format | |
511 | msgid "Marked repo %s as fork of %s" |
|
552 | msgid "Marked repo %s as fork of %s" | |
512 | msgstr "" |
|
553 | msgstr "" | |
513 |
|
554 | |||
514 |
#: rhodecode/controllers/admin/repos.py: |
|
555 | #: rhodecode/controllers/admin/repos.py:551 | |
515 | msgid "An error occurred during this operation" |
|
556 | msgid "An error occurred during this operation" | |
516 | msgstr "" |
|
557 | msgstr "" | |
517 |
|
558 | |||
518 |
#: rhodecode/controllers/admin/repos |
|
559 | #: rhodecode/controllers/admin/repos.py:590 | |
|
560 | msgid "An error occurred during creation of field" | |||
|
561 | msgstr "" | |||
|
562 | ||||
|
563 | #: rhodecode/controllers/admin/repos.py:604 | |||
|
564 | msgid "An error occurred during removal of field" | |||
|
565 | msgstr "" | |||
|
566 | ||||
|
567 | #: rhodecode/controllers/admin/repos_groups.py:145 | |||
519 | #, python-format |
|
568 | #, python-format | |
520 |
msgid " |
|
569 | msgid "Created repository group %s" | |
521 | msgstr "" |
|
570 | msgstr "" | |
522 |
|
571 | |||
523 |
#: rhodecode/controllers/admin/repos_groups.py:1 |
|
572 | #: rhodecode/controllers/admin/repos_groups.py:157 | |
524 | #, python-format |
|
573 | #, python-format | |
525 |
msgid " |
|
574 | msgid "Error occurred during creation of repository group %s" | |
526 | msgstr "" |
|
575 | msgstr "" | |
527 |
|
576 | |||
528 |
#: rhodecode/controllers/admin/repos_groups.py: |
|
577 | #: rhodecode/controllers/admin/repos_groups.py:214 | |
|
578 | #: rhodecode/controllers/admin/repos_groups.py:286 | |||
|
579 | msgid "Cannot revoke permission for yourself as admin" | |||
|
580 | msgstr "" | |||
|
581 | ||||
|
582 | #: rhodecode/controllers/admin/repos_groups.py:220 | |||
529 | #, python-format |
|
583 | #, python-format | |
530 |
msgid " |
|
584 | msgid "Updated repository group %s" | |
531 | msgstr "" |
|
585 | msgstr "" | |
532 |
|
586 | |||
533 |
#: rhodecode/controllers/admin/repos_groups.py: |
|
587 | #: rhodecode/controllers/admin/repos_groups.py:235 | |
534 | #, python-format |
|
588 | #, python-format | |
535 |
msgid " |
|
589 | msgid "Error occurred during update of repository group %s" | |
536 | msgstr "" |
|
590 | msgstr "" | |
537 |
|
591 | |||
538 |
#: rhodecode/controllers/admin/repos_groups.py: |
|
592 | #: rhodecode/controllers/admin/repos_groups.py:253 | |
539 | #, python-format |
|
593 | #, python-format | |
540 | msgid "This group contains %s repositores and cannot be deleted" |
|
594 | msgid "This group contains %s repositores and cannot be deleted" | |
541 | msgstr "" |
|
595 | msgstr "" | |
542 |
|
596 | |||
543 |
#: rhodecode/controllers/admin/repos_groups.py:2 |
|
597 | #: rhodecode/controllers/admin/repos_groups.py:260 | |
|
598 | #, python-format | |||
|
599 | msgid "This group contains %s subgroups and cannot be deleted" | |||
|
600 | msgstr "" | |||
|
601 | ||||
|
602 | #: rhodecode/controllers/admin/repos_groups.py:266 | |||
544 | #, python-format |
|
603 | #, python-format | |
545 |
msgid " |
|
604 | msgid "Removed repository group %s" | |
546 | msgstr "" |
|
605 | msgstr "" | |
547 |
|
606 | |||
548 |
#: rhodecode/controllers/admin/repos_groups.py:21 |
|
607 | #: rhodecode/controllers/admin/repos_groups.py:271 | |
549 | msgid "Cannot delete this group it still contains subgroups" |
|
|||
550 | msgstr "" |
|
|||
551 |
|
||||
552 | #: rhodecode/controllers/admin/repos_groups.py:217 |
|
|||
553 | #: rhodecode/controllers/admin/repos_groups.py:222 |
|
|||
554 | #, python-format |
|
608 | #, python-format | |
555 |
msgid " |
|
609 | msgid "Error occurred during deletion of repos group %s" | |
556 | msgstr "" |
|
610 | msgstr "" | |
557 |
|
611 | |||
558 |
#: rhodecode/controllers/admin/repos_groups.py:2 |
|
612 | #: rhodecode/controllers/admin/repos_groups.py:297 | |
559 | msgid "An error occurred during deletion of group user" |
|
613 | msgid "An error occurred during deletion of group user" | |
560 | msgstr "" |
|
614 | msgstr "" | |
561 |
|
615 | |||
562 |
#: rhodecode/controllers/admin/repos_groups.py: |
|
616 | #: rhodecode/controllers/admin/repos_groups.py:318 | |
563 |
msgid "An error occurred during deletion of group user |
|
617 | msgid "An error occurred during deletion of group user groups" | |
564 | msgstr "" |
|
618 | msgstr "" | |
565 |
|
619 | |||
566 |
#: rhodecode/controllers/admin/settings.py:12 |
|
620 | #: rhodecode/controllers/admin/settings.py:126 | |
567 | #, python-format |
|
621 | #, python-format | |
568 |
msgid "Repositories successfully rescanned added: %s |
|
622 | msgid "Repositories successfully rescanned added: %s ; removed: %s" | |
569 | msgstr "" |
|
623 | msgstr "" | |
570 |
|
624 | |||
571 |
#: rhodecode/controllers/admin/settings.py:13 |
|
625 | #: rhodecode/controllers/admin/settings.py:135 | |
572 | msgid "Whoosh reindex task scheduled" |
|
626 | msgid "Whoosh reindex task scheduled" | |
573 | msgstr "" |
|
627 | msgstr "" | |
574 |
|
628 | |||
575 | #: rhodecode/controllers/admin/settings.py:162 |
|
|||
576 | msgid "Updated application settings" |
|
|||
577 | msgstr "" |
|
|||
578 |
|
||||
579 | #: rhodecode/controllers/admin/settings.py:166 |
|
629 | #: rhodecode/controllers/admin/settings.py:166 | |
580 | #: rhodecode/controllers/admin/settings.py:299 |
|
630 | msgid "Updated application settings" | |
581 | msgid "error occurred during updating application settings" |
|
631 | msgstr "" | |
582 | msgstr "" |
|
632 | ||
583 |
|
633 | #: rhodecode/controllers/admin/settings.py:170 | ||
584 |
#: rhodecode/controllers/admin/settings.py: |
|
634 | #: rhodecode/controllers/admin/settings.py:301 | |
|
635 | msgid "Error occurred during updating application settings" | |||
|
636 | msgstr "" | |||
|
637 | ||||
|
638 | #: rhodecode/controllers/admin/settings.py:216 | |||
585 | msgid "Updated visualisation settings" |
|
639 | msgid "Updated visualisation settings" | |
586 | msgstr "" |
|
640 | msgstr "" | |
587 |
|
641 | |||
588 |
#: rhodecode/controllers/admin/settings.py:2 |
|
642 | #: rhodecode/controllers/admin/settings.py:221 | |
589 |
msgid " |
|
643 | msgid "Error occurred during updating visualisation settings" | |
590 | msgstr "" |
|
644 | msgstr "" | |
591 |
|
645 | |||
592 |
#: rhodecode/controllers/admin/settings.py:29 |
|
646 | #: rhodecode/controllers/admin/settings.py:297 | |
593 | msgid "Updated VCS settings" |
|
647 | msgid "Updated VCS settings" | |
594 | msgstr "" |
|
648 | msgstr "" | |
595 |
|
649 | |||
596 |
#: rhodecode/controllers/admin/settings.py:3 |
|
650 | #: rhodecode/controllers/admin/settings.py:311 | |
597 | msgid "Added new hook" |
|
651 | msgid "Added new hook" | |
598 | msgstr "" |
|
652 | msgstr "" | |
599 |
|
653 | |||
600 |
#: rhodecode/controllers/admin/settings.py:32 |
|
654 | #: rhodecode/controllers/admin/settings.py:323 | |
601 | msgid "Updated hooks" |
|
655 | msgid "Updated hooks" | |
602 | msgstr "" |
|
656 | msgstr "" | |
603 |
|
657 | |||
604 |
#: rhodecode/controllers/admin/settings.py:32 |
|
658 | #: rhodecode/controllers/admin/settings.py:327 | |
605 |
msgid " |
|
659 | msgid "Error occurred during hook creation" | |
606 | msgstr "" |
|
660 | msgstr "" | |
607 |
|
661 | |||
608 |
#: rhodecode/controllers/admin/settings.py:34 |
|
662 | #: rhodecode/controllers/admin/settings.py:346 | |
609 | msgid "Email task created" |
|
663 | msgid "Email task created" | |
610 | msgstr "" |
|
664 | msgstr "" | |
611 |
|
665 | |||
612 |
#: rhodecode/controllers/admin/settings.py: |
|
666 | #: rhodecode/controllers/admin/settings.py:410 | |
613 | msgid "You can't edit this user since it's crucial for entire application" |
|
667 | msgid "You can't edit this user since it's crucial for entire application" | |
614 | msgstr "" |
|
668 | msgstr "" | |
615 |
|
669 | |||
616 |
#: rhodecode/controllers/admin/settings.py:4 |
|
670 | #: rhodecode/controllers/admin/settings.py:452 | |
617 | msgid "Your account was updated successfully" |
|
671 | msgid "Your account was updated successfully" | |
618 | msgstr "" |
|
672 | msgstr "" | |
619 |
|
673 | |||
620 |
#: rhodecode/controllers/admin/settings.py:4 |
|
674 | #: rhodecode/controllers/admin/settings.py:467 | |
621 |
#: rhodecode/controllers/admin/users.py:19 |
|
675 | #: rhodecode/controllers/admin/users.py:198 | |
622 | #, python-format |
|
676 | #, python-format | |
623 |
msgid " |
|
677 | msgid "Error occurred during update of user %s" | |
624 | msgstr "" |
|
678 | msgstr "" | |
625 |
|
679 | |||
626 | #: rhodecode/controllers/admin/users.py:130 |
|
680 | #: rhodecode/controllers/admin/users.py:130 | |
627 | #, python-format |
|
681 | #, python-format | |
628 |
msgid " |
|
682 | msgid "Created user %s" | |
629 | msgstr "" |
|
683 | msgstr "" | |
630 |
|
684 | |||
631 | #: rhodecode/controllers/admin/users.py:142 |
|
685 | #: rhodecode/controllers/admin/users.py:142 | |
632 | #, python-format |
|
686 | #, python-format | |
633 |
msgid " |
|
687 | msgid "Error occurred during creation of user %s" | |
634 | msgstr "" |
|
688 | msgstr "" | |
635 |
|
689 | |||
636 | #: rhodecode/controllers/admin/users.py:176 |
|
690 | #: rhodecode/controllers/admin/users.py:176 | |
637 | msgid "User updated successfully" |
|
691 | msgid "User updated successfully" | |
638 | msgstr "" |
|
692 | msgstr "" | |
639 |
|
693 | |||
640 |
#: rhodecode/controllers/admin/users.py:21 |
|
694 | #: rhodecode/controllers/admin/users.py:214 | |
641 |
msgid " |
|
695 | msgid "Successfully deleted user" | |
642 | msgstr "" |
|
696 | msgstr "" | |
643 |
|
697 | |||
644 |
#: rhodecode/controllers/admin/users.py:21 |
|
698 | #: rhodecode/controllers/admin/users.py:219 | |
645 | msgid "An error occurred during deletion of user" |
|
699 | msgid "An error occurred during deletion of user" | |
646 | msgstr "" |
|
700 | msgstr "" | |
647 |
|
701 | |||
648 |
#: rhodecode/controllers/admin/users.py:23 |
|
702 | #: rhodecode/controllers/admin/users.py:233 | |
649 | msgid "You can't edit this user" |
|
703 | msgid "You can't edit this user" | |
650 | msgstr "" |
|
704 | msgstr "" | |
651 |
|
705 | |||
652 |
#: rhodecode/controllers/admin/users.py:27 |
|
706 | #: rhodecode/controllers/admin/users.py:276 | |
653 | msgid "Granted 'repository create' permission to user" |
|
707 | msgid "Granted 'repository create' permission to user" | |
654 | msgstr "" |
|
708 | msgstr "" | |
655 |
|
709 | |||
656 |
#: rhodecode/controllers/admin/users.py:2 |
|
710 | #: rhodecode/controllers/admin/users.py:281 | |
657 | msgid "Revoked 'repository create' permission to user" |
|
711 | msgid "Revoked 'repository create' permission to user" | |
658 | msgstr "" |
|
712 | msgstr "" | |
659 |
|
713 | |||
660 |
#: rhodecode/controllers/admin/users.py:28 |
|
714 | #: rhodecode/controllers/admin/users.py:287 | |
661 | msgid "Granted 'repository fork' permission to user" |
|
715 | msgid "Granted 'repository fork' permission to user" | |
662 | msgstr "" |
|
716 | msgstr "" | |
663 |
|
717 | |||
664 |
#: rhodecode/controllers/admin/users.py:2 |
|
718 | #: rhodecode/controllers/admin/users.py:292 | |
665 | msgid "Revoked 'repository fork' permission to user" |
|
719 | msgid "Revoked 'repository fork' permission to user" | |
666 | msgstr "" |
|
720 | msgstr "" | |
667 |
|
721 | |||
668 |
#: rhodecode/controllers/admin/users.py:29 |
|
722 | #: rhodecode/controllers/admin/users.py:298 | |
669 |
#: rhodecode/controllers/admin/users_groups.py:2 |
|
723 | #: rhodecode/controllers/admin/users_groups.py:281 | |
670 | msgid "An error occurred during permissions saving" |
|
724 | msgid "An error occurred during permissions saving" | |
671 | msgstr "" |
|
725 | msgstr "" | |
672 |
|
726 | |||
673 |
#: rhodecode/controllers/admin/users.py:3 |
|
727 | #: rhodecode/controllers/admin/users.py:312 | |
674 | #, python-format |
|
728 | #, python-format | |
675 | msgid "Added email %s to user" |
|
729 | msgid "Added email %s to user" | |
676 | msgstr "" |
|
730 | msgstr "" | |
677 |
|
731 | |||
678 |
#: rhodecode/controllers/admin/users.py:31 |
|
732 | #: rhodecode/controllers/admin/users.py:318 | |
679 | msgid "An error occurred during email saving" |
|
733 | msgid "An error occurred during email saving" | |
680 | msgstr "" |
|
734 | msgstr "" | |
681 |
|
735 | |||
682 |
#: rhodecode/controllers/admin/users.py:32 |
|
736 | #: rhodecode/controllers/admin/users.py:328 | |
683 | msgid "Removed email from user" |
|
737 | msgid "Removed email from user" | |
684 | msgstr "" |
|
738 | msgstr "" | |
685 |
|
739 | |||
|
740 | #: rhodecode/controllers/admin/users.py:341 | |||
|
741 | #, python-format | |||
|
742 | msgid "Added ip %s to user" | |||
|
743 | msgstr "" | |||
|
744 | ||||
|
745 | #: rhodecode/controllers/admin/users.py:347 | |||
|
746 | msgid "An error occurred during ip saving" | |||
|
747 | msgstr "" | |||
|
748 | ||||
|
749 | #: rhodecode/controllers/admin/users.py:359 | |||
|
750 | msgid "Removed ip from user" | |||
|
751 | msgstr "" | |||
|
752 | ||||
686 | #: rhodecode/controllers/admin/users_groups.py:86 |
|
753 | #: rhodecode/controllers/admin/users_groups.py:86 | |
687 | #, python-format |
|
754 | #, python-format | |
688 |
msgid " |
|
755 | msgid "Created user group %s" | |
689 | msgstr "" |
|
756 | msgstr "" | |
690 |
|
757 | |||
691 | #: rhodecode/controllers/admin/users_groups.py:97 |
|
758 | #: rhodecode/controllers/admin/users_groups.py:97 | |
692 | #, python-format |
|
759 | #, python-format | |
693 |
msgid " |
|
760 | msgid "Error occurred during creation of user group %s" | |
694 | msgstr "" |
|
761 | msgstr "" | |
695 |
|
762 | |||
696 |
#: rhodecode/controllers/admin/users_groups.py:16 |
|
763 | #: rhodecode/controllers/admin/users_groups.py:166 | |
697 | #, python-format |
|
764 | #, python-format | |
698 |
msgid " |
|
765 | msgid "Updated user group %s" | |
699 | msgstr "" |
|
766 | msgstr "" | |
700 |
|
767 | |||
701 |
#: rhodecode/controllers/admin/users_groups.py:18 |
|
768 | #: rhodecode/controllers/admin/users_groups.py:188 | |
702 | #, python-format |
|
769 | #, python-format | |
703 |
msgid " |
|
770 | msgid "Error occurred during update of user group %s" | |
704 | msgstr "" |
|
771 | msgstr "" | |
705 |
|
772 | |||
706 |
#: rhodecode/controllers/admin/users_groups.py:20 |
|
773 | #: rhodecode/controllers/admin/users_groups.py:205 | |
707 |
msgid " |
|
774 | msgid "Successfully deleted user group" | |
708 | msgstr "" |
|
775 | msgstr "" | |
709 |
|
776 | |||
710 |
#: rhodecode/controllers/admin/users_groups.py:20 |
|
777 | #: rhodecode/controllers/admin/users_groups.py:210 | |
711 |
msgid "An error occurred during deletion of user |
|
778 | msgid "An error occurred during deletion of user group" | |
712 | msgstr "" |
|
779 | msgstr "" | |
713 |
|
780 | |||
714 |
#: rhodecode/controllers/admin/users_groups.py:25 |
|
781 | #: rhodecode/controllers/admin/users_groups.py:259 | |
715 |
msgid "Granted 'repository create' permission to user |
|
782 | msgid "Granted 'repository create' permission to user group" | |
716 | msgstr "" |
|
783 | msgstr "" | |
717 |
|
784 | |||
718 |
#: rhodecode/controllers/admin/users_groups.py:26 |
|
785 | #: rhodecode/controllers/admin/users_groups.py:264 | |
719 |
msgid "Revoked 'repository create' permission to user |
|
786 | msgid "Revoked 'repository create' permission to user group" | |
720 | msgstr "" |
|
787 | msgstr "" | |
721 |
|
788 | |||
722 |
#: rhodecode/controllers/admin/users_groups.py:2 |
|
789 | #: rhodecode/controllers/admin/users_groups.py:270 | |
723 |
msgid "Granted 'repository fork' permission to user |
|
790 | msgid "Granted 'repository fork' permission to user group" | |
724 | msgstr "" |
|
791 | msgstr "" | |
725 |
|
792 | |||
726 |
#: rhodecode/controllers/admin/users_groups.py:27 |
|
793 | #: rhodecode/controllers/admin/users_groups.py:275 | |
727 |
msgid "Revoked 'repository fork' permission to user |
|
794 | msgid "Revoked 'repository fork' permission to user group" | |
728 | msgstr "" |
|
795 | msgstr "" | |
729 |
|
796 | |||
730 |
#: rhodecode/lib/auth.py: |
|
797 | #: rhodecode/lib/auth.py:530 | |
|
798 | #, python-format | |||
|
799 | msgid "IP %s not allowed" | |||
|
800 | msgstr "" | |||
|
801 | ||||
|
802 | #: rhodecode/lib/auth.py:579 | |||
731 | msgid "You need to be a registered user to perform this action" |
|
803 | msgid "You need to be a registered user to perform this action" | |
732 | msgstr "" |
|
804 | msgstr "" | |
733 |
|
805 | |||
734 |
#: rhodecode/lib/auth.py: |
|
806 | #: rhodecode/lib/auth.py:620 | |
735 | msgid "You need to be a signed in to view this page" |
|
807 | msgid "You need to be a signed in to view this page" | |
736 | msgstr "" |
|
808 | msgstr "" | |
737 |
|
809 | |||
738 |
#: rhodecode/lib/diffs.py: |
|
810 | #: rhodecode/lib/diffs.py:66 | |
739 |
msgid " |
|
811 | msgid "Binary file" | |
740 | msgstr "" |
|
812 | msgstr "" | |
741 |
|
813 | |||
742 |
#: rhodecode/lib/diffs.py: |
|
814 | #: rhodecode/lib/diffs.py:82 | |
743 | msgid "Changeset was too big and was cut off, use diff menu to display this diff" |
|
815 | msgid "Changeset was too big and was cut off, use diff menu to display this diff" | |
744 | msgstr "" |
|
816 | msgstr "" | |
745 |
|
817 | |||
746 |
#: rhodecode/lib/diffs.py: |
|
818 | #: rhodecode/lib/diffs.py:92 | |
747 | msgid "No changes detected" |
|
819 | msgid "No changes detected" | |
748 | msgstr "" |
|
820 | msgstr "" | |
749 |
|
821 | |||
750 |
#: rhodecode/lib/helpers.py:3 |
|
822 | #: rhodecode/lib/helpers.py:394 | |
751 | #, python-format |
|
823 | #, python-format | |
752 | msgid "%a, %d %b %Y %H:%M:%S" |
|
824 | msgid "%a, %d %b %Y %H:%M:%S" | |
753 | msgstr "" |
|
825 | msgstr "" | |
754 |
|
826 | |||
755 |
#: rhodecode/lib/helpers.py: |
|
827 | #: rhodecode/lib/helpers.py:506 | |
756 | msgid "True" |
|
828 | msgid "True" | |
757 | msgstr "" |
|
829 | msgstr "" | |
758 |
|
830 | |||
759 |
#: rhodecode/lib/helpers.py: |
|
831 | #: rhodecode/lib/helpers.py:509 | |
760 | msgid "False" |
|
832 | msgid "False" | |
761 | msgstr "" |
|
833 | msgstr "" | |
762 |
|
834 | |||
763 |
#: rhodecode/lib/helpers.py:5 |
|
835 | #: rhodecode/lib/helpers.py:547 | |
764 | #, python-format |
|
836 | #, python-format | |
765 | msgid "Deleted branch: %s" |
|
837 | msgid "Deleted branch: %s" | |
766 | msgstr "" |
|
838 | msgstr "" | |
767 |
|
839 | |||
768 |
#: rhodecode/lib/helpers.py:5 |
|
840 | #: rhodecode/lib/helpers.py:550 | |
769 | #, python-format |
|
841 | #, python-format | |
770 | msgid "Created tag: %s" |
|
842 | msgid "Created tag: %s" | |
771 | msgstr "" |
|
843 | msgstr "" | |
772 |
|
844 | |||
773 |
#: rhodecode/lib/helpers.py:5 |
|
845 | #: rhodecode/lib/helpers.py:563 | |
774 | msgid "Changeset not found" |
|
846 | msgid "Changeset not found" | |
775 | msgstr "" |
|
847 | msgstr "" | |
776 |
|
848 | |||
777 | #: rhodecode/lib/helpers.py:589 |
|
|||
778 | #, python-format |
|
|||
779 | msgid "Show all combined changesets %s->%s" |
|
|||
780 | msgstr "" |
|
|||
781 |
|
||||
782 | #: rhodecode/lib/helpers.py:595 |
|
|||
783 | msgid "compare view" |
|
|||
784 | msgstr "" |
|
|||
785 |
|
||||
786 | #: rhodecode/lib/helpers.py:615 |
|
849 | #: rhodecode/lib/helpers.py:615 | |
787 | msgid "and" |
|
|||
788 | msgstr "" |
|
|||
789 |
|
||||
790 | #: rhodecode/lib/helpers.py:616 |
|
|||
791 | #, python-format |
|
850 | #, python-format | |
792 | msgid "%s more" |
|
851 | msgid "Show all combined changesets %s->%s" | |
793 | msgstr "" |
|
852 | msgstr "" | |
794 |
|
853 | |||
795 | #: rhodecode/lib/helpers.py:617 rhodecode/templates/changelog/changelog.html:51 |
|
854 | #: rhodecode/lib/helpers.py:621 | |
796 |
msgid " |
|
855 | msgid "compare view" | |
797 | msgstr "" |
|
856 | msgstr "" | |
798 |
|
857 | |||
799 | #: rhodecode/lib/helpers.py:641 |
|
858 | #: rhodecode/lib/helpers.py:641 | |
|
859 | msgid "and" | |||
|
860 | msgstr "" | |||
|
861 | ||||
|
862 | #: rhodecode/lib/helpers.py:642 | |||
|
863 | #, python-format | |||
|
864 | msgid "%s more" | |||
|
865 | msgstr "" | |||
|
866 | ||||
|
867 | #: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44 | |||
|
868 | msgid "revisions" | |||
|
869 | msgstr "" | |||
|
870 | ||||
|
871 | #: rhodecode/lib/helpers.py:667 | |||
800 | #, python-format |
|
872 | #, python-format | |
801 | msgid "fork name %s" |
|
873 | msgid "fork name %s" | |
802 | msgstr "" |
|
874 | msgstr "" | |
803 |
|
875 | |||
804 | #: rhodecode/lib/helpers.py:658 |
|
|||
805 | #: rhodecode/templates/pullrequests/pullrequest_show.html:4 |
|
|||
806 | #: rhodecode/templates/pullrequests/pullrequest_show.html:12 |
|
|||
807 | #, python-format |
|
|||
808 | msgid "Pull request #%s" |
|
|||
809 | msgstr "" |
|
|||
810 |
|
||||
811 | #: rhodecode/lib/helpers.py:664 |
|
|||
812 | msgid "[deleted] repository" |
|
|||
813 | msgstr "" |
|
|||
814 |
|
||||
815 | #: rhodecode/lib/helpers.py:666 rhodecode/lib/helpers.py:676 |
|
|||
816 | msgid "[created] repository" |
|
|||
817 | msgstr "" |
|
|||
818 |
|
||||
819 | #: rhodecode/lib/helpers.py:668 |
|
|||
820 | msgid "[created] repository as fork" |
|
|||
821 | msgstr "" |
|
|||
822 |
|
||||
823 | #: rhodecode/lib/helpers.py:670 rhodecode/lib/helpers.py:678 |
|
|||
824 | msgid "[forked] repository" |
|
|||
825 | msgstr "" |
|
|||
826 |
|
||||
827 | #: rhodecode/lib/helpers.py:672 rhodecode/lib/helpers.py:680 |
|
|||
828 | msgid "[updated] repository" |
|
|||
829 | msgstr "" |
|
|||
830 |
|
||||
831 | #: rhodecode/lib/helpers.py:674 |
|
|||
832 | msgid "[delete] repository" |
|
|||
833 | msgstr "" |
|
|||
834 |
|
||||
835 | #: rhodecode/lib/helpers.py:682 |
|
|||
836 | msgid "[created] user" |
|
|||
837 | msgstr "" |
|
|||
838 |
|
||||
839 | #: rhodecode/lib/helpers.py:684 |
|
876 | #: rhodecode/lib/helpers.py:684 | |
840 | msgid "[updated] user" |
|
877 | #: rhodecode/templates/pullrequests/pullrequest_show.html:8 | |
841 | msgstr "" |
|
878 | #, python-format | |
842 |
|
879 | msgid "Pull request #%s" | ||
843 | #: rhodecode/lib/helpers.py:686 |
|
|||
844 | msgid "[created] users group" |
|
|||
845 | msgstr "" |
|
|||
846 |
|
||||
847 | #: rhodecode/lib/helpers.py:688 |
|
|||
848 | msgid "[updated] users group" |
|
|||
849 | msgstr "" |
|
880 | msgstr "" | |
850 |
|
881 | |||
851 | #: rhodecode/lib/helpers.py:690 |
|
882 | #: rhodecode/lib/helpers.py:690 | |
852 |
msgid "[ |
|
883 | msgid "[deleted] repository" | |
853 | msgstr "" |
|
884 | msgstr "" | |
854 |
|
885 | |||
855 | #: rhodecode/lib/helpers.py:692 |
|
886 | #: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702 | |
856 |
msgid "[c |
|
887 | msgid "[created] repository" | |
857 | msgstr "" |
|
888 | msgstr "" | |
858 |
|
889 | |||
859 | #: rhodecode/lib/helpers.py:694 |
|
890 | #: rhodecode/lib/helpers.py:694 | |
860 |
msgid "[c |
|
891 | msgid "[created] repository as fork" | |
861 | msgstr "" |
|
892 | msgstr "" | |
862 |
|
893 | |||
863 | #: rhodecode/lib/helpers.py:696 |
|
894 | #: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704 | |
864 |
msgid "[ |
|
895 | msgid "[forked] repository" | |
865 | msgstr "" |
|
896 | msgstr "" | |
866 |
|
897 | |||
867 | #: rhodecode/lib/helpers.py:698 |
|
898 | #: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706 | |
868 |
msgid "[ |
|
899 | msgid "[updated] repository" | |
869 | msgstr "" |
|
900 | msgstr "" | |
870 |
|
901 | |||
871 | #: rhodecode/lib/helpers.py:700 |
|
902 | #: rhodecode/lib/helpers.py:700 | |
|
903 | msgid "[delete] repository" | |||
|
904 | msgstr "" | |||
|
905 | ||||
|
906 | #: rhodecode/lib/helpers.py:708 | |||
|
907 | msgid "[created] user" | |||
|
908 | msgstr "" | |||
|
909 | ||||
|
910 | #: rhodecode/lib/helpers.py:710 | |||
|
911 | msgid "[updated] user" | |||
|
912 | msgstr "" | |||
|
913 | ||||
|
914 | #: rhodecode/lib/helpers.py:712 | |||
|
915 | msgid "[created] user group" | |||
|
916 | msgstr "" | |||
|
917 | ||||
|
918 | #: rhodecode/lib/helpers.py:714 | |||
|
919 | msgid "[updated] user group" | |||
|
920 | msgstr "" | |||
|
921 | ||||
|
922 | #: rhodecode/lib/helpers.py:716 | |||
|
923 | msgid "[commented] on revision in repository" | |||
|
924 | msgstr "" | |||
|
925 | ||||
|
926 | #: rhodecode/lib/helpers.py:718 | |||
|
927 | msgid "[commented] on pull request for" | |||
|
928 | msgstr "" | |||
|
929 | ||||
|
930 | #: rhodecode/lib/helpers.py:720 | |||
|
931 | msgid "[closed] pull request for" | |||
|
932 | msgstr "" | |||
|
933 | ||||
|
934 | #: rhodecode/lib/helpers.py:722 | |||
|
935 | msgid "[pushed] into" | |||
|
936 | msgstr "" | |||
|
937 | ||||
|
938 | #: rhodecode/lib/helpers.py:724 | |||
|
939 | msgid "[committed via RhodeCode] into repository" | |||
|
940 | msgstr "" | |||
|
941 | ||||
|
942 | #: rhodecode/lib/helpers.py:726 | |||
872 | msgid "[pulled from remote] into repository" |
|
943 | msgid "[pulled from remote] into repository" | |
873 | msgstr "" |
|
944 | msgstr "" | |
874 |
|
945 | |||
875 |
#: rhodecode/lib/helpers.py:7 |
|
946 | #: rhodecode/lib/helpers.py:728 | |
876 | msgid "[pulled] from" |
|
947 | msgid "[pulled] from" | |
877 | msgstr "" |
|
948 | msgstr "" | |
878 |
|
949 | |||
879 |
#: rhodecode/lib/helpers.py:70 |
|
950 | #: rhodecode/lib/helpers.py:730 | |
880 | msgid "[started following] repository" |
|
951 | msgid "[started following] repository" | |
881 | msgstr "" |
|
952 | msgstr "" | |
882 |
|
953 | |||
883 |
#: rhodecode/lib/helpers.py:7 |
|
954 | #: rhodecode/lib/helpers.py:732 | |
884 | msgid "[stopped following] repository" |
|
955 | msgid "[stopped following] repository" | |
885 | msgstr "" |
|
956 | msgstr "" | |
886 |
|
957 | |||
887 |
#: rhodecode/lib/helpers.py: |
|
958 | #: rhodecode/lib/helpers.py:910 | |
888 | #, python-format |
|
959 | #, python-format | |
889 | msgid " and %s more" |
|
960 | msgid " and %s more" | |
890 | msgstr "" |
|
961 | msgstr "" | |
891 |
|
962 | |||
892 |
#: rhodecode/lib/helpers.py: |
|
963 | #: rhodecode/lib/helpers.py:914 | |
893 | msgid "No Files" |
|
964 | msgid "No Files" | |
894 | msgstr "" |
|
965 | msgstr "" | |
895 |
|
966 | |||
896 |
#: rhodecode/lib/helpers.py:11 |
|
967 | #: rhodecode/lib/helpers.py:1198 | |
897 | #, python-format |
|
968 | #, python-format | |
898 | msgid "" |
|
969 | msgid "" | |
899 | "%s repository is not mapped to db perhaps it was created or renamed from " |
|
970 | "%s repository is not mapped to db perhaps it was created or renamed from " | |
@@ -901,165 +972,225 b' msgid ""' | |||||
901 | "repositories" |
|
972 | "repositories" | |
902 | msgstr "" |
|
973 | msgstr "" | |
903 |
|
974 | |||
904 |
#: rhodecode/lib/u |
|
975 | #: rhodecode/lib/unionrepo.py:193 | |
|
976 | msgid "cannot create new union repository" | |||
|
977 | msgstr "" | |||
|
978 | ||||
|
979 | #: rhodecode/lib/utils2.py:411 | |||
905 | #, python-format |
|
980 | #, python-format | |
906 | msgid "%d year" |
|
981 | msgid "%d year" | |
907 | msgid_plural "%d years" |
|
982 | msgid_plural "%d years" | |
908 | msgstr[0] "" |
|
983 | msgstr[0] "" | |
909 | msgstr[1] "" |
|
984 | msgstr[1] "" | |
910 |
|
985 | |||
911 |
#: rhodecode/lib/utils2.py:4 |
|
986 | #: rhodecode/lib/utils2.py:412 | |
912 | #, python-format |
|
987 | #, python-format | |
913 | msgid "%d month" |
|
988 | msgid "%d month" | |
914 | msgid_plural "%d months" |
|
989 | msgid_plural "%d months" | |
915 | msgstr[0] "" |
|
990 | msgstr[0] "" | |
916 | msgstr[1] "" |
|
991 | msgstr[1] "" | |
917 |
|
992 | |||
918 |
#: rhodecode/lib/utils2.py:4 |
|
993 | #: rhodecode/lib/utils2.py:413 | |
919 | #, python-format |
|
994 | #, python-format | |
920 | msgid "%d day" |
|
995 | msgid "%d day" | |
921 | msgid_plural "%d days" |
|
996 | msgid_plural "%d days" | |
922 | msgstr[0] "" |
|
997 | msgstr[0] "" | |
923 | msgstr[1] "" |
|
998 | msgstr[1] "" | |
924 |
|
999 | |||
925 |
#: rhodecode/lib/utils2.py:4 |
|
1000 | #: rhodecode/lib/utils2.py:414 | |
926 | #, python-format |
|
1001 | #, python-format | |
927 | msgid "%d hour" |
|
1002 | msgid "%d hour" | |
928 | msgid_plural "%d hours" |
|
1003 | msgid_plural "%d hours" | |
929 | msgstr[0] "" |
|
1004 | msgstr[0] "" | |
930 | msgstr[1] "" |
|
1005 | msgstr[1] "" | |
931 |
|
1006 | |||
932 |
#: rhodecode/lib/utils2.py:4 |
|
1007 | #: rhodecode/lib/utils2.py:415 | |
933 | #, python-format |
|
1008 | #, python-format | |
934 | msgid "%d minute" |
|
1009 | msgid "%d minute" | |
935 | msgid_plural "%d minutes" |
|
1010 | msgid_plural "%d minutes" | |
936 | msgstr[0] "" |
|
1011 | msgstr[0] "" | |
937 | msgstr[1] "" |
|
1012 | msgstr[1] "" | |
938 |
|
1013 | |||
939 |
#: rhodecode/lib/utils2.py:4 |
|
1014 | #: rhodecode/lib/utils2.py:416 | |
940 | #, python-format |
|
1015 | #, python-format | |
941 | msgid "%d second" |
|
1016 | msgid "%d second" | |
942 | msgid_plural "%d seconds" |
|
1017 | msgid_plural "%d seconds" | |
943 | msgstr[0] "" |
|
1018 | msgstr[0] "" | |
944 | msgstr[1] "" |
|
1019 | msgstr[1] "" | |
945 |
|
1020 | |||
946 |
#: rhodecode/lib/utils2.py:42 |
|
1021 | #: rhodecode/lib/utils2.py:432 | |
947 | #, python-format |
|
1022 | #, python-format | |
948 | msgid "in %s" |
|
1023 | msgid "in %s" | |
949 | msgstr "" |
|
1024 | msgstr "" | |
950 |
|
1025 | |||
951 | #: rhodecode/lib/utils2.py:426 |
|
|||
952 | #, python-format |
|
|||
953 | msgid "%s ago" |
|
|||
954 | msgstr "" |
|
|||
955 |
|
||||
956 | #: rhodecode/lib/utils2.py:428 |
|
|||
957 | #, python-format |
|
|||
958 | msgid "in %s and %s" |
|
|||
959 | msgstr "" |
|
|||
960 |
|
||||
961 | #: rhodecode/lib/utils2.py:431 |
|
|||
962 | #, python-format |
|
|||
963 | msgid "%s and %s ago" |
|
|||
964 | msgstr "" |
|
|||
965 |
|
||||
966 | #: rhodecode/lib/utils2.py:434 |
|
1026 | #: rhodecode/lib/utils2.py:434 | |
|
1027 | #, python-format | |||
|
1028 | msgid "%s ago" | |||
|
1029 | msgstr "" | |||
|
1030 | ||||
|
1031 | #: rhodecode/lib/utils2.py:436 | |||
|
1032 | #, python-format | |||
|
1033 | msgid "in %s and %s" | |||
|
1034 | msgstr "" | |||
|
1035 | ||||
|
1036 | #: rhodecode/lib/utils2.py:439 | |||
|
1037 | #, python-format | |||
|
1038 | msgid "%s and %s ago" | |||
|
1039 | msgstr "" | |||
|
1040 | ||||
|
1041 | #: rhodecode/lib/utils2.py:442 | |||
967 | msgid "just now" |
|
1042 | msgid "just now" | |
968 | msgstr "" |
|
1043 | msgstr "" | |
969 |
|
1044 | |||
970 | #: rhodecode/lib/celerylib/tasks.py:270 |
|
1045 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 | |
971 | msgid "password reset link" |
|
1046 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183 | |
972 | msgstr "" |
|
1047 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388 | |
973 |
|
||||
974 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1183 |
|
|||
975 | msgid "Repository no access" |
|
1048 | msgid "Repository no access" | |
976 | msgstr "" |
|
1049 | msgstr "" | |
977 |
|
1050 | |||
978 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 |
|
1051 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 | |
|
1052 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184 | |||
|
1053 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389 | |||
979 | msgid "Repository read access" |
|
1054 | msgid "Repository read access" | |
980 | msgstr "" |
|
1055 | msgstr "" | |
981 |
|
1056 | |||
982 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 |
|
1057 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 | |
|
1058 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185 | |||
|
1059 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390 | |||
983 | msgid "Repository write access" |
|
1060 | msgid "Repository write access" | |
984 | msgstr "" |
|
1061 | msgstr "" | |
985 |
|
1062 | |||
986 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 |
|
1063 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 | |
|
1064 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186 | |||
|
1065 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391 | |||
987 | msgid "Repository admin access" |
|
1066 | msgid "Repository admin access" | |
988 | msgstr "" |
|
1067 | msgstr "" | |
989 |
|
1068 | |||
990 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 |
|
1069 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 | |
|
1070 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188 | |||
|
1071 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294 | |||
991 | msgid "Repositories Group no access" |
|
1072 | msgid "Repositories Group no access" | |
992 | msgstr "" |
|
1073 | msgstr "" | |
993 |
|
1074 | |||
994 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 |
|
1075 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 | |
|
1076 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189 | |||
|
1077 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295 | |||
995 | msgid "Repositories Group read access" |
|
1078 | msgid "Repositories Group read access" | |
996 | msgstr "" |
|
1079 | msgstr "" | |
997 |
|
1080 | |||
998 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 |
|
1081 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 | |
|
1082 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190 | |||
|
1083 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296 | |||
999 | msgid "Repositories Group write access" |
|
1084 | msgid "Repositories Group write access" | |
1000 | msgstr "" |
|
1085 | msgstr "" | |
1001 |
|
1086 | |||
1002 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 |
|
1087 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 | |
|
1088 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191 | |||
|
1089 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297 | |||
1003 | msgid "Repositories Group admin access" |
|
1090 | msgid "Repositories Group admin access" | |
1004 | msgstr "" |
|
1091 | msgstr "" | |
1005 |
|
1092 | |||
1006 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 |
|
1093 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 | |
|
1094 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193 | |||
|
1095 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398 | |||
1007 | msgid "RhodeCode Administrator" |
|
1096 | msgid "RhodeCode Administrator" | |
1008 | msgstr "" |
|
1097 | msgstr "" | |
1009 |
|
1098 | |||
1010 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 |
|
1099 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 | |
|
1100 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194 | |||
|
1101 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399 | |||
1011 | msgid "Repository creation disabled" |
|
1102 | msgid "Repository creation disabled" | |
1012 | msgstr "" |
|
1103 | msgstr "" | |
1013 |
|
1104 | |||
1014 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 |
|
1105 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 | |
|
1106 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195 | |||
|
1107 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400 | |||
1015 | msgid "Repository creation enabled" |
|
1108 | msgid "Repository creation enabled" | |
1016 | msgstr "" |
|
1109 | msgstr "" | |
1017 |
|
1110 | |||
1018 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 |
|
1111 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 | |
|
1112 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196 | |||
|
1113 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401 | |||
1019 | msgid "Repository forking disabled" |
|
1114 | msgid "Repository forking disabled" | |
1020 | msgstr "" |
|
1115 | msgstr "" | |
1021 |
|
1116 | |||
1022 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 |
|
1117 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 | |
|
1118 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197 | |||
|
1119 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402 | |||
1023 | msgid "Repository forking enabled" |
|
1120 | msgid "Repository forking enabled" | |
1024 | msgstr "" |
|
1121 | msgstr "" | |
1025 |
|
1122 | |||
1026 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 |
|
1123 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 | |
|
1124 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198 | |||
|
1125 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403 | |||
1027 | msgid "Register disabled" |
|
1126 | msgid "Register disabled" | |
1028 | msgstr "" |
|
1127 | msgstr "" | |
1029 |
|
1128 | |||
1030 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 |
|
1129 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 | |
|
1130 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199 | |||
|
1131 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404 | |||
1031 | msgid "Register new user with RhodeCode with manual activation" |
|
1132 | msgid "Register new user with RhodeCode with manual activation" | |
1032 | msgstr "" |
|
1133 | msgstr "" | |
1033 |
|
1134 | |||
1034 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 |
|
1135 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 | |
|
1136 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202 | |||
|
1137 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407 | |||
1035 | msgid "Register new user with RhodeCode with auto activation" |
|
1138 | msgid "Register new user with RhodeCode with auto activation" | |
1036 | msgstr "" |
|
1139 | msgstr "" | |
1037 |
|
1140 | |||
1038 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 |
|
1141 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 | |
|
1142 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643 | |||
|
1143 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838 | |||
1039 | msgid "Not Reviewed" |
|
1144 | msgid "Not Reviewed" | |
1040 | msgstr "" |
|
1145 | msgstr "" | |
1041 |
|
1146 | |||
1042 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 |
|
1147 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 | |
|
1148 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644 | |||
|
1149 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839 | |||
1043 | msgid "Approved" |
|
1150 | msgid "Approved" | |
1044 | msgstr "" |
|
1151 | msgstr "" | |
1045 |
|
1152 | |||
1046 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 |
|
1153 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 | |
|
1154 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645 | |||
|
1155 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840 | |||
1047 | msgid "Rejected" |
|
1156 | msgid "Rejected" | |
1048 | msgstr "" |
|
1157 | msgstr "" | |
1049 |
|
1158 | |||
1050 |
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 |
|
1159 | #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 | |
|
1160 | #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646 | |||
|
1161 | #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841 | |||
1051 | msgid "Under Review" |
|
1162 | msgid "Under Review" | |
1052 | msgstr "" |
|
1163 | msgstr "" | |
1053 |
|
1164 | |||
1054 |
#: rhodecode/model/comment.py: |
|
1165 | #: rhodecode/model/comment.py:75 | |
1055 | #, python-format |
|
1166 | #, python-format | |
1056 | msgid "on line %s" |
|
1167 | msgid "on line %s" | |
1057 | msgstr "" |
|
1168 | msgstr "" | |
1058 |
|
1169 | |||
1059 |
#: rhodecode/model/comment.py: |
|
1170 | #: rhodecode/model/comment.py:219 | |
1060 | msgid "[Mention]" |
|
1171 | msgid "[Mention]" | |
1061 | msgstr "" |
|
1172 | msgstr "" | |
1062 |
|
1173 | |||
|
1174 | #: rhodecode/model/db.py:1252 | |||
|
1175 | msgid "top level" | |||
|
1176 | msgstr "" | |||
|
1177 | ||||
|
1178 | #: rhodecode/model/db.py:1393 | |||
|
1179 | msgid "Repository group no access" | |||
|
1180 | msgstr "" | |||
|
1181 | ||||
|
1182 | #: rhodecode/model/db.py:1394 | |||
|
1183 | msgid "Repository group read access" | |||
|
1184 | msgstr "" | |||
|
1185 | ||||
|
1186 | #: rhodecode/model/db.py:1395 | |||
|
1187 | msgid "Repository group write access" | |||
|
1188 | msgstr "" | |||
|
1189 | ||||
|
1190 | #: rhodecode/model/db.py:1396 | |||
|
1191 | msgid "Repository group admin access" | |||
|
1192 | msgstr "" | |||
|
1193 | ||||
1063 | #: rhodecode/model/forms.py:43 |
|
1194 | #: rhodecode/model/forms.py:43 | |
1064 | msgid "Please enter a login" |
|
1195 | msgid "Please enter a login" | |
1065 | msgstr "" |
|
1196 | msgstr "" | |
@@ -1078,204 +1209,237 b' msgstr ""' | |||||
1078 | msgid "Enter %(min)i characters or more" |
|
1209 | msgid "Enter %(min)i characters or more" | |
1079 | msgstr "" |
|
1210 | msgstr "" | |
1080 |
|
1211 | |||
1081 | #: rhodecode/model/notification.py:220 |
|
|||
1082 | #, python-format |
|
|||
1083 | msgid "commented on commit at %(when)s" |
|
|||
1084 | msgstr "" |
|
|||
1085 |
|
||||
1086 | #: rhodecode/model/notification.py:221 |
|
|||
1087 | #, python-format |
|
|||
1088 | msgid "sent message at %(when)s" |
|
|||
1089 | msgstr "" |
|
|||
1090 |
|
||||
1091 | #: rhodecode/model/notification.py:222 |
|
|||
1092 | #, python-format |
|
|||
1093 | msgid "mentioned you at %(when)s" |
|
|||
1094 | msgstr "" |
|
|||
1095 |
|
||||
1096 | #: rhodecode/model/notification.py:223 |
|
|||
1097 | #, python-format |
|
|||
1098 | msgid "registered in RhodeCode at %(when)s" |
|
|||
1099 | msgstr "" |
|
|||
1100 |
|
||||
1101 | #: rhodecode/model/notification.py:224 |
|
1212 | #: rhodecode/model/notification.py:224 | |
1102 | #, python-format |
|
1213 | #, python-format | |
1103 |
msgid " |
|
1214 | msgid "%(user)s commented on changeset at %(when)s" | |
1104 | msgstr "" |
|
1215 | msgstr "" | |
1105 |
|
1216 | |||
1106 | #: rhodecode/model/notification.py:225 |
|
1217 | #: rhodecode/model/notification.py:225 | |
1107 | #, python-format |
|
1218 | #, python-format | |
1108 |
msgid " |
|
1219 | msgid "%(user)s sent message at %(when)s" | |
1109 | msgstr "" |
|
1220 | msgstr "" | |
1110 |
|
1221 | |||
1111 |
#: rhodecode/model/ |
|
1222 | #: rhodecode/model/notification.py:226 | |
|
1223 | #, python-format | |||
|
1224 | msgid "%(user)s mentioned you at %(when)s" | |||
|
1225 | msgstr "" | |||
|
1226 | ||||
|
1227 | #: rhodecode/model/notification.py:227 | |||
|
1228 | #, python-format | |||
|
1229 | msgid "%(user)s registered in RhodeCode at %(when)s" | |||
|
1230 | msgstr "" | |||
|
1231 | ||||
|
1232 | #: rhodecode/model/notification.py:228 | |||
1112 | #, python-format |
|
1233 | #, python-format | |
1113 |
msgid "%(user)s |
|
1234 | msgid "%(user)s opened new pull request at %(when)s" | |
1114 | msgstr "" |
|
1235 | msgstr "" | |
1115 |
|
1236 | |||
1116 |
#: rhodecode/model/ |
|
1237 | #: rhodecode/model/notification.py:229 | |
|
1238 | #, python-format | |||
|
1239 | msgid "%(user)s commented on pull request at %(when)s" | |||
|
1240 | msgstr "" | |||
|
1241 | ||||
|
1242 | #: rhodecode/model/pull_request.py:104 | |||
|
1243 | #, python-format | |||
|
1244 | msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s" | |||
|
1245 | msgstr "" | |||
|
1246 | ||||
|
1247 | #: rhodecode/model/scm.py:598 | |||
1117 | msgid "latest tip" |
|
1248 | msgid "latest tip" | |
1118 | msgstr "" |
|
1249 | msgstr "" | |
1119 |
|
1250 | |||
1120 | #: rhodecode/model/user.py:232 |
|
1251 | #: rhodecode/model/user.py:232 | |
1121 |
msgid " |
|
1252 | msgid "New user registration" | |
1122 | msgstr "" |
|
1253 | msgstr "" | |
1123 |
|
1254 | |||
1124 | #: rhodecode/model/user.py:257 rhodecode/model/user.py:281 |
|
1255 | #: rhodecode/model/user.py:257 rhodecode/model/user.py:281 | |
|
1256 | msgid "You can't Edit this user since it's crucial for entire application" | |||
|
1257 | msgstr "" | |||
|
1258 | ||||
1125 | #: rhodecode/model/user.py:303 |
|
1259 | #: rhodecode/model/user.py:303 | |
1126 | msgid "You can't Edit this user since it's crucial for entire application" |
|
|||
1127 | msgstr "" |
|
|||
1128 |
|
||||
1129 | #: rhodecode/model/user.py:327 |
|
|||
1130 | msgid "You can't remove this user since it's crucial for entire application" |
|
1260 | msgid "You can't remove this user since it's crucial for entire application" | |
1131 | msgstr "" |
|
1261 | msgstr "" | |
1132 |
|
1262 | |||
1133 |
#: rhodecode/model/user.py:3 |
|
1263 | #: rhodecode/model/user.py:309 | |
1134 | #, python-format |
|
1264 | #, python-format | |
1135 | msgid "" |
|
1265 | msgid "" | |
1136 | "user \"%s\" still owns %s repositories and cannot be removed. Switch " |
|
1266 | "user \"%s\" still owns %s repositories and cannot be removed. Switch " | |
1137 | "owners or remove those repositories. %s" |
|
1267 | "owners or remove those repositories. %s" | |
1138 | msgstr "" |
|
1268 | msgstr "" | |
1139 |
|
1269 | |||
1140 | #: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37 |
|
1270 | #: rhodecode/model/user.py:334 | |
|
1271 | msgid "Password reset link" | |||
|
1272 | msgstr "" | |||
|
1273 | ||||
|
1274 | #: rhodecode/model/user.py:366 | |||
|
1275 | msgid "Your new password" | |||
|
1276 | msgstr "" | |||
|
1277 | ||||
|
1278 | #: rhodecode/model/user.py:367 | |||
|
1279 | #, python-format | |||
|
1280 | msgid "Your new RhodeCode password:%s" | |||
|
1281 | msgstr "" | |||
|
1282 | ||||
|
1283 | #: rhodecode/model/validators.py:38 rhodecode/model/validators.py:39 | |||
1141 | msgid "Value cannot be an empty list" |
|
1284 | msgid "Value cannot be an empty list" | |
1142 | msgstr "" |
|
1285 | msgstr "" | |
1143 |
|
1286 | |||
1144 | #: rhodecode/model/validators.py:83 |
|
|||
1145 | #, python-format |
|
|||
1146 | msgid "Username \"%(username)s\" already exists" |
|
|||
1147 | msgstr "" |
|
|||
1148 |
|
||||
1149 | #: rhodecode/model/validators.py:85 |
|
1287 | #: rhodecode/model/validators.py:85 | |
1150 | #, python-format |
|
1288 | #, python-format | |
1151 |
msgid "Username \"%(username)s\" |
|
1289 | msgid "Username \"%(username)s\" already exists" | |
1152 | msgstr "" |
|
1290 | msgstr "" | |
1153 |
|
1291 | |||
1154 | #: rhodecode/model/validators.py:87 |
|
1292 | #: rhodecode/model/validators.py:87 | |
|
1293 | #, python-format | |||
|
1294 | msgid "Username \"%(username)s\" is forbidden" | |||
|
1295 | msgstr "" | |||
|
1296 | ||||
|
1297 | #: rhodecode/model/validators.py:89 | |||
1155 | msgid "" |
|
1298 | msgid "" | |
1156 | "Username may only contain alphanumeric characters underscores, periods or" |
|
1299 | "Username may only contain alphanumeric characters underscores, periods or" | |
1157 | " dashes and must begin with alphanumeric character" |
|
1300 | " dashes and must begin with alphanumeric character" | |
1158 | msgstr "" |
|
1301 | msgstr "" | |
1159 |
|
1302 | |||
1160 |
#: rhodecode/model/validators.py:11 |
|
1303 | #: rhodecode/model/validators.py:117 | |
1161 | #, python-format |
|
1304 | #, python-format | |
1162 | msgid "Username %(username)s is not valid" |
|
1305 | msgid "Username %(username)s is not valid" | |
1163 | msgstr "" |
|
1306 | msgstr "" | |
1164 |
|
1307 | |||
1165 |
#: rhodecode/model/validators.py:13 |
|
1308 | #: rhodecode/model/validators.py:136 | |
1166 |
msgid "Invalid user |
|
1309 | msgid "Invalid user group name" | |
1167 | msgstr "" |
|
|||
1168 |
|
||||
1169 | #: rhodecode/model/validators.py:135 |
|
|||
1170 | #, python-format |
|
|||
1171 | msgid "Users group \"%(usersgroup)s\" already exists" |
|
|||
1172 | msgstr "" |
|
1310 | msgstr "" | |
1173 |
|
1311 | |||
1174 | #: rhodecode/model/validators.py:137 |
|
1312 | #: rhodecode/model/validators.py:137 | |
|
1313 | #, python-format | |||
|
1314 | msgid "User group \"%(usergroup)s\" already exists" | |||
|
1315 | msgstr "" | |||
|
1316 | ||||
|
1317 | #: rhodecode/model/validators.py:139 | |||
1175 | msgid "" |
|
1318 | msgid "" | |
1176 |
"user |
|
1319 | "user group name may only contain alphanumeric characters underscores, " | |
1177 | "periods or dashes and must begin with alphanumeric character" |
|
1320 | "periods or dashes and must begin with alphanumeric character" | |
1178 | msgstr "" |
|
1321 | msgstr "" | |
1179 |
|
1322 | |||
1180 |
#: rhodecode/model/validators.py:17 |
|
1323 | #: rhodecode/model/validators.py:177 | |
1181 | msgid "Cannot assign this group as parent" |
|
1324 | msgid "Cannot assign this group as parent" | |
1182 | msgstr "" |
|
1325 | msgstr "" | |
1183 |
|
1326 | |||
1184 | #: rhodecode/model/validators.py:176 |
|
|||
1185 | #, python-format |
|
|||
1186 | msgid "Group \"%(group_name)s\" already exists" |
|
|||
1187 | msgstr "" |
|
|||
1188 |
|
||||
1189 | #: rhodecode/model/validators.py:178 |
|
1327 | #: rhodecode/model/validators.py:178 | |
1190 | #, python-format |
|
1328 | #, python-format | |
|
1329 | msgid "Group \"%(group_name)s\" already exists" | |||
|
1330 | msgstr "" | |||
|
1331 | ||||
|
1332 | #: rhodecode/model/validators.py:180 | |||
|
1333 | #, python-format | |||
1191 | msgid "Repository with name \"%(group_name)s\" already exists" |
|
1334 | msgid "Repository with name \"%(group_name)s\" already exists" | |
1192 | msgstr "" |
|
1335 | msgstr "" | |
1193 |
|
1336 | |||
1194 |
#: rhodecode/model/validators.py:23 |
|
1337 | #: rhodecode/model/validators.py:238 | |
1195 | msgid "Invalid characters (non-ascii) in password" |
|
1338 | msgid "Invalid characters (non-ascii) in password" | |
1196 | msgstr "" |
|
1339 | msgstr "" | |
1197 |
|
1340 | |||
1198 |
#: rhodecode/model/validators.py:25 |
|
1341 | #: rhodecode/model/validators.py:253 | |
1199 | msgid "Passwords do not match" |
|
1342 | msgid "Passwords do not match" | |
1200 | msgstr "" |
|
1343 | msgstr "" | |
1201 |
|
1344 | |||
1202 | #: rhodecode/model/validators.py:268 |
|
|||
1203 | msgid "invalid password" |
|
|||
1204 | msgstr "" |
|
|||
1205 |
|
||||
1206 | #: rhodecode/model/validators.py:269 |
|
|||
1207 | msgid "invalid user name" |
|
|||
1208 | msgstr "" |
|
|||
1209 |
|
||||
1210 | #: rhodecode/model/validators.py:270 |
|
1345 | #: rhodecode/model/validators.py:270 | |
|
1346 | msgid "invalid password" | |||
|
1347 | msgstr "" | |||
|
1348 | ||||
|
1349 | #: rhodecode/model/validators.py:271 | |||
|
1350 | msgid "invalid user name" | |||
|
1351 | msgstr "" | |||
|
1352 | ||||
|
1353 | #: rhodecode/model/validators.py:272 | |||
1211 | msgid "Your account is disabled" |
|
1354 | msgid "Your account is disabled" | |
1212 | msgstr "" |
|
1355 | msgstr "" | |
1213 |
|
1356 | |||
1214 | #: rhodecode/model/validators.py:314 |
|
|||
1215 | #, python-format |
|
|||
1216 | msgid "Repository name %(repo)s is disallowed" |
|
|||
1217 | msgstr "" |
|
|||
1218 |
|
||||
1219 | #: rhodecode/model/validators.py:316 |
|
1357 | #: rhodecode/model/validators.py:316 | |
1220 | #, python-format |
|
1358 | #, python-format | |
|
1359 | msgid "Repository name %(repo)s is disallowed" | |||
|
1360 | msgstr "" | |||
|
1361 | ||||
|
1362 | #: rhodecode/model/validators.py:318 | |||
|
1363 | #, python-format | |||
1221 | msgid "Repository named %(repo)s already exists" |
|
1364 | msgid "Repository named %(repo)s already exists" | |
1222 | msgstr "" |
|
1365 | msgstr "" | |
1223 |
|
1366 | |||
1224 | #: rhodecode/model/validators.py:317 |
|
|||
1225 | #, python-format |
|
|||
1226 | msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" |
|
|||
1227 | msgstr "" |
|
|||
1228 |
|
||||
1229 | #: rhodecode/model/validators.py:319 |
|
1367 | #: rhodecode/model/validators.py:319 | |
1230 | #, python-format |
|
1368 | #, python-format | |
1231 |
msgid "Repositor |
|
1369 | msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" | |
1232 | msgstr "" |
|
1370 | msgstr "" | |
1233 |
|
1371 | |||
1234 |
#: rhodecode/model/validators.py: |
|
1372 | #: rhodecode/model/validators.py:321 | |
|
1373 | #, python-format | |||
|
1374 | msgid "Repository group with name \"%(repo)s\" already exists" | |||
|
1375 | msgstr "" | |||
|
1376 | ||||
|
1377 | #: rhodecode/model/validators.py:438 | |||
1235 | msgid "invalid clone url" |
|
1378 | msgid "invalid clone url" | |
1236 | msgstr "" |
|
1379 | msgstr "" | |
1237 |
|
1380 | |||
1238 |
#: rhodecode/model/validators.py:43 |
|
1381 | #: rhodecode/model/validators.py:439 | |
1239 | msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url" |
|
1382 | msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url" | |
1240 | msgstr "" |
|
1383 | msgstr "" | |
1241 |
|
1384 | |||
1242 |
#: rhodecode/model/validators.py:4 |
|
1385 | #: rhodecode/model/validators.py:464 | |
1243 | msgid "Fork have to be the same type as parent" |
|
1386 | msgid "Fork have to be the same type as parent" | |
1244 | msgstr "" |
|
1387 | msgstr "" | |
1245 |
|
1388 | |||
1246 |
#: rhodecode/model/validators.py:47 |
|
1389 | #: rhodecode/model/validators.py:479 | |
1247 | msgid "You don't have permissions to create repository in this group" |
|
1390 | msgid "You don't have permissions to create repository in this group" | |
1248 | msgstr "" |
|
1391 | msgstr "" | |
1249 |
|
1392 | |||
1250 |
#: rhodecode/model/validators.py:4 |
|
1393 | #: rhodecode/model/validators.py:481 | |
1251 | msgid "This username or users group name is not valid" |
|
1394 | msgid "no permission to create repository in root location" | |
1252 | msgstr "" |
|
1395 | msgstr "" | |
1253 |
|
1396 | |||
1254 |
#: rhodecode/model/validators.py:5 |
|
1397 | #: rhodecode/model/validators.py:518 | |
|
1398 | msgid "You don't have permissions to create a group in this location" | |||
|
1399 | msgstr "" | |||
|
1400 | ||||
|
1401 | #: rhodecode/model/validators.py:557 | |||
|
1402 | msgid "This username or user group name is not valid" | |||
|
1403 | msgstr "" | |||
|
1404 | ||||
|
1405 | #: rhodecode/model/validators.py:650 | |||
1255 | msgid "This is not a valid path" |
|
1406 | msgid "This is not a valid path" | |
1256 | msgstr "" |
|
1407 | msgstr "" | |
1257 |
|
1408 | |||
1258 |
#: rhodecode/model/validators.py:6 |
|
1409 | #: rhodecode/model/validators.py:665 | |
1259 | msgid "This e-mail address is already taken" |
|
1410 | msgid "This e-mail address is already taken" | |
1260 | msgstr "" |
|
1411 | msgstr "" | |
1261 |
|
1412 | |||
1262 |
#: rhodecode/model/validators.py:6 |
|
1413 | #: rhodecode/model/validators.py:685 | |
1263 | #, python-format |
|
1414 | #, python-format | |
1264 | msgid "e-mail \"%(email)s\" does not exist." |
|
1415 | msgid "e-mail \"%(email)s\" does not exist." | |
1265 | msgstr "" |
|
1416 | msgstr "" | |
1266 |
|
1417 | |||
1267 |
#: rhodecode/model/validators.py: |
|
1418 | #: rhodecode/model/validators.py:722 | |
1268 | msgid "" |
|
1419 | msgid "" | |
1269 | "The LDAP Login attribute of the CN must be specified - this is the name " |
|
1420 | "The LDAP Login attribute of the CN must be specified - this is the name " | |
1270 | "of the attribute that is equivalent to \"username\"" |
|
1421 | "of the attribute that is equivalent to \"username\"" | |
1271 | msgstr "" |
|
1422 | msgstr "" | |
1272 |
|
1423 | |||
1273 |
#: rhodecode/model/validators.py: |
|
1424 | #: rhodecode/model/validators.py:735 | |
1274 | #, python-format |
|
1425 | #, python-format | |
1275 | msgid "Revisions %(revs)s are already part of pull request or have set status" |
|
1426 | msgid "Revisions %(revs)s are already part of pull request or have set status" | |
1276 | msgstr "" |
|
1427 | msgstr "" | |
1277 |
|
1428 | |||
1278 | #: rhodecode/templates/index.html:3 |
|
1429 | #: rhodecode/model/validators.py:767 | |
|
1430 | msgid "Please enter a valid IPv4 or IpV6 address" | |||
|
1431 | msgstr "" | |||
|
1432 | ||||
|
1433 | #: rhodecode/model/validators.py:768 | |||
|
1434 | #, python-format | |||
|
1435 | msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" | |||
|
1436 | msgstr "" | |||
|
1437 | ||||
|
1438 | #: rhodecode/model/validators.py:800 | |||
|
1439 | msgid "Key name can only consist of letters, underscore, dash or numbers" | |||
|
1440 | msgstr "" | |||
|
1441 | ||||
|
1442 | #: rhodecode/templates/index.html:5 | |||
1279 | msgid "Dashboard" |
|
1443 | msgid "Dashboard" | |
1280 | msgstr "" |
|
1444 | msgstr "" | |
1281 |
|
1445 | |||
@@ -1284,205 +1448,226 b' msgstr ""' | |||||
1284 | #: rhodecode/templates/admin/repos/repos.html:9 |
|
1448 | #: rhodecode/templates/admin/repos/repos.html:9 | |
1285 | #: rhodecode/templates/admin/users/user_edit_my_account.html:31 |
|
1449 | #: rhodecode/templates/admin/users/user_edit_my_account.html:31 | |
1286 | #: rhodecode/templates/admin/users/users.html:9 |
|
1450 | #: rhodecode/templates/admin/users/users.html:9 | |
1287 |
#: rhodecode/templates/bookmarks/bookmarks.html: |
|
1451 | #: rhodecode/templates/bookmarks/bookmarks.html:9 | |
1288 | #: rhodecode/templates/branches/branches.html:9 |
|
1452 | #: rhodecode/templates/branches/branches.html:9 | |
1289 | #: rhodecode/templates/journal/journal.html:9 |
|
1453 | #: rhodecode/templates/journal/journal.html:9 | |
1290 |
#: rhodecode/templates/journal/journal.html:4 |
|
1454 | #: rhodecode/templates/journal/journal.html:46 | |
1291 |
#: rhodecode/templates/ |
|
1455 | #: rhodecode/templates/journal/journal.html:47 | |
|
1456 | #: rhodecode/templates/tags/tags.html:9 | |||
1292 | msgid "quick filter..." |
|
1457 | msgid "quick filter..." | |
1293 | msgstr "" |
|
1458 | msgstr "" | |
1294 |
|
1459 | |||
1295 | #: rhodecode/templates/index_base.html:6 |
|
1460 | #: rhodecode/templates/index_base.html:6 | |
1296 | #: rhodecode/templates/admin/repos/repos.html:9 |
|
1461 | #: rhodecode/templates/admin/repos/repos.html:9 | |
1297 | #: rhodecode/templates/base/base.html:233 |
|
|||
1298 | msgid "repositories" |
|
1462 | msgid "repositories" | |
1299 | msgstr "" |
|
1463 | msgstr "" | |
1300 |
|
1464 | |||
1301 | #: rhodecode/templates/index_base.html:13 |
|
1465 | #: rhodecode/templates/index_base.html:13 | |
1302 |
#: rhodecode/templates/index_base.html:1 |
|
1466 | #: rhodecode/templates/index_base.html:18 | |
|
1467 | #: rhodecode/templates/admin/repos/repo_add.html:5 | |||
1303 | #: rhodecode/templates/admin/repos/repos.html:21 |
|
1468 | #: rhodecode/templates/admin/repos/repos.html:21 | |
1304 | msgid "ADD REPOSITORY" |
|
1469 | msgid "Add repository" | |
1305 | msgstr "" |
|
1470 | msgstr "" | |
1306 |
|
1471 | |||
1307 |
#: rhodecode/templates/index_base.html: |
|
1472 | #: rhodecode/templates/index_base.html:15 | |
1308 |
#: rhodecode/templates/index_base.html: |
|
1473 | #: rhodecode/templates/index_base.html:20 | |
1309 |
#: rhodecode/templates/admin/repos_groups/repos_groups_ |
|
1474 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:31 | |
1310 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32 |
|
1475 | msgid "Add group" | |
1311 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33 |
|
1476 | msgstr "" | |
1312 | #: rhodecode/templates/admin/users_groups/users_group_add.html:32 |
|
1477 | ||
1313 |
#: rhodecode/templates/ |
|
1478 | #: rhodecode/templates/index_base.html:27 | |
1314 |
msgid " |
|
1479 | msgid "Edit group" | |
1315 | msgstr "" |
|
1480 | msgstr "" | |
1316 |
|
1481 | |||
1317 |
#: rhodecode/templates/index_base.html: |
|
1482 | #: rhodecode/templates/index_base.html:27 | |
1318 | #: rhodecode/templates/index_base.html:72 |
|
1483 | msgid "You have admin right to this group, and can edit it" | |
1319 | #: rhodecode/templates/index_base.html:138 |
|
|||
1320 | #: rhodecode/templates/index_base.html:176 |
|
|||
1321 | #: rhodecode/templates/index_base.html:266 |
|
|||
1322 | #: rhodecode/templates/admin/repos/repo_add_base.html:56 |
|
|||
1323 | #: rhodecode/templates/admin/repos/repo_edit.html:75 |
|
|||
1324 | #: rhodecode/templates/admin/repos/repos.html:72 |
|
|||
1325 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41 |
|
|||
1326 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41 |
|
|||
1327 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34 |
|
|||
1328 | #: rhodecode/templates/forks/fork.html:59 |
|
|||
1329 | #: rhodecode/templates/settings/repo_settings.html:66 |
|
|||
1330 | #: rhodecode/templates/summary/summary.html:114 |
|
|||
1331 | msgid "Description" |
|
|||
1332 | msgstr "" |
|
1484 | msgstr "" | |
1333 |
|
1485 | |||
1334 | #: rhodecode/templates/index_base.html:40 |
|
1486 | #: rhodecode/templates/index_base.html:40 | |
1335 |
#: rhodecode/templates/ |
|
1487 | #: rhodecode/templates/index_base.html:140 | |
1336 | msgid "Repositories group" |
|
1488 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33 | |
1337 | msgstr "" |
|
1489 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38 | |
1338 |
|
1490 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43 | ||
1339 |
#: rhodecode/templates/ |
|
1491 | #: rhodecode/templates/admin/users_groups/users_group_add.html:32 | |
1340 |
#: rhodecode/templates/ |
|
1492 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:33 | |
1341 |
#: rhodecode/templates/ |
|
1493 | #: rhodecode/templates/admin/users_groups/users_groups.html:34 | |
|
1494 | msgid "Group name" | |||
|
1495 | msgstr "" | |||
|
1496 | ||||
|
1497 | #: rhodecode/templates/index_base.html:41 | |||
|
1498 | #: rhodecode/templates/index_base.html:83 | |||
|
1499 | #: rhodecode/templates/index_base.html:142 | |||
|
1500 | #: rhodecode/templates/index_base.html:180 | |||
|
1501 | #: rhodecode/templates/index_base.html:270 | |||
|
1502 | #: rhodecode/templates/admin/repos/repo_add_base.html:56 | |||
|
1503 | #: rhodecode/templates/admin/repos/repo_edit.html:75 | |||
|
1504 | #: rhodecode/templates/admin/repos/repos.html:73 | |||
|
1505 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42 | |||
|
1506 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47 | |||
|
1507 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44 | |||
|
1508 | #: rhodecode/templates/forks/fork.html:56 | |||
|
1509 | #: rhodecode/templates/pullrequests/pullrequest.html:101 | |||
|
1510 | #: rhodecode/templates/summary/summary.html:106 | |||
|
1511 | msgid "Description" | |||
|
1512 | msgstr "" | |||
|
1513 | ||||
|
1514 | #: rhodecode/templates/index_base.html:51 | |||
|
1515 | #: rhodecode/templates/admin/permissions/permissions.html:55 | |||
|
1516 | #: rhodecode/templates/admin/repos/repo_add_base.html:29 | |||
|
1517 | #: rhodecode/templates/admin/repos/repo_edit.html:49 | |||
|
1518 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:57 | |||
|
1519 | #: rhodecode/templates/forks/fork.html:47 | |||
|
1520 | msgid "Repository group" | |||
|
1521 | msgstr "" | |||
|
1522 | ||||
|
1523 | #: rhodecode/templates/index_base.html:82 | |||
|
1524 | #: rhodecode/templates/index_base.html:178 | |||
|
1525 | #: rhodecode/templates/index_base.html:268 | |||
1342 | #: rhodecode/templates/admin/repos/repo_add_base.html:9 |
|
1526 | #: rhodecode/templates/admin/repos/repo_add_base.html:9 | |
1343 | #: rhodecode/templates/admin/repos/repo_edit.html:32 |
|
1527 | #: rhodecode/templates/admin/repos/repo_edit.html:32 | |
1344 |
#: rhodecode/templates/admin/repos/repos.html:7 |
|
1528 | #: rhodecode/templates/admin/repos/repos.html:71 | |
1345 |
#: rhodecode/templates/admin/users/user_edit.html:1 |
|
1529 | #: rhodecode/templates/admin/users/user_edit_my_account.html:172 | |
1346 |
#: rhodecode/templates/ |
|
1530 | #: rhodecode/templates/base/perms_summary.html:14 | |
1347 | #: rhodecode/templates/admin/users/user_edit_my_account.html:180 |
|
1531 | #: rhodecode/templates/bookmarks/bookmarks.html:34 | |
1348 | #: rhodecode/templates/admin/users/user_edit_my_account.html:216 |
|
|||
1349 | #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6 |
|
|||
1350 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:184 |
|
|||
1351 | #: rhodecode/templates/bookmarks/bookmarks.html:36 |
|
|||
1352 | #: rhodecode/templates/bookmarks/bookmarks_data.html:6 |
|
1532 | #: rhodecode/templates/bookmarks/bookmarks_data.html:6 | |
1353 |
#: rhodecode/templates/branches/branches.html: |
|
1533 | #: rhodecode/templates/branches/branches.html:47 | |
1354 | #: rhodecode/templates/branches/branches_data.html:6 |
|
1534 | #: rhodecode/templates/branches/branches_data.html:6 | |
1355 | #: rhodecode/templates/files/files_browser.html:47 |
|
1535 | #: rhodecode/templates/files/files_browser.html:47 | |
1356 |
#: rhodecode/templates/journal/journal.html: |
|
1536 | #: rhodecode/templates/journal/journal.html:193 | |
1357 |
#: rhodecode/templates/journal/journal.html: |
|
1537 | #: rhodecode/templates/journal/journal.html:296 | |
1358 |
#: rhodecode/templates/ |
|
1538 | #: rhodecode/templates/summary/summary.html:55 | |
1359 |
#: rhodecode/templates/s |
|
1539 | #: rhodecode/templates/summary/summary.html:124 | |
1360 |
#: rhodecode/templates/ |
|
1540 | #: rhodecode/templates/tags/tags.html:48 | |
1361 | #: rhodecode/templates/summary/summary.html:132 |
|
|||
1362 | #: rhodecode/templates/tags/tags.html:51 |
|
|||
1363 | #: rhodecode/templates/tags/tags_data.html:6 |
|
1541 | #: rhodecode/templates/tags/tags_data.html:6 | |
1364 | msgid "Name" |
|
1542 | msgid "Name" | |
1365 | msgstr "" |
|
1543 | msgstr "" | |
1366 |
|
1544 | |||
1367 |
#: rhodecode/templates/index_base.html: |
|
1545 | #: rhodecode/templates/index_base.html:84 | |
1368 | msgid "Last change" |
|
1546 | msgid "Last change" | |
1369 | msgstr "" |
|
1547 | msgstr "" | |
1370 |
|
1548 | |||
1371 |
#: rhodecode/templates/index_base.html: |
|
1549 | #: rhodecode/templates/index_base.html:85 | |
1372 |
#: rhodecode/templates/index_base.html:1 |
|
1550 | #: rhodecode/templates/index_base.html:183 | |
1373 |
#: rhodecode/templates/ |
|
1551 | #: rhodecode/templates/index_base.html:273 | |
1374 |
#: rhodecode/templates/ |
|
1552 | #: rhodecode/templates/admin/repos/repos.html:74 | |
|
1553 | #: rhodecode/templates/admin/users/user_edit_my_account.html:174 | |||
|
1554 | #: rhodecode/templates/journal/journal.html:195 | |||
|
1555 | #: rhodecode/templates/journal/journal.html:298 | |||
1375 | msgid "Tip" |
|
1556 | msgid "Tip" | |
1376 | msgstr "" |
|
1557 | msgstr "" | |
1377 |
|
1558 | |||
1378 |
#: rhodecode/templates/index_base.html: |
|
1559 | #: rhodecode/templates/index_base.html:86 | |
1379 |
#: rhodecode/templates/index_base.html:18 |
|
1560 | #: rhodecode/templates/index_base.html:185 | |
1380 |
#: rhodecode/templates/index_base.html:2 |
|
1561 | #: rhodecode/templates/index_base.html:275 | |
1381 | #: rhodecode/templates/admin/repos/repo_edit.html:121 |
|
1562 | #: rhodecode/templates/admin/repos/repo_edit.html:121 | |
1382 |
#: rhodecode/templates/admin/repos/repos.html:7 |
|
1563 | #: rhodecode/templates/admin/repos/repos.html:76 | |
1383 | msgid "Owner" |
|
1564 | msgid "Owner" | |
1384 | msgstr "" |
|
1565 | msgstr "" | |
1385 |
|
1566 | |||
1386 |
#: rhodecode/templates/index_base.html:7 |
|
1567 | #: rhodecode/templates/index_base.html:87 | |
1387 | #: rhodecode/templates/summary/summary.html:48 |
|
|||
1388 | #: rhodecode/templates/summary/summary.html:51 |
|
|||
1389 | msgid "RSS" |
|
|||
1390 | msgstr "" |
|
|||
1391 |
|
||||
1392 | #: rhodecode/templates/index_base.html:77 |
|
|||
1393 | msgid "Atom" |
|
1568 | msgid "Atom" | |
1394 | msgstr "" |
|
1569 | msgstr "" | |
1395 |
|
1570 | |||
1396 |
#: rhodecode/templates/index_base.html:1 |
|
1571 | #: rhodecode/templates/index_base.html:171 | |
1397 |
#: rhodecode/templates/index_base.html:20 |
|
1572 | #: rhodecode/templates/index_base.html:209 | |
1398 |
#: rhodecode/templates/index_base.html:29 |
|
1573 | #: rhodecode/templates/index_base.html:296 | |
1399 |
#: rhodecode/templates/admin/repos/repos.html:9 |
|
1574 | #: rhodecode/templates/admin/repos/repos.html:97 | |
1400 |
#: rhodecode/templates/admin/users/user_edit_my_account.html: |
|
1575 | #: rhodecode/templates/admin/users/user_edit_my_account.html:196 | |
1401 | #: rhodecode/templates/admin/users/users.html:107 |
|
1576 | #: rhodecode/templates/admin/users/users.html:107 | |
1402 |
#: rhodecode/templates/bookmarks/bookmarks.html: |
|
1577 | #: rhodecode/templates/bookmarks/bookmarks.html:58 | |
1403 |
#: rhodecode/templates/branches/branches.html:7 |
|
1578 | #: rhodecode/templates/branches/branches.html:73 | |
1404 |
#: rhodecode/templates/journal/journal.html:2 |
|
1579 | #: rhodecode/templates/journal/journal.html:217 | |
1405 |
#: rhodecode/templates/ |
|
1580 | #: rhodecode/templates/journal/journal.html:320 | |
|
1581 | #: rhodecode/templates/tags/tags.html:74 | |||
1406 | msgid "Click to sort ascending" |
|
1582 | msgid "Click to sort ascending" | |
1407 | msgstr "" |
|
1583 | msgstr "" | |
1408 |
|
1584 | |||
1409 |
#: rhodecode/templates/index_base.html:1 |
|
1585 | #: rhodecode/templates/index_base.html:172 | |
1410 |
#: rhodecode/templates/index_base.html:20 |
|
1586 | #: rhodecode/templates/index_base.html:210 | |
1411 |
#: rhodecode/templates/index_base.html:29 |
|
1587 | #: rhodecode/templates/index_base.html:297 | |
1412 |
#: rhodecode/templates/admin/repos/repos.html:9 |
|
1588 | #: rhodecode/templates/admin/repos/repos.html:98 | |
1413 |
#: rhodecode/templates/admin/users/user_edit_my_account.html: |
|
1589 | #: rhodecode/templates/admin/users/user_edit_my_account.html:197 | |
1414 | #: rhodecode/templates/admin/users/users.html:108 |
|
1590 | #: rhodecode/templates/admin/users/users.html:108 | |
1415 |
#: rhodecode/templates/bookmarks/bookmarks.html: |
|
1591 | #: rhodecode/templates/bookmarks/bookmarks.html:59 | |
1416 |
#: rhodecode/templates/branches/branches.html:7 |
|
1592 | #: rhodecode/templates/branches/branches.html:74 | |
1417 |
#: rhodecode/templates/journal/journal.html:2 |
|
1593 | #: rhodecode/templates/journal/journal.html:218 | |
1418 |
#: rhodecode/templates/ |
|
1594 | #: rhodecode/templates/journal/journal.html:321 | |
|
1595 | #: rhodecode/templates/tags/tags.html:75 | |||
1419 | msgid "Click to sort descending" |
|
1596 | msgid "Click to sort descending" | |
1420 | msgstr "" |
|
1597 | msgstr "" | |
1421 |
|
1598 | |||
1422 |
#: rhodecode/templates/index_base.html:1 |
|
1599 | #: rhodecode/templates/index_base.html:181 | |
1423 |
#: rhodecode/templates/index_base.html:2 |
|
1600 | #: rhodecode/templates/index_base.html:271 | |
1424 | msgid "Last Change" |
|
1601 | msgid "Last Change" | |
1425 | msgstr "" |
|
1602 | msgstr "" | |
1426 |
|
1603 | |||
1427 | #: rhodecode/templates/index_base.html:209 |
|
|||
1428 | #: rhodecode/templates/index_base.html:293 |
|
|||
1429 | #: rhodecode/templates/admin/repos/repos.html:96 |
|
|||
1430 | #: rhodecode/templates/admin/users/user_edit_my_account.html:204 |
|
|||
1431 | #: rhodecode/templates/admin/users/users.html:109 |
|
|||
1432 | #: rhodecode/templates/bookmarks/bookmarks.html:62 |
|
|||
1433 | #: rhodecode/templates/branches/branches.html:78 |
|
|||
1434 | #: rhodecode/templates/journal/journal.html:223 |
|
|||
1435 | #: rhodecode/templates/tags/tags.html:79 |
|
|||
1436 | msgid "No records found." |
|
|||
1437 | msgstr "" |
|
|||
1438 |
|
||||
1439 | #: rhodecode/templates/index_base.html:210 |
|
|||
1440 | #: rhodecode/templates/index_base.html:294 |
|
|||
1441 | #: rhodecode/templates/admin/repos/repos.html:97 |
|
|||
1442 | #: rhodecode/templates/admin/users/user_edit_my_account.html:205 |
|
|||
1443 | #: rhodecode/templates/admin/users/users.html:110 |
|
|||
1444 | #: rhodecode/templates/bookmarks/bookmarks.html:63 |
|
|||
1445 | #: rhodecode/templates/branches/branches.html:79 |
|
|||
1446 | #: rhodecode/templates/journal/journal.html:224 |
|
|||
1447 | #: rhodecode/templates/tags/tags.html:80 |
|
|||
1448 | msgid "Data error." |
|
|||
1449 | msgstr "" |
|
|||
1450 |
|
||||
1451 | #: rhodecode/templates/index_base.html:211 |
|
1604 | #: rhodecode/templates/index_base.html:211 | |
1452 |
#: rhodecode/templates/ |
|
1605 | #: rhodecode/templates/admin/repos/repos.html:99 | |
1453 |
#: rhodecode/templates/admin/ |
|
1606 | #: rhodecode/templates/admin/users/user_edit_my_account.html:198 | |
1454 |
#: rhodecode/templates/admin/users/user |
|
1607 | #: rhodecode/templates/admin/users/users.html:109 | |
|
1608 | #: rhodecode/templates/bookmarks/bookmarks.html:60 | |||
|
1609 | #: rhodecode/templates/branches/branches.html:75 | |||
|
1610 | #: rhodecode/templates/journal/journal.html:219 | |||
|
1611 | #: rhodecode/templates/journal/journal.html:322 | |||
|
1612 | #: rhodecode/templates/tags/tags.html:76 | |||
|
1613 | msgid "No records found." | |||
|
1614 | msgstr "" | |||
|
1615 | ||||
|
1616 | #: rhodecode/templates/index_base.html:212 | |||
|
1617 | #: rhodecode/templates/index_base.html:299 | |||
|
1618 | #: rhodecode/templates/admin/repos/repos.html:100 | |||
|
1619 | #: rhodecode/templates/admin/users/user_edit_my_account.html:199 | |||
|
1620 | #: rhodecode/templates/admin/users/users.html:110 | |||
|
1621 | #: rhodecode/templates/bookmarks/bookmarks.html:61 | |||
|
1622 | #: rhodecode/templates/branches/branches.html:76 | |||
|
1623 | #: rhodecode/templates/journal/journal.html:220 | |||
|
1624 | #: rhodecode/templates/journal/journal.html:323 | |||
|
1625 | #: rhodecode/templates/tags/tags.html:77 | |||
|
1626 | msgid "Data error." | |||
|
1627 | msgstr "" | |||
|
1628 | ||||
|
1629 | #: rhodecode/templates/index_base.html:213 | |||
|
1630 | #: rhodecode/templates/index_base.html:300 | |||
|
1631 | #: rhodecode/templates/admin/repos/repos.html:101 | |||
|
1632 | #: rhodecode/templates/admin/users/user_edit_my_account.html:58 | |||
|
1633 | #: rhodecode/templates/admin/users/user_edit_my_account.html:200 | |||
1455 | #: rhodecode/templates/admin/users/users.html:111 |
|
1634 | #: rhodecode/templates/admin/users/users.html:111 | |
1456 |
#: rhodecode/templates/bookmarks/bookmarks.html:6 |
|
1635 | #: rhodecode/templates/bookmarks/bookmarks.html:62 | |
1457 |
#: rhodecode/templates/branches/branches.html: |
|
1636 | #: rhodecode/templates/branches/branches.html:77 | |
1458 |
#: rhodecode/templates/journal/journal.html: |
|
1637 | #: rhodecode/templates/journal/journal.html:221 | |
1459 |
#: rhodecode/templates/journal/journal.html: |
|
1638 | #: rhodecode/templates/journal/journal.html:324 | |
1460 |
#: rhodecode/templates/tags/tags.html:8 |
|
1639 | #: rhodecode/templates/tags/tags.html:78 | |
1461 | msgid "Loading..." |
|
1640 | msgid "Loading..." | |
1462 | msgstr "" |
|
1641 | msgstr "" | |
1463 |
|
1642 | |||
1464 | #: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54 |
|
1643 | #: rhodecode/templates/index_base.html:298 | |
1465 | msgid "Sign In" |
|
1644 | msgid "No repositories found." | |
|
1645 | msgstr "" | |||
|
1646 | ||||
|
1647 | #: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227 | |||
|
1648 | msgid "Log In" | |||
1466 | msgstr "" |
|
1649 | msgstr "" | |
1467 |
|
1650 | |||
1468 | #: rhodecode/templates/login.html:21 |
|
1651 | #: rhodecode/templates/login.html:21 | |
1469 | msgid "Sign In to" |
|
1652 | #, python-format | |
|
1653 | msgid "Log In to %s" | |||
1470 | msgstr "" |
|
1654 | msgstr "" | |
1471 |
|
1655 | |||
1472 | #: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20 |
|
1656 | #: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20 | |
1473 | #: rhodecode/templates/admin/admin_log.html:5 |
|
1657 | #: rhodecode/templates/admin/admin_log.html:5 | |
1474 | #: rhodecode/templates/admin/users/user_add.html:32 |
|
1658 | #: rhodecode/templates/admin/users/user_add.html:32 | |
1475 |
#: rhodecode/templates/admin/users/user_edit.html:5 |
|
1659 | #: rhodecode/templates/admin/users/user_edit.html:57 | |
1476 |
#: rhodecode/templates/admin/users/user_edit_my_account_form.html: |
|
1660 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:31 | |
1477 |
#: rhodecode/templates/ |
|
1661 | #: rhodecode/templates/admin/users/users.html:77 | |
1478 |
#: rhodecode/templates/ |
|
1662 | #: rhodecode/templates/base/base.html:203 | |
|
1663 | #: rhodecode/templates/summary/summary.html:123 | |||
1479 | msgid "Username" |
|
1664 | msgid "Username" | |
1480 | msgstr "" |
|
1665 | msgstr "" | |
1481 |
|
1666 | |||
1482 | #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29 |
|
1667 | #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29 | |
1483 | #: rhodecode/templates/admin/ldap/ldap.html:46 |
|
1668 | #: rhodecode/templates/admin/ldap/ldap.html:46 | |
1484 | #: rhodecode/templates/admin/users/user_add.html:41 |
|
1669 | #: rhodecode/templates/admin/users/user_add.html:41 | |
1485 |
#: rhodecode/templates/base/base.html: |
|
1670 | #: rhodecode/templates/base/base.html:212 | |
1486 | msgid "Password" |
|
1671 | msgid "Password" | |
1487 | msgstr "" |
|
1672 | msgstr "" | |
1488 |
|
1673 | |||
@@ -1490,16 +1675,20 b' msgstr ""' | |||||
1490 | msgid "Remember me" |
|
1675 | msgid "Remember me" | |
1491 | msgstr "" |
|
1676 | msgstr "" | |
1492 |
|
1677 | |||
|
1678 | #: rhodecode/templates/login.html:54 | |||
|
1679 | msgid "Sign In" | |||
|
1680 | msgstr "" | |||
|
1681 | ||||
1493 | #: rhodecode/templates/login.html:60 |
|
1682 | #: rhodecode/templates/login.html:60 | |
1494 | msgid "Forgot your password ?" |
|
1683 | msgid "Forgot your password ?" | |
1495 | msgstr "" |
|
1684 | msgstr "" | |
1496 |
|
1685 | |||
1497 |
#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html: |
|
1686 | #: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223 | |
1498 | msgid "Don't have an account ?" |
|
1687 | msgid "Don't have an account ?" | |
1499 | msgstr "" |
|
1688 | msgstr "" | |
1500 |
|
1689 | |||
1501 | #: rhodecode/templates/password_reset.html:5 |
|
1690 | #: rhodecode/templates/password_reset.html:5 | |
1502 |
msgid " |
|
1691 | msgid "Password Reset" | |
1503 | msgstr "" |
|
1692 | msgstr "" | |
1504 |
|
1693 | |||
1505 | #: rhodecode/templates/password_reset.html:11 |
|
1694 | #: rhodecode/templates/password_reset.html:11 | |
@@ -1532,23 +1721,23 b' msgstr ""' | |||||
1532 |
|
1721 | |||
1533 | #: rhodecode/templates/register.html:47 |
|
1722 | #: rhodecode/templates/register.html:47 | |
1534 | #: rhodecode/templates/admin/users/user_add.html:59 |
|
1723 | #: rhodecode/templates/admin/users/user_add.html:59 | |
1535 |
#: rhodecode/templates/admin/users/user_edit.html:9 |
|
1724 | #: rhodecode/templates/admin/users/user_edit.html:97 | |
1536 |
#: rhodecode/templates/admin/users/user_edit_my_account_form.html: |
|
1725 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 | |
1537 | msgid "First Name" |
|
1726 | msgid "First Name" | |
1538 | msgstr "" |
|
1727 | msgstr "" | |
1539 |
|
1728 | |||
1540 | #: rhodecode/templates/register.html:56 |
|
1729 | #: rhodecode/templates/register.html:56 | |
1541 | #: rhodecode/templates/admin/users/user_add.html:68 |
|
1730 | #: rhodecode/templates/admin/users/user_add.html:68 | |
1542 |
#: rhodecode/templates/admin/users/user_edit.html: |
|
1731 | #: rhodecode/templates/admin/users/user_edit.html:106 | |
1543 |
#: rhodecode/templates/admin/users/user_edit_my_account_form.html: |
|
1732 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 | |
1544 | msgid "Last Name" |
|
1733 | msgid "Last Name" | |
1545 | msgstr "" |
|
1734 | msgstr "" | |
1546 |
|
1735 | |||
1547 | #: rhodecode/templates/register.html:65 |
|
1736 | #: rhodecode/templates/register.html:65 | |
1548 | #: rhodecode/templates/admin/users/user_add.html:77 |
|
1737 | #: rhodecode/templates/admin/users/user_add.html:77 | |
1549 |
#: rhodecode/templates/admin/users/user_edit.html:1 |
|
1738 | #: rhodecode/templates/admin/users/user_edit.html:115 | |
1550 |
#: rhodecode/templates/admin/users/user_edit_my_account_form.html: |
|
1739 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 | |
1551 |
#: rhodecode/templates/summary/summary.html:1 |
|
1740 | #: rhodecode/templates/summary/summary.html:125 | |
1552 | msgid "Email" |
|
1741 | msgid "Email" | |
1553 | msgstr "" |
|
1742 | msgstr "" | |
1554 |
|
1743 | |||
@@ -1560,44 +1749,31 b' msgstr ""' | |||||
1560 | msgid "Your account must wait for activation by administrator" |
|
1749 | msgid "Your account must wait for activation by administrator" | |
1561 | msgstr "" |
|
1750 | msgstr "" | |
1562 |
|
1751 | |||
1563 |
#: rhodecode/templates/repo_switcher_list.html:1 |
|
1752 | #: rhodecode/templates/repo_switcher_list.html:10 | |
1564 | #: rhodecode/templates/admin/defaults/defaults.html:44 |
|
1753 | #: rhodecode/templates/admin/defaults/defaults.html:44 | |
1565 | #: rhodecode/templates/admin/repos/repo_add_base.html:65 |
|
1754 | #: rhodecode/templates/admin/repos/repo_add_base.html:65 | |
1566 | #: rhodecode/templates/admin/repos/repo_edit.html:85 |
|
1755 | #: rhodecode/templates/admin/repos/repo_edit.html:85 | |
1567 |
#: rhodecode/templates/ |
|
1756 | #: rhodecode/templates/data_table/_dt_elements.html:61 | |
|
1757 | #: rhodecode/templates/summary/summary.html:77 | |||
1568 | msgid "Private repository" |
|
1758 | msgid "Private repository" | |
1569 | msgstr "" |
|
1759 | msgstr "" | |
1570 |
|
1760 | |||
1571 |
#: rhodecode/templates/repo_switcher_list.html:1 |
|
1761 | #: rhodecode/templates/repo_switcher_list.html:12 | |
|
1762 | #: rhodecode/templates/data_table/_dt_elements.html:63 | |||
|
1763 | #: rhodecode/templates/summary/summary.html:79 | |||
1572 | msgid "Public repository" |
|
1764 | msgid "Public repository" | |
1573 | msgstr "" |
|
1765 | msgstr "" | |
1574 |
|
1766 | |||
1575 | #: rhodecode/templates/switch_to_list.html:3 |
|
|||
1576 | #: rhodecode/templates/branches/branches.html:14 |
|
|||
1577 | msgid "branches" |
|
|||
1578 | msgstr "" |
|
|||
1579 |
|
||||
1580 | #: rhodecode/templates/switch_to_list.html:10 |
|
1767 | #: rhodecode/templates/switch_to_list.html:10 | |
1581 | #: rhodecode/templates/branches/branches_data.html:57 |
|
1768 | #: rhodecode/templates/branches/branches_data.html:57 | |
1582 | msgid "There are no branches yet" |
|
1769 | msgid "There are no branches yet" | |
1583 | msgstr "" |
|
1770 | msgstr "" | |
1584 |
|
1771 | |||
1585 | #: rhodecode/templates/switch_to_list.html:15 |
|
|||
1586 | #: rhodecode/templates/shortlog/shortlog_data.html:10 |
|
|||
1587 | #: rhodecode/templates/tags/tags.html:15 |
|
|||
1588 | msgid "tags" |
|
|||
1589 | msgstr "" |
|
|||
1590 |
|
||||
1591 | #: rhodecode/templates/switch_to_list.html:22 |
|
1772 | #: rhodecode/templates/switch_to_list.html:22 | |
1592 | #: rhodecode/templates/tags/tags_data.html:38 |
|
1773 | #: rhodecode/templates/tags/tags_data.html:38 | |
1593 | msgid "There are no tags yet" |
|
1774 | msgid "There are no tags yet" | |
1594 | msgstr "" |
|
1775 | msgstr "" | |
1595 |
|
1776 | |||
1596 | #: rhodecode/templates/switch_to_list.html:28 |
|
|||
1597 | #: rhodecode/templates/bookmarks/bookmarks.html:15 |
|
|||
1598 | msgid "bookmarks" |
|
|||
1599 | msgstr "" |
|
|||
1600 |
|
||||
1601 | #: rhodecode/templates/switch_to_list.html:35 |
|
1777 | #: rhodecode/templates/switch_to_list.html:35 | |
1602 | #: rhodecode/templates/bookmarks/bookmarks_data.html:32 |
|
1778 | #: rhodecode/templates/bookmarks/bookmarks_data.html:32 | |
1603 | msgid "There are no bookmarks yet" |
|
1779 | msgid "There are no bookmarks yet" | |
@@ -1605,6 +1781,7 b' msgstr ""' | |||||
1605 |
|
1781 | |||
1606 | #: rhodecode/templates/admin/admin.html:5 |
|
1782 | #: rhodecode/templates/admin/admin.html:5 | |
1607 | #: rhodecode/templates/admin/admin.html:13 |
|
1783 | #: rhodecode/templates/admin/admin.html:13 | |
|
1784 | #: rhodecode/templates/base/base.html:68 | |||
1608 | msgid "Admin journal" |
|
1785 | msgid "Admin journal" | |
1609 | msgstr "" |
|
1786 | msgstr "" | |
1610 |
|
1787 | |||
@@ -1626,11 +1803,13 b' msgstr[0] ""' | |||||
1626 | msgstr[1] "" |
|
1803 | msgstr[1] "" | |
1627 |
|
1804 | |||
1628 | #: rhodecode/templates/admin/admin_log.html:6 |
|
1805 | #: rhodecode/templates/admin/admin_log.html:6 | |
1629 |
#: rhodecode/templates/admin/repos/repos.html:7 |
|
1806 | #: rhodecode/templates/admin/repos/repos.html:77 | |
1630 | #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8 |
|
1807 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 | |
1631 |
#: rhodecode/templates/admin/users/user_edit_my_account |
|
1808 | #: rhodecode/templates/admin/users/user_edit_my_account.html:176 | |
1632 |
#: rhodecode/templates/ |
|
1809 | #: rhodecode/templates/admin/users/users.html:87 | |
1633 |
#: rhodecode/templates/ |
|
1810 | #: rhodecode/templates/admin/users_groups/users_groups.html:37 | |
|
1811 | #: rhodecode/templates/journal/journal.html:197 | |||
|
1812 | #: rhodecode/templates/journal/journal.html:300 | |||
1634 | msgid "Action" |
|
1813 | msgid "Action" | |
1635 | msgstr "" |
|
1814 | msgstr "" | |
1636 |
|
1815 | |||
@@ -1640,11 +1819,11 b' msgid "Repository"' | |||||
1640 | msgstr "" |
|
1819 | msgstr "" | |
1641 |
|
1820 | |||
1642 | #: rhodecode/templates/admin/admin_log.html:8 |
|
1821 | #: rhodecode/templates/admin/admin_log.html:8 | |
1643 |
#: rhodecode/templates/bookmarks/bookmarks.html:3 |
|
1822 | #: rhodecode/templates/bookmarks/bookmarks.html:35 | |
1644 | #: rhodecode/templates/bookmarks/bookmarks_data.html:7 |
|
1823 | #: rhodecode/templates/bookmarks/bookmarks_data.html:7 | |
1645 |
#: rhodecode/templates/branches/branches.html: |
|
1824 | #: rhodecode/templates/branches/branches.html:48 | |
1646 | #: rhodecode/templates/branches/branches_data.html:7 |
|
1825 | #: rhodecode/templates/branches/branches_data.html:7 | |
1647 |
#: rhodecode/templates/tags/tags.html: |
|
1826 | #: rhodecode/templates/tags/tags.html:49 | |
1648 | #: rhodecode/templates/tags/tags_data.html:7 |
|
1827 | #: rhodecode/templates/tags/tags_data.html:7 | |
1649 | msgid "Date" |
|
1828 | msgid "Date" | |
1650 | msgstr "" |
|
1829 | msgstr "" | |
@@ -1663,6 +1842,7 b' msgid "Repositories defaults"' | |||||
1663 | msgstr "" |
|
1842 | msgstr "" | |
1664 |
|
1843 | |||
1665 | #: rhodecode/templates/admin/defaults/defaults.html:11 |
|
1844 | #: rhodecode/templates/admin/defaults/defaults.html:11 | |
|
1845 | #: rhodecode/templates/base/base.html:75 | |||
1666 | msgid "Defaults" |
|
1846 | msgid "Defaults" | |
1667 | msgstr "" |
|
1847 | msgstr "" | |
1668 |
|
1848 | |||
@@ -1675,8 +1855,7 b' msgstr ""' | |||||
1675 | #: rhodecode/templates/admin/defaults/defaults.html:48 |
|
1855 | #: rhodecode/templates/admin/defaults/defaults.html:48 | |
1676 | #: rhodecode/templates/admin/repos/repo_add_base.html:69 |
|
1856 | #: rhodecode/templates/admin/repos/repo_add_base.html:69 | |
1677 | #: rhodecode/templates/admin/repos/repo_edit.html:89 |
|
1857 | #: rhodecode/templates/admin/repos/repo_edit.html:89 | |
1678 |
#: rhodecode/templates/forks/fork.html: |
|
1858 | #: rhodecode/templates/forks/fork.html:69 | |
1679 | #: rhodecode/templates/settings/repo_settings.html:80 |
|
|||
1680 | msgid "" |
|
1859 | msgid "" | |
1681 | "Private repositories are only visible to people explicitly added as " |
|
1860 | "Private repositories are only visible to people explicitly added as " | |
1682 | "collaborators." |
|
1861 | "collaborators." | |
@@ -1704,7 +1883,7 b' msgstr ""' | |||||
1704 |
|
1883 | |||
1705 | #: rhodecode/templates/admin/defaults/defaults.html:75 |
|
1884 | #: rhodecode/templates/admin/defaults/defaults.html:75 | |
1706 | #: rhodecode/templates/admin/repos/repo_edit.html:112 |
|
1885 | #: rhodecode/templates/admin/repos/repo_edit.html:112 | |
1707 |
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html: |
|
1886 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72 | |
1708 | msgid "Enable locking" |
|
1887 | msgid "Enable locking" | |
1709 | msgstr "" |
|
1888 | msgstr "" | |
1710 |
|
1889 | |||
@@ -1715,14 +1894,18 b' msgstr ""' | |||||
1715 |
|
1894 | |||
1716 | #: rhodecode/templates/admin/defaults/defaults.html:84 |
|
1895 | #: rhodecode/templates/admin/defaults/defaults.html:84 | |
1717 | #: rhodecode/templates/admin/ldap/ldap.html:89 |
|
1896 | #: rhodecode/templates/admin/ldap/ldap.html:89 | |
1718 |
#: rhodecode/templates/admin/ |
|
1897 | #: rhodecode/templates/admin/permissions/permissions.html:92 | |
1719 |
#: rhodecode/templates/admin/repos |
|
1898 | #: rhodecode/templates/admin/repos/repo_edit.html:148 | |
|
1899 | #: rhodecode/templates/admin/repos/repo_edit.html:173 | |||
|
1900 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80 | |||
1720 | #: rhodecode/templates/admin/settings/hooks.html:73 |
|
1901 | #: rhodecode/templates/admin/settings/hooks.html:73 | |
1721 |
#: rhodecode/templates/admin/users/user_ |
|
1902 | #: rhodecode/templates/admin/users/user_add.html:94 | |
1722 |
#: rhodecode/templates/admin/users/user_edit.html:1 |
|
1903 | #: rhodecode/templates/admin/users/user_edit.html:140 | |
1723 |
#: rhodecode/templates/admin/users/user_edit |
|
1904 | #: rhodecode/templates/admin/users/user_edit.html:185 | |
|
1905 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:88 | |||
|
1906 | #: rhodecode/templates/admin/users_groups/users_group_add.html:49 | |||
|
1907 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:90 | |||
1724 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:135 |
|
1908 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:135 | |
1725 | #: rhodecode/templates/settings/repo_settings.html:94 |
|
|||
1726 | msgid "Save" |
|
1909 | msgid "Save" | |
1727 | msgstr "" |
|
1910 | msgstr "" | |
1728 |
|
1911 | |||
@@ -1731,7 +1914,9 b' msgid "LDAP administration"' | |||||
1731 | msgstr "" |
|
1914 | msgstr "" | |
1732 |
|
1915 | |||
1733 | #: rhodecode/templates/admin/ldap/ldap.html:11 |
|
1916 | #: rhodecode/templates/admin/ldap/ldap.html:11 | |
1734 | msgid "Ldap" |
|
1917 | #: rhodecode/templates/admin/users/users.html:86 | |
|
1918 | #: rhodecode/templates/base/base.html:74 | |||
|
1919 | msgid "LDAP" | |||
1735 | msgstr "" |
|
1920 | msgstr "" | |
1736 |
|
1921 | |||
1737 | #: rhodecode/templates/admin/ldap/ldap.html:28 |
|
1922 | #: rhodecode/templates/admin/ldap/ldap.html:28 | |
@@ -1813,8 +1998,7 b' msgid "Comments"' | |||||
1813 | msgstr "" |
|
1998 | msgstr "" | |
1814 |
|
1999 | |||
1815 | #: rhodecode/templates/admin/notifications/notifications.html:31 |
|
2000 | #: rhodecode/templates/admin/notifications/notifications.html:31 | |
1816 | #: rhodecode/templates/base/base.html:267 |
|
2001 | #: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 | |
1817 | #: rhodecode/templates/base/base.html:269 |
|
|||
1818 | msgid "Pull requests" |
|
2002 | msgid "Pull requests" | |
1819 | msgstr "" |
|
2003 | msgstr "" | |
1820 |
|
2004 | |||
@@ -1832,6 +2016,7 b' msgid "Show notification"' | |||||
1832 | msgstr "" |
|
2016 | msgstr "" | |
1833 |
|
2017 | |||
1834 | #: rhodecode/templates/admin/notifications/show_notification.html:9 |
|
2018 | #: rhodecode/templates/admin/notifications/show_notification.html:9 | |
|
2019 | #: rhodecode/templates/base/base.html:241 | |||
1835 | msgid "Notifications" |
|
2020 | msgid "Notifications" | |
1836 | msgstr "" |
|
2021 | msgstr "" | |
1837 |
|
2022 | |||
@@ -1840,11 +2025,12 b' msgid "Permissions administration"' | |||||
1840 | msgstr "" |
|
2025 | msgstr "" | |
1841 |
|
2026 | |||
1842 | #: rhodecode/templates/admin/permissions/permissions.html:11 |
|
2027 | #: rhodecode/templates/admin/permissions/permissions.html:11 | |
1843 |
#: rhodecode/templates/admin/repos/repo_edit.html:1 |
|
2028 | #: rhodecode/templates/admin/repos/repo_edit.html:158 | |
1844 |
#: rhodecode/templates/admin/repos |
|
2029 | #: rhodecode/templates/admin/repos/repo_edit.html:165 | |
1845 |
#: rhodecode/templates/admin/ |
|
2030 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64 | |
|
2031 | #: rhodecode/templates/admin/users/user_edit.html:150 | |||
1846 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:100 |
|
2032 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:100 | |
1847 |
#: rhodecode/templates/ |
|
2033 | #: rhodecode/templates/base/base.html:73 | |
1848 | msgid "Permissions" |
|
2034 | msgid "Permissions" | |
1849 | msgstr "" |
|
2035 | msgstr "" | |
1850 |
|
2036 | |||
@@ -1858,30 +2044,21 b' msgstr ""' | |||||
1858 |
|
2044 | |||
1859 | #: rhodecode/templates/admin/permissions/permissions.html:49 |
|
2045 | #: rhodecode/templates/admin/permissions/permissions.html:49 | |
1860 | msgid "" |
|
2046 | msgid "" | |
1861 |
"All default permissions on each repository will be reset to cho |
|
2047 | "All default permissions on each repository will be reset to chosen " | |
1862 | "permission, note that all custom default permission on repositories will " |
|
2048 | "permission, note that all custom default permission on repositories will " | |
1863 | "be lost" |
|
2049 | "be lost" | |
1864 | msgstr "" |
|
2050 | msgstr "" | |
1865 |
|
2051 | |||
1866 | #: rhodecode/templates/admin/permissions/permissions.html:50 |
|
2052 | #: rhodecode/templates/admin/permissions/permissions.html:50 | |
1867 | #: rhodecode/templates/admin/permissions/permissions.html:63 |
|
2053 | #: rhodecode/templates/admin/permissions/permissions.html:63 | |
1868 |
msgid " |
|
2054 | msgid "Overwrite existing settings" | |
1869 | msgstr "" |
|
|||
1870 |
|
||||
1871 | #: rhodecode/templates/admin/permissions/permissions.html:55 |
|
|||
1872 | #: rhodecode/templates/admin/repos/repo_add_base.html:29 |
|
|||
1873 | #: rhodecode/templates/admin/repos/repo_edit.html:49 |
|
|||
1874 | #: rhodecode/templates/admin/repos_groups/repos_groups.html:4 |
|
|||
1875 | #: rhodecode/templates/forks/fork.html:50 |
|
|||
1876 | #: rhodecode/templates/settings/repo_settings.html:48 |
|
|||
1877 | msgid "Repository group" |
|
|||
1878 | msgstr "" |
|
2055 | msgstr "" | |
1879 |
|
2056 | |||
1880 | #: rhodecode/templates/admin/permissions/permissions.html:62 |
|
2057 | #: rhodecode/templates/admin/permissions/permissions.html:62 | |
1881 | msgid "" |
|
2058 | msgid "" | |
1882 |
"All default permissions on each repository group will be reset to cho |
|
2059 | "All default permissions on each repository group will be reset to chosen " | |
1883 |
" |
|
2060 | "permission, note that all custom default permission on repository groups " | |
1884 |
" |
|
2061 | "will be lost" | |
1885 | msgstr "" |
|
2062 | msgstr "" | |
1886 |
|
2063 | |||
1887 | #: rhodecode/templates/admin/permissions/permissions.html:69 |
|
2064 | #: rhodecode/templates/admin/permissions/permissions.html:69 | |
@@ -1896,40 +2073,95 b' msgstr ""' | |||||
1896 | msgid "Repository forking" |
|
2073 | msgid "Repository forking" | |
1897 | msgstr "" |
|
2074 | msgstr "" | |
1898 |
|
2075 | |||
1899 |
#: rhodecode/templates/admin/permissions/permissions.html:9 |
|
2076 | #: rhodecode/templates/admin/permissions/permissions.html:93 | |
1900 |
#: rhodecode/templates/admin/ |
|
2077 | #: rhodecode/templates/admin/permissions/permissions.html:154 | |
1901 | msgid "set" |
|
2078 | #: rhodecode/templates/admin/repos/repo_edit.html:149 | |
1902 | msgstr "" |
|
2079 | #: rhodecode/templates/admin/repos/repo_edit.html:174 | |
1903 |
|
2080 | #: rhodecode/templates/admin/repos/repo_edit.html:388 | ||
1904 |
#: rhodecode/templates/admin/repos |
|
2081 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81 | |
1905 |
#: rhodecode/templates/admin/ |
|
2082 | #: rhodecode/templates/admin/settings/settings.html:115 | |
1906 | msgid "Add repository" |
|
2083 | #: rhodecode/templates/admin/settings/settings.html:187 | |
1907 | msgstr "" |
|
2084 | #: rhodecode/templates/admin/settings/settings.html:278 | |
1908 |
|
2085 | #: rhodecode/templates/admin/users/user_edit.html:141 | ||
1909 |
#: rhodecode/templates/admin/ |
|
2086 | #: rhodecode/templates/admin/users/user_edit.html:186 | |
1910 |
#: rhodecode/templates/admin/r |
|
2087 | #: rhodecode/templates/admin/users/user_edit.html:235 | |
1911 |
#: rhodecode/templates/admin/ |
|
2088 | #: rhodecode/templates/admin/users/user_edit.html:283 | |
|
2089 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:89 | |||
|
2090 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:136 | |||
|
2091 | #: rhodecode/templates/files/files_add.html:80 | |||
|
2092 | #: rhodecode/templates/files/files_edit.html:66 | |||
|
2093 | #: rhodecode/templates/pullrequests/pullrequest.html:110 | |||
|
2094 | msgid "Reset" | |||
|
2095 | msgstr "" | |||
|
2096 | ||||
|
2097 | #: rhodecode/templates/admin/permissions/permissions.html:103 | |||
|
2098 | msgid "Default User Permissions" | |||
|
2099 | msgstr "" | |||
|
2100 | ||||
|
2101 | #: rhodecode/templates/admin/permissions/permissions.html:113 | |||
|
2102 | #: rhodecode/templates/admin/users/user_edit.html:244 | |||
|
2103 | msgid "Allowed IP addresses" | |||
|
2104 | msgstr "" | |||
|
2105 | ||||
|
2106 | #: rhodecode/templates/admin/permissions/permissions.html:127 | |||
|
2107 | #: rhodecode/templates/admin/repos/repo_edit.html:347 | |||
|
2108 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 | |||
|
2109 | #: rhodecode/templates/admin/users/user_edit.html:212 | |||
|
2110 | #: rhodecode/templates/admin/users/user_edit.html:257 | |||
|
2111 | #: rhodecode/templates/admin/users_groups/users_groups.html:46 | |||
|
2112 | #: rhodecode/templates/data_table/_dt_elements.html:122 | |||
|
2113 | #: rhodecode/templates/data_table/_dt_elements.html:130 | |||
|
2114 | msgid "delete" | |||
|
2115 | msgstr "" | |||
|
2116 | ||||
|
2117 | #: rhodecode/templates/admin/permissions/permissions.html:128 | |||
|
2118 | #: rhodecode/templates/admin/users/user_edit.html:258 | |||
|
2119 | #, fuzzy, python-format | |||
|
2120 | msgid "Confirm to delete this ip: %s" | |||
|
2121 | msgstr "" | |||
|
2122 | ||||
|
2123 | #: rhodecode/templates/admin/permissions/permissions.html:134 | |||
|
2124 | #: rhodecode/templates/admin/users/user_edit.html:264 | |||
|
2125 | msgid "All IP addresses are allowed" | |||
|
2126 | msgstr "" | |||
|
2127 | ||||
|
2128 | #: rhodecode/templates/admin/permissions/permissions.html:145 | |||
|
2129 | #: rhodecode/templates/admin/users/user_edit.html:275 | |||
|
2130 | msgid "New ip address" | |||
|
2131 | msgstr "" | |||
|
2132 | ||||
|
2133 | #: rhodecode/templates/admin/permissions/permissions.html:153 | |||
|
2134 | #: rhodecode/templates/admin/repos/repo_add_base.html:73 | |||
|
2135 | #: rhodecode/templates/admin/repos/repo_edit.html:387 | |||
|
2136 | #: rhodecode/templates/admin/users/user_edit.html:234 | |||
|
2137 | #: rhodecode/templates/admin/users/user_edit.html:282 | |||
|
2138 | msgid "Add" | |||
|
2139 | msgstr "" | |||
|
2140 | ||||
|
2141 | #: rhodecode/templates/admin/repos/repo_add.html:12 | |||
|
2142 | #: rhodecode/templates/admin/repos/repo_add.html:16 | |||
|
2143 | #: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103 | |||
|
2144 | #: rhodecode/templates/base/base.html:263 | |||
1912 | msgid "Repositories" |
|
2145 | msgid "Repositories" | |
1913 | msgstr "" |
|
2146 | msgstr "" | |
1914 |
|
2147 | |||
1915 |
#: rhodecode/templates/admin/repos/repo_add.html:1 |
|
2148 | #: rhodecode/templates/admin/repos/repo_add.html:19 | |
1916 |
msgid " |
|
2149 | msgid "Add new" | |
1917 | msgstr "" |
|
2150 | msgstr "" | |
1918 |
|
2151 | |||
1919 | #: rhodecode/templates/admin/repos/repo_add_base.html:20 |
|
2152 | #: rhodecode/templates/admin/repos/repo_add_base.html:20 | |
1920 |
#: rhodecode/templates/summary/summary.html: |
|
2153 | #: rhodecode/templates/summary/summary.html:96 | |
1921 |
#: rhodecode/templates/summary/summary.html: |
|
2154 | #: rhodecode/templates/summary/summary.html:97 | |
1922 | msgid "Clone from" |
|
2155 | msgid "Clone from" | |
1923 | msgstr "" |
|
2156 | msgstr "" | |
1924 |
|
2157 | |||
1925 | #: rhodecode/templates/admin/repos/repo_add_base.html:24 |
|
2158 | #: rhodecode/templates/admin/repos/repo_add_base.html:24 | |
1926 | #: rhodecode/templates/admin/repos/repo_edit.html:44 |
|
2159 | #: rhodecode/templates/admin/repos/repo_edit.html:44 | |
1927 | #: rhodecode/templates/settings/repo_settings.html:43 |
|
|||
1928 | msgid "Optional http[s] url from which repository should be cloned." |
|
2160 | msgid "Optional http[s] url from which repository should be cloned." | |
1929 | msgstr "" |
|
2161 | msgstr "" | |
1930 |
|
2162 | |||
1931 | #: rhodecode/templates/admin/repos/repo_add_base.html:33 |
|
2163 | #: rhodecode/templates/admin/repos/repo_add_base.html:33 | |
1932 |
#: rhodecode/templates/forks/fork.html:5 |
|
2164 | #: rhodecode/templates/forks/fork.html:51 | |
1933 | msgid "Optionaly select a group to put this repository into." |
|
2165 | msgid "Optionaly select a group to put this repository into." | |
1934 | msgstr "" |
|
2166 | msgstr "" | |
1935 |
|
2167 | |||
@@ -1939,57 +2171,39 b' msgstr ""' | |||||
1939 |
|
2171 | |||
1940 | #: rhodecode/templates/admin/repos/repo_add_base.html:47 |
|
2172 | #: rhodecode/templates/admin/repos/repo_add_base.html:47 | |
1941 | #: rhodecode/templates/admin/repos/repo_edit.html:66 |
|
2173 | #: rhodecode/templates/admin/repos/repo_edit.html:66 | |
1942 |
#: rhodecode/templates/forks/fork.html: |
|
2174 | #: rhodecode/templates/forks/fork.html:38 | |
1943 | #: rhodecode/templates/settings/repo_settings.html:57 |
|
|||
1944 | msgid "Landing revision" |
|
2175 | msgid "Landing revision" | |
1945 | msgstr "" |
|
2176 | msgstr "" | |
1946 |
|
2177 | |||
1947 | #: rhodecode/templates/admin/repos/repo_add_base.html:51 |
|
2178 | #: rhodecode/templates/admin/repos/repo_add_base.html:51 | |
1948 | #: rhodecode/templates/admin/repos/repo_edit.html:70 |
|
2179 | #: rhodecode/templates/admin/repos/repo_edit.html:70 | |
1949 |
#: rhodecode/templates/forks/fork.html:4 |
|
2180 | #: rhodecode/templates/forks/fork.html:42 | |
1950 | #: rhodecode/templates/settings/repo_settings.html:61 |
|
|||
1951 | msgid "Default revision for files page, downloads, whoosh and readme" |
|
2181 | msgid "Default revision for files page, downloads, whoosh and readme" | |
1952 | msgstr "" |
|
2182 | msgstr "" | |
1953 |
|
2183 | |||
1954 | #: rhodecode/templates/admin/repos/repo_add_base.html:60 |
|
2184 | #: rhodecode/templates/admin/repos/repo_add_base.html:60 | |
1955 | #: rhodecode/templates/admin/repos/repo_edit.html:79 |
|
2185 | #: rhodecode/templates/admin/repos/repo_edit.html:79 | |
1956 |
#: rhodecode/templates/forks/fork.html:6 |
|
2186 | #: rhodecode/templates/forks/fork.html:60 | |
1957 | #: rhodecode/templates/settings/repo_settings.html:70 |
|
|||
1958 | msgid "Keep it short and to the point. Use a README file for longer descriptions." |
|
2187 | msgid "Keep it short and to the point. Use a README file for longer descriptions." | |
1959 | msgstr "" |
|
2188 | msgstr "" | |
1960 |
|
2189 | |||
1961 |
#: rhodecode/templates/admin/repos/repo_ |
|
2190 | #: rhodecode/templates/admin/repos/repo_edit.html:8 | |
1962 | msgid "add" |
|
|||
1963 | msgstr "" |
|
|||
1964 |
|
||||
1965 | #: rhodecode/templates/admin/repos/repo_add_create_repository.html:9 |
|
|||
1966 | msgid "add new repository" |
|
|||
1967 | msgstr "" |
|
|||
1968 |
|
||||
1969 | #: rhodecode/templates/admin/repos/repo_edit.html:5 |
|
|||
1970 | msgid "Edit repository" |
|
2191 | msgid "Edit repository" | |
1971 | msgstr "" |
|
2192 | msgstr "" | |
1972 |
|
2193 | |||
1973 |
#: rhodecode/templates/admin/repos/repo_edit.html:1 |
|
2194 | #: rhodecode/templates/admin/repos/repo_edit.html:12 | |
1974 |
#: rhodecode/templates/admin/ |
|
2195 | #: rhodecode/templates/admin/settings/hooks.html:9 | |
1975 |
#: rhodecode/templates/admin/ |
|
2196 | #: rhodecode/templates/admin/settings/settings.html:11 | |
1976 | #: rhodecode/templates/admin/users/user_edit.html:230 |
|
2197 | #: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121 | |
1977 | #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 |
|
2198 | #: rhodecode/templates/summary/summary.html:212 | |
1978 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:13 |
|
2199 | msgid "Settings" | |
1979 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:207 |
|
|||
1980 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:209 |
|
|||
1981 | #: rhodecode/templates/files/files_source.html:29 |
|
|||
1982 | #: rhodecode/templates/journal/journal_page_repos.html:29 |
|
|||
1983 | msgid "edit" |
|
|||
1984 | msgstr "" |
|
2200 | msgstr "" | |
1985 |
|
2201 | |||
1986 | #: rhodecode/templates/admin/repos/repo_edit.html:40 |
|
2202 | #: rhodecode/templates/admin/repos/repo_edit.html:40 | |
1987 | #: rhodecode/templates/settings/repo_settings.html:39 |
|
|||
1988 | msgid "Clone uri" |
|
2203 | msgid "Clone uri" | |
1989 | msgstr "" |
|
2204 | msgstr "" | |
1990 |
|
2205 | |||
1991 | #: rhodecode/templates/admin/repos/repo_edit.html:53 |
|
2206 | #: rhodecode/templates/admin/repos/repo_edit.html:53 | |
1992 | #: rhodecode/templates/settings/repo_settings.html:52 |
|
|||
1993 | msgid "Optional select a group to put this repository into." |
|
2207 | msgid "Optional select a group to put this repository into." | |
1994 | msgstr "" |
|
2208 | msgstr "" | |
1995 |
|
2209 | |||
@@ -1997,175 +2211,204 b' msgstr ""' | |||||
1997 | msgid "Change owner of this repository." |
|
2211 | msgid "Change owner of this repository." | |
1998 | msgstr "" |
|
2212 | msgstr "" | |
1999 |
|
2213 | |||
2000 |
#: rhodecode/templates/admin/repos/repo_edit.html:14 |
|
2214 | #: rhodecode/templates/admin/repos/repo_edit.html:184 | |
2001 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75 |
|
2215 | msgid "Advanced settings" | |
2002 | #: rhodecode/templates/admin/settings/settings.html:113 |
|
2216 | msgstr "" | |
2003 | #: rhodecode/templates/admin/settings/settings.html:179 |
|
2217 | ||
2004 |
#: rhodecode/templates/admin/ |
|
2218 | #: rhodecode/templates/admin/repos/repo_edit.html:187 | |
2005 | #: rhodecode/templates/admin/users/user_edit.html:134 |
|
|||
2006 | #: rhodecode/templates/admin/users/user_edit.html:179 |
|
|||
2007 | #: rhodecode/templates/admin/users/user_edit.html:282 |
|
|||
2008 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 |
|
|||
2009 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:136 |
|
|||
2010 | #: rhodecode/templates/files/files_add.html:82 |
|
|||
2011 | #: rhodecode/templates/files/files_edit.html:68 |
|
|||
2012 | #: rhodecode/templates/pullrequests/pullrequest.html:124 |
|
|||
2013 | #: rhodecode/templates/settings/repo_settings.html:95 |
|
|||
2014 | msgid "Reset" |
|
|||
2015 | msgstr "" |
|
|||
2016 |
|
||||
2017 | #: rhodecode/templates/admin/repos/repo_edit.html:152 |
|
|||
2018 | msgid "Administration" |
|
|||
2019 | msgstr "" |
|
|||
2020 |
|
||||
2021 | #: rhodecode/templates/admin/repos/repo_edit.html:155 |
|
|||
2022 | msgid "Statistics" |
|
2219 | msgid "Statistics" | |
2023 | msgstr "" |
|
2220 | msgstr "" | |
2024 |
|
2221 | |||
2025 |
#: rhodecode/templates/admin/repos/repo_edit.html:1 |
|
2222 | #: rhodecode/templates/admin/repos/repo_edit.html:191 | |
2026 | msgid "Reset current statistics" |
|
2223 | msgid "Reset current statistics" | |
2027 | msgstr "" |
|
2224 | msgstr "" | |
2028 |
|
2225 | |||
2029 |
#: rhodecode/templates/admin/repos/repo_edit.html:1 |
|
2226 | #: rhodecode/templates/admin/repos/repo_edit.html:191 | |
2030 | msgid "Confirm to remove current statistics" |
|
2227 | msgid "Confirm to remove current statistics" | |
2031 | msgstr "" |
|
2228 | msgstr "" | |
2032 |
|
2229 | |||
2033 |
#: rhodecode/templates/admin/repos/repo_edit.html:1 |
|
2230 | #: rhodecode/templates/admin/repos/repo_edit.html:194 | |
2034 | msgid "Fetched to rev" |
|
2231 | msgid "Fetched to rev" | |
2035 | msgstr "" |
|
2232 | msgstr "" | |
2036 |
|
2233 | |||
2037 |
#: rhodecode/templates/admin/repos/repo_edit.html:1 |
|
2234 | #: rhodecode/templates/admin/repos/repo_edit.html:195 | |
2038 | msgid "Stats gathered" |
|
2235 | msgid "Stats gathered" | |
2039 | msgstr "" |
|
2236 | msgstr "" | |
2040 |
|
2237 | |||
2041 | #: rhodecode/templates/admin/repos/repo_edit.html:171 |
|
|||
2042 | msgid "Remote" |
|
|||
2043 | msgstr "" |
|
|||
2044 |
|
||||
2045 | #: rhodecode/templates/admin/repos/repo_edit.html:175 |
|
|||
2046 | msgid "Pull changes from remote location" |
|
|||
2047 | msgstr "" |
|
|||
2048 |
|
||||
2049 | #: rhodecode/templates/admin/repos/repo_edit.html:175 |
|
|||
2050 | msgid "Confirm to pull changes from remote side" |
|
|||
2051 | msgstr "" |
|
|||
2052 |
|
||||
2053 | #: rhodecode/templates/admin/repos/repo_edit.html:186 |
|
|||
2054 | msgid "Cache" |
|
|||
2055 | msgstr "" |
|
|||
2056 |
|
||||
2057 | #: rhodecode/templates/admin/repos/repo_edit.html:190 |
|
|||
2058 | msgid "Invalidate repository cache" |
|
|||
2059 | msgstr "" |
|
|||
2060 |
|
||||
2061 | #: rhodecode/templates/admin/repos/repo_edit.html:190 |
|
|||
2062 | msgid "Confirm to invalidate repository cache" |
|
|||
2063 | msgstr "" |
|
|||
2064 |
|
||||
2065 | #: rhodecode/templates/admin/repos/repo_edit.html:193 |
|
|||
2066 | msgid "" |
|
|||
2067 | "Manually invalidate cache for this repository. On first access repository" |
|
|||
2068 | " will be cached again" |
|
|||
2069 | msgstr "" |
|
|||
2070 |
|
||||
2071 | #: rhodecode/templates/admin/repos/repo_edit.html:198 |
|
|||
2072 | msgid "List of cached values" |
|
|||
2073 | msgstr "" |
|
|||
2074 |
|
||||
2075 | #: rhodecode/templates/admin/repos/repo_edit.html:201 |
|
|||
2076 | msgid "Prefix" |
|
|||
2077 | msgstr "" |
|
|||
2078 |
|
||||
2079 | #: rhodecode/templates/admin/repos/repo_edit.html:202 |
|
|||
2080 | msgid "Key" |
|
|||
2081 | msgstr "" |
|
|||
2082 |
|
||||
2083 | #: rhodecode/templates/admin/repos/repo_edit.html:203 |
|
2238 | #: rhodecode/templates/admin/repos/repo_edit.html:203 | |
2084 | #: rhodecode/templates/admin/users/user_add.html:86 |
|
2239 | msgid "Remote" | |
2085 | #: rhodecode/templates/admin/users/user_edit.html:117 |
|
2240 | msgstr "" | |
2086 | #: rhodecode/templates/admin/users_groups/users_group_add.html:41 |
|
2241 | ||
2087 |
#: rhodecode/templates/admin/ |
|
2242 | #: rhodecode/templates/admin/repos/repo_edit.html:207 | |
2088 | msgid "Active" |
|
2243 | msgid "Pull changes from remote location" | |
|
2244 | msgstr "" | |||
|
2245 | ||||
|
2246 | #: rhodecode/templates/admin/repos/repo_edit.html:207 | |||
|
2247 | msgid "Confirm to pull changes from remote side" | |||
2089 | msgstr "" |
|
2248 | msgstr "" | |
2090 |
|
2249 | |||
2091 | #: rhodecode/templates/admin/repos/repo_edit.html:218 |
|
2250 | #: rhodecode/templates/admin/repos/repo_edit.html:218 | |
2092 | #: rhodecode/templates/base/base.html:331 |
|
2251 | msgid "Cache" | |
2093 | #: rhodecode/templates/base/base.html:333 |
|
2252 | msgstr "" | |
2094 | #: rhodecode/templates/base/base.html:335 |
|
2253 | ||
|
2254 | #: rhodecode/templates/admin/repos/repo_edit.html:222 | |||
|
2255 | msgid "Invalidate repository cache" | |||
|
2256 | msgstr "" | |||
|
2257 | ||||
|
2258 | #: rhodecode/templates/admin/repos/repo_edit.html:222 | |||
|
2259 | msgid "Confirm to invalidate repository cache" | |||
|
2260 | msgstr "" | |||
|
2261 | ||||
|
2262 | #: rhodecode/templates/admin/repos/repo_edit.html:225 | |||
|
2263 | msgid "" | |||
|
2264 | "Manually invalidate cache for this repository. On first access repository" | |||
|
2265 | " will be cached again" | |||
|
2266 | msgstr "" | |||
|
2267 | ||||
|
2268 | #: rhodecode/templates/admin/repos/repo_edit.html:230 | |||
|
2269 | msgid "List of cached values" | |||
|
2270 | msgstr "" | |||
|
2271 | ||||
|
2272 | #: rhodecode/templates/admin/repos/repo_edit.html:233 | |||
|
2273 | msgid "Prefix" | |||
|
2274 | msgstr "" | |||
|
2275 | ||||
|
2276 | #: rhodecode/templates/admin/repos/repo_edit.html:234 | |||
|
2277 | msgid "Key" | |||
|
2278 | msgstr "" | |||
|
2279 | ||||
|
2280 | #: rhodecode/templates/admin/repos/repo_edit.html:235 | |||
|
2281 | #: rhodecode/templates/admin/users/user_add.html:86 | |||
|
2282 | #: rhodecode/templates/admin/users/user_edit.html:124 | |||
|
2283 | #: rhodecode/templates/admin/users/users.html:84 | |||
|
2284 | #: rhodecode/templates/admin/users_groups/users_group_add.html:41 | |||
|
2285 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:42 | |||
|
2286 | #: rhodecode/templates/admin/users_groups/users_groups.html:36 | |||
|
2287 | msgid "Active" | |||
|
2288 | msgstr "" | |||
|
2289 | ||||
|
2290 | #: rhodecode/templates/admin/repos/repo_edit.html:250 | |||
|
2291 | #: rhodecode/templates/base/base.html:280 | |||
|
2292 | #: rhodecode/templates/base/base.html:281 | |||
2095 | msgid "Public journal" |
|
2293 | msgid "Public journal" | |
2096 | msgstr "" |
|
2294 | msgstr "" | |
2097 |
|
2295 | |||
2098 |
#: rhodecode/templates/admin/repos/repo_edit.html:2 |
|
2296 | #: rhodecode/templates/admin/repos/repo_edit.html:256 | |
2099 | msgid "Remove from public journal" |
|
2297 | msgid "Remove from public journal" | |
2100 | msgstr "" |
|
2298 | msgstr "" | |
2101 |
|
2299 | |||
2102 |
#: rhodecode/templates/admin/repos/repo_edit.html:2 |
|
2300 | #: rhodecode/templates/admin/repos/repo_edit.html:258 | |
2103 | msgid "Add to public journal" |
|
2301 | msgid "Add to public journal" | |
2104 | msgstr "" |
|
2302 | msgstr "" | |
2105 |
|
2303 | |||
2106 |
#: rhodecode/templates/admin/repos/repo_edit.html:23 |
|
2304 | #: rhodecode/templates/admin/repos/repo_edit.html:263 | |
2107 | msgid "" |
|
2305 | msgid "" | |
2108 | "All actions made on this repository will be accessible to everyone in " |
|
2306 | "All actions made on this repository will be accessible to everyone in " | |
2109 | "public journal" |
|
2307 | "public journal" | |
2110 | msgstr "" |
|
2308 | msgstr "" | |
2111 |
|
2309 | |||
2112 |
#: rhodecode/templates/admin/repos/repo_edit.html:2 |
|
2310 | #: rhodecode/templates/admin/repos/repo_edit.html:270 | |
2113 | msgid "Locking" |
|
2311 | msgid "Locking" | |
2114 | msgstr "" |
|
2312 | msgstr "" | |
2115 |
|
2313 | |||
2116 |
#: rhodecode/templates/admin/repos/repo_edit.html:2 |
|
2314 | #: rhodecode/templates/admin/repos/repo_edit.html:275 | |
2117 | msgid "Unlock locked repo" |
|
2315 | msgid "Unlock locked repo" | |
2118 | msgstr "" |
|
2316 | msgstr "" | |
2119 |
|
2317 | |||
2120 |
#: rhodecode/templates/admin/repos/repo_edit.html:2 |
|
2318 | #: rhodecode/templates/admin/repos/repo_edit.html:275 | |
2121 | msgid "Confirm to unlock repository" |
|
2319 | msgid "Confirm to unlock repository" | |
2122 | msgstr "" |
|
2320 | msgstr "" | |
2123 |
|
2321 | |||
2124 |
#: rhodecode/templates/admin/repos/repo_edit.html:2 |
|
2322 | #: rhodecode/templates/admin/repos/repo_edit.html:278 | |
2125 | msgid "lock repo" |
|
2323 | msgid "lock repo" | |
2126 | msgstr "" |
|
2324 | msgstr "" | |
2127 |
|
2325 | |||
2128 | #: rhodecode/templates/admin/repos/repo_edit.html:246 |
|
|||
2129 | msgid "Confirm to lock repository" |
|
|||
2130 | msgstr "" |
|
|||
2131 |
|
||||
2132 | #: rhodecode/templates/admin/repos/repo_edit.html:247 |
|
|||
2133 | msgid "Repository is not locked" |
|
|||
2134 | msgstr "" |
|
|||
2135 |
|
||||
2136 | #: rhodecode/templates/admin/repos/repo_edit.html:252 |
|
|||
2137 | msgid "Force locking on repository. Works only when anonymous access is disabled" |
|
|||
2138 | msgstr "" |
|
|||
2139 |
|
||||
2140 | #: rhodecode/templates/admin/repos/repo_edit.html:259 |
|
|||
2141 | msgid "Set as fork of" |
|
|||
2142 | msgstr "" |
|
|||
2143 |
|
||||
2144 | #: rhodecode/templates/admin/repos/repo_edit.html:268 |
|
|||
2145 | msgid "Manually set this repository as a fork of another from the list" |
|
|||
2146 | msgstr "" |
|
|||
2147 |
|
||||
2148 | #: rhodecode/templates/admin/repos/repo_edit.html:274 |
|
|||
2149 | #: rhodecode/templates/changeset/changeset_file_comment.html:26 |
|
|||
2150 | msgid "Delete" |
|
|||
2151 | msgstr "" |
|
|||
2152 |
|
||||
2153 | #: rhodecode/templates/admin/repos/repo_edit.html:278 |
|
2326 | #: rhodecode/templates/admin/repos/repo_edit.html:278 | |
2154 | #: rhodecode/templates/settings/repo_settings.html:115 |
|
2327 | msgid "Confirm to lock repository" | |
|
2328 | msgstr "" | |||
|
2329 | ||||
|
2330 | #: rhodecode/templates/admin/repos/repo_edit.html:279 | |||
|
2331 | msgid "Repository is not locked" | |||
|
2332 | msgstr "" | |||
|
2333 | ||||
|
2334 | #: rhodecode/templates/admin/repos/repo_edit.html:284 | |||
|
2335 | msgid "Force locking on repository. Works only when anonymous access is disabled" | |||
|
2336 | msgstr "" | |||
|
2337 | ||||
|
2338 | #: rhodecode/templates/admin/repos/repo_edit.html:291 | |||
|
2339 | msgid "Set as fork of" | |||
|
2340 | msgstr "" | |||
|
2341 | ||||
|
2342 | #: rhodecode/templates/admin/repos/repo_edit.html:296 | |||
|
2343 | msgid "set" | |||
|
2344 | msgstr "" | |||
|
2345 | ||||
|
2346 | #: rhodecode/templates/admin/repos/repo_edit.html:300 | |||
|
2347 | msgid "Manually set this repository as a fork of another from the list" | |||
|
2348 | msgstr "" | |||
|
2349 | ||||
|
2350 | #: rhodecode/templates/admin/repos/repo_edit.html:306 | |||
|
2351 | #: rhodecode/templates/changeset/changeset_file_comment.html:41 | |||
|
2352 | msgid "Delete" | |||
|
2353 | msgstr "" | |||
|
2354 | ||||
|
2355 | #: rhodecode/templates/admin/repos/repo_edit.html:315 | |||
2155 | msgid "Remove this repository" |
|
2356 | msgid "Remove this repository" | |
2156 | msgstr "" |
|
2357 | msgstr "" | |
2157 |
|
2358 | |||
2158 |
#: rhodecode/templates/admin/repos/repo_edit.html: |
|
2359 | #: rhodecode/templates/admin/repos/repo_edit.html:315 | |
2159 | #: rhodecode/templates/settings/repo_settings.html:115 |
|
|||
2160 | msgid "Confirm to delete this repository" |
|
2360 | msgid "Confirm to delete this repository" | |
2161 | msgstr "" |
|
2361 | msgstr "" | |
2162 |
|
2362 | |||
2163 |
#: rhodecode/templates/admin/repos/repo_edit.html: |
|
2363 | #: rhodecode/templates/admin/repos/repo_edit.html:317 | |
2164 | #: rhodecode/templates/settings/repo_settings.html:119 |
|
2364 | #, python-format | |
|
2365 | msgid "this repository has %s fork" | |||
|
2366 | msgid_plural "this repository has %s forks" | |||
|
2367 | msgstr[0] "" | |||
|
2368 | msgstr[1] "" | |||
|
2369 | ||||
|
2370 | #: rhodecode/templates/admin/repos/repo_edit.html:318 | |||
|
2371 | msgid "Detach forks" | |||
|
2372 | msgstr "" | |||
|
2373 | ||||
|
2374 | #: rhodecode/templates/admin/repos/repo_edit.html:319 | |||
|
2375 | msgid "Delete forks" | |||
|
2376 | msgstr "" | |||
|
2377 | ||||
|
2378 | #: rhodecode/templates/admin/repos/repo_edit.html:322 | |||
2165 | msgid "" |
|
2379 | msgid "" | |
2166 | "This repository will be renamed in a special way in order to be " |
|
2380 | "This repository will be renamed in a special way in order to be " | |
2167 |
"unaccesible for RhodeCode and VCS systems. If you need fully delete it |
|
2381 | "unaccesible for RhodeCode and VCS systems. If you need to fully delete it" | |
2168 | "from file system please do it manually" |
|
2382 | " from file system please do it manually" | |
|
2383 | msgstr "" | |||
|
2384 | ||||
|
2385 | #: rhodecode/templates/admin/repos/repo_edit.html:336 | |||
|
2386 | msgid "Extra fields" | |||
|
2387 | msgstr "" | |||
|
2388 | ||||
|
2389 | #: rhodecode/templates/admin/repos/repo_edit.html:348 | |||
|
2390 | #, fuzzy, python-format | |||
|
2391 | msgid "Confirm to delete this field: %s" | |||
|
2392 | msgstr "" | |||
|
2393 | ||||
|
2394 | #: rhodecode/templates/admin/repos/repo_edit.html:362 | |||
|
2395 | msgid "New field key" | |||
|
2396 | msgstr "" | |||
|
2397 | ||||
|
2398 | #: rhodecode/templates/admin/repos/repo_edit.html:370 | |||
|
2399 | msgid "New field label" | |||
|
2400 | msgstr "" | |||
|
2401 | ||||
|
2402 | #: rhodecode/templates/admin/repos/repo_edit.html:373 | |||
|
2403 | msgid "Enter short label" | |||
|
2404 | msgstr "" | |||
|
2405 | ||||
|
2406 | #: rhodecode/templates/admin/repos/repo_edit.html:379 | |||
|
2407 | msgid "New field description" | |||
|
2408 | msgstr "" | |||
|
2409 | ||||
|
2410 | #: rhodecode/templates/admin/repos/repo_edit.html:382 | |||
|
2411 | msgid "Enter description of a field" | |||
2169 | msgstr "" |
|
2412 | msgstr "" | |
2170 |
|
2413 | |||
2171 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:3 |
|
2414 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:3 | |
@@ -2185,8 +2428,6 b' msgstr ""' | |||||
2185 |
|
2428 | |||
2186 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:6 |
|
2429 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:6 | |
2187 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6 |
|
2430 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6 | |
2188 | #: rhodecode/templates/admin/users/users.html:85 |
|
|||
2189 | #: rhodecode/templates/base/base.html:229 |
|
|||
2190 | msgid "admin" |
|
2431 | msgid "admin" | |
2191 | msgstr "" |
|
2432 | msgstr "" | |
2192 |
|
2433 | |||
@@ -2196,78 +2437,58 b' msgid "member"' | |||||
2196 | msgstr "" |
|
2437 | msgstr "" | |
2197 |
|
2438 | |||
2198 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 |
|
2439 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 | |
2199 | #: rhodecode/templates/data_table/_dt_elements.html:67 |
|
|||
2200 | #: rhodecode/templates/journal/journal.html:95 |
|
|||
2201 | #: rhodecode/templates/summary/summary.html:85 |
|
|||
2202 | msgid "private repository" |
|
2440 | msgid "private repository" | |
2203 | msgstr "" |
|
2441 | msgstr "" | |
2204 |
|
2442 | |||
2205 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:19 |
|
2443 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:19 | |
2206 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:28 |
|
2444 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:28 | |
2207 |
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html: |
|
2445 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20 | |
|
2446 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35 | |||
2208 | msgid "default" |
|
2447 | msgid "default" | |
2209 | msgstr "" |
|
2448 | msgstr "" | |
2210 |
|
2449 | |||
2211 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:33 |
|
2450 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:33 | |
2212 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:58 |
|
2451 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:58 | |
2213 |
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:2 |
|
2452 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25 | |
2214 |
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html: |
|
2453 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55 | |
2215 | msgid "revoke" |
|
2454 | msgid "revoke" | |
2216 | msgstr "" |
|
2455 | msgstr "" | |
2217 |
|
2456 | |||
2218 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:83 |
|
2457 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:83 | |
2219 |
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html: |
|
2458 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80 | |
2220 | msgid "Add another member" |
|
2459 | msgid "Add another member" | |
2221 | msgstr "" |
|
2460 | msgstr "" | |
2222 |
|
2461 | |||
2223 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:97 |
|
2462 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:97 | |
2224 |
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html: |
|
2463 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100 | |
2225 | msgid "Failed to remove user" |
|
2464 | msgid "Failed to remove user" | |
2226 | msgstr "" |
|
2465 | msgstr "" | |
2227 |
|
2466 | |||
2228 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:112 |
|
2467 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:112 | |
2229 |
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:1 |
|
2468 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116 | |
2230 |
msgid "Failed to remove user |
|
2469 | msgid "Failed to remove user group" | |
2231 | msgstr "" |
|
2470 | msgstr "" | |
2232 |
|
2471 | |||
2233 | #: rhodecode/templates/admin/repos/repos.html:5 |
|
2472 | #: rhodecode/templates/admin/repos/repos.html:5 | |
2234 | msgid "Repositories administration" |
|
2473 | msgid "Repositories administration" | |
2235 | msgstr "" |
|
2474 | msgstr "" | |
2236 |
|
2475 | |||
2237 |
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html: |
|
2476 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86 | |
2238 | msgid "apply to children" |
|
2477 | msgid "apply to children" | |
2239 | msgstr "" |
|
2478 | msgstr "" | |
2240 |
|
2479 | |||
2241 |
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:7 |
|
2480 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 | |
2242 | msgid "" |
|
2481 | msgid "" | |
2243 | "Set or revoke permission to all children of that group, including " |
|
2482 | "Set or revoke permission to all children of that group, including non-" | |
2244 | "repositories and other groups" |
|
2483 | "private repositories and other groups" | |
|
2484 | msgstr "" | |||
|
2485 | ||||
|
2486 | #: rhodecode/templates/admin/repos_groups/repos_groups.html:4 | |||
|
2487 | #, python-format | |||
|
2488 | msgid "%s Group Dashboard" | |||
2245 | msgstr "" |
|
2489 | msgstr "" | |
2246 |
|
2490 | |||
2247 | #: rhodecode/templates/admin/repos_groups/repos_groups.html:9 |
|
2491 | #: rhodecode/templates/admin/repos_groups/repos_groups.html:9 | |
2248 | #: rhodecode/templates/base/base.html:122 |
|
|||
2249 | #: rhodecode/templates/base/base.html:313 |
|
|||
2250 | #: rhodecode/templates/base/base.html:315 |
|
|||
2251 | #: rhodecode/templates/base/base.html:317 |
|
|||
2252 | #: rhodecode/templates/bookmarks/bookmarks.html:11 |
|
|||
2253 | #: rhodecode/templates/branches/branches.html:10 |
|
|||
2254 | #: rhodecode/templates/changelog/changelog.html:10 |
|
|||
2255 | #: rhodecode/templates/changeset/changeset.html:10 |
|
|||
2256 | #: rhodecode/templates/changeset/changeset_range.html:9 |
|
|||
2257 | #: rhodecode/templates/compare/compare_diff.html:9 |
|
|||
2258 | #: rhodecode/templates/files/file_diff.html:8 |
|
|||
2259 | #: rhodecode/templates/files/files.html:8 |
|
|||
2260 | #: rhodecode/templates/files/files_add.html:15 |
|
|||
2261 | #: rhodecode/templates/files/files_edit.html:15 |
|
|||
2262 | #: rhodecode/templates/followers/followers.html:9 |
|
|||
2263 | #: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9 |
|
|||
2264 | #: rhodecode/templates/pullrequests/pullrequest.html:8 |
|
|||
2265 | #: rhodecode/templates/pullrequests/pullrequest_show.html:8 |
|
|||
2266 | #: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 |
|
|||
2267 | #: rhodecode/templates/settings/repo_settings.html:9 |
|
|||
2268 | #: rhodecode/templates/shortlog/shortlog.html:10 |
|
|||
2269 | #: rhodecode/templates/summary/summary.html:8 |
|
|||
2270 | #: rhodecode/templates/tags/tags.html:11 |
|
|||
2271 | msgid "Home" |
|
2492 | msgid "Home" | |
2272 | msgstr "" |
|
2493 | msgstr "" | |
2273 |
|
2494 | |||
@@ -2276,80 +2497,78 b' msgid "with"' | |||||
2276 | msgstr "" |
|
2497 | msgstr "" | |
2277 |
|
2498 | |||
2278 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 |
|
2499 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 | |
2279 | msgid "Add repos group" |
|
2500 | msgid "Add repository group" | |
2280 | msgstr "" |
|
2501 | msgstr "" | |
2281 |
|
2502 | |||
2282 |
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:1 |
|
2503 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11 | |
2283 |
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:1 |
|
2504 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11 | |
2284 | msgid "Repos groups" |
|
2505 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16 | |
2285 | msgstr "" |
|
2506 | #: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82 | |
2286 |
|
2507 | msgid "Repository groups" | ||
2287 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12 |
|
2508 | msgstr "" | |
2288 | msgid "add new repos group" |
|
2509 | ||
2289 | msgstr "" |
|
2510 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:13 | |
2290 |
|
2511 | msgid "Add new repository group" | ||
2291 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50 |
|
2512 | msgstr "" | |
2292 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50 |
|
2513 | ||
|
2514 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:51 | |||
|
2515 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:56 | |||
2293 | msgid "Group parent" |
|
2516 | msgid "Group parent" | |
2294 | msgstr "" |
|
2517 | msgstr "" | |
2295 |
|
2518 | |||
2296 |
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 |
|
2519 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:59 | |
2297 | #: rhodecode/templates/admin/users/user_add.html:94 |
|
|||
2298 | #: rhodecode/templates/admin/users_groups/users_group_add.html:49 |
|
|||
2299 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:90 |
|
|||
2300 | #: rhodecode/templates/pullrequests/pullrequest_show.html:131 |
|
|||
2301 | msgid "save" |
|
2520 | msgid "save" | |
2302 | msgstr "" |
|
2521 | msgstr "" | |
2303 |
|
2522 | |||
2304 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5 |
|
2523 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5 | |
2305 | msgid "Edit repos group" |
|
2524 | msgid "Edit repository group" | |
2306 | msgstr "" |
|
2525 | msgstr "" | |
2307 |
|
2526 | |||
2308 |
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:1 |
|
2527 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:13 | |
2309 | msgid "edit repos group" |
|
2528 | #, python-format | |
2310 | msgstr "" |
|
2529 | msgid "Edit repository group %s" | |
2311 |
|
2530 | msgstr "" | ||
2312 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70 |
|
2531 | ||
|
2532 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:27 | |||
|
2533 | msgid "Add child group" | |||
|
2534 | msgstr "" | |||
|
2535 | ||||
|
2536 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76 | |||
2313 | msgid "" |
|
2537 | msgid "" | |
2314 | "Enable lock-by-pulling on group. This option will be applied to all other" |
|
2538 | "Enable lock-by-pulling on group. This option will be applied to all other" | |
2315 | " groups and repositories inside" |
|
2539 | " groups and repositories inside" | |
2316 | msgstr "" |
|
2540 | msgstr "" | |
2317 |
|
2541 | |||
2318 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5 |
|
2542 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5 | |
2319 |
msgid "Repositor |
|
2543 | msgid "Repository groups administration" | |
2320 | msgstr "" |
|
2544 | msgstr "" | |
2321 |
|
2545 | |||
2322 |
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html: |
|
2546 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:45 | |
2323 | msgid "ADD NEW GROUP" |
|
|||
2324 | msgstr "" |
|
|||
2325 |
|
||||
2326 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35 |
|
|||
2327 | msgid "Number of toplevel repositories" |
|
2547 | msgid "Number of toplevel repositories" | |
2328 | msgstr "" |
|
2548 | msgstr "" | |
2329 |
|
2549 | |||
2330 |
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html: |
|
2550 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64 | |
2331 | #: rhodecode/templates/admin/users/users.html:87 |
|
2551 | msgid "Edit" | |
2332 | #: rhodecode/templates/admin/users_groups/users_groups.html:35 |
|
2552 | msgstr "" | |
2333 | msgid "action" |
|
2553 | ||
2334 | msgstr "" |
|
2554 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65 | |
2335 |
|
2555 | #: rhodecode/templates/base/perms_summary.html:29 | ||
2336 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 |
|
2556 | #: rhodecode/templates/base/perms_summary.html:48 | |
2337 |
#: rhodecode/templates/ |
|
2557 | #: rhodecode/templates/base/perms_summary.html:50 | |
2338 | #: rhodecode/templates/admin/users_groups/users_groups.html:44 |
|
2558 | #: rhodecode/templates/data_table/_dt_elements.html:116 | |
2339 | #: rhodecode/templates/data_table/_dt_elements.html:7 |
|
2559 | #: rhodecode/templates/data_table/_dt_elements.html:117 | |
2340 | #: rhodecode/templates/data_table/_dt_elements.html:121 |
|
2560 | msgid "edit" | |
2341 | msgid "delete" |
|
2561 | msgstr "" | |
2342 | msgstr "" |
|
2562 | ||
2343 |
|
2563 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 | ||
2344 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 |
|
|||
2345 | #, python-format |
|
2564 | #, python-format | |
2346 | msgid "Confirm to delete this group: %s with %s repository" |
|
2565 | msgid "Confirm to delete this group: %s with %s repository" | |
2347 | msgid_plural "Confirm to delete this group: %s with %s repositories" |
|
2566 | msgid_plural "Confirm to delete this group: %s with %s repositories" | |
2348 | msgstr[0] "" |
|
2567 | msgstr[0] "" | |
2349 | msgstr[1] "" |
|
2568 | msgstr[1] "" | |
2350 |
|
2569 | |||
2351 |
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html: |
|
2570 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:78 | |
2352 |
msgid "There are no repositor |
|
2571 | msgid "There are no repository groups yet" | |
2353 | msgstr "" |
|
2572 | msgstr "" | |
2354 |
|
2573 | |||
2355 | #: rhodecode/templates/admin/settings/hooks.html:5 |
|
2574 | #: rhodecode/templates/admin/settings/hooks.html:5 | |
@@ -2357,12 +2576,6 b' msgstr ""' | |||||
2357 | msgid "Settings administration" |
|
2576 | msgid "Settings administration" | |
2358 | msgstr "" |
|
2577 | msgstr "" | |
2359 |
|
2578 | |||
2360 | #: rhodecode/templates/admin/settings/hooks.html:9 |
|
|||
2361 | #: rhodecode/templates/admin/settings/settings.html:9 |
|
|||
2362 | #: rhodecode/templates/settings/repo_settings.html:13 |
|
|||
2363 | msgid "Settings" |
|
|||
2364 | msgstr "" |
|
|||
2365 |
|
||||
2366 | #: rhodecode/templates/admin/settings/hooks.html:24 |
|
2579 | #: rhodecode/templates/admin/settings/hooks.html:24 | |
2367 | msgid "Built in hooks - read only" |
|
2580 | msgid "Built in hooks - read only" | |
2368 | msgstr "" |
|
2581 | msgstr "" | |
@@ -2379,205 +2592,210 b' msgstr ""' | |||||
2379 | msgid "Failed to remove hook" |
|
2592 | msgid "Failed to remove hook" | |
2380 | msgstr "" |
|
2593 | msgstr "" | |
2381 |
|
2594 | |||
2382 |
#: rhodecode/templates/admin/settings/settings.html:2 |
|
2595 | #: rhodecode/templates/admin/settings/settings.html:26 | |
2383 | msgid "Remap and rescan repositories" |
|
2596 | msgid "Remap and rescan repositories" | |
2384 | msgstr "" |
|
2597 | msgstr "" | |
2385 |
|
2598 | |||
2386 |
#: rhodecode/templates/admin/settings/settings.html:3 |
|
2599 | #: rhodecode/templates/admin/settings/settings.html:34 | |
2387 |
msgid " |
|
2600 | msgid "Rescan option" | |
2388 | msgstr "" |
|
2601 | msgstr "" | |
2389 |
|
2602 | |||
2390 |
#: rhodecode/templates/admin/settings/settings.html: |
|
2603 | #: rhodecode/templates/admin/settings/settings.html:40 | |
2391 | msgid "" |
|
2604 | msgid "" | |
2392 | "In case a repository was deleted from filesystem and there are leftovers " |
|
2605 | "In case a repository was deleted from filesystem and there are leftovers " | |
2393 | "in the database check this option to scan obsolete data in database and " |
|
2606 | "in the database check this option to scan obsolete data in database and " | |
2394 | "remove it." |
|
2607 | "remove it." | |
2395 | msgstr "" |
|
2608 | msgstr "" | |
2396 |
|
2609 | |||
2397 | #: rhodecode/templates/admin/settings/settings.html:39 |
|
|||
2398 | msgid "destroy old data" |
|
|||
2399 | msgstr "" |
|
|||
2400 |
|
||||
2401 | #: rhodecode/templates/admin/settings/settings.html:41 |
|
2610 | #: rhodecode/templates/admin/settings/settings.html:41 | |
|
2611 | msgid "Destroy old data" | |||
|
2612 | msgstr "" | |||
|
2613 | ||||
|
2614 | #: rhodecode/templates/admin/settings/settings.html:43 | |||
2402 | msgid "" |
|
2615 | msgid "" | |
2403 | "Rescan repositories location for new repositories. Also deletes obsolete " |
|
2616 | "Rescan repositories location for new repositories. Also deletes obsolete " | |
2404 | "if `destroy` flag is checked " |
|
2617 | "if `destroy` flag is checked " | |
2405 | msgstr "" |
|
2618 | msgstr "" | |
2406 |
|
2619 | |||
2407 |
#: rhodecode/templates/admin/settings/settings.html:4 |
|
2620 | #: rhodecode/templates/admin/settings/settings.html:48 | |
2408 | msgid "Rescan repositories" |
|
2621 | msgid "Rescan repositories" | |
2409 | msgstr "" |
|
2622 | msgstr "" | |
2410 |
|
2623 | |||
2411 |
#: rhodecode/templates/admin/settings/settings.html:5 |
|
2624 | #: rhodecode/templates/admin/settings/settings.html:54 | |
2412 | msgid "Whoosh indexing" |
|
2625 | msgid "Whoosh indexing" | |
2413 | msgstr "" |
|
2626 | msgstr "" | |
2414 |
|
2627 | |||
2415 |
#: rhodecode/templates/admin/settings/settings.html:6 |
|
2628 | #: rhodecode/templates/admin/settings/settings.html:62 | |
2416 |
msgid " |
|
2629 | msgid "Index build option" | |
2417 | msgstr "" |
|
2630 | msgstr "" | |
2418 |
|
2631 | |||
2419 |
#: rhodecode/templates/admin/settings/settings.html:6 |
|
2632 | #: rhodecode/templates/admin/settings/settings.html:67 | |
2420 |
msgid " |
|
2633 | msgid "Build from scratch" | |
2421 | msgstr "" |
|
2634 | msgstr "" | |
2422 |
|
2635 | |||
2423 |
#: rhodecode/templates/admin/settings/settings.html:7 |
|
2636 | #: rhodecode/templates/admin/settings/settings.html:73 | |
2424 | msgid "Reindex" |
|
2637 | msgid "Reindex" | |
2425 | msgstr "" |
|
2638 | msgstr "" | |
2426 |
|
2639 | |||
2427 |
#: rhodecode/templates/admin/settings/settings.html:7 |
|
2640 | #: rhodecode/templates/admin/settings/settings.html:79 | |
2428 | msgid "Global application settings" |
|
2641 | msgid "Global application settings" | |
2429 | msgstr "" |
|
2642 | msgstr "" | |
2430 |
|
2643 | |||
2431 |
#: rhodecode/templates/admin/settings/settings.html:8 |
|
2644 | #: rhodecode/templates/admin/settings/settings.html:88 | |
2432 | msgid "Application name" |
|
2645 | msgid "Site branding" | |
2433 | msgstr "" |
|
2646 | msgstr "" | |
2434 |
|
2647 | |||
2435 |
#: rhodecode/templates/admin/settings/settings.html:9 |
|
2648 | #: rhodecode/templates/admin/settings/settings.html:97 | |
2436 | msgid "Realm text" |
|
2649 | msgid "HTTP authentication realm" | |
2437 | msgstr "" |
|
2650 | msgstr "" | |
2438 |
|
2651 | |||
2439 |
#: rhodecode/templates/admin/settings/settings.html:10 |
|
2652 | #: rhodecode/templates/admin/settings/settings.html:106 | |
2440 | msgid "GA code" |
|
2653 | msgid "Google Analytics code" | |
2441 | msgstr "" |
|
2654 | msgstr "" | |
2442 |
|
2655 | |||
2443 |
#: rhodecode/templates/admin/settings/settings.html:11 |
|
2656 | #: rhodecode/templates/admin/settings/settings.html:114 | |
2444 |
#: rhodecode/templates/admin/settings/settings.html:1 |
|
2657 | #: rhodecode/templates/admin/settings/settings.html:186 | |
2445 |
#: rhodecode/templates/admin/settings/settings.html:2 |
|
2658 | #: rhodecode/templates/admin/settings/settings.html:277 | |
2446 | msgid "Save settings" |
|
2659 | msgid "Save settings" | |
2447 | msgstr "" |
|
2660 | msgstr "" | |
2448 |
|
2661 | |||
2449 |
#: rhodecode/templates/admin/settings/settings.html:11 |
|
2662 | #: rhodecode/templates/admin/settings/settings.html:121 | |
2450 | msgid "Visualisation settings" |
|
2663 | msgid "Visualisation settings" | |
2451 | msgstr "" |
|
2664 | msgstr "" | |
2452 |
|
2665 | |||
2453 |
#: rhodecode/templates/admin/settings/settings.html:12 |
|
2666 | #: rhodecode/templates/admin/settings/settings.html:129 | |
2454 | msgid "General" |
|
2667 | msgid "General" | |
2455 | msgstr "" |
|
2668 | msgstr "" | |
2456 |
|
2669 | |||
2457 |
#: rhodecode/templates/admin/settings/settings.html:13 |
|
2670 | #: rhodecode/templates/admin/settings/settings.html:134 | |
2458 | msgid "Use lightweight dashboard" |
|
2671 | msgid "Use lightweight dashboard" | |
2459 | msgstr "" |
|
2672 | msgstr "" | |
2460 |
|
2673 | |||
2461 |
#: rhodecode/templates/admin/settings/settings.html:1 |
|
2674 | #: rhodecode/templates/admin/settings/settings.html:140 | |
|
2675 | msgid "Use repository extra fields" | |||
|
2676 | msgstr "" | |||
|
2677 | ||||
|
2678 | #: rhodecode/templates/admin/settings/settings.html:147 | |||
2462 | msgid "Icons" |
|
2679 | msgid "Icons" | |
2463 | msgstr "" |
|
2680 | msgstr "" | |
2464 |
|
2681 | |||
2465 |
#: rhodecode/templates/admin/settings/settings.html:1 |
|
2682 | #: rhodecode/templates/admin/settings/settings.html:152 | |
2466 | msgid "Show public repo icon on repositories" |
|
2683 | msgid "Show public repo icon on repositories" | |
2467 | msgstr "" |
|
2684 | msgstr "" | |
2468 |
|
2685 | |||
2469 |
#: rhodecode/templates/admin/settings/settings.html:1 |
|
2686 | #: rhodecode/templates/admin/settings/settings.html:156 | |
2470 | msgid "Show private repo icon on repositories" |
|
2687 | msgid "Show private repo icon on repositories" | |
2471 | msgstr "" |
|
2688 | msgstr "" | |
2472 |
|
2689 | |||
2473 |
#: rhodecode/templates/admin/settings/settings.html:1 |
|
2690 | #: rhodecode/templates/admin/settings/settings.html:163 | |
2474 | msgid "Meta-Tagging" |
|
2691 | msgid "Meta-Tagging" | |
2475 | msgstr "" |
|
2692 | msgstr "" | |
2476 |
|
2693 | |||
2477 |
#: rhodecode/templates/admin/settings/settings.html:16 |
|
2694 | #: rhodecode/templates/admin/settings/settings.html:168 | |
2478 | msgid "Stylify recognised metatags:" |
|
2695 | msgid "Stylify recognised metatags:" | |
2479 | msgstr "" |
|
2696 | msgstr "" | |
2480 |
|
2697 | |||
2481 |
#: rhodecode/templates/admin/settings/settings.html:1 |
|
2698 | #: rhodecode/templates/admin/settings/settings.html:195 | |
2482 | msgid "VCS settings" |
|
2699 | msgid "VCS settings" | |
2483 | msgstr "" |
|
2700 | msgstr "" | |
2484 |
|
2701 | |||
2485 |
#: rhodecode/templates/admin/settings/settings.html: |
|
2702 | #: rhodecode/templates/admin/settings/settings.html:204 | |
2486 | msgid "Web" |
|
2703 | msgid "Web" | |
2487 | msgstr "" |
|
2704 | msgstr "" | |
2488 |
|
2705 | |||
2489 |
#: rhodecode/templates/admin/settings/settings.html:20 |
|
2706 | #: rhodecode/templates/admin/settings/settings.html:209 | |
2490 |
msgid " |
|
2707 | msgid "Require SSL for vcs operations" | |
2491 | msgstr "" |
|
2708 | msgstr "" | |
2492 |
|
2709 | |||
2493 |
#: rhodecode/templates/admin/settings/settings.html:2 |
|
2710 | #: rhodecode/templates/admin/settings/settings.html:211 | |
2494 | msgid "" |
|
2711 | msgid "" | |
2495 | "RhodeCode will require SSL for pushing or pulling. If SSL is missing it " |
|
2712 | "RhodeCode will require SSL for pushing or pulling. If SSL is missing it " | |
2496 | "will return HTTP Error 406: Not Acceptable" |
|
2713 | "will return HTTP Error 406: Not Acceptable" | |
2497 | msgstr "" |
|
2714 | msgstr "" | |
2498 |
|
2715 | |||
2499 |
#: rhodecode/templates/admin/settings/settings.html:2 |
|
2716 | #: rhodecode/templates/admin/settings/settings.html:217 | |
2500 | msgid "Hooks" |
|
2717 | msgid "Hooks" | |
2501 | msgstr "" |
|
2718 | msgstr "" | |
2502 |
|
2719 | |||
2503 | #: rhodecode/templates/admin/settings/settings.html:214 |
|
|||
2504 | msgid "Update repository after push (hg update)" |
|
|||
2505 | msgstr "" |
|
|||
2506 |
|
||||
2507 | #: rhodecode/templates/admin/settings/settings.html:218 |
|
|||
2508 | msgid "Show repository size after push" |
|
|||
2509 | msgstr "" |
|
|||
2510 |
|
||||
2511 | #: rhodecode/templates/admin/settings/settings.html:222 |
|
2720 | #: rhodecode/templates/admin/settings/settings.html:222 | |
2512 | msgid "Log user push commands" |
|
2721 | msgid "Update repository after push (hg update)" | |
2513 | msgstr "" |
|
2722 | msgstr "" | |
2514 |
|
2723 | |||
2515 | #: rhodecode/templates/admin/settings/settings.html:226 |
|
2724 | #: rhodecode/templates/admin/settings/settings.html:226 | |
2516 | msgid "Log user pull commands" |
|
2725 | msgid "Show repository size after push" | |
2517 | msgstr "" |
|
2726 | msgstr "" | |
2518 |
|
2727 | |||
2519 | #: rhodecode/templates/admin/settings/settings.html:230 |
|
2728 | #: rhodecode/templates/admin/settings/settings.html:230 | |
2520 | msgid "advanced setup" |
|
2729 | msgid "Log user push commands" | |
2521 | msgstr "" |
|
2730 | msgstr "" | |
2522 |
|
2731 | |||
2523 |
#: rhodecode/templates/admin/settings/settings.html:23 |
|
2732 | #: rhodecode/templates/admin/settings/settings.html:234 | |
|
2733 | msgid "Log user pull commands" | |||
|
2734 | msgstr "" | |||
|
2735 | ||||
|
2736 | #: rhodecode/templates/admin/settings/settings.html:238 | |||
|
2737 | msgid "Advanced setup" | |||
|
2738 | msgstr "" | |||
|
2739 | ||||
|
2740 | #: rhodecode/templates/admin/settings/settings.html:243 | |||
2524 | msgid "Mercurial Extensions" |
|
2741 | msgid "Mercurial Extensions" | |
2525 | msgstr "" |
|
2742 | msgstr "" | |
2526 |
|
2743 | |||
2527 |
#: rhodecode/templates/admin/settings/settings.html:24 |
|
2744 | #: rhodecode/templates/admin/settings/settings.html:248 | |
2528 |
msgid "largefiles extension |
|
2745 | msgid "Enable largefiles extension" | |
2529 | msgstr "" |
|
2746 | msgstr "" | |
2530 |
|
2747 | |||
2531 |
#: rhodecode/templates/admin/settings/settings.html:2 |
|
2748 | #: rhodecode/templates/admin/settings/settings.html:252 | |
2532 |
msgid "hgsubversion extension |
|
2749 | msgid "Enable hgsubversion extension" | |
2533 | msgstr "" |
|
2750 | msgstr "" | |
2534 |
|
2751 | |||
2535 |
#: rhodecode/templates/admin/settings/settings.html:24 |
|
2752 | #: rhodecode/templates/admin/settings/settings.html:254 | |
2536 | msgid "" |
|
2753 | msgid "" | |
2537 |
"Requires hgsubversion library installed. Allows clon |
|
2754 | "Requires hgsubversion library installed. Allows cloning from svn remote " | |
2538 | "locations" |
|
2755 | "locations" | |
2539 | msgstr "" |
|
2756 | msgstr "" | |
2540 |
|
2757 | |||
2541 |
#: rhodecode/templates/admin/settings/settings.html:2 |
|
2758 | #: rhodecode/templates/admin/settings/settings.html:264 | |
2542 | msgid "Repositories location" |
|
2759 | msgid "Repositories location" | |
2543 | msgstr "" |
|
2760 | msgstr "" | |
2544 |
|
2761 | |||
2545 |
#: rhodecode/templates/admin/settings/settings.html:26 |
|
2762 | #: rhodecode/templates/admin/settings/settings.html:269 | |
2546 | msgid "" |
|
2763 | msgid "" | |
2547 | "This a crucial application setting. If you are really sure you need to " |
|
2764 | "This a crucial application setting. If you are really sure you need to " | |
2548 | "change this, you must restart application in order to make this setting " |
|
2765 | "change this, you must restart application in order to make this setting " | |
2549 | "take effect. Click this label to unlock." |
|
2766 | "take effect. Click this label to unlock." | |
2550 | msgstr "" |
|
2767 | msgstr "" | |
2551 |
|
2768 | |||
2552 |
#: rhodecode/templates/admin/settings/settings.html:2 |
|
2769 | #: rhodecode/templates/admin/settings/settings.html:270 | |
2553 |
#: rhodecode/templates/base/base.html: |
|
2770 | #: rhodecode/templates/base/base.html:131 | |
2554 |
msgid " |
|
2771 | msgid "Unlock" | |
2555 | msgstr "" |
|
2772 | msgstr "" | |
2556 |
|
2773 | |||
2557 |
#: rhodecode/templates/admin/settings/settings.html:2 |
|
2774 | #: rhodecode/templates/admin/settings/settings.html:272 | |
2558 | msgid "" |
|
2775 | msgid "" | |
2559 | "Location where repositories are stored. After changing this value a " |
|
2776 | "Location where repositories are stored. After changing this value a " | |
2560 | "restart, and rescan is required" |
|
2777 | "restart, and rescan is required" | |
2561 | msgstr "" |
|
2778 | msgstr "" | |
2562 |
|
2779 | |||
2563 |
#: rhodecode/templates/admin/settings/settings.html:2 |
|
2780 | #: rhodecode/templates/admin/settings/settings.html:292 | |
2564 | msgid "Test Email" |
|
2781 | msgid "Test Email" | |
2565 | msgstr "" |
|
2782 | msgstr "" | |
2566 |
|
2783 | |||
2567 |
#: rhodecode/templates/admin/settings/settings.html: |
|
2784 | #: rhodecode/templates/admin/settings/settings.html:300 | |
2568 | msgid "Email to" |
|
2785 | msgid "Email to" | |
2569 | msgstr "" |
|
2786 | msgstr "" | |
2570 |
|
2787 | |||
2571 | #: rhodecode/templates/admin/settings/settings.html:299 |
|
|||
2572 | msgid "Send" |
|
|||
2573 | msgstr "" |
|
|||
2574 |
|
||||
2575 | #: rhodecode/templates/admin/settings/settings.html:305 |
|
|||
2576 | msgid "System Info and Packages" |
|
|||
2577 | msgstr "" |
|
|||
2578 |
|
||||
2579 | #: rhodecode/templates/admin/settings/settings.html:308 |
|
2788 | #: rhodecode/templates/admin/settings/settings.html:308 | |
2580 |
msgid " |
|
2789 | msgid "Send" | |
|
2790 | msgstr "" | |||
|
2791 | ||||
|
2792 | #: rhodecode/templates/admin/settings/settings.html:314 | |||
|
2793 | msgid "System Info and Packages" | |||
|
2794 | msgstr "" | |||
|
2795 | ||||
|
2796 | #: rhodecode/templates/admin/settings/settings.html:317 | |||
|
2797 | #: rhodecode/templates/changelog/changelog.html:42 | |||
|
2798 | msgid "Show" | |||
2581 | msgstr "" |
|
2799 | msgstr "" | |
2582 |
|
2800 | |||
2583 | #: rhodecode/templates/admin/users/user_add.html:5 |
|
2801 | #: rhodecode/templates/admin/users/user_add.html:5 | |
@@ -2586,11 +2804,13 b' msgstr ""' | |||||
2586 |
|
2804 | |||
2587 | #: rhodecode/templates/admin/users/user_add.html:10 |
|
2805 | #: rhodecode/templates/admin/users/user_add.html:10 | |
2588 | #: rhodecode/templates/admin/users/user_edit.html:11 |
|
2806 | #: rhodecode/templates/admin/users/user_edit.html:11 | |
|
2807 | #: rhodecode/templates/base/base.html:71 | |||
2589 | msgid "Users" |
|
2808 | msgid "Users" | |
2590 | msgstr "" |
|
2809 | msgstr "" | |
2591 |
|
2810 | |||
2592 | #: rhodecode/templates/admin/users/user_add.html:12 |
|
2811 | #: rhodecode/templates/admin/users/user_add.html:12 | |
2593 | msgid "add new user" |
|
2812 | #: rhodecode/templates/admin/users/users.html:23 | |
|
2813 | msgid "Add new user" | |||
2594 | msgstr "" |
|
2814 | msgstr "" | |
2595 |
|
2815 | |||
2596 | #: rhodecode/templates/admin/users/user_add.html:50 |
|
2816 | #: rhodecode/templates/admin/users/user_add.html:50 | |
@@ -2601,6 +2821,12 b' msgstr ""' | |||||
2601 | msgid "Edit user" |
|
2821 | msgid "Edit user" | |
2602 | msgstr "" |
|
2822 | msgstr "" | |
2603 |
|
2823 | |||
|
2824 | #: rhodecode/templates/admin/users/user_edit.html:13 | |||
|
2825 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:13 | |||
|
2826 | #, python-format | |||
|
2827 | msgid "Edit %s" | |||
|
2828 | msgstr "" | |||
|
2829 | ||||
2604 | #: rhodecode/templates/admin/users/user_edit.html:34 |
|
2830 | #: rhodecode/templates/admin/users/user_edit.html:34 | |
2605 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10 |
|
2831 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10 | |
2606 | msgid "Change your avatar at" |
|
2832 | msgid "Change your avatar at" | |
@@ -2616,26 +2842,31 b' msgstr ""' | |||||
2616 | msgid "API key" |
|
2842 | msgid "API key" | |
2617 | msgstr "" |
|
2843 | msgstr "" | |
2618 |
|
2844 | |||
2619 |
#: rhodecode/templates/admin/users/user_edit.html: |
|
2845 | #: rhodecode/templates/admin/users/user_edit.html:50 | |
|
2846 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:25 | |||
|
2847 | msgid "Current IP" | |||
|
2848 | msgstr "" | |||
|
2849 | ||||
|
2850 | #: rhodecode/templates/admin/users/user_edit.html:70 | |||
2620 | msgid "LDAP DN" |
|
2851 | msgid "LDAP DN" | |
2621 | msgstr "" |
|
2852 | msgstr "" | |
2622 |
|
2853 | |||
2623 |
#: rhodecode/templates/admin/users/user_edit.html:7 |
|
2854 | #: rhodecode/templates/admin/users/user_edit.html:79 | |
2624 |
#: rhodecode/templates/admin/users/user_edit_my_account_form.html: |
|
2855 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 | |
2625 | msgid "New password" |
|
2856 | msgid "New password" | |
2626 | msgstr "" |
|
2857 | msgstr "" | |
2627 |
|
2858 | |||
2628 |
#: rhodecode/templates/admin/users/user_edit.html:8 |
|
2859 | #: rhodecode/templates/admin/users/user_edit.html:88 | |
2629 |
#: rhodecode/templates/admin/users/user_edit_my_account_form.html: |
|
2860 | #: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 | |
2630 | msgid "New password confirmation" |
|
2861 | msgid "New password confirmation" | |
2631 | msgstr "" |
|
2862 | msgstr "" | |
2632 |
|
2863 | |||
2633 |
#: rhodecode/templates/admin/users/user_edit.html:15 |
|
2864 | #: rhodecode/templates/admin/users/user_edit.html:158 | |
2634 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:108 |
|
2865 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:108 | |
2635 | msgid "Inherit default permissions" |
|
2866 | msgid "Inherit default permissions" | |
2636 | msgstr "" |
|
2867 | msgstr "" | |
2637 |
|
2868 | |||
2638 |
#: rhodecode/templates/admin/users/user_edit.html:1 |
|
2869 | #: rhodecode/templates/admin/users/user_edit.html:163 | |
2639 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:113 |
|
2870 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:113 | |
2640 | #, python-format |
|
2871 | #, python-format | |
2641 | msgid "" |
|
2872 | msgid "" | |
@@ -2643,53 +2874,31 b' msgid ""' | |||||
2643 | "options does not have any action" |
|
2874 | "options does not have any action" | |
2644 | msgstr "" |
|
2875 | msgstr "" | |
2645 |
|
2876 | |||
2646 |
#: rhodecode/templates/admin/users/user_edit.html:16 |
|
2877 | #: rhodecode/templates/admin/users/user_edit.html:169 | |
2647 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:119 |
|
2878 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:119 | |
2648 | msgid "Create repositories" |
|
2879 | msgid "Create repositories" | |
2649 | msgstr "" |
|
2880 | msgstr "" | |
2650 |
|
2881 | |||
2651 |
#: rhodecode/templates/admin/users/user_edit.html:17 |
|
2882 | #: rhodecode/templates/admin/users/user_edit.html:177 | |
2652 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:127 |
|
2883 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:127 | |
2653 | msgid "Fork repositories" |
|
2884 | msgid "Fork repositories" | |
2654 | msgstr "" |
|
2885 | msgstr "" | |
2655 |
|
2886 | |||
2656 |
#: rhodecode/templates/admin/users/user_edit.html: |
|
2887 | #: rhodecode/templates/admin/users/user_edit.html:200 | |
2657 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22 |
|
|||
2658 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39 |
|
|||
2659 | msgid "Nothing here yet" |
|
|||
2660 | msgstr "" |
|
|||
2661 |
|
||||
2662 | #: rhodecode/templates/admin/users/user_edit.html:197 |
|
|||
2663 | #: rhodecode/templates/admin/users/user_edit_my_account.html:60 |
|
|||
2664 | #: rhodecode/templates/admin/users/user_edit_my_account.html:217 |
|
|||
2665 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:185 |
|
|||
2666 | msgid "Permission" |
|
|||
2667 | msgstr "" |
|
|||
2668 |
|
||||
2669 | #: rhodecode/templates/admin/users/user_edit.html:198 |
|
|||
2670 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:186 |
|
|||
2671 | msgid "Edit Permission" |
|
|||
2672 | msgstr "" |
|
|||
2673 |
|
||||
2674 | #: rhodecode/templates/admin/users/user_edit.html:247 |
|
|||
2675 | msgid "Email addresses" |
|
2888 | msgid "Email addresses" | |
2676 | msgstr "" |
|
2889 | msgstr "" | |
2677 |
|
2890 | |||
2678 |
#: rhodecode/templates/admin/users/user_edit.html:2 |
|
2891 | #: rhodecode/templates/admin/users/user_edit.html:213 | |
2679 | #, python-format |
|
2892 | #, python-format | |
2680 | msgid "Confirm to delete this email: %s" |
|
2893 | msgid "Confirm to delete this email: %s" | |
2681 | msgstr "" |
|
2894 | msgstr "" | |
2682 |
|
2895 | |||
2683 |
#: rhodecode/templates/admin/users/user_edit.html:27 |
|
2896 | #: rhodecode/templates/admin/users/user_edit.html:227 | |
2684 | msgid "New email address" |
|
2897 | msgid "New email address" | |
2685 | msgstr "" |
|
2898 | msgstr "" | |
2686 |
|
2899 | |||
2687 | #: rhodecode/templates/admin/users/user_edit.html:281 |
|
|||
2688 | msgid "Add" |
|
|||
2689 | msgstr "" |
|
|||
2690 |
|
||||
2691 | #: rhodecode/templates/admin/users/user_edit_my_account.html:5 |
|
2900 | #: rhodecode/templates/admin/users/user_edit_my_account.html:5 | |
2692 |
#: rhodecode/templates/base/base.html: |
|
2901 | #: rhodecode/templates/base/base.html:242 | |
2693 | msgid "My account" |
|
2902 | msgid "My account" | |
2694 | msgstr "" |
|
2903 | msgstr "" | |
2695 |
|
2904 | |||
@@ -2702,7 +2911,7 b' msgid "My permissions"' | |||||
2702 | msgstr "" |
|
2911 | msgstr "" | |
2703 |
|
2912 | |||
2704 | #: rhodecode/templates/admin/users/user_edit_my_account.html:38 |
|
2913 | #: rhodecode/templates/admin/users/user_edit_my_account.html:38 | |
2705 |
#: rhodecode/templates/journal/journal.html:4 |
|
2914 | #: rhodecode/templates/journal/journal.html:54 | |
2706 | msgid "My repos" |
|
2915 | msgid "My repos" | |
2707 | msgstr "" |
|
2916 | msgstr "" | |
2708 |
|
2917 | |||
@@ -2710,132 +2919,97 b' msgstr ""' | |||||
2710 | msgid "My pull requests" |
|
2919 | msgid "My pull requests" | |
2711 | msgstr "" |
|
2920 | msgstr "" | |
2712 |
|
2921 | |||
2713 | #: rhodecode/templates/admin/users/user_edit_my_account.html:45 |
|
|||
2714 | msgid "Add repo" |
|
|||
2715 | msgstr "" |
|
|||
2716 |
|
||||
2717 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2 |
|
2922 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2 | |
|
2923 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:4 | |||
|
2924 | msgid "Show closed pull requests" | |||
|
2925 | msgstr "" | |||
|
2926 | ||||
|
2927 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:6 | |||
2718 | msgid "Opened by me" |
|
2928 | msgid "Opened by me" | |
2719 | msgstr "" |
|
2929 | msgstr "" | |
2720 |
|
2930 | |||
2721 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10 |
|
|||
2722 | #, python-format |
|
|||
2723 | msgid "Pull request #%s opened on %s" |
|
|||
2724 | msgstr "" |
|
|||
2725 |
|
||||
2726 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15 |
|
2931 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15 | |
|
2932 | #, python-format | |||
|
2933 | msgid "Pull request #%s opened on %s" | |||
|
2934 | msgstr "" | |||
|
2935 | ||||
|
2936 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17 | |||
|
2937 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45 | |||
|
2938 | #: rhodecode/templates/pullrequests/pullrequest_data.html:7 | |||
|
2939 | #: rhodecode/templates/pullrequests/pullrequest_show.html:27 | |||
|
2940 | #: rhodecode/templates/pullrequests/pullrequest_show.html:42 | |||
|
2941 | msgid "Closed" | |||
|
2942 | msgstr "" | |||
|
2943 | ||||
|
2944 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:23 | |||
2727 | msgid "Confirm to delete this pull request" |
|
2945 | msgid "Confirm to delete this pull request" | |
2728 | msgstr "" |
|
2946 | msgstr "" | |
2729 |
|
2947 | |||
2730 |
#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html: |
|
2948 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:30 | |
|
2949 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:51 | |||
|
2950 | msgid "Nothing here yet" | |||
|
2951 | msgstr "" | |||
|
2952 | ||||
|
2953 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:34 | |||
2731 | msgid "I participate in" |
|
2954 | msgid "I participate in" | |
2732 | msgstr "" |
|
2955 | msgstr "" | |
2733 |
|
2956 | |||
2734 |
#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html: |
|
2957 | #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42 | |
2735 |
#: rhodecode/templates/pullrequests/pullrequest_ |
|
2958 | #: rhodecode/templates/pullrequests/pullrequest_data.html:11 | |
2736 | #, python-format |
|
2959 | #, python-format | |
2737 | msgid "Pull request #%s opened by %s on %s" |
|
2960 | msgid "Pull request #%s opened by %s on %s" | |
2738 | msgstr "" |
|
2961 | msgstr "" | |
2739 |
|
2962 | |||
2740 | #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7 |
|
|||
2741 | #: rhodecode/templates/bookmarks/bookmarks.html:40 |
|
|||
2742 | #: rhodecode/templates/bookmarks/bookmarks_data.html:9 |
|
|||
2743 | #: rhodecode/templates/branches/branches.html:54 |
|
|||
2744 | #: rhodecode/templates/branches/branches_data.html:9 |
|
|||
2745 | #: rhodecode/templates/journal/journal_page_repos.html:8 |
|
|||
2746 | #: rhodecode/templates/tags/tags.html:55 |
|
|||
2747 | #: rhodecode/templates/tags/tags_data.html:9 |
|
|||
2748 | msgid "Revision" |
|
|||
2749 | msgstr "" |
|
|||
2750 |
|
||||
2751 | #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 |
|
|||
2752 | #: rhodecode/templates/journal/journal_page_repos.html:29 |
|
|||
2753 | msgid "private" |
|
|||
2754 | msgstr "" |
|
|||
2755 |
|
||||
2756 | #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31 |
|
|||
2757 | #: rhodecode/templates/data_table/_dt_elements.html:7 |
|
|||
2758 | #: rhodecode/templates/journal/journal_page_repos.html:32 |
|
|||
2759 | #, python-format |
|
|||
2760 | msgid "Confirm to delete this repository: %s" |
|
|||
2761 | msgstr "" |
|
|||
2762 |
|
||||
2763 | #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38 |
|
|||
2764 | #: rhodecode/templates/journal/journal_page_repos.html:42 |
|
|||
2765 | msgid "No repositories yet" |
|
|||
2766 | msgstr "" |
|
|||
2767 |
|
||||
2768 | #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40 |
|
|||
2769 | #: rhodecode/templates/journal/journal_page_repos.html:44 |
|
|||
2770 | msgid "create one now" |
|
|||
2771 | msgstr "" |
|
|||
2772 |
|
||||
2773 | #: rhodecode/templates/admin/users/users.html:5 |
|
2963 | #: rhodecode/templates/admin/users/users.html:5 | |
2774 | msgid "Users administration" |
|
2964 | msgid "Users administration" | |
2775 | msgstr "" |
|
2965 | msgstr "" | |
2776 |
|
2966 | |||
2777 | #: rhodecode/templates/admin/users/users.html:9 |
|
2967 | #: rhodecode/templates/admin/users/users.html:9 | |
2778 | #: rhodecode/templates/base/base.html:235 |
|
|||
2779 | msgid "users" |
|
2968 | msgid "users" | |
2780 | msgstr "" |
|
2969 | msgstr "" | |
2781 |
|
2970 | |||
2782 | #: rhodecode/templates/admin/users/users.html:23 |
|
|||
2783 | msgid "ADD NEW USER" |
|
|||
2784 | msgstr "" |
|
|||
2785 |
|
||||
2786 | #: rhodecode/templates/admin/users/users.html:77 |
|
|||
2787 | msgid "username" |
|
|||
2788 | msgstr "" |
|
|||
2789 |
|
||||
2790 | #: rhodecode/templates/admin/users/users.html:80 |
|
2971 | #: rhodecode/templates/admin/users/users.html:80 | |
2791 |
msgid " |
|
2972 | msgid "Firstname" | |
2792 | msgstr "" |
|
2973 | msgstr "" | |
2793 |
|
2974 | |||
2794 | #: rhodecode/templates/admin/users/users.html:81 |
|
2975 | #: rhodecode/templates/admin/users/users.html:81 | |
2795 |
msgid " |
|
2976 | msgid "Lastname" | |
2796 | msgstr "" |
|
2977 | msgstr "" | |
2797 |
|
2978 | |||
2798 | #: rhodecode/templates/admin/users/users.html:82 |
|
2979 | #: rhodecode/templates/admin/users/users.html:82 | |
2799 |
msgid " |
|
2980 | msgid "Last login" | |
2800 | msgstr "" |
|
|||
2801 |
|
||||
2802 | #: rhodecode/templates/admin/users/users.html:84 |
|
|||
2803 | #: rhodecode/templates/admin/users_groups/users_groups.html:34 |
|
|||
2804 | msgid "active" |
|
|||
2805 | msgstr "" |
|
|||
2806 |
|
||||
2807 | #: rhodecode/templates/admin/users/users.html:86 |
|
|||
2808 | #: rhodecode/templates/base/base.html:238 |
|
|||
2809 | msgid "ldap" |
|
|||
2810 | msgstr "" |
|
2981 | msgstr "" | |
2811 |
|
2982 | |||
2812 | #: rhodecode/templates/admin/users_groups/users_group_add.html:5 |
|
2983 | #: rhodecode/templates/admin/users_groups/users_group_add.html:5 | |
2813 |
msgid "Add user |
|
2984 | msgid "Add user group" | |
2814 | msgstr "" |
|
2985 | msgstr "" | |
2815 |
|
2986 | |||
2816 | #: rhodecode/templates/admin/users_groups/users_group_add.html:10 |
|
2987 | #: rhodecode/templates/admin/users_groups/users_group_add.html:10 | |
2817 |
#: rhodecode/templates/admin/users_groups/users_groups.html: |
|
2988 | #: rhodecode/templates/admin/users_groups/users_groups.html:11 | |
2818 | msgid "Users groups" |
|
2989 | #: rhodecode/templates/base/base.html:72 | |
|
2990 | msgid "User groups" | |||
2819 | msgstr "" |
|
2991 | msgstr "" | |
2820 |
|
2992 | |||
2821 | #: rhodecode/templates/admin/users_groups/users_group_add.html:12 |
|
2993 | #: rhodecode/templates/admin/users_groups/users_group_add.html:12 | |
2822 | msgid "add new users group" |
|
2994 | #: rhodecode/templates/admin/users_groups/users_groups.html:25 | |
|
2995 | msgid "Add new user group" | |||
2823 | msgstr "" |
|
2996 | msgstr "" | |
2824 |
|
2997 | |||
2825 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:5 |
|
2998 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:5 | |
2826 |
msgid "Edit user |
|
2999 | msgid "Edit user group" | |
2827 | msgstr "" |
|
3000 | msgstr "" | |
2828 |
|
3001 | |||
2829 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:11 |
|
3002 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:11 | |
2830 |
msgid "User |
|
3003 | msgid "UserGroups" | |
2831 | msgstr "" |
|
3004 | msgstr "" | |
2832 |
|
3005 | |||
2833 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:50 |
|
3006 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:50 | |
|
3007 | #: rhodecode/templates/admin/users_groups/users_groups.html:35 | |||
2834 | msgid "Members" |
|
3008 | msgid "Members" | |
2835 | msgstr "" |
|
3009 | msgstr "" | |
2836 |
|
3010 | |||
2837 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:58 |
|
3011 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:58 | |
2838 |
msgid "Cho |
|
3012 | msgid "Chosen group members" | |
2839 | msgstr "" |
|
3013 | msgstr "" | |
2840 |
|
3014 | |||
2841 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:61 |
|
3015 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:61 | |
@@ -2850,262 +3024,261 b' msgstr ""' | |||||
2850 | msgid "Add all elements" |
|
3024 | msgid "Add all elements" | |
2851 | msgstr "" |
|
3025 | msgstr "" | |
2852 |
|
3026 | |||
2853 |
#: rhodecode/templates/admin/users_groups/users_group_edit.html:1 |
|
3027 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:150 | |
2854 | msgid "Group members" |
|
3028 | msgid "Group members" | |
2855 | msgstr "" |
|
3029 | msgstr "" | |
2856 |
|
3030 | |||
2857 |
#: rhodecode/templates/admin/users_groups/users_group_edit.html:16 |
|
3031 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:167 | |
2858 | msgid "No members yet" |
|
3032 | msgid "No members yet" | |
2859 | msgstr "" |
|
3033 | msgstr "" | |
2860 |
|
3034 | |||
2861 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:171 |
|
|||
2862 | msgid "Permissions defined for this group" |
|
|||
2863 | msgstr "" |
|
|||
2864 |
|
||||
2865 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:178 |
|
|||
2866 | msgid "No permissions set yet" |
|
|||
2867 | msgstr "" |
|
|||
2868 |
|
||||
2869 | #: rhodecode/templates/admin/users_groups/users_groups.html:5 |
|
3035 | #: rhodecode/templates/admin/users_groups/users_groups.html:5 | |
2870 |
msgid "User |
|
3036 | msgid "User groups administration" | |
2871 | msgstr "" |
|
3037 | msgstr "" | |
2872 |
|
3038 | |||
2873 |
#: rhodecode/templates/admin/users_groups/users_groups.html: |
|
3039 | #: rhodecode/templates/admin/users_groups/users_groups.html:47 | |
2874 | msgid "ADD NEW USER GROUP" |
|
3040 | #, fuzzy, python-format | |
2875 | msgstr "" |
|
3041 | msgid "Confirm to delete this user group: %s" | |
2876 |
|
3042 | msgstr "" | ||
2877 | #: rhodecode/templates/admin/users_groups/users_groups.html:32 |
|
3043 | ||
2878 | msgid "group name" |
|
3044 | #: rhodecode/templates/base/base.html:42 | |
2879 | msgstr "" |
|
|||
2880 |
|
||||
2881 | #: rhodecode/templates/admin/users_groups/users_groups.html:33 |
|
|||
2882 | #: rhodecode/templates/base/root.html:46 |
|
|||
2883 | msgid "members" |
|
|||
2884 | msgstr "" |
|
|||
2885 |
|
||||
2886 | #: rhodecode/templates/admin/users_groups/users_groups.html:45 |
|
|||
2887 | #, python-format |
|
|||
2888 | msgid "Confirm to delete this users group: %s" |
|
|||
2889 | msgstr "" |
|
|||
2890 |
|
||||
2891 | #: rhodecode/templates/base/base.html:41 |
|
|||
2892 | msgid "Submit a bug" |
|
3045 | msgid "Submit a bug" | |
2893 | msgstr "" |
|
3046 | msgstr "" | |
2894 |
|
3047 | |||
2895 |
#: rhodecode/templates/base/base.html: |
|
3048 | #: rhodecode/templates/base/base.html:108 | |
2896 | msgid "Login to your account" |
|
3049 | #: rhodecode/templates/data_table/_dt_elements.html:9 | |
2897 | msgstr "" |
|
3050 | #: rhodecode/templates/data_table/_dt_elements.html:11 | |
2898 |
|
3051 | #: rhodecode/templates/data_table/_dt_elements.html:13 | ||
2899 |
#: rhodecode/templates/ |
|
3052 | #: rhodecode/templates/pullrequests/pullrequest_show.html:81 | |
2900 | msgid "Forgot password ?" |
|
3053 | #: rhodecode/templates/summary/summary.html:8 | |
2901 | msgstr "" |
|
3054 | msgid "Summary" | |
2902 |
|
3055 | msgstr "" | ||
2903 | #: rhodecode/templates/base/base.html:107 |
|
3056 | ||
2904 | msgid "Log In" |
|
3057 | #: rhodecode/templates/base/base.html:109 | |
|
3058 | #: rhodecode/templates/changelog/changelog.html:11 | |||
|
3059 | #: rhodecode/templates/data_table/_dt_elements.html:17 | |||
|
3060 | #: rhodecode/templates/data_table/_dt_elements.html:19 | |||
|
3061 | #: rhodecode/templates/data_table/_dt_elements.html:21 | |||
|
3062 | msgid "Changelog" | |||
|
3063 | msgstr "" | |||
|
3064 | ||||
|
3065 | #: rhodecode/templates/base/base.html:110 | |||
|
3066 | #: rhodecode/templates/data_table/_dt_elements.html:25 | |||
|
3067 | #: rhodecode/templates/data_table/_dt_elements.html:27 | |||
|
3068 | #: rhodecode/templates/data_table/_dt_elements.html:29 | |||
|
3069 | #: rhodecode/templates/files/files.html:12 | |||
|
3070 | msgid "Files" | |||
|
3071 | msgstr "" | |||
|
3072 | ||||
|
3073 | #: rhodecode/templates/base/base.html:112 | |||
|
3074 | msgid "Switch To" | |||
|
3075 | msgstr "" | |||
|
3076 | ||||
|
3077 | #: rhodecode/templates/base/base.html:114 | |||
|
3078 | #: rhodecode/templates/base/base.html:267 | |||
|
3079 | msgid "loading..." | |||
2905 | msgstr "" |
|
3080 | msgstr "" | |
2906 |
|
3081 | |||
2907 | #: rhodecode/templates/base/base.html:118 |
|
3082 | #: rhodecode/templates/base/base.html:118 | |
2908 |
msgid " |
|
3083 | msgid "Options" | |
2909 | msgstr "" |
|
3084 | msgstr "" | |
2910 |
|
3085 | |||
2911 |
#: rhodecode/templates/base/base.html:12 |
|
3086 | #: rhodecode/templates/base/base.html:124 | |
2912 |
#: rhodecode/templates/ |
|
3087 | #: rhodecode/templates/forks/forks_data.html:21 | |
2913 | #: rhodecode/templates/base/base.html:324 |
|
3088 | msgid "Compare fork" | |
2914 | #: rhodecode/templates/base/base.html:326 |
|
3089 | msgstr "" | |
2915 | #: rhodecode/templates/journal/journal.html:4 |
|
3090 | ||
2916 |
#: rhodecode/templates/ |
|
3091 | #: rhodecode/templates/base/base.html:126 | |
2917 | msgid "Journal" |
|
3092 | msgid "Lightweight changelog" | |
2918 | msgstr "" |
|
3093 | msgstr "" | |
2919 |
|
3094 | |||
2920 |
#: rhodecode/templates/base/base.html:12 |
|
3095 | #: rhodecode/templates/base/base.html:127 | |
2921 | msgid "Log Out" |
|
3096 | #: rhodecode/templates/base/base.html:287 | |
2922 | msgstr "" |
|
3097 | #: rhodecode/templates/search/search.html:14 | |
2923 |
|
3098 | #: rhodecode/templates/search/search.html:54 | ||
2924 | #: rhodecode/templates/base/base.html:144 |
|
3099 | msgid "Search" | |
2925 | msgid "Switch repository" |
|
3100 | msgstr "" | |
2926 | msgstr "" |
|
3101 | ||
2927 |
|
3102 | #: rhodecode/templates/base/base.html:133 | ||
2928 | #: rhodecode/templates/base/base.html:146 |
|
3103 | msgid "Lock" | |
2929 | msgid "Products" |
|
3104 | msgstr "" | |
2930 | msgstr "" |
|
3105 | ||
2931 |
|
3106 | #: rhodecode/templates/base/base.html:141 | ||
2932 | #: rhodecode/templates/base/base.html:152 |
|
3107 | msgid "Follow" | |
2933 | #: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47 |
|
3108 | msgstr "" | |
2934 | msgid "loading..." |
|
3109 | ||
2935 | msgstr "" |
|
3110 | #: rhodecode/templates/base/base.html:142 | |
2936 |
|
3111 | msgid "Unfollow" | ||
2937 | #: rhodecode/templates/base/base.html:158 |
|
3112 | msgstr "" | |
2938 | #: rhodecode/templates/base/base.html:160 |
|
3113 | ||
2939 |
#: rhodecode/templates/base/base.html:1 |
|
3114 | #: rhodecode/templates/base/base.html:145 | |
2940 | #: rhodecode/templates/data_table/_dt_elements.html:15 |
|
|||
2941 | #: rhodecode/templates/data_table/_dt_elements.html:17 |
|
|||
2942 | #: rhodecode/templates/data_table/_dt_elements.html:19 |
|
|||
2943 | msgid "Summary" |
|
|||
2944 | msgstr "" |
|
|||
2945 |
|
||||
2946 | #: rhodecode/templates/base/base.html:166 |
|
|||
2947 | #: rhodecode/templates/base/base.html:168 |
|
|||
2948 | #: rhodecode/templates/base/base.html:170 |
|
|||
2949 | #: rhodecode/templates/changelog/changelog.html:15 |
|
|||
2950 | #: rhodecode/templates/data_table/_dt_elements.html:23 |
|
|||
2951 | #: rhodecode/templates/data_table/_dt_elements.html:25 |
|
|||
2952 | #: rhodecode/templates/data_table/_dt_elements.html:27 |
|
|||
2953 | msgid "Changelog" |
|
|||
2954 | msgstr "" |
|
|||
2955 |
|
||||
2956 | #: rhodecode/templates/base/base.html:175 |
|
|||
2957 | #: rhodecode/templates/base/base.html:177 |
|
|||
2958 | #: rhodecode/templates/base/base.html:179 |
|
|||
2959 | msgid "Switch to" |
|
|||
2960 | msgstr "" |
|
|||
2961 |
|
||||
2962 | #: rhodecode/templates/base/base.html:186 |
|
|||
2963 | #: rhodecode/templates/base/base.html:188 |
|
|||
2964 | #: rhodecode/templates/base/base.html:190 |
|
|||
2965 | #: rhodecode/templates/data_table/_dt_elements.html:31 |
|
|||
2966 | #: rhodecode/templates/data_table/_dt_elements.html:33 |
|
3115 | #: rhodecode/templates/data_table/_dt_elements.html:33 | |
2967 | #: rhodecode/templates/data_table/_dt_elements.html:35 |
|
3116 | #: rhodecode/templates/data_table/_dt_elements.html:35 | |
2968 | msgid "Files" |
|
3117 | #: rhodecode/templates/data_table/_dt_elements.html:37 | |
2969 | msgstr "" |
|
3118 | #: rhodecode/templates/data_table/_dt_elements.html:74 | |
2970 |
|
3119 | #: rhodecode/templates/forks/fork.html:9 | ||
2971 | #: rhodecode/templates/base/base.html:195 |
|
3120 | msgid "Fork" | |
2972 | #: rhodecode/templates/base/base.html:199 |
|
3121 | msgstr "" | |
2973 | msgid "Options" |
|
3122 | ||
2974 | msgstr "" |
|
3123 | #: rhodecode/templates/base/base.html:147 | |
2975 |
|
3124 | msgid "Create Pull Request" | ||
2976 | #: rhodecode/templates/base/base.html:204 |
|
3125 | msgstr "" | |
2977 | #: rhodecode/templates/base/base.html:206 |
|
3126 | ||
2978 | msgid "repository settings" |
|
3127 | #: rhodecode/templates/base/base.html:153 | |
2979 | msgstr "" |
|
3128 | msgid "Show Pull Requests" | |
2980 |
|
3129 | msgstr "" | ||
2981 | #: rhodecode/templates/base/base.html:210 |
|
3130 | ||
2982 |
#: rhodecode/templates/ |
|
3131 | #: rhodecode/templates/base/base.html:153 | |
2983 | #: rhodecode/templates/forks/fork.html:13 |
|
3132 | msgid "Pull Requests" | |
2984 | msgid "fork" |
|
3133 | msgstr "" | |
2985 | msgstr "" |
|
3134 | ||
2986 |
|
3135 | #: rhodecode/templates/base/base.html:190 | ||
2987 | #: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50 |
|
3136 | msgid "Not logged in" | |
2988 | #: rhodecode/templates/changelog/changelog.html:43 |
|
3137 | msgstr "" | |
2989 | msgid "Open new pull request" |
|
3138 | ||
2990 | msgstr "" |
|
3139 | #: rhodecode/templates/base/base.html:197 | |
2991 |
|
3140 | msgid "Login to your account" | ||
2992 | #: rhodecode/templates/base/base.html:215 |
|
3141 | msgstr "" | |
2993 | #: rhodecode/templates/forks/forks_data.html:21 |
|
3142 | ||
2994 | msgid "Compare fork" |
|
3143 | #: rhodecode/templates/base/base.html:220 | |
2995 | msgstr "" |
|
3144 | msgid "Forgot password ?" | |
2996 |
|
3145 | msgstr "" | ||
2997 | #: rhodecode/templates/base/base.html:217 |
|
3146 | ||
2998 | msgid "search" |
|
3147 | #: rhodecode/templates/base/base.html:243 | |
2999 | msgstr "" |
|
3148 | msgid "Log Out" | |
3000 |
|
3149 | msgstr "" | ||
3001 | #: rhodecode/templates/base/base.html:223 |
|
3150 | ||
3002 | msgid "lock" |
|
3151 | #: rhodecode/templates/base/base.html:262 | |
3003 | msgstr "" |
|
3152 | msgid "Switch repository" | |
3004 |
|
3153 | msgstr "" | ||
3005 | #: rhodecode/templates/base/base.html:234 |
|
3154 | ||
3006 | msgid "repositories groups" |
|
3155 | #: rhodecode/templates/base/base.html:274 | |
3007 | msgstr "" |
|
3156 | msgid "Show recent activity" | |
3008 |
|
3157 | msgstr "" | ||
3009 | #: rhodecode/templates/base/base.html:236 |
|
3158 | ||
3010 | msgid "users groups" |
|
3159 | #: rhodecode/templates/base/base.html:275 | |
3011 | msgstr "" |
|
3160 | #: rhodecode/templates/journal/journal.html:4 | |
3012 |
|
3161 | msgid "Journal" | ||
3013 | #: rhodecode/templates/base/base.html:237 |
|
3162 | msgstr "" | |
3014 | msgid "permissions" |
|
3163 | ||
3015 | msgstr "" |
|
3164 | #: rhodecode/templates/base/base.html:286 | |
3016 |
|
3165 | msgid "Search in repositories" | ||
3017 | #: rhodecode/templates/base/base.html:239 |
|
3166 | msgstr "" | |
3018 | msgid "defaults" |
|
3167 | ||
3019 | msgstr "" |
|
3168 | #: rhodecode/templates/base/perms_summary.html:8 | |
3020 |
|
3169 | msgid "No permissions defined yet" | ||
3021 | #: rhodecode/templates/base/base.html:240 |
|
3170 | msgstr "" | |
3022 | msgid "settings" |
|
3171 | ||
3023 | msgstr "" |
|
3172 | #: rhodecode/templates/base/perms_summary.html:15 | |
3024 |
|
3173 | msgid "Permission" | ||
3025 | #: rhodecode/templates/base/base.html:251 |
|
3174 | msgstr "" | |
3026 | #: rhodecode/templates/base/base.html:253 |
|
3175 | ||
3027 | msgid "Followers" |
|
3176 | #: rhodecode/templates/base/perms_summary.html:16 | |
3028 | msgstr "" |
|
3177 | msgid "Edit Permission" | |
3029 |
|
||||
3030 | #: rhodecode/templates/base/base.html:259 |
|
|||
3031 | #: rhodecode/templates/base/base.html:261 |
|
|||
3032 | msgid "Forks" |
|
|||
3033 | msgstr "" |
|
|||
3034 |
|
||||
3035 | #: rhodecode/templates/base/base.html:340 |
|
|||
3036 | #: rhodecode/templates/base/base.html:342 |
|
|||
3037 | #: rhodecode/templates/base/base.html:344 |
|
|||
3038 | #: rhodecode/templates/search/search.html:52 |
|
|||
3039 | msgid "Search" |
|
|||
3040 | msgstr "" |
|
|||
3041 |
|
||||
3042 | #: rhodecode/templates/base/root.html:42 |
|
|||
3043 | msgid "add another comment" |
|
|||
3044 | msgstr "" |
|
3178 | msgstr "" | |
3045 |
|
3179 | |||
3046 | #: rhodecode/templates/base/root.html:43 |
|
3180 | #: rhodecode/templates/base/root.html:43 | |
3047 | #: rhodecode/templates/journal/journal.html:83 |
|
3181 | #, fuzzy | |
3048 | #: rhodecode/templates/summary/summary.html:57 |
|
3182 | msgid "Add another comment" | |
3049 | msgid "Stop following this repository" |
|
|||
3050 | msgstr "" |
|
3183 | msgstr "" | |
3051 |
|
3184 | |||
3052 | #: rhodecode/templates/base/root.html:44 |
|
3185 | #: rhodecode/templates/base/root.html:44 | |
3053 |
#: rhodecode/templates/ |
|
3186 | #: rhodecode/templates/data_table/_dt_elements.html:140 | |
3054 |
msgid "St |
|
3187 | msgid "Stop following this repository" | |
3055 | msgstr "" |
|
3188 | msgstr "" | |
3056 |
|
3189 | |||
3057 | #: rhodecode/templates/base/root.html:45 |
|
3190 | #: rhodecode/templates/base/root.html:45 | |
|
3191 | msgid "Start following this repository" | |||
|
3192 | msgstr "" | |||
|
3193 | ||||
|
3194 | #: rhodecode/templates/base/root.html:46 | |||
3058 | msgid "Group" |
|
3195 | msgid "Group" | |
3059 | msgstr "" |
|
3196 | msgstr "" | |
3060 |
|
3197 | |||
|
3198 | #: rhodecode/templates/base/root.html:47 | |||
|
3199 | msgid "members" | |||
|
3200 | msgstr "" | |||
|
3201 | ||||
3061 | #: rhodecode/templates/base/root.html:48 |
|
3202 | #: rhodecode/templates/base/root.html:48 | |
3062 | msgid "search truncated" |
|
3203 | #: rhodecode/templates/pullrequests/pullrequest.html:181 | |
|
3204 | msgid "Loading ..." | |||
3063 | msgstr "" |
|
3205 | msgstr "" | |
3064 |
|
3206 | |||
3065 | #: rhodecode/templates/base/root.html:49 |
|
3207 | #: rhodecode/templates/base/root.html:49 | |
3066 | msgid "no matching files" |
|
3208 | msgid "Search truncated" | |
|
3209 | msgstr "" | |||
|
3210 | ||||
|
3211 | #: rhodecode/templates/base/root.html:50 | |||
|
3212 | msgid "No matching files" | |||
3067 | msgstr "" |
|
3213 | msgstr "" | |
3068 |
|
3214 | |||
3069 | #: rhodecode/templates/base/root.html:51 |
|
3215 | #: rhodecode/templates/base/root.html:51 | |
3070 | msgid "Open new pull request for selected changesets" |
|
3216 | #: rhodecode/templates/changelog/changelog.html:36 | |
|
3217 | msgid "Open new pull request" | |||
3071 | msgstr "" |
|
3218 | msgstr "" | |
3072 |
|
3219 | |||
3073 | #: rhodecode/templates/base/root.html:52 |
|
3220 | #: rhodecode/templates/base/root.html:52 | |
3074 | msgid "Show selected changes __S -> __E" |
|
3221 | msgid "Open new pull request for selected changesets" | |
3075 | msgstr "" |
|
3222 | msgstr "" | |
3076 |
|
3223 | |||
3077 | #: rhodecode/templates/base/root.html:53 |
|
3224 | #: rhodecode/templates/base/root.html:53 | |
|
3225 | msgid "Show selected changesets __S -> __E" | |||
|
3226 | msgstr "" | |||
|
3227 | ||||
|
3228 | #: rhodecode/templates/base/root.html:54 | |||
|
3229 | msgid "Show selected changeset __S" | |||
|
3230 | msgstr "" | |||
|
3231 | ||||
|
3232 | #: rhodecode/templates/base/root.html:55 | |||
3078 | msgid "Selection link" |
|
3233 | msgid "Selection link" | |
3079 | msgstr "" |
|
3234 | msgstr "" | |
3080 |
|
3235 | |||
|
3236 | #: rhodecode/templates/base/root.html:56 | |||
|
3237 | #: rhodecode/templates/changeset/diff_block.html:8 | |||
|
3238 | msgid "Collapse diff" | |||
|
3239 | msgstr "" | |||
|
3240 | ||||
|
3241 | #: rhodecode/templates/base/root.html:57 | |||
|
3242 | msgid "Expand diff" | |||
|
3243 | msgstr "" | |||
|
3244 | ||||
3081 | #: rhodecode/templates/bookmarks/bookmarks.html:5 |
|
3245 | #: rhodecode/templates/bookmarks/bookmarks.html:5 | |
3082 | #, python-format |
|
3246 | #, python-format | |
3083 | msgid "%s Bookmarks" |
|
3247 | msgid "%s Bookmarks" | |
3084 | msgstr "" |
|
3248 | msgstr "" | |
3085 |
|
3249 | |||
3086 |
#: rhodecode/templates/bookmarks/bookmarks.html:3 |
|
3250 | #: rhodecode/templates/bookmarks/bookmarks.html:37 | |
3087 | #: rhodecode/templates/bookmarks/bookmarks_data.html:8 |
|
3251 | #: rhodecode/templates/bookmarks/bookmarks_data.html:8 | |
3088 |
#: rhodecode/templates/branches/branches.html:5 |
|
3252 | #: rhodecode/templates/branches/branches.html:50 | |
3089 | #: rhodecode/templates/branches/branches_data.html:8 |
|
3253 | #: rhodecode/templates/branches/branches_data.html:8 | |
3090 |
#: rhodecode/templates/ |
|
3254 | #: rhodecode/templates/shortlog/shortlog_data.html:8 | |
|
3255 | #: rhodecode/templates/tags/tags.html:51 | |||
3091 | #: rhodecode/templates/tags/tags_data.html:8 |
|
3256 | #: rhodecode/templates/tags/tags_data.html:8 | |
3092 | msgid "Author" |
|
3257 | msgid "Author" | |
3093 | msgstr "" |
|
3258 | msgstr "" | |
3094 |
|
3259 | |||
|
3260 | #: rhodecode/templates/bookmarks/bookmarks.html:38 | |||
|
3261 | #: rhodecode/templates/bookmarks/bookmarks_data.html:9 | |||
|
3262 | #: rhodecode/templates/branches/branches.html:51 | |||
|
3263 | #: rhodecode/templates/branches/branches_data.html:9 | |||
|
3264 | #: rhodecode/templates/shortlog/shortlog_data.html:5 | |||
|
3265 | #: rhodecode/templates/tags/tags.html:52 | |||
|
3266 | #: rhodecode/templates/tags/tags_data.html:9 | |||
|
3267 | msgid "Revision" | |||
|
3268 | msgstr "" | |||
|
3269 | ||||
3095 | #: rhodecode/templates/branches/branches.html:5 |
|
3270 | #: rhodecode/templates/branches/branches.html:5 | |
3096 | #, python-format |
|
3271 | #, python-format | |
3097 | msgid "%s Branches" |
|
3272 | msgid "%s Branches" | |
3098 | msgstr "" |
|
3273 | msgstr "" | |
3099 |
|
3274 | |||
3100 |
#: rhodecode/templates/branches/branches.html:2 |
|
3275 | #: rhodecode/templates/branches/branches.html:26 | |
3101 | msgid "Compare branches" |
|
3276 | msgid "Compare branches" | |
3102 | msgstr "" |
|
3277 | msgstr "" | |
3103 |
|
3278 | |||
3104 |
#: rhodecode/templates/branches/branches.html:5 |
|
3279 | #: rhodecode/templates/branches/branches.html:53 | |
3105 | #: rhodecode/templates/branches/branches_data.html:10 |
|
3280 | #: rhodecode/templates/branches/branches_data.html:10 | |
3106 |
#: rhodecode/templates/ |
|
3281 | #: rhodecode/templates/tags/tags.html:54 | |
3107 | #: rhodecode/templates/compare/compare_diff.html:13 |
|
|||
3108 | #: rhodecode/templates/tags/tags.html:57 |
|
|||
3109 | #: rhodecode/templates/tags/tags_data.html:10 |
|
3282 | #: rhodecode/templates/tags/tags_data.html:10 | |
3110 | msgid "Compare" |
|
3283 | msgid "Compare" | |
3111 | msgstr "" |
|
3284 | msgstr "" | |
@@ -3115,115 +3288,80 b' msgstr ""' | |||||
3115 | msgid "%s Changelog" |
|
3288 | msgid "%s Changelog" | |
3116 | msgstr "" |
|
3289 | msgstr "" | |
3117 |
|
3290 | |||
3118 |
#: rhodecode/templates/changelog/changelog.html:1 |
|
3291 | #: rhodecode/templates/changelog/changelog.html:11 | |
3119 | #, python-format |
|
3292 | #, python-format | |
3120 | msgid "showing %d out of %d revision" |
|
3293 | msgid "showing %d out of %d revision" | |
3121 | msgid_plural "showing %d out of %d revisions" |
|
3294 | msgid_plural "showing %d out of %d revisions" | |
3122 | msgstr[0] "" |
|
3295 | msgstr[0] "" | |
3123 | msgstr[1] "" |
|
3296 | msgstr[1] "" | |
3124 |
|
3297 | |||
3125 |
#: rhodecode/templates/changelog/changelog.html:3 |
|
3298 | #: rhodecode/templates/changelog/changelog.html:30 | |
3126 | msgid "Clear selection" |
|
3299 | msgid "Clear selection" | |
3127 | msgstr "" |
|
3300 | msgstr "" | |
3128 |
|
3301 | |||
3129 |
#: rhodecode/templates/changelog/changelog.html: |
|
3302 | #: rhodecode/templates/changelog/changelog.html:33 | |
3130 | #: rhodecode/templates/forks/forks_data.html:19 |
|
3303 | #: rhodecode/templates/forks/forks_data.html:19 | |
3131 | #, python-format |
|
3304 | #, python-format | |
3132 |
msgid " |
|
3305 | msgid "Compare fork with %s" | |
3133 | msgstr "" |
|
3306 | msgstr "" | |
3134 |
|
3307 | |||
3135 |
#: rhodecode/templates/changelog/changelog.html: |
|
3308 | #: rhodecode/templates/changelog/changelog.html:33 | |
3136 | msgid "Compare fork with parent" |
|
3309 | msgid "Compare fork with parent" | |
3137 | msgstr "" |
|
3310 | msgstr "" | |
3138 |
|
3311 | |||
3139 |
#: rhodecode/templates/changelog/changelog.html: |
|
3312 | #: rhodecode/templates/changelog/changelog.html:76 | |
3140 | msgid "Show" |
|
3313 | #: rhodecode/templates/summary/summary.html:404 | |
3141 | msgstr "" |
|
3314 | msgid "Show more" | |
3142 |
|
3315 | msgstr "" | ||
3143 | #: rhodecode/templates/changelog/changelog.html:74 |
|
3316 | ||
3144 |
#: rhodecode/templates/ |
|
3317 | #: rhodecode/templates/changelog/changelog.html:89 | |
3145 | msgid "show more" |
|
3318 | #: rhodecode/templates/changeset/changeset_range.html:86 | |
3146 | msgstr "" |
|
3319 | #, python-format | |
3147 |
|
3320 | msgid "Bookmark %s" | ||
3148 | #: rhodecode/templates/changelog/changelog.html:78 |
|
3321 | msgstr "" | |
3149 | msgid "Affected number of files, click to show more details" |
|
3322 | ||
3150 | msgstr "" |
|
3323 | #: rhodecode/templates/changelog/changelog.html:95 | |
3151 |
|
3324 | #: rhodecode/templates/changeset/changeset.html:111 | ||
3152 |
#: rhodecode/templates/change |
|
3325 | #: rhodecode/templates/changeset/changeset_range.html:92 | |
3153 | #: rhodecode/templates/changeset/changeset.html:65 |
|
3326 | #, python-format | |
3154 | #: rhodecode/templates/changeset/changeset_file_comment.html:20 |
|
3327 | msgid "Tag %s" | |
3155 | #: rhodecode/templates/changeset/changeset_range.html:46 |
|
3328 | msgstr "" | |
3156 | msgid "Changeset status" |
|
3329 | ||
3157 | msgstr "" |
|
3330 | #: rhodecode/templates/changelog/changelog.html:100 | |
3158 |
|
||||
3159 | #: rhodecode/templates/changelog/changelog.html:94 |
|
|||
3160 | #: rhodecode/templates/shortlog/shortlog_data.html:20 |
|
|||
3161 | msgid "Click to open associated pull request" |
|
|||
3162 | msgstr "" |
|
|||
3163 |
|
||||
3164 | #: rhodecode/templates/changelog/changelog.html:104 |
|
|||
3165 | msgid "Parent" |
|
|||
3166 | msgstr "" |
|
|||
3167 |
|
||||
3168 | #: rhodecode/templates/changelog/changelog.html:110 |
|
|||
3169 | #: rhodecode/templates/changeset/changeset.html:42 |
|
|||
3170 | msgid "No parents" |
|
|||
3171 | msgstr "" |
|
|||
3172 |
|
||||
3173 | #: rhodecode/templates/changelog/changelog.html:115 |
|
|||
3174 | #: rhodecode/templates/changeset/changeset.html:106 |
|
3331 | #: rhodecode/templates/changeset/changeset.html:106 | |
3175 |
#: rhodecode/templates/changeset/changeset_range.html: |
|
3332 | #: rhodecode/templates/changeset/changeset_range.html:80 | |
3176 | msgid "merge" |
|
3333 | #, python-format | |
3177 | msgstr "" |
|
3334 | msgid "Branch %s" | |
3178 |
|
3335 | msgstr "" | ||
3179 | #: rhodecode/templates/changelog/changelog.html:118 |
|
3336 | ||
3180 |
#: rhodecode/templates/change |
|
3337 | #: rhodecode/templates/changelog/changelog.html:258 | |
3181 | #: rhodecode/templates/changeset/changeset_range.html:82 |
|
|||
3182 | #: rhodecode/templates/files/files.html:29 |
|
|||
3183 | #: rhodecode/templates/files/files_add.html:33 |
|
|||
3184 | #: rhodecode/templates/files/files_edit.html:33 |
|
|||
3185 | #: rhodecode/templates/shortlog/shortlog_data.html:9 |
|
|||
3186 | msgid "branch" |
|
|||
3187 | msgstr "" |
|
|||
3188 |
|
||||
3189 | #: rhodecode/templates/changelog/changelog.html:124 |
|
|||
3190 | #: rhodecode/templates/changeset/changeset_range.html:88 |
|
|||
3191 | msgid "bookmark" |
|
|||
3192 | msgstr "" |
|
|||
3193 |
|
||||
3194 | #: rhodecode/templates/changelog/changelog.html:130 |
|
|||
3195 | #: rhodecode/templates/changeset/changeset.html:114 |
|
|||
3196 | #: rhodecode/templates/changeset/changeset_range.html:94 |
|
|||
3197 | msgid "tag" |
|
|||
3198 | msgstr "" |
|
|||
3199 |
|
||||
3200 | #: rhodecode/templates/changelog/changelog.html:301 |
|
|||
3201 | msgid "There are no changes yet" |
|
3338 | msgid "There are no changes yet" | |
3202 | msgstr "" |
|
3339 | msgstr "" | |
3203 |
|
3340 | |||
3204 | #: rhodecode/templates/changelog/changelog_details.html:4 |
|
3341 | #: rhodecode/templates/changelog/changelog_details.html:4 | |
3205 |
#: rhodecode/templates/changeset/changeset.html:9 |
|
3342 | #: rhodecode/templates/changeset/changeset.html:91 | |
3206 |
msgid " |
|
3343 | msgid "Removed" | |
3207 | msgstr "" |
|
3344 | msgstr "" | |
3208 |
|
3345 | |||
3209 | #: rhodecode/templates/changelog/changelog_details.html:5 |
|
3346 | #: rhodecode/templates/changelog/changelog_details.html:5 | |
3210 |
#: rhodecode/templates/changeset/changeset.html:9 |
|
3347 | #: rhodecode/templates/changeset/changeset.html:92 | |
3211 | msgid "changed" |
|
3348 | #, fuzzy | |
|
3349 | msgid "Changed" | |||
3212 | msgstr "" |
|
3350 | msgstr "" | |
3213 |
|
3351 | |||
3214 | #: rhodecode/templates/changelog/changelog_details.html:6 |
|
3352 | #: rhodecode/templates/changelog/changelog_details.html:6 | |
3215 |
#: rhodecode/templates/changeset/changeset.html:9 |
|
3353 | #: rhodecode/templates/changeset/changeset.html:93 | |
3216 |
msgid " |
|
3354 | msgid "Added" | |
3217 | msgstr "" |
|
3355 | msgstr "" | |
3218 |
|
3356 | |||
3219 | #: rhodecode/templates/changelog/changelog_details.html:8 |
|
3357 | #: rhodecode/templates/changelog/changelog_details.html:8 | |
3220 | #: rhodecode/templates/changelog/changelog_details.html:9 |
|
3358 | #: rhodecode/templates/changelog/changelog_details.html:9 | |
3221 | #: rhodecode/templates/changelog/changelog_details.html:10 |
|
3359 | #: rhodecode/templates/changelog/changelog_details.html:10 | |
3222 |
#: rhodecode/templates/changeset/changeset.html:9 |
|
3360 | #: rhodecode/templates/changeset/changeset.html:95 | |
3223 |
#: rhodecode/templates/changeset/changeset.html:9 |
|
3361 | #: rhodecode/templates/changeset/changeset.html:96 | |
3224 |
#: rhodecode/templates/changeset/changeset.html: |
|
3362 | #: rhodecode/templates/changeset/changeset.html:97 | |
3225 | #, python-format |
|
3363 | #, python-format | |
3226 |
msgid " |
|
3364 | msgid "Affected %s files" | |
3227 | msgstr "" |
|
3365 | msgstr "" | |
3228 |
|
3366 | |||
3229 | #: rhodecode/templates/changeset/changeset.html:6 |
|
3367 | #: rhodecode/templates/changeset/changeset.html:6 | |
@@ -3231,112 +3369,144 b' msgstr ""' | |||||
3231 | msgid "%s Changeset" |
|
3369 | msgid "%s Changeset" | |
3232 | msgstr "" |
|
3370 | msgstr "" | |
3233 |
|
3371 | |||
3234 |
#: rhodecode/templates/changeset/changeset.html: |
|
3372 | #: rhodecode/templates/changeset/changeset.html:39 | |
3235 |
msgid " |
|
3373 | msgid "No parents" | |
3236 | msgstr "" |
|
3374 | msgstr "" | |
3237 |
|
3375 | |||
3238 |
#: rhodecode/templates/changeset/changeset.html: |
|
3376 | #: rhodecode/templates/changeset/changeset.html:49 | |
3239 | msgid "No children" |
|
3377 | msgid "No children" | |
3240 | msgstr "" |
|
3378 | msgstr "" | |
3241 |
|
3379 | |||
3242 |
#: rhodecode/templates/changeset/changeset.html: |
|
3380 | #: rhodecode/templates/changeset/changeset.html:62 | |
3243 |
#: rhodecode/templates/changeset/ |
|
3381 | #: rhodecode/templates/changeset/changeset_file_comment.html:20 | |
3244 | msgid "raw diff" |
|
3382 | #: rhodecode/templates/changeset/changeset_range.html:44 | |
3245 | msgstr "" |
|
3383 | msgid "Changeset status" | |
3246 |
|
3384 | msgstr "" | ||
3247 | #: rhodecode/templates/changeset/changeset.html:71 |
|
3385 | ||
3248 | msgid "patch diff" |
|
3386 | #: rhodecode/templates/changeset/changeset.html:67 | |
3249 | msgstr "" |
|
3387 | #: rhodecode/templates/changeset/diff_block.html:23 | |
3250 |
|
3388 | msgid "Raw diff" | ||
3251 | #: rhodecode/templates/changeset/changeset.html:72 |
|
3389 | msgstr "" | |
3252 | #: rhodecode/templates/changeset/diff_block.html:21 |
|
3390 | ||
3253 | msgid "download diff" |
|
3391 | #: rhodecode/templates/changeset/changeset.html:68 | |
3254 | msgstr "" |
|
3392 | msgid "Patch diff" | |
3255 |
|
3393 | msgstr "" | ||
3256 | #: rhodecode/templates/changeset/changeset.html:76 |
|
3394 | ||
3257 |
#: rhodecode/templates/changeset/changeset |
|
3395 | #: rhodecode/templates/changeset/changeset.html:69 | |
|
3396 | #: rhodecode/templates/changeset/diff_block.html:24 | |||
|
3397 | msgid "Download diff" | |||
|
3398 | msgstr "" | |||
|
3399 | ||||
|
3400 | #: rhodecode/templates/changeset/changeset.html:73 | |||
|
3401 | #: rhodecode/templates/changeset/changeset_file_comment.html:97 | |||
3258 | #, python-format |
|
3402 | #, python-format | |
3259 | msgid "%d comment" |
|
3403 | msgid "%d comment" | |
3260 | msgid_plural "%d comments" |
|
3404 | msgid_plural "%d comments" | |
3261 | msgstr[0] "" |
|
3405 | msgstr[0] "" | |
3262 | msgstr[1] "" |
|
3406 | msgstr[1] "" | |
3263 |
|
3407 | |||
3264 |
#: rhodecode/templates/changeset/changeset.html:7 |
|
3408 | #: rhodecode/templates/changeset/changeset.html:73 | |
3265 |
#: rhodecode/templates/changeset/changeset_file_comment.html: |
|
3409 | #: rhodecode/templates/changeset/changeset_file_comment.html:97 | |
3266 | #, python-format |
|
3410 | #, python-format | |
3267 | msgid "(%d inline)" |
|
3411 | msgid "(%d inline)" | |
3268 | msgid_plural "(%d inline)" |
|
3412 | msgid_plural "(%d inline)" | |
3269 | msgstr[0] "" |
|
3413 | msgstr[0] "" | |
3270 | msgstr[1] "" |
|
3414 | msgstr[1] "" | |
3271 |
|
3415 | |||
3272 |
#: rhodecode/templates/changeset/changeset.html:1 |
|
3416 | #: rhodecode/templates/changeset/changeset.html:103 | |
3273 |
#: rhodecode/templates/c |
|
3417 | #: rhodecode/templates/changeset/changeset_range.html:77 | |
3274 | #: rhodecode/templates/pullrequests/pullrequest_show.html:76 |
|
3418 | msgid "merge" | |
|
3419 | msgstr "" | |||
|
3420 | ||||
|
3421 | #: rhodecode/templates/changeset/changeset.html:119 | |||
|
3422 | #: rhodecode/templates/compare/compare_diff.html:40 | |||
|
3423 | #: rhodecode/templates/pullrequests/pullrequest_show.html:113 | |||
3275 | #, python-format |
|
3424 | #, python-format | |
3276 | msgid "%s file changed" |
|
3425 | msgid "%s file changed" | |
3277 | msgid_plural "%s files changed" |
|
3426 | msgid_plural "%s files changed" | |
3278 | msgstr[0] "" |
|
3427 | msgstr[0] "" | |
3279 | msgstr[1] "" |
|
3428 | msgstr[1] "" | |
3280 |
|
3429 | |||
3281 |
#: rhodecode/templates/changeset/changeset.html:12 |
|
3430 | #: rhodecode/templates/changeset/changeset.html:121 | |
3282 |
#: rhodecode/templates/compare/compare_diff.html:4 |
|
3431 | #: rhodecode/templates/compare/compare_diff.html:42 | |
3283 |
#: rhodecode/templates/pullrequests/pullrequest_show.html: |
|
3432 | #: rhodecode/templates/pullrequests/pullrequest_show.html:115 | |
3284 | #, python-format |
|
3433 | #, python-format | |
3285 | msgid "%s file changed with %s insertions and %s deletions" |
|
3434 | msgid "%s file changed with %s insertions and %s deletions" | |
3286 | msgid_plural "%s files changed with %s insertions and %s deletions" |
|
3435 | msgid_plural "%s files changed with %s insertions and %s deletions" | |
3287 | msgstr[0] "" |
|
3436 | msgstr[0] "" | |
3288 | msgstr[1] "" |
|
3437 | msgstr[1] "" | |
3289 |
|
3438 | |||
3290 |
#: rhodecode/templates/changeset/changeset |
|
3439 | #: rhodecode/templates/changeset/changeset.html:134 | |
3291 | msgid "Submitting..." |
|
3440 | #: rhodecode/templates/changeset/changeset.html:146 | |
3292 | msgstr "" |
|
3441 | #: rhodecode/templates/pullrequests/pullrequest_show.html:131 | |
3293 |
|
3442 | #: rhodecode/templates/pullrequests/pullrequest_show.html:195 | ||
3294 | #: rhodecode/templates/changeset/changeset_file_comment.html:45 |
|
3443 | msgid "Showing a huge diff might take some time and resources" | |
3295 | msgid "Commenting on line {1}." |
|
3444 | msgstr "" | |
3296 | msgstr "" |
|
3445 | ||
3297 |
|
3446 | #: rhodecode/templates/changeset/changeset.html:134 | ||
3298 |
#: rhodecode/templates/changeset/changeset |
|
3447 | #: rhodecode/templates/changeset/changeset.html:146 | |
3299 |
#: rhodecode/templates/c |
|
3448 | #: rhodecode/templates/compare/compare_diff.html:58 | |
|
3449 | #: rhodecode/templates/compare/compare_diff.html:69 | |||
|
3450 | #: rhodecode/templates/pullrequests/pullrequest_show.html:131 | |||
|
3451 | #: rhodecode/templates/pullrequests/pullrequest_show.html:195 | |||
|
3452 | msgid "Show full diff" | |||
|
3453 | msgstr "" | |||
|
3454 | ||||
|
3455 | #: rhodecode/templates/changeset/changeset_file_comment.html:30 | |||
3300 | #, python-format |
|
3456 | #, python-format | |
3301 | msgid "Comments parsed using %s syntax with %s support." |
|
3457 | msgid "Status change on pull request #%s" | |
3302 | msgstr "" |
|
3458 | msgstr "" | |
3303 |
|
3459 | |||
3304 |
#: rhodecode/templates/changeset/changeset_file_comment.html: |
|
3460 | #: rhodecode/templates/changeset/changeset_file_comment.html:32 | |
3305 | #: rhodecode/templates/changeset/changeset_file_comment.html:123 |
|
3461 | #, python-format | |
3306 | msgid "Use @username inside this text to send notification to this RhodeCode user" |
|
3462 | msgid "Comment on pull request #%s" | |
3307 | msgstr "" |
|
3463 | msgstr "" | |
3308 |
|
3464 | |||
3309 |
#: rhodecode/templates/changeset/changeset_file_comment.html:5 |
|
3465 | #: rhodecode/templates/changeset/changeset_file_comment.html:57 | |
3310 | #: rhodecode/templates/changeset/changeset_file_comment.html:143 |
|
3466 | msgid "Submitting..." | |
3311 | msgid "Comment" |
|
|||
3312 | msgstr "" |
|
3467 | msgstr "" | |
3313 |
|
3468 | |||
3314 | #: rhodecode/templates/changeset/changeset_file_comment.html:60 |
|
3469 | #: rhodecode/templates/changeset/changeset_file_comment.html:60 | |
3315 | #: rhodecode/templates/changeset/changeset_file_comment.html:71 |
|
3470 | msgid "Commenting on line {1}." | |
3316 | msgid "Hide" |
|
3471 | msgstr "" | |
3317 | msgstr "" |
|
3472 | ||
3318 |
|
3473 | #: rhodecode/templates/changeset/changeset_file_comment.html:61 | ||
3319 |
#: rhodecode/templates/changeset/changeset_file_comment.html: |
|
3474 | #: rhodecode/templates/changeset/changeset_file_comment.html:139 | |
|
3475 | #, python-format | |||
|
3476 | msgid "Comments parsed using %s syntax with %s support." | |||
|
3477 | msgstr "" | |||
|
3478 | ||||
|
3479 | #: rhodecode/templates/changeset/changeset_file_comment.html:63 | |||
|
3480 | #: rhodecode/templates/changeset/changeset_file_comment.html:141 | |||
|
3481 | msgid "Use @username inside this text to send notification to this RhodeCode user" | |||
|
3482 | msgstr "" | |||
|
3483 | ||||
|
3484 | #: rhodecode/templates/changeset/changeset_file_comment.html:74 | |||
|
3485 | #: rhodecode/templates/changeset/changeset_file_comment.html:161 | |||
|
3486 | msgid "Comment" | |||
|
3487 | msgstr "" | |||
|
3488 | ||||
|
3489 | #: rhodecode/templates/changeset/changeset_file_comment.html:75 | |||
|
3490 | msgid "Cancel" | |||
|
3491 | msgstr "" | |||
|
3492 | ||||
|
3493 | #: rhodecode/templates/changeset/changeset_file_comment.html:82 | |||
3320 | msgid "You need to be logged in to comment." |
|
3494 | msgid "You need to be logged in to comment." | |
3321 | msgstr "" |
|
3495 | msgstr "" | |
3322 |
|
3496 | |||
3323 |
#: rhodecode/templates/changeset/changeset_file_comment.html: |
|
3497 | #: rhodecode/templates/changeset/changeset_file_comment.html:82 | |
3324 | msgid "Login now" |
|
3498 | msgid "Login now" | |
3325 | msgstr "" |
|
3499 | msgstr "" | |
3326 |
|
3500 | |||
3327 |
#: rhodecode/templates/changeset/changeset_file_comment.html: |
|
3501 | #: rhodecode/templates/changeset/changeset_file_comment.html:86 | |
3328 | msgid "Leave a comment" |
|
3502 | msgid "Hide" | |
3329 | msgstr "" |
|
3503 | msgstr "" | |
3330 |
|
3504 | |||
3331 |
#: rhodecode/templates/changeset/changeset_file_comment.html:1 |
|
3505 | #: rhodecode/templates/changeset/changeset_file_comment.html:143 | |
3332 | msgid "Check this to change current status of code-review for this changeset" |
|
3506 | msgid "Change status" | |
3333 | msgstr "" |
|
3507 | msgstr "" | |
3334 |
|
3508 | |||
3335 |
#: rhodecode/templates/changeset/changeset_file_comment.html:1 |
|
3509 | #: rhodecode/templates/changeset/changeset_file_comment.html:163 | |
3336 | msgid "change status" |
|
|||
3337 | msgstr "" |
|
|||
3338 |
|
||||
3339 | #: rhodecode/templates/changeset/changeset_file_comment.html:145 |
|
|||
3340 | msgid "Comment and close" |
|
3510 | msgid "Comment and close" | |
3341 | msgstr "" |
|
3511 | msgstr "" | |
3342 |
|
3512 | |||
@@ -3345,97 +3515,118 b' msgstr ""' | |||||
3345 | msgid "%s Changesets" |
|
3515 | msgid "%s Changesets" | |
3346 | msgstr "" |
|
3516 | msgstr "" | |
3347 |
|
3517 | |||
3348 |
#: rhodecode/templates/changeset/changeset_range.html:2 |
|
3518 | #: rhodecode/templates/changeset/changeset_range.html:52 | |
3349 | #: rhodecode/templates/compare/compare_diff.html:29 |
|
|||
3350 | msgid "Compare View" |
|
|||
3351 | msgstr "" |
|
|||
3352 |
|
||||
3353 | #: rhodecode/templates/changeset/changeset_range.html:29 |
|
|||
3354 | msgid "Show combined compare" |
|
|||
3355 | msgstr "" |
|
|||
3356 |
|
||||
3357 | #: rhodecode/templates/changeset/changeset_range.html:54 |
|
|||
3358 | msgid "Files affected" |
|
3519 | msgid "Files affected" | |
3359 | msgstr "" |
|
3520 | msgstr "" | |
3360 |
|
3521 | |||
3361 |
#: rhodecode/templates/changeset/diff_block.html: |
|
3522 | #: rhodecode/templates/changeset/diff_block.html:22 | |
3362 |
msgid " |
|
3523 | msgid "Show full diff for this file" | |
3363 | msgstr "" |
|
3524 | msgstr "" | |
3364 |
|
3525 | |||
3365 |
#: rhodecode/templates/changeset/diff_block.html: |
|
3526 | #: rhodecode/templates/changeset/diff_block.html:30 | |
3366 |
msgid " |
|
3527 | msgid "Show inline comments" | |
3367 | msgstr "" |
|
3528 | msgstr "" | |
3368 |
|
3529 | |||
3369 |
#: rhodecode/templates/c |
|
3530 | #: rhodecode/templates/changeset/diff_block.html:55 | |
|
3531 | msgid "Show file at latest version in this repo" | |||
|
3532 | msgstr "" | |||
|
3533 | ||||
|
3534 | #: rhodecode/templates/changeset/diff_block.html:56 | |||
|
3535 | msgid "Show file at initial version in this repo" | |||
|
3536 | msgstr "" | |||
|
3537 | ||||
|
3538 | #: rhodecode/templates/compare/compare_cs.html:4 | |||
3370 | msgid "No changesets" |
|
3539 | msgid "No changesets" | |
3371 | msgstr "" |
|
3540 | msgstr "" | |
3372 |
|
3541 | |||
3373 |
#: rhodecode/templates/compare/compare_ |
|
3542 | #: rhodecode/templates/compare/compare_cs.html:32 | |
3374 | #: rhodecode/templates/pullrequests/pullrequest_show.html:69 |
|
3543 | msgid "Ancestor" | |
|
3544 | msgstr "" | |||
|
3545 | ||||
|
3546 | #: rhodecode/templates/compare/compare_diff.html:5 | |||
|
3547 | #, fuzzy, python-format | |||
|
3548 | msgid "%s Compare" | |||
|
3549 | msgstr "" | |||
|
3550 | ||||
|
3551 | #: rhodecode/templates/compare/compare_diff.html:9 | |||
|
3552 | msgid "Compare revisions" | |||
|
3553 | msgstr "" | |||
|
3554 | ||||
|
3555 | #: rhodecode/templates/compare/compare_diff.html:33 | |||
|
3556 | #: rhodecode/templates/pullrequests/pullrequest_show.html:106 | |||
3375 | #, python-format |
|
3557 | #, python-format | |
3376 | msgid "Showing %s commit" |
|
3558 | msgid "Showing %s commit" | |
3377 | msgid_plural "Showing %s commits" |
|
3559 | msgid_plural "Showing %s commits" | |
3378 | msgstr[0] "" |
|
3560 | msgstr[0] "" | |
3379 | msgstr[1] "" |
|
3561 | msgstr[1] "" | |
3380 |
|
3562 | |||
3381 |
#: rhodecode/templates/compare/compare_diff.html: |
|
3563 | #: rhodecode/templates/compare/compare_diff.html:48 | |
3382 |
#: rhodecode/templates/pullrequests/pullrequest_show.html: |
|
3564 | #: rhodecode/templates/pullrequests/pullrequest_show.html:121 | |
3383 | msgid "No files" |
|
3565 | msgid "No files" | |
3384 | msgstr "" |
|
3566 | msgstr "" | |
3385 |
|
3567 | |||
3386 |
#: rhodecode/templates/ |
|
3568 | #: rhodecode/templates/compare/compare_diff.html:58 | |
3387 |
#: rhodecode/templates/ |
|
3569 | #: rhodecode/templates/compare/compare_diff.html:69 | |
3388 | #: rhodecode/templates/data_table/_dt_elements.html:43 |
|
3570 | msgid "confirm to show potentially huge diff" | |
3389 | msgid "Fork" |
|
3571 | msgstr "" | |
3390 | msgstr "" |
|
3572 | ||
3391 |
|
3573 | #: rhodecode/templates/data_table/_dt_elements.html:54 | ||
3392 |
#: rhodecode/templates/ |
|
3574 | #: rhodecode/templates/summary/summary.html:69 | |
3393 | #: rhodecode/templates/journal/journal.html:89 |
|
|||
3394 | #: rhodecode/templates/summary/summary.html:77 |
|
|||
3395 | msgid "Mercurial repository" |
|
3575 | msgid "Mercurial repository" | |
3396 | msgstr "" |
|
3576 | msgstr "" | |
3397 |
|
3577 | |||
3398 |
#: rhodecode/templates/data_table/_dt_elements.html:6 |
|
3578 | #: rhodecode/templates/data_table/_dt_elements.html:56 | |
3399 |
#: rhodecode/templates/ |
|
3579 | #: rhodecode/templates/summary/summary.html:72 | |
3400 | #: rhodecode/templates/summary/summary.html:80 |
|
|||
3401 | msgid "Git repository" |
|
3580 | msgid "Git repository" | |
3402 | msgstr "" |
|
3581 | msgstr "" | |
3403 |
|
3582 | |||
3404 |
#: rhodecode/templates/data_table/_dt_elements.html: |
|
3583 | #: rhodecode/templates/data_table/_dt_elements.html:74 | |
3405 | #: rhodecode/templates/journal/journal.html:97 |
|
3584 | #, python-format | |
3406 | #: rhodecode/templates/summary/summary.html:87 |
|
3585 | msgid "Fork of %s" | |
3407 | msgid "public repository" |
|
3586 | msgstr "" | |
3408 | msgstr "" |
|
3587 | ||
3409 |
|
3588 | #: rhodecode/templates/data_table/_dt_elements.html:88 | ||
3410 | #: rhodecode/templates/data_table/_dt_elements.html:80 |
|
|||
3411 | #: rhodecode/templates/summary/summary.html:96 |
|
|||
3412 | #: rhodecode/templates/summary/summary.html:97 |
|
|||
3413 | msgid "Fork of" |
|
|||
3414 | msgstr "" |
|
|||
3415 |
|
||||
3416 | #: rhodecode/templates/data_table/_dt_elements.html:94 |
|
|||
3417 | msgid "No changesets yet" |
|
3589 | msgid "No changesets yet" | |
3418 | msgstr "" |
|
3590 | msgstr "" | |
3419 |
|
3591 | |||
3420 |
#: rhodecode/templates/data_table/_dt_elements.html: |
|
3592 | #: rhodecode/templates/data_table/_dt_elements.html:95 | |
3421 |
#: rhodecode/templates/data_table/_dt_elements.html: |
|
3593 | #: rhodecode/templates/data_table/_dt_elements.html:97 | |
3422 | #, python-format |
|
3594 | #, python-format | |
3423 | msgid "Subscribe to %s rss feed" |
|
3595 | msgid "Subscribe to %s rss feed" | |
3424 | msgstr "" |
|
3596 | msgstr "" | |
3425 |
|
3597 | |||
3426 |
#: rhodecode/templates/data_table/_dt_elements.html:10 |
|
3598 | #: rhodecode/templates/data_table/_dt_elements.html:103 | |
3427 |
#: rhodecode/templates/data_table/_dt_elements.html:1 |
|
3599 | #: rhodecode/templates/data_table/_dt_elements.html:105 | |
3428 | #, python-format |
|
3600 | #, python-format | |
3429 | msgid "Subscribe to %s atom feed" |
|
3601 | msgid "Subscribe to %s atom feed" | |
3430 | msgstr "" |
|
3602 | msgstr "" | |
3431 |
|
3603 | |||
3432 | #: rhodecode/templates/data_table/_dt_elements.html:122 |
|
3604 | #: rhodecode/templates/data_table/_dt_elements.html:122 | |
3433 | #, python-format |
|
3605 | #, python-format | |
|
3606 | msgid "Confirm to delete this repository: %s" | |||
|
3607 | msgstr "" | |||
|
3608 | ||||
|
3609 | #: rhodecode/templates/data_table/_dt_elements.html:131 | |||
|
3610 | #, python-format | |||
3434 | msgid "Confirm to delete this user: %s" |
|
3611 | msgid "Confirm to delete this user: %s" | |
3435 | msgstr "" |
|
3612 | msgstr "" | |
3436 |
|
3613 | |||
3437 |
#: rhodecode/templates/email_templates/changeset_comment.html: |
|
3614 | #: rhodecode/templates/email_templates/changeset_comment.html:9 | |
3438 | msgid "New status$" |
|
3615 | #: rhodecode/templates/email_templates/pull_request_comment.html:15 | |
|
3616 | msgid "New status" | |||
|
3617 | msgstr "" | |||
|
3618 | ||||
|
3619 | #: rhodecode/templates/email_templates/changeset_comment.html:11 | |||
|
3620 | #: rhodecode/templates/email_templates/pull_request_comment.html:9 | |||
|
3621 | msgid "View this comment here" | |||
|
3622 | msgstr "" | |||
|
3623 | ||||
|
3624 | #: rhodecode/templates/email_templates/changeset_comment.html:14 | |||
|
3625 | msgid "Repo" | |||
|
3626 | msgstr "" | |||
|
3627 | ||||
|
3628 | #: rhodecode/templates/email_templates/changeset_comment.html:16 | |||
|
3629 | msgid "desc" | |||
3439 | msgstr "" |
|
3630 | msgstr "" | |
3440 |
|
3631 | |||
3441 | #: rhodecode/templates/email_templates/main.html:8 |
|
3632 | #: rhodecode/templates/email_templates/main.html:8 | |
@@ -3443,19 +3634,20 b' msgid "This is a notification from Rhode' | |||||
3443 | msgstr "" |
|
3634 | msgstr "" | |
3444 |
|
3635 | |||
3445 | #: rhodecode/templates/email_templates/password_reset.html:4 |
|
3636 | #: rhodecode/templates/email_templates/password_reset.html:4 | |
3446 | msgid "Hello" |
|
3637 | #, python-format | |
|
3638 | msgid "Hello %s" | |||
|
3639 | msgstr "" | |||
|
3640 | ||||
|
3641 | #: rhodecode/templates/email_templates/password_reset.html:5 | |||
|
3642 | msgid "We received a request to create a new password for your account." | |||
3447 | msgstr "" |
|
3643 | msgstr "" | |
3448 |
|
3644 | |||
3449 | #: rhodecode/templates/email_templates/password_reset.html:6 |
|
3645 | #: rhodecode/templates/email_templates/password_reset.html:6 | |
3450 | msgid "We received a request to create a new password for your account." |
|
|||
3451 | msgstr "" |
|
|||
3452 |
|
||||
3453 | #: rhodecode/templates/email_templates/password_reset.html:8 |
|
|||
3454 | msgid "You can generate it by clicking following URL" |
|
3646 | msgid "You can generate it by clicking following URL" | |
3455 | msgstr "" |
|
3647 | msgstr "" | |
3456 |
|
3648 | |||
3457 |
#: rhodecode/templates/email_templates/password_reset.html:1 |
|
3649 | #: rhodecode/templates/email_templates/password_reset.html:11 | |
3458 |
msgid "If you did |
|
3650 | msgid "If you did not request new password please ignore this email." | |
3459 | msgstr "" |
|
3651 | msgstr "" | |
3460 |
|
3652 | |||
3461 | #: rhodecode/templates/email_templates/pull_request.html:4 |
|
3653 | #: rhodecode/templates/email_templates/pull_request.html:4 | |
@@ -3466,33 +3658,28 b' msgid ""' | |||||
3466 | msgstr "" |
|
3658 | msgstr "" | |
3467 |
|
3659 | |||
3468 | #: rhodecode/templates/email_templates/pull_request.html:5 |
|
3660 | #: rhodecode/templates/email_templates/pull_request.html:5 | |
3469 | msgid "title" |
|
3661 | msgid "View this pull request here" | |
3470 | msgstr "" |
|
3662 | msgstr "" | |
3471 |
|
3663 | |||
3472 | #: rhodecode/templates/email_templates/pull_request.html:6 |
|
3664 | #: rhodecode/templates/email_templates/pull_request.html:6 | |
3473 | #: rhodecode/templates/pullrequests/pullrequest.html:115 |
|
3665 | msgid "title" | |
|
3666 | msgstr "" | |||
|
3667 | ||||
|
3668 | #: rhodecode/templates/email_templates/pull_request.html:7 | |||
3474 | msgid "description" |
|
3669 | msgid "description" | |
3475 | msgstr "" |
|
3670 | msgstr "" | |
3476 |
|
3671 | |||
3477 |
#: rhodecode/templates/email_templates/pull_request.html:1 |
|
3672 | #: rhodecode/templates/email_templates/pull_request.html:12 | |
3478 | msgid "revisions for reviewing" |
|
3673 | msgid "revisions for reviewing" | |
3479 | msgstr "" |
|
3674 | msgstr "" | |
3480 |
|
3675 | |||
3481 |
#: rhodecode/templates/email_templates/pull_request.html: |
|
3676 | #: rhodecode/templates/email_templates/pull_request_comment.html:3 | |
3482 | msgid "View this pull request here" |
|
|||
3483 | msgstr "" |
|
|||
3484 |
|
||||
3485 | #: rhodecode/templates/email_templates/pull_request_comment.html:4 |
|
|||
3486 | #, python-format |
|
3677 | #, python-format | |
3487 |
msgid " |
|
3678 | msgid "Pull request #%s for repository %s" | |
3488 | msgstr "" |
|
3679 | msgstr "" | |
3489 |
|
3680 | |||
3490 |
#: rhodecode/templates/email_templates/pull_request_comment.html:1 |
|
3681 | #: rhodecode/templates/email_templates/pull_request_comment.html:13 | |
3491 | msgid "New status" |
|
3682 | msgid "Closing pull request with status" | |
3492 | msgstr "" |
|
|||
3493 |
|
||||
3494 | #: rhodecode/templates/email_templates/pull_request_comment.html:14 |
|
|||
3495 | msgid "View this comment here" |
|
|||
3496 | msgstr "" |
|
3683 | msgstr "" | |
3497 |
|
3684 | |||
3498 | #: rhodecode/templates/email_templates/registration.html:4 |
|
3685 | #: rhodecode/templates/email_templates/registration.html:4 | |
@@ -3503,107 +3690,105 b' msgstr ""' | |||||
3503 | msgid "View this user here" |
|
3690 | msgid "View this user here" | |
3504 | msgstr "" |
|
3691 | msgstr "" | |
3505 |
|
3692 | |||
3506 |
#: rhodecode/templates/errors/error_document.html: |
|
3693 | #: rhodecode/templates/errors/error_document.html:55 | |
3507 | #, python-format |
|
3694 | #, python-format | |
3508 | msgid "You will be redirected to %s in %s seconds" |
|
3695 | msgid "You will be redirected to %s in %s seconds" | |
3509 | msgstr "" |
|
3696 | msgstr "" | |
3510 |
|
3697 | |||
3511 | #: rhodecode/templates/files/file_diff.html:4 |
|
3698 | #: rhodecode/templates/files/file_diff.html:4 | |
3512 | #, python-format |
|
3699 | #, fuzzy, python-format | |
3513 |
msgid "%s File |
|
3700 | msgid "%s File Diff" | |
3514 | msgstr "" |
|
3701 | msgstr "" | |
3515 |
|
3702 | |||
3516 |
#: rhodecode/templates/files/file_diff.html: |
|
3703 | #: rhodecode/templates/files/file_diff.html:8 | |
3517 | msgid "File diff" |
|
3704 | msgid "File diff" | |
3518 | msgstr "" |
|
3705 | msgstr "" | |
3519 |
|
3706 | |||
3520 | #: rhodecode/templates/files/files.html:4 |
|
3707 | #: rhodecode/templates/files/files.html:4 | |
3521 |
#: rhodecode/templates/files/files.html:7 |
|
3708 | #: rhodecode/templates/files/files.html:76 | |
3522 | #, python-format |
|
3709 | #, fuzzy, python-format | |
3523 |
msgid "%s |
|
3710 | msgid "%s Files" | |
3524 | msgstr "" |
|
3711 | msgstr "" | |
3525 |
|
3712 | |||
3526 |
#: rhodecode/templates/files/files.html: |
|
3713 | #: rhodecode/templates/files/files.html:30 | |
3527 |
#: rhodecode/templates/ |
|
3714 | #: rhodecode/templates/files/files_add.html:31 | |
3528 | msgid "files" |
|
3715 | #: rhodecode/templates/files/files_edit.html:31 | |
|
3716 | #: rhodecode/templates/shortlog/shortlog_data.html:9 | |||
|
3717 | msgid "Branch" | |||
3529 | msgstr "" |
|
3718 | msgstr "" | |
3530 |
|
3719 | |||
3531 | #: rhodecode/templates/files/files_add.html:4 |
|
3720 | #: rhodecode/templates/files/files_add.html:4 | |
3532 | #: rhodecode/templates/files/files_edit.html:4 |
|
3721 | #, fuzzy, python-format | |
3533 | #, python-format |
|
3722 | msgid "%s Files Add" | |
3534 | msgid "%s Edit file" |
|
|||
3535 | msgstr "" |
|
3723 | msgstr "" | |
3536 |
|
3724 | |||
3537 | #: rhodecode/templates/files/files_add.html:19 |
|
3725 | #: rhodecode/templates/files/files_add.html:19 | |
3538 |
msgid " |
|
3726 | msgid "Add file" | |
3539 | msgstr "" |
|
3727 | msgstr "" | |
3540 |
|
3728 | |||
3541 |
#: rhodecode/templates/files/files_add.html: |
|
3729 | #: rhodecode/templates/files/files_add.html:38 | |
|
3730 | #: rhodecode/templates/files/files_browser.html:31 | |||
|
3731 | #: rhodecode/templates/shortlog/shortlog_data.html:78 | |||
3542 | msgid "Add new file" |
|
3732 | msgid "Add new file" | |
3543 | msgstr "" |
|
3733 | msgstr "" | |
3544 |
|
3734 | |||
3545 |
#: rhodecode/templates/files/files_add.html:4 |
|
3735 | #: rhodecode/templates/files/files_add.html:43 | |
3546 | msgid "File Name" |
|
3736 | msgid "File Name" | |
3547 | msgstr "" |
|
3737 | msgstr "" | |
3548 |
|
3738 | |||
3549 |
#: rhodecode/templates/files/files_add.html:4 |
|
3739 | #: rhodecode/templates/files/files_add.html:47 | |
3550 |
#: rhodecode/templates/files/files_add.html:5 |
|
3740 | #: rhodecode/templates/files/files_add.html:56 | |
3551 | msgid "or" |
|
3741 | msgid "or" | |
3552 | msgstr "" |
|
3742 | msgstr "" | |
3553 |
|
3743 | |||
3554 |
#: rhodecode/templates/files/files_add.html:4 |
|
3744 | #: rhodecode/templates/files/files_add.html:47 | |
3555 |
#: rhodecode/templates/files/files_add.html:5 |
|
3745 | #: rhodecode/templates/files/files_add.html:52 | |
3556 | msgid "Upload file" |
|
3746 | msgid "Upload file" | |
3557 | msgstr "" |
|
3747 | msgstr "" | |
3558 |
|
3748 | |||
3559 |
#: rhodecode/templates/files/files_add.html:5 |
|
3749 | #: rhodecode/templates/files/files_add.html:56 | |
3560 | msgid "Create new file" |
|
3750 | msgid "Create new file" | |
3561 | msgstr "" |
|
3751 | msgstr "" | |
3562 |
|
3752 | |||
3563 |
#: rhodecode/templates/files/files_add.html:6 |
|
3753 | #: rhodecode/templates/files/files_add.html:61 | |
3564 |
#: rhodecode/templates/files/files_edit.html:3 |
|
3754 | #: rhodecode/templates/files/files_edit.html:37 | |
3565 | #: rhodecode/templates/files/files_ypjax.html:3 |
|
3755 | #: rhodecode/templates/files/files_ypjax.html:3 | |
3566 | msgid "Location" |
|
3756 | msgid "Location" | |
3567 | msgstr "" |
|
3757 | msgstr "" | |
3568 |
|
3758 | |||
3569 |
#: rhodecode/templates/files/files_add.html:6 |
|
3759 | #: rhodecode/templates/files/files_add.html:65 | |
3570 | msgid "use / to separate directories" |
|
3760 | msgid "use / to separate directories" | |
3571 | msgstr "" |
|
3761 | msgstr "" | |
3572 |
|
3762 | |||
3573 |
#: rhodecode/templates/files/files_add.html:7 |
|
3763 | #: rhodecode/templates/files/files_add.html:75 | |
3574 |
#: rhodecode/templates/files/files_edit.html:6 |
|
3764 | #: rhodecode/templates/files/files_edit.html:61 | |
3575 | #: rhodecode/templates/shortlog/shortlog_data.html:6 |
|
3765 | #: rhodecode/templates/shortlog/shortlog_data.html:6 | |
3576 |
msgid " |
|
3766 | msgid "Commit message" | |
3577 | msgstr "" |
|
3767 | msgstr "" | |
3578 |
|
3768 | |||
3579 |
#: rhodecode/templates/files/files_add.html: |
|
3769 | #: rhodecode/templates/files/files_add.html:79 | |
3580 |
#: rhodecode/templates/files/files_edit.html:6 |
|
3770 | #: rhodecode/templates/files/files_edit.html:65 | |
3581 | msgid "Commit changes" |
|
3771 | msgid "Commit changes" | |
3582 | msgstr "" |
|
3772 | msgstr "" | |
3583 |
|
3773 | |||
3584 | #: rhodecode/templates/files/files_browser.html:13 |
|
3774 | #: rhodecode/templates/files/files_browser.html:13 | |
3585 |
msgid " |
|
3775 | msgid "View" | |
3586 | msgstr "" |
|
3776 | msgstr "" | |
3587 |
|
3777 | |||
3588 | #: rhodecode/templates/files/files_browser.html:14 |
|
3778 | #: rhodecode/templates/files/files_browser.html:14 | |
3589 |
msgid " |
|
3779 | msgid "Previous revision" | |
3590 | msgstr "" |
|
3780 | msgstr "" | |
3591 |
|
3781 | |||
3592 | #: rhodecode/templates/files/files_browser.html:16 |
|
3782 | #: rhodecode/templates/files/files_browser.html:16 | |
3593 |
msgid " |
|
3783 | msgid "Next revision" | |
3594 | msgstr "" |
|
3784 | msgstr "" | |
3595 |
|
3785 | |||
3596 | #: rhodecode/templates/files/files_browser.html:23 |
|
3786 | #: rhodecode/templates/files/files_browser.html:23 | |
3597 |
msgid " |
|
3787 | msgid "Follow current branch" | |
3598 | msgstr "" |
|
3788 | msgstr "" | |
3599 |
|
3789 | |||
3600 | #: rhodecode/templates/files/files_browser.html:27 |
|
3790 | #: rhodecode/templates/files/files_browser.html:27 | |
3601 |
msgid " |
|
3791 | msgid "Search file list" | |
3602 | msgstr "" |
|
|||
3603 |
|
||||
3604 | #: rhodecode/templates/files/files_browser.html:31 |
|
|||
3605 | #: rhodecode/templates/shortlog/shortlog_data.html:78 |
|
|||
3606 | msgid "add new file" |
|
|||
3607 | msgstr "" |
|
3792 | msgstr "" | |
3608 |
|
3793 | |||
3609 | #: rhodecode/templates/files/files_browser.html:35 |
|
3794 | #: rhodecode/templates/files/files_browser.html:35 | |
@@ -3627,34 +3812,39 b' msgid "Last modified"' | |||||
3627 | msgstr "" |
|
3812 | msgstr "" | |
3628 |
|
3813 | |||
3629 | #: rhodecode/templates/files/files_browser.html:52 |
|
3814 | #: rhodecode/templates/files/files_browser.html:52 | |
3630 | msgid "Last commiter" |
|
3815 | msgid "Last committer" | |
|
3816 | msgstr "" | |||
|
3817 | ||||
|
3818 | #: rhodecode/templates/files/files_edit.html:4 | |||
|
3819 | #, fuzzy, python-format | |||
|
3820 | msgid "%s Files Edit" | |||
3631 | msgstr "" |
|
3821 | msgstr "" | |
3632 |
|
3822 | |||
3633 | #: rhodecode/templates/files/files_edit.html:19 |
|
3823 | #: rhodecode/templates/files/files_edit.html:19 | |
3634 |
msgid " |
|
3824 | msgid "Edit file" | |
|
3825 | msgstr "" | |||
|
3826 | ||||
|
3827 | #: rhodecode/templates/files/files_edit.html:47 | |||
|
3828 | #: rhodecode/templates/files/files_source.html:23 | |||
|
3829 | msgid "Show annotation" | |||
|
3830 | msgstr "" | |||
|
3831 | ||||
|
3832 | #: rhodecode/templates/files/files_edit.html:48 | |||
|
3833 | #: rhodecode/templates/files/files_source.html:25 | |||
|
3834 | #: rhodecode/templates/files/files_source.html:55 | |||
|
3835 | msgid "Show as raw" | |||
3635 | msgstr "" |
|
3836 | msgstr "" | |
3636 |
|
3837 | |||
3637 | #: rhodecode/templates/files/files_edit.html:49 |
|
3838 | #: rhodecode/templates/files/files_edit.html:49 | |
3638 | #: rhodecode/templates/files/files_source.html:23 |
|
|||
3639 | msgid "show annotation" |
|
|||
3640 | msgstr "" |
|
|||
3641 |
|
||||
3642 | #: rhodecode/templates/files/files_edit.html:50 |
|
|||
3643 | #: rhodecode/templates/files/files_source.html:25 |
|
|||
3644 | #: rhodecode/templates/files/files_source.html:53 |
|
|||
3645 | msgid "show as raw" |
|
|||
3646 | msgstr "" |
|
|||
3647 |
|
||||
3648 | #: rhodecode/templates/files/files_edit.html:51 |
|
|||
3649 | #: rhodecode/templates/files/files_source.html:26 |
|
3839 | #: rhodecode/templates/files/files_source.html:26 | |
3650 |
msgid " |
|
3840 | msgid "Download as raw" | |
3651 | msgstr "" |
|
3841 | msgstr "" | |
3652 |
|
3842 | |||
3653 |
#: rhodecode/templates/files/files_edit.html:5 |
|
3843 | #: rhodecode/templates/files/files_edit.html:52 | |
3654 |
msgid " |
|
3844 | msgid "Source" | |
3655 | msgstr "" |
|
3845 | msgstr "" | |
3656 |
|
3846 | |||
3657 |
#: rhodecode/templates/files/files_edit.html:5 |
|
3847 | #: rhodecode/templates/files/files_edit.html:57 | |
3658 | msgid "Editing file" |
|
3848 | msgid "Editing file" | |
3659 | msgstr "" |
|
3849 | msgstr "" | |
3660 |
|
3850 | |||
@@ -3663,16 +3853,16 b' msgid "History"' | |||||
3663 | msgstr "" |
|
3853 | msgstr "" | |
3664 |
|
3854 | |||
3665 | #: rhodecode/templates/files/files_history_box.html:9 |
|
3855 | #: rhodecode/templates/files/files_history_box.html:9 | |
3666 |
msgid " |
|
3856 | msgid "Diff to revision" | |
3667 | msgstr "" |
|
3857 | msgstr "" | |
3668 |
|
3858 | |||
3669 | #: rhodecode/templates/files/files_history_box.html:10 |
|
3859 | #: rhodecode/templates/files/files_history_box.html:10 | |
3670 | #, fuzzy |
|
3860 | #, fuzzy | |
3671 |
msgid " |
|
3861 | msgid "Show at revision" | |
3672 | msgstr "" |
|
3862 | msgstr "" | |
3673 |
|
3863 | |||
3674 | #: rhodecode/templates/files/files_history_box.html:11 |
|
3864 | #: rhodecode/templates/files/files_history_box.html:11 | |
3675 |
msgid " |
|
3865 | msgid "Show full history" | |
3676 | msgstr "" |
|
3866 | msgstr "" | |
3677 |
|
3867 | |||
3678 | #: rhodecode/templates/files/files_history_box.html:16 |
|
3868 | #: rhodecode/templates/files/files_history_box.html:16 | |
@@ -3687,15 +3877,28 b' msgid "Load file history"' | |||||
3687 | msgstr "" |
|
3877 | msgstr "" | |
3688 |
|
3878 | |||
3689 | #: rhodecode/templates/files/files_source.html:21 |
|
3879 | #: rhodecode/templates/files/files_source.html:21 | |
3690 |
msgid " |
|
3880 | msgid "Show source" | |
3691 | msgstr "" |
|
3881 | msgstr "" | |
3692 |
|
3882 | |||
3693 |
#: rhodecode/templates/files/files_source.html: |
|
3883 | #: rhodecode/templates/files/files_source.html:29 | |
|
3884 | #, python-format | |||
|
3885 | msgid "Edit on branch:%s" | |||
|
3886 | msgstr "" | |||
|
3887 | ||||
|
3888 | #: rhodecode/templates/files/files_source.html:31 | |||
|
3889 | msgid "Edit on branch:?" | |||
|
3890 | msgstr "" | |||
|
3891 | ||||
|
3892 | #: rhodecode/templates/files/files_source.html:31 | |||
|
3893 | msgid "Editing files allowed only when on branch head revision" | |||
|
3894 | msgstr "" | |||
|
3895 | ||||
|
3896 | #: rhodecode/templates/files/files_source.html:46 | |||
3694 | #, python-format |
|
3897 | #, python-format | |
3695 | msgid "Binary file (%s)" |
|
3898 | msgid "Binary file (%s)" | |
3696 | msgstr "" |
|
3899 | msgstr "" | |
3697 |
|
3900 | |||
3698 |
#: rhodecode/templates/files/files_source.html:5 |
|
3901 | #: rhodecode/templates/files/files_source.html:55 | |
3699 | msgid "File is too big to display" |
|
3902 | msgid "File is too big to display" | |
3700 | msgstr "" |
|
3903 | msgstr "" | |
3701 |
|
3904 | |||
@@ -3716,8 +3919,10 b' msgstr ""' | |||||
3716 | msgid "%s Followers" |
|
3919 | msgid "%s Followers" | |
3717 | msgstr "" |
|
3920 | msgstr "" | |
3718 |
|
3921 | |||
3719 |
#: rhodecode/templates/followers/followers.html: |
|
3922 | #: rhodecode/templates/followers/followers.html:9 | |
3720 | msgid "followers" |
|
3923 | #: rhodecode/templates/summary/summary.html:183 | |
|
3924 | #: rhodecode/templates/summary/summary.html:184 | |||
|
3925 | msgid "Followers" | |||
3721 | msgstr "" |
|
3926 | msgstr "" | |
3722 |
|
3927 | |||
3723 | #: rhodecode/templates/followers/followers_data.html:12 |
|
3928 | #: rhodecode/templates/followers/followers_data.html:12 | |
@@ -3729,32 +3934,32 b' msgstr ""' | |||||
3729 | msgid "%s Fork" |
|
3934 | msgid "%s Fork" | |
3730 | msgstr "" |
|
3935 | msgstr "" | |
3731 |
|
3936 | |||
3732 |
#: rhodecode/templates/forks/fork.html: |
|
3937 | #: rhodecode/templates/forks/fork.html:28 | |
3733 | msgid "Fork name" |
|
3938 | msgid "Fork name" | |
3734 | msgstr "" |
|
3939 | msgstr "" | |
3735 |
|
3940 | |||
3736 |
#: rhodecode/templates/forks/fork.html:6 |
|
3941 | #: rhodecode/templates/forks/fork.html:65 | |
3737 | msgid "Private" |
|
3942 | msgid "Private" | |
3738 | msgstr "" |
|
3943 | msgstr "" | |
3739 |
|
3944 | |||
3740 |
#: rhodecode/templates/forks/fork.html:7 |
|
3945 | #: rhodecode/templates/forks/fork.html:74 | |
3741 | msgid "Copy permissions" |
|
3946 | msgid "Copy permissions" | |
3742 | msgstr "" |
|
3947 | msgstr "" | |
3743 |
|
3948 | |||
3744 |
#: rhodecode/templates/forks/fork.html:8 |
|
3949 | #: rhodecode/templates/forks/fork.html:78 | |
3745 | msgid "Copy permissions from forked repository" |
|
3950 | msgid "Copy permissions from forked repository" | |
3746 | msgstr "" |
|
3951 | msgstr "" | |
3747 |
|
3952 | |||
3748 |
#: rhodecode/templates/forks/fork.html:8 |
|
3953 | #: rhodecode/templates/forks/fork.html:84 | |
3749 | msgid "Update after clone" |
|
3954 | msgid "Update after clone" | |
3750 | msgstr "" |
|
3955 | msgstr "" | |
3751 |
|
3956 | |||
3752 |
#: rhodecode/templates/forks/fork.html: |
|
3957 | #: rhodecode/templates/forks/fork.html:88 | |
3753 | msgid "Checkout source after making a clone" |
|
3958 | msgid "Checkout source after making a clone" | |
3754 | msgstr "" |
|
3959 | msgstr "" | |
3755 |
|
3960 | |||
3756 |
#: rhodecode/templates/forks/fork.html:9 |
|
3961 | #: rhodecode/templates/forks/fork.html:93 | |
3757 |
msgid " |
|
3962 | msgid "Fork this repository" | |
3758 | msgstr "" |
|
3963 | msgstr "" | |
3759 |
|
3964 | |||
3760 | #: rhodecode/templates/forks/forks.html:5 |
|
3965 | #: rhodecode/templates/forks/forks.html:5 | |
@@ -3762,12 +3967,14 b' msgstr ""' | |||||
3762 | msgid "%s Forks" |
|
3967 | msgid "%s Forks" | |
3763 | msgstr "" |
|
3968 | msgstr "" | |
3764 |
|
3969 | |||
3765 |
#: rhodecode/templates/forks/forks.html: |
|
3970 | #: rhodecode/templates/forks/forks.html:9 | |
3766 | msgid "forks" |
|
3971 | #: rhodecode/templates/summary/summary.html:189 | |
|
3972 | #: rhodecode/templates/summary/summary.html:190 | |||
|
3973 | msgid "Forks" | |||
3767 | msgstr "" |
|
3974 | msgstr "" | |
3768 |
|
3975 | |||
3769 | #: rhodecode/templates/forks/forks_data.html:17 |
|
3976 | #: rhodecode/templates/forks/forks_data.html:17 | |
3770 |
msgid " |
|
3977 | msgid "Forked" | |
3771 | msgstr "" |
|
3978 | msgstr "" | |
3772 |
|
3979 | |||
3773 | #: rhodecode/templates/forks/forks_data.html:42 |
|
3980 | #: rhodecode/templates/forks/forks_data.html:42 | |
@@ -3783,44 +3990,27 b' msgid "RSS journal feed"' | |||||
3783 | msgstr "" |
|
3990 | msgstr "" | |
3784 |
|
3991 | |||
3785 | #: rhodecode/templates/journal/journal.html:32 |
|
3992 | #: rhodecode/templates/journal/journal.html:32 | |
3786 | #: rhodecode/templates/pullrequests/pullrequest.html:55 |
|
|||
3787 | msgid "Refresh" |
|
3993 | msgid "Refresh" | |
3788 | msgstr "" |
|
3994 | msgstr "" | |
3789 |
|
3995 | |||
3790 | #: rhodecode/templates/journal/journal.html:35 |
|
3996 | #: rhodecode/templates/journal/journal.html:35 | |
3791 | #: rhodecode/templates/journal/public_journal.html:24 |
|
3997 | #: rhodecode/templates/journal/public_journal.html:24 | |
3792 | msgid "RSS feed" |
|
|||
3793 | msgstr "" |
|
|||
3794 |
|
||||
3795 | #: rhodecode/templates/journal/journal.html:38 |
|
|||
3796 | #: rhodecode/templates/journal/public_journal.html:27 |
|
|||
3797 | msgid "ATOM feed" |
|
3998 | msgid "ATOM feed" | |
3798 | msgstr "" |
|
3999 | msgstr "" | |
3799 |
|
4000 | |||
3800 |
#: rhodecode/templates/journal/journal.html: |
|
4001 | #: rhodecode/templates/journal/journal.html:51 | |
3801 | msgid "Watched" |
|
4002 | msgid "Watched" | |
3802 | msgstr "" |
|
4003 | msgstr "" | |
3803 |
|
4004 | |||
3804 | #: rhodecode/templates/journal/journal.html:54 |
|
|||
3805 | msgid "ADD" |
|
|||
3806 | msgstr "" |
|
|||
3807 |
|
||||
3808 | #: rhodecode/templates/journal/journal.html:77 |
|
|||
3809 | msgid "following user" |
|
|||
3810 | msgstr "" |
|
|||
3811 |
|
||||
3812 | #: rhodecode/templates/journal/journal.html:77 |
|
|||
3813 | msgid "user" |
|
|||
3814 | msgstr "" |
|
|||
3815 |
|
||||
3816 | #: rhodecode/templates/journal/journal.html:110 |
|
|||
3817 | msgid "You are not following any users or repositories" |
|
|||
3818 | msgstr "" |
|
|||
3819 |
|
||||
3820 | #: rhodecode/templates/journal/journal_data.html:55 |
|
4005 | #: rhodecode/templates/journal/journal_data.html:55 | |
3821 | msgid "No entries yet" |
|
4006 | msgid "No entries yet" | |
3822 | msgstr "" |
|
4007 | msgstr "" | |
3823 |
|
4008 | |||
|
4009 | #: rhodecode/templates/journal/public_journal.html:4 | |||
|
4010 | #: rhodecode/templates/journal/public_journal.html:21 | |||
|
4011 | msgid "Public Journal" | |||
|
4012 | msgstr "" | |||
|
4013 | ||||
3824 | #: rhodecode/templates/journal/public_journal.html:13 |
|
4014 | #: rhodecode/templates/journal/public_journal.html:13 | |
3825 | msgid "ATOM public journal feed" |
|
4015 | msgid "ATOM public journal feed" | |
3826 | msgstr "" |
|
4016 | msgstr "" | |
@@ -3829,148 +4019,128 b' msgstr ""' | |||||
3829 | msgid "RSS public journal feed" |
|
4019 | msgid "RSS public journal feed" | |
3830 | msgstr "" |
|
4020 | msgstr "" | |
3831 |
|
4021 | |||
3832 | #: rhodecode/templates/journal/public_journal.html:21 |
|
|||
3833 | msgid "Public Journal" |
|
|||
3834 | msgstr "" |
|
|||
3835 |
|
||||
3836 | #: rhodecode/templates/pullrequests/pullrequest.html:4 |
|
4022 | #: rhodecode/templates/pullrequests/pullrequest.html:4 | |
3837 |
#: rhodecode/templates/pullrequests/pullrequest.html: |
|
4023 | #: rhodecode/templates/pullrequests/pullrequest.html:8 | |
3838 | msgid "New pull request" |
|
4024 | msgid "New pull request" | |
3839 | msgstr "" |
|
4025 | msgstr "" | |
3840 |
|
4026 | |||
3841 |
#: rhodecode/templates/pullrequests/pullrequest.html:5 |
|
4027 | #: rhodecode/templates/pullrequests/pullrequest.html:52 | |
3842 | msgid "refresh overview" |
|
|||
3843 | msgstr "" |
|
|||
3844 |
|
||||
3845 | #: rhodecode/templates/pullrequests/pullrequest.html:66 |
|
|||
3846 | msgid "Detailed compare view" |
|
4028 | msgid "Detailed compare view" | |
3847 | msgstr "" |
|
4029 | msgstr "" | |
3848 |
|
4030 | |||
3849 |
#: rhodecode/templates/pullrequests/pullrequest.html: |
|
4031 | #: rhodecode/templates/pullrequests/pullrequest.html:56 | |
3850 |
#: rhodecode/templates/pullrequests/pullrequest_show.html:1 |
|
4032 | #: rhodecode/templates/pullrequests/pullrequest_show.html:137 | |
3851 | msgid "Pull request reviewers" |
|
4033 | msgid "Pull request reviewers" | |
3852 | msgstr "" |
|
4034 | msgstr "" | |
3853 |
|
4035 | |||
3854 |
#: rhodecode/templates/pullrequests/pullrequest.html: |
|
4036 | #: rhodecode/templates/pullrequests/pullrequest.html:65 | |
3855 |
#: rhodecode/templates/pullrequests/pullrequest_show.html:1 |
|
4037 | #: rhodecode/templates/pullrequests/pullrequest_show.html:149 | |
3856 | msgid "owner" |
|
4038 | msgid "owner" | |
3857 | msgstr "" |
|
4039 | msgstr "" | |
3858 |
|
4040 | |||
3859 |
#: rhodecode/templates/pullrequests/pullrequest.html: |
|
4041 | #: rhodecode/templates/pullrequests/pullrequest.html:77 | |
3860 | #: rhodecode/templates/pullrequests/pullrequest_show.html:127 |
|
|||
3861 | msgid "Add reviewer to this pull request." |
|
4042 | msgid "Add reviewer to this pull request." | |
3862 | msgstr "" |
|
4043 | msgstr "" | |
3863 |
|
4044 | |||
3864 |
#: rhodecode/templates/pullrequests/pullrequest.html: |
|
4045 | #: rhodecode/templates/pullrequests/pullrequest.html:83 | |
3865 | msgid "Create new pull request" |
|
4046 | msgid "Create new pull request" | |
3866 | msgstr "" |
|
4047 | msgstr "" | |
3867 |
|
4048 | |||
3868 |
#: rhodecode/templates/pullrequests/pullrequest.html: |
|
4049 | #: rhodecode/templates/pullrequests/pullrequest.html:92 | |
|
4050 | #: rhodecode/templates/pullrequests/pullrequest_data.html:14 | |||
3869 | #: rhodecode/templates/pullrequests/pullrequest_show.html:25 |
|
4051 | #: rhodecode/templates/pullrequests/pullrequest_show.html:25 | |
3870 | #: rhodecode/templates/pullrequests/pullrequest_show_all.html:33 |
|
|||
3871 | msgid "Title" |
|
4052 | msgid "Title" | |
3872 | msgstr "" |
|
4053 | msgstr "" | |
3873 |
|
4054 | |||
3874 |
#: rhodecode/templates/pullrequests/pullrequest.html:1 |
|
4055 | #: rhodecode/templates/pullrequests/pullrequest.html:109 | |
3875 | msgid "Send pull request" |
|
4056 | msgid "Send pull request" | |
3876 | msgstr "" |
|
4057 | msgstr "" | |
3877 |
|
4058 | |||
3878 |
#: rhodecode/templates/pullrequests/pullrequest_show.html: |
|
4059 | #: rhodecode/templates/pullrequests/pullrequest_show.html:4 | |
3879 | #, python-format |
|
|||
3880 | msgid "Closed %s" |
|
|||
3881 | msgstr "" |
|
|||
3882 |
|
||||
3883 | #: rhodecode/templates/pullrequests/pullrequest_show.html:23 |
|
|||
3884 | #, python-format |
|
4060 | #, python-format | |
3885 | msgid "with status %s" |
|
4061 | msgid "%s Pull Request #%s" | |
3886 | msgstr "" |
|
4062 | msgstr "" | |
3887 |
|
4063 | |||
3888 |
#: rhodecode/templates/pullrequests/pullrequest_show.html:3 |
|
4064 | #: rhodecode/templates/pullrequests/pullrequest_show.html:35 | |
3889 |
msgid " |
|
4065 | msgid "Review status" | |
3890 | msgstr "" |
|
4066 | msgstr "" | |
3891 |
|
4067 | |||
3892 |
#: rhodecode/templates/pullrequests/pullrequest_show.html: |
|
4068 | #: rhodecode/templates/pullrequests/pullrequest_show.html:40 | |
3893 | msgid "Pull request status" |
|
4069 | msgid "Pull request status" | |
3894 | msgstr "" |
|
4070 | msgstr "" | |
3895 |
|
4071 | |||
3896 |
#: rhodecode/templates/pullrequests/pullrequest_show.html: |
|
4072 | #: rhodecode/templates/pullrequests/pullrequest_show.html:53 | |
3897 | msgid "Still not reviewed by" |
|
4073 | msgid "Still not reviewed by" | |
3898 | msgstr "" |
|
4074 | msgstr "" | |
3899 |
|
4075 | |||
3900 |
#: rhodecode/templates/pullrequests/pullrequest_show.html: |
|
4076 | #: rhodecode/templates/pullrequests/pullrequest_show.html:57 | |
3901 | #, python-format |
|
4077 | #, python-format | |
3902 | msgid "%d reviewer" |
|
4078 | msgid "%d reviewer" | |
3903 | msgid_plural "%d reviewers" |
|
4079 | msgid_plural "%d reviewers" | |
3904 | msgstr[0] "" |
|
4080 | msgstr[0] "" | |
3905 | msgstr[1] "" |
|
4081 | msgstr[1] "" | |
3906 |
|
4082 | |||
3907 |
#: rhodecode/templates/pullrequests/pullrequest_show.html:5 |
|
4083 | #: rhodecode/templates/pullrequests/pullrequest_show.html:59 | |
3908 |
msgid " |
|
4084 | msgid "Pull request was reviewed by all reviewers" | |
3909 | msgstr "" |
|
|||
3910 |
|
||||
3911 | #: rhodecode/templates/pullrequests/pullrequest_show.html:58 |
|
|||
3912 | msgid "Created on" |
|
|||
3913 | msgstr "" |
|
4085 | msgstr "" | |
3914 |
|
4086 | |||
3915 | #: rhodecode/templates/pullrequests/pullrequest_show.html:65 |
|
4087 | #: rhodecode/templates/pullrequests/pullrequest_show.html:65 | |
|
4088 | msgid "Origin repository" | |||
|
4089 | msgstr "" | |||
|
4090 | ||||
|
4091 | #: rhodecode/templates/pullrequests/pullrequest_show.html:89 | |||
|
4092 | msgid "Created on" | |||
|
4093 | msgstr "" | |||
|
4094 | ||||
|
4095 | #: rhodecode/templates/pullrequests/pullrequest_show.html:102 | |||
3916 | msgid "Compare view" |
|
4096 | msgid "Compare view" | |
3917 | msgstr "" |
|
4097 | msgstr "" | |
3918 |
|
4098 | |||
3919 |
#: rhodecode/templates/pullrequests/pullrequest_show.html:1 |
|
4099 | #: rhodecode/templates/pullrequests/pullrequest_show.html:149 | |
3920 | #, fuzzy |
|
4100 | #, fuzzy | |
3921 | msgid "reviewer" |
|
4101 | msgid "reviewer" | |
3922 | msgstr "" |
|
4102 | msgstr "" | |
3923 |
|
4103 | |||
|
4104 | #: rhodecode/templates/pullrequests/pullrequest_show.html:164 | |||
|
4105 | msgid "Add or remove reviewer to this pull request." | |||
|
4106 | msgstr "" | |||
|
4107 | ||||
|
4108 | #: rhodecode/templates/pullrequests/pullrequest_show.html:168 | |||
|
4109 | #, fuzzy | |||
|
4110 | msgid "Save changes" | |||
|
4111 | msgstr "" | |||
|
4112 | ||||
3924 | #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4 |
|
4113 | #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4 | |
3925 | msgid "all pull requests" |
|
4114 | #, python-format | |
3926 | msgstr "" |
|
4115 | msgid "%s Pull Requests" | |
3927 |
|
||||
3928 | #: rhodecode/templates/pullrequests/pullrequest_show_all.html:12 |
|
|||
3929 | msgid "All pull requests" |
|
|||
3930 | msgstr "" |
|
|||
3931 |
|
||||
3932 | #: rhodecode/templates/pullrequests/pullrequest_show_all.html:27 |
|
|||
3933 | msgid "Closed" |
|
|||
3934 | msgstr "" |
|
4116 | msgstr "" | |
3935 |
|
4117 | |||
3936 | #: rhodecode/templates/search/search.html:6 |
|
4118 | #: rhodecode/templates/search/search.html:6 | |
3937 | #, python-format |
|
4119 | msgid "Search repository" | |
3938 | msgid "Search \"%s\" in repository: %s" |
|
|||
3939 | msgstr "" |
|
4120 | msgstr "" | |
3940 |
|
4121 | |||
3941 | #: rhodecode/templates/search/search.html:8 |
|
4122 | #: rhodecode/templates/search/search.html:8 | |
3942 | #, python-format |
|
4123 | #: rhodecode/templates/search/search.html:16 | |
3943 | msgid "Search \"%s\" in all repositories" |
|
|||
3944 | msgstr "" |
|
|||
3945 |
|
||||
3946 | #: rhodecode/templates/search/search.html:12 |
|
|||
3947 | #: rhodecode/templates/search/search.html:32 |
|
|||
3948 | #, python-format |
|
|||
3949 | msgid "Search in repository: %s" |
|
|||
3950 | msgstr "" |
|
|||
3951 |
|
||||
3952 | #: rhodecode/templates/search/search.html:14 |
|
|||
3953 | #: rhodecode/templates/search/search.html:34 |
|
|||
3954 | msgid "Search in all repositories" |
|
4124 | msgid "Search in all repositories" | |
3955 | msgstr "" |
|
4125 | msgstr "" | |
3956 |
|
4126 | |||
3957 |
#: rhodecode/templates/search/search.html: |
|
4127 | #: rhodecode/templates/search/search.html:50 | |
3958 | msgid "Search term" |
|
4128 | msgid "Search term" | |
3959 | msgstr "" |
|
4129 | msgstr "" | |
3960 |
|
4130 | |||
3961 |
#: rhodecode/templates/search/search.html:6 |
|
4131 | #: rhodecode/templates/search/search.html:62 | |
3962 | msgid "Search in" |
|
4132 | msgid "Search in" | |
3963 | msgstr "" |
|
4133 | msgstr "" | |
3964 |
|
4134 | |||
3965 | #: rhodecode/templates/search/search.html:63 |
|
|||
3966 | msgid "File contents" |
|
|||
3967 | msgstr "" |
|
|||
3968 |
|
||||
3969 | #: rhodecode/templates/search/search.html:64 |
|
|||
3970 | msgid "Commit messages" |
|
|||
3971 | msgstr "" |
|
|||
3972 |
|
||||
3973 | #: rhodecode/templates/search/search.html:65 |
|
4135 | #: rhodecode/templates/search/search.html:65 | |
|
4136 | msgid "File contents" | |||
|
4137 | msgstr "" | |||
|
4138 | ||||
|
4139 | #: rhodecode/templates/search/search.html:66 | |||
|
4140 | msgid "Commit messages" | |||
|
4141 | msgstr "" | |||
|
4142 | ||||
|
4143 | #: rhodecode/templates/search/search.html:67 | |||
3974 | msgid "File names" |
|
4144 | msgid "File names" | |
3975 | msgstr "" |
|
4145 | msgstr "" | |
3976 |
|
4146 | |||
@@ -3980,39 +4150,23 b' msgstr ""' | |||||
3980 | msgid "Permission denied" |
|
4150 | msgid "Permission denied" | |
3981 | msgstr "" |
|
4151 | msgstr "" | |
3982 |
|
4152 | |||
3983 | #: rhodecode/templates/settings/repo_settings.html:5 |
|
|||
3984 | #, python-format |
|
|||
3985 | msgid "%s Settings" |
|
|||
3986 | msgstr "" |
|
|||
3987 |
|
||||
3988 | #: rhodecode/templates/settings/repo_settings.html:102 |
|
|||
3989 | msgid "Delete repository" |
|
|||
3990 | msgstr "" |
|
|||
3991 |
|
||||
3992 | #: rhodecode/templates/settings/repo_settings.html:109 |
|
|||
3993 | msgid "Remove repo" |
|
|||
3994 | msgstr "" |
|
|||
3995 |
|
||||
3996 | #: rhodecode/templates/shortlog/shortlog.html:5 |
|
4153 | #: rhodecode/templates/shortlog/shortlog.html:5 | |
3997 | #, python-format |
|
4154 | #, fuzzy, python-format | |
3998 |
msgid "%s |
|
4155 | msgid "%s Lightweight Changelog" | |
3999 | msgstr "" |
|
4156 | msgstr "" | |
4000 |
|
4157 | |||
|
4158 | #: rhodecode/templates/shortlog/shortlog.html:11 | |||
4001 | #: rhodecode/templates/shortlog/shortlog.html:15 |
|
4159 | #: rhodecode/templates/shortlog/shortlog.html:15 | |
4002 | #: rhodecode/templates/shortlog/shortlog.html:19 |
|
4160 | msgid "Lightweight Changelog" | |
4003 | msgid "shortlog" |
|
|||
4004 | msgstr "" |
|
|||
4005 |
|
||||
4006 | #: rhodecode/templates/shortlog/shortlog_data.html:5 |
|
|||
4007 | msgid "revision" |
|
|||
4008 | msgstr "" |
|
4161 | msgstr "" | |
4009 |
|
4162 | |||
4010 | #: rhodecode/templates/shortlog/shortlog_data.html:7 |
|
4163 | #: rhodecode/templates/shortlog/shortlog_data.html:7 | |
4011 |
msgid " |
|
4164 | msgid "Age" | |
4012 | msgstr "" |
|
4165 | msgstr "" | |
4013 |
|
4166 | |||
4014 |
#: rhodecode/templates/shortlog/shortlog_data.html: |
|
4167 | #: rhodecode/templates/shortlog/shortlog_data.html:20 | |
4015 | msgid "author" |
|
4168 | #, python-format | |
|
4169 | msgid "Click to open associated pull request #%s" | |||
4016 | msgstr "" |
|
4170 | msgstr "" | |
4017 |
|
4171 | |||
4018 | #: rhodecode/templates/shortlog/shortlog_data.html:75 |
|
4172 | #: rhodecode/templates/shortlog/shortlog_data.html:75 | |
@@ -4032,156 +4186,165 b' msgstr ""' | |||||
4032 | msgid "%s Summary" |
|
4186 | msgid "%s Summary" | |
4033 | msgstr "" |
|
4187 | msgstr "" | |
4034 |
|
4188 | |||
4035 |
#: rhodecode/templates/summary/summary.html:1 |
|
4189 | #: rhodecode/templates/summary/summary.html:16 | |
4036 | msgid "summary" |
|
|||
4037 | msgstr "" |
|
|||
4038 |
|
||||
4039 | #: rhodecode/templates/summary/summary.html:20 |
|
|||
4040 | #, python-format |
|
4190 | #, python-format | |
4041 |
msgid " |
|
4191 | msgid "%s ATOM feed" | |
4042 | msgstr "" |
|
4192 | msgstr "" | |
4043 |
|
4193 | |||
4044 |
#: rhodecode/templates/summary/summary.html: |
|
4194 | #: rhodecode/templates/summary/summary.html:17 | |
4045 | #, python-format |
|
4195 | #, python-format | |
4046 |
msgid " |
|
4196 | msgid "%s RSS feed" | |
4047 | msgstr "" |
|
4197 | msgstr "" | |
4048 |
|
4198 | |||
4049 |
#: rhodecode/templates/summary/summary.html: |
|
4199 | #: rhodecode/templates/summary/summary.html:62 | |
4050 | #: rhodecode/templates/summary/summary.html:52 |
|
|||
4051 | msgid "ATOM" |
|
|||
4052 | msgstr "" |
|
|||
4053 |
|
||||
4054 | #: rhodecode/templates/summary/summary.html:70 |
|
|||
4055 | #, python-format |
|
4200 | #, python-format | |
4056 | msgid "Repository locked by %s" |
|
4201 | msgid "Repository locked by %s" | |
4057 | msgstr "" |
|
4202 | msgstr "" | |
4058 |
|
4203 | |||
4059 |
#: rhodecode/templates/summary/summary.html: |
|
4204 | #: rhodecode/templates/summary/summary.html:64 | |
4060 | msgid "Repository unlocked" |
|
4205 | msgid "Repository unlocked" | |
4061 | msgstr "" |
|
4206 | msgstr "" | |
4062 |
|
4207 | |||
4063 |
#: rhodecode/templates/summary/summary.html: |
|
4208 | #: rhodecode/templates/summary/summary.html:83 | |
4064 | #, python-format |
|
4209 | #, python-format | |
4065 | msgid "Non changable ID %s" |
|
4210 | msgid "Non changable ID %s" | |
4066 | msgstr "" |
|
4211 | msgstr "" | |
4067 |
|
4212 | |||
|
4213 | #: rhodecode/templates/summary/summary.html:88 | |||
|
4214 | msgid "Public" | |||
|
4215 | msgstr "" | |||
|
4216 | ||||
|
4217 | #: rhodecode/templates/summary/summary.html:88 | |||
|
4218 | #: rhodecode/templates/summary/summary.html:89 | |||
|
4219 | msgid "Fork of" | |||
|
4220 | msgstr "" | |||
|
4221 | ||||
4068 | #: rhodecode/templates/summary/summary.html:96 |
|
4222 | #: rhodecode/templates/summary/summary.html:96 | |
4069 | msgid "public" |
|
4223 | msgid "Remote clone" | |
4070 | msgstr "" |
|
4224 | msgstr "" | |
4071 |
|
4225 | |||
4072 |
#: rhodecode/templates/summary/summary.html:1 |
|
4226 | #: rhodecode/templates/summary/summary.html:117 | |
4073 | msgid "remote clone" |
|
|||
4074 | msgstr "" |
|
|||
4075 |
|
||||
4076 | #: rhodecode/templates/summary/summary.html:125 |
|
|||
4077 | msgid "Contact" |
|
4227 | msgid "Contact" | |
4078 | msgstr "" |
|
4228 | msgstr "" | |
4079 |
|
4229 | |||
4080 |
#: rhodecode/templates/summary/summary.html:13 |
|
4230 | #: rhodecode/templates/summary/summary.html:131 | |
4081 | msgid "Clone url" |
|
4231 | msgid "Clone url" | |
4082 | msgstr "" |
|
4232 | msgstr "" | |
4083 |
|
4233 | |||
4084 |
#: rhodecode/templates/summary/summary.html:1 |
|
4234 | #: rhodecode/templates/summary/summary.html:136 | |
4085 | msgid "Show by Name" |
|
4235 | msgid "Show by Name" | |
4086 | msgstr "" |
|
4236 | msgstr "" | |
4087 |
|
4237 | |||
|
4238 | #: rhodecode/templates/summary/summary.html:137 | |||
|
4239 | msgid "Show by ID" | |||
|
4240 | msgstr "" | |||
|
4241 | ||||
4088 | #: rhodecode/templates/summary/summary.html:143 |
|
4242 | #: rhodecode/templates/summary/summary.html:143 | |
4089 | msgid "Show by ID" |
|
4243 | msgid "Trending files" | |
4090 | msgstr "" |
|
4244 | msgstr "" | |
4091 |
|
4245 | |||
4092 | #: rhodecode/templates/summary/summary.html:151 |
|
4246 | #: rhodecode/templates/summary/summary.html:151 | |
4093 | msgid "Trending files" |
|
4247 | #: rhodecode/templates/summary/summary.html:167 | |
|
4248 | #: rhodecode/templates/summary/summary.html:232 | |||
|
4249 | msgid "enable" | |||
4094 | msgstr "" |
|
4250 | msgstr "" | |
4095 |
|
4251 | |||
4096 | #: rhodecode/templates/summary/summary.html:159 |
|
4252 | #: rhodecode/templates/summary/summary.html:159 | |
4097 | #: rhodecode/templates/summary/summary.html:175 |
|
|||
4098 | #: rhodecode/templates/summary/summary.html:203 |
|
|||
4099 | msgid "enable" |
|
|||
4100 | msgstr "" |
|
|||
4101 |
|
||||
4102 | #: rhodecode/templates/summary/summary.html:167 |
|
|||
4103 | msgid "Download" |
|
4253 | msgid "Download" | |
4104 | msgstr "" |
|
4254 | msgstr "" | |
4105 |
|
4255 | |||
|
4256 | #: rhodecode/templates/summary/summary.html:163 | |||
|
4257 | msgid "There are no downloads yet" | |||
|
4258 | msgstr "" | |||
|
4259 | ||||
|
4260 | #: rhodecode/templates/summary/summary.html:165 | |||
|
4261 | msgid "Downloads are disabled for this repository" | |||
|
4262 | msgstr "" | |||
|
4263 | ||||
4106 | #: rhodecode/templates/summary/summary.html:171 |
|
4264 | #: rhodecode/templates/summary/summary.html:171 | |
4107 | msgid "There are no downloads yet" |
|
|||
4108 | msgstr "" |
|
|||
4109 |
|
||||
4110 | #: rhodecode/templates/summary/summary.html:173 |
|
|||
4111 | msgid "Downloads are disabled for this repository" |
|
|||
4112 | msgstr "" |
|
|||
4113 |
|
||||
4114 | #: rhodecode/templates/summary/summary.html:179 |
|
|||
4115 | msgid "Download as zip" |
|
4265 | msgid "Download as zip" | |
4116 | msgstr "" |
|
4266 | msgstr "" | |
4117 |
|
4267 | |||
4118 |
#: rhodecode/templates/summary/summary.html:1 |
|
4268 | #: rhodecode/templates/summary/summary.html:174 | |
4119 | msgid "Check this to download archive with subrepos" |
|
4269 | msgid "Check this to download archive with subrepos" | |
4120 | msgstr "" |
|
4270 | msgstr "" | |
4121 |
|
4271 | |||
4122 |
#: rhodecode/templates/summary/summary.html:1 |
|
4272 | #: rhodecode/templates/summary/summary.html:174 | |
4123 | msgid "with subrepos" |
|
4273 | msgid "with subrepos" | |
4124 | msgstr "" |
|
4274 | msgstr "" | |
4125 |
|
4275 | |||
4126 |
#: rhodecode/templates/summary/summary.html:19 |
|
4276 | #: rhodecode/templates/summary/summary.html:197 | |
|
4277 | msgid "Repository Size" | |||
|
4278 | msgstr "" | |||
|
4279 | ||||
|
4280 | #: rhodecode/templates/summary/summary.html:204 | |||
|
4281 | #: rhodecode/templates/summary/summary.html:206 | |||
|
4282 | msgid "Feed" | |||
|
4283 | msgstr "" | |||
|
4284 | ||||
|
4285 | #: rhodecode/templates/summary/summary.html:224 | |||
4127 | msgid "Commit activity by day / author" |
|
4286 | msgid "Commit activity by day / author" | |
4128 | msgstr "" |
|
4287 | msgstr "" | |
4129 |
|
4288 | |||
4130 |
#: rhodecode/templates/summary/summary.html:2 |
|
4289 | #: rhodecode/templates/summary/summary.html:235 | |
4131 | msgid "Stats gathered: " |
|
4290 | msgid "Stats gathered: " | |
4132 | msgstr "" |
|
4291 | msgstr "" | |
4133 |
|
4292 | |||
4134 |
#: rhodecode/templates/summary/summary.html:2 |
|
4293 | #: rhodecode/templates/summary/summary.html:256 | |
4135 | msgid "Shortlog" |
|
4294 | msgid "Latest changes" | |
4136 | msgstr "" |
|
4295 | msgstr "" | |
4137 |
|
4296 | |||
4138 |
#: rhodecode/templates/summary/summary.html:2 |
|
4297 | #: rhodecode/templates/summary/summary.html:258 | |
4139 | msgid "Quick start" |
|
4298 | msgid "Quick start" | |
4140 | msgstr "" |
|
4299 | msgstr "" | |
4141 |
|
4300 | |||
4142 |
#: rhodecode/templates/summary/summary.html:2 |
|
4301 | #: rhodecode/templates/summary/summary.html:272 | |
4143 | #, python-format |
|
4302 | #, python-format | |
4144 | msgid "Readme file at revision '%s'" |
|
4303 | msgid "Readme file at revision '%s'" | |
4145 | msgstr "" |
|
4304 | msgstr "" | |
4146 |
|
4305 | |||
4147 |
#: rhodecode/templates/summary/summary.html:2 |
|
4306 | #: rhodecode/templates/summary/summary.html:275 | |
4148 | msgid "Permalink to this readme" |
|
4307 | msgid "Permalink to this readme" | |
4149 | msgstr "" |
|
4308 | msgstr "" | |
4150 |
|
4309 | |||
4151 |
#: rhodecode/templates/summary/summary.html:3 |
|
4310 | #: rhodecode/templates/summary/summary.html:333 | |
4152 | #, python-format |
|
4311 | #, python-format | |
4153 | msgid "Download %s as %s" |
|
4312 | msgid "Download %s as %s" | |
4154 | msgstr "" |
|
4313 | msgstr "" | |
4155 |
|
4314 | |||
4156 |
#: rhodecode/templates/summary/summary.html: |
|
4315 | #: rhodecode/templates/summary/summary.html:380 | |
|
4316 | msgid "files" | |||
|
4317 | msgstr "" | |||
|
4318 | ||||
|
4319 | #: rhodecode/templates/summary/summary.html:690 | |||
4157 | msgid "commits" |
|
4320 | msgid "commits" | |
4158 | msgstr "" |
|
4321 | msgstr "" | |
4159 |
|
4322 | |||
4160 |
#: rhodecode/templates/summary/summary.html:6 |
|
4323 | #: rhodecode/templates/summary/summary.html:691 | |
4161 | msgid "files added" |
|
4324 | msgid "files added" | |
4162 | msgstr "" |
|
4325 | msgstr "" | |
4163 |
|
4326 | |||
4164 |
#: rhodecode/templates/summary/summary.html:6 |
|
4327 | #: rhodecode/templates/summary/summary.html:692 | |
4165 | msgid "files changed" |
|
4328 | msgid "files changed" | |
4166 | msgstr "" |
|
4329 | msgstr "" | |
4167 |
|
4330 | |||
4168 |
#: rhodecode/templates/summary/summary.html:6 |
|
4331 | #: rhodecode/templates/summary/summary.html:693 | |
4169 | msgid "files removed" |
|
4332 | msgid "files removed" | |
4170 | msgstr "" |
|
4333 | msgstr "" | |
4171 |
|
4334 | |||
4172 |
#: rhodecode/templates/summary/summary.html:6 |
|
4335 | #: rhodecode/templates/summary/summary.html:695 | |
4173 | msgid "commit" |
|
4336 | msgid "commit" | |
4174 | msgstr "" |
|
4337 | msgstr "" | |
4175 |
|
4338 | |||
4176 |
#: rhodecode/templates/summary/summary.html:66 |
|
4339 | #: rhodecode/templates/summary/summary.html:696 | |
4177 | msgid "file added" |
|
4340 | msgid "file added" | |
4178 | msgstr "" |
|
4341 | msgstr "" | |
4179 |
|
4342 | |||
4180 |
#: rhodecode/templates/summary/summary.html:6 |
|
4343 | #: rhodecode/templates/summary/summary.html:697 | |
4181 | msgid "file changed" |
|
4344 | msgid "file changed" | |
4182 | msgstr "" |
|
4345 | msgstr "" | |
4183 |
|
4346 | |||
4184 |
#: rhodecode/templates/summary/summary.html:6 |
|
4347 | #: rhodecode/templates/summary/summary.html:698 | |
4185 | msgid "file removed" |
|
4348 | msgid "file removed" | |
4186 | msgstr "" |
|
4349 | msgstr "" | |
4187 |
|
4350 | |||
@@ -4190,23 +4353,7 b' msgstr ""' | |||||
4190 | msgid "%s Tags" |
|
4353 | msgid "%s Tags" | |
4191 | msgstr "" |
|
4354 | msgstr "" | |
4192 |
|
4355 | |||
4193 |
#: rhodecode/templates/tags/tags.html:2 |
|
4356 | #: rhodecode/templates/tags/tags.html:26 | |
4194 | msgid "Compare tags" |
|
4357 | msgid "Compare tags" | |
4195 | msgstr "" |
|
4358 | msgstr "" | |
4196 |
|
4359 | |||
4197 | #~ msgid "" |
|
|||
4198 | #~ "%s repository is not mapped to db" |
|
|||
4199 | #~ " perhaps it was created or renamed" |
|
|||
4200 | #~ " from the file system please run " |
|
|||
4201 | #~ "the application again in order to " |
|
|||
4202 | #~ "rescan repositories" |
|
|||
4203 | #~ msgstr "" |
|
|||
4204 |
|
||||
4205 | #~ msgid "" |
|
|||
4206 | #~ "%s repository is not mapped to db" |
|
|||
4207 | #~ " perhaps it was moved or renamed " |
|
|||
4208 | #~ "from the filesystem please run the " |
|
|||
4209 | #~ "application again in order to rescan " |
|
|||
4210 | #~ "repositories" |
|
|||
4211 | #~ msgstr "" |
|
|||
4212 |
|
1 | NO CONTENT: modified file, binary diff hidden |
|
NO CONTENT: modified file, binary diff hidden |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file, binary diff hidden |
|
NO CONTENT: modified file, binary diff hidden |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file, binary diff hidden |
|
NO CONTENT: modified file, binary diff hidden |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file, binary diff hidden |
|
NO CONTENT: modified file, binary diff hidden |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file, binary diff hidden |
|
NO CONTENT: modified file, binary diff hidden |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file, binary diff hidden |
|
NO CONTENT: modified file, binary diff hidden |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: file renamed from rhodecode/lib/cleanup.py to rhodecode/lib/paster_commands/cleanup.py |
|
NO CONTENT: file renamed from rhodecode/lib/cleanup.py to rhodecode/lib/paster_commands/cleanup.py | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: file renamed from rhodecode/config/rcextensions/make_rcextensions.py to rhodecode/lib/paster_commands/make_rcextensions.py |
|
NO CONTENT: file renamed from rhodecode/config/rcextensions/make_rcextensions.py to rhodecode/lib/paster_commands/make_rcextensions.py | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: file renamed from rhodecode/config/setup_rhodecode.py to rhodecode/lib/paster_commands/setup_rhodecode.py |
|
NO CONTENT: file renamed from rhodecode/config/setup_rhodecode.py to rhodecode/lib/paster_commands/setup_rhodecode.py | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: file renamed from rhodecode/lib/update_repoinfo.py to rhodecode/lib/paster_commands/update_repoinfo.py |
|
NO CONTENT: file renamed from rhodecode/lib/update_repoinfo.py to rhodecode/lib/paster_commands/update_repoinfo.py | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file chmod 100644 => 100755 |
|
NO CONTENT: modified file chmod 100644 => 100755 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file, binary diff hidden |
|
NO CONTENT: modified file, binary diff hidden |
1 | NO CONTENT: modified file, binary diff hidden |
|
NO CONTENT: modified file, binary diff hidden |
1 | NO CONTENT: modified file, binary diff hidden |
|
NO CONTENT: modified file, binary diff hidden |
1 | NO CONTENT: modified file, binary diff hidden |
|
NO CONTENT: modified file, binary diff hidden |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file chmod 100644 => 100755 |
|
NO CONTENT: modified file chmod 100644 => 100755 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file chmod 100644 => 100755 |
|
NO CONTENT: modified file chmod 100644 => 100755 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed | ||
The requested commit or file is too big and content was truncated. Show full diff |
General Comments 0
You need to be logged in to leave comments.
Login now