Show More
The requested changes are too big and content was truncated. Show full diff
@@ -0,0 +1,111 b'' | |||||
|
1 | .. _api: | |||
|
2 | ||||
|
3 | ||||
|
4 | API | |||
|
5 | === | |||
|
6 | ||||
|
7 | ||||
|
8 | Starting from RhodeCode version 1.2 a simple API was implemented. | |||
|
9 | There's a single schema for calling all api methods. API is implemented | |||
|
10 | with JSON protocol both ways. An url to send API request in RhodeCode is | |||
|
11 | <your_server>/_admin/api | |||
|
12 | ||||
|
13 | ||||
|
14 | All clients need to send JSON data in such format:: | |||
|
15 | ||||
|
16 | { | |||
|
17 | "api_key":"<api_key>", | |||
|
18 | "method":"<method_name>", | |||
|
19 | "args":{"<arg_key>":"<arg_val>"} | |||
|
20 | } | |||
|
21 | ||||
|
22 | Example call for autopulling remotes repos using curl:: | |||
|
23 | curl https://server.com/_admin/api -X POST -H 'content-type:text/plain' --data-binary '{"api_key":"xe7cdb2v278e4evbdf5vs04v832v0efvcbcve4a3","method":"pull","args":{"repo":"CPython"}}' | |||
|
24 | ||||
|
25 | Simply provide | |||
|
26 | - *api_key* for access and permission validation. | |||
|
27 | - *method* is name of method to call | |||
|
28 | - *args* is an key:value list of arguments to pass to method | |||
|
29 | ||||
|
30 | .. note:: | |||
|
31 | ||||
|
32 | api_key can be found in your user account page | |||
|
33 | ||||
|
34 | ||||
|
35 | RhodeCode API will return always a JSON formatted answer:: | |||
|
36 | ||||
|
37 | { | |||
|
38 | "result": "<result>", | |||
|
39 | "error": null | |||
|
40 | } | |||
|
41 | ||||
|
42 | All responses from API will be `HTTP/1.0 200 OK`, if there's an error while | |||
|
43 | calling api *error* key from response will contain failure description | |||
|
44 | and result will be null. | |||
|
45 | ||||
|
46 | API METHODS | |||
|
47 | +++++++++++ | |||
|
48 | ||||
|
49 | ||||
|
50 | pull | |||
|
51 | ---- | |||
|
52 | ||||
|
53 | Pulls given repo from remote location. Can be used to automatically keep | |||
|
54 | remote repos up to date. This command can be executed only using api_key | |||
|
55 | belonging to user with admin rights | |||
|
56 | ||||
|
57 | INPUT:: | |||
|
58 | ||||
|
59 | api_key:"<api_key>" | |||
|
60 | method: "pull" | |||
|
61 | args: {"repo":<repo_name>} | |||
|
62 | ||||
|
63 | OUTPUT:: | |||
|
64 | ||||
|
65 | result:"Pulled from <repo_name>" | |||
|
66 | error:null | |||
|
67 | ||||
|
68 | ||||
|
69 | create_user | |||
|
70 | ----------- | |||
|
71 | ||||
|
72 | Creates new user in RhodeCode. This command can be executed only using api_key | |||
|
73 | belonging to user with admin rights | |||
|
74 | ||||
|
75 | INPUT:: | |||
|
76 | ||||
|
77 | api_key:"<api_key>" | |||
|
78 | method: "create_user" | |||
|
79 | args: {"username": "<username>", | |||
|
80 | "password": "<password>", | |||
|
81 | "active": "<bool>", | |||
|
82 | "admin": "<bool>", | |||
|
83 | "name": "<firstname>", | |||
|
84 | "lastname": "<lastname>", | |||
|
85 | "email": "<useremail>"} | |||
|
86 | ||||
|
87 | OUTPUT:: | |||
|
88 | ||||
|
89 | result:{"id": <newuserid>, | |||
|
90 | "msg":"created new user <username>"} | |||
|
91 | error:null | |||
|
92 | ||||
|
93 | ||||
|
94 | create_users_group | |||
|
95 | ------------------ | |||
|
96 | ||||
|
97 | creates new users group. This command can be executed only using api_key | |||
|
98 | belonging to user with admin rights | |||
|
99 | ||||
|
100 | INPUT:: | |||
|
101 | ||||
|
102 | api_key:"<api_key>" | |||
|
103 | method: "create_user" | |||
|
104 | args: {"name": "<groupname>", | |||
|
105 | "active":"<bool>"} | |||
|
106 | ||||
|
107 | OUTPUT:: | |||
|
108 | ||||
|
109 | result:{"id": <newusersgroupid>, | |||
|
110 | "msg":"created new users group <groupname>"} | |||
|
111 | error:null |
@@ -0,0 +1,11 b'' | |||||
|
1 | .. _api_key_access: | |||
|
2 | ||||
|
3 | Access to RhodeCode via API KEY | |||
|
4 | =============================== | |||
|
5 | ||||
|
6 | Starting from version 1.2 rss/atom feeds and journal feeds | |||
|
7 | can be accessed via **api_key**. This unique key is automatically generated for | |||
|
8 | each user in RhodeCode application. Using this key it is possible to access | |||
|
9 | feeds without having to log in. When user changes his password a new API KEY | |||
|
10 | is generated for him automatically. You can check your API KEY in account | |||
|
11 | settings page. No newline at end of file |
@@ -0,0 +1,25 b'' | |||||
|
1 | .. _backup: | |||
|
2 | ||||
|
3 | Backing up RhodeCode | |||
|
4 | ==================== | |||
|
5 | ||||
|
6 | ||||
|
7 | Settings | |||
|
8 | -------- | |||
|
9 | ||||
|
10 | Just copy your .ini file, it contains all RhodeCode settings. | |||
|
11 | ||||
|
12 | Whoosh index | |||
|
13 | ------------ | |||
|
14 | ||||
|
15 | Whoosh index is located in **/data/index** directory where you installed | |||
|
16 | RhodeCode ie. the same place where the ini file is located | |||
|
17 | ||||
|
18 | ||||
|
19 | Database | |||
|
20 | -------- | |||
|
21 | ||||
|
22 | When using sqlite just copy rhodecode.db. | |||
|
23 | Any other database engine requires a manual backup operation. | |||
|
24 | ||||
|
25 | Database backup will contain all gathered statistics No newline at end of file |
@@ -0,0 +1,54 b'' | |||||
|
1 | .. _general: | |||
|
2 | ||||
|
3 | General RhodeCode usage | |||
|
4 | ======================= | |||
|
5 | ||||
|
6 | ||||
|
7 | Repository deleting | |||
|
8 | ------------------- | |||
|
9 | ||||
|
10 | Currently when admin/owner deletes a repository, RhodeCode does not physically | |||
|
11 | delete a repository from filesystem, it renames it in a special way so it's | |||
|
12 | not possible to push,clone or access repository. It's worth a notice that, | |||
|
13 | even if someone will be given administrative access to RhodeCode and will | |||
|
14 | delete a repository You can easy restore such action by restoring `rm__<date>` | |||
|
15 | from the repository name, and internal repository storage (.hg/.git) | |||
|
16 | ||||
|
17 | Follow current branch in file view | |||
|
18 | ---------------------------------- | |||
|
19 | ||||
|
20 | In file view when this checkbox is checked the << and >> arrows will jump | |||
|
21 | to changesets within the same branch currently viewing. So for example | |||
|
22 | if someone is viewing files at 'beta' branch and marks `follow current branch` | |||
|
23 | checkbox the << and >> buttons will only show him revisions for 'beta' branch | |||
|
24 | ||||
|
25 | ||||
|
26 | Compare view from changelog | |||
|
27 | --------------------------- | |||
|
28 | ||||
|
29 | Checkboxes in compare view allow users to view combined compare view. You can | |||
|
30 | only show the range between the first and last checkbox (no cherry pick). | |||
|
31 | Clicking more than one checkbox will activate a link in top saying | |||
|
32 | `Show selected changes <from-rev> -> <to-rev>` clicking this will bring | |||
|
33 | compare view | |||
|
34 | ||||
|
35 | Compare view is also available from the journal on pushes having more than | |||
|
36 | one changeset | |||
|
37 | ||||
|
38 | ||||
|
39 | ||||
|
40 | Mailing | |||
|
41 | ------- | |||
|
42 | ||||
|
43 | When administrator will fill up the mailing settings in .ini files | |||
|
44 | RhodeCode will send mails on user registration, or when RhodeCode errors occur | |||
|
45 | on errors the mails will have a detailed traceback of error. | |||
|
46 | ||||
|
47 | ||||
|
48 | Trending source files | |||
|
49 | --------------------- | |||
|
50 | ||||
|
51 | Trending source files are calculated based on pre defined dict of known | |||
|
52 | types and extensions. If You miss some extension or Would like to scan some | |||
|
53 | custom files it's possible to add new types in `LANGUAGES_EXTENSIONS_MAP` dict | |||
|
54 | located in `/rhodecode/lib/celerylib/tasks.py` No newline at end of file |
@@ -0,0 +1,223 b'' | |||||
|
1 | import logging | |||
|
2 | import traceback | |||
|
3 | import formencode | |||
|
4 | ||||
|
5 | from formencode import htmlfill | |||
|
6 | from operator import itemgetter | |||
|
7 | ||||
|
8 | from pylons import request, response, session, tmpl_context as c, url | |||
|
9 | from pylons.controllers.util import abort, redirect | |||
|
10 | from pylons.i18n.translation import _ | |||
|
11 | ||||
|
12 | from rhodecode.lib import helpers as h | |||
|
13 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \ | |||
|
14 | HasPermissionAnyDecorator | |||
|
15 | from rhodecode.lib.base import BaseController, render | |||
|
16 | from rhodecode.model.db import Group | |||
|
17 | from rhodecode.model.repos_group import ReposGroupModel | |||
|
18 | from rhodecode.model.forms import ReposGroupForm | |||
|
19 | ||||
|
20 | log = logging.getLogger(__name__) | |||
|
21 | ||||
|
22 | ||||
|
23 | class ReposGroupsController(BaseController): | |||
|
24 | """REST Controller styled on the Atom Publishing Protocol""" | |||
|
25 | # To properly map this controller, ensure your config/routing.py | |||
|
26 | # file has a resource setup: | |||
|
27 | # map.resource('repos_group', 'repos_groups') | |||
|
28 | ||||
|
29 | @LoginRequired() | |||
|
30 | def __before__(self): | |||
|
31 | super(ReposGroupsController, self).__before__() | |||
|
32 | ||||
|
33 | def __load_defaults(self): | |||
|
34 | ||||
|
35 | c.repo_groups = [('', '')] | |||
|
36 | parents_link = lambda k: h.literal('»'.join( | |||
|
37 | map(lambda k: k.group_name, | |||
|
38 | k.parents + [k]) | |||
|
39 | ) | |||
|
40 | ) | |||
|
41 | ||||
|
42 | c.repo_groups.extend([(x.group_id, parents_link(x)) for \ | |||
|
43 | x in self.sa.query(Group).all()]) | |||
|
44 | ||||
|
45 | c.repo_groups = sorted(c.repo_groups, | |||
|
46 | key=lambda t: t[1].split('»')[0]) | |||
|
47 | c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) | |||
|
48 | ||||
|
49 | def __load_data(self, group_id): | |||
|
50 | """ | |||
|
51 | Load defaults settings for edit, and update | |||
|
52 | ||||
|
53 | :param group_id: | |||
|
54 | """ | |||
|
55 | self.__load_defaults() | |||
|
56 | ||||
|
57 | repo_group = Group.get(group_id) | |||
|
58 | ||||
|
59 | data = repo_group.get_dict() | |||
|
60 | ||||
|
61 | return data | |||
|
62 | ||||
|
63 | @HasPermissionAnyDecorator('hg.admin') | |||
|
64 | def index(self, format='html'): | |||
|
65 | """GET /repos_groups: All items in the collection""" | |||
|
66 | # url('repos_groups') | |||
|
67 | ||||
|
68 | sk = lambda g:g.parents[0].group_name if g.parents else g.group_name | |||
|
69 | c.groups = sorted(Group.query().all(), key=sk) | |||
|
70 | return render('admin/repos_groups/repos_groups_show.html') | |||
|
71 | ||||
|
72 | @HasPermissionAnyDecorator('hg.admin') | |||
|
73 | def create(self): | |||
|
74 | """POST /repos_groups: Create a new item""" | |||
|
75 | # url('repos_groups') | |||
|
76 | self.__load_defaults() | |||
|
77 | repos_group_model = ReposGroupModel() | |||
|
78 | repos_group_form = ReposGroupForm(available_groups= | |||
|
79 | c.repo_groups_choices)() | |||
|
80 | try: | |||
|
81 | form_result = repos_group_form.to_python(dict(request.POST)) | |||
|
82 | repos_group_model.create(form_result) | |||
|
83 | h.flash(_('created repos group %s') \ | |||
|
84 | % form_result['group_name'], category='success') | |||
|
85 | #TODO: in futureaction_logger(, '', '', '', self.sa) | |||
|
86 | except formencode.Invalid, errors: | |||
|
87 | ||||
|
88 | return htmlfill.render( | |||
|
89 | render('admin/repos_groups/repos_groups_add.html'), | |||
|
90 | defaults=errors.value, | |||
|
91 | errors=errors.error_dict or {}, | |||
|
92 | prefix_error=False, | |||
|
93 | encoding="UTF-8") | |||
|
94 | except Exception: | |||
|
95 | log.error(traceback.format_exc()) | |||
|
96 | h.flash(_('error occurred during creation of repos group %s') \ | |||
|
97 | % request.POST.get('group_name'), category='error') | |||
|
98 | ||||
|
99 | return redirect(url('repos_groups')) | |||
|
100 | ||||
|
101 | ||||
|
102 | @HasPermissionAnyDecorator('hg.admin') | |||
|
103 | def new(self, format='html'): | |||
|
104 | """GET /repos_groups/new: Form to create a new item""" | |||
|
105 | # url('new_repos_group') | |||
|
106 | self.__load_defaults() | |||
|
107 | return render('admin/repos_groups/repos_groups_add.html') | |||
|
108 | ||||
|
109 | @HasPermissionAnyDecorator('hg.admin') | |||
|
110 | def update(self, id): | |||
|
111 | """PUT /repos_groups/id: Update an existing item""" | |||
|
112 | # Forms posted to this method should contain a hidden field: | |||
|
113 | # <input type="hidden" name="_method" value="PUT" /> | |||
|
114 | # Or using helpers: | |||
|
115 | # h.form(url('repos_group', id=ID), | |||
|
116 | # method='put') | |||
|
117 | # url('repos_group', id=ID) | |||
|
118 | ||||
|
119 | self.__load_defaults() | |||
|
120 | c.repos_group = Group.get(id) | |||
|
121 | ||||
|
122 | repos_group_model = ReposGroupModel() | |||
|
123 | repos_group_form = ReposGroupForm(edit=True, | |||
|
124 | old_data=c.repos_group.get_dict(), | |||
|
125 | available_groups= | |||
|
126 | c.repo_groups_choices)() | |||
|
127 | try: | |||
|
128 | form_result = repos_group_form.to_python(dict(request.POST)) | |||
|
129 | repos_group_model.update(id, form_result) | |||
|
130 | h.flash(_('updated repos group %s') \ | |||
|
131 | % form_result['group_name'], category='success') | |||
|
132 | #TODO: in futureaction_logger(, '', '', '', self.sa) | |||
|
133 | except formencode.Invalid, errors: | |||
|
134 | ||||
|
135 | return htmlfill.render( | |||
|
136 | render('admin/repos_groups/repos_groups_edit.html'), | |||
|
137 | defaults=errors.value, | |||
|
138 | errors=errors.error_dict or {}, | |||
|
139 | prefix_error=False, | |||
|
140 | encoding="UTF-8") | |||
|
141 | except Exception: | |||
|
142 | log.error(traceback.format_exc()) | |||
|
143 | h.flash(_('error occurred during update of repos group %s') \ | |||
|
144 | % request.POST.get('group_name'), category='error') | |||
|
145 | ||||
|
146 | return redirect(url('repos_groups')) | |||
|
147 | ||||
|
148 | ||||
|
149 | @HasPermissionAnyDecorator('hg.admin') | |||
|
150 | def delete(self, id): | |||
|
151 | """DELETE /repos_groups/id: Delete an existing item""" | |||
|
152 | # Forms posted to this method should contain a hidden field: | |||
|
153 | # <input type="hidden" name="_method" value="DELETE" /> | |||
|
154 | # Or using helpers: | |||
|
155 | # h.form(url('repos_group', id=ID), | |||
|
156 | # method='delete') | |||
|
157 | # url('repos_group', id=ID) | |||
|
158 | ||||
|
159 | repos_group_model = ReposGroupModel() | |||
|
160 | gr = Group.get(id) | |||
|
161 | repos = gr.repositories.all() | |||
|
162 | if repos: | |||
|
163 | h.flash(_('This group contains %s repositores and cannot be ' | |||
|
164 | 'deleted' % len(repos)), | |||
|
165 | category='error') | |||
|
166 | return redirect(url('repos_groups')) | |||
|
167 | ||||
|
168 | try: | |||
|
169 | repos_group_model.delete(id) | |||
|
170 | h.flash(_('removed repos group %s' % gr.group_name), category='success') | |||
|
171 | #TODO: in future action_logger(, '', '', '', self.sa) | |||
|
172 | except Exception: | |||
|
173 | log.error(traceback.format_exc()) | |||
|
174 | h.flash(_('error occurred during deletion of repos group %s' % gr.group_name), | |||
|
175 | category='error') | |||
|
176 | ||||
|
177 | return redirect(url('repos_groups')) | |||
|
178 | ||||
|
179 | def show(self, id, format='html'): | |||
|
180 | """GET /repos_groups/id: Show a specific item""" | |||
|
181 | # url('repos_group', id=ID) | |||
|
182 | ||||
|
183 | c.group = Group.get(id) | |||
|
184 | ||||
|
185 | if c.group: | |||
|
186 | c.group_repos = c.group.repositories.all() | |||
|
187 | else: | |||
|
188 | return redirect(url('home')) | |||
|
189 | ||||
|
190 | #overwrite our cached list with current filter | |||
|
191 | gr_filter = c.group_repos | |||
|
192 | c.cached_repo_list = self.scm_model.get_repos(all_repos=gr_filter) | |||
|
193 | ||||
|
194 | c.repos_list = c.cached_repo_list | |||
|
195 | ||||
|
196 | c.repo_cnt = 0 | |||
|
197 | ||||
|
198 | c.groups = self.sa.query(Group).order_by(Group.group_name)\ | |||
|
199 | .filter(Group.group_parent_id == id).all() | |||
|
200 | ||||
|
201 | return render('admin/repos_groups/repos_groups.html') | |||
|
202 | ||||
|
203 | @HasPermissionAnyDecorator('hg.admin') | |||
|
204 | def edit(self, id, format='html'): | |||
|
205 | """GET /repos_groups/id/edit: Form to edit an existing item""" | |||
|
206 | # url('edit_repos_group', id=ID) | |||
|
207 | ||||
|
208 | id_ = int(id) | |||
|
209 | ||||
|
210 | c.repos_group = Group.get(id_) | |||
|
211 | defaults = self.__load_data(id_) | |||
|
212 | ||||
|
213 | # we need to exclude this group from the group list for editing | |||
|
214 | c.repo_groups = filter(lambda x:x[0] != id_, c.repo_groups) | |||
|
215 | ||||
|
216 | return htmlfill.render( | |||
|
217 | render('admin/repos_groups/repos_groups_edit.html'), | |||
|
218 | defaults=defaults, | |||
|
219 | encoding="UTF-8", | |||
|
220 | force_defaults=False | |||
|
221 | ) | |||
|
222 | ||||
|
223 |
@@ -0,0 +1,214 b'' | |||||
|
1 | # -*- coding: utf-8 -*- | |||
|
2 | """ | |||
|
3 | rhodecode.controllers.admin.users_groups | |||
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |||
|
5 | ||||
|
6 | Users Groups crud controller for pylons | |||
|
7 | ||||
|
8 | :created_on: Jan 25, 2011 | |||
|
9 | :author: marcink | |||
|
10 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |||
|
11 | :license: GPLv3, see COPYING for more details. | |||
|
12 | """ | |||
|
13 | # This program is free software: you can redistribute it and/or modify | |||
|
14 | # it under the terms of the GNU General Public License as published by | |||
|
15 | # the Free Software Foundation, either version 3 of the License, or | |||
|
16 | # (at your option) any later version. | |||
|
17 | # | |||
|
18 | # This program is distributed in the hope that it will be useful, | |||
|
19 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|
20 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
|
21 | # GNU General Public License for more details. | |||
|
22 | # | |||
|
23 | # You should have received a copy of the GNU General Public License | |||
|
24 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
|
25 | ||||
|
26 | import logging | |||
|
27 | import traceback | |||
|
28 | import formencode | |||
|
29 | ||||
|
30 | from formencode import htmlfill | |||
|
31 | from pylons import request, session, tmpl_context as c, url, config | |||
|
32 | from pylons.controllers.util import abort, redirect | |||
|
33 | from pylons.i18n.translation import _ | |||
|
34 | ||||
|
35 | from rhodecode.lib.exceptions import UsersGroupsAssignedException | |||
|
36 | from rhodecode.lib import helpers as h | |||
|
37 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator | |||
|
38 | from rhodecode.lib.base import BaseController, render | |||
|
39 | ||||
|
40 | from rhodecode.model.db import User, UsersGroup, Permission, UsersGroupToPerm | |||
|
41 | from rhodecode.model.forms import UserForm, UsersGroupForm | |||
|
42 | ||||
|
43 | log = logging.getLogger(__name__) | |||
|
44 | ||||
|
45 | ||||
|
46 | class UsersGroupsController(BaseController): | |||
|
47 | """REST Controller styled on the Atom Publishing Protocol""" | |||
|
48 | # To properly map this controller, ensure your config/routing.py | |||
|
49 | # file has a resource setup: | |||
|
50 | # map.resource('users_group', 'users_groups') | |||
|
51 | ||||
|
52 | @LoginRequired() | |||
|
53 | @HasPermissionAllDecorator('hg.admin') | |||
|
54 | def __before__(self): | |||
|
55 | c.admin_user = session.get('admin_user') | |||
|
56 | c.admin_username = session.get('admin_username') | |||
|
57 | super(UsersGroupsController, self).__before__() | |||
|
58 | c.available_permissions = config['available_permissions'] | |||
|
59 | ||||
|
60 | def index(self, format='html'): | |||
|
61 | """GET /users_groups: All items in the collection""" | |||
|
62 | # url('users_groups') | |||
|
63 | c.users_groups_list = self.sa.query(UsersGroup).all() | |||
|
64 | return render('admin/users_groups/users_groups.html') | |||
|
65 | ||||
|
66 | def create(self): | |||
|
67 | """POST /users_groups: Create a new item""" | |||
|
68 | # url('users_groups') | |||
|
69 | ||||
|
70 | users_group_form = UsersGroupForm()() | |||
|
71 | try: | |||
|
72 | form_result = users_group_form.to_python(dict(request.POST)) | |||
|
73 | UsersGroup.create(form_result) | |||
|
74 | h.flash(_('created users group %s') \ | |||
|
75 | % form_result['users_group_name'], category='success') | |||
|
76 | #action_logger(self.rhodecode_user, 'new_user', '', '', self.sa) | |||
|
77 | except formencode.Invalid, errors: | |||
|
78 | return htmlfill.render( | |||
|
79 | render('admin/users_groups/users_group_add.html'), | |||
|
80 | defaults=errors.value, | |||
|
81 | errors=errors.error_dict or {}, | |||
|
82 | prefix_error=False, | |||
|
83 | encoding="UTF-8") | |||
|
84 | except Exception: | |||
|
85 | log.error(traceback.format_exc()) | |||
|
86 | h.flash(_('error occurred during creation of users group %s') \ | |||
|
87 | % request.POST.get('users_group_name'), category='error') | |||
|
88 | ||||
|
89 | return redirect(url('users_groups')) | |||
|
90 | ||||
|
91 | def new(self, format='html'): | |||
|
92 | """GET /users_groups/new: Form to create a new item""" | |||
|
93 | # url('new_users_group') | |||
|
94 | return render('admin/users_groups/users_group_add.html') | |||
|
95 | ||||
|
96 | def update(self, id): | |||
|
97 | """PUT /users_groups/id: Update an existing item""" | |||
|
98 | # Forms posted to this method should contain a hidden field: | |||
|
99 | # <input type="hidden" name="_method" value="PUT" /> | |||
|
100 | # Or using helpers: | |||
|
101 | # h.form(url('users_group', id=ID), | |||
|
102 | # method='put') | |||
|
103 | # url('users_group', id=ID) | |||
|
104 | ||||
|
105 | c.users_group = UsersGroup.get(id) | |||
|
106 | c.group_members = [(x.user_id, x.user.username) for x in | |||
|
107 | c.users_group.members] | |||
|
108 | ||||
|
109 | c.available_members = [(x.user_id, x.username) for x in | |||
|
110 | self.sa.query(User).all()] | |||
|
111 | users_group_form = UsersGroupForm(edit=True, | |||
|
112 | old_data=c.users_group.get_dict(), | |||
|
113 | available_members=[str(x[0]) for x | |||
|
114 | in c.available_members])() | |||
|
115 | ||||
|
116 | try: | |||
|
117 | form_result = users_group_form.to_python(request.POST) | |||
|
118 | UsersGroup.update(id, form_result) | |||
|
119 | h.flash(_('updated users group %s') \ | |||
|
120 | % form_result['users_group_name'], | |||
|
121 | category='success') | |||
|
122 | #action_logger(self.rhodecode_user, 'new_user', '', '', self.sa) | |||
|
123 | except formencode.Invalid, errors: | |||
|
124 | e = errors.error_dict or {} | |||
|
125 | ||||
|
126 | perm = Permission.get_by_key('hg.create.repository') | |||
|
127 | e.update({'create_repo_perm': | |||
|
128 | UsersGroupToPerm.has_perm(id, perm)}) | |||
|
129 | ||||
|
130 | return htmlfill.render( | |||
|
131 | render('admin/users_groups/users_group_edit.html'), | |||
|
132 | defaults=errors.value, | |||
|
133 | errors=e, | |||
|
134 | prefix_error=False, | |||
|
135 | encoding="UTF-8") | |||
|
136 | except Exception: | |||
|
137 | log.error(traceback.format_exc()) | |||
|
138 | h.flash(_('error occurred during update of users group %s') \ | |||
|
139 | % request.POST.get('users_group_name'), category='error') | |||
|
140 | ||||
|
141 | return redirect(url('users_groups')) | |||
|
142 | ||||
|
143 | def delete(self, id): | |||
|
144 | """DELETE /users_groups/id: Delete an existing item""" | |||
|
145 | # Forms posted to this method should contain a hidden field: | |||
|
146 | # <input type="hidden" name="_method" value="DELETE" /> | |||
|
147 | # Or using helpers: | |||
|
148 | # h.form(url('users_group', id=ID), | |||
|
149 | # method='delete') | |||
|
150 | # url('users_group', id=ID) | |||
|
151 | ||||
|
152 | try: | |||
|
153 | UsersGroup.delete(id) | |||
|
154 | h.flash(_('successfully deleted users group'), category='success') | |||
|
155 | except UsersGroupsAssignedException, e: | |||
|
156 | h.flash(e, category='error') | |||
|
157 | except Exception: | |||
|
158 | h.flash(_('An error occurred during deletion of users group'), | |||
|
159 | category='error') | |||
|
160 | return redirect(url('users_groups')) | |||
|
161 | ||||
|
162 | def show(self, id, format='html'): | |||
|
163 | """GET /users_groups/id: Show a specific item""" | |||
|
164 | # url('users_group', id=ID) | |||
|
165 | ||||
|
166 | def edit(self, id, format='html'): | |||
|
167 | """GET /users_groups/id/edit: Form to edit an existing item""" | |||
|
168 | # url('edit_users_group', id=ID) | |||
|
169 | ||||
|
170 | c.users_group = self.sa.query(UsersGroup).get(id) | |||
|
171 | if not c.users_group: | |||
|
172 | return redirect(url('users_groups')) | |||
|
173 | ||||
|
174 | c.users_group.permissions = {} | |||
|
175 | c.group_members = [(x.user_id, x.user.username) for x in | |||
|
176 | c.users_group.members] | |||
|
177 | c.available_members = [(x.user_id, x.username) for x in | |||
|
178 | self.sa.query(User).all()] | |||
|
179 | defaults = c.users_group.get_dict() | |||
|
180 | perm = Permission.get_by_key('hg.create.repository') | |||
|
181 | defaults.update({'create_repo_perm': | |||
|
182 | UsersGroupToPerm.has_perm(id, perm)}) | |||
|
183 | return htmlfill.render( | |||
|
184 | render('admin/users_groups/users_group_edit.html'), | |||
|
185 | defaults=defaults, | |||
|
186 | encoding="UTF-8", | |||
|
187 | force_defaults=False | |||
|
188 | ) | |||
|
189 | ||||
|
190 | def update_perm(self, id): | |||
|
191 | """PUT /users_perm/id: Update an existing item""" | |||
|
192 | # url('users_group_perm', id=ID, method='put') | |||
|
193 | ||||
|
194 | grant_perm = request.POST.get('create_repo_perm', False) | |||
|
195 | ||||
|
196 | if grant_perm: | |||
|
197 | perm = Permission.get_by_key('hg.create.none') | |||
|
198 | UsersGroupToPerm.revoke_perm(id, perm) | |||
|
199 | ||||
|
200 | perm = Permission.get_by_key('hg.create.repository') | |||
|
201 | UsersGroupToPerm.grant_perm(id, perm) | |||
|
202 | h.flash(_("Granted 'repository create' permission to user"), | |||
|
203 | category='success') | |||
|
204 | ||||
|
205 | else: | |||
|
206 | perm = Permission.get_by_key('hg.create.repository') | |||
|
207 | UsersGroupToPerm.revoke_perm(id, perm) | |||
|
208 | ||||
|
209 | perm = Permission.get_by_key('hg.create.none') | |||
|
210 | UsersGroupToPerm.grant_perm(id, perm) | |||
|
211 | h.flash(_("Revoked 'repository create' permission to user"), | |||
|
212 | category='success') | |||
|
213 | ||||
|
214 | return redirect(url('edit_users_group', id=id)) |
@@ -0,0 +1,241 b'' | |||||
|
1 | # -*- coding: utf-8 -*- | |||
|
2 | """ | |||
|
3 | rhodecode.controllers.api | |||
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~ | |||
|
5 | ||||
|
6 | JSON RPC controller | |||
|
7 | ||||
|
8 | :created_on: Aug 20, 2011 | |||
|
9 | :author: marcink | |||
|
10 | :copyright: (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com> | |||
|
11 | :license: GPLv3, see COPYING for more details. | |||
|
12 | """ | |||
|
13 | # This program is free software; you can redistribute it and/or | |||
|
14 | # modify it under the terms of the GNU General Public License | |||
|
15 | # as published by the Free Software Foundation; version 2 | |||
|
16 | # of the License or (at your opinion) any later version of the license. | |||
|
17 | # | |||
|
18 | # This program is distributed in the hope that it will be useful, | |||
|
19 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|
20 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
|
21 | # GNU General Public License for more details. | |||
|
22 | # | |||
|
23 | # You should have received a copy of the GNU General Public License | |||
|
24 | # along with this program; if not, write to the Free Software | |||
|
25 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | |||
|
26 | # MA 02110-1301, USA. | |||
|
27 | ||||
|
28 | import inspect | |||
|
29 | import json | |||
|
30 | import logging | |||
|
31 | import types | |||
|
32 | import urllib | |||
|
33 | import traceback | |||
|
34 | from itertools import izip_longest | |||
|
35 | ||||
|
36 | from paste.response import replace_header | |||
|
37 | ||||
|
38 | from pylons.controllers import WSGIController | |||
|
39 | from pylons.controllers.util import Response | |||
|
40 | ||||
|
41 | from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError, \ | |||
|
42 | HTTPBadRequest, HTTPError | |||
|
43 | ||||
|
44 | from rhodecode.model.db import User | |||
|
45 | from rhodecode.lib.auth import AuthUser | |||
|
46 | ||||
|
47 | log = logging.getLogger('JSONRPC') | |||
|
48 | ||||
|
49 | class JSONRPCError(BaseException): | |||
|
50 | ||||
|
51 | def __init__(self, message): | |||
|
52 | self.message = message | |||
|
53 | ||||
|
54 | def __str__(self): | |||
|
55 | return str(self.message) | |||
|
56 | ||||
|
57 | ||||
|
58 | def jsonrpc_error(message, code=None): | |||
|
59 | """Generate a Response object with a JSON-RPC error body""" | |||
|
60 | return Response(body=json.dumps(dict(result=None, | |||
|
61 | error=message))) | |||
|
62 | ||||
|
63 | ||||
|
64 | class JSONRPCController(WSGIController): | |||
|
65 | """ | |||
|
66 | A WSGI-speaking JSON-RPC controller class | |||
|
67 | ||||
|
68 | See the specification: | |||
|
69 | <http://json-rpc.org/wiki/specification>`. | |||
|
70 | ||||
|
71 | Valid controller return values should be json-serializable objects. | |||
|
72 | ||||
|
73 | Sub-classes should catch their exceptions and raise JSONRPCError | |||
|
74 | if they want to pass meaningful errors to the client. | |||
|
75 | ||||
|
76 | """ | |||
|
77 | ||||
|
78 | def _get_method_args(self): | |||
|
79 | """ | |||
|
80 | Return `self._rpc_args` to dispatched controller method | |||
|
81 | chosen by __call__ | |||
|
82 | """ | |||
|
83 | return self._rpc_args | |||
|
84 | ||||
|
85 | def __call__(self, environ, start_response): | |||
|
86 | """ | |||
|
87 | Parse the request body as JSON, look up the method on the | |||
|
88 | controller and if it exists, dispatch to it. | |||
|
89 | """ | |||
|
90 | if 'CONTENT_LENGTH' not in environ: | |||
|
91 | log.debug("No Content-Length") | |||
|
92 | return jsonrpc_error(message="No Content-Length in request") | |||
|
93 | else: | |||
|
94 | length = environ['CONTENT_LENGTH'] or 0 | |||
|
95 | length = int(environ['CONTENT_LENGTH']) | |||
|
96 | log.debug('Content-Length: %s', length) | |||
|
97 | ||||
|
98 | if length == 0: | |||
|
99 | log.debug("Content-Length is 0") | |||
|
100 | return jsonrpc_error(message="Content-Length is 0") | |||
|
101 | ||||
|
102 | raw_body = environ['wsgi.input'].read(length) | |||
|
103 | ||||
|
104 | try: | |||
|
105 | json_body = json.loads(urllib.unquote_plus(raw_body)) | |||
|
106 | except ValueError as e: | |||
|
107 | #catch JSON errors Here | |||
|
108 | return jsonrpc_error(message="JSON parse error ERR:%s RAW:%r" \ | |||
|
109 | % (e, urllib.unquote_plus(raw_body))) | |||
|
110 | ||||
|
111 | #check AUTH based on API KEY | |||
|
112 | try: | |||
|
113 | self._req_api_key = json_body['api_key'] | |||
|
114 | self._req_method = json_body['method'] | |||
|
115 | self._req_params = json_body['args'] | |||
|
116 | log.debug('method: %s, params: %s', | |||
|
117 | self._req_method, | |||
|
118 | self._req_params) | |||
|
119 | except KeyError as e: | |||
|
120 | return jsonrpc_error(message='Incorrect JSON query missing %s' % e) | |||
|
121 | ||||
|
122 | #check if we can find this session using api_key | |||
|
123 | try: | |||
|
124 | u = User.get_by_api_key(self._req_api_key) | |||
|
125 | auth_u = AuthUser(u.user_id, self._req_api_key) | |||
|
126 | except Exception as e: | |||
|
127 | return jsonrpc_error(message='Invalid API KEY') | |||
|
128 | ||||
|
129 | self._error = None | |||
|
130 | try: | |||
|
131 | self._func = self._find_method() | |||
|
132 | except AttributeError, e: | |||
|
133 | return jsonrpc_error(message=str(e)) | |||
|
134 | ||||
|
135 | # now that we have a method, add self._req_params to | |||
|
136 | # self.kargs and dispatch control to WGIController | |||
|
137 | argspec = inspect.getargspec(self._func) | |||
|
138 | arglist = argspec[0][1:] | |||
|
139 | defaults = argspec[3] or [] | |||
|
140 | default_empty = types.NotImplementedType | |||
|
141 | ||||
|
142 | kwarglist = list(izip_longest(reversed(arglist),reversed(defaults), | |||
|
143 | fillvalue=default_empty)) | |||
|
144 | ||||
|
145 | # this is little trick to inject logged in user for | |||
|
146 | # perms decorators to work they expect the controller class to have | |||
|
147 | # rhodecode_user attribute set | |||
|
148 | self.rhodecode_user = auth_u | |||
|
149 | ||||
|
150 | # This attribute will need to be first param of a method that uses | |||
|
151 | # api_key, which is translated to instance of user at that name | |||
|
152 | USER_SESSION_ATTR = 'apiuser' | |||
|
153 | ||||
|
154 | if USER_SESSION_ATTR not in arglist: | |||
|
155 | return jsonrpc_error(message='This method [%s] does not support ' | |||
|
156 | 'authentication (missing %s param)' % | |||
|
157 | (self._func.__name__, USER_SESSION_ATTR)) | |||
|
158 | ||||
|
159 | # get our arglist and check if we provided them as args | |||
|
160 | for arg,default in kwarglist: | |||
|
161 | if arg == USER_SESSION_ATTR: | |||
|
162 | # USER_SESSION_ATTR is something translated from api key and | |||
|
163 | # this is checked before so we don't need validate it | |||
|
164 | continue | |||
|
165 | ||||
|
166 | # skip the required param check if it's default value is | |||
|
167 | # NotImplementedType (default_empty) | |||
|
168 | if not self._req_params or (type(default) == default_empty | |||
|
169 | and arg not in self._req_params): | |||
|
170 | return jsonrpc_error(message=('Missing non optional %s arg ' | |||
|
171 | 'in JSON DATA') % arg) | |||
|
172 | ||||
|
173 | self._rpc_args = {USER_SESSION_ATTR:u} | |||
|
174 | self._rpc_args.update(self._req_params) | |||
|
175 | ||||
|
176 | self._rpc_args['action'] = self._req_method | |||
|
177 | self._rpc_args['environ'] = environ | |||
|
178 | self._rpc_args['start_response'] = start_response | |||
|
179 | ||||
|
180 | status = [] | |||
|
181 | headers = [] | |||
|
182 | exc_info = [] | |||
|
183 | def change_content(new_status, new_headers, new_exc_info=None): | |||
|
184 | status.append(new_status) | |||
|
185 | headers.extend(new_headers) | |||
|
186 | exc_info.append(new_exc_info) | |||
|
187 | ||||
|
188 | output = WSGIController.__call__(self, environ, change_content) | |||
|
189 | output = list(output) | |||
|
190 | headers.append(('Content-Length', str(len(output[0])))) | |||
|
191 | replace_header(headers, 'Content-Type', 'application/json') | |||
|
192 | start_response(status[0], headers, exc_info[0]) | |||
|
193 | ||||
|
194 | return output | |||
|
195 | ||||
|
196 | def _dispatch_call(self): | |||
|
197 | """ | |||
|
198 | Implement dispatch interface specified by WSGIController | |||
|
199 | """ | |||
|
200 | try: | |||
|
201 | raw_response = self._inspect_call(self._func) | |||
|
202 | if isinstance(raw_response, HTTPError): | |||
|
203 | self._error = str(raw_response) | |||
|
204 | except JSONRPCError as e: | |||
|
205 | self._error = str(e) | |||
|
206 | except Exception as e: | |||
|
207 | log.error('Encountered unhandled exception: %s' % traceback.format_exc()) | |||
|
208 | json_exc = JSONRPCError('Internal server error') | |||
|
209 | self._error = str(json_exc) | |||
|
210 | ||||
|
211 | if self._error is not None: | |||
|
212 | raw_response = None | |||
|
213 | ||||
|
214 | response = dict(result=raw_response, error=self._error) | |||
|
215 | ||||
|
216 | try: | |||
|
217 | return json.dumps(response) | |||
|
218 | except TypeError, e: | |||
|
219 | log.debug('Error encoding response: %s', e) | |||
|
220 | return json.dumps(dict(result=None, | |||
|
221 | error="Error encoding response")) | |||
|
222 | ||||
|
223 | def _find_method(self): | |||
|
224 | """ | |||
|
225 | Return method named by `self._req_method` in controller if able | |||
|
226 | """ | |||
|
227 | log.debug('Trying to find JSON-RPC method: %s', self._req_method) | |||
|
228 | if self._req_method.startswith('_'): | |||
|
229 | raise AttributeError("Method not allowed") | |||
|
230 | ||||
|
231 | try: | |||
|
232 | func = getattr(self, self._req_method, None) | |||
|
233 | except UnicodeEncodeError: | |||
|
234 | raise AttributeError("Problem decoding unicode in requested " | |||
|
235 | "method name.") | |||
|
236 | ||||
|
237 | if isinstance(func, types.MethodType): | |||
|
238 | return func | |||
|
239 | else: | |||
|
240 | raise AttributeError("No such method: %s" % self._req_method) | |||
|
241 |
@@ -0,0 +1,98 b'' | |||||
|
1 | import traceback | |||
|
2 | import logging | |||
|
3 | ||||
|
4 | from rhodecode.controllers.api import JSONRPCController, JSONRPCError | |||
|
5 | from rhodecode.lib.auth import HasPermissionAllDecorator | |||
|
6 | from rhodecode.model.scm import ScmModel | |||
|
7 | ||||
|
8 | from rhodecode.model.db import User, UsersGroup, Repository | |||
|
9 | ||||
|
10 | log = logging.getLogger(__name__) | |||
|
11 | ||||
|
12 | ||||
|
13 | class ApiController(JSONRPCController): | |||
|
14 | """ | |||
|
15 | API Controller | |||
|
16 | ||||
|
17 | ||||
|
18 | Each method needs to have USER as argument this is then based on given | |||
|
19 | API_KEY propagated as instance of user object | |||
|
20 | ||||
|
21 | Preferably this should be first argument also | |||
|
22 | ||||
|
23 | ||||
|
24 | Each function should also **raise** JSONRPCError for any | |||
|
25 | errors that happens | |||
|
26 | ||||
|
27 | """ | |||
|
28 | ||||
|
29 | @HasPermissionAllDecorator('hg.admin') | |||
|
30 | def pull(self, apiuser, repo): | |||
|
31 | """ | |||
|
32 | Dispatch pull action on given repo | |||
|
33 | ||||
|
34 | ||||
|
35 | :param user: | |||
|
36 | :param repo: | |||
|
37 | """ | |||
|
38 | ||||
|
39 | if Repository.is_valid(repo) is False: | |||
|
40 | raise JSONRPCError('Unknown repo "%s"' % repo) | |||
|
41 | ||||
|
42 | try: | |||
|
43 | ScmModel().pull_changes(repo, self.rhodecode_user.username) | |||
|
44 | return 'Pulled from %s' % repo | |||
|
45 | except Exception: | |||
|
46 | raise JSONRPCError('Unable to pull changes from "%s"' % repo) | |||
|
47 | ||||
|
48 | ||||
|
49 | @HasPermissionAllDecorator('hg.admin') | |||
|
50 | def create_user(self, apiuser, username, password, active, admin, name, | |||
|
51 | lastname, email): | |||
|
52 | """ | |||
|
53 | Creates new user | |||
|
54 | ||||
|
55 | :param apiuser: | |||
|
56 | :param username: | |||
|
57 | :param password: | |||
|
58 | :param active: | |||
|
59 | :param admin: | |||
|
60 | :param name: | |||
|
61 | :param lastname: | |||
|
62 | :param email: | |||
|
63 | """ | |||
|
64 | ||||
|
65 | form_data = dict(username=username, | |||
|
66 | password=password, | |||
|
67 | active=active, | |||
|
68 | admin=admin, | |||
|
69 | name=name, | |||
|
70 | lastname=lastname, | |||
|
71 | email=email) | |||
|
72 | try: | |||
|
73 | u = User.create(form_data) | |||
|
74 | return {'id':u.user_id, | |||
|
75 | 'msg':'created new user %s' % name} | |||
|
76 | except Exception: | |||
|
77 | log.error(traceback.format_exc()) | |||
|
78 | raise JSONRPCError('failed to create user %s' % name) | |||
|
79 | ||||
|
80 | ||||
|
81 | @HasPermissionAllDecorator('hg.admin') | |||
|
82 | def create_users_group(self, apiuser, name, active): | |||
|
83 | """ | |||
|
84 | Creates an new usergroup | |||
|
85 | ||||
|
86 | :param name: | |||
|
87 | :param active: | |||
|
88 | """ | |||
|
89 | form_data = {'users_group_name':name, | |||
|
90 | 'users_group_active':active} | |||
|
91 | try: | |||
|
92 | ug = UsersGroup.create(form_data) | |||
|
93 | return {'id':ug.users_group_id, | |||
|
94 | 'msg':'created new users group %s' % name} | |||
|
95 | except Exception: | |||
|
96 | log.error(traceback.format_exc()) | |||
|
97 | raise JSONRPCError('failed to create group %s' % name) | |||
|
98 | No newline at end of file |
@@ -0,0 +1,57 b'' | |||||
|
1 | # -*- coding: utf-8 -*- | |||
|
2 | """ | |||
|
3 | rhodecode.controllers.followers | |||
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |||
|
5 | ||||
|
6 | Followers controller for rhodecode | |||
|
7 | ||||
|
8 | :created_on: Apr 23, 2011 | |||
|
9 | :author: marcink | |||
|
10 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |||
|
11 | :license: GPLv3, see COPYING for more details. | |||
|
12 | """ | |||
|
13 | # This program is free software: you can redistribute it and/or modify | |||
|
14 | # it under the terms of the GNU General Public License as published by | |||
|
15 | # the Free Software Foundation, either version 3 of the License, or | |||
|
16 | # (at your option) any later version. | |||
|
17 | # | |||
|
18 | # This program is distributed in the hope that it will be useful, | |||
|
19 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|
20 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
|
21 | # GNU General Public License for more details. | |||
|
22 | # | |||
|
23 | # You should have received a copy of the GNU General Public License | |||
|
24 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
|
25 | import logging | |||
|
26 | ||||
|
27 | from pylons import tmpl_context as c, request | |||
|
28 | ||||
|
29 | from rhodecode.lib.helpers import Page | |||
|
30 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator | |||
|
31 | from rhodecode.lib.base import BaseRepoController, render | |||
|
32 | from rhodecode.model.db import Repository, User, UserFollowing | |||
|
33 | ||||
|
34 | log = logging.getLogger(__name__) | |||
|
35 | ||||
|
36 | ||||
|
37 | class FollowersController(BaseRepoController): | |||
|
38 | ||||
|
39 | @LoginRequired() | |||
|
40 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |||
|
41 | 'repository.admin') | |||
|
42 | def __before__(self): | |||
|
43 | super(FollowersController, self).__before__() | |||
|
44 | ||||
|
45 | def followers(self, repo_name): | |||
|
46 | p = int(request.params.get('page', 1)) | |||
|
47 | repo_id = c.rhodecode_db_repo.repo_id | |||
|
48 | d = UserFollowing.get_repo_followers(repo_id)\ | |||
|
49 | .order_by(UserFollowing.follows_from) | |||
|
50 | c.followers_pager = Page(d, page=p, items_per_page=20) | |||
|
51 | ||||
|
52 | c.followers_data = render('/followers/followers_data.html') | |||
|
53 | ||||
|
54 | if request.environ.get('HTTP_X_PARTIAL_XHR'): | |||
|
55 | return c.followers_data | |||
|
56 | ||||
|
57 | return render('/followers/followers.html') |
@@ -0,0 +1,56 b'' | |||||
|
1 | # -*- coding: utf-8 -*- | |||
|
2 | """ | |||
|
3 | rhodecode.controllers.forks | |||
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |||
|
5 | ||||
|
6 | forks controller for rhodecode | |||
|
7 | ||||
|
8 | :created_on: Apr 23, 2011 | |||
|
9 | :author: marcink | |||
|
10 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |||
|
11 | :license: GPLv3, see COPYING for more details. | |||
|
12 | """ | |||
|
13 | # This program is free software: you can redistribute it and/or modify | |||
|
14 | # it under the terms of the GNU General Public License as published by | |||
|
15 | # the Free Software Foundation, either version 3 of the License, or | |||
|
16 | # (at your option) any later version. | |||
|
17 | # | |||
|
18 | # This program is distributed in the hope that it will be useful, | |||
|
19 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|
20 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
|
21 | # GNU General Public License for more details. | |||
|
22 | # | |||
|
23 | # You should have received a copy of the GNU General Public License | |||
|
24 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
|
25 | import logging | |||
|
26 | ||||
|
27 | from pylons import tmpl_context as c, request | |||
|
28 | ||||
|
29 | from rhodecode.lib.helpers import Page | |||
|
30 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator | |||
|
31 | from rhodecode.lib.base import BaseRepoController, render | |||
|
32 | from rhodecode.model.db import Repository, User, UserFollowing | |||
|
33 | ||||
|
34 | log = logging.getLogger(__name__) | |||
|
35 | ||||
|
36 | ||||
|
37 | class ForksController(BaseRepoController): | |||
|
38 | ||||
|
39 | @LoginRequired() | |||
|
40 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |||
|
41 | 'repository.admin') | |||
|
42 | def __before__(self): | |||
|
43 | super(ForksController, self).__before__() | |||
|
44 | ||||
|
45 | def forks(self, repo_name): | |||
|
46 | p = int(request.params.get('page', 1)) | |||
|
47 | repo_id = c.rhodecode_db_repo.repo_id | |||
|
48 | d = Repository.get_repo_forks(repo_id) | |||
|
49 | c.forks_pager = Page(d, page=p, items_per_page=20) | |||
|
50 | ||||
|
51 | c.forks_data = render('/forks/forks_data.html') | |||
|
52 | ||||
|
53 | if request.environ.get('HTTP_X_PARTIAL_XHR'): | |||
|
54 | return c.forks_data | |||
|
55 | ||||
|
56 | return render('/forks/forks.html') |
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
This diff has been collapsed as it changes many lines, (2530 lines changed) Show them Hide them | |||||
@@ -0,0 +1,2530 b'' | |||||
|
1 | # Portuguese (Brazil) translations for RhodeCode. | |||
|
2 | # Copyright (C) 2011 Augusto Herrmann | |||
|
3 | # This file is distributed under the same license as the RhodeCode project. | |||
|
4 | # Augusto Herrmann <augusto.herrmann@gmail.com>, 2011. | |||
|
5 | # | |||
|
6 | msgid "" | |||
|
7 | msgstr "" | |||
|
8 | "Project-Id-Version: RhodeCode 1.2.0\n" | |||
|
9 | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | |||
|
10 | "POT-Creation-Date: 2011-09-14 15:50-0300\n" | |||
|
11 | "PO-Revision-Date: 2011-09-14 15:53-0300\n" | |||
|
12 | "Last-Translator: Augusto Herrmann <augusto.herrmann@gmail.com>\n" | |||
|
13 | "Language-Team: pt_BR <LL@li.org>\n" | |||
|
14 | "Plural-Forms: nplurals=2; plural=(n > 1)\n" | |||
|
15 | "MIME-Version: 1.0\n" | |||
|
16 | "Content-Type: text/plain; charset=utf-8\n" | |||
|
17 | "Content-Transfer-Encoding: 8bit\n" | |||
|
18 | "Generated-By: Babel 0.9.6\n" | |||
|
19 | ||||
|
20 | #: rhodecode/controllers/changeset.py:108 | |||
|
21 | #: rhodecode/controllers/changeset.py:149 | |||
|
22 | #: rhodecode/controllers/changeset.py:216 | |||
|
23 | #: rhodecode/controllers/changeset.py:229 | |||
|
24 | msgid "binary file" | |||
|
25 | msgstr "arquivo binário" | |||
|
26 | ||||
|
27 | #: rhodecode/controllers/changeset.py:123 | |||
|
28 | #: rhodecode/controllers/changeset.py:168 | |||
|
29 | msgid "Changeset is to big and was cut off, see raw changeset instead" | |||
|
30 | msgstr "Conjunto de mudanças é grande demais e foi cortado, em vez disso veja o conjunto de mudanças bruto" | |||
|
31 | ||||
|
32 | #: rhodecode/controllers/changeset.py:159 | |||
|
33 | msgid "Diff is to big and was cut off, see raw diff instead" | |||
|
34 | msgstr "Diff é grande demais e foi cortado, em vez disso veja diff bruto" | |||
|
35 | ||||
|
36 | #: rhodecode/controllers/error.py:69 | |||
|
37 | msgid "Home page" | |||
|
38 | msgstr "Página inicial" | |||
|
39 | ||||
|
40 | #: rhodecode/controllers/error.py:98 | |||
|
41 | msgid "The request could not be understood by the server due to malformed syntax." | |||
|
42 | msgstr "A requisição não pôde ser compreendida pelo servidor devido à sintaxe mal formada" | |||
|
43 | ||||
|
44 | #: rhodecode/controllers/error.py:101 | |||
|
45 | msgid "Unauthorized access to resource" | |||
|
46 | msgstr "Acesso não autorizado ao recurso" | |||
|
47 | ||||
|
48 | #: rhodecode/controllers/error.py:103 | |||
|
49 | msgid "You don't have permission to view this page" | |||
|
50 | msgstr "Você não tem permissão para ver esta página" | |||
|
51 | ||||
|
52 | #: rhodecode/controllers/error.py:105 | |||
|
53 | msgid "The resource could not be found" | |||
|
54 | msgstr "O recurso não pôde ser encontrado" | |||
|
55 | ||||
|
56 | #: rhodecode/controllers/error.py:107 | |||
|
57 | msgid "The server encountered an unexpected condition which prevented it from fulfilling the request." | |||
|
58 | msgstr "O servidor encontrou uma condição inesperada que o impediu de satisfazer a requisição" | |||
|
59 | ||||
|
60 | #: rhodecode/controllers/feed.py:48 | |||
|
61 | #, python-format | |||
|
62 | msgid "Changes on %s repository" | |||
|
63 | msgstr "Alterações no repositório %s" | |||
|
64 | ||||
|
65 | #: rhodecode/controllers/feed.py:49 | |||
|
66 | #, python-format | |||
|
67 | msgid "%s %s feed" | |||
|
68 | msgstr "%s - feed %s" | |||
|
69 | ||||
|
70 | #: rhodecode/controllers/files.py:72 | |||
|
71 | msgid "There are no files yet" | |||
|
72 | msgstr "Ainda não há arquivos" | |||
|
73 | ||||
|
74 | #: rhodecode/controllers/files.py:262 | |||
|
75 | #, python-format | |||
|
76 | msgid "Edited %s via RhodeCode" | |||
|
77 | msgstr "Editado %s via RhodeCode" | |||
|
78 | ||||
|
79 | #: rhodecode/controllers/files.py:267 | |||
|
80 | #: rhodecode/templates/files/file_diff.html:40 | |||
|
81 | msgid "No changes" | |||
|
82 | msgstr "Sem alterações" | |||
|
83 | ||||
|
84 | #: rhodecode/controllers/files.py:278 | |||
|
85 | #, python-format | |||
|
86 | msgid "Successfully committed to %s" | |||
|
87 | msgstr "Commit realizado com sucesso para %s" | |||
|
88 | ||||
|
89 | #: rhodecode/controllers/files.py:283 | |||
|
90 | msgid "Error occurred during commit" | |||
|
91 | msgstr "Ocorreu um erro ao realizar commit" | |||
|
92 | ||||
|
93 | #: rhodecode/controllers/files.py:308 | |||
|
94 | msgid "downloads disabled" | |||
|
95 | msgstr "downloads desabilitados" | |||
|
96 | ||||
|
97 | #: rhodecode/controllers/files.py:313 | |||
|
98 | #, python-format | |||
|
99 | msgid "Unknown revision %s" | |||
|
100 | msgstr "Revisão desconhecida %s" | |||
|
101 | ||||
|
102 | #: rhodecode/controllers/files.py:315 | |||
|
103 | msgid "Empty repository" | |||
|
104 | msgstr "Repositório vazio" | |||
|
105 | ||||
|
106 | #: rhodecode/controllers/files.py:317 | |||
|
107 | msgid "Unknown archive type" | |||
|
108 | msgstr "Arquivo de tipo desconhecido" | |||
|
109 | ||||
|
110 | #: rhodecode/controllers/files.py:385 | |||
|
111 | #: rhodecode/controllers/files.py:398 | |||
|
112 | msgid "Binary file" | |||
|
113 | msgstr "Arquivo binário" | |||
|
114 | ||||
|
115 | #: rhodecode/controllers/files.py:417 | |||
|
116 | #: rhodecode/templates/changeset/changeset_range.html:4 | |||
|
117 | #: rhodecode/templates/changeset/changeset_range.html:12 | |||
|
118 | #: rhodecode/templates/changeset/changeset_range.html:29 | |||
|
119 | msgid "Changesets" | |||
|
120 | msgstr "Conjuntos de mudanças" | |||
|
121 | ||||
|
122 | #: rhodecode/controllers/files.py:418 | |||
|
123 | #: rhodecode/controllers/summary.py:175 | |||
|
124 | #: rhodecode/templates/branches/branches.html:5 | |||
|
125 | #: rhodecode/templates/summary/summary.html:690 | |||
|
126 | msgid "Branches" | |||
|
127 | msgstr "Ramos" | |||
|
128 | ||||
|
129 | #: rhodecode/controllers/files.py:419 | |||
|
130 | #: rhodecode/controllers/summary.py:176 | |||
|
131 | #: rhodecode/templates/summary/summary.html:679 | |||
|
132 | #: rhodecode/templates/tags/tags.html:5 | |||
|
133 | msgid "Tags" | |||
|
134 | msgstr "Etiquetas" | |||
|
135 | ||||
|
136 | #: rhodecode/controllers/journal.py:50 | |||
|
137 | #, python-format | |||
|
138 | msgid "%s public journal %s feed" | |||
|
139 | msgstr "diário público de %s - feed %s" | |||
|
140 | ||||
|
141 | #: rhodecode/controllers/journal.py:178 | |||
|
142 | #: rhodecode/controllers/journal.py:212 | |||
|
143 | #: rhodecode/templates/admin/repos/repo_edit.html:171 | |||
|
144 | #: rhodecode/templates/base/base.html:50 | |||
|
145 | msgid "Public journal" | |||
|
146 | msgstr "Diário público" | |||
|
147 | ||||
|
148 | #: rhodecode/controllers/login.py:111 | |||
|
149 | msgid "You have successfully registered into rhodecode" | |||
|
150 | msgstr "Você se registrou com sucesso no rhodecode" | |||
|
151 | ||||
|
152 | #: rhodecode/controllers/login.py:133 | |||
|
153 | msgid "Your password reset link was sent" | |||
|
154 | msgstr "Seu link de reinicialização de senha foi enviado" | |||
|
155 | ||||
|
156 | #: rhodecode/controllers/login.py:155 | |||
|
157 | msgid "Your password reset was successful, new password has been sent to your email" | |||
|
158 | msgstr "Sua reinicialização de senha foi bem sucedida, sua senha foi enviada ao seu e-mail" | |||
|
159 | ||||
|
160 | #: rhodecode/controllers/search.py:109 | |||
|
161 | msgid "Invalid search query. Try quoting it." | |||
|
162 | msgstr "Consulta de busca inválida. Tente usar aspas." | |||
|
163 | ||||
|
164 | #: rhodecode/controllers/search.py:114 | |||
|
165 | msgid "There is no index to search in. Please run whoosh indexer" | |||
|
166 | msgstr "Não há índice onde pesquisa. Por favor execute o indexador whoosh" | |||
|
167 | ||||
|
168 | #: rhodecode/controllers/search.py:118 | |||
|
169 | msgid "An error occurred during this search operation" | |||
|
170 | msgstr "Ocorreu um erro durante essa operação de busca" | |||
|
171 | ||||
|
172 | #: rhodecode/controllers/settings.py:61 | |||
|
173 | #: rhodecode/controllers/settings.py:171 | |||
|
174 | #, python-format | |||
|
175 | msgid "%s repository is not mapped to db perhaps it was created or renamed from the file system please run the application again in order to rescan repositories" | |||
|
176 | msgstr "repositório %s não está mapeado ao bd. Talvez ele tenha sido criado ou renomeado a partir do sistema de arquivos. Por favor execute a aplicação outra vez para varrer novamente por repositórios" | |||
|
177 | ||||
|
178 | #: rhodecode/controllers/settings.py:109 | |||
|
179 | #: rhodecode/controllers/admin/repos.py:239 | |||
|
180 | #, python-format | |||
|
181 | msgid "Repository %s updated successfully" | |||
|
182 | msgstr "Repositório %s atualizado com sucesso" | |||
|
183 | ||||
|
184 | #: rhodecode/controllers/settings.py:126 | |||
|
185 | #: rhodecode/controllers/admin/repos.py:257 | |||
|
186 | #, python-format | |||
|
187 | msgid "error occurred during update of repository %s" | |||
|
188 | msgstr "ocorreu um erro ao atualizar o repositório %s" | |||
|
189 | ||||
|
190 | #: rhodecode/controllers/settings.py:144 | |||
|
191 | #: rhodecode/controllers/admin/repos.py:275 | |||
|
192 | #, python-format | |||
|
193 | msgid "%s repository is not mapped to db perhaps it was moved or renamed from the filesystem please run the application again in order to rescan repositories" | |||
|
194 | msgstr "repositório %s não está mapeado ao bd. Talvez ele tenha sido movido ou renomeado a partir do sistema de arquivos. Por favor execute a aplicação outra vez para varrer novamente por repositórios" | |||
|
195 | ||||
|
196 | #: rhodecode/controllers/settings.py:156 | |||
|
197 | #: rhodecode/controllers/admin/repos.py:287 | |||
|
198 | #, python-format | |||
|
199 | msgid "deleted repository %s" | |||
|
200 | msgstr "excluído o repositório %s" | |||
|
201 | ||||
|
202 | #: rhodecode/controllers/settings.py:159 | |||
|
203 | #: rhodecode/controllers/admin/repos.py:297 | |||
|
204 | #: rhodecode/controllers/admin/repos.py:303 | |||
|
205 | #, python-format | |||
|
206 | msgid "An error occurred during deletion of %s" | |||
|
207 | msgstr "Ocorreu um erro durante a exclusão de %s" | |||
|
208 | ||||
|
209 | #: rhodecode/controllers/settings.py:193 | |||
|
210 | #, python-format | |||
|
211 | msgid "forked %s repository as %s" | |||
|
212 | msgstr "bifurcado repositório %s como %s" | |||
|
213 | ||||
|
214 | #: rhodecode/controllers/settings.py:211 | |||
|
215 | #, python-format | |||
|
216 | msgid "An error occurred during repository forking %s" | |||
|
217 | msgstr "Ocorreu um erro ao bifurcar o repositório %s" | |||
|
218 | ||||
|
219 | #: rhodecode/controllers/summary.py:123 | |||
|
220 | msgid "No data loaded yet" | |||
|
221 | msgstr "Ainda não há dados carregados" | |||
|
222 | ||||
|
223 | #: rhodecode/controllers/summary.py:126 | |||
|
224 | msgid "Statistics are disabled for this repository" | |||
|
225 | msgstr "As estatísticas estão desabillitadas para este repositório" | |||
|
226 | ||||
|
227 | #: rhodecode/controllers/admin/ldap_settings.py:49 | |||
|
228 | msgid "BASE" | |||
|
229 | msgstr "BASE" | |||
|
230 | ||||
|
231 | #: rhodecode/controllers/admin/ldap_settings.py:50 | |||
|
232 | msgid "ONELEVEL" | |||
|
233 | msgstr "UMNÍVEL" | |||
|
234 | ||||
|
235 | #: rhodecode/controllers/admin/ldap_settings.py:51 | |||
|
236 | msgid "SUBTREE" | |||
|
237 | msgstr "SUBÁRVORE" | |||
|
238 | ||||
|
239 | #: rhodecode/controllers/admin/ldap_settings.py:55 | |||
|
240 | msgid "NEVER" | |||
|
241 | msgstr "NUNCA" | |||
|
242 | ||||
|
243 | #: rhodecode/controllers/admin/ldap_settings.py:56 | |||
|
244 | msgid "ALLOW" | |||
|
245 | msgstr "PERMITIR" | |||
|
246 | ||||
|
247 | #: rhodecode/controllers/admin/ldap_settings.py:57 | |||
|
248 | msgid "TRY" | |||
|
249 | msgstr "TENTAR" | |||
|
250 | ||||
|
251 | #: rhodecode/controllers/admin/ldap_settings.py:58 | |||
|
252 | msgid "DEMAND" | |||
|
253 | msgstr "EXIGIR" | |||
|
254 | ||||
|
255 | #: rhodecode/controllers/admin/ldap_settings.py:59 | |||
|
256 | msgid "HARD" | |||
|
257 | msgstr "DIFÍCIL" | |||
|
258 | ||||
|
259 | #: rhodecode/controllers/admin/ldap_settings.py:63 | |||
|
260 | msgid "No encryption" | |||
|
261 | msgstr "Sem criptografia" | |||
|
262 | ||||
|
263 | #: rhodecode/controllers/admin/ldap_settings.py:64 | |||
|
264 | msgid "LDAPS connection" | |||
|
265 | msgstr "Conexão LDAPS" | |||
|
266 | ||||
|
267 | #: rhodecode/controllers/admin/ldap_settings.py:65 | |||
|
268 | msgid "START_TLS on LDAP connection" | |||
|
269 | msgstr "START_TLS na conexão LDAP" | |||
|
270 | ||||
|
271 | #: rhodecode/controllers/admin/ldap_settings.py:115 | |||
|
272 | msgid "Ldap settings updated successfully" | |||
|
273 | msgstr "Configurações de LDAP atualizadas com sucesso" | |||
|
274 | ||||
|
275 | #: rhodecode/controllers/admin/ldap_settings.py:120 | |||
|
276 | msgid "Unable to activate ldap. The \"python-ldap\" library is missing." | |||
|
277 | msgstr "Não foi possível ativar LDAP. A biblioteca \"python-ldap\" está faltando." | |||
|
278 | ||||
|
279 | #: rhodecode/controllers/admin/ldap_settings.py:134 | |||
|
280 | msgid "error occurred during update of ldap settings" | |||
|
281 | msgstr "ocorreu um erro ao atualizar as configurações de LDAP" | |||
|
282 | ||||
|
283 | #: rhodecode/controllers/admin/permissions.py:56 | |||
|
284 | msgid "None" | |||
|
285 | msgstr "Nenhum" | |||
|
286 | ||||
|
287 | #: rhodecode/controllers/admin/permissions.py:57 | |||
|
288 | msgid "Read" | |||
|
289 | msgstr "Ler" | |||
|
290 | ||||
|
291 | #: rhodecode/controllers/admin/permissions.py:58 | |||
|
292 | msgid "Write" | |||
|
293 | msgstr "Gravar" | |||
|
294 | ||||
|
295 | #: rhodecode/controllers/admin/permissions.py:59 | |||
|
296 | #: rhodecode/templates/admin/ldap/ldap.html:9 | |||
|
297 | #: rhodecode/templates/admin/permissions/permissions.html:9 | |||
|
298 | #: rhodecode/templates/admin/repos/repo_add.html:9 | |||
|
299 | #: rhodecode/templates/admin/repos/repo_edit.html:9 | |||
|
300 | #: rhodecode/templates/admin/repos/repos.html:10 | |||
|
301 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:8 | |||
|
302 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:8 | |||
|
303 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10 | |||
|
304 | #: rhodecode/templates/admin/settings/hooks.html:9 | |||
|
305 | #: rhodecode/templates/admin/settings/settings.html:9 | |||
|
306 | #: rhodecode/templates/admin/users/user_add.html:8 | |||
|
307 | #: rhodecode/templates/admin/users/user_edit.html:9 | |||
|
308 | #: rhodecode/templates/admin/users/user_edit.html:110 | |||
|
309 | #: rhodecode/templates/admin/users/users.html:9 | |||
|
310 | #: rhodecode/templates/admin/users_groups/users_group_add.html:8 | |||
|
311 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:9 | |||
|
312 | #: rhodecode/templates/admin/users_groups/users_groups.html:9 | |||
|
313 | #: rhodecode/templates/base/base.html:279 | |||
|
314 | #: rhodecode/templates/base/base.html:366 | |||
|
315 | #: rhodecode/templates/base/base.html:368 | |||
|
316 | #: rhodecode/templates/base/base.html:370 | |||
|
317 | msgid "Admin" | |||
|
318 | msgstr "Administrador" | |||
|
319 | ||||
|
320 | #: rhodecode/controllers/admin/permissions.py:62 | |||
|
321 | msgid "disabled" | |||
|
322 | msgstr "desabilitado" | |||
|
323 | ||||
|
324 | #: rhodecode/controllers/admin/permissions.py:64 | |||
|
325 | msgid "allowed with manual account activation" | |||
|
326 | msgstr "permitido com ativação manual de conta" | |||
|
327 | ||||
|
328 | #: rhodecode/controllers/admin/permissions.py:66 | |||
|
329 | msgid "allowed with automatic account activation" | |||
|
330 | msgstr "permitido com ativação automática de conta" | |||
|
331 | ||||
|
332 | #: rhodecode/controllers/admin/permissions.py:68 | |||
|
333 | msgid "Disabled" | |||
|
334 | msgstr "Desabilitado" | |||
|
335 | ||||
|
336 | #: rhodecode/controllers/admin/permissions.py:69 | |||
|
337 | msgid "Enabled" | |||
|
338 | msgstr "Habilitado" | |||
|
339 | ||||
|
340 | #: rhodecode/controllers/admin/permissions.py:102 | |||
|
341 | msgid "Default permissions updated successfully" | |||
|
342 | msgstr "Permissões padrões atualizadas com sucesso" | |||
|
343 | ||||
|
344 | #: rhodecode/controllers/admin/permissions.py:119 | |||
|
345 | msgid "error occurred during update of permissions" | |||
|
346 | msgstr "ocorreu um erro ao atualizar as permissões" | |||
|
347 | ||||
|
348 | #: rhodecode/controllers/admin/repos.py:96 | |||
|
349 | #, python-format | |||
|
350 | msgid "%s repository is not mapped to db perhaps it was created or renamed from the filesystem please run the application again in order to rescan repositories" | |||
|
351 | msgstr "repositório %s não está mapeado ao bd. Talvez ele tenha sido criado ou renomeado a partir do sistema de arquivos. Por favor execute a aplicação outra vez para varrer novamente por repositórios" | |||
|
352 | ||||
|
353 | #: rhodecode/controllers/admin/repos.py:172 | |||
|
354 | #, python-format | |||
|
355 | msgid "created repository %s from %s" | |||
|
356 | msgstr "repositório %s criado a partir de %s" | |||
|
357 | ||||
|
358 | #: rhodecode/controllers/admin/repos.py:176 | |||
|
359 | #, python-format | |||
|
360 | msgid "created repository %s" | |||
|
361 | msgstr "repositório %s criado" | |||
|
362 | ||||
|
363 | #: rhodecode/controllers/admin/repos.py:205 | |||
|
364 | #, python-format | |||
|
365 | msgid "error occurred during creation of repository %s" | |||
|
366 | msgstr "ocorreu um erro ao criar o repositório %s" | |||
|
367 | ||||
|
368 | #: rhodecode/controllers/admin/repos.py:292 | |||
|
369 | #, python-format | |||
|
370 | msgid "Cannot delete %s it still contains attached forks" | |||
|
371 | msgstr "Nao é possível excluir %s pois ele ainda contém bifurcações vinculadas" | |||
|
372 | ||||
|
373 | #: rhodecode/controllers/admin/repos.py:320 | |||
|
374 | msgid "An error occurred during deletion of repository user" | |||
|
375 | msgstr "Ocorreu um erro ao excluir usuário de repositório" | |||
|
376 | ||||
|
377 | #: rhodecode/controllers/admin/repos.py:335 | |||
|
378 | msgid "An error occurred during deletion of repository users groups" | |||
|
379 | msgstr "Ocorreu um erro ao excluir grupo de usuário de repositório" | |||
|
380 | ||||
|
381 | #: rhodecode/controllers/admin/repos.py:352 | |||
|
382 | msgid "An error occurred during deletion of repository stats" | |||
|
383 | msgstr "Ocorreu um erro ao excluir estatísticas de repositório" | |||
|
384 | ||||
|
385 | #: rhodecode/controllers/admin/repos.py:367 | |||
|
386 | msgid "An error occurred during cache invalidation" | |||
|
387 | msgstr "Ocorreu um erro ao invalidar o cache" | |||
|
388 | ||||
|
389 | #: rhodecode/controllers/admin/repos.py:387 | |||
|
390 | msgid "Updated repository visibility in public journal" | |||
|
391 | msgstr "Atualizada a visibilidade do repositório no diário público" | |||
|
392 | ||||
|
393 | #: rhodecode/controllers/admin/repos.py:390 | |||
|
394 | msgid "An error occurred during setting this repository in public journal" | |||
|
395 | msgstr "Ocorreu um erro ao ajustar esse repositório no diário público" | |||
|
396 | ||||
|
397 | #: rhodecode/controllers/admin/repos.py:395 | |||
|
398 | #: rhodecode/model/forms.py:53 | |||
|
399 | msgid "Token mismatch" | |||
|
400 | msgstr "Descompasso de Token" | |||
|
401 | ||||
|
402 | #: rhodecode/controllers/admin/repos.py:408 | |||
|
403 | msgid "Pulled from remote location" | |||
|
404 | msgstr "Realizado pull de localização remota" | |||
|
405 | ||||
|
406 | #: rhodecode/controllers/admin/repos.py:410 | |||
|
407 | msgid "An error occurred during pull from remote location" | |||
|
408 | msgstr "Ocorreu um erro ao realizar pull de localização remota" | |||
|
409 | ||||
|
410 | #: rhodecode/controllers/admin/repos_groups.py:83 | |||
|
411 | #, python-format | |||
|
412 | msgid "created repos group %s" | |||
|
413 | msgstr "criado grupo de repositórios %s" | |||
|
414 | ||||
|
415 | #: rhodecode/controllers/admin/repos_groups.py:96 | |||
|
416 | #, python-format | |||
|
417 | msgid "error occurred during creation of repos group %s" | |||
|
418 | msgstr "ccorreu um erro ao criar grupo de repositório %s" | |||
|
419 | ||||
|
420 | #: rhodecode/controllers/admin/repos_groups.py:130 | |||
|
421 | #, python-format | |||
|
422 | msgid "updated repos group %s" | |||
|
423 | msgstr "atualizado grupo de repositórios %s" | |||
|
424 | ||||
|
425 | #: rhodecode/controllers/admin/repos_groups.py:143 | |||
|
426 | #, python-format | |||
|
427 | msgid "error occurred during update of repos group %s" | |||
|
428 | msgstr "ocorreu um erro ao atualizar grupo de repositórios %s" | |||
|
429 | ||||
|
430 | #: rhodecode/controllers/admin/repos_groups.py:164 | |||
|
431 | #, python-format | |||
|
432 | msgid "This group contains %s repositores and cannot be deleted" | |||
|
433 | msgstr "Esse grupo contém %s repositórios e não pode ser excluído" | |||
|
434 | ||||
|
435 | #: rhodecode/controllers/admin/repos_groups.py:171 | |||
|
436 | #, python-format | |||
|
437 | msgid "removed repos group %s" | |||
|
438 | msgstr "removido grupo de repositórios %s" | |||
|
439 | ||||
|
440 | #: rhodecode/controllers/admin/repos_groups.py:175 | |||
|
441 | #, python-format | |||
|
442 | msgid "error occurred during deletion of repos group %s" | |||
|
443 | msgstr "ccorreu um erro ao excluir grupo de repositórios %s" | |||
|
444 | ||||
|
445 | #: rhodecode/controllers/admin/settings.py:109 | |||
|
446 | #, python-format | |||
|
447 | msgid "Repositories successfully rescanned added: %s,removed: %s" | |||
|
448 | msgstr "Repositórios varridos com sucesso adicionados: %s, removidos: %s" | |||
|
449 | ||||
|
450 | #: rhodecode/controllers/admin/settings.py:118 | |||
|
451 | msgid "Whoosh reindex task scheduled" | |||
|
452 | msgstr "Tarefa de reindexação do whoosh agendada" | |||
|
453 | ||||
|
454 | #: rhodecode/controllers/admin/settings.py:143 | |||
|
455 | msgid "Updated application settings" | |||
|
456 | msgstr "Configurações da aplicação atualizadas" | |||
|
457 | ||||
|
458 | #: rhodecode/controllers/admin/settings.py:148 | |||
|
459 | #: rhodecode/controllers/admin/settings.py:215 | |||
|
460 | msgid "error occurred during updating application settings" | |||
|
461 | msgstr "ocorreu um erro ao atualizar as configurações da aplicação" | |||
|
462 | ||||
|
463 | #: rhodecode/controllers/admin/settings.py:210 | |||
|
464 | msgid "Updated mercurial settings" | |||
|
465 | msgstr "Atualizadas as configurações do mercurial" | |||
|
466 | ||||
|
467 | #: rhodecode/controllers/admin/settings.py:236 | |||
|
468 | msgid "Added new hook" | |||
|
469 | msgstr "Adicionado novo gancho" | |||
|
470 | ||||
|
471 | #: rhodecode/controllers/admin/settings.py:247 | |||
|
472 | msgid "Updated hooks" | |||
|
473 | msgstr "Atualizados os ganchos" | |||
|
474 | ||||
|
475 | #: rhodecode/controllers/admin/settings.py:251 | |||
|
476 | msgid "error occurred during hook creation" | |||
|
477 | msgstr "ocorreu um erro ao criar gancho" | |||
|
478 | ||||
|
479 | #: rhodecode/controllers/admin/settings.py:310 | |||
|
480 | msgid "You can't edit this user since it's crucial for entire application" | |||
|
481 | msgstr "Você não pode editar esse usuário pois ele é crucial para toda a aplicação" | |||
|
482 | ||||
|
483 | #: rhodecode/controllers/admin/settings.py:339 | |||
|
484 | msgid "Your account was updated successfully" | |||
|
485 | msgstr "Sua conta foi atualizada com sucesso" | |||
|
486 | ||||
|
487 | #: rhodecode/controllers/admin/settings.py:359 | |||
|
488 | #: rhodecode/controllers/admin/users.py:130 | |||
|
489 | #, python-format | |||
|
490 | msgid "error occurred during update of user %s" | |||
|
491 | msgstr "ocorreu um erro ao atualizar o usuário %s" | |||
|
492 | ||||
|
493 | #: rhodecode/controllers/admin/users.py:78 | |||
|
494 | #, python-format | |||
|
495 | msgid "created user %s" | |||
|
496 | msgstr "usuário %s criado" | |||
|
497 | ||||
|
498 | #: rhodecode/controllers/admin/users.py:90 | |||
|
499 | #, python-format | |||
|
500 | msgid "error occurred during creation of user %s" | |||
|
501 | msgstr "ocorreu um erro ao criar o usuário %s" | |||
|
502 | ||||
|
503 | #: rhodecode/controllers/admin/users.py:116 | |||
|
504 | msgid "User updated successfully" | |||
|
505 | msgstr "Usuário atualizado com sucesso" | |||
|
506 | ||||
|
507 | #: rhodecode/controllers/admin/users.py:146 | |||
|
508 | msgid "successfully deleted user" | |||
|
509 | msgstr "usuário excluído com sucesso" | |||
|
510 | ||||
|
511 | #: rhodecode/controllers/admin/users.py:150 | |||
|
512 | msgid "An error occurred during deletion of user" | |||
|
513 | msgstr "Ocorreu um erro ao excluir o usuário" | |||
|
514 | ||||
|
515 | #: rhodecode/controllers/admin/users.py:166 | |||
|
516 | msgid "You can't edit this user" | |||
|
517 | msgstr "Você não pode editar esse usuário" | |||
|
518 | ||||
|
519 | #: rhodecode/controllers/admin/users.py:195 | |||
|
520 | #: rhodecode/controllers/admin/users_groups.py:202 | |||
|
521 | msgid "Granted 'repository create' permission to user" | |||
|
522 | msgstr "Concedida permissão de 'criar repositório' ao usuário" | |||
|
523 | ||||
|
524 | #: rhodecode/controllers/admin/users.py:204 | |||
|
525 | #: rhodecode/controllers/admin/users_groups.py:211 | |||
|
526 | msgid "Revoked 'repository create' permission to user" | |||
|
527 | msgstr "Revogada permissão de 'criar repositório' ao usuário" | |||
|
528 | ||||
|
529 | #: rhodecode/controllers/admin/users_groups.py:74 | |||
|
530 | #, python-format | |||
|
531 | msgid "created users group %s" | |||
|
532 | msgstr "criado grupo de usuários %s" | |||
|
533 | ||||
|
534 | #: rhodecode/controllers/admin/users_groups.py:86 | |||
|
535 | #, python-format | |||
|
536 | msgid "error occurred during creation of users group %s" | |||
|
537 | msgstr "ocorreu um erro ao criar o grupo de usuários %s" | |||
|
538 | ||||
|
539 | #: rhodecode/controllers/admin/users_groups.py:119 | |||
|
540 | #, python-format | |||
|
541 | msgid "updated users group %s" | |||
|
542 | msgstr "grupo de usuários %s atualizado" | |||
|
543 | ||||
|
544 | #: rhodecode/controllers/admin/users_groups.py:138 | |||
|
545 | #, python-format | |||
|
546 | msgid "error occurred during update of users group %s" | |||
|
547 | msgstr "ocorreu um erro ao atualizar o grupo de usuários %s" | |||
|
548 | ||||
|
549 | #: rhodecode/controllers/admin/users_groups.py:154 | |||
|
550 | msgid "successfully deleted users group" | |||
|
551 | msgstr "grupo de usuários excluído com sucesso" | |||
|
552 | ||||
|
553 | #: rhodecode/controllers/admin/users_groups.py:158 | |||
|
554 | msgid "An error occurred during deletion of users group" | |||
|
555 | msgstr "Ocorreu um erro ao excluir o grupo de usuários" | |||
|
556 | ||||
|
557 | #: rhodecode/lib/__init__.py:279 | |||
|
558 | msgid "year" | |||
|
559 | msgstr "ano" | |||
|
560 | ||||
|
561 | #: rhodecode/lib/__init__.py:280 | |||
|
562 | msgid "month" | |||
|
563 | msgstr "mês" | |||
|
564 | ||||
|
565 | #: rhodecode/lib/__init__.py:281 | |||
|
566 | msgid "day" | |||
|
567 | msgstr "dia" | |||
|
568 | ||||
|
569 | #: rhodecode/lib/__init__.py:282 | |||
|
570 | msgid "hour" | |||
|
571 | msgstr "hora" | |||
|
572 | ||||
|
573 | #: rhodecode/lib/__init__.py:283 | |||
|
574 | msgid "minute" | |||
|
575 | msgstr "minuto" | |||
|
576 | ||||
|
577 | #: rhodecode/lib/__init__.py:284 | |||
|
578 | msgid "second" | |||
|
579 | msgstr "segundo" | |||
|
580 | ||||
|
581 | #: rhodecode/lib/__init__.py:293 | |||
|
582 | msgid "ago" | |||
|
583 | msgstr "atrás" | |||
|
584 | ||||
|
585 | #: rhodecode/lib/__init__.py:296 | |||
|
586 | msgid "just now" | |||
|
587 | msgstr "agora há pouco" | |||
|
588 | ||||
|
589 | #: rhodecode/lib/auth.py:377 | |||
|
590 | msgid "You need to be a registered user to perform this action" | |||
|
591 | msgstr "Você precisa ser um usuário registrado para realizar essa ação" | |||
|
592 | ||||
|
593 | #: rhodecode/lib/auth.py:421 | |||
|
594 | msgid "You need to be a signed in to view this page" | |||
|
595 | msgstr "Você precisa estar logado para ver essa página" | |||
|
596 | ||||
|
597 | #: rhodecode/lib/helpers.py:307 | |||
|
598 | msgid "True" | |||
|
599 | msgstr "Verdadeiro" | |||
|
600 | ||||
|
601 | #: rhodecode/lib/helpers.py:311 | |||
|
602 | msgid "False" | |||
|
603 | msgstr "Falso" | |||
|
604 | ||||
|
605 | #: rhodecode/lib/helpers.py:352 | |||
|
606 | #, python-format | |||
|
607 | msgid "Show all combined changesets %s->%s" | |||
|
608 | msgstr "Ver todos os conjuntos de mudanças combinados %s->%s" | |||
|
609 | ||||
|
610 | #: rhodecode/lib/helpers.py:356 | |||
|
611 | msgid "compare view" | |||
|
612 | msgstr "comparar exibir" | |||
|
613 | ||||
|
614 | #: rhodecode/lib/helpers.py:365 | |||
|
615 | msgid "and" | |||
|
616 | msgstr "e" | |||
|
617 | ||||
|
618 | #: rhodecode/lib/helpers.py:365 | |||
|
619 | #, python-format | |||
|
620 | msgid "%s more" | |||
|
621 | msgstr "%s mais" | |||
|
622 | ||||
|
623 | #: rhodecode/lib/helpers.py:367 | |||
|
624 | #: rhodecode/templates/changelog/changelog.html:14 | |||
|
625 | #: rhodecode/templates/changelog/changelog.html:39 | |||
|
626 | msgid "revisions" | |||
|
627 | msgstr "revisões" | |||
|
628 | ||||
|
629 | #: rhodecode/lib/helpers.py:385 | |||
|
630 | msgid "fork name " | |||
|
631 | msgstr "nome da bifurcação" | |||
|
632 | ||||
|
633 | #: rhodecode/lib/helpers.py:388 | |||
|
634 | msgid "[deleted] repository" | |||
|
635 | msgstr "repositório [excluído]" | |||
|
636 | ||||
|
637 | #: rhodecode/lib/helpers.py:389 | |||
|
638 | #: rhodecode/lib/helpers.py:393 | |||
|
639 | msgid "[created] repository" | |||
|
640 | msgstr "repositório [criado]" | |||
|
641 | ||||
|
642 | #: rhodecode/lib/helpers.py:390 | |||
|
643 | #: rhodecode/lib/helpers.py:394 | |||
|
644 | msgid "[forked] repository" | |||
|
645 | msgstr "repositório [bifurcado]" | |||
|
646 | ||||
|
647 | #: rhodecode/lib/helpers.py:391 | |||
|
648 | #: rhodecode/lib/helpers.py:395 | |||
|
649 | msgid "[updated] repository" | |||
|
650 | msgstr "repositório [atualizado]" | |||
|
651 | ||||
|
652 | #: rhodecode/lib/helpers.py:392 | |||
|
653 | msgid "[delete] repository" | |||
|
654 | msgstr "[excluir] repositório" | |||
|
655 | ||||
|
656 | #: rhodecode/lib/helpers.py:396 | |||
|
657 | msgid "[pushed] into" | |||
|
658 | msgstr "[realizado push] para" | |||
|
659 | ||||
|
660 | #: rhodecode/lib/helpers.py:397 | |||
|
661 | msgid "[committed via RhodeCode] into" | |||
|
662 | msgstr "[realizado commit via RhodeCode] para" | |||
|
663 | ||||
|
664 | #: rhodecode/lib/helpers.py:398 | |||
|
665 | msgid "[pulled from remote] into" | |||
|
666 | msgstr "[realizado pull remoto] para" | |||
|
667 | ||||
|
668 | #: rhodecode/lib/helpers.py:399 | |||
|
669 | msgid "[pulled] from" | |||
|
670 | msgstr "[realizado pull] a partir de" | |||
|
671 | ||||
|
672 | #: rhodecode/lib/helpers.py:400 | |||
|
673 | msgid "[started following] repository" | |||
|
674 | msgstr "[passou a seguir] o repositório" | |||
|
675 | ||||
|
676 | #: rhodecode/lib/helpers.py:401 | |||
|
677 | msgid "[stopped following] repository" | |||
|
678 | msgstr "[parou de seguir] o repositório" | |||
|
679 | ||||
|
680 | #: rhodecode/lib/helpers.py:577 | |||
|
681 | #, python-format | |||
|
682 | msgid " and %s more" | |||
|
683 | msgstr " e mais %s" | |||
|
684 | ||||
|
685 | #: rhodecode/lib/helpers.py:581 | |||
|
686 | msgid "No Files" | |||
|
687 | msgstr "Nenhum Arquivo" | |||
|
688 | ||||
|
689 | #: rhodecode/model/forms.py:66 | |||
|
690 | msgid "Invalid username" | |||
|
691 | msgstr "Nome de usuário inválido" | |||
|
692 | ||||
|
693 | #: rhodecode/model/forms.py:75 | |||
|
694 | msgid "This username already exists" | |||
|
695 | msgstr "Esse nome de usuário já existe" | |||
|
696 | ||||
|
697 | #: rhodecode/model/forms.py:79 | |||
|
698 | msgid "Username may only contain alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character" | |||
|
699 | msgstr "Nome de usuário pode conter somente caracteres alfanuméricos, sublinha, pontos e hífens e deve iniciar com caractere alfanumérico" | |||
|
700 | ||||
|
701 | #: rhodecode/model/forms.py:94 | |||
|
702 | msgid "Invalid group name" | |||
|
703 | msgstr "Nome de grupo inválido" | |||
|
704 | ||||
|
705 | #: rhodecode/model/forms.py:104 | |||
|
706 | msgid "This users group already exists" | |||
|
707 | msgstr "Esse grupo de usuários já existe" | |||
|
708 | ||||
|
709 | #: rhodecode/model/forms.py:110 | |||
|
710 | msgid "Group name may only contain alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character" | |||
|
711 | msgstr "Nome de grupo pode conter somente caracteres alfanuméricos, sublinha, pontos e hífens e deve iniciar com caractere alfanumérico" | |||
|
712 | ||||
|
713 | #: rhodecode/model/forms.py:132 | |||
|
714 | msgid "Cannot assign this group as parent" | |||
|
715 | msgstr "Não é possível associar esse grupo como progenitor" | |||
|
716 | ||||
|
717 | #: rhodecode/model/forms.py:148 | |||
|
718 | msgid "This group already exists" | |||
|
719 | msgstr "Esse grupo já existe" | |||
|
720 | ||||
|
721 | #: rhodecode/model/forms.py:164 | |||
|
722 | #: rhodecode/model/forms.py:172 | |||
|
723 | #: rhodecode/model/forms.py:180 | |||
|
724 | msgid "Invalid characters in password" | |||
|
725 | msgstr "Caracteres inválidos na senha" | |||
|
726 | ||||
|
727 | #: rhodecode/model/forms.py:191 | |||
|
728 | msgid "Passwords do not match" | |||
|
729 | msgstr "Senhas não conferem" | |||
|
730 | ||||
|
731 | #: rhodecode/model/forms.py:196 | |||
|
732 | msgid "invalid password" | |||
|
733 | msgstr "senha inválida" | |||
|
734 | ||||
|
735 | #: rhodecode/model/forms.py:197 | |||
|
736 | msgid "invalid user name" | |||
|
737 | msgstr "nome de usuário inválido" | |||
|
738 | ||||
|
739 | #: rhodecode/model/forms.py:198 | |||
|
740 | msgid "Your account is disabled" | |||
|
741 | msgstr "Sua conta está desabilitada" | |||
|
742 | ||||
|
743 | #: rhodecode/model/forms.py:233 | |||
|
744 | msgid "This username is not valid" | |||
|
745 | msgstr "Esse nome de usuário não é válido" | |||
|
746 | ||||
|
747 | #: rhodecode/model/forms.py:245 | |||
|
748 | msgid "This repository name is disallowed" | |||
|
749 | msgstr "Esse nome de repositório não é permitido" | |||
|
750 | ||||
|
751 | #: rhodecode/model/forms.py:266 | |||
|
752 | #, python-format | |||
|
753 | msgid "This repository already exists in group \"%s\"" | |||
|
754 | msgstr "Esse repositório já existe no grupo \"%s\"" | |||
|
755 | ||||
|
756 | #: rhodecode/model/forms.py:274 | |||
|
757 | msgid "This repository already exists" | |||
|
758 | msgstr "Esse repositório já existe" | |||
|
759 | ||||
|
760 | #: rhodecode/model/forms.py:312 | |||
|
761 | #: rhodecode/model/forms.py:319 | |||
|
762 | msgid "invalid clone url" | |||
|
763 | msgstr "URL de clonagem inválida" | |||
|
764 | ||||
|
765 | #: rhodecode/model/forms.py:322 | |||
|
766 | msgid "Invalid clone url, provide a valid clone http\\s url" | |||
|
767 | msgstr "URL de clonagem inválida, forneça uma URL válida de clonagem http\\s" | |||
|
768 | ||||
|
769 | #: rhodecode/model/forms.py:334 | |||
|
770 | msgid "Fork have to be the same type as original" | |||
|
771 | msgstr "Bifurcação precisa ser do mesmo tipo que o original" | |||
|
772 | ||||
|
773 | #: rhodecode/model/forms.py:341 | |||
|
774 | msgid "This username or users group name is not valid" | |||
|
775 | msgstr "Esse nome de usuário ou nome de grupo de usuários não é válido" | |||
|
776 | ||||
|
777 | #: rhodecode/model/forms.py:403 | |||
|
778 | msgid "This is not a valid path" | |||
|
779 | msgstr "Esse não é um caminho válido" | |||
|
780 | ||||
|
781 | #: rhodecode/model/forms.py:416 | |||
|
782 | msgid "This e-mail address is already taken" | |||
|
783 | msgstr "Esse endereço de e-mail já está tomado" | |||
|
784 | ||||
|
785 | #: rhodecode/model/forms.py:427 | |||
|
786 | msgid "This e-mail address doesn't exist." | |||
|
787 | msgstr "Esse endereço de e-mail não existe." | |||
|
788 | ||||
|
789 | #: rhodecode/model/forms.py:447 | |||
|
790 | msgid "The LDAP Login attribute of the CN must be specified - this is the name of the attribute that is equivalent to 'username'" | |||
|
791 | msgstr "O atributo de login LDAP do CN deve ser especificado - isto é o nome do atributo que é equivalente ao 'nome de usuário'" | |||
|
792 | ||||
|
793 | #: rhodecode/model/forms.py:466 | |||
|
794 | msgid "Please enter a login" | |||
|
795 | msgstr "Por favor entre um login" | |||
|
796 | ||||
|
797 | #: rhodecode/model/forms.py:467 | |||
|
798 | #, python-format | |||
|
799 | msgid "Enter a value %(min)i characters long or more" | |||
|
800 | msgstr "Entre um valor com %(min)i caracteres ou mais" | |||
|
801 | ||||
|
802 | #: rhodecode/model/forms.py:475 | |||
|
803 | msgid "Please enter a password" | |||
|
804 | msgstr "Por favor entre com uma senha" | |||
|
805 | ||||
|
806 | #: rhodecode/model/forms.py:476 | |||
|
807 | #, python-format | |||
|
808 | msgid "Enter %(min)i characters or more" | |||
|
809 | msgstr "Entre com %(min)i caracteres ou mais" | |||
|
810 | ||||
|
811 | #: rhodecode/model/user.py:145 | |||
|
812 | msgid "[RhodeCode] New User registration" | |||
|
813 | msgstr "[RhodeCode] Registro de Novo Usuário" | |||
|
814 | ||||
|
815 | #: rhodecode/model/user.py:157 | |||
|
816 | #: rhodecode/model/user.py:179 | |||
|
817 | msgid "You can't Edit this user since it's crucial for entire application" | |||
|
818 | msgstr "Você não pode Editar esse usuário, pois ele é crucial para toda a aplicação" | |||
|
819 | ||||
|
820 | #: rhodecode/model/user.py:201 | |||
|
821 | msgid "You can't remove this user since it's crucial for entire application" | |||
|
822 | msgstr "Você não pode remover esse usuário, pois ele é crucial para toda a aplicação" | |||
|
823 | ||||
|
824 | #: rhodecode/model/user.py:204 | |||
|
825 | #, python-format | |||
|
826 | msgid "This user still owns %s repositories and cannot be removed. Switch owners or remove those repositories" | |||
|
827 | msgstr "Esse usuário ainda é dono de %s repositórios e não pode ser removido. Troque os donos ou remova esses repositórios" | |||
|
828 | ||||
|
829 | #: rhodecode/templates/index.html:4 | |||
|
830 | msgid "Dashboard" | |||
|
831 | msgstr "Painel de Controle" | |||
|
832 | ||||
|
833 | #: rhodecode/templates/index_base.html:22 | |||
|
834 | #: rhodecode/templates/admin/users/user_edit_my_account.html:102 | |||
|
835 | msgid "quick filter..." | |||
|
836 | msgstr "filtro rápido..." | |||
|
837 | ||||
|
838 | #: rhodecode/templates/index_base.html:23 | |||
|
839 | #: rhodecode/templates/base/base.html:300 | |||
|
840 | msgid "repositories" | |||
|
841 | msgstr "repositórios" | |||
|
842 | ||||
|
843 | #: rhodecode/templates/index_base.html:29 | |||
|
844 | #: rhodecode/templates/admin/repos/repos.html:22 | |||
|
845 | msgid "ADD NEW REPOSITORY" | |||
|
846 | msgstr "ADICIONAR NOVO REPOSITÓRIO" | |||
|
847 | ||||
|
848 | #: rhodecode/templates/index_base.html:41 | |||
|
849 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32 | |||
|
850 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32 | |||
|
851 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33 | |||
|
852 | #: rhodecode/templates/admin/users_groups/users_group_add.html:32 | |||
|
853 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:33 | |||
|
854 | msgid "Group name" | |||
|
855 | msgstr "Nome do grupo" | |||
|
856 | ||||
|
857 | #: rhodecode/templates/index_base.html:42 | |||
|
858 | #: rhodecode/templates/index_base.html:73 | |||
|
859 | #: rhodecode/templates/admin/repos/repo_add_base.html:44 | |||
|
860 | #: rhodecode/templates/admin/repos/repo_edit.html:64 | |||
|
861 | #: rhodecode/templates/admin/repos/repos.html:31 | |||
|
862 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41 | |||
|
863 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41 | |||
|
864 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34 | |||
|
865 | #: rhodecode/templates/settings/repo_fork.html:40 | |||
|
866 | #: rhodecode/templates/settings/repo_settings.html:40 | |||
|
867 | #: rhodecode/templates/summary/summary.html:92 | |||
|
868 | msgid "Description" | |||
|
869 | msgstr "Descrição" | |||
|
870 | ||||
|
871 | #: rhodecode/templates/index_base.html:53 | |||
|
872 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 | |||
|
873 | msgid "Repositories group" | |||
|
874 | msgstr "Grupo de repositórios" | |||
|
875 | ||||
|
876 | #: rhodecode/templates/index_base.html:72 | |||
|
877 | #: rhodecode/templates/admin/repos/repo_add_base.html:9 | |||
|
878 | #: rhodecode/templates/admin/repos/repo_edit.html:32 | |||
|
879 | #: rhodecode/templates/admin/repos/repos.html:30 | |||
|
880 | #: rhodecode/templates/admin/users/user_edit_my_account.html:117 | |||
|
881 | #: rhodecode/templates/files/files_browser.html:157 | |||
|
882 | #: rhodecode/templates/settings/repo_settings.html:31 | |||
|
883 | #: rhodecode/templates/summary/summary.html:31 | |||
|
884 | #: rhodecode/templates/summary/summary.html:107 | |||
|
885 | msgid "Name" | |||
|
886 | msgstr "Nome" | |||
|
887 | ||||
|
888 | #: rhodecode/templates/index_base.html:74 | |||
|
889 | #: rhodecode/templates/admin/repos/repos.html:32 | |||
|
890 | #: rhodecode/templates/summary/summary.html:114 | |||
|
891 | msgid "Last change" | |||
|
892 | msgstr "Última alteração" | |||
|
893 | ||||
|
894 | #: rhodecode/templates/index_base.html:75 | |||
|
895 | #: rhodecode/templates/admin/repos/repos.html:33 | |||
|
896 | msgid "Tip" | |||
|
897 | msgstr "Ponta" | |||
|
898 | ||||
|
899 | #: rhodecode/templates/index_base.html:76 | |||
|
900 | #: rhodecode/templates/admin/repos/repo_edit.html:97 | |||
|
901 | msgid "Owner" | |||
|
902 | msgstr "Dono" | |||
|
903 | ||||
|
904 | #: rhodecode/templates/index_base.html:77 | |||
|
905 | #: rhodecode/templates/journal/public_journal.html:20 | |||
|
906 | #: rhodecode/templates/summary/summary.html:180 | |||
|
907 | #: rhodecode/templates/summary/summary.html:183 | |||
|
908 | msgid "RSS" | |||
|
909 | msgstr "RSS" | |||
|
910 | ||||
|
911 | #: rhodecode/templates/index_base.html:78 | |||
|
912 | #: rhodecode/templates/journal/public_journal.html:23 | |||
|
913 | #: rhodecode/templates/summary/summary.html:181 | |||
|
914 | #: rhodecode/templates/summary/summary.html:184 | |||
|
915 | msgid "Atom" | |||
|
916 | msgstr "Atom" | |||
|
917 | ||||
|
918 | #: rhodecode/templates/index_base.html:87 | |||
|
919 | #: rhodecode/templates/index_base.html:89 | |||
|
920 | #: rhodecode/templates/index_base.html:91 | |||
|
921 | #: rhodecode/templates/base/base.html:209 | |||
|
922 | #: rhodecode/templates/base/base.html:211 | |||
|
923 | #: rhodecode/templates/base/base.html:213 | |||
|
924 | #: rhodecode/templates/summary/summary.html:4 | |||
|
925 | msgid "Summary" | |||
|
926 | msgstr "Sumário" | |||
|
927 | ||||
|
928 | #: rhodecode/templates/index_base.html:95 | |||
|
929 | #: rhodecode/templates/index_base.html:97 | |||
|
930 | #: rhodecode/templates/index_base.html:99 | |||
|
931 | #: rhodecode/templates/base/base.html:225 | |||
|
932 | #: rhodecode/templates/base/base.html:227 | |||
|
933 | #: rhodecode/templates/base/base.html:229 | |||
|
934 | #: rhodecode/templates/changelog/changelog.html:6 | |||
|
935 | #: rhodecode/templates/changelog/changelog.html:14 | |||
|
936 | msgid "Changelog" | |||
|
937 | msgstr "Registro de alterações" | |||
|
938 | ||||
|
939 | #: rhodecode/templates/index_base.html:103 | |||
|
940 | #: rhodecode/templates/index_base.html:105 | |||
|
941 | #: rhodecode/templates/index_base.html:107 | |||
|
942 | #: rhodecode/templates/base/base.html:268 | |||
|
943 | #: rhodecode/templates/base/base.html:270 | |||
|
944 | #: rhodecode/templates/base/base.html:272 | |||
|
945 | #: rhodecode/templates/files/files.html:4 | |||
|
946 | msgid "Files" | |||
|
947 | msgstr "Arquivos" | |||
|
948 | ||||
|
949 | #: rhodecode/templates/index_base.html:116 | |||
|
950 | #: rhodecode/templates/admin/repos/repos.html:42 | |||
|
951 | #: rhodecode/templates/admin/users/user_edit_my_account.html:127 | |||
|
952 | #: rhodecode/templates/summary/summary.html:48 | |||
|
953 | msgid "Mercurial repository" | |||
|
954 | msgstr "Repositório Mercurial" | |||
|
955 | ||||
|
956 | #: rhodecode/templates/index_base.html:118 | |||
|
957 | #: rhodecode/templates/admin/repos/repos.html:44 | |||
|
958 | #: rhodecode/templates/admin/users/user_edit_my_account.html:129 | |||
|
959 | #: rhodecode/templates/summary/summary.html:51 | |||
|
960 | msgid "Git repository" | |||
|
961 | msgstr "Repositório Git" | |||
|
962 | ||||
|
963 | #: rhodecode/templates/index_base.html:123 | |||
|
964 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 | |||
|
965 | #: rhodecode/templates/journal/journal.html:53 | |||
|
966 | #: rhodecode/templates/summary/summary.html:56 | |||
|
967 | msgid "private repository" | |||
|
968 | msgstr "repositório privado" | |||
|
969 | ||||
|
970 | #: rhodecode/templates/index_base.html:125 | |||
|
971 | #: rhodecode/templates/journal/journal.html:55 | |||
|
972 | #: rhodecode/templates/summary/summary.html:58 | |||
|
973 | msgid "public repository" | |||
|
974 | msgstr "repositório público" | |||
|
975 | ||||
|
976 | #: rhodecode/templates/index_base.html:133 | |||
|
977 | #: rhodecode/templates/base/base.html:291 | |||
|
978 | #: rhodecode/templates/settings/repo_fork.html:13 | |||
|
979 | msgid "fork" | |||
|
980 | msgstr "bifurcação" | |||
|
981 | ||||
|
982 | #: rhodecode/templates/index_base.html:134 | |||
|
983 | #: rhodecode/templates/admin/repos/repos.html:60 | |||
|
984 | #: rhodecode/templates/admin/users/user_edit_my_account.html:143 | |||
|
985 | #: rhodecode/templates/summary/summary.html:69 | |||
|
986 | #: rhodecode/templates/summary/summary.html:71 | |||
|
987 | msgid "Fork of" | |||
|
988 | msgstr "Bifurcação de" | |||
|
989 | ||||
|
990 | #: rhodecode/templates/index_base.html:155 | |||
|
991 | #: rhodecode/templates/admin/repos/repos.html:73 | |||
|
992 | msgid "No changesets yet" | |||
|
993 | msgstr "Ainda não há conjuntos de mudanças" | |||
|
994 | ||||
|
995 | #: rhodecode/templates/index_base.html:161 | |||
|
996 | #: rhodecode/templates/index_base.html:163 | |||
|
997 | #, python-format | |||
|
998 | msgid "Subscribe to %s rss feed" | |||
|
999 | msgstr "Assinar o feed rss de %s" | |||
|
1000 | ||||
|
1001 | #: rhodecode/templates/index_base.html:168 | |||
|
1002 | #: rhodecode/templates/index_base.html:170 | |||
|
1003 | #, python-format | |||
|
1004 | msgid "Subscribe to %s atom feed" | |||
|
1005 | msgstr "Assinar o feed atom de %s" | |||
|
1006 | ||||
|
1007 | #: rhodecode/templates/login.html:5 | |||
|
1008 | #: rhodecode/templates/login.html:54 | |||
|
1009 | #: rhodecode/templates/base/base.html:38 | |||
|
1010 | msgid "Sign In" | |||
|
1011 | msgstr "Entrar" | |||
|
1012 | ||||
|
1013 | #: rhodecode/templates/login.html:21 | |||
|
1014 | msgid "Sign In to" | |||
|
1015 | msgstr "Entrar em" | |||
|
1016 | ||||
|
1017 | #: rhodecode/templates/login.html:31 | |||
|
1018 | #: rhodecode/templates/register.html:20 | |||
|
1019 | #: rhodecode/templates/admin/admin_log.html:5 | |||
|
1020 | #: rhodecode/templates/admin/users/user_add.html:32 | |||
|
1021 | #: rhodecode/templates/admin/users/user_edit.html:47 | |||
|
1022 | #: rhodecode/templates/admin/users/user_edit_my_account.html:45 | |||
|
1023 | #: rhodecode/templates/base/base.html:15 | |||
|
1024 | #: rhodecode/templates/summary/summary.html:106 | |||
|
1025 | msgid "Username" | |||
|
1026 | msgstr "Nome de usuário" | |||
|
1027 | ||||
|
1028 | #: rhodecode/templates/login.html:40 | |||
|
1029 | #: rhodecode/templates/register.html:29 | |||
|
1030 | #: rhodecode/templates/admin/ldap/ldap.html:46 | |||
|
1031 | #: rhodecode/templates/admin/users/user_add.html:41 | |||
|
1032 | #: rhodecode/templates/base/base.html:24 | |||
|
1033 | msgid "Password" | |||
|
1034 | msgstr "Senha" | |||
|
1035 | ||||
|
1036 | #: rhodecode/templates/login.html:60 | |||
|
1037 | msgid "Forgot your password ?" | |||
|
1038 | msgstr "Esqueceu sua senha ?" | |||
|
1039 | ||||
|
1040 | #: rhodecode/templates/login.html:63 | |||
|
1041 | #: rhodecode/templates/base/base.html:35 | |||
|
1042 | msgid "Don't have an account ?" | |||
|
1043 | msgstr "Não possui uma conta ?" | |||
|
1044 | ||||
|
1045 | #: rhodecode/templates/password_reset.html:5 | |||
|
1046 | msgid "Reset your password" | |||
|
1047 | msgstr "Reinicializar sua senha" | |||
|
1048 | ||||
|
1049 | #: rhodecode/templates/password_reset.html:11 | |||
|
1050 | msgid "Reset your password to" | |||
|
1051 | msgstr "Reinicializar sua senha para" | |||
|
1052 | ||||
|
1053 | #: rhodecode/templates/password_reset.html:21 | |||
|
1054 | msgid "Email address" | |||
|
1055 | msgstr "Endereço de e-mail" | |||
|
1056 | ||||
|
1057 | #: rhodecode/templates/password_reset.html:30 | |||
|
1058 | msgid "Reset my password" | |||
|
1059 | msgstr "Reinicializar minha senha" | |||
|
1060 | ||||
|
1061 | #: rhodecode/templates/password_reset.html:31 | |||
|
1062 | msgid "Password reset link will be send to matching email address" | |||
|
1063 | msgstr "Link de reinicialização de senha será enviado ao endereço de e-mail correspondente" | |||
|
1064 | ||||
|
1065 | #: rhodecode/templates/register.html:5 | |||
|
1066 | #: rhodecode/templates/register.html:74 | |||
|
1067 | msgid "Sign Up" | |||
|
1068 | msgstr "Inscrever-se" | |||
|
1069 | ||||
|
1070 | #: rhodecode/templates/register.html:11 | |||
|
1071 | msgid "Sign Up to" | |||
|
1072 | msgstr "Inscrever-se em" | |||
|
1073 | ||||
|
1074 | #: rhodecode/templates/register.html:38 | |||
|
1075 | msgid "Re-enter password" | |||
|
1076 | msgstr "Repita a senha" | |||
|
1077 | ||||
|
1078 | #: rhodecode/templates/register.html:47 | |||
|
1079 | #: rhodecode/templates/admin/users/user_add.html:50 | |||
|
1080 | #: rhodecode/templates/admin/users/user_edit.html:74 | |||
|
1081 | #: rhodecode/templates/admin/users/user_edit_my_account.html:63 | |||
|
1082 | msgid "First Name" | |||
|
1083 | msgstr "Primeiro Nome" | |||
|
1084 | ||||
|
1085 | #: rhodecode/templates/register.html:56 | |||
|
1086 | #: rhodecode/templates/admin/users/user_add.html:59 | |||
|
1087 | #: rhodecode/templates/admin/users/user_edit.html:83 | |||
|
1088 | #: rhodecode/templates/admin/users/user_edit_my_account.html:72 | |||
|
1089 | msgid "Last Name" | |||
|
1090 | msgstr "Último Nome" | |||
|
1091 | ||||
|
1092 | #: rhodecode/templates/register.html:65 | |||
|
1093 | #: rhodecode/templates/admin/users/user_add.html:68 | |||
|
1094 | #: rhodecode/templates/admin/users/user_edit.html:92 | |||
|
1095 | #: rhodecode/templates/admin/users/user_edit_my_account.html:81 | |||
|
1096 | #: rhodecode/templates/summary/summary.html:108 | |||
|
1097 | msgid "Email" | |||
|
1098 | msgstr "E-mail" | |||
|
1099 | ||||
|
1100 | #: rhodecode/templates/register.html:76 | |||
|
1101 | msgid "Your account will be activated right after registration" | |||
|
1102 | msgstr "Sua conta será ativada logo após o registro ser concluído" | |||
|
1103 | ||||
|
1104 | #: rhodecode/templates/register.html:78 | |||
|
1105 | msgid "Your account must wait for activation by administrator" | |||
|
1106 | msgstr "Sua conta precisa esperar ativação por um administrador" | |||
|
1107 | ||||
|
1108 | #: rhodecode/templates/repo_switcher_list.html:14 | |||
|
1109 | msgid "Private repository" | |||
|
1110 | msgstr "Repositório privado" | |||
|
1111 | ||||
|
1112 | #: rhodecode/templates/repo_switcher_list.html:19 | |||
|
1113 | msgid "Public repository" | |||
|
1114 | msgstr "Repositório público" | |||
|
1115 | ||||
|
1116 | #: rhodecode/templates/admin/admin.html:5 | |||
|
1117 | #: rhodecode/templates/admin/admin.html:9 | |||
|
1118 | msgid "Admin journal" | |||
|
1119 | msgstr "Diário do administrador" | |||
|
1120 | ||||
|
1121 | #: rhodecode/templates/admin/admin_log.html:6 | |||
|
1122 | msgid "Action" | |||
|
1123 | msgstr "Ação" | |||
|
1124 | ||||
|
1125 | #: rhodecode/templates/admin/admin_log.html:7 | |||
|
1126 | msgid "Repository" | |||
|
1127 | msgstr "Repositório" | |||
|
1128 | ||||
|
1129 | #: rhodecode/templates/admin/admin_log.html:8 | |||
|
1130 | msgid "Date" | |||
|
1131 | msgstr "Data" | |||
|
1132 | ||||
|
1133 | #: rhodecode/templates/admin/admin_log.html:9 | |||
|
1134 | msgid "From IP" | |||
|
1135 | msgstr "A partir do IP" | |||
|
1136 | ||||
|
1137 | #: rhodecode/templates/admin/admin_log.html:52 | |||
|
1138 | msgid "No actions yet" | |||
|
1139 | msgstr "Ainda não há ações" | |||
|
1140 | ||||
|
1141 | #: rhodecode/templates/admin/ldap/ldap.html:5 | |||
|
1142 | msgid "LDAP administration" | |||
|
1143 | msgstr "Administração de LDAP" | |||
|
1144 | ||||
|
1145 | #: rhodecode/templates/admin/ldap/ldap.html:11 | |||
|
1146 | msgid "Ldap" | |||
|
1147 | msgstr "LDAP" | |||
|
1148 | ||||
|
1149 | #: rhodecode/templates/admin/ldap/ldap.html:28 | |||
|
1150 | msgid "Connection settings" | |||
|
1151 | msgstr "Configurações de conexão" | |||
|
1152 | ||||
|
1153 | #: rhodecode/templates/admin/ldap/ldap.html:30 | |||
|
1154 | msgid "Enable LDAP" | |||
|
1155 | msgstr "Habilitar LDAP" | |||
|
1156 | ||||
|
1157 | #: rhodecode/templates/admin/ldap/ldap.html:34 | |||
|
1158 | msgid "Host" | |||
|
1159 | msgstr "Host" | |||
|
1160 | ||||
|
1161 | #: rhodecode/templates/admin/ldap/ldap.html:38 | |||
|
1162 | msgid "Port" | |||
|
1163 | msgstr "Porta" | |||
|
1164 | ||||
|
1165 | #: rhodecode/templates/admin/ldap/ldap.html:42 | |||
|
1166 | msgid "Account" | |||
|
1167 | msgstr "Conta" | |||
|
1168 | ||||
|
1169 | #: rhodecode/templates/admin/ldap/ldap.html:50 | |||
|
1170 | msgid "Connection security" | |||
|
1171 | msgstr "Segurança da conexão" | |||
|
1172 | ||||
|
1173 | #: rhodecode/templates/admin/ldap/ldap.html:54 | |||
|
1174 | msgid "Certificate Checks" | |||
|
1175 | msgstr "Verificações de Certificados" | |||
|
1176 | ||||
|
1177 | #: rhodecode/templates/admin/ldap/ldap.html:57 | |||
|
1178 | msgid "Search settings" | |||
|
1179 | msgstr "Configurações de busca" | |||
|
1180 | ||||
|
1181 | #: rhodecode/templates/admin/ldap/ldap.html:59 | |||
|
1182 | msgid "Base DN" | |||
|
1183 | msgstr "DN Base" | |||
|
1184 | ||||
|
1185 | #: rhodecode/templates/admin/ldap/ldap.html:63 | |||
|
1186 | msgid "LDAP Filter" | |||
|
1187 | msgstr "Filtro LDAP" | |||
|
1188 | ||||
|
1189 | #: rhodecode/templates/admin/ldap/ldap.html:67 | |||
|
1190 | msgid "LDAP Search Scope" | |||
|
1191 | msgstr "Escopo de Buscas LDAP" | |||
|
1192 | ||||
|
1193 | #: rhodecode/templates/admin/ldap/ldap.html:70 | |||
|
1194 | msgid "Attribute mappings" | |||
|
1195 | msgstr "Mapeamento de atributos" | |||
|
1196 | ||||
|
1197 | #: rhodecode/templates/admin/ldap/ldap.html:72 | |||
|
1198 | msgid "Login Attribute" | |||
|
1199 | msgstr "Atributo de Login" | |||
|
1200 | ||||
|
1201 | #: rhodecode/templates/admin/ldap/ldap.html:76 | |||
|
1202 | msgid "First Name Attribute" | |||
|
1203 | msgstr "Atributo do Primeiro Nome" | |||
|
1204 | ||||
|
1205 | #: rhodecode/templates/admin/ldap/ldap.html:80 | |||
|
1206 | msgid "Last Name Attribute" | |||
|
1207 | msgstr "Atributo do Último Nome" | |||
|
1208 | ||||
|
1209 | #: rhodecode/templates/admin/ldap/ldap.html:84 | |||
|
1210 | msgid "E-mail Attribute" | |||
|
1211 | msgstr "Atributo de E-mail" | |||
|
1212 | ||||
|
1213 | #: rhodecode/templates/admin/ldap/ldap.html:89 | |||
|
1214 | #: rhodecode/templates/admin/settings/hooks.html:73 | |||
|
1215 | #: rhodecode/templates/admin/users/user_edit.html:117 | |||
|
1216 | #: rhodecode/templates/admin/users/user_edit.html:142 | |||
|
1217 | #: rhodecode/templates/admin/users/user_edit_my_account.html:89 | |||
|
1218 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:263 | |||
|
1219 | msgid "Save" | |||
|
1220 | msgstr "Salvar" | |||
|
1221 | ||||
|
1222 | #: rhodecode/templates/admin/permissions/permissions.html:5 | |||
|
1223 | msgid "Permissions administration" | |||
|
1224 | msgstr "Administração de permissões" | |||
|
1225 | ||||
|
1226 | #: rhodecode/templates/admin/permissions/permissions.html:11 | |||
|
1227 | #: rhodecode/templates/admin/repos/repo_edit.html:109 | |||
|
1228 | #: rhodecode/templates/admin/users/user_edit.html:127 | |||
|
1229 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:248 | |||
|
1230 | #: rhodecode/templates/settings/repo_settings.html:58 | |||
|
1231 | msgid "Permissions" | |||
|
1232 | msgstr "Permissões" | |||
|
1233 | ||||
|
1234 | #: rhodecode/templates/admin/permissions/permissions.html:24 | |||
|
1235 | msgid "Default permissions" | |||
|
1236 | msgstr "Permissões padrão" | |||
|
1237 | ||||
|
1238 | #: rhodecode/templates/admin/permissions/permissions.html:31 | |||
|
1239 | msgid "Anonymous access" | |||
|
1240 | msgstr "Acesso anônimo" | |||
|
1241 | ||||
|
1242 | #: rhodecode/templates/admin/permissions/permissions.html:41 | |||
|
1243 | msgid "Repository permission" | |||
|
1244 | msgstr "Permissão de repositório" | |||
|
1245 | ||||
|
1246 | #: rhodecode/templates/admin/permissions/permissions.html:49 | |||
|
1247 | msgid "All default permissions on each repository will be reset to choosen permission, note that all custom default permission on repositories will be lost" | |||
|
1248 | msgstr "Todas as permissões padrão em cada repositório serão reinicializadas para as permissões escolhidas. Note que todas as permissões padrão customizadas nos repositórios serão perdidas" | |||
|
1249 | ||||
|
1250 | #: rhodecode/templates/admin/permissions/permissions.html:50 | |||
|
1251 | msgid "overwrite existing settings" | |||
|
1252 | msgstr "sobrescrever configurações existentes" | |||
|
1253 | ||||
|
1254 | #: rhodecode/templates/admin/permissions/permissions.html:55 | |||
|
1255 | msgid "Registration" | |||
|
1256 | msgstr "Registro" | |||
|
1257 | ||||
|
1258 | #: rhodecode/templates/admin/permissions/permissions.html:63 | |||
|
1259 | msgid "Repository creation" | |||
|
1260 | msgstr "Criação de repositório" | |||
|
1261 | ||||
|
1262 | #: rhodecode/templates/admin/permissions/permissions.html:71 | |||
|
1263 | msgid "set" | |||
|
1264 | msgstr "ajustar" | |||
|
1265 | ||||
|
1266 | #: rhodecode/templates/admin/repos/repo_add.html:5 | |||
|
1267 | #: rhodecode/templates/admin/repos/repo_add_create_repository.html:5 | |||
|
1268 | msgid "Add repository" | |||
|
1269 | msgstr "Adicionar repositório" | |||
|
1270 | ||||
|
1271 | #: rhodecode/templates/admin/repos/repo_add.html:11 | |||
|
1272 | #: rhodecode/templates/admin/repos/repo_edit.html:11 | |||
|
1273 | #: rhodecode/templates/admin/repos/repos.html:10 | |||
|
1274 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10 | |||
|
1275 | msgid "Repositories" | |||
|
1276 | msgstr "Repositórios" | |||
|
1277 | ||||
|
1278 | #: rhodecode/templates/admin/repos/repo_add.html:13 | |||
|
1279 | msgid "add new" | |||
|
1280 | msgstr "adicionar novo" | |||
|
1281 | ||||
|
1282 | #: rhodecode/templates/admin/repos/repo_add_base.html:20 | |||
|
1283 | #: rhodecode/templates/summary/summary.html:80 | |||
|
1284 | #: rhodecode/templates/summary/summary.html:82 | |||
|
1285 | msgid "Clone from" | |||
|
1286 | msgstr "Clonar de" | |||
|
1287 | ||||
|
1288 | #: rhodecode/templates/admin/repos/repo_add_base.html:28 | |||
|
1289 | #: rhodecode/templates/admin/repos/repo_edit.html:48 | |||
|
1290 | #: rhodecode/templates/admin/repos_groups/repos_groups.html:4 | |||
|
1291 | msgid "Repository group" | |||
|
1292 | msgstr "Grupo de repositórios" | |||
|
1293 | ||||
|
1294 | #: rhodecode/templates/admin/repos/repo_add_base.html:36 | |||
|
1295 | #: rhodecode/templates/admin/repos/repo_edit.html:56 | |||
|
1296 | msgid "Type" | |||
|
1297 | msgstr "Tipo" | |||
|
1298 | ||||
|
1299 | #: rhodecode/templates/admin/repos/repo_add_base.html:52 | |||
|
1300 | #: rhodecode/templates/admin/repos/repo_edit.html:73 | |||
|
1301 | #: rhodecode/templates/settings/repo_fork.html:48 | |||
|
1302 | #: rhodecode/templates/settings/repo_settings.html:49 | |||
|
1303 | msgid "Private" | |||
|
1304 | msgstr "Privado" | |||
|
1305 | ||||
|
1306 | #: rhodecode/templates/admin/repos/repo_add_base.html:59 | |||
|
1307 | msgid "add" | |||
|
1308 | msgstr "adicionar" | |||
|
1309 | ||||
|
1310 | #: rhodecode/templates/admin/repos/repo_add_create_repository.html:9 | |||
|
1311 | msgid "add new repository" | |||
|
1312 | msgstr "adicionar novo repositório" | |||
|
1313 | ||||
|
1314 | #: rhodecode/templates/admin/repos/repo_edit.html:5 | |||
|
1315 | msgid "Edit repository" | |||
|
1316 | msgstr "Editar repositório" | |||
|
1317 | ||||
|
1318 | #: rhodecode/templates/admin/repos/repo_edit.html:13 | |||
|
1319 | #: rhodecode/templates/admin/users/user_edit.html:13 | |||
|
1320 | #: rhodecode/templates/admin/users/user_edit_my_account.html:148 | |||
|
1321 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:13 | |||
|
1322 | #: rhodecode/templates/files/files_annotate.html:49 | |||
|
1323 | #: rhodecode/templates/files/files_source.html:20 | |||
|
1324 | msgid "edit" | |||
|
1325 | msgstr "editar" | |||
|
1326 | ||||
|
1327 | #: rhodecode/templates/admin/repos/repo_edit.html:40 | |||
|
1328 | msgid "Clone uri" | |||
|
1329 | msgstr "URI de clonagem" | |||
|
1330 | ||||
|
1331 | #: rhodecode/templates/admin/repos/repo_edit.html:81 | |||
|
1332 | msgid "Enable statistics" | |||
|
1333 | msgstr "Habilitar estatísticas" | |||
|
1334 | ||||
|
1335 | #: rhodecode/templates/admin/repos/repo_edit.html:89 | |||
|
1336 | msgid "Enable downloads" | |||
|
1337 | msgstr "Habilitar downloads" | |||
|
1338 | ||||
|
1339 | #: rhodecode/templates/admin/repos/repo_edit.html:127 | |||
|
1340 | msgid "Administration" | |||
|
1341 | msgstr "Administração" | |||
|
1342 | ||||
|
1343 | #: rhodecode/templates/admin/repos/repo_edit.html:130 | |||
|
1344 | msgid "Statistics" | |||
|
1345 | msgstr "Estatísticas" | |||
|
1346 | ||||
|
1347 | #: rhodecode/templates/admin/repos/repo_edit.html:134 | |||
|
1348 | msgid "Reset current statistics" | |||
|
1349 | msgstr "Reinicializar estatísticas atuais" | |||
|
1350 | ||||
|
1351 | #: rhodecode/templates/admin/repos/repo_edit.html:134 | |||
|
1352 | msgid "Confirm to remove current statistics" | |||
|
1353 | msgstr "Confirma remover atuais estatísticas" | |||
|
1354 | ||||
|
1355 | #: rhodecode/templates/admin/repos/repo_edit.html:137 | |||
|
1356 | msgid "Fetched to rev" | |||
|
1357 | msgstr "Trazida à rev" | |||
|
1358 | ||||
|
1359 | #: rhodecode/templates/admin/repos/repo_edit.html:138 | |||
|
1360 | msgid "Percentage of stats gathered" | |||
|
1361 | msgstr "Porcentagem das estatísticas totalizadas" | |||
|
1362 | ||||
|
1363 | #: rhodecode/templates/admin/repos/repo_edit.html:147 | |||
|
1364 | msgid "Remote" | |||
|
1365 | msgstr "Remoto" | |||
|
1366 | ||||
|
1367 | #: rhodecode/templates/admin/repos/repo_edit.html:151 | |||
|
1368 | msgid "Pull changes from remote location" | |||
|
1369 | msgstr "Realizar pull de alterações a partir de localização remota" | |||
|
1370 | ||||
|
1371 | #: rhodecode/templates/admin/repos/repo_edit.html:151 | |||
|
1372 | msgid "Confirm to pull changes from remote side" | |||
|
1373 | msgstr "Confirma realizar pull de alterações a partir de lado remoto" | |||
|
1374 | ||||
|
1375 | #: rhodecode/templates/admin/repos/repo_edit.html:162 | |||
|
1376 | msgid "Cache" | |||
|
1377 | msgstr "Cache" | |||
|
1378 | ||||
|
1379 | #: rhodecode/templates/admin/repos/repo_edit.html:166 | |||
|
1380 | msgid "Invalidate repository cache" | |||
|
1381 | msgstr "Invalidar cache do repositório" | |||
|
1382 | ||||
|
1383 | #: rhodecode/templates/admin/repos/repo_edit.html:166 | |||
|
1384 | msgid "Confirm to invalidate repository cache" | |||
|
1385 | msgstr "Confirma invalidar cache do repositório" | |||
|
1386 | ||||
|
1387 | #: rhodecode/templates/admin/repos/repo_edit.html:177 | |||
|
1388 | msgid "Remove from public journal" | |||
|
1389 | msgstr "Remover do diário público" | |||
|
1390 | ||||
|
1391 | #: rhodecode/templates/admin/repos/repo_edit.html:179 | |||
|
1392 | msgid "Add to public journal" | |||
|
1393 | msgstr "Adicionar ao diário público" | |||
|
1394 | ||||
|
1395 | #: rhodecode/templates/admin/repos/repo_edit.html:185 | |||
|
1396 | msgid "Delete" | |||
|
1397 | msgstr "Excluir" | |||
|
1398 | ||||
|
1399 | #: rhodecode/templates/admin/repos/repo_edit.html:189 | |||
|
1400 | msgid "Remove this repository" | |||
|
1401 | msgstr "Remover deste repositório" | |||
|
1402 | ||||
|
1403 | #: rhodecode/templates/admin/repos/repo_edit.html:189 | |||
|
1404 | #: rhodecode/templates/admin/repos/repos.html:79 | |||
|
1405 | msgid "Confirm to delete this repository" | |||
|
1406 | msgstr "Confirma excluir este repositório" | |||
|
1407 | ||||
|
1408 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:3 | |||
|
1409 | msgid "none" | |||
|
1410 | msgstr "nenhum" | |||
|
1411 | ||||
|
1412 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:4 | |||
|
1413 | msgid "read" | |||
|
1414 | msgstr "ler" | |||
|
1415 | ||||
|
1416 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:5 | |||
|
1417 | msgid "write" | |||
|
1418 | msgstr "escrever" | |||
|
1419 | ||||
|
1420 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:6 | |||
|
1421 | #: rhodecode/templates/admin/users/users.html:38 | |||
|
1422 | #: rhodecode/templates/base/base.html:296 | |||
|
1423 | msgid "admin" | |||
|
1424 | msgstr "administrador" | |||
|
1425 | ||||
|
1426 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:7 | |||
|
1427 | msgid "member" | |||
|
1428 | msgstr "membro" | |||
|
1429 | ||||
|
1430 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:33 | |||
|
1431 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:53 | |||
|
1432 | msgid "revoke" | |||
|
1433 | msgstr "revogar" | |||
|
1434 | ||||
|
1435 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:75 | |||
|
1436 | msgid "Add another member" | |||
|
1437 | msgstr "Adicionar outro membro" | |||
|
1438 | ||||
|
1439 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:89 | |||
|
1440 | msgid "Failed to remove user" | |||
|
1441 | msgstr "Falha ao reomver usuário" | |||
|
1442 | ||||
|
1443 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:104 | |||
|
1444 | msgid "Failed to remove users group" | |||
|
1445 | msgstr "Falha ao remover grupo de usuários" | |||
|
1446 | ||||
|
1447 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:205 | |||
|
1448 | msgid "Group" | |||
|
1449 | msgstr "Grupo" | |||
|
1450 | ||||
|
1451 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:206 | |||
|
1452 | #: rhodecode/templates/admin/users_groups/users_groups.html:33 | |||
|
1453 | msgid "members" | |||
|
1454 | msgstr "membros" | |||
|
1455 | ||||
|
1456 | #: rhodecode/templates/admin/repos/repos.html:5 | |||
|
1457 | msgid "Repositories administration" | |||
|
1458 | msgstr "Administração de repositórios" | |||
|
1459 | ||||
|
1460 | #: rhodecode/templates/admin/repos/repos.html:34 | |||
|
1461 | #: rhodecode/templates/summary/summary.html:100 | |||
|
1462 | msgid "Contact" | |||
|
1463 | msgstr "Contato" | |||
|
1464 | ||||
|
1465 | #: rhodecode/templates/admin/repos/repos.html:35 | |||
|
1466 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36 | |||
|
1467 | #: rhodecode/templates/admin/users/user_edit_my_account.html:119 | |||
|
1468 | #: rhodecode/templates/admin/users/users.html:40 | |||
|
1469 | #: rhodecode/templates/admin/users_groups/users_groups.html:35 | |||
|
1470 | msgid "action" | |||
|
1471 | msgstr "ação" | |||
|
1472 | ||||
|
1473 | #: rhodecode/templates/admin/repos/repos.html:51 | |||
|
1474 | #: rhodecode/templates/admin/users/user_edit_my_account.html:134 | |||
|
1475 | #: rhodecode/templates/admin/users/user_edit_my_account.html:148 | |||
|
1476 | msgid "private" | |||
|
1477 | msgstr "privado" | |||
|
1478 | ||||
|
1479 | #: rhodecode/templates/admin/repos/repos.html:53 | |||
|
1480 | #: rhodecode/templates/admin/repos/repos.html:59 | |||
|
1481 | #: rhodecode/templates/admin/users/user_edit_my_account.html:136 | |||
|
1482 | #: rhodecode/templates/admin/users/user_edit_my_account.html:142 | |||
|
1483 | #: rhodecode/templates/summary/summary.html:68 | |||
|
1484 | msgid "public" | |||
|
1485 | msgstr "público" | |||
|
1486 | ||||
|
1487 | #: rhodecode/templates/admin/repos/repos.html:79 | |||
|
1488 | #: rhodecode/templates/admin/users/users.html:55 | |||
|
1489 | msgid "delete" | |||
|
1490 | msgstr "excluir" | |||
|
1491 | ||||
|
1492 | #: rhodecode/templates/admin/repos_groups/repos_groups.html:8 | |||
|
1493 | msgid "Groups" | |||
|
1494 | msgstr "Grupos" | |||
|
1495 | ||||
|
1496 | #: rhodecode/templates/admin/repos_groups/repos_groups.html:13 | |||
|
1497 | msgid "with" | |||
|
1498 | msgstr "com" | |||
|
1499 | ||||
|
1500 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 | |||
|
1501 | msgid "Add repos group" | |||
|
1502 | msgstr "Adicionar grupo de repositórios" | |||
|
1503 | ||||
|
1504 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10 | |||
|
1505 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10 | |||
|
1506 | msgid "Repos groups" | |||
|
1507 | msgstr "Grupo de repositórios" | |||
|
1508 | ||||
|
1509 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12 | |||
|
1510 | msgid "add new repos group" | |||
|
1511 | msgstr "adicionar novo grupo de repositórios" | |||
|
1512 | ||||
|
1513 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50 | |||
|
1514 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50 | |||
|
1515 | msgid "Group parent" | |||
|
1516 | msgstr "Progenitor do grupo" | |||
|
1517 | ||||
|
1518 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58 | |||
|
1519 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58 | |||
|
1520 | #: rhodecode/templates/admin/users/user_add.html:85 | |||
|
1521 | #: rhodecode/templates/admin/users_groups/users_group_add.html:49 | |||
|
1522 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:90 | |||
|
1523 | msgid "save" | |||
|
1524 | msgstr "salvar" | |||
|
1525 | ||||
|
1526 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5 | |||
|
1527 | msgid "Edit repos group" | |||
|
1528 | msgstr "Editar grupo de repositórios" | |||
|
1529 | ||||
|
1530 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12 | |||
|
1531 | msgid "edit repos group" | |||
|
1532 | msgstr "editar grupo de repositórios" | |||
|
1533 | ||||
|
1534 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5 | |||
|
1535 | msgid "Repositories groups administration" | |||
|
1536 | msgstr "Administração de grupos de repositórios" | |||
|
1537 | ||||
|
1538 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22 | |||
|
1539 | msgid "ADD NEW GROUP" | |||
|
1540 | msgstr "ADICIONAR NOVO GRUPO" | |||
|
1541 | ||||
|
1542 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35 | |||
|
1543 | msgid "Number of repositories" | |||
|
1544 | msgstr "Número de repositórios" | |||
|
1545 | ||||
|
1546 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54 | |||
|
1547 | msgid "Confirm to delete this group" | |||
|
1548 | msgstr "Confirme para excluir este grupo" | |||
|
1549 | ||||
|
1550 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62 | |||
|
1551 | msgid "There are no repositories groups yet" | |||
|
1552 | msgstr "Ainda não há grupos de repositórios" | |||
|
1553 | ||||
|
1554 | #: rhodecode/templates/admin/settings/hooks.html:5 | |||
|
1555 | #: rhodecode/templates/admin/settings/settings.html:5 | |||
|
1556 | msgid "Settings administration" | |||
|
1557 | msgstr "Administração de configurações" | |||
|
1558 | ||||
|
1559 | #: rhodecode/templates/admin/settings/hooks.html:9 | |||
|
1560 | #: rhodecode/templates/admin/settings/settings.html:9 | |||
|
1561 | #: rhodecode/templates/settings/repo_settings.html:5 | |||
|
1562 | #: rhodecode/templates/settings/repo_settings.html:13 | |||
|
1563 | msgid "Settings" | |||
|
1564 | msgstr "Configurações" | |||
|
1565 | ||||
|
1566 | #: rhodecode/templates/admin/settings/hooks.html:24 | |||
|
1567 | msgid "Built in hooks - read only" | |||
|
1568 | msgstr "Ganchos pré-definidos - somente leitura" | |||
|
1569 | ||||
|
1570 | #: rhodecode/templates/admin/settings/hooks.html:40 | |||
|
1571 | msgid "Custom hooks" | |||
|
1572 | msgstr "Ganchos customizados" | |||
|
1573 | ||||
|
1574 | #: rhodecode/templates/admin/settings/hooks.html:56 | |||
|
1575 | msgid "remove" | |||
|
1576 | msgstr "remover" | |||
|
1577 | ||||
|
1578 | #: rhodecode/templates/admin/settings/hooks.html:88 | |||
|
1579 | msgid "Failed to remove hook" | |||
|
1580 | msgstr "Falha ao remover gancho" | |||
|
1581 | ||||
|
1582 | #: rhodecode/templates/admin/settings/settings.html:24 | |||
|
1583 | msgid "Remap and rescan repositories" | |||
|
1584 | msgstr "Remapear e varrer novamente repositórios" | |||
|
1585 | ||||
|
1586 | #: rhodecode/templates/admin/settings/settings.html:32 | |||
|
1587 | msgid "rescan option" | |||
|
1588 | msgstr "opção de varredura" | |||
|
1589 | ||||
|
1590 | #: rhodecode/templates/admin/settings/settings.html:38 | |||
|
1591 | msgid "In case a repository was deleted from filesystem and there are leftovers in the database check this option to scan obsolete data in database and remove it." | |||
|
1592 | msgstr "Caso um repositório tenha sido excluído do sistema de arquivos e haja restos no banco de dados, marque esta opção para varrer dados obsoletos no banco e removê-los." | |||
|
1593 | ||||
|
1594 | #: rhodecode/templates/admin/settings/settings.html:39 | |||
|
1595 | msgid "destroy old data" | |||
|
1596 | msgstr "destruir dados antigos" | |||
|
1597 | ||||
|
1598 | #: rhodecode/templates/admin/settings/settings.html:45 | |||
|
1599 | msgid "Rescan repositories" | |||
|
1600 | msgstr "Varrer repositórios" | |||
|
1601 | ||||
|
1602 | #: rhodecode/templates/admin/settings/settings.html:51 | |||
|
1603 | msgid "Whoosh indexing" | |||
|
1604 | msgstr "Indexação do Whoosh" | |||
|
1605 | ||||
|
1606 | #: rhodecode/templates/admin/settings/settings.html:59 | |||
|
1607 | msgid "index build option" | |||
|
1608 | msgstr "opção de construção de índice" | |||
|
1609 | ||||
|
1610 | #: rhodecode/templates/admin/settings/settings.html:64 | |||
|
1611 | msgid "build from scratch" | |||
|
1612 | msgstr "construir do início" | |||
|
1613 | ||||
|
1614 | #: rhodecode/templates/admin/settings/settings.html:70 | |||
|
1615 | msgid "Reindex" | |||
|
1616 | msgstr "Reindexar" | |||
|
1617 | ||||
|
1618 | #: rhodecode/templates/admin/settings/settings.html:76 | |||
|
1619 | msgid "Global application settings" | |||
|
1620 | msgstr "Configurações globais da aplicação" | |||
|
1621 | ||||
|
1622 | #: rhodecode/templates/admin/settings/settings.html:85 | |||
|
1623 | msgid "Application name" | |||
|
1624 | msgstr "Nome da aplicação" | |||
|
1625 | ||||
|
1626 | #: rhodecode/templates/admin/settings/settings.html:94 | |||
|
1627 | msgid "Realm text" | |||
|
1628 | msgstr "Texto de esfera" | |||
|
1629 | ||||
|
1630 | #: rhodecode/templates/admin/settings/settings.html:103 | |||
|
1631 | msgid "GA code" | |||
|
1632 | msgstr "Código GA" | |||
|
1633 | ||||
|
1634 | #: rhodecode/templates/admin/settings/settings.html:111 | |||
|
1635 | #: rhodecode/templates/admin/settings/settings.html:177 | |||
|
1636 | msgid "Save settings" | |||
|
1637 | msgstr "Salvar configurações" | |||
|
1638 | ||||
|
1639 | #: rhodecode/templates/admin/settings/settings.html:112 | |||
|
1640 | #: rhodecode/templates/admin/settings/settings.html:178 | |||
|
1641 | #: rhodecode/templates/admin/users/user_edit.html:118 | |||
|
1642 | #: rhodecode/templates/admin/users/user_edit.html:143 | |||
|
1643 | #: rhodecode/templates/admin/users/user_edit_my_account.html:90 | |||
|
1644 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:264 | |||
|
1645 | #: rhodecode/templates/files/files_edit.html:50 | |||
|
1646 | msgid "Reset" | |||
|
1647 | msgstr "Limpar" | |||
|
1648 | ||||
|
1649 | #: rhodecode/templates/admin/settings/settings.html:118 | |||
|
1650 | msgid "Mercurial settings" | |||
|
1651 | msgstr "Configurações do Mercurial" | |||
|
1652 | ||||
|
1653 | #: rhodecode/templates/admin/settings/settings.html:127 | |||
|
1654 | msgid "Web" | |||
|
1655 | msgstr "Web" | |||
|
1656 | ||||
|
1657 | #: rhodecode/templates/admin/settings/settings.html:132 | |||
|
1658 | msgid "require ssl for pushing" | |||
|
1659 | msgstr "exigir ssl para realizar push" | |||
|
1660 | ||||
|
1661 | #: rhodecode/templates/admin/settings/settings.html:139 | |||
|
1662 | msgid "Hooks" | |||
|
1663 | msgstr "Ganchos" | |||
|
1664 | ||||
|
1665 | #: rhodecode/templates/admin/settings/settings.html:142 | |||
|
1666 | msgid "advanced setup" | |||
|
1667 | msgstr "confirguações avançadas" | |||
|
1668 | ||||
|
1669 | #: rhodecode/templates/admin/settings/settings.html:147 | |||
|
1670 | msgid "Update repository after push (hg update)" | |||
|
1671 | msgstr "Atualizar repositório após realizar push (hg update)" | |||
|
1672 | ||||
|
1673 | #: rhodecode/templates/admin/settings/settings.html:151 | |||
|
1674 | msgid "Show repository size after push" | |||
|
1675 | msgstr "Mostrar tamanho do repositório após o push" | |||
|
1676 | ||||
|
1677 | #: rhodecode/templates/admin/settings/settings.html:155 | |||
|
1678 | msgid "Log user push commands" | |||
|
1679 | msgstr "Armazenar registro de comandos de push dos usuários" | |||
|
1680 | ||||
|
1681 | #: rhodecode/templates/admin/settings/settings.html:159 | |||
|
1682 | msgid "Log user pull commands" | |||
|
1683 | msgstr "Armazenar registro de comandos de pull dos usuários" | |||
|
1684 | ||||
|
1685 | #: rhodecode/templates/admin/settings/settings.html:166 | |||
|
1686 | msgid "Repositories location" | |||
|
1687 | msgstr "Localização dos repositórios" | |||
|
1688 | ||||
|
1689 | #: rhodecode/templates/admin/settings/settings.html:171 | |||
|
1690 | msgid "This a crucial application setting. If you are really sure you need to change this, you must restart application in order to make this setting take effect. Click this label to unlock." | |||
|
1691 | msgstr "Essa é uma configuração crucial da aplicação. Se você realmente tem certeza de que quer mudar isto, você precisa reiniciar a aplicação para que essa configuração tenha efeito. Clique este rótulo para destravar." | |||
|
1692 | ||||
|
1693 | #: rhodecode/templates/admin/settings/settings.html:172 | |||
|
1694 | msgid "unlock" | |||
|
1695 | msgstr "destravar" | |||
|
1696 | ||||
|
1697 | #: rhodecode/templates/admin/users/user_add.html:5 | |||
|
1698 | msgid "Add user" | |||
|
1699 | msgstr "Adicionar usuário" | |||
|
1700 | ||||
|
1701 | #: rhodecode/templates/admin/users/user_add.html:10 | |||
|
1702 | #: rhodecode/templates/admin/users/user_edit.html:11 | |||
|
1703 | #: rhodecode/templates/admin/users/users.html:9 | |||
|
1704 | msgid "Users" | |||
|
1705 | msgstr "Usuários" | |||
|
1706 | ||||
|
1707 | #: rhodecode/templates/admin/users/user_add.html:12 | |||
|
1708 | msgid "add new user" | |||
|
1709 | msgstr "adicionar novo usuário" | |||
|
1710 | ||||
|
1711 | #: rhodecode/templates/admin/users/user_add.html:77 | |||
|
1712 | #: rhodecode/templates/admin/users/user_edit.html:101 | |||
|
1713 | #: rhodecode/templates/admin/users_groups/users_group_add.html:41 | |||
|
1714 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:42 | |||
|
1715 | msgid "Active" | |||
|
1716 | msgstr "Ativo" | |||
|
1717 | ||||
|
1718 | #: rhodecode/templates/admin/users/user_edit.html:5 | |||
|
1719 | msgid "Edit user" | |||
|
1720 | msgstr "Editar usuário" | |||
|
1721 | ||||
|
1722 | #: rhodecode/templates/admin/users/user_edit.html:33 | |||
|
1723 | #: rhodecode/templates/admin/users/user_edit_my_account.html:32 | |||
|
1724 | msgid "Change your avatar at" | |||
|
1725 | msgstr "Altere o seu avatar em" | |||
|
1726 | ||||
|
1727 | #: rhodecode/templates/admin/users/user_edit.html:34 | |||
|
1728 | #: rhodecode/templates/admin/users/user_edit_my_account.html:33 | |||
|
1729 | msgid "Using" | |||
|
1730 | msgstr "Usando" | |||
|
1731 | ||||
|
1732 | #: rhodecode/templates/admin/users/user_edit.html:40 | |||
|
1733 | #: rhodecode/templates/admin/users/user_edit_my_account.html:39 | |||
|
1734 | msgid "API key" | |||
|
1735 | msgstr "Chave de API" | |||
|
1736 | ||||
|
1737 | #: rhodecode/templates/admin/users/user_edit.html:56 | |||
|
1738 | msgid "LDAP DN" | |||
|
1739 | msgstr "DN LDAP" | |||
|
1740 | ||||
|
1741 | #: rhodecode/templates/admin/users/user_edit.html:65 | |||
|
1742 | #: rhodecode/templates/admin/users/user_edit_my_account.html:54 | |||
|
1743 | msgid "New password" | |||
|
1744 | msgstr "Nova senha" | |||
|
1745 | ||||
|
1746 | #: rhodecode/templates/admin/users/user_edit.html:135 | |||
|
1747 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:256 | |||
|
1748 | msgid "Create repositories" | |||
|
1749 | msgstr "Criar repositórios" | |||
|
1750 | ||||
|
1751 | #: rhodecode/templates/admin/users/user_edit_my_account.html:5 | |||
|
1752 | msgid "My account" | |||
|
1753 | msgstr "Minha conta" | |||
|
1754 | ||||
|
1755 | #: rhodecode/templates/admin/users/user_edit_my_account.html:9 | |||
|
1756 | msgid "My Account" | |||
|
1757 | msgstr "Minha Conta" | |||
|
1758 | ||||
|
1759 | #: rhodecode/templates/admin/users/user_edit_my_account.html:101 | |||
|
1760 | msgid "My repositories" | |||
|
1761 | msgstr "Meus repositórios" | |||
|
1762 | ||||
|
1763 | #: rhodecode/templates/admin/users/user_edit_my_account.html:107 | |||
|
1764 | msgid "ADD REPOSITORY" | |||
|
1765 | msgstr "ADICIONAR REPOSITÓRIO" | |||
|
1766 | ||||
|
1767 | #: rhodecode/templates/admin/users/user_edit_my_account.html:118 | |||
|
1768 | #: rhodecode/templates/branches/branches_data.html:7 | |||
|
1769 | #: rhodecode/templates/shortlog/shortlog_data.html:8 | |||
|
1770 | #: rhodecode/templates/tags/tags_data.html:7 | |||
|
1771 | msgid "revision" | |||
|
1772 | msgstr "revisão" | |||
|
1773 | ||||
|
1774 | #: rhodecode/templates/admin/users/user_edit_my_account.html:157 | |||
|
1775 | msgid "No repositories yet" | |||
|
1776 | msgstr "Ainda não há repositórios" | |||
|
1777 | ||||
|
1778 | #: rhodecode/templates/admin/users/user_edit_my_account.html:159 | |||
|
1779 | msgid "create one now" | |||
|
1780 | msgstr "criar um agora" | |||
|
1781 | ||||
|
1782 | #: rhodecode/templates/admin/users/users.html:5 | |||
|
1783 | msgid "Users administration" | |||
|
1784 | msgstr "Administração de usuários" | |||
|
1785 | ||||
|
1786 | #: rhodecode/templates/admin/users/users.html:23 | |||
|
1787 | msgid "ADD NEW USER" | |||
|
1788 | msgstr "ADICIONAR NOVO USUÁRIO" | |||
|
1789 | ||||
|
1790 | #: rhodecode/templates/admin/users/users.html:33 | |||
|
1791 | msgid "username" | |||
|
1792 | msgstr "nome de usuário" | |||
|
1793 | ||||
|
1794 | #: rhodecode/templates/admin/users/users.html:34 | |||
|
1795 | #: rhodecode/templates/branches/branches_data.html:5 | |||
|
1796 | #: rhodecode/templates/tags/tags_data.html:5 | |||
|
1797 | msgid "name" | |||
|
1798 | msgstr "nome" | |||
|
1799 | ||||
|
1800 | #: rhodecode/templates/admin/users/users.html:35 | |||
|
1801 | msgid "lastname" | |||
|
1802 | msgstr "sobrenome" | |||
|
1803 | ||||
|
1804 | #: rhodecode/templates/admin/users/users.html:36 | |||
|
1805 | msgid "last login" | |||
|
1806 | msgstr "último login" | |||
|
1807 | ||||
|
1808 | #: rhodecode/templates/admin/users/users.html:37 | |||
|
1809 | #: rhodecode/templates/admin/users_groups/users_groups.html:34 | |||
|
1810 | msgid "active" | |||
|
1811 | msgstr "ativo" | |||
|
1812 | ||||
|
1813 | #: rhodecode/templates/admin/users/users.html:39 | |||
|
1814 | #: rhodecode/templates/base/base.html:305 | |||
|
1815 | msgid "ldap" | |||
|
1816 | msgstr "ldap" | |||
|
1817 | ||||
|
1818 | #: rhodecode/templates/admin/users/users.html:56 | |||
|
1819 | msgid "Confirm to delete this user" | |||
|
1820 | msgstr "Conforma excluir este usuário" | |||
|
1821 | ||||
|
1822 | #: rhodecode/templates/admin/users_groups/users_group_add.html:5 | |||
|
1823 | msgid "Add users group" | |||
|
1824 | msgstr "Adicionar grupo de usuários" | |||
|
1825 | ||||
|
1826 | #: rhodecode/templates/admin/users_groups/users_group_add.html:10 | |||
|
1827 | #: rhodecode/templates/admin/users_groups/users_groups.html:9 | |||
|
1828 | msgid "Users groups" | |||
|
1829 | msgstr "Grupos de usuários" | |||
|
1830 | ||||
|
1831 | #: rhodecode/templates/admin/users_groups/users_group_add.html:12 | |||
|
1832 | msgid "add new users group" | |||
|
1833 | msgstr "Adicionar novo grupo de usuários" | |||
|
1834 | ||||
|
1835 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:5 | |||
|
1836 | msgid "Edit users group" | |||
|
1837 | msgstr "Editar grupo de usuários" | |||
|
1838 | ||||
|
1839 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:11 | |||
|
1840 | msgid "UsersGroups" | |||
|
1841 | msgstr "Grupos de Usuários" | |||
|
1842 | ||||
|
1843 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:50 | |||
|
1844 | msgid "Members" | |||
|
1845 | msgstr "Membros" | |||
|
1846 | ||||
|
1847 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:58 | |||
|
1848 | msgid "Choosen group members" | |||
|
1849 | msgstr "Membros escolhidos do grupo" | |||
|
1850 | ||||
|
1851 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:61 | |||
|
1852 | msgid "Remove all elements" | |||
|
1853 | msgstr "Remover todos os elementos" | |||
|
1854 | ||||
|
1855 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:75 | |||
|
1856 | msgid "Available members" | |||
|
1857 | msgstr "Membros disponíveis" | |||
|
1858 | ||||
|
1859 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:79 | |||
|
1860 | msgid "Add all elements" | |||
|
1861 | msgstr "Adicionar todos os elementos" | |||
|
1862 | ||||
|
1863 | #: rhodecode/templates/admin/users_groups/users_groups.html:5 | |||
|
1864 | msgid "Users groups administration" | |||
|
1865 | msgstr "Administração de grupos de usuários" | |||
|
1866 | ||||
|
1867 | #: rhodecode/templates/admin/users_groups/users_groups.html:23 | |||
|
1868 | msgid "ADD NEW USER GROUP" | |||
|
1869 | msgstr "ADICIONAR NOVO GRUPO DE USUÁRIOS" | |||
|
1870 | ||||
|
1871 | #: rhodecode/templates/admin/users_groups/users_groups.html:32 | |||
|
1872 | msgid "group name" | |||
|
1873 | msgstr "nome do grupo" | |||
|
1874 | ||||
|
1875 | #: rhodecode/templates/base/base.html:32 | |||
|
1876 | msgid "Forgot password ?" | |||
|
1877 | msgstr "Esqueceu a senha ?" | |||
|
1878 | ||||
|
1879 | #: rhodecode/templates/base/base.html:57 | |||
|
1880 | #: rhodecode/templates/base/base.html:338 | |||
|
1881 | #: rhodecode/templates/base/base.html:340 | |||
|
1882 | #: rhodecode/templates/base/base.html:342 | |||
|
1883 | msgid "Home" | |||
|
1884 | msgstr "Início" | |||
|
1885 | ||||
|
1886 | #: rhodecode/templates/base/base.html:61 | |||
|
1887 | #: rhodecode/templates/base/base.html:347 | |||
|
1888 | #: rhodecode/templates/base/base.html:349 | |||
|
1889 | #: rhodecode/templates/base/base.html:351 | |||
|
1890 | #: rhodecode/templates/journal/journal.html:4 | |||
|
1891 | #: rhodecode/templates/journal/journal.html:17 | |||
|
1892 | #: rhodecode/templates/journal/public_journal.html:4 | |||
|
1893 | msgid "Journal" | |||
|
1894 | msgstr "Diário" | |||
|
1895 | ||||
|
1896 | #: rhodecode/templates/base/base.html:66 | |||
|
1897 | msgid "Login" | |||
|
1898 | msgstr "Entrar" | |||
|
1899 | ||||
|
1900 | #: rhodecode/templates/base/base.html:68 | |||
|
1901 | msgid "Log Out" | |||
|
1902 | msgstr "Sair" | |||
|
1903 | ||||
|
1904 | #: rhodecode/templates/base/base.html:107 | |||
|
1905 | msgid "Submit a bug" | |||
|
1906 | msgstr "Encaminhe um bug" | |||
|
1907 | ||||
|
1908 | #: rhodecode/templates/base/base.html:141 | |||
|
1909 | msgid "Switch repository" | |||
|
1910 | msgstr "Trocar repositório" | |||
|
1911 | ||||
|
1912 | #: rhodecode/templates/base/base.html:143 | |||
|
1913 | msgid "Products" | |||
|
1914 | msgstr "Produtos" | |||
|
1915 | ||||
|
1916 | #: rhodecode/templates/base/base.html:149 | |||
|
1917 | msgid "loading..." | |||
|
1918 | msgstr "carregando..." | |||
|
1919 | ||||
|
1920 | #: rhodecode/templates/base/base.html:234 | |||
|
1921 | #: rhodecode/templates/base/base.html:236 | |||
|
1922 | #: rhodecode/templates/base/base.html:238 | |||
|
1923 | msgid "Switch to" | |||
|
1924 | msgstr "Trocar para" | |||
|
1925 | ||||
|
1926 | #: rhodecode/templates/base/base.html:242 | |||
|
1927 | #: rhodecode/templates/branches/branches.html:13 | |||
|
1928 | msgid "branches" | |||
|
1929 | msgstr "ramos" | |||
|
1930 | ||||
|
1931 | #: rhodecode/templates/base/base.html:249 | |||
|
1932 | #: rhodecode/templates/branches/branches_data.html:52 | |||
|
1933 | msgid "There are no branches yet" | |||
|
1934 | msgstr "Ainda não há ramos" | |||
|
1935 | ||||
|
1936 | #: rhodecode/templates/base/base.html:254 | |||
|
1937 | #: rhodecode/templates/shortlog/shortlog_data.html:10 | |||
|
1938 | #: rhodecode/templates/tags/tags.html:14 | |||
|
1939 | msgid "tags" | |||
|
1940 | msgstr "etiquetas" | |||
|
1941 | ||||
|
1942 | #: rhodecode/templates/base/base.html:261 | |||
|
1943 | #: rhodecode/templates/tags/tags_data.html:32 | |||
|
1944 | msgid "There are no tags yet" | |||
|
1945 | msgstr "Ainda não há etiquetas" | |||
|
1946 | ||||
|
1947 | #: rhodecode/templates/base/base.html:277 | |||
|
1948 | #: rhodecode/templates/base/base.html:281 | |||
|
1949 | #: rhodecode/templates/files/files_annotate.html:40 | |||
|
1950 | #: rhodecode/templates/files/files_source.html:11 | |||
|
1951 | msgid "Options" | |||
|
1952 | msgstr "Opções" | |||
|
1953 | ||||
|
1954 | #: rhodecode/templates/base/base.html:286 | |||
|
1955 | #: rhodecode/templates/base/base.html:288 | |||
|
1956 | #: rhodecode/templates/base/base.html:306 | |||
|
1957 | msgid "settings" | |||
|
1958 | msgstr "configurações" | |||
|
1959 | ||||
|
1960 | #: rhodecode/templates/base/base.html:292 | |||
|
1961 | msgid "search" | |||
|
1962 | msgstr "pesquisar" | |||
|
1963 | ||||
|
1964 | #: rhodecode/templates/base/base.html:299 | |||
|
1965 | msgid "journal" | |||
|
1966 | msgstr "diário" | |||
|
1967 | ||||
|
1968 | #: rhodecode/templates/base/base.html:301 | |||
|
1969 | msgid "repositories groups" | |||
|
1970 | msgstr "grupos de repositórios" | |||
|
1971 | ||||
|
1972 | #: rhodecode/templates/base/base.html:302 | |||
|
1973 | msgid "users" | |||
|
1974 | msgstr "usuários" | |||
|
1975 | ||||
|
1976 | #: rhodecode/templates/base/base.html:303 | |||
|
1977 | msgid "users groups" | |||
|
1978 | msgstr "grupos de usuários" | |||
|
1979 | ||||
|
1980 | #: rhodecode/templates/base/base.html:304 | |||
|
1981 | msgid "permissions" | |||
|
1982 | msgstr "permissões" | |||
|
1983 | ||||
|
1984 | #: rhodecode/templates/base/base.html:317 | |||
|
1985 | #: rhodecode/templates/base/base.html:319 | |||
|
1986 | #: rhodecode/templates/followers/followers.html:5 | |||
|
1987 | msgid "Followers" | |||
|
1988 | msgstr "Seguidores" | |||
|
1989 | ||||
|
1990 | #: rhodecode/templates/base/base.html:325 | |||
|
1991 | #: rhodecode/templates/base/base.html:327 | |||
|
1992 | #: rhodecode/templates/forks/forks.html:5 | |||
|
1993 | msgid "Forks" | |||
|
1994 | msgstr "Bifurcações" | |||
|
1995 | ||||
|
1996 | #: rhodecode/templates/base/base.html:356 | |||
|
1997 | #: rhodecode/templates/base/base.html:358 | |||
|
1998 | #: rhodecode/templates/base/base.html:360 | |||
|
1999 | #: rhodecode/templates/search/search.html:4 | |||
|
2000 | #: rhodecode/templates/search/search.html:24 | |||
|
2001 | #: rhodecode/templates/search/search.html:46 | |||
|
2002 | msgid "Search" | |||
|
2003 | msgstr "Pesquisar" | |||
|
2004 | ||||
|
2005 | #: rhodecode/templates/base/root.html:57 | |||
|
2006 | #: rhodecode/templates/journal/journal.html:48 | |||
|
2007 | #: rhodecode/templates/summary/summary.html:36 | |||
|
2008 | msgid "Stop following this repository" | |||
|
2009 | msgstr "Parar de seguir este repositório" | |||
|
2010 | ||||
|
2011 | #: rhodecode/templates/base/root.html:66 | |||
|
2012 | #: rhodecode/templates/summary/summary.html:40 | |||
|
2013 | msgid "Start following this repository" | |||
|
2014 | msgstr "Passar a seguir este repositório" | |||
|
2015 | ||||
|
2016 | #: rhodecode/templates/branches/branches_data.html:4 | |||
|
2017 | #: rhodecode/templates/tags/tags_data.html:4 | |||
|
2018 | msgid "date" | |||
|
2019 | msgstr "data" | |||
|
2020 | ||||
|
2021 | #: rhodecode/templates/branches/branches_data.html:6 | |||
|
2022 | #: rhodecode/templates/shortlog/shortlog_data.html:7 | |||
|
2023 | #: rhodecode/templates/tags/tags_data.html:6 | |||
|
2024 | msgid "author" | |||
|
2025 | msgstr "autor" | |||
|
2026 | ||||
|
2027 | #: rhodecode/templates/branches/branches_data.html:8 | |||
|
2028 | #: rhodecode/templates/shortlog/shortlog_data.html:11 | |||
|
2029 | #: rhodecode/templates/tags/tags_data.html:8 | |||
|
2030 | msgid "links" | |||
|
2031 | msgstr "inks" | |||
|
2032 | ||||
|
2033 | #: rhodecode/templates/branches/branches_data.html:23 | |||
|
2034 | #: rhodecode/templates/branches/branches_data.html:43 | |||
|
2035 | #: rhodecode/templates/shortlog/shortlog_data.html:39 | |||
|
2036 | #: rhodecode/templates/tags/tags_data.html:24 | |||
|
2037 | msgid "changeset" | |||
|
2038 | msgstr "conjunto de mudanças" | |||
|
2039 | ||||
|
2040 | #: rhodecode/templates/branches/branches_data.html:25 | |||
|
2041 | #: rhodecode/templates/branches/branches_data.html:45 | |||
|
2042 | #: rhodecode/templates/files/files.html:12 | |||
|
2043 | #: rhodecode/templates/shortlog/shortlog_data.html:41 | |||
|
2044 | #: rhodecode/templates/summary/summary.html:233 | |||
|
2045 | #: rhodecode/templates/tags/tags_data.html:26 | |||
|
2046 | msgid "files" | |||
|
2047 | msgstr "arquivos" | |||
|
2048 | ||||
|
2049 | #: rhodecode/templates/changelog/changelog.html:14 | |||
|
2050 | msgid "showing " | |||
|
2051 | msgstr "mostrando " | |||
|
2052 | ||||
|
2053 | #: rhodecode/templates/changelog/changelog.html:14 | |||
|
2054 | msgid "out of" | |||
|
2055 | msgstr "de" | |||
|
2056 | ||||
|
2057 | #: rhodecode/templates/changelog/changelog.html:37 | |||
|
2058 | msgid "Show" | |||
|
2059 | msgstr "Mostrar" | |||
|
2060 | ||||
|
2061 | #: rhodecode/templates/changelog/changelog.html:50 | |||
|
2062 | #: rhodecode/templates/changeset/changeset.html:42 | |||
|
2063 | #: rhodecode/templates/summary/summary.html:609 | |||
|
2064 | msgid "commit" | |||
|
2065 | msgstr "commit" | |||
|
2066 | ||||
|
2067 | #: rhodecode/templates/changelog/changelog.html:63 | |||
|
2068 | msgid "Affected number of files, click to show more details" | |||
|
2069 | msgstr "Número de arquivos afetados, clique para mostrar mais detalhes" | |||
|
2070 | ||||
|
2071 | #: rhodecode/templates/changelog/changelog.html:67 | |||
|
2072 | #: rhodecode/templates/changeset/changeset.html:66 | |||
|
2073 | msgid "merge" | |||
|
2074 | msgstr "mesclar" | |||
|
2075 | ||||
|
2076 | #: rhodecode/templates/changelog/changelog.html:72 | |||
|
2077 | #: rhodecode/templates/changeset/changeset.html:72 | |||
|
2078 | msgid "Parent" | |||
|
2079 | msgstr "Progenitor" | |||
|
2080 | ||||
|
2081 | #: rhodecode/templates/changelog/changelog.html:77 | |||
|
2082 | #: rhodecode/templates/changeset/changeset.html:77 | |||
|
2083 | msgid "No parents" | |||
|
2084 | msgstr "Sem progenitores" | |||
|
2085 | ||||
|
2086 | #: rhodecode/templates/changelog/changelog.html:82 | |||
|
2087 | #: rhodecode/templates/changeset/changeset.html:80 | |||
|
2088 | #: rhodecode/templates/files/files.html:29 | |||
|
2089 | #: rhodecode/templates/files/files_annotate.html:25 | |||
|
2090 | #: rhodecode/templates/files/files_edit.html:33 | |||
|
2091 | #: rhodecode/templates/shortlog/shortlog_data.html:9 | |||
|
2092 | msgid "branch" | |||
|
2093 | msgstr "ramo" | |||
|
2094 | ||||
|
2095 | #: rhodecode/templates/changelog/changelog.html:86 | |||
|
2096 | #: rhodecode/templates/changeset/changeset.html:83 | |||
|
2097 | msgid "tag" | |||
|
2098 | msgstr "etiqueta" | |||
|
2099 | ||||
|
2100 | #: rhodecode/templates/changelog/changelog.html:122 | |||
|
2101 | msgid "Show selected changes __S -> __E" | |||
|
2102 | msgstr "Mostrar alterações selecionadas __S -> __E" | |||
|
2103 | ||||
|
2104 | #: rhodecode/templates/changelog/changelog.html:172 | |||
|
2105 | #: rhodecode/templates/shortlog/shortlog_data.html:61 | |||
|
2106 | msgid "There are no changes yet" | |||
|
2107 | msgstr "Ainda não há alteações" | |||
|
2108 | ||||
|
2109 | #: rhodecode/templates/changelog/changelog_details.html:2 | |||
|
2110 | #: rhodecode/templates/changeset/changeset.html:55 | |||
|
2111 | msgid "removed" | |||
|
2112 | msgstr "removidos" | |||
|
2113 | ||||
|
2114 | #: rhodecode/templates/changelog/changelog_details.html:3 | |||
|
2115 | #: rhodecode/templates/changeset/changeset.html:56 | |||
|
2116 | msgid "changed" | |||
|
2117 | msgstr "alterados" | |||
|
2118 | ||||
|
2119 | #: rhodecode/templates/changelog/changelog_details.html:4 | |||
|
2120 | #: rhodecode/templates/changeset/changeset.html:57 | |||
|
2121 | msgid "added" | |||
|
2122 | msgstr "adicionados" | |||
|
2123 | ||||
|
2124 | #: rhodecode/templates/changelog/changelog_details.html:6 | |||
|
2125 | #: rhodecode/templates/changelog/changelog_details.html:7 | |||
|
2126 | #: rhodecode/templates/changelog/changelog_details.html:8 | |||
|
2127 | #: rhodecode/templates/changeset/changeset.html:59 | |||
|
2128 | #: rhodecode/templates/changeset/changeset.html:60 | |||
|
2129 | #: rhodecode/templates/changeset/changeset.html:61 | |||
|
2130 | #, python-format | |||
|
2131 | msgid "affected %s files" | |||
|
2132 | msgstr "%s arquivos afetados" | |||
|
2133 | ||||
|
2134 | #: rhodecode/templates/changeset/changeset.html:6 | |||
|
2135 | #: rhodecode/templates/changeset/changeset.html:14 | |||
|
2136 | #: rhodecode/templates/changeset/changeset.html:31 | |||
|
2137 | msgid "Changeset" | |||
|
2138 | msgstr "Conjunto de Mudanças" | |||
|
2139 | ||||
|
2140 | #: rhodecode/templates/changeset/changeset.html:32 | |||
|
2141 | #: rhodecode/templates/changeset/changeset.html:121 | |||
|
2142 | #: rhodecode/templates/changeset/changeset_range.html:78 | |||
|
2143 | #: rhodecode/templates/files/file_diff.html:32 | |||
|
2144 | #: rhodecode/templates/files/file_diff.html:42 | |||
|
2145 | msgid "raw diff" | |||
|
2146 | msgstr "diff bruto" | |||
|
2147 | ||||
|
2148 | #: rhodecode/templates/changeset/changeset.html:34 | |||
|
2149 | #: rhodecode/templates/changeset/changeset.html:123 | |||
|
2150 | #: rhodecode/templates/changeset/changeset_range.html:80 | |||
|
2151 | #: rhodecode/templates/files/file_diff.html:34 | |||
|
2152 | msgid "download diff" | |||
|
2153 | msgstr "descarregar diff" | |||
|
2154 | ||||
|
2155 | #: rhodecode/templates/changeset/changeset.html:90 | |||
|
2156 | #, python-format | |||
|
2157 | msgid "%s files affected with %s additions and %s deletions." | |||
|
2158 | msgstr "%s arquivos afetados com %s adições e %s exclusões" | |||
|
2159 | ||||
|
2160 | #: rhodecode/templates/changeset/changeset.html:101 | |||
|
2161 | msgid "Changeset was too big and was cut off..." | |||
|
2162 | msgstr "Conjunto de mudanças era grande demais e foi cortado..." | |||
|
2163 | ||||
|
2164 | #: rhodecode/templates/changeset/changeset.html:119 | |||
|
2165 | #: rhodecode/templates/changeset/changeset_range.html:76 | |||
|
2166 | #: rhodecode/templates/files/file_diff.html:30 | |||
|
2167 | msgid "diff" | |||
|
2168 | msgstr "diff" | |||
|
2169 | ||||
|
2170 | #: rhodecode/templates/changeset/changeset.html:132 | |||
|
2171 | #: rhodecode/templates/changeset/changeset_range.html:89 | |||
|
2172 | msgid "No changes in this file" | |||
|
2173 | msgstr "Nenhuma alteração nesse arquivo" | |||
|
2174 | ||||
|
2175 | #: rhodecode/templates/changeset/changeset_range.html:30 | |||
|
2176 | msgid "Compare View" | |||
|
2177 | msgstr "Exibir Comparação" | |||
|
2178 | ||||
|
2179 | #: rhodecode/templates/changeset/changeset_range.html:52 | |||
|
2180 | msgid "Files affected" | |||
|
2181 | msgstr "Arquivos afetados" | |||
|
2182 | ||||
|
2183 | #: rhodecode/templates/errors/error_document.html:44 | |||
|
2184 | #, python-format | |||
|
2185 | msgid "You will be redirected to %s in %s seconds" | |||
|
2186 | msgstr "Você será redirecionado para %s em %s segundos" | |||
|
2187 | ||||
|
2188 | #: rhodecode/templates/files/file_diff.html:4 | |||
|
2189 | #: rhodecode/templates/files/file_diff.html:12 | |||
|
2190 | msgid "File diff" | |||
|
2191 | msgstr "Diff do arquivo" | |||
|
2192 | ||||
|
2193 | #: rhodecode/templates/files/file_diff.html:42 | |||
|
2194 | msgid "Diff is to big to display" | |||
|
2195 | msgstr "Diff é grande demais para exibir" | |||
|
2196 | ||||
|
2197 | #: rhodecode/templates/files/files.html:37 | |||
|
2198 | #: rhodecode/templates/files/files_annotate.html:31 | |||
|
2199 | #: rhodecode/templates/files/files_edit.html:39 | |||
|
2200 | msgid "Location" | |||
|
2201 | msgstr "Local" | |||
|
2202 | ||||
|
2203 | #: rhodecode/templates/files/files.html:46 | |||
|
2204 | msgid "Go back" | |||
|
2205 | msgstr "Voltar" | |||
|
2206 | ||||
|
2207 | #: rhodecode/templates/files/files.html:47 | |||
|
2208 | msgid "No files at given path" | |||
|
2209 | msgstr "Nenhum arquivo no caminho especificado" | |||
|
2210 | ||||
|
2211 | #: rhodecode/templates/files/files_annotate.html:4 | |||
|
2212 | msgid "File annotate" | |||
|
2213 | msgstr "Anotar arquivo" | |||
|
2214 | ||||
|
2215 | #: rhodecode/templates/files/files_annotate.html:12 | |||
|
2216 | msgid "annotate" | |||
|
2217 | msgstr "anotar" | |||
|
2218 | ||||
|
2219 | #: rhodecode/templates/files/files_annotate.html:33 | |||
|
2220 | #: rhodecode/templates/files/files_browser.html:160 | |||
|
2221 | #: rhodecode/templates/files/files_source.html:2 | |||
|
2222 | msgid "Revision" | |||
|
2223 | msgstr "Revisão" | |||
|
2224 | ||||
|
2225 | #: rhodecode/templates/files/files_annotate.html:36 | |||
|
2226 | #: rhodecode/templates/files/files_browser.html:158 | |||
|
2227 | #: rhodecode/templates/files/files_source.html:7 | |||
|
2228 | msgid "Size" | |||
|
2229 | msgstr "Tamanho" | |||
|
2230 | ||||
|
2231 | #: rhodecode/templates/files/files_annotate.html:38 | |||
|
2232 | #: rhodecode/templates/files/files_browser.html:159 | |||
|
2233 | #: rhodecode/templates/files/files_source.html:9 | |||
|
2234 | msgid "Mimetype" | |||
|
2235 | msgstr "Mimetype" | |||
|
2236 | ||||
|
2237 | #: rhodecode/templates/files/files_annotate.html:41 | |||
|
2238 | msgid "show source" | |||
|
2239 | msgstr "mostrar fonte" | |||
|
2240 | ||||
|
2241 | #: rhodecode/templates/files/files_annotate.html:43 | |||
|
2242 | #: rhodecode/templates/files/files_annotate.html:78 | |||
|
2243 | #: rhodecode/templates/files/files_source.html:14 | |||
|
2244 | #: rhodecode/templates/files/files_source.html:51 | |||
|
2245 | msgid "show as raw" | |||
|
2246 | msgstr "mostrar como bruto" | |||
|
2247 | ||||
|
2248 | #: rhodecode/templates/files/files_annotate.html:45 | |||
|
2249 | #: rhodecode/templates/files/files_source.html:16 | |||
|
2250 | msgid "download as raw" | |||
|
2251 | msgstr "descarregar como bruto" | |||
|
2252 | ||||
|
2253 | #: rhodecode/templates/files/files_annotate.html:54 | |||
|
2254 | #: rhodecode/templates/files/files_source.html:25 | |||
|
2255 | msgid "History" | |||
|
2256 | msgstr "Histórico" | |||
|
2257 | ||||
|
2258 | #: rhodecode/templates/files/files_annotate.html:73 | |||
|
2259 | #: rhodecode/templates/files/files_source.html:46 | |||
|
2260 | #, python-format | |||
|
2261 | msgid "Binary file (%s)" | |||
|
2262 | msgstr "Arquivo binário (%s)" | |||
|
2263 | ||||
|
2264 | #: rhodecode/templates/files/files_annotate.html:78 | |||
|
2265 | #: rhodecode/templates/files/files_source.html:51 | |||
|
2266 | msgid "File is too big to display" | |||
|
2267 | msgstr "Arquivo é grande demais para exibir" | |||
|
2268 | ||||
|
2269 | #: rhodecode/templates/files/files_browser.html:13 | |||
|
2270 | msgid "view" | |||
|
2271 | msgstr "ver" | |||
|
2272 | ||||
|
2273 | #: rhodecode/templates/files/files_browser.html:14 | |||
|
2274 | msgid "previous revision" | |||
|
2275 | msgstr "revisão anterior" | |||
|
2276 | ||||
|
2277 | #: rhodecode/templates/files/files_browser.html:16 | |||
|
2278 | msgid "next revision" | |||
|
2279 | msgstr "próxima revisão" | |||
|
2280 | ||||
|
2281 | #: rhodecode/templates/files/files_browser.html:23 | |||
|
2282 | msgid "follow current branch" | |||
|
2283 | msgstr "seguir ramo atual" | |||
|
2284 | ||||
|
2285 | #: rhodecode/templates/files/files_browser.html:27 | |||
|
2286 | msgid "search file list" | |||
|
2287 | msgstr "pesquisar lista de arquivos" | |||
|
2288 | ||||
|
2289 | #: rhodecode/templates/files/files_browser.html:32 | |||
|
2290 | msgid "Loading file list..." | |||
|
2291 | msgstr "Carregando lista de arquivos..." | |||
|
2292 | ||||
|
2293 | #: rhodecode/templates/files/files_browser.html:111 | |||
|
2294 | msgid "search truncated" | |||
|
2295 | msgstr "pesquisa truncada" | |||
|
2296 | ||||
|
2297 | #: rhodecode/templates/files/files_browser.html:122 | |||
|
2298 | msgid "no matching files" | |||
|
2299 | msgstr "nenhum arquivo corresponde" | |||
|
2300 | ||||
|
2301 | #: rhodecode/templates/files/files_browser.html:161 | |||
|
2302 | msgid "Last modified" | |||
|
2303 | msgstr "Última alteração" | |||
|
2304 | ||||
|
2305 | #: rhodecode/templates/files/files_browser.html:162 | |||
|
2306 | msgid "Last commiter" | |||
|
2307 | msgstr "Último commiter" | |||
|
2308 | ||||
|
2309 | #: rhodecode/templates/files/files_edit.html:4 | |||
|
2310 | msgid "Edit file" | |||
|
2311 | msgstr "Editar arquivo" | |||
|
2312 | ||||
|
2313 | #: rhodecode/templates/files/files_edit.html:19 | |||
|
2314 | msgid "edit file" | |||
|
2315 | msgstr "editar arquivo" | |||
|
2316 | ||||
|
2317 | #: rhodecode/templates/files/files_edit.html:45 | |||
|
2318 | #: rhodecode/templates/shortlog/shortlog_data.html:5 | |||
|
2319 | msgid "commit message" | |||
|
2320 | msgstr "mensagem de commit" | |||
|
2321 | ||||
|
2322 | #: rhodecode/templates/files/files_edit.html:51 | |||
|
2323 | msgid "Commit changes" | |||
|
2324 | msgstr "Realizar commit das alterações" | |||
|
2325 | ||||
|
2326 | #: rhodecode/templates/files/files_source.html:12 | |||
|
2327 | msgid "show annotation" | |||
|
2328 | msgstr "mostrar anotação" | |||
|
2329 | ||||
|
2330 | #: rhodecode/templates/files/files_source.html:153 | |||
|
2331 | msgid "Selection link" | |||
|
2332 | msgstr "Link da seleção" | |||
|
2333 | ||||
|
2334 | #: rhodecode/templates/followers/followers.html:13 | |||
|
2335 | msgid "followers" | |||
|
2336 | msgstr "seguidores" | |||
|
2337 | ||||
|
2338 | #: rhodecode/templates/followers/followers_data.html:12 | |||
|
2339 | msgid "Started following" | |||
|
2340 | msgstr "Passou a seguir" | |||
|
2341 | ||||
|
2342 | #: rhodecode/templates/forks/forks.html:13 | |||
|
2343 | msgid "forks" | |||
|
2344 | msgstr "bifurcações" | |||
|
2345 | ||||
|
2346 | #: rhodecode/templates/forks/forks_data.html:17 | |||
|
2347 | msgid "forked" | |||
|
2348 | msgstr "bifurcado" | |||
|
2349 | ||||
|
2350 | #: rhodecode/templates/forks/forks_data.html:34 | |||
|
2351 | msgid "There are no forks yet" | |||
|
2352 | msgstr "Ainda não há bifurcações" | |||
|
2353 | ||||
|
2354 | #: rhodecode/templates/journal/journal.html:34 | |||
|
2355 | msgid "Following" | |||
|
2356 | msgstr "Seguindo" | |||
|
2357 | ||||
|
2358 | #: rhodecode/templates/journal/journal.html:41 | |||
|
2359 | msgid "following user" | |||
|
2360 | msgstr "seguindo usuário" | |||
|
2361 | ||||
|
2362 | #: rhodecode/templates/journal/journal.html:41 | |||
|
2363 | msgid "user" | |||
|
2364 | msgstr "usuário" | |||
|
2365 | ||||
|
2366 | #: rhodecode/templates/journal/journal.html:65 | |||
|
2367 | msgid "You are not following any users or repositories" | |||
|
2368 | msgstr "Você não está seguindo quaisquer usuários ou repositórios" | |||
|
2369 | ||||
|
2370 | #: rhodecode/templates/journal/journal_data.html:46 | |||
|
2371 | msgid "No entries yet" | |||
|
2372 | msgstr "Ainda não há entradas" | |||
|
2373 | ||||
|
2374 | #: rhodecode/templates/journal/public_journal.html:17 | |||
|
2375 | msgid "Public Journal" | |||
|
2376 | msgstr "Diário Público" | |||
|
2377 | ||||
|
2378 | #: rhodecode/templates/search/search.html:7 | |||
|
2379 | #: rhodecode/templates/search/search.html:26 | |||
|
2380 | msgid "in repository: " | |||
|
2381 | msgstr "no repositório" | |||
|
2382 | ||||
|
2383 | #: rhodecode/templates/search/search.html:9 | |||
|
2384 | #: rhodecode/templates/search/search.html:28 | |||
|
2385 | msgid "in all repositories" | |||
|
2386 | msgstr "em todos os repositórios" | |||
|
2387 | ||||
|
2388 | #: rhodecode/templates/search/search.html:42 | |||
|
2389 | msgid "Search term" | |||
|
2390 | msgstr "Termo de pesquisa" | |||
|
2391 | ||||
|
2392 | #: rhodecode/templates/search/search.html:54 | |||
|
2393 | msgid "Search in" | |||
|
2394 | msgstr "Pesquisando em" | |||
|
2395 | ||||
|
2396 | #: rhodecode/templates/search/search.html:57 | |||
|
2397 | msgid "File contents" | |||
|
2398 | msgstr "Conteúdo dos arquivos" | |||
|
2399 | ||||
|
2400 | #: rhodecode/templates/search/search.html:59 | |||
|
2401 | msgid "File names" | |||
|
2402 | msgstr "Nomes dos arquivos" | |||
|
2403 | ||||
|
2404 | #: rhodecode/templates/search/search_content.html:20 | |||
|
2405 | #: rhodecode/templates/search/search_path.html:15 | |||
|
2406 | msgid "Permission denied" | |||
|
2407 | msgstr "Permissão negada" | |||
|
2408 | ||||
|
2409 | #: rhodecode/templates/settings/repo_fork.html:5 | |||
|
2410 | msgid "Fork" | |||
|
2411 | msgstr "Bifurcação" | |||
|
2412 | ||||
|
2413 | #: rhodecode/templates/settings/repo_fork.html:31 | |||
|
2414 | msgid "Fork name" | |||
|
2415 | msgstr "Nome da bifurcação" | |||
|
2416 | ||||
|
2417 | #: rhodecode/templates/settings/repo_fork.html:55 | |||
|
2418 | msgid "fork this repository" | |||
|
2419 | msgstr "bifurcar este repositório" | |||
|
2420 | ||||
|
2421 | #: rhodecode/templates/shortlog/shortlog.html:5 | |||
|
2422 | #: rhodecode/templates/summary/summary.html:666 | |||
|
2423 | msgid "Shortlog" | |||
|
2424 | msgstr "Log resumido" | |||
|
2425 | ||||
|
2426 | #: rhodecode/templates/shortlog/shortlog.html:14 | |||
|
2427 | msgid "shortlog" | |||
|
2428 | msgstr "log resumido" | |||
|
2429 | ||||
|
2430 | #: rhodecode/templates/shortlog/shortlog_data.html:6 | |||
|
2431 | msgid "age" | |||
|
2432 | msgstr "idade" | |||
|
2433 | ||||
|
2434 | #: rhodecode/templates/summary/summary.html:12 | |||
|
2435 | msgid "summary" | |||
|
2436 | msgstr "sumário" | |||
|
2437 | ||||
|
2438 | #: rhodecode/templates/summary/summary.html:79 | |||
|
2439 | msgid "remote clone" | |||
|
2440 | msgstr "clone remoto" | |||
|
2441 | ||||
|
2442 | #: rhodecode/templates/summary/summary.html:121 | |||
|
2443 | msgid "by" | |||
|
2444 | msgstr "por" | |||
|
2445 | ||||
|
2446 | #: rhodecode/templates/summary/summary.html:128 | |||
|
2447 | msgid "Clone url" | |||
|
2448 | msgstr "URL de clonagem" | |||
|
2449 | ||||
|
2450 | #: rhodecode/templates/summary/summary.html:137 | |||
|
2451 | msgid "Trending source files" | |||
|
2452 | msgstr "Tendências nos arquivos fonte" | |||
|
2453 | ||||
|
2454 | #: rhodecode/templates/summary/summary.html:146 | |||
|
2455 | msgid "Download" | |||
|
2456 | msgstr "Download" | |||
|
2457 | ||||
|
2458 | #: rhodecode/templates/summary/summary.html:150 | |||
|
2459 | msgid "There are no downloads yet" | |||
|
2460 | msgstr "Ainda não há downloads" | |||
|
2461 | ||||
|
2462 | #: rhodecode/templates/summary/summary.html:152 | |||
|
2463 | msgid "Downloads are disabled for this repository" | |||
|
2464 | msgstr "Downloads estão desabilitados para este repositório" | |||
|
2465 | ||||
|
2466 | #: rhodecode/templates/summary/summary.html:154 | |||
|
2467 | #: rhodecode/templates/summary/summary.html:320 | |||
|
2468 | msgid "enable" | |||
|
2469 | msgstr "habilitar" | |||
|
2470 | ||||
|
2471 | #: rhodecode/templates/summary/summary.html:162 | |||
|
2472 | #: rhodecode/templates/summary/summary.html:297 | |||
|
2473 | #, python-format | |||
|
2474 | msgid "Download %s as %s" | |||
|
2475 | msgstr "Descarregar %s como %s" | |||
|
2476 | ||||
|
2477 | #: rhodecode/templates/summary/summary.html:168 | |||
|
2478 | msgid "Check this to download archive with subrepos" | |||
|
2479 | msgstr "Marque isto para descarregar arquivo com subrepositórios" | |||
|
2480 | ||||
|
2481 | #: rhodecode/templates/summary/summary.html:168 | |||
|
2482 | msgid "with subrepos" | |||
|
2483 | msgstr "com subrepositórios" | |||
|
2484 | ||||
|
2485 | #: rhodecode/templates/summary/summary.html:176 | |||
|
2486 | msgid "Feeds" | |||
|
2487 | msgstr "Feeds" | |||
|
2488 | ||||
|
2489 | #: rhodecode/templates/summary/summary.html:257 | |||
|
2490 | #: rhodecode/templates/summary/summary.html:684 | |||
|
2491 | #: rhodecode/templates/summary/summary.html:695 | |||
|
2492 | msgid "show more" | |||
|
2493 | msgstr "mostrar mais" | |||
|
2494 | ||||
|
2495 | #: rhodecode/templates/summary/summary.html:312 | |||
|
2496 | msgid "Commit activity by day / author" | |||
|
2497 | msgstr "Atividade de commit por dia / autor" | |||
|
2498 | ||||
|
2499 | #: rhodecode/templates/summary/summary.html:324 | |||
|
2500 | msgid "Loaded in" | |||
|
2501 | msgstr "Carregado em" | |||
|
2502 | ||||
|
2503 | #: rhodecode/templates/summary/summary.html:603 | |||
|
2504 | msgid "commits" | |||
|
2505 | msgstr "commits" | |||
|
2506 | ||||
|
2507 | #: rhodecode/templates/summary/summary.html:604 | |||
|
2508 | msgid "files added" | |||
|
2509 | msgstr "arquivos adicionados" | |||
|
2510 | ||||
|
2511 | #: rhodecode/templates/summary/summary.html:605 | |||
|
2512 | msgid "files changed" | |||
|
2513 | msgstr "arquivos alterados" | |||
|
2514 | ||||
|
2515 | #: rhodecode/templates/summary/summary.html:606 | |||
|
2516 | msgid "files removed" | |||
|
2517 | msgstr "arquivos removidos" | |||
|
2518 | ||||
|
2519 | #: rhodecode/templates/summary/summary.html:610 | |||
|
2520 | msgid "file added" | |||
|
2521 | msgstr "arquivo adicionado" | |||
|
2522 | ||||
|
2523 | #: rhodecode/templates/summary/summary.html:611 | |||
|
2524 | msgid "file changed" | |||
|
2525 | msgstr "arquivo alterado" | |||
|
2526 | ||||
|
2527 | #: rhodecode/templates/summary/summary.html:612 | |||
|
2528 | msgid "file removed" | |||
|
2529 | msgstr "arquivo removido" | |||
|
2530 |
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, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
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 |
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 |
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 |
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 100755 |
|
NO CONTENT: new file 100755 | ||
The requested commit or file is too big and content was truncated. Show full diff |
1 | NO CONTENT: new file 100755 |
|
NO CONTENT: new file 100755 | ||
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 |
@@ -4,4 +4,12 b' List of contributors to RhodeCode projec' | |||||
4 | Jason Harris <jason@jasonfharris.com> |
|
4 | Jason Harris <jason@jasonfharris.com> | |
5 | Thayne Harbaugh <thayne@fusionio.com> |
|
5 | Thayne Harbaugh <thayne@fusionio.com> | |
6 | cejones |
|
6 | cejones | |
7 | Thomas Waldmann <tw-public@gmx.de> No newline at end of file |
|
7 | Thomas Waldmann <tw-public@gmx.de> | |
|
8 | Lorenzo M. Catucci <lorenzo@sancho.ccd.uniroma2.it> | |||
|
9 | Dmitri Kuznetsov | |||
|
10 | Jared Bunting <jared.bunting@peachjean.com> | |||
|
11 | Steve Romanow <slestak989@gmail.com> | |||
|
12 | Augosto Hermann <augusto.herrmann@planejamento.gov.br> | |||
|
13 | Ankit Solanki <ankit.solanki@gmail.com> | |||
|
14 | Liad Shani <liadff@gmail.com> | |||
|
15 | No newline at end of file |
@@ -14,9 +14,6 b' recursive-include init.d *' | |||||
14 | recursive-include rhodecode/public/css * |
|
14 | recursive-include rhodecode/public/css * | |
15 | recursive-include rhodecode/public/images * |
|
15 | recursive-include rhodecode/public/images * | |
16 | #js |
|
16 | #js | |
17 |
include rhodecode/public/js |
|
17 | recursive-include rhodecode/public/js * | |
18 | include rhodecode/public/js/excanvas.min.js |
|
|||
19 | include rhodecode/public/js/yui.flot.js |
|
|||
20 | include rhodecode/public/js/graph.js |
|
|||
21 | #templates |
|
18 | #templates | |
22 | recursive-include rhodecode/templates * |
|
19 | recursive-include rhodecode/templates * |
@@ -1,4 +1,3 b'' | |||||
1 |
|
||||
2 |
|
|
1 | ================================================= | |
3 | Welcome to RhodeCode (RhodiumCode) documentation! |
|
2 | Welcome to RhodeCode (RhodiumCode) documentation! | |
4 | ================================================= |
|
3 | ================================================= | |
@@ -26,13 +25,13 b' The default access is anonymous but you ' | |||||
26 | using the following credentials: |
|
25 | using the following credentials: | |
27 |
|
26 | |||
28 | - username: demo |
|
27 | - username: demo | |
29 | - password: demo |
|
28 | - password: demo12 | |
30 |
|
29 | |||
31 | Source code |
|
30 | Source code | |
32 | ----------- |
|
31 | ----------- | |
33 |
|
32 | |||
34 | The latest sources can be obtained from official RhodeCode instance |
|
33 | The latest sources can be obtained from official RhodeCode instance | |
35 |
https:// |
|
34 | https://secure.rhodecode.org | |
36 |
|
35 | |||
37 |
|
36 | |||
38 | MIRRORS: |
|
37 | MIRRORS: | |
@@ -60,20 +59,28 b' RhodeCode Features' | |||||
60 | Supports http/https and LDAP |
|
59 | Supports http/https and LDAP | |
61 | - Full permissions (private/read/write/admin) and authentication per project. |
|
60 | - Full permissions (private/read/write/admin) and authentication per project. | |
62 | One account for web interface and mercurial_ push/pull/clone operations. |
|
61 | One account for web interface and mercurial_ push/pull/clone operations. | |
|
62 | - Have built in users groups for easier permission management | |||
|
63 | - Repository groups let you group repos and manage them easier. | |||
|
64 | - Users can fork other users repo. RhodeCode have also compare view to see | |||
|
65 | combined changeset for all changeset made within single push. | |||
|
66 | - Build in commit-api let's you add, edit and commit files right from RhodeCode | |||
|
67 | interface using simple editor or upload form for binaries. | |||
63 | - Mako templates let's you customize the look and feel of the application. |
|
68 | - Mako templates let's you customize the look and feel of the application. | |
64 | - Beautiful diffs, annotations and source code browsing all colored by pygments. |
|
69 | - Beautiful diffs, annotations and source code browsing all colored by pygments. | |
|
70 | Raw diffs are made in git-diff format, including git_ binary-patches | |||
65 | - Mercurial_ branch graph and yui-flot powered graphs with zooming and statistics |
|
71 | - Mercurial_ branch graph and yui-flot powered graphs with zooming and statistics | |
66 | - Admin interface with user/permission management. Admin activity journal, logs |
|
72 | - Admin interface with user/permission management. Admin activity journal, logs | |
67 | pulls, pushes, forks, registrations and other actions made by all users. |
|
73 | pulls, pushes, forks, registrations and other actions made by all users. | |
68 |
- Server side forks. It is possible to fork a project and modify it freely |
|
74 | - Server side forks. It is possible to fork a project and modify it freely | |
69 | breaking the main repository. |
|
75 | without breaking the main repository. You can even write Your own hooks | |
|
76 | and install them | |||
70 | - Full text search powered by Whoosh on the source files, and file names. |
|
77 | - Full text search powered by Whoosh on the source files, and file names. | |
71 | Build in indexing daemons, with optional incremental index build |
|
78 | Build in indexing daemons, with optional incremental index build | |
72 | (no external search servers required all in one application) |
|
79 | (no external search servers required all in one application) | |
73 | - Setup project descriptions and info inside built in db for easy, non |
|
80 | - Setup project descriptions and info inside built in db for easy, non | |
74 | file-system operations |
|
81 | file-system operations | |
75 |
- Intelligent cache with invalidation after push or project change, provides |
|
82 | - Intelligent cache with invalidation after push or project change, provides | |
76 | performance and always up to date data. |
|
83 | high performance and always up to date data. | |
77 | - Rss / atom feeds, gravatar support, download sources as zip/tar/gz |
|
84 | - Rss / atom feeds, gravatar support, download sources as zip/tar/gz | |
78 | - Async tasks for speed and performance using celery_ (works without them too) |
|
85 | - Async tasks for speed and performance using celery_ (works without them too) | |
79 | - Backup scripts can do backup of whole app and send it over scp to desired |
|
86 | - Backup scripts can do backup of whole app and send it over scp to desired | |
@@ -87,17 +94,17 b' RhodeCode Features' | |||||
87 | Incoming / Plans |
|
94 | Incoming / Plans | |
88 | ---------------- |
|
95 | ---------------- | |
89 |
|
96 | |||
90 | - Project grouping |
|
97 | - Finer granular permissions per branch, repo group or subrepo | |
91 | - User groups/teams |
|
98 | - pull requests and web based merges | |
|
99 | - notification and message system | |||
92 | - SSH based authentication with server side key management |
|
100 | - SSH based authentication with server side key management | |
93 | - Code review (probably based on hg-review) |
|
101 | - Code review (probably based on hg-review) | |
94 | - Full git_ support, with push/pull server (currently in beta tests) |
|
102 | - Full git_ support, with push/pull server (currently in beta tests) | |
95 | - Redmine integration |
|
103 | - Redmine and other bugtrackers integration | |
96 | - Public accessible activity feeds |
|
|||
97 | - Commit based built in wiki system |
|
104 | - Commit based built in wiki system | |
98 | - Clone points and cloning from remote repositories into RhodeCode |
|
|||
99 | - More statistics and graph (global annotation + some more statistics) |
|
105 | - More statistics and graph (global annotation + some more statistics) | |
100 |
- Other advancements as development continues (or you can of course make |
|
106 | - Other advancements as development continues (or you can of course make | |
|
107 | additions and or requests) | |||
101 |
|
108 | |||
102 | License |
|
109 | License | |
103 | ------- |
|
110 | ------- |
@@ -7,6 +7,7 b'' | |||||
7 |
|
7 | |||
8 | [DEFAULT] |
|
8 | [DEFAULT] | |
9 | debug = true |
|
9 | debug = true | |
|
10 | pdebug = false | |||
10 | ################################################################################ |
|
11 | ################################################################################ | |
11 | ## Uncomment and replace with the address which should receive ## |
|
12 | ## Uncomment and replace with the address which should receive ## | |
12 | ## any error reports after application crash ## |
|
13 | ## any error reports after application crash ## | |
@@ -48,6 +49,8 b' index_dir = %(here)s/data/index' | |||||
48 | app_instance_uuid = develop |
|
49 | app_instance_uuid = develop | |
49 | cut_off_limit = 256000 |
|
50 | cut_off_limit = 256000 | |
50 | force_https = false |
|
51 | force_https = false | |
|
52 | commit_parse_limit = 25 | |||
|
53 | use_gravatar = true | |||
51 |
|
54 | |||
52 | #################################### |
|
55 | #################################### | |
53 | ### CELERY CONFIG #### |
|
56 | ### CELERY CONFIG #### | |
@@ -139,8 +142,9 b' logview.pylons.util = #eee' | |||||
139 | ######################################################### |
|
142 | ######################################################### | |
140 | ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ### |
|
143 | ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ### | |
141 | ######################################################### |
|
144 | ######################################################### | |
142 | sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db |
|
145 | #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db | |
143 | sqlalchemy.db1.echo = True |
|
146 | sqlalchemy.db1.url = postgresql://postgres:qwe@localhost/rhodecode | |
|
147 | sqlalchemy.db1.echo = false | |||
144 | sqlalchemy.db1.pool_recycle = 3600 |
|
148 | sqlalchemy.db1.pool_recycle = 3600 | |
145 | sqlalchemy.convert_unicode = true |
|
149 | sqlalchemy.convert_unicode = true | |
146 |
|
150 | |||
@@ -201,13 +205,13 b' propagate = 0' | |||||
201 | [handler_console] |
|
205 | [handler_console] | |
202 | class = StreamHandler |
|
206 | class = StreamHandler | |
203 | args = (sys.stderr,) |
|
207 | args = (sys.stderr,) | |
204 |
level = |
|
208 | level = DEBUG | |
205 | formatter = color_formatter |
|
209 | formatter = color_formatter | |
206 |
|
210 | |||
207 | [handler_console_sql] |
|
211 | [handler_console_sql] | |
208 | class = StreamHandler |
|
212 | class = StreamHandler | |
209 | args = (sys.stderr,) |
|
213 | args = (sys.stderr,) | |
210 |
level = |
|
214 | level = DEBUG | |
211 | formatter = color_formatter_sql |
|
215 | formatter = color_formatter_sql | |
212 |
|
216 | |||
213 | ################ |
|
217 | ################ | |
@@ -226,4 +230,4 b' datefmt = %Y-%m-%d %H:%M:%S' | |||||
226 | [formatter_color_formatter_sql] |
|
230 | [formatter_color_formatter_sql] | |
227 | class=rhodecode.lib.colored_formatter.ColorFormatterSql |
|
231 | class=rhodecode.lib.colored_formatter.ColorFormatterSql | |
228 | format= %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s |
|
232 | format= %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s | |
229 | datefmt = %Y-%m-%d %H:%M:%S No newline at end of file |
|
233 | datefmt = %Y-%m-%d %H:%M:%S |
@@ -7,4 +7,4 b' API Reference' | |||||
7 | :maxdepth: 3 |
|
7 | :maxdepth: 3 | |
8 |
|
8 | |||
9 | models |
|
9 | models | |
10 | No newline at end of file |
|
10 | api No newline at end of file |
@@ -3,7 +3,79 b'' | |||||
3 | Changelog |
|
3 | Changelog | |
4 | ========= |
|
4 | ========= | |
5 |
|
5 | |||
|
6 | 1.2.0 (**2011-10-07**) | |||
|
7 | ====================== | |||
6 |
|
8 | |||
|
9 | ||||
|
10 | news | |||
|
11 | ---- | |||
|
12 | ||||
|
13 | - implemented #47 repository groups | |||
|
14 | - implemented #89 Can setup google analytics code from settings menu | |||
|
15 | - implemented #91 added nicer looking archive urls with more download options | |||
|
16 | like tags, branches | |||
|
17 | - implemented #44 into file browsing, and added follow branch option | |||
|
18 | - implemented #84 downloads can be enabled/disabled for each repository | |||
|
19 | - anonymous repository can be cloned without having to pass default:default | |||
|
20 | into clone url | |||
|
21 | - fixed #90 whoosh indexer can index chooses repositories passed in command | |||
|
22 | line | |||
|
23 | - extended journal with day aggregates and paging | |||
|
24 | - implemented #107 source code lines highlight ranges | |||
|
25 | - implemented #93 customizable changelog on combined revision ranges - | |||
|
26 | equivalent of githubs compare view | |||
|
27 | - implemented #108 extended and more powerful LDAP configuration | |||
|
28 | - implemented #56 users groups | |||
|
29 | - major code rewrites optimized codes for speed and memory usage | |||
|
30 | - raw and diff downloads are now in git format | |||
|
31 | - setup command checks for write access to given path | |||
|
32 | - fixed many issues with international characters and unicode. It uses utf8 | |||
|
33 | decode with replace to provide less errors even with non utf8 encoded strings | |||
|
34 | - #125 added API KEY access to feeds | |||
|
35 | - #109 Repository can be created from external Mercurial link (aka. remote | |||
|
36 | repository, and manually updated (via pull) from admin panel | |||
|
37 | - beta git support - push/pull server + basic view for git repos | |||
|
38 | - added followers page and forks page | |||
|
39 | - server side file creation (with binary file upload interface) | |||
|
40 | and edition with commits powered by codemirror | |||
|
41 | - #111 file browser file finder, quick lookup files on whole file tree | |||
|
42 | - added quick login sliding menu into main page | |||
|
43 | - changelog uses lazy loading of affected files details, in some scenarios | |||
|
44 | this can improve speed of changelog page dramatically especially for | |||
|
45 | larger repositories. | |||
|
46 | - implements #214 added support for downloading subrepos in download menu. | |||
|
47 | - Added basic API for direct operations on rhodecode via JSON | |||
|
48 | - Implemented advanced hook management | |||
|
49 | ||||
|
50 | fixes | |||
|
51 | ----- | |||
|
52 | ||||
|
53 | - fixed file browser bug, when switching into given form revision the url was | |||
|
54 | not changing | |||
|
55 | - fixed propagation to error controller on simplehg and simplegit middlewares | |||
|
56 | - fixed error when trying to make a download on empty repository | |||
|
57 | - fixed problem with '[' chars in commit messages in journal | |||
|
58 | - fixed #99 Unicode errors, on file node paths with non utf-8 characters | |||
|
59 | - journal fork fixes | |||
|
60 | - removed issue with space inside renamed repository after deletion | |||
|
61 | - fixed strange issue on formencode imports | |||
|
62 | - fixed #126 Deleting repository on Windows, rename used incompatible chars. | |||
|
63 | - #150 fixes for errors on repositories mapped in db but corrupted in | |||
|
64 | filesystem | |||
|
65 | - fixed problem with ascendant characters in realm #181 | |||
|
66 | - fixed problem with sqlite file based database connection pool | |||
|
67 | - whoosh indexer and code stats share the same dynamic extensions map | |||
|
68 | - fixes #188 - relationship delete of repo_to_perm entry on user removal | |||
|
69 | - fixes issue #189 Trending source files shows "show more" when no more exist | |||
|
70 | - fixes issue #197 Relative paths for pidlocks | |||
|
71 | - fixes issue #198 password will require only 3 chars now for login form | |||
|
72 | - fixes issue #199 wrong redirection for non admin users after creating a repository | |||
|
73 | - fixes issues #202, bad db constraint made impossible to attach same group | |||
|
74 | more than one time. Affects only mysql/postgres | |||
|
75 | - fixes #218 os.kill patch for windows was missing sig param | |||
|
76 | - improved rendering of dag (they are not trimmed anymore when number of | |||
|
77 | heads exceeds 5) | |||
|
78 | ||||
7 | 1.1.8 (**2011-04-12**) |
|
79 | 1.1.8 (**2011-04-12**) | |
8 | ====================== |
|
80 | ====================== | |
9 |
|
81 | |||
@@ -34,6 +106,7 b' fixes' | |||||
34 | Thomas Waldmann |
|
106 | Thomas Waldmann | |
35 | - fixed issue #166 summary pager was skipping 10 revisions on second page |
|
107 | - fixed issue #166 summary pager was skipping 10 revisions on second page | |
36 |
|
108 | |||
|
109 | ||||
37 | 1.1.7 (**2011-03-23**) |
|
110 | 1.1.7 (**2011-03-23**) | |
38 | ====================== |
|
111 | ====================== | |
39 |
|
112 | |||
@@ -93,7 +166,6 b' fixes' | |||||
93 | - journal fixes |
|
166 | - journal fixes | |
94 | - fixed option to access repository just by entering http://server/<repo_name> |
|
167 | - fixed option to access repository just by entering http://server/<repo_name> | |
95 |
|
168 | |||
96 |
|
||||
97 | 1.1.3 (**2011-02-16**) |
|
169 | 1.1.3 (**2011-02-16**) | |
98 | ====================== |
|
170 | ====================== | |
99 |
|
171 |
@@ -19,8 +19,11 b' Documentation' | |||||
19 | .. toctree:: |
|
19 | .. toctree:: | |
20 | :maxdepth: 1 |
|
20 | :maxdepth: 1 | |
21 |
|
21 | |||
22 | enable_git |
|
22 | usage/general | |
23 | statistics |
|
23 | usage/enable_git | |
|
24 | usage/statistics | |||
|
25 | usage/backup | |||
|
26 | usage/api_key_access | |||
24 |
|
27 | |||
25 | **Develop** |
|
28 | **Develop** | |
26 |
|
29 |
@@ -3,19 +3,12 b'' | |||||
3 | Installation |
|
3 | Installation | |
4 | ============ |
|
4 | ============ | |
5 |
|
5 | |||
6 |
``RhodeCode`` is written entirely in Python. |
|
6 | ``RhodeCode`` is written entirely in Python. Before posting any issues make | |
7 | there are some third-party you must install. When RhodeCode is used |
|
7 | sure, your not missing any system libraries and using right version of | |
8 | together with celery you have to install some kind of message broker, |
|
8 | libraries required by RhodeCode. There's also restriction in terms of mercurial | |
9 | recommended one is rabbitmq_ to make the async tasks work. |
|
9 | clients. Minimal version of hg client known working fine with RhodeCode is | |
|
10 | **1.6**. If you're using older client, please upgrade. | |||
10 |
|
11 | |||
11 | Of course RhodeCode works in sync mode also and then you do not have to install |
|
|||
12 | any third party applications. However, using Celery_ will give you a large |
|
|||
13 | speed improvement when using many big repositories. If you plan to use |
|
|||
14 | RhodeCode for say 7 to 10 small repositories, RhodeCode will perform perfectly |
|
|||
15 | well without celery running. |
|
|||
16 |
|
||||
17 | If you make the decision to run RhodeCode with celery make sure you run |
|
|||
18 | celeryd using paster and message broker together with the application. |
|
|||
19 |
|
12 | |||
20 | Installing RhodeCode from Cheese Shop |
|
13 | Installing RhodeCode from Cheese Shop | |
21 | ------------------------------------- |
|
14 | ------------------------------------- | |
@@ -40,7 +33,12 b' Step by step installation example' | |||||
40 | --------------------------------- |
|
33 | --------------------------------- | |
41 |
|
34 | |||
42 |
|
35 | |||
43 | - Assuming you have installed virtualenv_ create a new virtual environment using virtualenv:: |
|
36 | For installing RhodeCode i highly recommend using separate virtualenv_. This | |
|
37 | way many required by RhodeCode libraries will remain sandboxed from your main | |||
|
38 | python and making things less problematic when doing system python updates. | |||
|
39 | ||||
|
40 | - Assuming you have installed virtualenv_ create a new virtual environment | |||
|
41 | using virtualenv command:: | |||
44 |
|
42 | |||
45 | virtualenv --no-site-packages /var/www/rhodecode-venv |
|
43 | virtualenv --no-site-packages /var/www/rhodecode-venv | |
46 |
|
44 | |||
@@ -64,21 +62,40 b' Step by step installation example' | |||||
64 | ``virtualenv`` script. It's perfectly acceptable (and desirable) |
|
62 | ``virtualenv`` script. It's perfectly acceptable (and desirable) | |
65 | to create a virtualenv as a normal user. |
|
63 | to create a virtualenv as a normal user. | |
66 |
|
64 | |||
67 |
- Make a folder for rhodecode somewhere on the |
|
65 | - Make a folder for rhodecode data files, and configuration somewhere on the | |
|
66 | filesystem. For example:: | |||
68 |
|
|
67 | ||
69 | mkdir /var/www/rhodecode |
|
68 | mkdir /var/www/rhodecode | |
70 |
|
69 | |||
71 |
|
70 | |||
72 |
- |
|
71 | - Go into the created directory run this command to install rhodecode:: | |
73 |
|
72 | |||
74 |
easy_install rhodecode |
|
73 | easy_install rhodecode | |
|
74 | ||||
|
75 | or:: | |||
|
76 | ||||
|
77 | pip install rhodecode | |||
75 |
|
78 | |||
76 |
- This will install rhodecode together with pylons and all other required |
|
79 | - This will install rhodecode together with pylons and all other required | |
77 | libraries |
|
80 | python libraries into activated virtualenv | |
78 |
|
81 | |||
79 | Requirements for Celery (optional) |
|
82 | Requirements for Celery (optional) | |
80 | ---------------------------------- |
|
83 | ---------------------------------- | |
81 |
|
84 | |||
|
85 | In order to gain maximum performance | |||
|
86 | there are some third-party you must install. When RhodeCode is used | |||
|
87 | together with celery you have to install some kind of message broker, | |||
|
88 | recommended one is rabbitmq_ to make the async tasks work. | |||
|
89 | ||||
|
90 | Of course RhodeCode works in sync mode also and then you do not have to install | |||
|
91 | any third party applications. However, using Celery_ will give you a large | |||
|
92 | speed improvement when using many big repositories. If you plan to use | |||
|
93 | RhodeCode for say 7 to 10 repositories, RhodeCode will perform perfectly well | |||
|
94 | without celery running. | |||
|
95 | ||||
|
96 | If you make the decision to run RhodeCode with celery make sure you run | |||
|
97 | celeryd using paster and message broker together with the application. | |||
|
98 | ||||
82 | .. note:: |
|
99 | .. note:: | |
83 | Installing message broker and using celery is optional, RhodeCode will |
|
100 | Installing message broker and using celery is optional, RhodeCode will | |
84 | work perfectly fine without them. |
|
101 | work perfectly fine without them. |
@@ -5,16 +5,17 b' Setup' | |||||
5 |
|
5 | |||
6 |
|
6 | |||
7 | Setting up RhodeCode |
|
7 | Setting up RhodeCode | |
8 |
-------------------- |
|
8 | -------------------- | |
9 |
|
9 | |||
10 |
First, you will need to create a RhodeCode configuration file. Run the |
|
10 | First, you will need to create a RhodeCode configuration file. Run the | |
11 | command to do this:: |
|
11 | following command to do this:: | |
12 |
|
12 | |||
13 | paster make-config RhodeCode production.ini |
|
13 | paster make-config RhodeCode production.ini | |
14 |
|
14 | |||
15 | - This will create the file `production.ini` in the current directory. This |
|
15 | - This will create the file `production.ini` in the current directory. This | |
16 |
configuration file contains the various settings for RhodeCode, e.g proxy |
|
16 | configuration file contains the various settings for RhodeCode, e.g proxy | |
17 |
email settings, usage of static files, cache, celery settings and |
|
17 | port, email settings, usage of static files, cache, celery settings and | |
|
18 | logging. | |||
18 |
|
19 | |||
19 |
|
20 | |||
20 | Next, you need to create the databases used by RhodeCode. I recommend that you |
|
21 | Next, you need to create the databases used by RhodeCode. I recommend that you | |
@@ -27,19 +28,19 b' the following command::' | |||||
27 |
|
28 | |||
28 | This will prompt you for a "root" path. This "root" path is the location where |
|
29 | This will prompt you for a "root" path. This "root" path is the location where | |
29 | RhodeCode will store all of its repositories on the current machine. After |
|
30 | RhodeCode will store all of its repositories on the current machine. After | |
30 |
entering this "root" path ``setup-app`` will also prompt you for a username |
|
31 | entering this "root" path ``setup-app`` will also prompt you for a username | |
31 | for the initial admin account which ``setup-app`` sets up for you. |
|
32 | and password for the initial admin account which ``setup-app`` sets up for you. | |
32 |
|
33 | |||
33 | - The ``setup-app`` command will create all of the needed tables and an admin |
|
34 | - The ``setup-app`` command will create all of the needed tables and an admin | |
34 |
account. When choosing a root path you can either use a new empty location, |
|
35 | account. When choosing a root path you can either use a new empty location, | |
35 |
location which already contains existing repositories. If you choose a |
|
36 | or a location which already contains existing repositories. If you choose a | |
36 |
which contains existing repositories RhodeCode will simply add all |
|
37 | location which contains existing repositories RhodeCode will simply add all | |
37 |
repositories at the chosen location to it's database. (Note: make |
|
38 | of the repositories at the chosen location to it's database. (Note: make | |
38 | specify the correct path to the root). |
|
39 | sure you specify the correct path to the root). | |
39 | - Note: the given path for mercurial_ repositories **must** be write accessible |
|
40 | - Note: the given path for mercurial_ repositories **must** be write accessible | |
40 |
for the application. It's very important since the RhodeCode web interface |
|
41 | for the application. It's very important since the RhodeCode web interface | |
41 |
work without write access, but when trying to do a push it will |
|
42 | will work without write access, but when trying to do a push it will | |
42 | with permission denied errors unless it has write access. |
|
43 | eventually fail with permission denied errors unless it has write access. | |
43 |
|
44 | |||
44 | You are now ready to use RhodeCode, to run it simply execute:: |
|
45 | You are now ready to use RhodeCode, to run it simply execute:: | |
45 |
|
46 | |||
@@ -48,7 +49,8 b' You are now ready to use RhodeCode, to r' | |||||
48 | - This command runs the RhodeCode server. The web app should be available at the |
|
49 | - This command runs the RhodeCode server. The web app should be available at the | |
49 | 127.0.0.1:5000. This ip and port is configurable via the production.ini |
|
50 | 127.0.0.1:5000. This ip and port is configurable via the production.ini | |
50 | file created in previous step |
|
51 | file created in previous step | |
51 |
- Use the admin account you created above when running ``setup-app`` to login |
|
52 | - Use the admin account you created above when running ``setup-app`` to login | |
|
53 | to the web app. | |||
52 | - The default permissions on each repository is read, and the owner is admin. |
|
54 | - The default permissions on each repository is read, and the owner is admin. | |
53 | Remember to update these if needed. |
|
55 | Remember to update these if needed. | |
54 | - In the admin panel you can toggle ldap, anonymous, permissions settings. As |
|
56 | - In the admin panel you can toggle ldap, anonymous, permissions settings. As | |
@@ -56,9 +58,9 b' You are now ready to use RhodeCode, to r' | |||||
56 |
|
58 | |||
57 | Try copying your own mercurial repository into the "root" directory you are |
|
59 | Try copying your own mercurial repository into the "root" directory you are | |
58 | using, then from within the RhodeCode web application choose Admin > |
|
60 | using, then from within the RhodeCode web application choose Admin > | |
59 |
repositories. Then choose Add New Repository. Add the repository you copied |
|
61 | repositories. Then choose Add New Repository. Add the repository you copied | |
60 |
the root. Test that you can browse your repository from within RhodeCode |
|
62 | into the root. Test that you can browse your repository from within RhodeCode | |
61 | try cloning your repository from RhodeCode with:: |
|
63 | and then try cloning your repository from RhodeCode with:: | |
62 |
|
64 | |||
63 | hg clone http://127.0.0.1:5000/<repository name> |
|
65 | hg clone http://127.0.0.1:5000/<repository name> | |
64 |
|
66 | |||
@@ -67,8 +69,8 b' where *repository name* is replaced by t' | |||||
67 | Using RhodeCode with SSH |
|
69 | Using RhodeCode with SSH | |
68 | ------------------------ |
|
70 | ------------------------ | |
69 |
|
71 | |||
70 |
RhodeCode currently only hosts repositories using http and https. (The addition |
|
72 | RhodeCode currently only hosts repositories using http and https. (The addition | |
71 | ssh hosting is a planned future feature.) However you can easily use ssh in |
|
73 | of ssh hosting is a planned future feature.) However you can easily use ssh in | |
72 | parallel with RhodeCode. (Repository access via ssh is a standard "out of |
|
74 | parallel with RhodeCode. (Repository access via ssh is a standard "out of | |
73 | the box" feature of mercurial_ and you can use this to access any of the |
|
75 | the box" feature of mercurial_ and you can use this to access any of the | |
74 | repositories that RhodeCode is hosting. See PublishingRepositories_) |
|
76 | repositories that RhodeCode is hosting. See PublishingRepositories_) | |
@@ -77,10 +79,10 b' RhodeCode repository structures are kept' | |||||
77 | as the project. When using repository groups, each group is a subdirectory. |
|
79 | as the project. When using repository groups, each group is a subdirectory. | |
78 | This allows you to easily use ssh for accessing repositories. |
|
80 | This allows you to easily use ssh for accessing repositories. | |
79 |
|
81 | |||
80 |
In order to use ssh you need to make sure that your web-server and the users |
|
82 | In order to use ssh you need to make sure that your web-server and the users | |
81 |
accounts have the correct permissions set on the appropriate directories. |
|
83 | login accounts have the correct permissions set on the appropriate directories. | |
82 |
that these permissions are independent of any permissions you have set up |
|
84 | (Note that these permissions are independent of any permissions you have set up | |
83 | the RhodeCode web interface.) |
|
85 | using the RhodeCode web interface.) | |
84 |
|
86 | |||
85 | If your main directory (the same as set in RhodeCode settings) is for example |
|
87 | If your main directory (the same as set in RhodeCode settings) is for example | |
86 | set to **/home/hg** and the repository you are using is named `rhodecode`, then |
|
88 | set to **/home/hg** and the repository you are using is named `rhodecode`, then | |
@@ -95,35 +97,41 b' Note: In an advanced setup, in order for' | |||||
95 | permissions as set up via the RhodeCode web interface, you can create an |
|
97 | permissions as set up via the RhodeCode web interface, you can create an | |
96 | authentication hook to connect to the rhodecode db and runs check functions for |
|
98 | authentication hook to connect to the rhodecode db and runs check functions for | |
97 | permissions against that. |
|
99 | permissions against that. | |
98 |
|
||||
99 |
|
||||
100 |
|
100 | |||
101 | Setting up Whoosh full text search |
|
101 | Setting up Whoosh full text search | |
102 | ---------------------------------- |
|
102 | ---------------------------------- | |
103 |
|
103 | |||
104 | Starting from version 1.1 the whoosh index can be build by using the paster |
|
104 | Starting from version 1.1 the whoosh index can be build by using the paster | |
105 | command ``make-index``. To use ``make-index`` you must specify the configuration |
|
105 | command ``make-index``. To use ``make-index`` you must specify the configuration | |
106 |
file that stores the location of the index |
|
106 | file that stores the location of the index. You may specify the location of the | |
107 | (`--repo-location`). |
|
107 | repositories (`--repo-location`). If not specified, this value is retrieved | |
|
108 | from the RhodeCode database. This was required prior to 1.2. Starting from | |||
|
109 | version 1.2 it is also possible to specify a comma separated list of | |||
|
110 | repositories (`--index-only`) to build index only on chooses repositories | |||
|
111 | skipping any other found in repos location | |||
108 |
|
112 | |||
109 | You may optionally pass the option `-f` to enable a full index rebuild. Without |
|
113 | You may optionally pass the option `-f` to enable a full index rebuild. Without | |
110 | the `-f` option, indexing will run always in "incremental" mode. |
|
114 | the `-f` option, indexing will run always in "incremental" mode. | |
111 |
|
115 | |||
112 | For an incremental index build use:: |
|
116 | For an incremental index build use:: | |
113 |
|
117 | |||
114 |
paster make-index production.ini |
|
118 | paster make-index production.ini | |
115 |
|
119 | |||
116 | For a full index rebuild use:: |
|
120 | For a full index rebuild use:: | |
117 |
|
121 | |||
118 |
paster make-index production.ini -f |
|
122 | paster make-index production.ini -f | |
|
123 | ||||
119 |
|
|
124 | ||
120 | - For full text search you can either put crontab entry for |
|
125 | building index just for chosen repositories is possible with such command:: | |
|
126 | ||||
|
127 | paster make-index production.ini --index-only=vcs,rhodecode | |||
|
128 | ||||
121 |
|
|
129 | ||
122 | In order to do periodical index builds and keep your index always up to date. |
|
130 | In order to do periodical index builds and keep your index always up to date. | |
123 | It's recommended to do a crontab entry for incremental indexing. |
|
131 | It's recommended to do a crontab entry for incremental indexing. | |
124 | An example entry might look like this:: |
|
132 | An example entry might look like this:: | |
125 |
|
133 | |||
126 |
/path/to/python/bin/paster /path/to/rhodecode/production.ini |
|
134 | /path/to/python/bin/paster make-index /path/to/rhodecode/production.ini | |
127 |
|
135 | |||
128 | When using incremental mode (the default) whoosh will check the last |
|
136 | When using incremental mode (the default) whoosh will check the last | |
129 | modification date of each file and add it to be reindexed if a newer file is |
|
137 | modification date of each file and add it to be reindexed if a newer file is | |
@@ -138,55 +146,221 b' Setting up LDAP support' | |||||
138 | ----------------------- |
|
146 | ----------------------- | |
139 |
|
147 | |||
140 | RhodeCode starting from version 1.1 supports ldap authentication. In order |
|
148 | RhodeCode starting from version 1.1 supports ldap authentication. In order | |
141 |
to use LDAP, you have to install the python-ldap_ package. This package is |
|
149 | to use LDAP, you have to install the python-ldap_ package. This package is | |
142 | via pypi, so you can install it by running |
|
150 | available via pypi, so you can install it by running | |
143 |
|
151 | |||
144 | :: |
|
152 | using easy_install:: | |
145 |
|
153 | |||
146 | easy_install python-ldap |
|
154 | easy_install python-ldap | |
147 |
|
155 | |||
148 | :: |
|
156 | using pip:: | |
149 |
|
157 | |||
150 | pip install python-ldap |
|
158 | pip install python-ldap | |
151 |
|
159 | |||
152 | .. note:: |
|
160 | .. note:: | |
153 | python-ldap requires some certain libs on your system, so before installing |
|
161 | python-ldap requires some certain libs on your system, so before installing | |
154 | it check that you have at least `openldap`, and `sasl` libraries. |
|
162 | it check that you have at least `openldap`, and `sasl` libraries. | |
155 |
|
163 | |||
156 |
|
|
164 | LDAP settings are located in admin->ldap section, | |
157 |
|
165 | |||
158 | Here's a typical ldap setup:: |
|
166 | Here's a typical ldap setup:: | |
159 |
|
167 | |||
160 | Enable ldap = checked #controls if ldap access is enabled |
|
168 | Connection settings | |
161 | Host = host.domain.org #actual ldap server to connect |
|
169 | Enable LDAP = checked | |
162 | Port = 389 or 689 for ldaps #ldap server ports |
|
170 | Host = host.example.org | |
163 | Enable LDAPS = unchecked #enable disable ldaps |
|
171 | Port = 389 | |
164 | Account = <account> #access for ldap server(if required) |
|
172 | Account = <account> | |
165 | Password = <password> #password for ldap server(if required) |
|
173 | Password = <password> | |
166 | Base DN = uid=%(user)s,CN=users,DC=host,DC=domain,DC=org |
|
174 | Connection Security = LDAPS connection | |
167 |
|
175 | Certificate Checks = DEMAND | ||
|
176 | ||||
|
177 | Search settings | |||
|
178 | Base DN = CN=users,DC=host,DC=example,DC=org | |||
|
179 | LDAP Filter = (&(objectClass=user)(!(objectClass=computer))) | |||
|
180 | LDAP Search Scope = SUBTREE | |||
|
181 | ||||
|
182 | Attribute mappings | |||
|
183 | Login Attribute = uid | |||
|
184 | First Name Attribute = firstName | |||
|
185 | Last Name Attribute = lastName | |||
|
186 | E-mail Attribute = mail | |||
|
187 | ||||
|
188 | .. _enable_ldap: | |||
|
189 | ||||
|
190 | Enable LDAP : required | |||
|
191 | Whether to use LDAP for authenticating users. | |||
|
192 | ||||
|
193 | .. _ldap_host: | |||
|
194 | ||||
|
195 | Host : required | |||
|
196 | LDAP server hostname or IP address. | |||
|
197 | ||||
|
198 | .. _Port: | |||
|
199 | ||||
|
200 | Port : required | |||
|
201 | 389 for un-encrypted LDAP, 636 for SSL-encrypted LDAP. | |||
|
202 | ||||
|
203 | .. _ldap_account: | |||
|
204 | ||||
|
205 | Account : optional | |||
|
206 | Only required if the LDAP server does not allow anonymous browsing of | |||
|
207 | records. This should be a special account for record browsing. This | |||
|
208 | will require `LDAP Password`_ below. | |||
|
209 | ||||
|
210 | .. _LDAP Password: | |||
|
211 | ||||
|
212 | Password : optional | |||
|
213 | Only required if the LDAP server does not allow anonymous browsing of | |||
|
214 | records. | |||
168 |
|
215 | |||
169 | `Account` and `Password` are optional, and used for two-phase ldap |
|
216 | .. _Enable LDAPS: | |
170 | authentication so those are credentials to access your ldap, if it doesn't |
|
217 | ||
171 | support anonymous search/user lookups. |
|
218 | Connection Security : required | |
|
219 | Defines the connection to LDAP server | |||
|
220 | ||||
|
221 | No encryption | |||
|
222 | Plain non encrypted connection | |||
|
223 | ||||
|
224 | LDAPS connection | |||
|
225 | Enable ldaps connection. It will likely require `Port`_ to be set to | |||
|
226 | a different value (standard LDAPS port is 636). When LDAPS is enabled | |||
|
227 | then `Certificate Checks`_ is required. | |||
|
228 | ||||
|
229 | START_TLS on LDAP connection | |||
|
230 | START TLS connection | |||
|
231 | ||||
|
232 | .. _Certificate Checks: | |||
|
233 | ||||
|
234 | Certificate Checks : optional | |||
|
235 | How SSL certificates verification is handled - this is only useful when | |||
|
236 | `Enable LDAPS`_ is enabled. Only DEMAND or HARD offer full SSL security | |||
|
237 | while the other options are susceptible to man-in-the-middle attacks. SSL | |||
|
238 | certificates can be installed to /etc/openldap/cacerts so that the | |||
|
239 | DEMAND or HARD options can be used with self-signed certificates or | |||
|
240 | certificates that do not have traceable certificates of authority. | |||
|
241 | ||||
|
242 | NEVER | |||
|
243 | A serve certificate will never be requested or checked. | |||
|
244 | ||||
|
245 | ALLOW | |||
|
246 | A server certificate is requested. Failure to provide a | |||
|
247 | certificate or providing a bad certificate will not terminate the | |||
|
248 | session. | |||
|
249 | ||||
|
250 | TRY | |||
|
251 | A server certificate is requested. Failure to provide a | |||
|
252 | certificate does not halt the session; providing a bad certificate | |||
|
253 | halts the session. | |||
|
254 | ||||
|
255 | DEMAND | |||
|
256 | A server certificate is requested and must be provided and | |||
|
257 | authenticated for the session to proceed. | |||
|
258 | ||||
|
259 | HARD | |||
|
260 | The same as DEMAND. | |||
|
261 | ||||
|
262 | .. _Base DN: | |||
172 |
|
263 | |||
173 | Base DN must have the %(user)s template inside, it's a place holder where your uid |
|
264 | Base DN : required | |
174 | used to login would go. It allows admins to specify non-standard schema for the |
|
265 | The Distinguished Name (DN) where searches for users will be performed. | |
175 | uid variable. |
|
266 | Searches can be controlled by `LDAP Filter`_ and `LDAP Search Scope`_. | |
|
267 | ||||
|
268 | .. _LDAP Filter: | |||
|
269 | ||||
|
270 | LDAP Filter : optional | |||
|
271 | A LDAP filter defined by RFC 2254. This is more useful when `LDAP | |||
|
272 | Search Scope`_ is set to SUBTREE. The filter is useful for limiting | |||
|
273 | which LDAP objects are identified as representing Users for | |||
|
274 | authentication. The filter is augmented by `Login Attribute`_ below. | |||
|
275 | This can commonly be left blank. | |||
|
276 | ||||
|
277 | .. _LDAP Search Scope: | |||
|
278 | ||||
|
279 | LDAP Search Scope : required | |||
|
280 | This limits how far LDAP will search for a matching object. | |||
|
281 | ||||
|
282 | BASE | |||
|
283 | Only allows searching of `Base DN`_ and is usually not what you | |||
|
284 | want. | |||
|
285 | ||||
|
286 | ONELEVEL | |||
|
287 | Searches all entries under `Base DN`_, but not Base DN itself. | |||
|
288 | ||||
|
289 | SUBTREE | |||
|
290 | Searches all entries below `Base DN`_, but not Base DN itself. | |||
|
291 | When using SUBTREE `LDAP Filter`_ is useful to limit object | |||
|
292 | location. | |||
|
293 | ||||
|
294 | .. _Login Attribute: | |||
|
295 | ||||
|
296 | Login Attribute : required | |||
|
297 | The LDAP record attribute that will be matched as the USERNAME or | |||
|
298 | ACCOUNT used to connect to RhodeCode. This will be added to `LDAP | |||
|
299 | Filter`_ for locating the User object. If `LDAP Filter`_ is specified as | |||
|
300 | "LDAPFILTER", `Login Attribute`_ is specified as "uid" and the user has | |||
|
301 | connected as "jsmith" then the `LDAP Filter`_ will be augmented as below | |||
|
302 | :: | |||
|
303 | ||||
|
304 | (&(LDAPFILTER)(uid=jsmith)) | |||
|
305 | ||||
|
306 | .. _ldap_attr_firstname: | |||
|
307 | ||||
|
308 | First Name Attribute : required | |||
|
309 | The LDAP record attribute which represents the user's first name. | |||
|
310 | ||||
|
311 | .. _ldap_attr_lastname: | |||
176 |
|
312 | |||
177 | If all of the data is correctly entered, and `python-ldap` is properly |
|
313 | Last Name Attribute : required | |
178 | installed, then users should be granted access to RhodeCode with ldap accounts. |
|
314 | The LDAP record attribute which represents the user's last name. | |
179 | When logging in the first time a special ldap account is created inside |
|
315 | ||
180 | RhodeCode, so you can control the permissions even on ldap users. If such users |
|
316 | .. _ldap_attr_email: | |
181 | already exist in the RhodeCode database, then the ldap user with the same |
|
317 | ||
182 | username would be not be able to access RhodeCode. |
|
318 | Email Attribute : required | |
|
319 | The LDAP record attribute which represents the user's email address. | |||
|
320 | ||||
|
321 | If all data are entered correctly, and python-ldap_ is properly installed | |||
|
322 | users should be granted access to RhodeCode with ldap accounts. At this | |||
|
323 | time user information is copied from LDAP into the RhodeCode user database. | |||
|
324 | This means that updates of an LDAP user object may not be reflected as a | |||
|
325 | user update in RhodeCode. | |||
|
326 | ||||
|
327 | If You have problems with LDAP access and believe You entered correct | |||
|
328 | information check out the RhodeCode logs, any error messages sent from LDAP | |||
|
329 | will be saved there. | |||
|
330 | ||||
|
331 | Active Directory | |||
|
332 | '''''''''''''''' | |||
183 |
|
333 | |||
184 | If you have problems with ldap access and believe you have correctly entered the |
|
334 | RhodeCode can use Microsoft Active Directory for user authentication. This | |
185 | required information then proceed by investigating the RhodeCode logs. Any |
|
335 | is done through an LDAP or LDAPS connection to Active Directory. The | |
186 | error messages sent from ldap will be saved there. |
|
336 | following LDAP configuration settings are typical for using Active | |
|
337 | Directory :: | |||
|
338 | ||||
|
339 | Base DN = OU=SBSUsers,OU=Users,OU=MyBusiness,DC=v3sys,DC=local | |||
|
340 | Login Attribute = sAMAccountName | |||
|
341 | First Name Attribute = givenName | |||
|
342 | Last Name Attribute = sn | |||
|
343 | E-mail Attribute = mail | |||
|
344 | ||||
|
345 | All other LDAP settings will likely be site-specific and should be | |||
|
346 | appropriately configured. | |||
187 |
|
347 | |||
188 |
|
348 | |||
189 |
|
349 | |||
|
350 | Hook management | |||
|
351 | --------------- | |||
|
352 | ||||
|
353 | Hooks can be managed in similar way to this used in .hgrc files. | |||
|
354 | To access hooks setting click `advanced setup` on Hooks section of Mercurial | |||
|
355 | Settings in Admin. | |||
|
356 | ||||
|
357 | There are 4 built in hooks that cannot be changed (only enable/disable by | |||
|
358 | checkboxes on previos section). | |||
|
359 | To add another custom hook simply fill in first section with | |||
|
360 | <name>.<hook_type> and the second one with hook path. Example hooks | |||
|
361 | can be found at *rhodecode.lib.hooks*. | |||
|
362 | ||||
|
363 | ||||
190 | Setting Up Celery |
|
364 | Setting Up Celery | |
191 | ----------------- |
|
365 | ----------------- | |
192 |
|
366 | |||
@@ -204,8 +378,8 b' In order to start using celery run::' | |||||
204 |
|
378 | |||
205 |
|
379 | |||
206 | .. note:: |
|
380 | .. note:: | |
207 |
Make sure you run this command from the same virtualenv, and with the same |
|
381 | Make sure you run this command from the same virtualenv, and with the same | |
208 | that rhodecode runs. |
|
382 | user that rhodecode runs. | |
209 |
|
383 | |||
210 | HTTPS support |
|
384 | HTTPS support | |
211 | ------------- |
|
385 | ------------- | |
@@ -214,8 +388,8 b' There are two ways to enable https:' | |||||
214 |
|
388 | |||
215 | - Set HTTP_X_URL_SCHEME in your http server headers, than rhodecode will |
|
389 | - Set HTTP_X_URL_SCHEME in your http server headers, than rhodecode will | |
216 | recognize this headers and make proper https redirections |
|
390 | recognize this headers and make proper https redirections | |
217 |
- Alternatively, |
|
391 | - Alternatively, change the `force_https = true` flag in the ini configuration | |
218 | https, no headers are needed than to enable https |
|
392 | to force using https, no headers are needed than to enable https | |
219 |
|
393 | |||
220 |
|
394 | |||
221 | Nginx virtual host example |
|
395 | Nginx virtual host example | |
@@ -251,13 +425,10 b' pushes or large pushes::' | |||||
251 | client_max_body_size 400m; |
|
425 | client_max_body_size 400m; | |
252 | client_body_buffer_size 128k; |
|
426 | client_body_buffer_size 128k; | |
253 | proxy_buffering off; |
|
427 | proxy_buffering off; | |
254 |
proxy_connect_timeout |
|
428 | proxy_connect_timeout 7200; | |
255 |
proxy_send_timeout |
|
429 | proxy_send_timeout 7200; | |
256 |
proxy_read_timeout |
|
430 | proxy_read_timeout 7200; | |
257 |
proxy_buffer |
|
431 | proxy_buffers 8 32k; | |
258 | proxy_buffers 4 16k; |
|
|||
259 | proxy_busy_buffers_size 64k; |
|
|||
260 | proxy_temp_file_write_size 64k; |
|
|||
261 |
|
432 | |||
262 | Also, when using root path with nginx you might set the static files to false |
|
433 | Also, when using root path with nginx you might set the static files to false | |
263 | in the production.ini file:: |
|
434 | in the production.ini file:: | |
@@ -315,7 +486,8 b' Apache subdirectory part::' | |||||
315 | SetEnvIf X-Url-Scheme https HTTPS=1 |
|
486 | SetEnvIf X-Url-Scheme https HTTPS=1 | |
316 | </Location> |
|
487 | </Location> | |
317 |
|
488 | |||
318 |
Besides the regular apache setup you will need to add the following |
|
489 | Besides the regular apache setup you will need to add the following line | |
|
490 | into [app:main] section of your .ini file:: | |||
319 |
|
491 | |||
320 | filter-with = proxy-prefix |
|
492 | filter-with = proxy-prefix | |
321 |
|
493 | |||
@@ -328,59 +500,24 b' Add the following at the end of the .ini' | |||||
328 |
|
500 | |||
329 | then change <someprefix> into your choosen prefix |
|
501 | then change <someprefix> into your choosen prefix | |
330 |
|
502 | |||
331 |
Apache's |
|
503 | Apache's WSGI config | |
332 |
-------------------- |
|
504 | -------------------- | |
333 |
|
||||
334 | virtual host example:: |
|
|||
335 |
|
||||
336 | <VirtualHost *:443> |
|
|||
337 | ServerName hg.domain.eu:443 |
|
|||
338 | DocumentRoot /var/www |
|
|||
339 |
|
||||
340 | SSLEngine on |
|
|||
341 | SSLCertificateFile /etc/apache2/ssl/hg.domain.eu.cert |
|
|||
342 | SSLCertificateKeyFile /etc/apache2/ssl/hg.domain.eu.key |
|
|||
343 | SSLCertificateChainFile /etc/apache2/ssl/ca.cert |
|
|||
344 | SetEnv HTTP_X_URL_SCHEME https |
|
|||
345 |
|
||||
346 | Alias /css /home/web/virtualenvs/hg/lib/python2.6/site-packages/rhodecode/public/css |
|
|||
347 | Alias /images /home/web/virtualenvs/hg/lib/python2.6/site-packages/rhodecode/public/images |
|
|||
348 | Alias /js /home/web/virtualenvs/hg/lib/python2.6/site-packages/rhodecode/public/js |
|
|||
349 |
|
||||
350 | WSGIDaemonProcess hg user=web group=web processes=1 threads=10 display-name=%{GROUP} python-path=/home/web/virtualenvs/hg/lib/python2.6/site-packages |
|
|||
351 |
|
||||
352 | WSGIPassAuthorization On |
|
|||
353 | WSGIProcessGroup hg |
|
|||
354 | WSGIApplicationGroup hg |
|
|||
355 | WSGIScriptAlias / /home/web/apache/conf/hg.wsgi |
|
|||
356 |
|
||||
357 | <Directory /home/web/apache/conf> |
|
|||
358 | Order deny,allow |
|
|||
359 | Allow from all |
|
|||
360 | </Directory> |
|
|||
361 | <Directory /var/www> |
|
|||
362 | Order deny,allow |
|
|||
363 | Allow from all |
|
|||
364 | </Directory> |
|
|||
365 |
|
||||
366 | </VirtualHost> |
|
|||
367 |
|
||||
368 | <VirtualHost *:80> |
|
|||
369 | ServerName hg.domain.eu |
|
|||
370 | Redirect permanent / https://hg.domain.eu/ |
|
|||
371 | </VirtualHost> |
|
|||
372 |
|
505 | |||
373 |
|
506 | |||
374 | HG.WSGI:: |
|
507 | Example wsgi dispatch script:: | |
375 |
|
508 | |||
376 | import os |
|
509 | import os | |
377 | os.environ["HGENCODING"] = "UTF-8" |
|
510 | os.environ["HGENCODING"] = "UTF-8" | |
|
511 | os.environ['PYTHON_EGG_CACHE'] = '/home/web/rhodecode/.egg-cache' | |||
|
512 | ||||
|
513 | # sometimes it's needed to set the curent dir | |||
|
514 | os.chdir('/home/web/rhodecode/') | |||
378 |
|
515 | |||
379 | from paste.deploy import loadapp |
|
516 | from paste.deploy import loadapp | |
380 | from paste.script.util.logging_config import fileConfig |
|
517 | from paste.script.util.logging_config import fileConfig | |
381 |
|
518 | |||
382 |
fileConfig('/home/web/ |
|
519 | fileConfig('/home/web/rhodecode/production.ini') | |
383 |
application = loadapp('config:/home/web/ |
|
520 | application = loadapp('config:/home/web/rhodecode/production.ini') | |
384 |
|
521 | |||
385 |
|
522 | |||
386 | Other configuration files |
|
523 | Other configuration files | |
@@ -421,7 +558,8 b' Troubleshooting' | |||||
421 | :Q: **Apache doesn't pass basicAuth on pull/push?** |
|
558 | :Q: **Apache doesn't pass basicAuth on pull/push?** | |
422 | :A: Make sure you added `WSGIPassAuthorization true`. |
|
559 | :A: Make sure you added `WSGIPassAuthorization true`. | |
423 |
|
560 | |||
424 |
For further questions search the `Issues tracker`_, or post a message in the |
|
561 | For further questions search the `Issues tracker`_, or post a message in the | |
|
562 | `google group rhodecode`_ | |||
425 |
|
563 | |||
426 | .. _virtualenv: http://pypi.python.org/pypi/virtualenv |
|
564 | .. _virtualenv: http://pypi.python.org/pypi/virtualenv | |
427 | .. _python: http://www.python.org/ |
|
565 | .. _python: http://www.python.org/ |
@@ -4,9 +4,10 b' Enabling GIT support (beta)' | |||||
4 | =========================== |
|
4 | =========================== | |
5 |
|
5 | |||
6 |
|
6 | |||
7 |
Git support in RhodeCode 1.1 was disabled due to current instability issues. |
|
7 | Git support in RhodeCode 1.1 was disabled due to current instability issues. | |
8 |
if you would like to test git support please feel free to re-enable it. |
|
8 | However,if you would like to test git support please feel free to re-enable it. | |
9 | uncomment the git line in the file rhodecode/__init__.py |
|
9 | To re-enable GIT support just uncomment the git line in the | |
|
10 | file **rhodecode/__init__.py** | |||
10 |
|
11 | |||
11 | .. code-block:: python |
|
12 | .. code-block:: python | |
12 |
|
13 | |||
@@ -19,4 +20,5 b' uncomment the git line in the file rhode' | |||||
19 | Please note that the git support provided by RhodeCode is not yet fully |
|
20 | Please note that the git support provided by RhodeCode is not yet fully | |
20 | stable and RhodeCode might crash while using git repositories. (That is why |
|
21 | stable and RhodeCode might crash while using git repositories. (That is why | |
21 | it is currently disabled.) Thus be careful about enabling git support, and |
|
22 | it is currently disabled.) Thus be careful about enabling git support, and | |
22 | certainly don't use it in a production setting! No newline at end of file |
|
23 | certainly don't use it in a production setting! | |
|
24 | No newline at end of file |
@@ -10,7 +10,7 b' cached inside db and are gathered increm' | |||||
10 | this: |
|
10 | this: | |
11 |
|
11 | |||
12 | With Celery disabled |
|
12 | With Celery disabled | |
13 | ++++++++++++++++++++ |
|
13 | -------------------- | |
14 |
|
14 | |||
15 | - On each first visit to the summary page a set of 250 commits are parsed and |
|
15 | - On each first visit to the summary page a set of 250 commits are parsed and | |
16 | updates statistics cache. |
|
16 | updates statistics cache. | |
@@ -21,7 +21,7 b' With Celery disabled' | |||||
21 |
|
21 | |||
22 |
|
22 | |||
23 | With Celery enabled |
|
23 | With Celery enabled | |
24 | +++++++++++++++++++ |
|
24 | ------------------- | |
25 |
|
25 | |||
26 | - On the first visit to the summary page RhodeCode will create tasks that will |
|
26 | - On the first visit to the summary page RhodeCode will create tasks that will | |
27 | execute on celery workers. This task will gather all of the stats until all |
|
27 | execute on celery workers. This task will gather all of the stats until all | |
@@ -30,4 +30,4 b' With Celery enabled' | |||||
30 |
|
30 | |||
31 | .. note:: |
|
31 | .. note:: | |
32 | At any time you can disable statistics on each repository via the repository |
|
32 | At any time you can disable statistics on each repository via the repository | |
33 | edit form in the admin panel. To do this just uncheck the statistics checkbox. No newline at end of file |
|
33 | edit form in the admin panel. To do this just uncheck the statistics checkbox. |
@@ -202,14 +202,13 b' def main(argv, version=DEFAULT_VERSION):' | |||||
202 | except ImportError: |
|
202 | except ImportError: | |
203 | from easy_install import main |
|
203 | from easy_install import main | |
204 | main(list(argv) + [download_setuptools(delay=0)]) |
|
204 | main(list(argv) + [download_setuptools(delay=0)]) | |
205 |
sys.exit(0) |
|
205 | sys.exit(0) # try to force an exit | |
206 | else: |
|
206 | else: | |
207 | if argv: |
|
207 | if argv: | |
208 | from setuptools.command.easy_install import main |
|
208 | from setuptools.command.easy_install import main | |
209 | main(argv) |
|
209 | main(argv) | |
210 | else: |
|
210 | else: | |
211 |
print "Setuptools version", version, |
|
211 | print "Setuptools version", version, "or greater has been installed." | |
212 | "been installed.") |
|
|||
213 | print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' |
|
212 | print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' | |
214 |
|
213 | |||
215 |
|
214 |
@@ -1,6 +1,6 b'' | |||||
1 | #!/bin/sh -e |
|
1 | #!/bin/sh -e | |
2 | ######################################## |
|
2 | ######################################## | |
3 |
#### THIS IS A |
|
3 | #### THIS IS A DEBIAN INIT.D SCRIPT #### | |
4 | ######################################## |
|
4 | ######################################## | |
5 |
|
5 | |||
6 | ### BEGIN INIT INFO |
|
6 | ### BEGIN INIT INFO | |
@@ -29,49 +29,48 b' RUN_AS="marcink"' | |||||
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 | --user=$RUN_AS \ |
|
32 | --user=$RUN_AS \ | |
33 | --group=$RUN_AS \ |
|
33 | --group=$RUN_AS \ | |
34 | --pid-file=$PID_PATH \ |
|
34 | --pid-file=$PID_PATH \ | |
35 | --log-file=$LOG_PATH $APP_PATH/$CONF_NAME" |
|
35 | --log-file=$LOG_PATH $APP_PATH/$CONF_NAME" | |
|
36 | ||||
36 |
|
37 | |||
|
38 | start() { | |||
|
39 | echo "Starting $APP_NAME" | |||
|
40 | PYTHON_EGG_CACHE="/tmp" start-stop-daemon -d $APP_PATH \ | |||
|
41 | --start --quiet \ | |||
|
42 | --pidfile $PID_PATH \ | |||
|
43 | --user $RUN_AS \ | |||
|
44 | --exec $DAEMON -- $DAEMON_OPTS | |||
|
45 | } | |||
|
46 | ||||
|
47 | stop() { | |||
|
48 | echo "Stopping $APP_NAME" | |||
|
49 | start-stop-daemon -d $APP_PATH \ | |||
|
50 | --stop --quiet \ | |||
|
51 | --pidfile $PID_PATH || echo "$APP_NAME - Not running!" | |||
|
52 | ||||
|
53 | if [ -f $PID_PATH ]; then | |||
|
54 | rm $PID_PATH | |||
|
55 | fi | |||
|
56 | } | |||
37 |
|
57 | |||
38 | case "$1" in |
|
58 | case "$1" in | |
39 | start) |
|
59 | start) | |
40 | echo "Starting $APP_NAME" |
|
60 | start | |
41 | start-stop-daemon -d $APP_PATH -e PYTHON_EGG_CACHE="/tmp" \ |
|
|||
42 | --start --quiet \ |
|
|||
43 | --pidfile $PID_PATH \ |
|
|||
44 | --user $RUN_AS \ |
|
|||
45 | --exec $DAEMON -- $DAEMON_OPTS |
|
|||
46 | ;; |
|
61 | ;; | |
47 | stop) |
|
62 | stop) | |
48 | echo "Stopping $APP_NAME" |
|
63 | stop | |
49 | start-stop-daemon -d $APP_PATH \ |
|
|||
50 | --stop --quiet \ |
|
|||
51 | --pidfile $PID_PATH || echo "$APP_NAME - Not running!" |
|
|||
52 | if [ -f $PID_PATH ]; then |
|
|||
53 | rm $PID_PATH |
|
|||
54 | fi |
|
|||
55 | ;; |
|
64 | ;; | |
56 | restart) |
|
65 | restart) | |
57 | echo "Restarting $APP_NAME" |
|
66 | echo "Restarting $APP_NAME" | |
58 | ### stop ### |
|
67 | ### stop ### | |
59 | echo "Stopping $APP_NAME" |
|
68 | stop | |
60 | start-stop-daemon -d $APP_PATH \ |
|
69 | wait | |
61 | --stop --quiet \ |
|
|||
62 | --pidfile $PID_PATH || echo "$APP_NAME - Not running!" |
|
|||
63 | if [ -f $PID_PATH ]; then |
|
|||
64 | rm $PID_PATH |
|
|||
65 | fi |
|
|||
66 | ### start ### |
|
70 | ### start ### | |
67 | echo "Starting $APP_NAME" |
|
71 | start | |
68 | start-stop-daemon -d $APP_PATH -e PYTHON_EGG_CACHE="/tmp" \ |
|
|||
69 | --start --quiet \ |
|
|||
70 | --pidfile $PID_PATH \ |
|
|||
71 | --user $RUN_AS \ |
|
|||
72 | --exec $DAEMON -- $DAEMON_OPTS |
|
|||
73 | ;; |
|
72 | ;; | |
74 | *) |
|
73 | *) | |
75 | echo "Usage: $0 {start|stop|restart}" |
|
74 | echo "Usage: $0 {start|stop|restart}" | |
76 | exit 1 |
|
75 | exit 1 | |
77 | esac No newline at end of file |
|
76 | esac |
@@ -7,6 +7,7 b'' | |||||
7 |
|
7 | |||
8 | [DEFAULT] |
|
8 | [DEFAULT] | |
9 | debug = true |
|
9 | debug = true | |
|
10 | pdebug = false | |||
10 | ################################################################################ |
|
11 | ################################################################################ | |
11 | ## Uncomment and replace with the address which should receive ## |
|
12 | ## Uncomment and replace with the address which should receive ## | |
12 | ## any error reports after application crash ## |
|
13 | ## any error reports after application crash ## | |
@@ -29,7 +30,7 b' debug = true' | |||||
29 | threadpool_workers = 5 |
|
30 | threadpool_workers = 5 | |
30 |
|
31 | |||
31 | ##max request before thread respawn |
|
32 | ##max request before thread respawn | |
32 |
threadpool_max_requests = |
|
33 | threadpool_max_requests = 10 | |
33 |
|
34 | |||
34 | ##option to use threads of process |
|
35 | ##option to use threads of process | |
35 | use_threadpool = true |
|
36 | use_threadpool = true | |
@@ -41,12 +42,15 b' port = 8001' | |||||
41 | [app:main] |
|
42 | [app:main] | |
42 | use = egg:rhodecode |
|
43 | use = egg:rhodecode | |
43 | full_stack = true |
|
44 | full_stack = true | |
44 |
static_files = |
|
45 | static_files = true | |
45 | lang=en |
|
46 | lang=en | |
46 | cache_dir = %(here)s/data |
|
47 | cache_dir = %(here)s/data | |
47 | index_dir = %(here)s/data/index |
|
48 | index_dir = %(here)s/data/index | |
|
49 | app_instance_uuid = prod1234 | |||
48 | cut_off_limit = 256000 |
|
50 | cut_off_limit = 256000 | |
49 | force_https = false |
|
51 | force_https = false | |
|
52 | commit_parse_limit = 50 | |||
|
53 | use_gravatar = true | |||
50 |
|
54 | |||
51 | #################################### |
|
55 | #################################### | |
52 | ### CELERY CONFIG #### |
|
56 | ### CELERY CONFIG #### | |
@@ -70,7 +74,7 b' celery.result.serialier = json' | |||||
70 | celeryd.concurrency = 2 |
|
74 | celeryd.concurrency = 2 | |
71 | #celeryd.log.file = celeryd.log |
|
75 | #celeryd.log.file = celeryd.log | |
72 | celeryd.log.level = debug |
|
76 | celeryd.log.level = debug | |
73 |
celeryd.max.tasks.per.child = |
|
77 | celeryd.max.tasks.per.child = 1 | |
74 |
|
78 | |||
75 | #tasks will never be sent to the queue, but executed locally instead. |
|
79 | #tasks will never be sent to the queue, but executed locally instead. | |
76 | celery.always.eager = false |
|
80 | celery.always.eager = false | |
@@ -92,9 +96,8 b' beaker.cache.short_term.expire=60' | |||||
92 | beaker.cache.long_term.type=memory |
|
96 | beaker.cache.long_term.type=memory | |
93 | beaker.cache.long_term.expire=36000 |
|
97 | beaker.cache.long_term.expire=36000 | |
94 |
|
98 | |||
95 |
|
||||
96 | beaker.cache.sql_cache_short.type=memory |
|
99 | beaker.cache.sql_cache_short.type=memory | |
97 |
beaker.cache.sql_cache_short.expire= |
|
100 | beaker.cache.sql_cache_short.expire=10 | |
98 |
|
101 | |||
99 | beaker.cache.sql_cache_med.type=memory |
|
102 | beaker.cache.sql_cache_med.type=memory | |
100 | beaker.cache.sql_cache_med.expire=360 |
|
103 | beaker.cache.sql_cache_med.expire=360 | |
@@ -139,9 +142,10 b' logview.pylons.util = #eee' | |||||
139 | ######################################################### |
|
142 | ######################################################### | |
140 | ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ### |
|
143 | ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ### | |
141 | ######################################################### |
|
144 | ######################################################### | |
142 | sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db |
|
145 | #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db | |
143 | #sqlalchemy.db1.echo = False |
|
146 | sqlalchemy.db1.url = postgresql://postgres:qwe@localhost/rhodecode | |
144 |
|
|
147 | sqlalchemy.db1.echo = false | |
|
148 | sqlalchemy.db1.pool_recycle = 3600 | |||
145 | sqlalchemy.convert_unicode = true |
|
149 | sqlalchemy.convert_unicode = true | |
146 |
|
150 | |||
147 | ################################ |
|
151 | ################################ | |
@@ -202,13 +206,13 b' propagate = 0' | |||||
202 | class = StreamHandler |
|
206 | class = StreamHandler | |
203 | args = (sys.stderr,) |
|
207 | args = (sys.stderr,) | |
204 | level = INFO |
|
208 | level = INFO | |
205 |
formatter = |
|
209 | formatter = generic | |
206 |
|
210 | |||
207 | [handler_console_sql] |
|
211 | [handler_console_sql] | |
208 | class = StreamHandler |
|
212 | class = StreamHandler | |
209 | args = (sys.stderr,) |
|
213 | args = (sys.stderr,) | |
210 | level = WARN |
|
214 | level = WARN | |
211 | formatter = color_formatter_sql |
|
215 | formatter = generic | |
212 |
|
216 | |||
213 | ################ |
|
217 | ################ | |
214 | ## FORMATTERS ## |
|
218 | ## FORMATTERS ## |
@@ -25,14 +25,14 b'' | |||||
25 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
25 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
26 | import platform |
|
26 | import platform | |
27 |
|
27 | |||
28 |
VERSION = (1, |
|
28 | VERSION = (1, 2, 0) | |
29 | __version__ = '.'.join((str(each) for each in VERSION[:4])) |
|
29 | __version__ = '.'.join((str(each) for each in VERSION[:4])) | |
30 |
__dbversion__ = |
|
30 | __dbversion__ = 3 #defines current db version for migrations | |
31 | __platform__ = platform.system() |
|
31 | __platform__ = platform.system() | |
32 | __license__ = 'GPLv3' |
|
32 | __license__ = 'GPLv3' | |
33 |
|
33 | |||
34 | PLATFORM_WIN = ('Windows') |
|
34 | PLATFORM_WIN = ('Windows') | |
35 | PLATFORM_OTHERS = ('Linux', 'Darwin', 'FreeBSD', 'OpenBSD') |
|
35 | PLATFORM_OTHERS = ('Linux', 'Darwin', 'FreeBSD', 'OpenBSD', 'SunOS') | |
36 |
|
36 | |||
37 | try: |
|
37 | try: | |
38 | from rhodecode.lib.utils import get_current_revision |
|
38 | from rhodecode.lib.utils import get_current_revision |
@@ -7,6 +7,7 b'' | |||||
7 |
|
7 | |||
8 | [DEFAULT] |
|
8 | [DEFAULT] | |
9 | debug = true |
|
9 | debug = true | |
|
10 | pdebug = false | |||
10 | ################################################################################ |
|
11 | ################################################################################ | |
11 | ## Uncomment and replace with the address which should receive ## |
|
12 | ## Uncomment and replace with the address which should receive ## | |
12 | ## any error reports after application crash ## |
|
13 | ## any error reports after application crash ## | |
@@ -48,6 +49,8 b' index_dir = %(here)s/data/index' | |||||
48 | app_instance_uuid = ${app_instance_uuid} |
|
49 | app_instance_uuid = ${app_instance_uuid} | |
49 | cut_off_limit = 256000 |
|
50 | cut_off_limit = 256000 | |
50 | force_https = false |
|
51 | force_https = false | |
|
52 | commit_parse_limit = 50 | |||
|
53 | use_gravatar = true | |||
51 |
|
54 | |||
52 | #################################### |
|
55 | #################################### | |
53 | ### CELERY CONFIG #### |
|
56 | ### CELERY CONFIG #### | |
@@ -139,58 +142,68 b' logview.pylons.util = #eee' | |||||
139 | ######################################################### |
|
142 | ######################################################### | |
140 | ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ### |
|
143 | ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ### | |
141 | ######################################################### |
|
144 | ######################################################### | |
|
145 | ||||
|
146 | # SQLITE [default] | |||
142 | sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db |
|
147 | sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db | |
143 | #sqlalchemy.db1.echo = False |
|
148 | ||
144 | #sqlalchemy.db1.pool_recycle = 3600 |
|
149 | # POSTGRES | |
|
150 | # sqlalchemy.db1.url = postgresql://user:pass@localhost/rhodecode | |||
|
151 | ||||
|
152 | # MySQL | |||
|
153 | # sqlalchemy.db1.url = mysql://user:pass@localhost/rhodecode | |||
|
154 | ||||
|
155 | ||||
|
156 | sqlalchemy.db1.echo = false | |||
|
157 | sqlalchemy.db1.pool_recycle = 3600 | |||
145 | sqlalchemy.convert_unicode = true |
|
158 | sqlalchemy.convert_unicode = true | |
146 |
|
159 | |||
147 | ################################ |
|
160 | ################################ | |
148 | ### LOGGING CONFIGURATION #### |
|
161 | ### LOGGING CONFIGURATION #### | |
149 | ################################ |
|
162 | ################################ | |
150 | [loggers] |
|
163 | [loggers] | |
151 | keys = root, routes, rhodecode, sqlalchemy,beaker,templates |
|
164 | keys = root, routes, rhodecode, sqlalchemy, beaker, templates | |
152 |
|
165 | |||
153 | [handlers] |
|
166 | [handlers] | |
154 | keys = console |
|
167 | keys = console, console_sql | |
155 |
|
168 | |||
156 | [formatters] |
|
169 | [formatters] | |
157 | keys = generic,color_formatter |
|
170 | keys = generic, color_formatter, color_formatter_sql | |
158 |
|
171 | |||
159 | ############# |
|
172 | ############# | |
160 | ## LOGGERS ## |
|
173 | ## LOGGERS ## | |
161 | ############# |
|
174 | ############# | |
162 | [logger_root] |
|
175 | [logger_root] | |
163 |
level = |
|
176 | level = NOTSET | |
164 | handlers = console |
|
177 | handlers = console | |
165 |
|
178 | |||
166 | [logger_routes] |
|
179 | [logger_routes] | |
167 |
level = |
|
180 | level = DEBUG | |
168 |
handlers = |
|
181 | handlers = | |
169 | qualname = routes.middleware |
|
182 | qualname = routes.middleware | |
170 | # "level = DEBUG" logs the route matched and routing variables. |
|
183 | # "level = DEBUG" logs the route matched and routing variables. | |
171 |
propagate = |
|
184 | propagate = 1 | |
172 |
|
185 | |||
173 | [logger_beaker] |
|
186 | [logger_beaker] | |
174 |
level = |
|
187 | level = DEBUG | |
175 |
handlers = |
|
188 | handlers = | |
176 | qualname = beaker.container |
|
189 | qualname = beaker.container | |
177 |
propagate = |
|
190 | propagate = 1 | |
178 |
|
191 | |||
179 | [logger_templates] |
|
192 | [logger_templates] | |
180 | level = INFO |
|
193 | level = INFO | |
181 |
handlers = |
|
194 | handlers = | |
182 | qualname = pylons.templating |
|
195 | qualname = pylons.templating | |
183 |
propagate = |
|
196 | propagate = 1 | |
184 |
|
197 | |||
185 | [logger_rhodecode] |
|
198 | [logger_rhodecode] | |
186 | level = DEBUG |
|
199 | level = DEBUG | |
187 |
handlers = |
|
200 | handlers = | |
188 | qualname = rhodecode |
|
201 | qualname = rhodecode | |
189 |
propagate = |
|
202 | propagate = 1 | |
190 |
|
203 | |||
191 | [logger_sqlalchemy] |
|
204 | [logger_sqlalchemy] | |
192 |
level = |
|
205 | level = INFO | |
193 | handlers = console |
|
206 | handlers = console_sql | |
194 | qualname = sqlalchemy.engine |
|
207 | qualname = sqlalchemy.engine | |
195 | propagate = 0 |
|
208 | propagate = 0 | |
196 |
|
209 | |||
@@ -201,9 +214,15 b' propagate = 0' | |||||
201 | [handler_console] |
|
214 | [handler_console] | |
202 | class = StreamHandler |
|
215 | class = StreamHandler | |
203 | args = (sys.stderr,) |
|
216 | args = (sys.stderr,) | |
204 |
level = NO |
|
217 | level = INFO | |
205 | formatter = color_formatter |
|
218 | formatter = color_formatter | |
206 |
|
219 | |||
|
220 | [handler_console_sql] | |||
|
221 | class = StreamHandler | |||
|
222 | args = (sys.stderr,) | |||
|
223 | level = WARN | |||
|
224 | formatter = color_formatter_sql | |||
|
225 | ||||
207 | ################ |
|
226 | ################ | |
208 | ## FORMATTERS ## |
|
227 | ## FORMATTERS ## | |
209 | ################ |
|
228 | ################ | |
@@ -215,4 +234,9 b' datefmt = %Y-%m-%d %H:%M:%S' | |||||
215 | [formatter_color_formatter] |
|
234 | [formatter_color_formatter] | |
216 | class=rhodecode.lib.colored_formatter.ColorFormatter |
|
235 | class=rhodecode.lib.colored_formatter.ColorFormatter | |
217 | format= %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s |
|
236 | format= %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s | |
|
237 | datefmt = %Y-%m-%d %H:%M:%S | |||
|
238 | ||||
|
239 | [formatter_color_formatter_sql] | |||
|
240 | class=rhodecode.lib.colored_formatter.ColorFormatterSql | |||
|
241 | format= %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s | |||
218 | datefmt = %Y-%m-%d %H:%M:%S No newline at end of file |
|
242 | datefmt = %Y-%m-%d %H:%M:%S |
@@ -6,18 +6,18 b' import logging' | |||||
6 | from mako.lookup import TemplateLookup |
|
6 | from mako.lookup import TemplateLookup | |
7 | from pylons.configuration import PylonsConfig |
|
7 | from pylons.configuration import PylonsConfig | |
8 | from pylons.error import handle_mako_error |
|
8 | from pylons.error import handle_mako_error | |
9 | from sqlalchemy import engine_from_config |
|
|||
10 |
|
9 | |||
11 | import rhodecode.lib.app_globals as app_globals |
|
10 | import rhodecode.lib.app_globals as app_globals | |
12 | import rhodecode.lib.helpers |
|
11 | import rhodecode.lib.helpers | |
13 |
|
12 | |||
14 | from rhodecode.config.routing import make_map |
|
13 | from rhodecode.config.routing import make_map | |
15 | from rhodecode.lib import celerypylons |
|
14 | from rhodecode.lib import celerypylons | |
16 | from rhodecode.lib.auth import set_available_permissions, set_base_path |
|
15 | from rhodecode.lib import engine_from_config | |
|
16 | from rhodecode.lib.timerproxy import TimerProxy | |||
|
17 | from rhodecode.lib.auth import set_available_permissions | |||
17 | from rhodecode.lib.utils import repo2db_mapper, make_ui, set_rhodecode_config |
|
18 | from rhodecode.lib.utils import repo2db_mapper, make_ui, set_rhodecode_config | |
18 | from rhodecode.model import init_model |
|
19 | from rhodecode.model import init_model | |
19 | from rhodecode.model.scm import ScmModel |
|
20 | from rhodecode.model.scm import ScmModel | |
20 | from rhodecode.lib.timerproxy import TimerProxy |
|
|||
21 |
|
21 | |||
22 | log = logging.getLogger(__name__) |
|
22 | log = logging.getLogger(__name__) | |
23 |
|
23 | |||
@@ -61,25 +61,18 b' def load_environment(global_conf, app_co' | |||||
61 | from rhodecode.lib.utils import create_test_env, create_test_index |
|
61 | from rhodecode.lib.utils import create_test_env, create_test_index | |
62 | from rhodecode.tests import TESTS_TMP_PATH |
|
62 | from rhodecode.tests import TESTS_TMP_PATH | |
63 | create_test_env(TESTS_TMP_PATH, config) |
|
63 | create_test_env(TESTS_TMP_PATH, config) | |
64 | create_test_index(TESTS_TMP_PATH, True) |
|
64 | create_test_index(TESTS_TMP_PATH, config, True) | |
65 |
|
65 | |||
66 | #MULTIPLE DB configs |
|
66 | #MULTIPLE DB configs | |
67 | # Setup the SQLAlchemy database engine |
|
67 | # Setup the SQLAlchemy database engine | |
68 | if config['debug'] and not test: |
|
68 | sa_engine_db1 = engine_from_config(config, 'sqlalchemy.db1.') | |
69 | #use query time debugging. |
|
|||
70 | sa_engine_db1 = engine_from_config(config, 'sqlalchemy.db1.', |
|
|||
71 | proxy=TimerProxy()) |
|
|||
72 | else: |
|
|||
73 | sa_engine_db1 = engine_from_config(config, 'sqlalchemy.db1.') |
|
|||
74 |
|
69 | |||
75 | init_model(sa_engine_db1) |
|
70 | init_model(sa_engine_db1) | |
76 | #init baseui |
|
|||
77 | config['pylons.app_globals'].baseui = make_ui('db') |
|
|||
78 |
|
71 | |||
79 | g = config['pylons.app_globals'] |
|
72 | repos_path = make_ui('db').configitems('paths')[0][1] | |
80 |
repo2db_mapper(ScmModel().repo_scan( |
|
73 | repo2db_mapper(ScmModel().repo_scan(repos_path)) | |
81 | set_available_permissions(config) |
|
74 | set_available_permissions(config) | |
82 | set_base_path(config) |
|
75 | config['base_path'] = repos_path | |
83 | set_rhodecode_config(config) |
|
76 | set_rhodecode_config(config) | |
84 | # CONFIGURATION OPTIONS HERE (note: all config options will override |
|
77 | # CONFIGURATION OPTIONS HERE (note: all config options will override | |
85 | # any Pylons config options) |
|
78 | # any Pylons config options) |
@@ -47,9 +47,9 b' def make_app(global_conf, full_stack=Tru' | |||||
47 | app = SessionMiddleware(app, config) |
|
47 | app = SessionMiddleware(app, config) | |
48 |
|
48 | |||
49 | # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares) |
|
49 | # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares) | |
50 |
|
50 | if asbool(config['pdebug']): | ||
51 | app = SimpleHg(app, config) |
|
51 | from rhodecode.lib.profiler import ProfilingMiddleware | |
52 | app = SimpleGit(app, config) |
|
52 | app = ProfilingMiddleware(app) | |
53 |
|
53 | |||
54 | if asbool(full_stack): |
|
54 | if asbool(full_stack): | |
55 | # Handle Python exceptions |
|
55 | # Handle Python exceptions | |
@@ -74,6 +74,11 b' def make_app(global_conf, full_stack=Tru' | |||||
74 | app = Cascade([static_app, app]) |
|
74 | app = Cascade([static_app, app]) | |
75 | app = make_gzip_middleware(app, global_conf, compress_level=1) |
|
75 | app = make_gzip_middleware(app, global_conf, compress_level=1) | |
76 |
|
76 | |||
|
77 | # we want our low level middleware to get to the request ASAP. We don't | |||
|
78 | # need any pylons stack middleware in them | |||
|
79 | app = SimpleHg(app, config) | |||
|
80 | app = SimpleGit(app, config) | |||
|
81 | ||||
77 | app.config = config |
|
82 | app.config = config | |
78 |
|
83 | |||
79 | return app |
|
84 | return app |
@@ -7,7 +7,10 b' refer to the routes manual at http://rou' | |||||
7 | """ |
|
7 | """ | |
8 | from __future__ import with_statement |
|
8 | from __future__ import with_statement | |
9 | from routes import Mapper |
|
9 | from routes import Mapper | |
10 | from rhodecode.lib.utils import check_repo_fast as cr |
|
10 | ||
|
11 | ||||
|
12 | # prefix for non repository related links needs to be prefixed with `/` | |||
|
13 | ADMIN_PREFIX = '/_admin' | |||
11 |
|
14 | |||
12 |
|
15 | |||
13 | def make_map(config): |
|
16 | def make_map(config): | |
@@ -16,15 +19,35 b' def make_map(config):' | |||||
16 | always_scan=config['debug']) |
|
19 | always_scan=config['debug']) | |
17 | rmap.minimization = False |
|
20 | rmap.minimization = False | |
18 | rmap.explicit = False |
|
21 | rmap.explicit = False | |
19 |
|
22 | |||
|
23 | from rhodecode.lib.utils import is_valid_repo | |||
|
24 | from rhodecode.lib.utils import is_valid_repos_group | |||
|
25 | ||||
20 | def check_repo(environ, match_dict): |
|
26 | def check_repo(environ, match_dict): | |
21 | """ |
|
27 | """ | |
22 | check for valid repository for proper 404 handling |
|
28 | check for valid repository for proper 404 handling | |
|
29 | ||||
23 | :param environ: |
|
30 | :param environ: | |
24 | :param match_dict: |
|
31 | :param match_dict: | |
25 | """ |
|
32 | """ | |
|
33 | ||||
26 | repo_name = match_dict.get('repo_name') |
|
34 | repo_name = match_dict.get('repo_name') | |
27 |
return |
|
35 | return is_valid_repo(repo_name, config['base_path']) | |
|
36 | ||||
|
37 | def check_group(environ, match_dict): | |||
|
38 | """ | |||
|
39 | check for valid repositories group for proper 404 handling | |||
|
40 | ||||
|
41 | :param environ: | |||
|
42 | :param match_dict: | |||
|
43 | """ | |||
|
44 | repos_group_name = match_dict.get('group_name') | |||
|
45 | ||||
|
46 | return is_valid_repos_group(repos_group_name, config['base_path']) | |||
|
47 | ||||
|
48 | ||||
|
49 | def check_int(environ, match_dict): | |||
|
50 | return match_dict.get('id').isdigit() | |||
28 |
|
51 | |||
29 | # The ErrorController route (handles 404/500 error pages); it should |
|
52 | # The ErrorController route (handles 404/500 error pages); it should | |
30 | # likely stay at the top, ensuring it can always be resolved |
|
53 | # likely stay at the top, ensuring it can always be resolved | |
@@ -37,13 +60,16 b' def make_map(config):' | |||||
37 |
|
60 | |||
38 | #MAIN PAGE |
|
61 | #MAIN PAGE | |
39 | rmap.connect('home', '/', controller='home', action='index') |
|
62 | rmap.connect('home', '/', controller='home', action='index') | |
|
63 | rmap.connect('repo_switcher', '/repos', controller='home', | |||
|
64 | action='repo_switcher') | |||
40 | rmap.connect('bugtracker', |
|
65 | rmap.connect('bugtracker', | |
41 | "http://bitbucket.org/marcinkuzminski/rhodecode/issues", |
|
66 | "http://bitbucket.org/marcinkuzminski/rhodecode/issues", | |
42 | _static=True) |
|
67 | _static=True) | |
43 | rmap.connect('rhodecode_official', "http://rhodecode.org", _static=True) |
|
68 | rmap.connect('rhodecode_official', "http://rhodecode.org", _static=True) | |
44 |
|
69 | |||
45 | #ADMIN REPOSITORY REST ROUTES |
|
70 | #ADMIN REPOSITORY REST ROUTES | |
46 | with rmap.submapper(path_prefix='/_admin', controller='admin/repos') as m: |
|
71 | with rmap.submapper(path_prefix=ADMIN_PREFIX, | |
|
72 | controller='admin/repos') as m: | |||
47 | m.connect("repos", "/repos", |
|
73 | m.connect("repos", "/repos", | |
48 | action="create", conditions=dict(method=["POST"])) |
|
74 | action="create", conditions=dict(method=["POST"])) | |
49 | m.connect("repos", "/repos", |
|
75 | m.connect("repos", "/repos", | |
@@ -77,6 +103,12 b' def make_map(config):' | |||||
77 | m.connect('delete_repo_user', "/repos_delete_user/{repo_name:.*}", |
|
103 | m.connect('delete_repo_user', "/repos_delete_user/{repo_name:.*}", | |
78 | action="delete_perm_user", conditions=dict(method=["DELETE"], |
|
104 | action="delete_perm_user", conditions=dict(method=["DELETE"], | |
79 | function=check_repo)) |
|
105 | function=check_repo)) | |
|
106 | #ajax delete repo perm users_group | |||
|
107 | m.connect('delete_repo_users_group', | |||
|
108 | "/repos_delete_users_group/{repo_name:.*}", | |||
|
109 | action="delete_perm_users_group", | |||
|
110 | conditions=dict(method=["DELETE"], function=check_repo)) | |||
|
111 | ||||
80 | #settings actions |
|
112 | #settings actions | |
81 | m.connect('repo_stats', "/repos_stats/{repo_name:.*}", |
|
113 | m.connect('repo_stats', "/repos_stats/{repo_name:.*}", | |
82 | action="repo_stats", conditions=dict(method=["DELETE"], |
|
114 | action="repo_stats", conditions=dict(method=["DELETE"], | |
@@ -84,23 +116,126 b' def make_map(config):' | |||||
84 | m.connect('repo_cache', "/repos_cache/{repo_name:.*}", |
|
116 | m.connect('repo_cache', "/repos_cache/{repo_name:.*}", | |
85 | action="repo_cache", conditions=dict(method=["DELETE"], |
|
117 | action="repo_cache", conditions=dict(method=["DELETE"], | |
86 | function=check_repo)) |
|
118 | function=check_repo)) | |
|
119 | m.connect('repo_public_journal', | |||
|
120 | "/repos_public_journal/{repo_name:.*}", | |||
|
121 | action="repo_public_journal", conditions=dict(method=["PUT"], | |||
|
122 | function=check_repo)) | |||
|
123 | m.connect('repo_pull', "/repo_pull/{repo_name:.*}", | |||
|
124 | action="repo_pull", conditions=dict(method=["PUT"], | |||
|
125 | function=check_repo)) | |||
|
126 | ||||
|
127 | with rmap.submapper(path_prefix=ADMIN_PREFIX, | |||
|
128 | controller='admin/repos_groups') as m: | |||
|
129 | m.connect("repos_groups", "/repos_groups", | |||
|
130 | action="create", conditions=dict(method=["POST"])) | |||
|
131 | m.connect("repos_groups", "/repos_groups", | |||
|
132 | action="index", conditions=dict(method=["GET"])) | |||
|
133 | m.connect("formatted_repos_groups", "/repos_groups.{format}", | |||
|
134 | action="index", conditions=dict(method=["GET"])) | |||
|
135 | m.connect("new_repos_group", "/repos_groups/new", | |||
|
136 | action="new", conditions=dict(method=["GET"])) | |||
|
137 | m.connect("formatted_new_repos_group", "/repos_groups/new.{format}", | |||
|
138 | action="new", conditions=dict(method=["GET"])) | |||
|
139 | m.connect("update_repos_group", "/repos_groups/{id}", | |||
|
140 | action="update", conditions=dict(method=["PUT"], | |||
|
141 | function=check_int)) | |||
|
142 | m.connect("delete_repos_group", "/repos_groups/{id}", | |||
|
143 | action="delete", conditions=dict(method=["DELETE"], | |||
|
144 | function=check_int)) | |||
|
145 | m.connect("edit_repos_group", "/repos_groups/{id}/edit", | |||
|
146 | action="edit", conditions=dict(method=["GET"], | |||
|
147 | function=check_int)) | |||
|
148 | m.connect("formatted_edit_repos_group", | |||
|
149 | "/repos_groups/{id}.{format}/edit", | |||
|
150 | action="edit", conditions=dict(method=["GET"], | |||
|
151 | function=check_int)) | |||
|
152 | m.connect("repos_group", "/repos_groups/{id}", | |||
|
153 | action="show", conditions=dict(method=["GET"], | |||
|
154 | function=check_int)) | |||
|
155 | m.connect("formatted_repos_group", "/repos_groups/{id}.{format}", | |||
|
156 | action="show", conditions=dict(method=["GET"], | |||
|
157 | function=check_int)) | |||
|
158 | ||||
87 | #ADMIN USER REST ROUTES |
|
159 | #ADMIN USER REST ROUTES | |
88 | rmap.resource('user', 'users', controller='admin/users', |
|
160 | with rmap.submapper(path_prefix=ADMIN_PREFIX, | |
89 |
|
|
161 | controller='admin/users') as m: | |
|
162 | m.connect("users", "/users", | |||
|
163 | action="create", conditions=dict(method=["POST"])) | |||
|
164 | m.connect("users", "/users", | |||
|
165 | action="index", conditions=dict(method=["GET"])) | |||
|
166 | m.connect("formatted_users", "/users.{format}", | |||
|
167 | action="index", conditions=dict(method=["GET"])) | |||
|
168 | m.connect("new_user", "/users/new", | |||
|
169 | action="new", conditions=dict(method=["GET"])) | |||
|
170 | m.connect("formatted_new_user", "/users/new.{format}", | |||
|
171 | action="new", conditions=dict(method=["GET"])) | |||
|
172 | m.connect("update_user", "/users/{id}", | |||
|
173 | action="update", conditions=dict(method=["PUT"])) | |||
|
174 | m.connect("delete_user", "/users/{id}", | |||
|
175 | action="delete", conditions=dict(method=["DELETE"])) | |||
|
176 | m.connect("edit_user", "/users/{id}/edit", | |||
|
177 | action="edit", conditions=dict(method=["GET"])) | |||
|
178 | m.connect("formatted_edit_user", | |||
|
179 | "/users/{id}.{format}/edit", | |||
|
180 | action="edit", conditions=dict(method=["GET"])) | |||
|
181 | m.connect("user", "/users/{id}", | |||
|
182 | action="show", conditions=dict(method=["GET"])) | |||
|
183 | m.connect("formatted_user", "/users/{id}.{format}", | |||
|
184 | action="show", conditions=dict(method=["GET"])) | |||
|
185 | ||||
|
186 | #EXTRAS USER ROUTES | |||
|
187 | m.connect("user_perm", "/users_perm/{id}", | |||
|
188 | action="update_perm", conditions=dict(method=["PUT"])) | |||
|
189 | ||||
|
190 | #ADMIN USERS REST ROUTES | |||
|
191 | with rmap.submapper(path_prefix=ADMIN_PREFIX, | |||
|
192 | controller='admin/users_groups') as m: | |||
|
193 | m.connect("users_groups", "/users_groups", | |||
|
194 | action="create", conditions=dict(method=["POST"])) | |||
|
195 | m.connect("users_groups", "/users_groups", | |||
|
196 | action="index", conditions=dict(method=["GET"])) | |||
|
197 | m.connect("formatted_users_groups", "/users_groups.{format}", | |||
|
198 | action="index", conditions=dict(method=["GET"])) | |||
|
199 | m.connect("new_users_group", "/users_groups/new", | |||
|
200 | action="new", conditions=dict(method=["GET"])) | |||
|
201 | m.connect("formatted_new_users_group", "/users_groups/new.{format}", | |||
|
202 | action="new", conditions=dict(method=["GET"])) | |||
|
203 | m.connect("update_users_group", "/users_groups/{id}", | |||
|
204 | action="update", conditions=dict(method=["PUT"])) | |||
|
205 | m.connect("delete_users_group", "/users_groups/{id}", | |||
|
206 | action="delete", conditions=dict(method=["DELETE"])) | |||
|
207 | m.connect("edit_users_group", "/users_groups/{id}/edit", | |||
|
208 | action="edit", conditions=dict(method=["GET"])) | |||
|
209 | m.connect("formatted_edit_users_group", | |||
|
210 | "/users_groups/{id}.{format}/edit", | |||
|
211 | action="edit", conditions=dict(method=["GET"])) | |||
|
212 | m.connect("users_group", "/users_groups/{id}", | |||
|
213 | action="show", conditions=dict(method=["GET"])) | |||
|
214 | m.connect("formatted_users_group", "/users_groups/{id}.{format}", | |||
|
215 | action="show", conditions=dict(method=["GET"])) | |||
|
216 | ||||
|
217 | #EXTRAS USER ROUTES | |||
|
218 | m.connect("users_group_perm", "/users_groups_perm/{id}", | |||
|
219 | action="update_perm", conditions=dict(method=["PUT"])) | |||
|
220 | ||||
|
221 | #ADMIN GROUP REST ROUTES | |||
|
222 | rmap.resource('group', 'groups', | |||
|
223 | controller='admin/groups', path_prefix=ADMIN_PREFIX) | |||
90 |
|
224 | |||
91 | #ADMIN PERMISSIONS REST ROUTES |
|
225 | #ADMIN PERMISSIONS REST ROUTES | |
92 |
rmap.resource('permission', 'permissions', |
|
226 | rmap.resource('permission', 'permissions', | |
93 | path_prefix='/_admin') |
|
227 | controller='admin/permissions', path_prefix=ADMIN_PREFIX) | |
94 |
|
228 | |||
95 | ##ADMIN LDAP SETTINGS |
|
229 | ##ADMIN LDAP SETTINGS | |
96 |
rmap.connect('ldap_settings', ' |
|
230 | rmap.connect('ldap_settings', '%s/ldap' % ADMIN_PREFIX, | |
97 | controller='admin/ldap_settings', action='ldap_settings', |
|
231 | controller='admin/ldap_settings', action='ldap_settings', | |
98 | conditions=dict(method=["POST"])) |
|
232 | conditions=dict(method=["POST"])) | |
99 | rmap.connect('ldap_home', '/_admin/ldap', |
|
233 | ||
100 | controller='admin/ldap_settings',) |
|
234 | rmap.connect('ldap_home', '%s/ldap' % ADMIN_PREFIX, | |
|
235 | controller='admin/ldap_settings') | |||
101 |
|
236 | |||
102 | #ADMIN SETTINGS REST ROUTES |
|
237 | #ADMIN SETTINGS REST ROUTES | |
103 |
with rmap.submapper(path_prefix= |
|
238 | with rmap.submapper(path_prefix=ADMIN_PREFIX, | |
104 | controller='admin/settings') as m: |
|
239 | controller='admin/settings') as m: | |
105 | m.connect("admin_settings", "/settings", |
|
240 | m.connect("admin_settings", "/settings", | |
106 | action="create", conditions=dict(method=["POST"])) |
|
241 | action="create", conditions=dict(method=["POST"])) | |
@@ -132,41 +267,79 b' def make_map(config):' | |||||
132 | m.connect("admin_settings_create_repository", "/create_repository", |
|
267 | m.connect("admin_settings_create_repository", "/create_repository", | |
133 | action="create_repository", conditions=dict(method=["GET"])) |
|
268 | action="create_repository", conditions=dict(method=["GET"])) | |
134 |
|
269 | |||
|
270 | ||||
135 | #ADMIN MAIN PAGES |
|
271 | #ADMIN MAIN PAGES | |
136 | with rmap.submapper(path_prefix='/_admin', controller='admin/admin') as m: |
|
272 | with rmap.submapper(path_prefix=ADMIN_PREFIX, | |
|
273 | controller='admin/admin') as m: | |||
137 | m.connect('admin_home', '', action='index') |
|
274 | m.connect('admin_home', '', action='index') | |
138 | m.connect('admin_add_repo', '/add_repo/{new_repo:[a-z0-9\. _-]*}', |
|
275 | m.connect('admin_add_repo', '/add_repo/{new_repo:[a-z0-9\. _-]*}', | |
139 | action='add_repo') |
|
276 | action='add_repo') | |
140 |
|
277 | |||
|
278 | #========================================================================== | |||
|
279 | # API V1 | |||
|
280 | #========================================================================== | |||
|
281 | with rmap.submapper(path_prefix=ADMIN_PREFIX, | |||
|
282 | controller='api/api') as m: | |||
|
283 | m.connect('api', '/api') | |||
|
284 | ||||
|
285 | ||||
141 | #USER JOURNAL |
|
286 | #USER JOURNAL | |
142 |
rmap.connect('journal', ' |
|
287 | rmap.connect('journal', '%s/journal' % ADMIN_PREFIX, controller='journal') | |
143 | rmap.connect('toggle_following', '/_admin/toggle_following', |
|
288 | ||
|
289 | rmap.connect('public_journal', '%s/public_journal' % ADMIN_PREFIX, | |||
|
290 | controller='journal', action="public_journal") | |||
|
291 | ||||
|
292 | rmap.connect('public_journal_rss', '%s/public_journal_rss' % ADMIN_PREFIX, | |||
|
293 | controller='journal', action="public_journal_rss") | |||
|
294 | ||||
|
295 | rmap.connect('public_journal_atom', | |||
|
296 | '%s/public_journal_atom' % ADMIN_PREFIX, controller='journal', | |||
|
297 | action="public_journal_atom") | |||
|
298 | ||||
|
299 | rmap.connect('toggle_following', '%s/toggle_following' % ADMIN_PREFIX, | |||
144 | controller='journal', action='toggle_following', |
|
300 | controller='journal', action='toggle_following', | |
145 | conditions=dict(method=["POST"])) |
|
301 | conditions=dict(method=["POST"])) | |
146 |
|
302 | |||
147 | #SEARCH |
|
303 | #SEARCH | |
148 |
rmap.connect('search', ' |
|
304 | rmap.connect('search', '%s/search' % ADMIN_PREFIX, controller='search',) | |
149 |
rmap.connect('search_repo', ' |
|
305 | rmap.connect('search_repo', '%s/search/{search_repo:.*}' % ADMIN_PREFIX, | |
150 | controller='search') |
|
306 | controller='search') | |
151 |
|
307 | |||
152 | #LOGIN/LOGOUT/REGISTER/SIGN IN |
|
308 | #LOGIN/LOGOUT/REGISTER/SIGN IN | |
153 |
rmap.connect('login_home', ' |
|
309 | rmap.connect('login_home', '%s/login' % ADMIN_PREFIX, controller='login') | |
154 |
rmap.connect('logout_home', ' |
|
310 | rmap.connect('logout_home', '%s/logout' % ADMIN_PREFIX, controller='login', | |
155 | action='logout') |
|
311 | action='logout') | |
156 | rmap.connect('register', '/_admin/register', controller='login', |
|
312 | ||
|
313 | rmap.connect('register', '%s/register' % ADMIN_PREFIX, controller='login', | |||
157 | action='register') |
|
314 | action='register') | |
158 | rmap.connect('reset_password', '/_admin/password_reset', |
|
315 | ||
|
316 | rmap.connect('reset_password', '%s/password_reset' % ADMIN_PREFIX, | |||
159 | controller='login', action='password_reset') |
|
317 | controller='login', action='password_reset') | |
160 |
|
318 | |||
|
319 | rmap.connect('reset_password_confirmation', | |||
|
320 | '%s/password_reset_confirmation' % ADMIN_PREFIX, | |||
|
321 | controller='login', action='password_reset_confirmation') | |||
|
322 | ||||
161 | #FEEDS |
|
323 | #FEEDS | |
162 | rmap.connect('rss_feed_home', '/{repo_name:.*}/feed/rss', |
|
324 | rmap.connect('rss_feed_home', '/{repo_name:.*}/feed/rss', | |
163 | controller='feed', action='rss', |
|
325 | controller='feed', action='rss', | |
164 | conditions=dict(function=check_repo)) |
|
326 | conditions=dict(function=check_repo)) | |
|
327 | ||||
165 | rmap.connect('atom_feed_home', '/{repo_name:.*}/feed/atom', |
|
328 | rmap.connect('atom_feed_home', '/{repo_name:.*}/feed/atom', | |
166 | controller='feed', action='atom', |
|
329 | controller='feed', action='atom', | |
167 | conditions=dict(function=check_repo)) |
|
330 | conditions=dict(function=check_repo)) | |
168 |
|
331 | |||
169 | #REPOSITORY ROUTES |
|
332 | #========================================================================== | |
|
333 | # REPOSITORY ROUTES | |||
|
334 | #========================================================================== | |||
|
335 | rmap.connect('summary_home', '/{repo_name:.*}', | |||
|
336 | controller='summary', | |||
|
337 | conditions=dict(function=check_repo)) | |||
|
338 | ||||
|
339 | # rmap.connect('repo_group_home', '/{group_name:.*}', | |||
|
340 | # controller='admin/repos_groups',action="show_by_name", | |||
|
341 | # conditions=dict(function=check_group)) | |||
|
342 | ||||
170 | rmap.connect('changeset_home', '/{repo_name:.*}/changeset/{revision}', |
|
343 | rmap.connect('changeset_home', '/{repo_name:.*}/changeset/{revision}', | |
171 | controller='changeset', revision='tip', |
|
344 | controller='changeset', revision='tip', | |
172 | conditions=dict(function=check_repo)) |
|
345 | conditions=dict(function=check_repo)) | |
@@ -176,9 +349,6 b' def make_map(config):' | |||||
176 | controller='changeset', action='raw_changeset', |
|
349 | controller='changeset', action='raw_changeset', | |
177 | revision='tip', conditions=dict(function=check_repo)) |
|
350 | revision='tip', conditions=dict(function=check_repo)) | |
178 |
|
351 | |||
179 | rmap.connect('summary_home_', '/{repo_name:.*}', |
|
|||
180 | controller='summary', conditions=dict(function=check_repo)) |
|
|||
181 |
|
||||
182 | rmap.connect('summary_home', '/{repo_name:.*}/summary', |
|
352 | rmap.connect('summary_home', '/{repo_name:.*}/summary', | |
183 | controller='summary', conditions=dict(function=check_repo)) |
|
353 | controller='summary', conditions=dict(function=check_repo)) | |
184 |
|
354 | |||
@@ -194,6 +364,10 b' def make_map(config):' | |||||
194 | rmap.connect('changelog_home', '/{repo_name:.*}/changelog', |
|
364 | rmap.connect('changelog_home', '/{repo_name:.*}/changelog', | |
195 | controller='changelog', conditions=dict(function=check_repo)) |
|
365 | controller='changelog', conditions=dict(function=check_repo)) | |
196 |
|
366 | |||
|
367 | rmap.connect('changelog_details', '/{repo_name:.*}/changelog_details/{cs}', | |||
|
368 | controller='changelog', action='changelog_details', | |||
|
369 | conditions=dict(function=check_repo)) | |||
|
370 | ||||
197 | rmap.connect('files_home', '/{repo_name:.*}/files/{revision}/{f_path:.*}', |
|
371 | rmap.connect('files_home', '/{repo_name:.*}/files/{revision}/{f_path:.*}', | |
198 | controller='files', revision='tip', f_path='', |
|
372 | controller='files', revision='tip', f_path='', | |
199 | conditions=dict(function=check_repo)) |
|
373 | conditions=dict(function=check_repo)) | |
@@ -217,28 +391,51 b' def make_map(config):' | |||||
217 | controller='files', action='annotate', revision='tip', |
|
391 | controller='files', action='annotate', revision='tip', | |
218 | f_path='', conditions=dict(function=check_repo)) |
|
392 | f_path='', conditions=dict(function=check_repo)) | |
219 |
|
393 | |||
220 |
rmap.connect('files_ |
|
394 | rmap.connect('files_edit_home', | |
221 |
'/{repo_name:.*}/ |
|
395 | '/{repo_name:.*}/edit/{revision}/{f_path:.*}', | |
222 |
controller='files', action=' |
|
396 | controller='files', action='edit', revision='tip', | |
223 | conditions=dict(function=check_repo)) |
|
397 | f_path='', conditions=dict(function=check_repo)) | |
|
398 | ||||
|
399 | rmap.connect('files_add_home', | |||
|
400 | '/{repo_name:.*}/add/{revision}/{f_path:.*}', | |||
|
401 | controller='files', action='add', revision='tip', | |||
|
402 | f_path='', conditions=dict(function=check_repo)) | |||
|
403 | ||||
|
404 | rmap.connect('files_archive_home', '/{repo_name:.*}/archive/{fname}', | |||
|
405 | controller='files', action='archivefile', | |||
|
406 | conditions=dict(function=check_repo)) | |||
|
407 | ||||
|
408 | rmap.connect('files_nodelist_home', | |||
|
409 | '/{repo_name:.*}/nodelist/{revision}/{f_path:.*}', | |||
|
410 | controller='files', action='nodelist', | |||
|
411 | conditions=dict(function=check_repo)) | |||
224 |
|
412 | |||
225 | rmap.connect('repo_settings_delete', '/{repo_name:.*}/settings', |
|
413 | rmap.connect('repo_settings_delete', '/{repo_name:.*}/settings', | |
226 |
|
|
414 | controller='settings', action="delete", | |
227 |
|
|
415 | conditions=dict(method=["DELETE"], function=check_repo)) | |
228 |
|
416 | |||
229 | rmap.connect('repo_settings_update', '/{repo_name:.*}/settings', |
|
417 | rmap.connect('repo_settings_update', '/{repo_name:.*}/settings', | |
230 |
|
|
418 | controller='settings', action="update", | |
231 |
|
|
419 | conditions=dict(method=["PUT"], function=check_repo)) | |
232 |
|
420 | |||
233 | rmap.connect('repo_settings_home', '/{repo_name:.*}/settings', |
|
421 | rmap.connect('repo_settings_home', '/{repo_name:.*}/settings', | |
234 |
|
|
422 | controller='settings', action='index', | |
235 |
|
|
423 | conditions=dict(function=check_repo)) | |
236 |
|
424 | |||
237 | rmap.connect('repo_fork_create_home', '/{repo_name:.*}/fork', |
|
425 | rmap.connect('repo_fork_create_home', '/{repo_name:.*}/fork', | |
238 | controller='settings', action='fork_create', |
|
426 | controller='settings', action='fork_create', | |
239 | conditions=dict(function=check_repo, method=["POST"])) |
|
427 | conditions=dict(function=check_repo, method=["POST"])) | |
|
428 | ||||
240 | rmap.connect('repo_fork_home', '/{repo_name:.*}/fork', |
|
429 | rmap.connect('repo_fork_home', '/{repo_name:.*}/fork', | |
241 | controller='settings', action='fork', |
|
430 | controller='settings', action='fork', | |
242 | conditions=dict(function=check_repo)) |
|
431 | conditions=dict(function=check_repo)) | |
243 |
|
432 | |||
|
433 | rmap.connect('repo_followers_home', '/{repo_name:.*}/followers', | |||
|
434 | controller='followers', action='followers', | |||
|
435 | conditions=dict(function=check_repo)) | |||
|
436 | ||||
|
437 | rmap.connect('repo_forks_home', '/{repo_name:.*}/forks', | |||
|
438 | controller='forks', action='forks', | |||
|
439 | conditions=dict(function=check_repo)) | |||
|
440 | ||||
244 | return rmap |
|
441 | return rmap |
@@ -4,10 +4,10 b'' | |||||
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
5 |
|
5 | |||
6 | Controller for Admin panel of Rhodecode |
|
6 | Controller for Admin panel of Rhodecode | |
7 |
|
7 | |||
8 | :created_on: Apr 7, 2010 |
|
8 | :created_on: Apr 7, 2010 | |
9 | :author: marcink |
|
9 | :author: marcink | |
10 |
:copyright: (C) 2009-201 |
|
10 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |
11 | :license: GPLv3, see COPYING for more details. |
|
11 | :license: GPLv3, see COPYING for more details. | |
12 | """ |
|
12 | """ | |
13 | # This program is free software: you can redistribute it and/or modify |
|
13 | # This program is free software: you can redistribute it and/or modify | |
@@ -24,14 +24,18 b'' | |||||
24 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
24 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
25 |
|
25 | |||
26 | import logging |
|
26 | import logging | |
|
27 | ||||
27 | from pylons import request, tmpl_context as c |
|
28 | from pylons import request, tmpl_context as c | |
|
29 | from sqlalchemy.orm import joinedload | |||
|
30 | from webhelpers.paginate import Page | |||
|
31 | ||||
|
32 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator | |||
28 | from rhodecode.lib.base import BaseController, render |
|
33 | from rhodecode.lib.base import BaseController, render | |
29 | from rhodecode.model.db import UserLog |
|
34 | from rhodecode.model.db import UserLog | |
30 | from webhelpers.paginate import Page |
|
|||
31 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator |
|
|||
32 |
|
35 | |||
33 | log = logging.getLogger(__name__) |
|
36 | log = logging.getLogger(__name__) | |
34 |
|
37 | |||
|
38 | ||||
35 | class AdminController(BaseController): |
|
39 | class AdminController(BaseController): | |
36 |
|
40 | |||
37 | @LoginRequired() |
|
41 | @LoginRequired() | |
@@ -41,11 +45,15 b' class AdminController(BaseController):' | |||||
41 | @HasPermissionAllDecorator('hg.admin') |
|
45 | @HasPermissionAllDecorator('hg.admin') | |
42 | def index(self): |
|
46 | def index(self): | |
43 |
|
47 | |||
44 |
users_log = self.sa.query(UserLog) |
|
48 | users_log = self.sa.query(UserLog)\ | |
|
49 | .options(joinedload(UserLog.user))\ | |||
|
50 | .options(joinedload(UserLog.repository))\ | |||
|
51 | .order_by(UserLog.action_date.desc()) | |||
|
52 | ||||
45 | p = int(request.params.get('page', 1)) |
|
53 | p = int(request.params.get('page', 1)) | |
46 | c.users_log = Page(users_log, page=p, items_per_page=10) |
|
54 | c.users_log = Page(users_log, page=p, items_per_page=10) | |
47 | c.log_data = render('admin/admin_log.html') |
|
55 | c.log_data = render('admin/admin_log.html') | |
48 | if request.params.get('partial'): |
|
56 | ||
|
57 | if request.environ.get('HTTP_X_PARTIAL_XHR'): | |||
49 | return c.log_data |
|
58 | return c.log_data | |
50 | return render('admin/admin.html') |
|
59 | return render('admin/admin.html') | |
51 |
|
@@ -4,10 +4,10 b'' | |||||
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
5 |
|
5 | |||
6 | ldap controller for RhodeCode |
|
6 | ldap controller for RhodeCode | |
7 |
|
7 | |||
8 | :created_on: Nov 26, 2010 |
|
8 | :created_on: Nov 26, 2010 | |
9 | :author: marcink |
|
9 | :author: marcink | |
10 |
:copyright: (C) 2009-201 |
|
10 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |
11 | :license: GPLv3, see COPYING for more details. |
|
11 | :license: GPLv3, see COPYING for more details. | |
12 | """ |
|
12 | """ | |
13 | # This program is free software: you can redistribute it and/or modify |
|
13 | # This program is free software: you can redistribute it and/or modify | |
@@ -32,29 +32,61 b' from pylons import request, response, se' | |||||
32 | from pylons.controllers.util import abort, redirect |
|
32 | from pylons.controllers.util import abort, redirect | |
33 | from pylons.i18n.translation import _ |
|
33 | from pylons.i18n.translation import _ | |
34 |
|
34 | |||
|
35 | from sqlalchemy.exc import DatabaseError | |||
|
36 | ||||
35 | from rhodecode.lib.base import BaseController, render |
|
37 | from rhodecode.lib.base import BaseController, render | |
36 | from rhodecode.lib import helpers as h |
|
38 | from rhodecode.lib import helpers as h | |
37 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator |
|
39 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator | |
38 |
from rhodecode.lib. |
|
40 | from rhodecode.lib.exceptions import LdapImportError | |
39 | from rhodecode.model.settings import SettingsModel |
|
|||
40 | from rhodecode.model.forms import LdapSettingsForm |
|
41 | from rhodecode.model.forms import LdapSettingsForm | |
41 | from sqlalchemy.exc import DatabaseError |
|
42 | from rhodecode.model.db import RhodeCodeSettings | |
42 |
|
43 | |||
43 | log = logging.getLogger(__name__) |
|
44 | log = logging.getLogger(__name__) | |
44 |
|
45 | |||
45 |
|
46 | |||
|
47 | class LdapSettingsController(BaseController): | |||
46 |
|
48 | |||
47 | class LdapSettingsController(BaseController): |
|
49 | search_scope_choices = [('BASE', _('BASE'),), | |
|
50 | ('ONELEVEL', _('ONELEVEL'),), | |||
|
51 | ('SUBTREE', _('SUBTREE'),), | |||
|
52 | ] | |||
|
53 | search_scope_default = 'SUBTREE' | |||
|
54 | ||||
|
55 | tls_reqcert_choices = [('NEVER', _('NEVER'),), | |||
|
56 | ('ALLOW', _('ALLOW'),), | |||
|
57 | ('TRY', _('TRY'),), | |||
|
58 | ('DEMAND', _('DEMAND'),), | |||
|
59 | ('HARD', _('HARD'),), | |||
|
60 | ] | |||
|
61 | tls_reqcert_default = 'DEMAND' | |||
|
62 | ||||
|
63 | tls_kind_choices = [('PLAIN', _('No encryption'),), | |||
|
64 | ('LDAPS', _('LDAPS connection'),), | |||
|
65 | ('START_TLS', _('START_TLS on LDAP connection'),) | |||
|
66 | ] | |||
|
67 | ||||
|
68 | tls_kind_default = 'PLAIN' | |||
48 |
|
69 | |||
49 | @LoginRequired() |
|
70 | @LoginRequired() | |
50 | @HasPermissionAllDecorator('hg.admin') |
|
71 | @HasPermissionAllDecorator('hg.admin') | |
51 | def __before__(self): |
|
72 | def __before__(self): | |
52 | c.admin_user = session.get('admin_user') |
|
73 | c.admin_user = session.get('admin_user') | |
53 | c.admin_username = session.get('admin_username') |
|
74 | c.admin_username = session.get('admin_username') | |
|
75 | c.search_scope_choices = self.search_scope_choices | |||
|
76 | c.tls_reqcert_choices = self.tls_reqcert_choices | |||
|
77 | c.tls_kind_choices = self.tls_kind_choices | |||
|
78 | ||||
|
79 | c.search_scope_cur = self.search_scope_default | |||
|
80 | c.tls_reqcert_cur = self.tls_reqcert_default | |||
|
81 | c.tls_kind_cur = self.tls_kind_default | |||
|
82 | ||||
54 | super(LdapSettingsController, self).__before__() |
|
83 | super(LdapSettingsController, self).__before__() | |
55 |
|
84 | |||
56 | def index(self): |
|
85 | def index(self): | |
57 |
defaults = Settings |
|
86 | defaults = RhodeCodeSettings.get_ldap_settings() | |
|
87 | c.search_scope_cur = defaults.get('ldap_search_scope') | |||
|
88 | c.tls_reqcert_cur = defaults.get('ldap_tls_reqcert') | |||
|
89 | c.tls_kind_cur = defaults.get('ldap_tls_kind') | |||
58 |
|
90 | |||
59 | return htmlfill.render( |
|
91 | return htmlfill.render( | |
60 | render('admin/ldap/ldap.html'), |
|
92 | render('admin/ldap/ldap.html'), | |
@@ -65,17 +97,17 b' class LdapSettingsController(BaseControl' | |||||
65 | def ldap_settings(self): |
|
97 | def ldap_settings(self): | |
66 | """POST ldap create and store ldap settings""" |
|
98 | """POST ldap create and store ldap settings""" | |
67 |
|
99 | |||
68 | settings_model = SettingsModel() |
|
100 | _form = LdapSettingsForm([x[0] for x in self.tls_reqcert_choices], | |
69 | post_data = dict(request.POST) |
|
101 | [x[0] for x in self.search_scope_choices], | |
70 | _form = LdapSettingsForm(post_data.get('ldap_active'))() |
|
102 | [x[0] for x in self.tls_kind_choices])() | |
71 |
|
103 | |||
72 | try: |
|
104 | try: | |
73 |
form_result = _form.to_python( |
|
105 | form_result = _form.to_python(dict(request.POST)) | |
74 | try: |
|
106 | try: | |
75 |
|
107 | |||
76 | for k, v in form_result.items(): |
|
108 | for k, v in form_result.items(): | |
77 | if k.startswith('ldap_'): |
|
109 | if k.startswith('ldap_'): | |
78 |
setting = |
|
110 | setting = RhodeCodeSettings.get_by_name(k) | |
79 | setting.app_settings_value = v |
|
111 | setting.app_settings_value = v | |
80 | self.sa.add(setting) |
|
112 | self.sa.add(setting) | |
81 |
|
113 | |||
@@ -89,11 +121,12 b' class LdapSettingsController(BaseControl' | |||||
89 | 'is missing.'), category='warning') |
|
121 | 'is missing.'), category='warning') | |
90 |
|
122 | |||
91 | except formencode.Invalid, errors: |
|
123 | except formencode.Invalid, errors: | |
|
124 | e = errors.error_dict or {} | |||
92 |
|
125 | |||
93 | return htmlfill.render( |
|
126 | return htmlfill.render( | |
94 | render('admin/ldap/ldap.html'), |
|
127 | render('admin/ldap/ldap.html'), | |
95 | defaults=errors.value, |
|
128 | defaults=errors.value, | |
96 |
errors=e |
|
129 | errors=e, | |
97 | prefix_error=False, |
|
130 | prefix_error=False, | |
98 | encoding="UTF-8") |
|
131 | encoding="UTF-8") | |
99 | except Exception: |
|
132 | except Exception: |
@@ -2,12 +2,12 b'' | |||||
2 | """ |
|
2 | """ | |
3 | rhodecode.controllers.admin.permissions |
|
3 | rhodecode.controllers.admin.permissions | |
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
5 |
|
5 | |||
6 | permissions controller for Rhodecode |
|
6 | permissions controller for Rhodecode | |
7 |
|
7 | |||
8 | :created_on: Apr 27, 2010 |
|
8 | :created_on: Apr 27, 2010 | |
9 | :author: marcink |
|
9 | :author: marcink | |
10 |
:copyright: (C) 2009-201 |
|
10 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |
11 | :license: GPLv3, see COPYING for more details. |
|
11 | :license: GPLv3, see COPYING for more details. | |
12 | """ |
|
12 | """ | |
13 | # This program is free software: you can redistribute it and/or modify |
|
13 | # This program is free software: you can redistribute it and/or modify | |
@@ -23,24 +23,25 b'' | |||||
23 | # You should have received a copy of the GNU General Public License |
|
23 | # You should have received a copy of the GNU General Public License | |
24 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
24 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
25 |
|
25 | |||
|
26 | import logging | |||
|
27 | import traceback | |||
|
28 | import formencode | |||
26 | from formencode import htmlfill |
|
29 | from formencode import htmlfill | |
|
30 | ||||
27 | from pylons import request, session, tmpl_context as c, url |
|
31 | from pylons import request, session, tmpl_context as c, url | |
28 | from pylons.controllers.util import abort, redirect |
|
32 | from pylons.controllers.util import abort, redirect | |
29 | from pylons.i18n.translation import _ |
|
33 | from pylons.i18n.translation import _ | |
|
34 | ||||
30 | from rhodecode.lib import helpers as h |
|
35 | from rhodecode.lib import helpers as h | |
31 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator |
|
36 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator | |
32 | from rhodecode.lib.auth_ldap import LdapImportError |
|
|||
33 | from rhodecode.lib.base import BaseController, render |
|
37 | from rhodecode.lib.base import BaseController, render | |
34 |
from rhodecode.model.forms import |
|
38 | from rhodecode.model.forms import DefaultPermissionsForm | |
35 | from rhodecode.model.permission import PermissionModel |
|
39 | from rhodecode.model.permission import PermissionModel | |
36 |
from rhodecode.model. |
|
40 | from rhodecode.model.db import User | |
37 | from rhodecode.model.user import UserModel |
|
|||
38 | import formencode |
|
|||
39 | import logging |
|
|||
40 | import traceback |
|
|||
41 |
|
41 | |||
42 | log = logging.getLogger(__name__) |
|
42 | log = logging.getLogger(__name__) | |
43 |
|
43 | |||
|
44 | ||||
44 | class PermissionsController(BaseController): |
|
45 | class PermissionsController(BaseController): | |
45 | """REST Controller styled on the Atom Publishing Protocol""" |
|
46 | """REST Controller styled on the Atom Publishing Protocol""" | |
46 | # To properly map this controller, ensure your config/routing.py |
|
47 | # To properly map this controller, ensure your config/routing.py | |
@@ -69,7 +70,6 b' class PermissionsController(BaseControll' | |||||
69 | self.create_choices = [('hg.create.none', _('Disabled')), |
|
70 | self.create_choices = [('hg.create.none', _('Disabled')), | |
70 | ('hg.create.repository', _('Enabled'))] |
|
71 | ('hg.create.repository', _('Enabled'))] | |
71 |
|
72 | |||
72 |
|
||||
73 | def index(self, format='html'): |
|
73 | def index(self, format='html'): | |
74 | """GET /permissions: All items in the collection""" |
|
74 | """GET /permissions: All items in the collection""" | |
75 | # url('permissions') |
|
75 | # url('permissions') | |
@@ -99,7 +99,7 b' class PermissionsController(BaseControll' | |||||
99 |
|
99 | |||
100 | try: |
|
100 | try: | |
101 | form_result = _form.to_python(dict(request.POST)) |
|
101 | form_result = _form.to_python(dict(request.POST)) | |
102 | form_result.update({'perm_user_name':id}) |
|
102 | form_result.update({'perm_user_name': id}) | |
103 | permission_model.update(form_result) |
|
103 | permission_model.update(form_result) | |
104 | h.flash(_('Default permissions updated successfully'), |
|
104 | h.flash(_('Default permissions updated successfully'), | |
105 | category='success') |
|
105 | category='success') | |
@@ -123,8 +123,6 b' class PermissionsController(BaseControll' | |||||
123 |
|
123 | |||
124 | return redirect(url('edit_permission', id=id)) |
|
124 | return redirect(url('edit_permission', id=id)) | |
125 |
|
125 | |||
126 |
|
||||
127 |
|
||||
128 | def delete(self, id): |
|
126 | def delete(self, id): | |
129 | """DELETE /permissions/id: Delete an existing item""" |
|
127 | """DELETE /permissions/id: Delete an existing item""" | |
130 | # Forms posted to this method should contain a hidden field: |
|
128 | # Forms posted to this method should contain a hidden field: | |
@@ -146,9 +144,9 b' class PermissionsController(BaseControll' | |||||
146 | c.create_choices = self.create_choices |
|
144 | c.create_choices = self.create_choices | |
147 |
|
145 | |||
148 | if id == 'default': |
|
146 | if id == 'default': | |
149 |
default_user = User |
|
147 | default_user = User.by_username('default') | |
150 | defaults = {'_method':'put', |
|
148 | defaults = {'_method': 'put', | |
151 | 'anonymous':default_user.active} |
|
149 | 'anonymous': default_user.active} | |
152 |
|
150 | |||
153 | for p in default_user.user_perms: |
|
151 | for p in default_user.user_perms: | |
154 | if p.permission.permission_name.startswith('repository.'): |
|
152 | if p.permission.permission_name.startswith('repository.'): |
@@ -2,12 +2,12 b'' | |||||
2 | """ |
|
2 | """ | |
3 | rhodecode.controllers.admin.repos |
|
3 | rhodecode.controllers.admin.repos | |
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
5 |
|
5 | |||
6 | Admin controller for RhodeCode |
|
6 | Admin controller for RhodeCode | |
7 |
|
7 | |||
8 | :created_on: Apr 7, 2010 |
|
8 | :created_on: Apr 7, 2010 | |
9 | :author: marcink |
|
9 | :author: marcink | |
10 |
:copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> |
|
10 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |
11 | :license: GPLv3, see COPYING for more details. |
|
11 | :license: GPLv3, see COPYING for more details. | |
12 | """ |
|
12 | """ | |
13 | # This program is free software: you can redistribute it and/or modify |
|
13 | # This program is free software: you can redistribute it and/or modify | |
@@ -38,17 +38,20 b' from rhodecode.lib import helpers as h' | |||||
38 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \ |
|
38 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \ | |
39 | HasPermissionAnyDecorator |
|
39 | HasPermissionAnyDecorator | |
40 | from rhodecode.lib.base import BaseController, render |
|
40 | from rhodecode.lib.base import BaseController, render | |
41 | from rhodecode.lib.utils import invalidate_cache, action_logger |
|
41 | from rhodecode.lib.utils import invalidate_cache, action_logger, repo_name_slug | |
42 |
from rhodecode. |
|
42 | from rhodecode.lib.helpers import get_token | |
|
43 | from rhodecode.model.db import User, Repository, UserFollowing, Group | |||
43 | from rhodecode.model.forms import RepoForm |
|
44 | from rhodecode.model.forms import RepoForm | |
44 | from rhodecode.model.scm import ScmModel |
|
45 | from rhodecode.model.scm import ScmModel | |
45 | from rhodecode.model.repo import RepoModel |
|
46 | from rhodecode.model.repo import RepoModel | |
46 |
|
47 | from sqlalchemy.exc import IntegrityError | ||
47 |
|
48 | |||
48 | log = logging.getLogger(__name__) |
|
49 | log = logging.getLogger(__name__) | |
49 |
|
50 | |||
|
51 | ||||
50 | class ReposController(BaseController): |
|
52 | class ReposController(BaseController): | |
51 | """REST Controller styled on the Atom Publishing Protocol""" |
|
53 | """ | |
|
54 | REST Controller styled on the Atom Publishing Protocol""" | |||
52 | # To properly map this controller, ensure your config/routing.py |
|
55 | # To properly map this controller, ensure your config/routing.py | |
53 | # file has a resource setup: |
|
56 | # file has a resource setup: | |
54 | # map.resource('repo', 'repos') |
|
57 | # map.resource('repo', 'repos') | |
@@ -60,35 +63,129 b' class ReposController(BaseController):' | |||||
60 | c.admin_username = session.get('admin_username') |
|
63 | c.admin_username = session.get('admin_username') | |
61 | super(ReposController, self).__before__() |
|
64 | super(ReposController, self).__before__() | |
62 |
|
65 | |||
|
66 | def __load_defaults(self): | |||
|
67 | repo_model = RepoModel() | |||
|
68 | ||||
|
69 | c.repo_groups = [('', '')] | |||
|
70 | parents_link = lambda k: h.literal('»'.join( | |||
|
71 | map(lambda k: k.group_name, | |||
|
72 | k.parents + [k]) | |||
|
73 | ) | |||
|
74 | ) | |||
|
75 | ||||
|
76 | c.repo_groups.extend([(x.group_id, parents_link(x)) for \ | |||
|
77 | x in self.sa.query(Group).all()]) | |||
|
78 | c.repo_groups = sorted(c.repo_groups, | |||
|
79 | key=lambda t: t[1].split('»')[0]) | |||
|
80 | c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) | |||
|
81 | c.users_array = repo_model.get_users_js() | |||
|
82 | c.users_groups_array = repo_model.get_users_groups_js() | |||
|
83 | ||||
|
84 | def __load_data(self, repo_name=None): | |||
|
85 | """ | |||
|
86 | Load defaults settings for edit, and update | |||
|
87 | ||||
|
88 | :param repo_name: | |||
|
89 | """ | |||
|
90 | self.__load_defaults() | |||
|
91 | ||||
|
92 | c.repo_info = db_repo = Repository.by_repo_name(repo_name) | |||
|
93 | repo = scm_repo = db_repo.scm_instance | |||
|
94 | ||||
|
95 | if c.repo_info is None: | |||
|
96 | h.flash(_('%s repository is not mapped to db perhaps' | |||
|
97 | ' it was created or renamed from the filesystem' | |||
|
98 | ' please run the application again' | |||
|
99 | ' in order to rescan repositories') % repo_name, | |||
|
100 | category='error') | |||
|
101 | ||||
|
102 | return redirect(url('repos')) | |||
|
103 | ||||
|
104 | c.default_user_id = User.by_username('default').user_id | |||
|
105 | c.in_public_journal = self.sa.query(UserFollowing)\ | |||
|
106 | .filter(UserFollowing.user_id == c.default_user_id)\ | |||
|
107 | .filter(UserFollowing.follows_repository == c.repo_info).scalar() | |||
|
108 | ||||
|
109 | if c.repo_info.stats: | |||
|
110 | last_rev = c.repo_info.stats.stat_on_revision | |||
|
111 | else: | |||
|
112 | last_rev = 0 | |||
|
113 | c.stats_revision = last_rev | |||
|
114 | ||||
|
115 | c.repo_last_rev = repo.count() - 1 if repo.revisions else 0 | |||
|
116 | ||||
|
117 | if last_rev == 0 or c.repo_last_rev == 0: | |||
|
118 | c.stats_percentage = 0 | |||
|
119 | else: | |||
|
120 | c.stats_percentage = '%.2f' % ((float((last_rev)) / | |||
|
121 | c.repo_last_rev) * 100) | |||
|
122 | ||||
|
123 | defaults = c.repo_info.get_dict() | |||
|
124 | group, repo_name = c.repo_info.groups_and_repo | |||
|
125 | defaults['repo_name'] = repo_name | |||
|
126 | defaults['repo_group'] = getattr(group[-1] if group else None, | |||
|
127 | 'group_id', None) | |||
|
128 | ||||
|
129 | #fill owner | |||
|
130 | if c.repo_info.user: | |||
|
131 | defaults.update({'user': c.repo_info.user.username}) | |||
|
132 | else: | |||
|
133 | replacement_user = self.sa.query(User)\ | |||
|
134 | .filter(User.admin == True).first().username | |||
|
135 | defaults.update({'user': replacement_user}) | |||
|
136 | ||||
|
137 | #fill repository users | |||
|
138 | for p in c.repo_info.repo_to_perm: | |||
|
139 | defaults.update({'u_perm_%s' % p.user.username: | |||
|
140 | p.permission.permission_name}) | |||
|
141 | ||||
|
142 | #fill repository groups | |||
|
143 | for p in c.repo_info.users_group_to_perm: | |||
|
144 | defaults.update({'g_perm_%s' % p.users_group.users_group_name: | |||
|
145 | p.permission.permission_name}) | |||
|
146 | ||||
|
147 | return defaults | |||
|
148 | ||||
63 | @HasPermissionAllDecorator('hg.admin') |
|
149 | @HasPermissionAllDecorator('hg.admin') | |
64 | def index(self, format='html'): |
|
150 | def index(self, format='html'): | |
65 | """GET /repos: All items in the collection""" |
|
151 | """GET /repos: All items in the collection""" | |
66 | # url('repos') |
|
152 | # url('repos') | |
67 | cached_repo_list = ScmModel().get_repos() |
|
153 | ||
68 | c.repos_list = sorted(cached_repo_list, key=itemgetter('name_sort')) |
|
154 | c.repos_list = ScmModel().get_repos(Repository.query() | |
|
155 | .order_by(Repository.repo_name) | |||
|
156 | .all(), sort_key='name_sort') | |||
69 | return render('admin/repos/repos.html') |
|
157 | return render('admin/repos/repos.html') | |
70 |
|
158 | |||
71 | @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository') |
|
159 | @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository') | |
72 | def create(self): |
|
160 | def create(self): | |
73 | """POST /repos: Create a new item""" |
|
161 | """ | |
|
162 | POST /repos: Create a new item""" | |||
74 | # url('repos') |
|
163 | # url('repos') | |
75 | repo_model = RepoModel() |
|
164 | repo_model = RepoModel() | |
76 | _form = RepoForm()() |
|
165 | self.__load_defaults() | |
77 | form_result = {} |
|
166 | form_result = {} | |
78 | try: |
|
167 | try: | |
79 | form_result = _form.to_python(dict(request.POST)) |
|
168 | form_result = RepoForm(repo_groups=c.repo_groups_choices)()\ | |
80 | repo_model.create(form_result, c.rhodecode_user) |
|
169 | .to_python(dict(request.POST)) | |
81 | h.flash(_('created repository %s') % form_result['repo_name'], |
|
170 | repo_model.create(form_result, self.rhodecode_user) | |
|
171 | if form_result['clone_uri']: | |||
|
172 | h.flash(_('created repository %s from %s') \ | |||
|
173 | % (form_result['repo_name'], form_result['clone_uri']), | |||
|
174 | category='success') | |||
|
175 | else: | |||
|
176 | h.flash(_('created repository %s') % form_result['repo_name'], | |||
82 | category='success') |
|
177 | category='success') | |
83 |
|
178 | |||
84 | if request.POST.get('user_created'): |
|
179 | if request.POST.get('user_created'): | |
|
180 | #created by regular non admin user | |||
85 | action_logger(self.rhodecode_user, 'user_created_repo', |
|
181 | action_logger(self.rhodecode_user, 'user_created_repo', | |
86 | form_result['repo_name'], '', self.sa) |
|
182 | form_result['repo_name_full'], '', self.sa) | |
87 | else: |
|
183 | else: | |
88 | action_logger(self.rhodecode_user, 'admin_created_repo', |
|
184 | action_logger(self.rhodecode_user, 'admin_created_repo', | |
89 | form_result['repo_name'], '', self.sa) |
|
185 | form_result['repo_name_full'], '', self.sa) | |
90 |
|
186 | |||
91 | except formencode.Invalid, errors: |
|
187 | except formencode.Invalid, errors: | |
|
188 | ||||
92 | c.new_repo = errors.value['repo_name'] |
|
189 | c.new_repo = errors.value['repo_name'] | |
93 |
|
190 | |||
94 | if request.POST.get('user_created'): |
|
191 | if request.POST.get('user_created'): | |
@@ -116,54 +213,41 b' class ReposController(BaseController):' | |||||
116 | def new(self, format='html'): |
|
213 | def new(self, format='html'): | |
117 | """GET /repos/new: Form to create a new item""" |
|
214 | """GET /repos/new: Form to create a new item""" | |
118 | new_repo = request.GET.get('repo', '') |
|
215 | new_repo = request.GET.get('repo', '') | |
119 |
c.new_repo = |
|
216 | c.new_repo = repo_name_slug(new_repo) | |
120 |
|
217 | self.__load_defaults() | ||
121 | return render('admin/repos/repo_add.html') |
|
218 | return render('admin/repos/repo_add.html') | |
122 |
|
219 | |||
123 | @HasPermissionAllDecorator('hg.admin') |
|
220 | @HasPermissionAllDecorator('hg.admin') | |
124 | def update(self, repo_name): |
|
221 | def update(self, repo_name): | |
125 | """PUT /repos/repo_name: Update an existing item""" |
|
222 | """ | |
|
223 | PUT /repos/repo_name: Update an existing item""" | |||
126 | # Forms posted to this method should contain a hidden field: |
|
224 | # Forms posted to this method should contain a hidden field: | |
127 | # <input type="hidden" name="_method" value="PUT" /> |
|
225 | # <input type="hidden" name="_method" value="PUT" /> | |
128 | # Or using helpers: |
|
226 | # Or using helpers: | |
129 | # h.form(url('repo', repo_name=ID), |
|
227 | # h.form(url('repo', repo_name=ID), | |
130 | # method='put') |
|
228 | # method='put') | |
131 | # url('repo', repo_name=ID) |
|
229 | # url('repo', repo_name=ID) | |
|
230 | self.__load_defaults() | |||
132 | repo_model = RepoModel() |
|
231 | repo_model = RepoModel() | |
133 | changed_name = repo_name |
|
232 | changed_name = repo_name | |
134 |
_form = RepoForm(edit=True, old_data={'repo_name':repo_name} |
|
233 | _form = RepoForm(edit=True, old_data={'repo_name': repo_name}, | |
135 |
|
234 | repo_groups=c.repo_groups_choices)() | ||
136 | try: |
|
235 | try: | |
137 | form_result = _form.to_python(dict(request.POST)) |
|
236 | form_result = _form.to_python(dict(request.POST)) | |
138 | repo_model.update(repo_name, form_result) |
|
237 | repo_model.update(repo_name, form_result) | |
139 | invalidate_cache('get_repo_cached_%s' % repo_name) |
|
238 | invalidate_cache('get_repo_cached_%s' % repo_name) | |
140 | h.flash(_('Repository %s updated successfully' % repo_name), |
|
239 | h.flash(_('Repository %s updated successfully' % repo_name), | |
141 | category='success') |
|
240 | category='success') | |
142 | changed_name = form_result['repo_name'] |
|
241 | changed_name = form_result['repo_name_full'] | |
143 | action_logger(self.rhodecode_user, 'admin_updated_repo', |
|
242 | action_logger(self.rhodecode_user, 'admin_updated_repo', | |
144 | changed_name, '', self.sa) |
|
243 | changed_name, '', self.sa) | |
145 |
|
244 | |||
146 | except formencode.Invalid, errors: |
|
245 | except formencode.Invalid, errors: | |
147 | c.repo_info = repo_model.get_by_repo_name(repo_name) |
|
246 | defaults = self.__load_data(repo_name) | |
148 | if c.repo_info.stats: |
|
247 | defaults.update(errors.value) | |
149 | last_rev = c.repo_info.stats.stat_on_revision |
|
|||
150 | else: |
|
|||
151 | last_rev = 0 |
|
|||
152 | c.stats_revision = last_rev |
|
|||
153 | r = ScmModel().get(repo_name) |
|
|||
154 | c.repo_last_rev = r.revisions[-1] if r.revisions else 0 |
|
|||
155 |
|
||||
156 | if last_rev == 0: |
|
|||
157 | c.stats_percentage = 0 |
|
|||
158 | else: |
|
|||
159 | c.stats_percentage = '%.2f' % ((float((last_rev)) / |
|
|||
160 | c.repo_last_rev) * 100) |
|
|||
161 |
|
||||
162 | c.users_array = repo_model.get_users_js() |
|
|||
163 | errors.value.update({'user':c.repo_info.user.username}) |
|
|||
164 | return htmlfill.render( |
|
248 | return htmlfill.render( | |
165 | render('admin/repos/repo_edit.html'), |
|
249 | render('admin/repos/repo_edit.html'), | |
166 |
defaults= |
|
250 | defaults=defaults, | |
167 | errors=errors.error_dict or {}, |
|
251 | errors=errors.error_dict or {}, | |
168 | prefix_error=False, |
|
252 | prefix_error=False, | |
169 | encoding="UTF-8") |
|
253 | encoding="UTF-8") | |
@@ -172,12 +256,12 b' class ReposController(BaseController):' | |||||
172 | log.error(traceback.format_exc()) |
|
256 | log.error(traceback.format_exc()) | |
173 | h.flash(_('error occurred during update of repository %s') \ |
|
257 | h.flash(_('error occurred during update of repository %s') \ | |
174 | % repo_name, category='error') |
|
258 | % repo_name, category='error') | |
175 |
|
||||
176 | return redirect(url('edit_repo', repo_name=changed_name)) |
|
259 | return redirect(url('edit_repo', repo_name=changed_name)) | |
177 |
|
260 | |||
178 | @HasPermissionAllDecorator('hg.admin') |
|
261 | @HasPermissionAllDecorator('hg.admin') | |
179 | def delete(self, repo_name): |
|
262 | def delete(self, repo_name): | |
180 | """DELETE /repos/repo_name: Delete an existing item""" |
|
263 | """ | |
|
264 | DELETE /repos/repo_name: Delete an existing item""" | |||
181 | # Forms posted to this method should contain a hidden field: |
|
265 | # Forms posted to this method should contain a hidden field: | |
182 | # <input type="hidden" name="_method" value="DELETE" /> |
|
266 | # <input type="hidden" name="_method" value="DELETE" /> | |
183 | # Or using helpers: |
|
267 | # Or using helpers: | |
@@ -202,6 +286,18 b' class ReposController(BaseController):' | |||||
202 | invalidate_cache('get_repo_cached_%s' % repo_name) |
|
286 | invalidate_cache('get_repo_cached_%s' % repo_name) | |
203 | h.flash(_('deleted repository %s') % repo_name, category='success') |
|
287 | h.flash(_('deleted repository %s') % repo_name, category='success') | |
204 |
|
288 | |||
|
289 | except IntegrityError, e: | |||
|
290 | if e.message.find('repositories_fork_id_fkey'): | |||
|
291 | log.error(traceback.format_exc()) | |||
|
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 | ||||
205 | except Exception, e: |
|
301 | except Exception, e: | |
206 | log.error(traceback.format_exc()) |
|
302 | log.error(traceback.format_exc()) | |
207 | h.flash(_('An error occurred during deletion of %s') % repo_name, |
|
303 | h.flash(_('An error occurred during deletion of %s') % repo_name, | |
@@ -213,6 +309,7 b' class ReposController(BaseController):' | |||||
213 | def delete_perm_user(self, repo_name): |
|
309 | def delete_perm_user(self, repo_name): | |
214 | """ |
|
310 | """ | |
215 | DELETE an existing repository permission user |
|
311 | DELETE an existing repository permission user | |
|
312 | ||||
216 | :param repo_name: |
|
313 | :param repo_name: | |
217 | """ |
|
314 | """ | |
218 |
|
315 | |||
@@ -225,9 +322,26 b' class ReposController(BaseController):' | |||||
225 | raise HTTPInternalServerError() |
|
322 | raise HTTPInternalServerError() | |
226 |
|
323 | |||
227 | @HasPermissionAllDecorator('hg.admin') |
|
324 | @HasPermissionAllDecorator('hg.admin') | |
|
325 | def delete_perm_users_group(self, repo_name): | |||
|
326 | """ | |||
|
327 | DELETE an existing repository permission users group | |||
|
328 | ||||
|
329 | :param repo_name: | |||
|
330 | """ | |||
|
331 | try: | |||
|
332 | repo_model = RepoModel() | |||
|
333 | repo_model.delete_perm_users_group(request.POST, repo_name) | |||
|
334 | except Exception, e: | |||
|
335 | h.flash(_('An error occurred during deletion of repository' | |||
|
336 | ' users groups'), | |||
|
337 | category='error') | |||
|
338 | raise HTTPInternalServerError() | |||
|
339 | ||||
|
340 | @HasPermissionAllDecorator('hg.admin') | |||
228 | def repo_stats(self, repo_name): |
|
341 | def repo_stats(self, repo_name): | |
229 | """ |
|
342 | """ | |
230 | DELETE an existing repository statistics |
|
343 | DELETE an existing repository statistics | |
|
344 | ||||
231 | :param repo_name: |
|
345 | :param repo_name: | |
232 | """ |
|
346 | """ | |
233 |
|
347 | |||
@@ -243,6 +357,7 b' class ReposController(BaseController):' | |||||
243 | def repo_cache(self, repo_name): |
|
357 | def repo_cache(self, repo_name): | |
244 | """ |
|
358 | """ | |
245 | INVALIDATE existing repository cache |
|
359 | INVALIDATE existing repository cache | |
|
360 | ||||
246 | :param repo_name: |
|
361 | :param repo_name: | |
247 | """ |
|
362 | """ | |
248 |
|
363 | |||
@@ -254,6 +369,50 b' class ReposController(BaseController):' | |||||
254 | return redirect(url('edit_repo', repo_name=repo_name)) |
|
369 | return redirect(url('edit_repo', repo_name=repo_name)) | |
255 |
|
370 | |||
256 | @HasPermissionAllDecorator('hg.admin') |
|
371 | @HasPermissionAllDecorator('hg.admin') | |
|
372 | def repo_public_journal(self, repo_name): | |||
|
373 | """ | |||
|
374 | Set's this repository to be visible in public journal, | |||
|
375 | in other words assing default user to follow this repo | |||
|
376 | ||||
|
377 | :param repo_name: | |||
|
378 | """ | |||
|
379 | ||||
|
380 | cur_token = request.POST.get('auth_token') | |||
|
381 | token = get_token() | |||
|
382 | if cur_token == token: | |||
|
383 | try: | |||
|
384 | repo_id = Repository.by_repo_name(repo_name).repo_id | |||
|
385 | user_id = User.by_username('default').user_id | |||
|
386 | self.scm_model.toggle_following_repo(repo_id, user_id) | |||
|
387 | h.flash(_('Updated repository visibility in public journal'), | |||
|
388 | category='success') | |||
|
389 | except: | |||
|
390 | h.flash(_('An error occurred during setting this' | |||
|
391 | ' repository in public journal'), | |||
|
392 | category='error') | |||
|
393 | ||||
|
394 | else: | |||
|
395 | h.flash(_('Token mismatch'), category='error') | |||
|
396 | return redirect(url('edit_repo', repo_name=repo_name)) | |||
|
397 | ||||
|
398 | @HasPermissionAllDecorator('hg.admin') | |||
|
399 | def repo_pull(self, repo_name): | |||
|
400 | """ | |||
|
401 | Runs task to update given repository with remote changes, | |||
|
402 | ie. make pull on remote location | |||
|
403 | ||||
|
404 | :param repo_name: | |||
|
405 | """ | |||
|
406 | try: | |||
|
407 | ScmModel().pull_changes(repo_name, self.rhodecode_user.username) | |||
|
408 | h.flash(_('Pulled from remote location'), category='success') | |||
|
409 | except Exception, e: | |||
|
410 | h.flash(_('An error occurred during pull from remote location'), | |||
|
411 | category='error') | |||
|
412 | ||||
|
413 | return redirect(url('edit_repo', repo_name=repo_name)) | |||
|
414 | ||||
|
415 | @HasPermissionAllDecorator('hg.admin') | |||
257 | def show(self, repo_name, format='html'): |
|
416 | def show(self, repo_name, format='html'): | |
258 | """GET /repos/repo_name: Show a specific item""" |
|
417 | """GET /repos/repo_name: Show a specific item""" | |
259 | # url('repo', repo_name=ID) |
|
418 | # url('repo', repo_name=ID) | |
@@ -262,46 +421,7 b' class ReposController(BaseController):' | |||||
262 | def edit(self, repo_name, format='html'): |
|
421 | def edit(self, repo_name, format='html'): | |
263 | """GET /repos/repo_name/edit: Form to edit an existing item""" |
|
422 | """GET /repos/repo_name/edit: Form to edit an existing item""" | |
264 | # url('edit_repo', repo_name=ID) |
|
423 | # url('edit_repo', repo_name=ID) | |
265 | repo_model = RepoModel() |
|
424 | defaults = self.__load_data(repo_name) | |
266 | r = ScmModel().get(repo_name) |
|
|||
267 | c.repo_info = repo_model.get_by_repo_name(repo_name) |
|
|||
268 |
|
||||
269 | if c.repo_info is None: |
|
|||
270 | h.flash(_('%s repository is not mapped to db perhaps' |
|
|||
271 | ' it was created or renamed from the filesystem' |
|
|||
272 | ' please run the application again' |
|
|||
273 | ' in order to rescan repositories') % repo_name, |
|
|||
274 | category='error') |
|
|||
275 |
|
||||
276 | return redirect(url('repos')) |
|
|||
277 |
|
||||
278 | if c.repo_info.stats: |
|
|||
279 | last_rev = c.repo_info.stats.stat_on_revision |
|
|||
280 | else: |
|
|||
281 | last_rev = 0 |
|
|||
282 | c.stats_revision = last_rev |
|
|||
283 |
|
||||
284 | c.repo_last_rev = r.revisions[-1] if r.revisions else 0 |
|
|||
285 |
|
||||
286 | if last_rev == 0 or c.repo_last_rev == 0: |
|
|||
287 | c.stats_percentage = 0 |
|
|||
288 | else: |
|
|||
289 | c.stats_percentage = '%.2f' % ((float((last_rev)) / |
|
|||
290 | c.repo_last_rev) * 100) |
|
|||
291 |
|
||||
292 | defaults = c.repo_info.get_dict() |
|
|||
293 | if c.repo_info.user: |
|
|||
294 | defaults.update({'user':c.repo_info.user.username}) |
|
|||
295 | else: |
|
|||
296 | replacement_user = self.sa.query(User)\ |
|
|||
297 | .filter(User.admin == True).first().username |
|
|||
298 | defaults.update({'user':replacement_user}) |
|
|||
299 |
|
||||
300 | c.users_array = repo_model.get_users_js() |
|
|||
301 |
|
||||
302 | for p in c.repo_info.repo_to_perm: |
|
|||
303 | defaults.update({'perm_%s' % p.user.username: |
|
|||
304 | p.permission.permission_name}) |
|
|||
305 |
|
425 | |||
306 | return htmlfill.render( |
|
426 | return htmlfill.render( | |
307 | render('admin/repos/repo_edit.html'), |
|
427 | render('admin/repos/repo_edit.html'), |
@@ -2,12 +2,12 b'' | |||||
2 | """ |
|
2 | """ | |
3 | rhodecode.controllers.admin.settings |
|
3 | rhodecode.controllers.admin.settings | |
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
5 |
|
5 | |||
6 | settings controller for rhodecode admin |
|
6 | settings controller for rhodecode admin | |
7 |
|
7 | |||
8 | :created_on: Jul 14, 2010 |
|
8 | :created_on: Jul 14, 2010 | |
9 | :author: marcink |
|
9 | :author: marcink | |
10 |
:copyright: (C) 2009-201 |
|
10 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |
11 | :license: GPLv3, see COPYING for more details. |
|
11 | :license: GPLv3, see COPYING for more details. | |
12 | """ |
|
12 | """ | |
13 | # This program is free software: you can redistribute it and/or modify |
|
13 | # This program is free software: you can redistribute it and/or modify | |
@@ -23,28 +23,30 b'' | |||||
23 | # You should have received a copy of the GNU General Public License |
|
23 | # You should have received a copy of the GNU General Public License | |
24 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
24 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
25 |
|
25 | |||
|
26 | import logging | |||
|
27 | import traceback | |||
|
28 | import formencode | |||
|
29 | ||||
|
30 | from sqlalchemy import func | |||
26 | from formencode import htmlfill |
|
31 | from formencode import htmlfill | |
27 |
from pylons import request, session, tmpl_context as c, url, |
|
32 | from pylons import request, session, tmpl_context as c, url, config | |
28 | config |
|
|||
29 | from pylons.controllers.util import abort, redirect |
|
33 | from pylons.controllers.util import abort, redirect | |
30 | from pylons.i18n.translation import _ |
|
34 | from pylons.i18n.translation import _ | |
|
35 | ||||
31 | from rhodecode.lib import helpers as h |
|
36 | from rhodecode.lib import helpers as h | |
32 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \ |
|
37 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \ | |
33 | HasPermissionAnyDecorator, NotAnonymous |
|
38 | HasPermissionAnyDecorator, NotAnonymous | |
34 | from rhodecode.lib.base import BaseController, render |
|
39 | from rhodecode.lib.base import BaseController, render | |
35 | from rhodecode.lib.celerylib import tasks, run_task |
|
40 | from rhodecode.lib.celerylib import tasks, run_task | |
36 | from rhodecode.lib.utils import repo2db_mapper, invalidate_cache, \ |
|
41 | from rhodecode.lib.utils import repo2db_mapper, invalidate_cache, \ | |
37 | set_rhodecode_config |
|
42 | set_rhodecode_config, repo_name_slug | |
38 | from rhodecode.model.db import RhodeCodeUi, Repository |
|
43 | from rhodecode.model.db import RhodeCodeUi, Repository, Group, \ | |
|
44 | RhodeCodeSettings | |||
39 | from rhodecode.model.forms import UserForm, ApplicationSettingsForm, \ |
|
45 | from rhodecode.model.forms import UserForm, ApplicationSettingsForm, \ | |
40 | ApplicationUiSettingsForm |
|
46 | ApplicationUiSettingsForm | |
41 | from rhodecode.model.scm import ScmModel |
|
47 | from rhodecode.model.scm import ScmModel | |
42 | from rhodecode.model.settings import SettingsModel |
|
|||
43 | from rhodecode.model.user import UserModel |
|
48 | from rhodecode.model.user import UserModel | |
44 | from sqlalchemy import func |
|
49 | from rhodecode.model.db import User | |
45 | import formencode |
|
|||
46 | import logging |
|
|||
47 | import traceback |
|
|||
48 |
|
50 | |||
49 | log = logging.getLogger(__name__) |
|
51 | log = logging.getLogger(__name__) | |
50 |
|
52 | |||
@@ -53,23 +55,21 b' class SettingsController(BaseController)' | |||||
53 | """REST Controller styled on the Atom Publishing Protocol""" |
|
55 | """REST Controller styled on the Atom Publishing Protocol""" | |
54 | # To properly map this controller, ensure your config/routing.py |
|
56 | # To properly map this controller, ensure your config/routing.py | |
55 | # file has a resource setup: |
|
57 | # file has a resource setup: | |
56 |
# map.resource('setting', 'settings', controller='admin/settings', |
|
58 | # map.resource('setting', 'settings', controller='admin/settings', | |
57 | # path_prefix='/admin', name_prefix='admin_') |
|
59 | # path_prefix='/admin', name_prefix='admin_') | |
58 |
|
60 | |||
59 |
|
||||
60 | @LoginRequired() |
|
61 | @LoginRequired() | |
61 | def __before__(self): |
|
62 | def __before__(self): | |
62 | c.admin_user = session.get('admin_user') |
|
63 | c.admin_user = session.get('admin_user') | |
63 | c.admin_username = session.get('admin_username') |
|
64 | c.admin_username = session.get('admin_username') | |
64 | super(SettingsController, self).__before__() |
|
65 | super(SettingsController, self).__before__() | |
65 |
|
66 | |||
66 |
|
||||
67 | @HasPermissionAllDecorator('hg.admin') |
|
67 | @HasPermissionAllDecorator('hg.admin') | |
68 | def index(self, format='html'): |
|
68 | def index(self, format='html'): | |
69 | """GET /admin/settings: All items in the collection""" |
|
69 | """GET /admin/settings: All items in the collection""" | |
70 | # url('admin_settings') |
|
70 | # url('admin_settings') | |
71 |
|
71 | |||
72 |
defaults = Settings |
|
72 | defaults = RhodeCodeSettings.get_app_settings() | |
73 | defaults.update(self.get_hg_ui_settings()) |
|
73 | defaults.update(self.get_hg_ui_settings()) | |
74 | return htmlfill.render( |
|
74 | return htmlfill.render( | |
75 | render('admin/settings/settings.html'), |
|
75 | render('admin/settings/settings.html'), | |
@@ -100,19 +100,21 b' class SettingsController(BaseController)' | |||||
100 | if setting_id == 'mapping': |
|
100 | if setting_id == 'mapping': | |
101 | rm_obsolete = request.POST.get('destroy', False) |
|
101 | rm_obsolete = request.POST.get('destroy', False) | |
102 | log.debug('Rescanning directories with destroy=%s', rm_obsolete) |
|
102 | log.debug('Rescanning directories with destroy=%s', rm_obsolete) | |
103 |
|
103 | initial = ScmModel().repo_scan() | ||
104 | initial = ScmModel().repo_scan(g.paths[0][1], g.baseui) |
|
104 | log.debug('invalidating all repositories') | |
105 | for repo_name in initial.keys(): |
|
105 | for repo_name in initial.keys(): | |
106 | invalidate_cache('get_repo_cached_%s' % repo_name) |
|
106 | invalidate_cache('get_repo_cached_%s' % repo_name) | |
107 |
|
107 | |||
108 | repo2db_mapper(initial, rm_obsolete) |
|
108 | added, removed = repo2db_mapper(initial, rm_obsolete) | |
109 |
|
109 | |||
110 |
h.flash(_('Repositories successfully |
|
110 | h.flash(_('Repositories successfully' | |
|
111 | ' rescanned added: %s,removed: %s') % (added, removed), | |||
|
112 | category='success') | |||
111 |
|
113 | |||
112 | if setting_id == 'whoosh': |
|
114 | if setting_id == 'whoosh': | |
113 | repo_location = self.get_hg_ui_settings()['paths_root_path'] |
|
115 | repo_location = self.get_hg_ui_settings()['paths_root_path'] | |
114 | full_index = request.POST.get('full_index', False) |
|
116 | full_index = request.POST.get('full_index', False) | |
115 |
|
|
117 | run_task(tasks.whoosh_index, repo_location, full_index) | |
116 |
|
118 | |||
117 | h.flash(_('Whoosh reindex task scheduled'), category='success') |
|
119 | h.flash(_('Whoosh reindex task scheduled'), category='success') | |
118 | if setting_id == 'global': |
|
120 | if setting_id == 'global': | |
@@ -120,30 +122,36 b' class SettingsController(BaseController)' | |||||
120 | application_form = ApplicationSettingsForm()() |
|
122 | application_form = ApplicationSettingsForm()() | |
121 | try: |
|
123 | try: | |
122 | form_result = application_form.to_python(dict(request.POST)) |
|
124 | form_result = application_form.to_python(dict(request.POST)) | |
123 | settings_model = SettingsModel() |
|
125 | ||
124 | try: |
|
126 | try: | |
125 |
hgsettings1 = |
|
127 | hgsettings1 = RhodeCodeSettings.get_by_name('title') | |
126 |
hgsettings1.app_settings_value = |
|
128 | hgsettings1.app_settings_value = \ | |
|
129 | form_result['rhodecode_title'] | |||
127 |
|
130 | |||
128 |
hgsettings2 = |
|
131 | hgsettings2 = RhodeCodeSettings.get_by_name('realm') | |
129 |
hgsettings2.app_settings_value = |
|
132 | hgsettings2.app_settings_value = \ | |
|
133 | form_result['rhodecode_realm'] | |||
130 |
|
134 | |||
|
135 | hgsettings3 = RhodeCodeSettings.get_by_name('ga_code') | |||
|
136 | hgsettings3.app_settings_value = \ | |||
|
137 | form_result['rhodecode_ga_code'] | |||
131 |
|
138 | |||
132 | self.sa.add(hgsettings1) |
|
139 | self.sa.add(hgsettings1) | |
133 | self.sa.add(hgsettings2) |
|
140 | self.sa.add(hgsettings2) | |
|
141 | self.sa.add(hgsettings3) | |||
134 | self.sa.commit() |
|
142 | self.sa.commit() | |
135 | set_rhodecode_config(config) |
|
143 | set_rhodecode_config(config) | |
136 | h.flash(_('Updated application settings'), |
|
144 | h.flash(_('Updated application settings'), | |
137 | category='success') |
|
145 | category='success') | |
138 |
|
146 | |||
139 | except: |
|
147 | except Exception: | |
140 | log.error(traceback.format_exc()) |
|
148 | log.error(traceback.format_exc()) | |
141 | h.flash(_('error occurred during updating' |
|
149 | h.flash(_('error occurred during updating ' | |
142 |
' |
|
150 | 'application settings'), | |
|
151 | category='error') | |||
143 |
|
152 | |||
144 | self.sa.rollback() |
|
153 | self.sa.rollback() | |
145 |
|
154 | |||
146 |
|
||||
147 | except formencode.Invalid, errors: |
|
155 | except formencode.Invalid, errors: | |
148 | return htmlfill.render( |
|
156 | return htmlfill.render( | |
149 | render('admin/settings/settings.html'), |
|
157 | render('admin/settings/settings.html'), | |
@@ -167,24 +175,30 b' class SettingsController(BaseController)' | |||||
167 | .filter(RhodeCodeUi.ui_key == '/').one() |
|
175 | .filter(RhodeCodeUi.ui_key == '/').one() | |
168 | hgsettings2.ui_value = form_result['paths_root_path'] |
|
176 | hgsettings2.ui_value = form_result['paths_root_path'] | |
169 |
|
177 | |||
170 |
|
||||
171 | #HOOKS |
|
178 | #HOOKS | |
172 | hgsettings3 = self.sa.query(RhodeCodeUi)\ |
|
179 | hgsettings3 = self.sa.query(RhodeCodeUi)\ | |
173 | .filter(RhodeCodeUi.ui_key == 'changegroup.update').one() |
|
180 | .filter(RhodeCodeUi.ui_key == 'changegroup.update').one() | |
174 |
hgsettings3.ui_active = |
|
181 | hgsettings3.ui_active = \ | |
|
182 | bool(form_result['hooks_changegroup_update']) | |||
175 |
|
183 | |||
176 | hgsettings4 = self.sa.query(RhodeCodeUi)\ |
|
184 | hgsettings4 = self.sa.query(RhodeCodeUi)\ | |
177 |
.filter(RhodeCodeUi.ui_key == |
|
185 | .filter(RhodeCodeUi.ui_key == | |
178 |
|
|
186 | 'changegroup.repo_size').one() | |
|
187 | hgsettings4.ui_active = \ | |||
|
188 | bool(form_result['hooks_changegroup_repo_size']) | |||
179 |
|
189 | |||
180 | hgsettings5 = self.sa.query(RhodeCodeUi)\ |
|
190 | hgsettings5 = self.sa.query(RhodeCodeUi)\ | |
181 |
.filter(RhodeCodeUi.ui_key == |
|
191 | .filter(RhodeCodeUi.ui_key == | |
182 |
|
|
192 | 'pretxnchangegroup.push_logger').one() | |
|
193 | hgsettings5.ui_active = \ | |||
|
194 | bool(form_result['hooks_pretxnchangegroup' | |||
|
195 | '_push_logger']) | |||
183 |
|
196 | |||
184 | hgsettings6 = self.sa.query(RhodeCodeUi)\ |
|
197 | hgsettings6 = self.sa.query(RhodeCodeUi)\ | |
185 |
.filter(RhodeCodeUi.ui_key == |
|
198 | .filter(RhodeCodeUi.ui_key == | |
186 |
|
|
199 | 'preoutgoing.pull_logger').one() | |
187 |
|
200 | hgsettings6.ui_active = \ | ||
|
201 | bool(form_result['hooks_preoutgoing_pull_logger']) | |||
188 |
|
202 | |||
189 | self.sa.add(hgsettings1) |
|
203 | self.sa.add(hgsettings1) | |
190 | self.sa.add(hgsettings2) |
|
204 | self.sa.add(hgsettings2) | |
@@ -199,12 +213,11 b' class SettingsController(BaseController)' | |||||
199 |
|
213 | |||
200 | except: |
|
214 | except: | |
201 | log.error(traceback.format_exc()) |
|
215 | log.error(traceback.format_exc()) | |
202 |
h.flash(_('error occurred during updating |
|
216 | h.flash(_('error occurred during updating ' | |
203 | category='error') |
|
217 | 'application settings'), category='error') | |
204 |
|
218 | |||
205 | self.sa.rollback() |
|
219 | self.sa.rollback() | |
206 |
|
220 | |||
207 |
|
||||
208 | except formencode.Invalid, errors: |
|
221 | except formencode.Invalid, errors: | |
209 | return htmlfill.render( |
|
222 | return htmlfill.render( | |
210 | render('admin/settings/settings.html'), |
|
223 | render('admin/settings/settings.html'), | |
@@ -214,6 +227,32 b' class SettingsController(BaseController)' | |||||
214 | encoding="UTF-8") |
|
227 | encoding="UTF-8") | |
215 |
|
228 | |||
216 |
|
229 | |||
|
230 | if setting_id == 'hooks': | |||
|
231 | ui_key = request.POST.get('new_hook_ui_key') | |||
|
232 | ui_value = request.POST.get('new_hook_ui_value') | |||
|
233 | try: | |||
|
234 | ||||
|
235 | if ui_value and ui_key: | |||
|
236 | RhodeCodeUi.create_or_update_hook(ui_key, ui_value) | |||
|
237 | h.flash(_('Added new hook'), | |||
|
238 | category='success') | |||
|
239 | ||||
|
240 | # check for edits | |||
|
241 | update = False | |||
|
242 | _d = request.POST.dict_of_lists() | |||
|
243 | for k, v in zip(_d.get('hook_ui_key',[]), _d.get('hook_ui_value_new',[])): | |||
|
244 | RhodeCodeUi.create_or_update_hook(k, v) | |||
|
245 | update = True | |||
|
246 | ||||
|
247 | if update: | |||
|
248 | h.flash(_('Updated hooks'), category='success') | |||
|
249 | ||||
|
250 | except: | |||
|
251 | log.error(traceback.format_exc()) | |||
|
252 | h.flash(_('error occurred during hook creation'), | |||
|
253 | category='error') | |||
|
254 | ||||
|
255 | return redirect(url('admin_edit_setting', setting_id='hooks')) | |||
217 |
|
256 | |||
218 | return redirect(url('admin_settings')) |
|
257 | return redirect(url('admin_settings')) | |
219 |
|
258 | |||
@@ -226,29 +265,45 b' class SettingsController(BaseController)' | |||||
226 | # h.form(url('admin_setting', setting_id=ID), |
|
265 | # h.form(url('admin_setting', setting_id=ID), | |
227 | # method='delete') |
|
266 | # method='delete') | |
228 | # url('admin_setting', setting_id=ID) |
|
267 | # url('admin_setting', setting_id=ID) | |
229 |
|
268 | if setting_id == 'hooks': | ||
|
269 | hook_id = request.POST.get('hook_id') | |||
|
270 | RhodeCodeUi.delete(hook_id) | |||
|
271 | ||||
|
272 | ||||
230 | @HasPermissionAllDecorator('hg.admin') |
|
273 | @HasPermissionAllDecorator('hg.admin') | |
231 | def show(self, setting_id, format='html'): |
|
274 | def show(self, setting_id, format='html'): | |
232 | """GET /admin/settings/setting_id: Show a specific item""" |
|
275 | """ | |
|
276 | GET /admin/settings/setting_id: Show a specific item""" | |||
233 | # url('admin_setting', setting_id=ID) |
|
277 | # url('admin_setting', setting_id=ID) | |
234 |
|
278 | |||
235 | @HasPermissionAllDecorator('hg.admin') |
|
279 | @HasPermissionAllDecorator('hg.admin') | |
236 | def edit(self, setting_id, format='html'): |
|
280 | def edit(self, setting_id, format='html'): | |
237 | """GET /admin/settings/setting_id/edit: Form to edit an existing item""" |
|
281 | """ | |
|
282 | GET /admin/settings/setting_id/edit: Form to | |||
|
283 | edit an existing item""" | |||
238 | # url('admin_edit_setting', setting_id=ID) |
|
284 | # url('admin_edit_setting', setting_id=ID) | |
239 |
|
285 | |||
|
286 | c.hooks = RhodeCodeUi.get_builtin_hooks() | |||
|
287 | c.custom_hooks = RhodeCodeUi.get_custom_hooks() | |||
|
288 | ||||
|
289 | return htmlfill.render( | |||
|
290 | render('admin/settings/hooks.html'), | |||
|
291 | defaults={}, | |||
|
292 | encoding="UTF-8", | |||
|
293 | force_defaults=False | |||
|
294 | ) | |||
|
295 | ||||
240 | @NotAnonymous() |
|
296 | @NotAnonymous() | |
241 | def my_account(self): |
|
297 | def my_account(self): | |
242 | """ |
|
298 | """ | |
243 |
GET /_admin/my_account Displays info about my account |
|
299 | GET /_admin/my_account Displays info about my account | |
244 | """ |
|
300 | """ | |
245 | # url('admin_settings_my_account') |
|
301 | # url('admin_settings_my_account') | |
246 |
|
302 | |||
247 |
c.user = User |
|
303 | c.user = User.get(self.rhodecode_user.user_id) | |
248 | all_repos = self.sa.query(Repository)\ |
|
304 | all_repos = self.sa.query(Repository)\ | |
249 | .filter(Repository.user_id == c.user.user_id)\ |
|
305 | .filter(Repository.user_id == c.user.user_id)\ | |
250 |
.order_by(func.lower(Repository.repo_name)) |
|
306 | .order_by(func.lower(Repository.repo_name)).all() | |
251 | .all() |
|
|||
252 |
|
307 | |||
253 | c.user_repos = ScmModel().get_repos(all_repos) |
|
308 | c.user_repos = ScmModel().get_repos(all_repos) | |
254 |
|
309 | |||
@@ -274,9 +329,10 b' class SettingsController(BaseController)' | |||||
274 | # method='put') |
|
329 | # method='put') | |
275 | # url('admin_settings_my_account_update', id=ID) |
|
330 | # url('admin_settings_my_account_update', id=ID) | |
276 | user_model = UserModel() |
|
331 | user_model = UserModel() | |
277 |
uid = |
|
332 | uid = self.rhodecode_user.user_id | |
278 |
_form = UserForm(edit=True, |
|
333 | _form = UserForm(edit=True, | |
279 | 'email':c.rhodecode_user.email})() |
|
334 | old_data={'user_id': uid, | |
|
335 | 'email': self.rhodecode_user.email})() | |||
280 | form_result = {} |
|
336 | form_result = {} | |
281 | try: |
|
337 | try: | |
282 | form_result = _form.to_python(dict(request.POST)) |
|
338 | form_result = _form.to_python(dict(request.POST)) | |
@@ -285,8 +341,7 b' class SettingsController(BaseController)' | |||||
285 | category='success') |
|
341 | category='success') | |
286 |
|
342 | |||
287 | except formencode.Invalid, errors: |
|
343 | except formencode.Invalid, errors: | |
288 |
c.user = |
|
344 | c.user = User.get(self.rhodecode_user.user_id) | |
289 | c.user = UserModel().get(c.rhodecode_user.user_id, cache=False) |
|
|||
290 | all_repos = self.sa.query(Repository)\ |
|
345 | all_repos = self.sa.query(Repository)\ | |
291 | .filter(Repository.user_id == c.user.user_id)\ |
|
346 | .filter(Repository.user_id == c.user.user_id)\ | |
292 | .order_by(func.lower(Repository.repo_name))\ |
|
347 | .order_by(func.lower(Repository.repo_name))\ | |
@@ -310,8 +365,22 b' class SettingsController(BaseController)' | |||||
310 | @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository') |
|
365 | @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository') | |
311 | def create_repository(self): |
|
366 | def create_repository(self): | |
312 | """GET /_admin/create_repository: Form to create a new item""" |
|
367 | """GET /_admin/create_repository: Form to create a new item""" | |
|
368 | ||||
|
369 | c.repo_groups = [('', '')] | |||
|
370 | parents_link = lambda k: h.literal('»'.join( | |||
|
371 | map(lambda k: k.group_name, | |||
|
372 | k.parents + [k]) | |||
|
373 | ) | |||
|
374 | ) | |||
|
375 | ||||
|
376 | c.repo_groups.extend([(x.group_id, parents_link(x)) for \ | |||
|
377 | x in self.sa.query(Group).all()]) | |||
|
378 | c.repo_groups = sorted(c.repo_groups, | |||
|
379 | key=lambda t: t[1].split('»')[0]) | |||
|
380 | c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) | |||
|
381 | ||||
313 | new_repo = request.GET.get('repo', '') |
|
382 | new_repo = request.GET.get('repo', '') | |
314 |
c.new_repo = |
|
383 | c.new_repo = repo_name_slug(new_repo) | |
315 |
|
384 | |||
316 | return render('admin/repos/repo_add_create_repository.html') |
|
385 | return render('admin/repos/repo_add_create_repository.html') | |
317 |
|
386 |
@@ -4,10 +4,10 b'' | |||||
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
5 |
|
5 | |||
6 | Users crud controller for pylons |
|
6 | Users crud controller for pylons | |
7 |
|
7 | |||
8 | :created_on: Apr 4, 2010 |
|
8 | :created_on: Apr 4, 2010 | |
9 | :author: marcink |
|
9 | :author: marcink | |
10 |
:copyright: (C) 2009-201 |
|
10 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |
11 | :license: GPLv3, see COPYING for more details. |
|
11 | :license: GPLv3, see COPYING for more details. | |
12 | """ |
|
12 | """ | |
13 | # This program is free software: you can redistribute it and/or modify |
|
13 | # This program is free software: you can redistribute it and/or modify | |
@@ -28,21 +28,23 b' import traceback' | |||||
28 | import formencode |
|
28 | import formencode | |
29 |
|
29 | |||
30 | from formencode import htmlfill |
|
30 | from formencode import htmlfill | |
31 | from pylons import request, session, tmpl_context as c, url |
|
31 | from pylons import request, session, tmpl_context as c, url, config | |
32 | from pylons.controllers.util import abort, redirect |
|
32 | from pylons.controllers.util import abort, redirect | |
33 | from pylons.i18n.translation import _ |
|
33 | from pylons.i18n.translation import _ | |
34 |
|
34 | |||
35 |
from rhodecode.lib.exceptions import |
|
35 | from rhodecode.lib.exceptions import DefaultUserException, \ | |
|
36 | UserOwnsReposException | |||
36 | from rhodecode.lib import helpers as h |
|
37 | from rhodecode.lib import helpers as h | |
37 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator |
|
38 | from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator | |
38 | from rhodecode.lib.base import BaseController, render |
|
39 | from rhodecode.lib.base import BaseController, render | |
39 |
|
40 | |||
40 | from rhodecode.model.db import User |
|
41 | from rhodecode.model.db import User, RepoToPerm, UserToPerm, Permission | |
41 | from rhodecode.model.forms import UserForm |
|
42 | from rhodecode.model.forms import UserForm | |
42 | from rhodecode.model.user import UserModel |
|
43 | from rhodecode.model.user import UserModel | |
43 |
|
44 | |||
44 | log = logging.getLogger(__name__) |
|
45 | log = logging.getLogger(__name__) | |
45 |
|
46 | |||
|
47 | ||||
46 | class UsersController(BaseController): |
|
48 | class UsersController(BaseController): | |
47 | """REST Controller styled on the Atom Publishing Protocol""" |
|
49 | """REST Controller styled on the Atom Publishing Protocol""" | |
48 | # To properly map this controller, ensure your config/routing.py |
|
50 | # To properly map this controller, ensure your config/routing.py | |
@@ -55,7 +57,7 b' class UsersController(BaseController):' | |||||
55 | c.admin_user = session.get('admin_user') |
|
57 | c.admin_user = session.get('admin_user') | |
56 | c.admin_username = session.get('admin_username') |
|
58 | c.admin_username = session.get('admin_username') | |
57 | super(UsersController, self).__before__() |
|
59 | super(UsersController, self).__before__() | |
58 |
|
60 | c.available_permissions = config['available_permissions'] | ||
59 |
|
61 | |||
60 | def index(self, format='html'): |
|
62 | def index(self, format='html'): | |
61 | """GET /users: All items in the collection""" |
|
63 | """GET /users: All items in the collection""" | |
@@ -99,25 +101,28 b' class UsersController(BaseController):' | |||||
99 | # Forms posted to this method should contain a hidden field: |
|
101 | # Forms posted to this method should contain a hidden field: | |
100 | # <input type="hidden" name="_method" value="PUT" /> |
|
102 | # <input type="hidden" name="_method" value="PUT" /> | |
101 | # Or using helpers: |
|
103 | # Or using helpers: | |
102 | # h.form(url('user', id=ID), |
|
104 | # h.form(url('update_user', id=ID), | |
103 | # method='put') |
|
105 | # method='put') | |
104 | # url('user', id=ID) |
|
106 | # url('user', id=ID) | |
105 | user_model = UserModel() |
|
107 | user_model = UserModel() | |
106 | c.user = user_model.get(id) |
|
108 | c.user = user_model.get(id) | |
107 |
|
109 | |||
108 | _form = UserForm(edit=True, old_data={'user_id':id, |
|
110 | _form = UserForm(edit=True, old_data={'user_id': id, | |
109 | 'email':c.user.email})() |
|
111 | 'email': c.user.email})() | |
110 | form_result = {} |
|
112 | form_result = {} | |
111 | try: |
|
113 | try: | |
112 | form_result = _form.to_python(dict(request.POST)) |
|
114 | form_result = _form.to_python(dict(request.POST)) | |
113 | user_model.update(id, form_result) |
|
115 | user_model.update(id, form_result) | |
114 | h.flash(_('User updated succesfully'), category='success') |
|
116 | h.flash(_('User updated successfully'), category='success') | |
115 |
|
117 | |||
116 | except formencode.Invalid, errors: |
|
118 | except formencode.Invalid, errors: | |
|
119 | e = errors.error_dict or {} | |||
|
120 | perm = Permission.get_by_key('hg.create.repository') | |||
|
121 | e.update({'create_repo_perm': UserToPerm.has_perm(id, perm)}) | |||
117 | return htmlfill.render( |
|
122 | return htmlfill.render( | |
118 | render('admin/users/user_edit.html'), |
|
123 | render('admin/users/user_edit.html'), | |
119 | defaults=errors.value, |
|
124 | defaults=errors.value, | |
120 |
errors=e |
|
125 | errors=e, | |
121 | prefix_error=False, |
|
126 | prefix_error=False, | |
122 | encoding="UTF-8") |
|
127 | encoding="UTF-8") | |
123 | except Exception: |
|
128 | except Exception: | |
@@ -132,13 +137,13 b' class UsersController(BaseController):' | |||||
132 | # Forms posted to this method should contain a hidden field: |
|
137 | # Forms posted to this method should contain a hidden field: | |
133 | # <input type="hidden" name="_method" value="DELETE" /> |
|
138 | # <input type="hidden" name="_method" value="DELETE" /> | |
134 | # Or using helpers: |
|
139 | # Or using helpers: | |
135 | # h.form(url('user', id=ID), |
|
140 | # h.form(url('delete_user', id=ID), | |
136 | # method='delete') |
|
141 | # method='delete') | |
137 | # url('user', id=ID) |
|
142 | # url('user', id=ID) | |
138 | user_model = UserModel() |
|
143 | user_model = UserModel() | |
139 | try: |
|
144 | try: | |
140 | user_model.delete(id) |
|
145 | user_model.delete(id) | |
141 | h.flash(_('sucessfully deleted user'), category='success') |
|
146 | h.flash(_('successfully deleted user'), category='success') | |
142 | except (UserOwnsReposException, DefaultUserException), e: |
|
147 | except (UserOwnsReposException, DefaultUserException), e: | |
143 | h.flash(str(e), category='warning') |
|
148 | h.flash(str(e), category='warning') | |
144 | except Exception: |
|
149 | except Exception: | |
@@ -150,21 +155,53 b' class UsersController(BaseController):' | |||||
150 | """GET /users/id: Show a specific item""" |
|
155 | """GET /users/id: Show a specific item""" | |
151 | # url('user', id=ID) |
|
156 | # url('user', id=ID) | |
152 |
|
157 | |||
153 |
|
||||
154 | def edit(self, id, format='html'): |
|
158 | def edit(self, id, format='html'): | |
155 | """GET /users/id/edit: Form to edit an existing item""" |
|
159 | """GET /users/id/edit: Form to edit an existing item""" | |
156 | # url('edit_user', id=ID) |
|
160 | # url('edit_user', id=ID) | |
157 | c.user = self.sa.query(User).get(id) |
|
161 | user_model = UserModel() | |
|
162 | c.user = user_model.get(id) | |||
158 | if not c.user: |
|
163 | if not c.user: | |
159 | return redirect(url('users')) |
|
164 | return redirect(url('users')) | |
160 | if c.user.username == 'default': |
|
165 | if c.user.username == 'default': | |
161 | h.flash(_("You can't edit this user"), category='warning') |
|
166 | h.flash(_("You can't edit this user"), category='warning') | |
162 | return redirect(url('users')) |
|
167 | return redirect(url('users')) | |
|
168 | c.user.permissions = {} | |||
|
169 | c.granted_permissions = user_model.fill_perms(c.user)\ | |||
|
170 | .permissions['global'] | |||
163 |
|
171 | |||
164 | defaults = c.user.get_dict() |
|
172 | defaults = c.user.get_dict() | |
|
173 | perm = Permission.get_by_key('hg.create.repository') | |||
|
174 | defaults.update({'create_repo_perm': UserToPerm.has_perm(id, perm)}) | |||
|
175 | ||||
165 | return htmlfill.render( |
|
176 | return htmlfill.render( | |
166 | render('admin/users/user_edit.html'), |
|
177 | render('admin/users/user_edit.html'), | |
167 | defaults=defaults, |
|
178 | defaults=defaults, | |
168 | encoding="UTF-8", |
|
179 | encoding="UTF-8", | |
169 | force_defaults=False |
|
180 | force_defaults=False | |
170 | ) |
|
181 | ) | |
|
182 | ||||
|
183 | def update_perm(self, id): | |||
|
184 | """PUT /users_perm/id: Update an existing item""" | |||
|
185 | # url('user_perm', id=ID, method='put') | |||
|
186 | ||||
|
187 | grant_perm = request.POST.get('create_repo_perm', False) | |||
|
188 | ||||
|
189 | if grant_perm: | |||
|
190 | perm = Permission.get_by_key('hg.create.none') | |||
|
191 | UserToPerm.revoke_perm(id, perm) | |||
|
192 | ||||
|
193 | perm = Permission.get_by_key('hg.create.repository') | |||
|
194 | UserToPerm.grant_perm(id, perm) | |||
|
195 | h.flash(_("Granted 'repository create' permission to user"), | |||
|
196 | category='success') | |||
|
197 | ||||
|
198 | else: | |||
|
199 | perm = Permission.get_by_key('hg.create.repository') | |||
|
200 | UserToPerm.revoke_perm(id, perm) | |||
|
201 | ||||
|
202 | perm = Permission.get_by_key('hg.create.none') | |||
|
203 | UserToPerm.grant_perm(id, perm) | |||
|
204 | h.flash(_("Revoked 'repository create' permission to user"), | |||
|
205 | category='success') | |||
|
206 | ||||
|
207 | return redirect(url('edit_user', id=id)) |
@@ -4,10 +4,10 b'' | |||||
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
5 |
|
5 | |||
6 | branches controller for rhodecode |
|
6 | branches controller for rhodecode | |
7 |
|
7 | |||
8 | :created_on: Apr 21, 2010 |
|
8 | :created_on: Apr 21, 2010 | |
9 | :author: marcink |
|
9 | :author: marcink | |
10 |
:copyright: (C) 2009-201 |
|
10 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |
11 | :license: GPLv3, see COPYING for more details. |
|
11 | :license: GPLv3, see COPYING for more details. | |
12 | """ |
|
12 | """ | |
13 | # This program is free software: you can redistribute it and/or modify |
|
13 | # This program is free software: you can redistribute it and/or modify | |
@@ -26,15 +26,16 b'' | |||||
26 | import logging |
|
26 | import logging | |
27 |
|
27 | |||
28 | from pylons import tmpl_context as c |
|
28 | from pylons import tmpl_context as c | |
|
29 | import binascii | |||
29 |
|
30 | |||
30 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator |
|
31 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator | |
31 | from rhodecode.lib.base import BaseController, render |
|
32 | from rhodecode.lib.base import BaseRepoController, render | |
32 |
from rhodecode.lib. |
|
33 | from rhodecode.lib.odict import OrderedDict | |
33 |
from rhodecode. |
|
34 | from rhodecode.lib import safe_unicode | |
34 |
|
||||
35 | log = logging.getLogger(__name__) |
|
35 | log = logging.getLogger(__name__) | |
36 |
|
36 | |||
37 | class BranchesController(BaseController): |
|
37 | ||
|
38 | class BranchesController(BaseRepoController): | |||
38 |
|
39 | |||
39 | @LoginRequired() |
|
40 | @LoginRequired() | |
40 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
|
41 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |
@@ -43,10 +44,35 b' class BranchesController(BaseController)' | |||||
43 | super(BranchesController, self).__before__() |
|
44 | super(BranchesController, self).__before__() | |
44 |
|
45 | |||
45 | def index(self): |
|
46 | def index(self): | |
46 | hg_model = ScmModel() |
|
47 | ||
47 | c.repo_info = hg_model.get_repo(c.repo_name) |
|
48 | def _branchtags(localrepo): | |
48 | c.repo_branches = OrderedDict() |
|
49 | ||
49 | for name, hash_ in c.repo_info.branches.items(): |
|
50 | bt = {} | |
50 | c.repo_branches[name] = c.repo_info.get_changeset(hash_) |
|
51 | bt_closed = {} | |
|
52 | ||||
|
53 | for bn, heads in localrepo.branchmap().iteritems(): | |||
|
54 | tip = heads[-1] | |||
|
55 | if 'close' not in localrepo.changelog.read(tip)[5]: | |||
|
56 | bt[bn] = tip | |||
|
57 | else: | |||
|
58 | bt_closed[bn] = tip | |||
|
59 | return bt, bt_closed | |||
|
60 | ||||
|
61 | ||||
|
62 | bt, bt_closed = _branchtags(c.rhodecode_repo._repo) | |||
|
63 | cs_g = c.rhodecode_repo.get_changeset | |||
|
64 | _branches = [(safe_unicode(n), cs_g(binascii.hexlify(h)),) for n, h in | |||
|
65 | bt.items()] | |||
|
66 | ||||
|
67 | _closed_branches = [(safe_unicode(n), cs_g(binascii.hexlify(h)),) for n, h in | |||
|
68 | bt_closed.items()] | |||
|
69 | ||||
|
70 | c.repo_branches = OrderedDict(sorted(_branches, | |||
|
71 | key=lambda ctx: ctx[0], | |||
|
72 | reverse=False)) | |||
|
73 | c.repo_closed_branches = OrderedDict(sorted(_closed_branches, | |||
|
74 | key=lambda ctx: ctx[0], | |||
|
75 | reverse=False)) | |||
|
76 | ||||
51 |
|
77 | |||
52 | return render('branches/branches.html') |
|
78 | return render('branches/branches.html') |
@@ -4,10 +4,10 b'' | |||||
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
5 |
|
5 | |||
6 | changelog controller for rhodecode |
|
6 | changelog controller for rhodecode | |
7 |
|
7 | |||
8 | :created_on: Apr 21, 2010 |
|
8 | :created_on: Apr 21, 2010 | |
9 | :author: marcink |
|
9 | :author: marcink | |
10 |
:copyright: (C) 2009-201 |
|
10 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |
11 | :license: GPLv3, see COPYING for more details. |
|
11 | :license: GPLv3, see COPYING for more details. | |
12 | """ |
|
12 | """ | |
13 | # This program is free software: you can redistribute it and/or modify |
|
13 | # This program is free software: you can redistribute it and/or modify | |
@@ -31,24 +31,24 b' except ImportError:' | |||||
31 | #python 2.5 compatibility |
|
31 | #python 2.5 compatibility | |
32 | import simplejson as json |
|
32 | import simplejson as json | |
33 |
|
33 | |||
34 | from mercurial.graphmod import colored, CHANGESET, revisions as graph_rev |
|
34 | from mercurial import graphmod | |
35 | from pylons import request, session, tmpl_context as c |
|
35 | from pylons import request, session, tmpl_context as c | |
36 |
|
36 | |||
37 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator |
|
37 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator | |
38 | from rhodecode.lib.base import BaseController, render |
|
38 | from rhodecode.lib.base import BaseRepoController, render | |
39 |
from rhodecode. |
|
39 | from rhodecode.lib.helpers import RepoPage | |
40 |
|
||||
41 | from webhelpers.paginate import Page |
|
|||
42 |
|
40 | |||
43 | log = logging.getLogger(__name__) |
|
41 | log = logging.getLogger(__name__) | |
44 |
|
42 | |||
45 | class ChangelogController(BaseController): |
|
43 | ||
|
44 | class ChangelogController(BaseRepoController): | |||
46 |
|
45 | |||
47 | @LoginRequired() |
|
46 | @LoginRequired() | |
48 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
|
47 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |
49 | 'repository.admin') |
|
48 | 'repository.admin') | |
50 | def __before__(self): |
|
49 | def __before__(self): | |
51 | super(ChangelogController, self).__before__() |
|
50 | super(ChangelogController, self).__before__() | |
|
51 | c.affected_files_cut_off = 60 | |||
52 |
|
52 | |||
53 | def index(self): |
|
53 | def index(self): | |
54 | limit = 100 |
|
54 | limit = 100 | |
@@ -65,40 +65,57 b' class ChangelogController(BaseController' | |||||
65 | else: |
|
65 | else: | |
66 | c.size = int(session.get('changelog_size', default)) |
|
66 | c.size = int(session.get('changelog_size', default)) | |
67 |
|
67 | |||
68 | changesets = ScmModel().get_repo(c.repo_name) |
|
68 | p = int(request.params.get('page', 1)) | |
|
69 | branch_name = request.params.get('branch', None) | |||
|
70 | c.total_cs = len(c.rhodecode_repo) | |||
|
71 | c.pagination = RepoPage(c.rhodecode_repo, page=p, | |||
|
72 | item_count=c.total_cs, items_per_page=c.size, | |||
|
73 | branch_name=branch_name) | |||
69 |
|
74 | |||
70 | p = int(request.params.get('page', 1)) |
|
75 | self._graph(c.rhodecode_repo, c.total_cs, c.size, p) | |
71 | c.total_cs = len(changesets) |
|
|||
72 | c.pagination = Page(changesets, page=p, item_count=c.total_cs, |
|
|||
73 | items_per_page=c.size) |
|
|||
74 |
|
||||
75 | self._graph(changesets, c.size, p) |
|
|||
76 |
|
76 | |||
77 | return render('changelog/changelog.html') |
|
77 | return render('changelog/changelog.html') | |
78 |
|
78 | |||
|
79 | def changelog_details(self, cs): | |||
|
80 | if request.environ.get('HTTP_X_PARTIAL_XHR'): | |||
|
81 | c.cs = c.rhodecode_repo.get_changeset(cs) | |||
|
82 | return render('changelog/changelog_details.html') | |||
79 |
|
83 | |||
80 | def _graph(self, repo, size, p): |
|
84 | def _graph(self, repo, repo_size, size, p): | |
81 | revcount = size |
|
85 | """ | |
82 | if not repo.revisions or repo.alias == 'git': |
|
86 | Generates a DAG graph for mercurial | |
|
87 | ||||
|
88 | :param repo: repo instance | |||
|
89 | :param size: number of commits to show | |||
|
90 | :param p: page number | |||
|
91 | """ | |||
|
92 | if not repo.revisions: | |||
83 | c.jsdata = json.dumps([]) |
|
93 | c.jsdata = json.dumps([]) | |
84 | return |
|
94 | return | |
85 |
|
95 | |||
86 | max_rev = repo.revisions[-1] |
|
96 | revcount = min(repo_size, size) | |
87 |
|
||||
88 | offset = 1 if p == 1 else ((p - 1) * revcount + 1) |
|
97 | offset = 1 if p == 1 else ((p - 1) * revcount + 1) | |
|
98 | try: | |||
|
99 | rev_end = repo.revisions.index(repo.revisions[(-1 * offset)]) | |||
|
100 | except IndexError: | |||
|
101 | rev_end = repo.revisions.index(repo.revisions[-1]) | |||
|
102 | rev_start = max(0, rev_end - revcount) | |||
89 |
|
103 | |||
90 | rev_start = repo.revisions[(-1 * offset)] |
|
104 | data = [] | |
|
105 | rev_end += 1 | |||
91 |
|
106 | |||
92 | revcount = min(max_rev, revcount) |
|
107 | if repo.alias == 'git': | |
93 | rev_end = max(0, rev_start - revcount) |
|
108 | for _ in xrange(rev_start, rev_end): | |
94 | dag = graph_rev(repo.repo, rev_start, rev_end) |
|
109 | vtx = [0, 1] | |
|
110 | edges = [[0, 0, 1]] | |||
|
111 | data.append(['', vtx, edges]) | |||
95 |
|
112 | |||
96 | c.dag = tree = list(colored(dag)) |
|
113 | elif repo.alias == 'hg': | |
97 | data = [] |
|
114 | revs = list(reversed(xrange(rev_start, rev_end))) | |
98 | for (id, type, ctx, vtx, edges) in tree: |
|
115 | c.dag = graphmod.colored(graphmod.dagwalker(repo._repo, revs)) | |
99 | if type != CHANGESET: |
|
116 | for (id, type, ctx, vtx, edges) in c.dag: | |
100 | continue |
|
117 | if type != graphmod.CHANGESET: | |
101 | data.append(('', vtx, edges)) |
|
118 | continue | |
|
119 | data.append(['', vtx, edges]) | |||
102 |
|
120 | |||
103 | c.jsdata = json.dumps(data) |
|
121 | c.jsdata = json.dumps(data) | |
104 |
|
@@ -3,11 +3,12 b'' | |||||
3 | rhodecode.controllers.changeset |
|
3 | rhodecode.controllers.changeset | |
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
5 |
|
5 | |||
6 | changeset controller for pylons |
|
6 | changeset controller for pylons showoing changes beetween | |
7 |
|
7 | revisions | ||
|
8 | ||||
8 | :created_on: Apr 25, 2010 |
|
9 | :created_on: Apr 25, 2010 | |
9 | :author: marcink |
|
10 | :author: marcink | |
10 |
:copyright: (C) 2009-201 |
|
11 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |
11 | :license: GPLv3, see COPYING for more details. |
|
12 | :license: GPLv3, see COPYING for more details. | |
12 | """ |
|
13 | """ | |
13 | # This program is free software: you can redistribute it and/or modify |
|
14 | # This program is free software: you can redistribute it and/or modify | |
@@ -31,26 +32,28 b' from pylons.controllers.util import redi' | |||||
31 |
|
32 | |||
32 | import rhodecode.lib.helpers as h |
|
33 | import rhodecode.lib.helpers as h | |
33 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator |
|
34 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator | |
34 | from rhodecode.lib.base import BaseController, render |
|
35 | from rhodecode.lib.base import BaseRepoController, render | |
35 | from rhodecode.lib.utils import EmptyChangeset |
|
36 | from rhodecode.lib.utils import EmptyChangeset | |
36 |
from rhodecode. |
|
37 | from rhodecode.lib.odict import OrderedDict | |
37 |
|
38 | |||
38 | from vcs.exceptions import RepositoryError, ChangesetError |
|
39 | from vcs.exceptions import RepositoryError, ChangesetError, \ | |
|
40 | ChangesetDoesNotExistError | |||
39 | from vcs.nodes import FileNode |
|
41 | from vcs.nodes import FileNode | |
40 | from vcs.utils import diffs as differ |
|
42 | from vcs.utils import diffs as differ | |
41 |
|
43 | |||
42 | log = logging.getLogger(__name__) |
|
44 | log = logging.getLogger(__name__) | |
43 |
|
45 | |||
44 | class ChangesetController(BaseController): |
|
46 | ||
|
47 | class ChangesetController(BaseRepoController): | |||
45 |
|
48 | |||
46 | @LoginRequired() |
|
49 | @LoginRequired() | |
47 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
|
50 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |
48 | 'repository.admin') |
|
51 | 'repository.admin') | |
49 | def __before__(self): |
|
52 | def __before__(self): | |
50 | super(ChangesetController, self).__before__() |
|
53 | super(ChangesetController, self).__before__() | |
|
54 | c.affected_files_cut_off = 60 | |||
51 |
|
55 | |||
52 | def index(self, revision): |
|
56 | def index(self, revision): | |
53 | hg_model = ScmModel() |
|
|||
54 |
|
57 | |||
55 | def wrap_to_table(str): |
|
58 | def wrap_to_table(str): | |
56 |
|
59 | |||
@@ -61,94 +64,150 b' class ChangesetController(BaseController' | |||||
61 | </tr> |
|
64 | </tr> | |
62 | </table>''' % str |
|
65 | </table>''' % str | |
63 |
|
66 | |||
|
67 | #get ranges of revisions if preset | |||
|
68 | rev_range = revision.split('...')[:2] | |||
|
69 | ||||
64 | try: |
|
70 | try: | |
65 | c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision) |
|
71 | if len(rev_range) == 2: | |
66 | except RepositoryError, e: |
|
72 | rev_start = rev_range[0] | |
|
73 | rev_end = rev_range[1] | |||
|
74 | rev_ranges = c.rhodecode_repo.get_changesets(start=rev_start, | |||
|
75 | end=rev_end) | |||
|
76 | else: | |||
|
77 | rev_ranges = [c.rhodecode_repo.get_changeset(revision)] | |||
|
78 | ||||
|
79 | c.cs_ranges = list(rev_ranges) | |||
|
80 | ||||
|
81 | except (RepositoryError, ChangesetDoesNotExistError, Exception), e: | |||
67 | log.error(traceback.format_exc()) |
|
82 | log.error(traceback.format_exc()) | |
68 | h.flash(str(e), category='warning') |
|
83 | h.flash(str(e), category='warning') | |
69 | return redirect(url('home')) |
|
84 | return redirect(url('home')) | |
70 | else: |
|
85 | ||
|
86 | c.changes = OrderedDict() | |||
|
87 | c.sum_added = 0 | |||
|
88 | c.sum_removed = 0 | |||
|
89 | c.lines_added = 0 | |||
|
90 | c.lines_deleted = 0 | |||
|
91 | c.cut_off = False # defines if cut off limit is reached | |||
|
92 | ||||
|
93 | # Iterate over ranges (default changeset view is always one changeset) | |||
|
94 | for changeset in c.cs_ranges: | |||
|
95 | c.changes[changeset.raw_id] = [] | |||
71 | try: |
|
96 | try: | |
72 |
|
|
97 | changeset_parent = changeset.parents[0] | |
73 | except IndexError: |
|
98 | except IndexError: | |
74 |
|
|
99 | changeset_parent = None | |
75 | c.changes = [] |
|
|||
76 |
|
100 | |||
77 |
#================================================================== |
|
101 | #================================================================== | |
78 | # ADDED FILES |
|
102 | # ADDED FILES | |
79 |
#================================================================== |
|
103 | #================================================================== | |
80 | c.sum_added = 0 |
|
104 | for node in changeset.added: | |
81 | for node in c.changeset.added: |
|
|||
82 |
|
105 | |||
83 | filenode_old = FileNode(node.path, '', EmptyChangeset()) |
|
106 | filenode_old = FileNode(node.path, '', EmptyChangeset()) | |
84 | if filenode_old.is_binary or node.is_binary: |
|
107 | if filenode_old.is_binary or node.is_binary: | |
85 | diff = wrap_to_table(_('binary file')) |
|
108 | diff = wrap_to_table(_('binary file')) | |
|
109 | st = (0, 0) | |||
86 | else: |
|
110 | else: | |
|
111 | # in this case node.size is good parameter since those are | |||
|
112 | # added nodes and their size defines how many changes were | |||
|
113 | # made | |||
87 | c.sum_added += node.size |
|
114 | c.sum_added += node.size | |
88 | if c.sum_added < self.cut_off_limit: |
|
115 | if c.sum_added < self.cut_off_limit: | |
89 |
f_ |
|
116 | f_gitdiff = differ.get_gitdiff(filenode_old, node) | |
90 |
d |
|
117 | d = differ.DiffProcessor(f_gitdiff, format='gitdiff') | |
|
118 | ||||
|
119 | st = d.stat() | |||
|
120 | diff = d.as_html() | |||
91 |
|
121 | |||
92 | else: |
|
122 | else: | |
93 |
diff = wrap_to_table(_('Changeset is to big and |
|
123 | diff = wrap_to_table(_('Changeset is to big and ' | |
94 |
' off, see raw |
|
124 | 'was cut off, see raw ' | |
|
125 | 'changeset instead')) | |||
|
126 | c.cut_off = True | |||
|
127 | break | |||
95 |
|
128 | |||
96 | cs1 = None |
|
129 | cs1 = None | |
97 | cs2 = node.last_changeset.raw_id |
|
130 | cs2 = node.last_changeset.raw_id | |
98 | c.changes.append(('added', node, diff, cs1, cs2)) |
|
131 | c.lines_added += st[0] | |
|
132 | c.lines_deleted += st[1] | |||
|
133 | c.changes[changeset.raw_id].append(('added', node, diff, | |||
|
134 | cs1, cs2, st)) | |||
99 |
|
135 | |||
100 |
#================================================================== |
|
136 | #================================================================== | |
101 | # CHANGED FILES |
|
137 | # CHANGED FILES | |
102 |
#================================================================== |
|
138 | #================================================================== | |
103 | c.sum_removed = 0 |
|
139 | if not c.cut_off: | |
104 |
for node in |
|
140 | for node in changeset.changed: | |
105 | try: |
|
141 | try: | |
106 |
filenode_old = |
|
142 | filenode_old = changeset_parent.get_node(node.path) | |
107 | except ChangesetError: |
|
143 | except ChangesetError: | |
108 | filenode_old = FileNode(node.path, '', EmptyChangeset()) |
|
144 | log.warning('Unable to fetch parent node for diff') | |
|
145 | filenode_old = FileNode(node.path, '', | |||
|
146 | EmptyChangeset()) | |||
109 |
|
147 | |||
110 | if filenode_old.is_binary or node.is_binary: |
|
148 | if filenode_old.is_binary or node.is_binary: | |
111 | diff = wrap_to_table(_('binary file')) |
|
149 | diff = wrap_to_table(_('binary file')) | |
112 |
|
|
150 | st = (0, 0) | |
|
151 | else: | |||
113 |
|
152 | |||
114 | if c.sum_removed < self.cut_off_limit: |
|
153 | if c.sum_removed < self.cut_off_limit: | |
115 |
|
|
154 | f_gitdiff = differ.get_gitdiff(filenode_old, node) | |
116 |
d |
|
155 | d = differ.DiffProcessor(f_gitdiff, | |
117 | if diff: |
|
156 | format='gitdiff') | |
118 |
|
|
157 | st = d.stat() | |
119 | else: |
|
158 | if (st[0] + st[1]) * 256 > self.cut_off_limit: | |
120 |
diff = wrap_to_table(_(' |
|
159 | diff = wrap_to_table(_('Diff is to big ' | |
121 |
' off, see |
|
160 | 'and was cut off, see ' | |
|
161 | 'raw diff instead')) | |||
|
162 | else: | |||
|
163 | diff = d.as_html() | |||
122 |
|
164 | |||
|
165 | if diff: | |||
|
166 | c.sum_removed += len(diff) | |||
|
167 | else: | |||
|
168 | diff = wrap_to_table(_('Changeset is to big and ' | |||
|
169 | 'was cut off, see raw ' | |||
|
170 | 'changeset instead')) | |||
|
171 | c.cut_off = True | |||
|
172 | break | |||
123 |
|
173 | |||
124 | cs1 = filenode_old.last_changeset.raw_id |
|
174 | cs1 = filenode_old.last_changeset.raw_id | |
125 | cs2 = node.last_changeset.raw_id |
|
175 | cs2 = node.last_changeset.raw_id | |
126 | c.changes.append(('changed', node, diff, cs1, cs2)) |
|
176 | c.lines_added += st[0] | |
|
177 | c.lines_deleted += st[1] | |||
|
178 | c.changes[changeset.raw_id].append(('changed', node, diff, | |||
|
179 | cs1, cs2, st)) | |||
127 |
|
180 | |||
128 |
#================================================================== |
|
181 | #================================================================== | |
129 |
# REMOVED FILES |
|
182 | # REMOVED FILES | |
130 |
#================================================================== |
|
183 | #================================================================== | |
131 |
f |
|
184 | if not c.cut_off: | |
132 | c.changes.append(('removed', node, None, None, None)) |
|
185 | for node in changeset.removed: | |
|
186 | c.changes[changeset.raw_id].append(('removed', node, None, | |||
|
187 | None, None, (0, 0))) | |||
133 |
|
188 | |||
134 | return render('changeset/changeset.html') |
|
189 | if len(c.cs_ranges) == 1: | |
|
190 | c.changeset = c.cs_ranges[0] | |||
|
191 | c.changes = c.changes[c.changeset.raw_id] | |||
|
192 | ||||
|
193 | return render('changeset/changeset.html') | |||
|
194 | else: | |||
|
195 | return render('changeset/changeset_range.html') | |||
135 |
|
196 | |||
136 | def raw_changeset(self, revision): |
|
197 | def raw_changeset(self, revision): | |
137 |
|
198 | |||
138 | hg_model = ScmModel() |
|
|||
139 | method = request.GET.get('diff', 'show') |
|
199 | method = request.GET.get('diff', 'show') | |
140 | try: |
|
200 | try: | |
141 | r = hg_model.get_repo(c.repo_name) |
|
201 | c.scm_type = c.rhodecode_repo.alias | |
142 | c.scm_type = r.alias |
|
202 | c.changeset = c.rhodecode_repo.get_changeset(revision) | |
143 | c.changeset = r.get_changeset(revision) |
|
|||
144 | except RepositoryError: |
|
203 | except RepositoryError: | |
145 | log.error(traceback.format_exc()) |
|
204 | log.error(traceback.format_exc()) | |
146 | return redirect(url('home')) |
|
205 | return redirect(url('home')) | |
147 | else: |
|
206 | else: | |
148 | try: |
|
207 | try: | |
149 |
c.changeset_ |
|
208 | c.changeset_parent = c.changeset.parents[0] | |
150 | except IndexError: |
|
209 | except IndexError: | |
151 |
c.changeset_ |
|
210 | c.changeset_parent = None | |
152 | c.changes = [] |
|
211 | c.changes = [] | |
153 |
|
212 | |||
154 | for node in c.changeset.added: |
|
213 | for node in c.changeset.added: | |
@@ -156,20 +215,22 b' class ChangesetController(BaseController' | |||||
156 | if filenode_old.is_binary or node.is_binary: |
|
215 | if filenode_old.is_binary or node.is_binary: | |
157 | diff = _('binary file') + '\n' |
|
216 | diff = _('binary file') + '\n' | |
158 | else: |
|
217 | else: | |
159 |
f_ |
|
218 | f_gitdiff = differ.get_gitdiff(filenode_old, node) | |
160 |
diff = differ.DiffProcessor(f_ |
|
219 | diff = differ.DiffProcessor(f_gitdiff, | |
|
220 | format='gitdiff').raw_diff() | |||
161 |
|
221 | |||
162 | cs1 = None |
|
222 | cs1 = None | |
163 | cs2 = node.last_changeset.raw_id |
|
223 | cs2 = node.last_changeset.raw_id | |
164 | c.changes.append(('added', node, diff, cs1, cs2)) |
|
224 | c.changes.append(('added', node, diff, cs1, cs2)) | |
165 |
|
225 | |||
166 | for node in c.changeset.changed: |
|
226 | for node in c.changeset.changed: | |
167 |
filenode_old = c.changeset_ |
|
227 | filenode_old = c.changeset_parent.get_node(node.path) | |
168 | if filenode_old.is_binary or node.is_binary: |
|
228 | if filenode_old.is_binary or node.is_binary: | |
169 | diff = _('binary file') |
|
229 | diff = _('binary file') | |
170 | else: |
|
230 | else: | |
171 |
f_ |
|
231 | f_gitdiff = differ.get_gitdiff(filenode_old, node) | |
172 |
diff = differ.DiffProcessor(f_ |
|
232 | diff = differ.DiffProcessor(f_gitdiff, | |
|
233 | format='gitdiff').raw_diff() | |||
173 |
|
234 | |||
174 | cs1 = filenode_old.last_changeset.raw_id |
|
235 | cs1 = filenode_old.last_changeset.raw_id | |
175 | cs2 = node.last_changeset.raw_id |
|
236 | cs2 = node.last_changeset.raw_id | |
@@ -178,10 +239,11 b' class ChangesetController(BaseController' | |||||
178 | response.content_type = 'text/plain' |
|
239 | response.content_type = 'text/plain' | |
179 |
|
240 | |||
180 | if method == 'download': |
|
241 | if method == 'download': | |
181 |
response.content_disposition = 'attachment; filename=%s.patch' |
|
242 | response.content_disposition = 'attachment; filename=%s.patch' \ | |
|
243 | % revision | |||
182 |
|
244 | |||
183 | parent = True if len(c.changeset.parents) > 0 else False |
|
245 | c.parent_tmpl = ''.join(['# Parent %s\n' % x.raw_id for x in | |
184 | c.parent_tmpl = 'Parent %s' % c.changeset.parents[0].raw_id if parent else '' |
|
246 | c.changeset.parents]) | |
185 |
|
247 | |||
186 | c.diffs = '' |
|
248 | c.diffs = '' | |
187 | for x in c.changes: |
|
249 | for x in c.changes: |
@@ -1,13 +1,13 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 | """ |
|
2 | """ | |
3 |
|
|
3 | rhodecode.controllers.error | |
4 | ~~~~~~~~~~~~~~ |
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
5 |
|
5 | |||
6 | RhodeCode error controller |
|
6 | RhodeCode error controller | |
7 |
|
7 | |||
8 | :created_on: Dec 8, 2010 |
|
8 | :created_on: Dec 8, 2010 | |
9 | :author: marcink |
|
9 | :author: marcink | |
10 |
:copyright: (C) 2009-201 |
|
10 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |
11 | :license: GPLv3, see COPYING for more details. |
|
11 | :license: GPLv3, see COPYING for more details. | |
12 | """ |
|
12 | """ | |
13 | # This program is free software: you can redistribute it and/or modify |
|
13 | # This program is free software: you can redistribute it and/or modify | |
@@ -27,7 +27,7 b' import cgi' | |||||
27 | import logging |
|
27 | import logging | |
28 | import paste.fileapp |
|
28 | import paste.fileapp | |
29 |
|
29 | |||
30 | from pylons import tmpl_context as c, request, config |
|
30 | from pylons import tmpl_context as c, request, config, url | |
31 | from pylons.i18n.translation import _ |
|
31 | from pylons.i18n.translation import _ | |
32 | from pylons.middleware import media_path |
|
32 | from pylons.middleware import media_path | |
33 |
|
33 | |||
@@ -35,6 +35,7 b' from rhodecode.lib.base import BaseContr' | |||||
35 |
|
35 | |||
36 | log = logging.getLogger(__name__) |
|
36 | log = logging.getLogger(__name__) | |
37 |
|
37 | |||
|
38 | ||||
38 | class ErrorController(BaseController): |
|
39 | class ErrorController(BaseController): | |
39 | """Generates error documents as and when they are required. |
|
40 | """Generates error documents as and when they are required. | |
40 |
|
41 | |||
@@ -46,31 +47,30 b' class ErrorController(BaseController):' | |||||
46 | """ |
|
47 | """ | |
47 |
|
48 | |||
48 | def __before__(self): |
|
49 | def __before__(self): | |
49 | c.rhodecode_name = config.get('rhodecode_title') |
|
50 | #disable all base actions since we don't need them here | |
|
51 | pass | |||
50 |
|
52 | |||
51 | def document(self): |
|
53 | def document(self): | |
52 | resp = request.environ.get('pylons.original_response') |
|
54 | resp = request.environ.get('pylons.original_response') | |
|
55 | c.rhodecode_name = config.get('rhodecode_title') | |||
53 |
|
56 | |||
54 | log.debug('### %s ###', resp.status) |
|
57 | log.debug('### %s ###', resp.status) | |
55 |
|
58 | |||
56 | e = request.environ |
|
59 | e = request.environ | |
57 |
c.serv_p = r'%(protocol)s://%(host)s/' |
|
60 | c.serv_p = r'%(protocol)s://%(host)s/' \ | |
58 |
|
|
61 | % {'protocol': e.get('wsgi.url_scheme'), | |
59 |
|
|
62 | 'host': e.get('HTTP_HOST'), } | |
60 | } |
|
|||
61 |
|
||||
62 |
|
63 | |||
63 | c.error_message = cgi.escape(request.GET.get('code', str(resp.status))) |
|
64 | c.error_message = cgi.escape(request.GET.get('code', str(resp.status))) | |
64 | c.error_explanation = self.get_error_explanation(resp.status_int) |
|
65 | c.error_explanation = self.get_error_explanation(resp.status_int) | |
65 |
|
66 | |||
66 | #redirect to when error with given seconds |
|
67 | # redirect to when error with given seconds | |
67 | c.redirect_time = 0 |
|
68 | c.redirect_time = 0 | |
68 |
c.redirect_module = _('Home page') |
|
69 | c.redirect_module = _('Home page') | |
69 | c.url_redirect = "/" |
|
70 | c.url_redirect = "/" | |
70 |
|
71 | |||
71 | return render('/errors/error_document.html') |
|
72 | return render('/errors/error_document.html') | |
72 |
|
73 | |||
73 |
|
||||
74 | def img(self, id): |
|
74 | def img(self, id): | |
75 | """Serve Pylons' stock images""" |
|
75 | """Serve Pylons' stock images""" | |
76 | return self._serve_file(os.path.join(media_path, 'img', id)) |
|
76 | return self._serve_file(os.path.join(media_path, 'img', id)) | |
@@ -95,7 +95,8 b' class ErrorController(BaseController):' | |||||
95 | code = 500 |
|
95 | code = 500 | |
96 |
|
96 | |||
97 | if code == 400: |
|
97 | if code == 400: | |
98 |
return _('The request could not be understood by the server |
|
98 | return _('The request could not be understood by the server' | |
|
99 | ' due to malformed syntax.') | |||
99 | if code == 401: |
|
100 | if code == 401: | |
100 | return _('Unauthorized access to resource') |
|
101 | return _('Unauthorized access to resource') | |
101 | if code == 403: |
|
102 | if code == 403: | |
@@ -103,6 +104,5 b' class ErrorController(BaseController):' | |||||
103 | if code == 404: |
|
104 | if code == 404: | |
104 | return _('The resource could not be found') |
|
105 | return _('The resource could not be found') | |
105 | if code == 500: |
|
106 | if code == 500: | |
106 |
return _('The server encountered an unexpected condition |
|
107 | return _('The server encountered an unexpected condition' | |
107 |
|
108 | ' which prevented it from fulfilling the request.') | ||
108 |
|
@@ -25,64 +25,92 b'' | |||||
25 |
|
25 | |||
26 | import logging |
|
26 | import logging | |
27 |
|
27 | |||
28 | from pylons import url, response |
|
28 | from pylons import url, response, tmpl_context as c | |
|
29 | from pylons.i18n.translation import _ | |||
29 |
|
30 | |||
|
31 | from rhodecode.lib import safe_unicode | |||
30 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator |
|
32 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator | |
31 | from rhodecode.lib.base import BaseController |
|
33 | from rhodecode.lib.base import BaseRepoController | |
32 | from rhodecode.model.scm import ScmModel |
|
|||
33 |
|
34 | |||
34 | from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed |
|
35 | from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed | |
35 |
|
36 | |||
36 | log = logging.getLogger(__name__) |
|
37 | log = logging.getLogger(__name__) | |
37 |
|
38 | |||
38 | class FeedController(BaseController): |
|
|||
39 |
|
39 | |||
40 | @LoginRequired() |
|
40 | class FeedController(BaseRepoController): | |
|
41 | ||||
|
42 | @LoginRequired(api_access=True) | |||
41 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
|
43 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |
42 | 'repository.admin') |
|
44 | 'repository.admin') | |
43 | def __before__(self): |
|
45 | def __before__(self): | |
44 | super(FeedController, self).__before__() |
|
46 | super(FeedController, self).__before__() | |
45 | #common values for feeds |
|
47 | #common values for feeds | |
46 | self.description = 'Changes on %s repository' |
|
48 | self.description = _('Changes on %s repository') | |
47 | self.title = "%s feed" |
|
49 | self.title = self.title = _('%s %s feed') % (c.rhodecode_name, '%s') | |
48 | self.language = 'en-us' |
|
50 | self.language = 'en-us' | |
49 | self.ttl = "5" |
|
51 | self.ttl = "5" | |
50 | self.feed_nr = 10 |
|
52 | self.feed_nr = 10 | |
51 |
|
53 | |||
|
54 | def __changes(self, cs): | |||
|
55 | changes = [] | |||
|
56 | ||||
|
57 | a = [safe_unicode(n.path) for n in cs.added] | |||
|
58 | if a: | |||
|
59 | changes.append('\nA ' + '\nA '.join(a)) | |||
|
60 | ||||
|
61 | m = [safe_unicode(n.path) for n in cs.changed] | |||
|
62 | if m: | |||
|
63 | changes.append('\nM ' + '\nM '.join(m)) | |||
|
64 | ||||
|
65 | d = [safe_unicode(n.path) for n in cs.removed] | |||
|
66 | if d: | |||
|
67 | changes.append('\nD ' + '\nD '.join(d)) | |||
|
68 | ||||
|
69 | changes.append('</pre>') | |||
|
70 | ||||
|
71 | return ''.join(changes) | |||
|
72 | ||||
52 | def atom(self, repo_name): |
|
73 | def atom(self, repo_name): | |
53 | """Produce an atom-1.0 feed via feedgenerator module""" |
|
74 | """Produce an atom-1.0 feed via feedgenerator module""" | |
54 | feed = Atom1Feed(title=self.title % repo_name, |
|
75 | feed = Atom1Feed(title=self.title % repo_name, | |
55 |
link=url('summary_home', repo_name=repo_name, |
|
76 | link=url('summary_home', repo_name=repo_name, | |
|
77 | qualified=True), | |||
56 | description=self.description % repo_name, |
|
78 | description=self.description % repo_name, | |
57 | language=self.language, |
|
79 | language=self.language, | |
58 | ttl=self.ttl) |
|
80 | ttl=self.ttl) | |
|
81 | desc_msg = [] | |||
|
82 | for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])): | |||
|
83 | desc_msg.append('%s - %s<br/><pre>' % (cs.author, cs.date)) | |||
|
84 | desc_msg.append(self.__changes(cs)) | |||
59 |
|
85 | |||
60 | changesets = ScmModel().get_repo(repo_name) |
|
|||
61 |
|
||||
62 | for cs in changesets[:self.feed_nr]: |
|
|||
63 | feed.add_item(title=cs.message, |
|
86 | feed.add_item(title=cs.message, | |
64 | link=url('changeset_home', repo_name=repo_name, |
|
87 | link=url('changeset_home', repo_name=repo_name, | |
65 | revision=cs.raw_id, qualified=True), |
|
88 | revision=cs.raw_id, qualified=True), | |
66 |
|
|
89 | author_name=cs.author, | |
|
90 | description=''.join(desc_msg)) | |||
67 |
|
91 | |||
68 | response.content_type = feed.mime_type |
|
92 | response.content_type = feed.mime_type | |
69 | return feed.writeString('utf-8') |
|
93 | return feed.writeString('utf-8') | |
70 |
|
94 | |||
71 |
|
||||
72 | def rss(self, repo_name): |
|
95 | def rss(self, repo_name): | |
73 | """Produce an rss2 feed via feedgenerator module""" |
|
96 | """Produce an rss2 feed via feedgenerator module""" | |
74 | feed = Rss201rev2Feed(title=self.title % repo_name, |
|
97 | feed = Rss201rev2Feed(title=self.title % repo_name, | |
75 |
link=url('summary_home', repo_name=repo_name, |
|
98 | link=url('summary_home', repo_name=repo_name, | |
|
99 | qualified=True), | |||
76 | description=self.description % repo_name, |
|
100 | description=self.description % repo_name, | |
77 | language=self.language, |
|
101 | language=self.language, | |
78 | ttl=self.ttl) |
|
102 | ttl=self.ttl) | |
|
103 | desc_msg = [] | |||
|
104 | for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])): | |||
|
105 | desc_msg.append('%s - %s<br/><pre>' % (cs.author, cs.date)) | |||
|
106 | desc_msg.append(self.__changes(cs)) | |||
79 |
|
107 | |||
80 | changesets = ScmModel().get_repo(repo_name) |
|
|||
81 | for cs in changesets[:self.feed_nr]: |
|
|||
82 | feed.add_item(title=cs.message, |
|
108 | feed.add_item(title=cs.message, | |
83 | link=url('changeset_home', repo_name=repo_name, |
|
109 | link=url('changeset_home', repo_name=repo_name, | |
84 | revision=cs.raw_id, qualified=True), |
|
110 | revision=cs.raw_id, qualified=True), | |
85 |
|
|
111 | author_name=cs.author, | |
|
112 | description=''.join(desc_msg), | |||
|
113 | ) | |||
86 |
|
114 | |||
87 | response.content_type = feed.mime_type |
|
115 | response.content_type = feed.mime_type | |
88 | return feed.writeString('utf-8') |
|
116 | return feed.writeString('utf-8') |
@@ -22,40 +22,42 b'' | |||||
22 | # |
|
22 | # | |
23 | # You should have received a copy of the GNU General Public License |
|
23 | # You should have received a copy of the GNU General Public License | |
24 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
24 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
|
25 | ||||
25 | import os |
|
26 | import os | |
26 | import tempfile |
|
|||
27 | import logging |
|
27 | import logging | |
28 | import rhodecode.lib.helpers as h |
|
28 | import traceback | |
29 |
|
29 | |||
30 | from mercurial import archival |
|
30 | from os.path import join as jn | |
31 |
|
31 | |||
32 | from pylons import request, response, session, tmpl_context as c, url |
|
32 | from pylons import request, response, session, tmpl_context as c, url | |
33 | from pylons.i18n.translation import _ |
|
33 | from pylons.i18n.translation import _ | |
34 | from pylons.controllers.util import redirect |
|
34 | from pylons.controllers.util import redirect | |
|
35 | from pylons.decorators import jsonify | |||
35 |
|
36 | |||
|
37 | from vcs.conf import settings | |||
|
38 | from vcs.exceptions import RepositoryError, ChangesetDoesNotExistError, \ | |||
|
39 | EmptyRepositoryError, ImproperArchiveTypeError, VCSError, NodeAlreadyExistsError | |||
|
40 | from vcs.nodes import FileNode, NodeKind | |||
|
41 | from vcs.utils import diffs as differ | |||
|
42 | ||||
|
43 | from rhodecode.lib import convert_line_endings, detect_mode, safe_str | |||
36 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator |
|
44 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator | |
37 | from rhodecode.lib.base import BaseController, render |
|
45 | from rhodecode.lib.base import BaseRepoController, render | |
38 | from rhodecode.lib.utils import EmptyChangeset |
|
46 | from rhodecode.lib.utils import EmptyChangeset | |
39 | from rhodecode.model.scm import ScmModel |
|
47 | import rhodecode.lib.helpers as h | |
40 |
|
48 | from rhodecode.model.repo import RepoModel | ||
41 | from vcs.exceptions import RepositoryError, ChangesetError, \ |
|
|||
42 | ChangesetDoesNotExistError, EmptyRepositoryError |
|
|||
43 | from vcs.nodes import FileNode |
|
|||
44 | from vcs.utils import diffs as differ |
|
|||
45 |
|
49 | |||
46 | log = logging.getLogger(__name__) |
|
50 | log = logging.getLogger(__name__) | |
47 |
|
51 | |||
48 |
|
52 | |||
49 | class FilesController(BaseController): |
|
53 | class FilesController(BaseRepoController): | |
50 |
|
54 | |||
51 | @LoginRequired() |
|
55 | @LoginRequired() | |
52 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
|
|||
53 | 'repository.admin') |
|
|||
54 | def __before__(self): |
|
56 | def __before__(self): | |
55 | super(FilesController, self).__before__() |
|
57 | super(FilesController, self).__before__() | |
56 | c.cut_off_limit = self.cut_off_limit |
|
58 | c.cut_off_limit = self.cut_off_limit | |
57 |
|
59 | |||
58 | def __get_cs_or_redirect(self, rev, repo_name): |
|
60 | def __get_cs_or_redirect(self, rev, repo_name, redirect_after=True): | |
59 | """ |
|
61 | """ | |
60 | Safe way to get changeset if error occur it redirects to tip with |
|
62 | Safe way to get changeset if error occur it redirects to tip with | |
61 | proper message |
|
63 | proper message | |
@@ -64,196 +66,412 b' class FilesController(BaseController):' | |||||
64 | :param repo_name: repo name to redirect after |
|
66 | :param repo_name: repo name to redirect after | |
65 | """ |
|
67 | """ | |
66 |
|
68 | |||
67 | _repo = ScmModel().get_repo(c.repo_name) |
|
|||
68 | try: |
|
69 | try: | |
69 | return _repo.get_changeset(rev) |
|
70 | return c.rhodecode_repo.get_changeset(rev) | |
70 | except EmptyRepositoryError, e: |
|
71 | except EmptyRepositoryError, e: | |
71 | h.flash(_('There are no files yet'), category='warning') |
|
72 | if not redirect_after: | |
|
73 | return None | |||
|
74 | url_ = url('files_add_home', | |||
|
75 | repo_name=c.repo_name, | |||
|
76 | revision=0, f_path='') | |||
|
77 | add_new = '<a href="%s">[%s]</a>' % (url_, _('add new')) | |||
|
78 | h.flash(h.literal(_('There are no files yet %s' % add_new)), | |||
|
79 | category='warning') | |||
72 | redirect(h.url('summary_home', repo_name=repo_name)) |
|
80 | redirect(h.url('summary_home', repo_name=repo_name)) | |
73 |
|
81 | |||
74 | except RepositoryError, e: |
|
82 | except RepositoryError, e: | |
75 | h.flash(str(e), category='warning') |
|
83 | h.flash(str(e), category='warning') | |
76 | redirect(h.url('files_home', repo_name=repo_name, revision='tip')) |
|
84 | redirect(h.url('files_home', repo_name=repo_name, revision='tip')) | |
77 |
|
85 | |||
78 |
def |
|
86 | def __get_filenode_or_redirect(self, repo_name, cs, path): | |
79 | cs = self.__get_cs_or_redirect(revision, repo_name) |
|
87 | """ | |
80 | c.repo = ScmModel().get_repo(c.repo_name) |
|
88 | Returns file_node, if error occurs or given path is directory, | |
81 |
|
89 | it'll redirect to top level path | ||
82 | revision = request.POST.get('at_rev', None) or revision |
|
|||
83 |
|
||||
84 | def get_next_rev(cur): |
|
|||
85 | max_rev = len(c.repo.revisions) - 1 |
|
|||
86 | r = cur + 1 |
|
|||
87 | if r > max_rev: |
|
|||
88 | r = max_rev |
|
|||
89 | return r |
|
|||
90 |
|
|
90 | ||
91 | def get_prev_rev(cur): |
|
91 | :param repo_name: repo_name | |
92 | r = cur - 1 |
|
92 | :param cs: given changeset | |
93 | return r |
|
93 | :param path: path to lookup | |
94 |
|
94 | """ | ||
95 | c.f_path = f_path |
|
|||
96 | c.changeset = cs |
|
|||
97 | cur_rev = c.changeset.revision |
|
|||
98 | prev_rev = c.repo.get_changeset(get_prev_rev(cur_rev)).raw_id |
|
|||
99 | next_rev = c.repo.get_changeset(get_next_rev(cur_rev)).raw_id |
|
|||
100 |
|
||||
101 | c.url_prev = url('files_home', repo_name=c.repo_name, |
|
|||
102 | revision=prev_rev, f_path=f_path) |
|
|||
103 | c.url_next = url('files_home', repo_name=c.repo_name, |
|
|||
104 | revision=next_rev, f_path=f_path) |
|
|||
105 |
|
95 | |||
106 | try: |
|
96 | try: | |
107 |
|
|
97 | file_node = cs.get_node(path) | |
108 | c.file_history = self._get_history(c.repo, c.files_list, f_path) |
|
98 | if file_node.is_dir(): | |
109 | except RepositoryError, e: |
|
99 | raise RepositoryError('given path is a directory') | |
110 | h.flash(str(e), category='warning') |
|
|||
111 | redirect(h.url('files_home', repo_name=repo_name, |
|
|||
112 | revision=revision)) |
|
|||
113 |
|
||||
114 |
|
||||
115 | return render('files/files.html') |
|
|||
116 |
|
||||
117 | def rawfile(self, repo_name, revision, f_path): |
|
|||
118 | cs = self.__get_cs_or_redirect(revision, repo_name) |
|
|||
119 | try: |
|
|||
120 | file_node = cs.get_node(f_path) |
|
|||
121 | except RepositoryError, e: |
|
|||
122 | h.flash(str(e), category='warning') |
|
|||
123 | redirect(h.url('files_home', repo_name=repo_name, |
|
|||
124 | revision=cs.raw_id)) |
|
|||
125 |
|
||||
126 | fname = f_path.split(os.sep)[-1].encode('utf8', 'replace') |
|
|||
127 |
|
||||
128 | response.content_disposition = 'attachment; filename=%s' % fname |
|
|||
129 | response.content_type = file_node.mimetype |
|
|||
130 | return file_node.content |
|
|||
131 |
|
||||
132 | def raw(self, repo_name, revision, f_path): |
|
|||
133 | cs = self.__get_cs_or_redirect(revision, repo_name) |
|
|||
134 | try: |
|
|||
135 | file_node = cs.get_node(f_path) |
|
|||
136 | except RepositoryError, e: |
|
100 | except RepositoryError, e: | |
137 | h.flash(str(e), category='warning') |
|
101 | h.flash(str(e), category='warning') | |
138 | redirect(h.url('files_home', repo_name=repo_name, |
|
102 | redirect(h.url('files_home', repo_name=repo_name, | |
139 | revision=cs.raw_id)) |
|
103 | revision=cs.raw_id)) | |
140 |
|
104 | |||
141 | response.content_type = 'text/plain' |
|
105 | return file_node | |
142 | return file_node.content |
|
106 | ||
143 |
|
107 | |||
144 |
def |
|
108 | def __get_paths(self, changeset, starting_path): | |
145 | cs = self.__get_cs_or_redirect(revision, repo_name) |
|
109 | """recursive walk in root dir and return a set of all path in that dir | |
|
110 | based on repository walk function | |||
|
111 | """ | |||
|
112 | _files = list() | |||
|
113 | _dirs = list() | |||
|
114 | ||||
146 | try: |
|
115 | try: | |
147 | c.file = cs.get_node(f_path) |
|
116 | tip = changeset | |
|
117 | for topnode, dirs, files in tip.walk(starting_path): | |||
|
118 | for f in files: | |||
|
119 | _files.append(f.path) | |||
|
120 | for d in dirs: | |||
|
121 | _dirs.append(d.path) | |||
148 | except RepositoryError, e: |
|
122 | except RepositoryError, e: | |
149 | h.flash(str(e), category='warning') |
|
123 | log.debug(traceback.format_exc()) | |
150 | redirect(h.url('files_home', repo_name=repo_name, revision=cs.raw_id)) |
|
124 | pass | |
|
125 | return _dirs, _files | |||
151 |
|
126 | |||
152 | c.file_history = self._get_history(ScmModel().get_repo(c.repo_name), c.file, f_path) |
|
127 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |
153 | c.cs = cs |
|
128 | 'repository.admin') | |
|
129 | def index(self, repo_name, revision, f_path): | |||
|
130 | #reditect to given revision from form if given | |||
|
131 | post_revision = request.POST.get('at_rev', None) | |||
|
132 | if post_revision: | |||
|
133 | cs = self.__get_cs_or_redirect(post_revision, repo_name) | |||
|
134 | redirect(url('files_home', repo_name=c.repo_name, | |||
|
135 | revision=cs.raw_id, f_path=f_path)) | |||
|
136 | ||||
|
137 | c.changeset = self.__get_cs_or_redirect(revision, repo_name) | |||
|
138 | c.branch = request.GET.get('branch', None) | |||
154 | c.f_path = f_path |
|
139 | c.f_path = f_path | |
155 |
|
140 | |||
|
141 | cur_rev = c.changeset.revision | |||
|
142 | ||||
|
143 | #prev link | |||
|
144 | try: | |||
|
145 | prev_rev = c.rhodecode_repo.get_changeset(cur_rev).prev(c.branch) | |||
|
146 | c.url_prev = url('files_home', repo_name=c.repo_name, | |||
|
147 | revision=prev_rev.raw_id, f_path=f_path) | |||
|
148 | if c.branch: | |||
|
149 | c.url_prev += '?branch=%s' % c.branch | |||
|
150 | except (ChangesetDoesNotExistError, VCSError): | |||
|
151 | c.url_prev = '#' | |||
|
152 | ||||
|
153 | #next link | |||
|
154 | try: | |||
|
155 | next_rev = c.rhodecode_repo.get_changeset(cur_rev).next(c.branch) | |||
|
156 | c.url_next = url('files_home', repo_name=c.repo_name, | |||
|
157 | revision=next_rev.raw_id, f_path=f_path) | |||
|
158 | if c.branch: | |||
|
159 | c.url_next += '?branch=%s' % c.branch | |||
|
160 | except (ChangesetDoesNotExistError, VCSError): | |||
|
161 | c.url_next = '#' | |||
|
162 | ||||
|
163 | #files or dirs | |||
|
164 | try: | |||
|
165 | c.files_list = c.changeset.get_node(f_path) | |||
|
166 | ||||
|
167 | if c.files_list.is_file(): | |||
|
168 | c.file_history = self._get_node_history(c.changeset, f_path) | |||
|
169 | else: | |||
|
170 | c.file_history = [] | |||
|
171 | except RepositoryError, e: | |||
|
172 | h.flash(str(e), category='warning') | |||
|
173 | redirect(h.url('files_home', repo_name=repo_name, | |||
|
174 | revision=revision)) | |||
|
175 | ||||
|
176 | return render('files/files.html') | |||
|
177 | ||||
|
178 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |||
|
179 | 'repository.admin') | |||
|
180 | def rawfile(self, repo_name, revision, f_path): | |||
|
181 | cs = self.__get_cs_or_redirect(revision, repo_name) | |||
|
182 | file_node = self.__get_filenode_or_redirect(repo_name, cs, f_path) | |||
|
183 | ||||
|
184 | response.content_disposition = 'attachment; filename=%s' % \ | |||
|
185 | safe_str(f_path.split(os.sep)[-1]) | |||
|
186 | ||||
|
187 | response.content_type = file_node.mimetype | |||
|
188 | return file_node.content | |||
|
189 | ||||
|
190 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |||
|
191 | 'repository.admin') | |||
|
192 | def raw(self, repo_name, revision, f_path): | |||
|
193 | cs = self.__get_cs_or_redirect(revision, repo_name) | |||
|
194 | file_node = self.__get_filenode_or_redirect(repo_name, cs, f_path) | |||
|
195 | ||||
|
196 | raw_mimetype_mapping = { | |||
|
197 | # map original mimetype to a mimetype used for "show as raw" | |||
|
198 | # you can also provide a content-disposition to override the | |||
|
199 | # default "attachment" disposition. | |||
|
200 | # orig_type: (new_type, new_dispo) | |||
|
201 | ||||
|
202 | # show images inline: | |||
|
203 | 'image/x-icon': ('image/x-icon', 'inline'), | |||
|
204 | 'image/png': ('image/png', 'inline'), | |||
|
205 | 'image/gif': ('image/gif', 'inline'), | |||
|
206 | 'image/jpeg': ('image/jpeg', 'inline'), | |||
|
207 | 'image/svg+xml': ('image/svg+xml', 'inline'), | |||
|
208 | } | |||
|
209 | ||||
|
210 | mimetype = file_node.mimetype | |||
|
211 | try: | |||
|
212 | mimetype, dispo = raw_mimetype_mapping[mimetype] | |||
|
213 | except KeyError: | |||
|
214 | # we don't know anything special about this, handle it safely | |||
|
215 | if file_node.is_binary: | |||
|
216 | # do same as download raw for binary files | |||
|
217 | mimetype, dispo = 'application/octet-stream', 'attachment' | |||
|
218 | else: | |||
|
219 | # do not just use the original mimetype, but force text/plain, | |||
|
220 | # otherwise it would serve text/html and that might be unsafe. | |||
|
221 | # Note: underlying vcs library fakes text/plain mimetype if the | |||
|
222 | # mimetype can not be determined and it thinks it is not | |||
|
223 | # binary.This might lead to erroneous text display in some | |||
|
224 | # cases, but helps in other cases, like with text files | |||
|
225 | # without extension. | |||
|
226 | mimetype, dispo = 'text/plain', 'inline' | |||
|
227 | ||||
|
228 | if dispo == 'attachment': | |||
|
229 | dispo = 'attachment; filename=%s' % \ | |||
|
230 | safe_str(f_path.split(os.sep)[-1]) | |||
|
231 | ||||
|
232 | response.content_disposition = dispo | |||
|
233 | response.content_type = mimetype | |||
|
234 | return file_node.content | |||
|
235 | ||||
|
236 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |||
|
237 | 'repository.admin') | |||
|
238 | def annotate(self, repo_name, revision, f_path): | |||
|
239 | c.cs = self.__get_cs_or_redirect(revision, repo_name) | |||
|
240 | c.file = self.__get_filenode_or_redirect(repo_name, c.cs, f_path) | |||
|
241 | ||||
|
242 | c.file_history = self._get_node_history(c.cs, f_path) | |||
|
243 | c.f_path = f_path | |||
156 | return render('files/files_annotate.html') |
|
244 | return render('files/files_annotate.html') | |
157 |
|
245 | |||
158 | def archivefile(self, repo_name, revision, fileformat): |
|
246 | @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') | |
159 | archive_specs = { |
|
247 | def edit(self, repo_name, revision, f_path): | |
160 | '.tar.bz2': ('application/x-bzip2', 'tbz2'), |
|
248 | r_post = request.POST | |
161 | '.tar.gz': ('application/x-gzip', 'tgz'), |
|
249 | ||
162 | '.zip': ('application/zip', 'zip'), |
|
250 | c.cs = self.__get_cs_or_redirect(revision, repo_name) | |
163 | } |
|
251 | c.file = self.__get_filenode_or_redirect(repo_name, c.cs, f_path) | |
164 | if not archive_specs.has_key(fileformat): |
|
252 | ||
165 | return 'Unknown archive type %s' % fileformat |
|
253 | if c.file.is_binary: | |
|
254 | return redirect(url('files_home', repo_name=c.repo_name, | |||
|
255 | revision=c.cs.raw_id, f_path=f_path)) | |||
|
256 | ||||
|
257 | c.f_path = f_path | |||
|
258 | ||||
|
259 | if r_post: | |||
|
260 | ||||
|
261 | old_content = c.file.content | |||
|
262 | sl = old_content.splitlines(1) | |||
|
263 | first_line = sl[0] if sl else '' | |||
|
264 | # modes: 0 - Unix, 1 - Mac, 2 - DOS | |||
|
265 | mode = detect_mode(first_line, 0) | |||
|
266 | content = convert_line_endings(r_post.get('content'), mode) | |||
|
267 | ||||
|
268 | message = r_post.get('message') or (_('Edited %s via RhodeCode') | |||
|
269 | % (f_path)) | |||
|
270 | author = self.rhodecode_user.full_contact | |||
|
271 | ||||
|
272 | if content == old_content: | |||
|
273 | h.flash(_('No changes'), | |||
|
274 | category='warning') | |||
|
275 | return redirect(url('changeset_home', repo_name=c.repo_name, | |||
|
276 | revision='tip')) | |||
|
277 | ||||
|
278 | try: | |||
|
279 | self.scm_model.commit_change(repo=c.rhodecode_repo, | |||
|
280 | repo_name=repo_name, cs=c.cs, | |||
|
281 | user=self.rhodecode_user, | |||
|
282 | author=author, message=message, | |||
|
283 | content=content, f_path=f_path) | |||
|
284 | h.flash(_('Successfully committed to %s' % f_path), | |||
|
285 | category='success') | |||
|
286 | ||||
|
287 | except Exception: | |||
|
288 | log.error(traceback.format_exc()) | |||
|
289 | h.flash(_('Error occurred during commit'), category='error') | |||
|
290 | return redirect(url('changeset_home', | |||
|
291 | repo_name=c.repo_name, revision='tip')) | |||
|
292 | ||||
|
293 | return render('files/files_edit.html') | |||
|
294 | ||||
|
295 | @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') | |||
|
296 | def add(self, repo_name, revision, f_path): | |||
|
297 | r_post = request.POST | |||
|
298 | c.cs = self.__get_cs_or_redirect(revision, repo_name, | |||
|
299 | redirect_after=False) | |||
|
300 | if c.cs is None: | |||
|
301 | c.cs = EmptyChangeset(alias=c.rhodecode_repo.alias) | |||
|
302 | ||||
|
303 | c.f_path = f_path | |||
|
304 | ||||
|
305 | if r_post: | |||
|
306 | unix_mode = 0 | |||
|
307 | content = convert_line_endings(r_post.get('content'), unix_mode) | |||
|
308 | ||||
|
309 | message = r_post.get('message') or (_('Added %s via RhodeCode') | |||
|
310 | % (f_path)) | |||
|
311 | location = r_post.get('location') | |||
|
312 | filename = r_post.get('filename') | |||
|
313 | file_obj = r_post.get('upload_file', None) | |||
|
314 | ||||
|
315 | if file_obj is not None and hasattr(file_obj, 'filename'): | |||
|
316 | filename = file_obj.filename | |||
|
317 | content = file_obj.file | |||
166 |
|
318 | |||
167 | def read_in_chunks(file_object, chunk_size=1024 * 40): |
|
319 | node_path = os.path.join(location, filename) | |
168 | """Lazy function (generator) to read a file piece by piece. |
|
320 | author = self.rhodecode_user.full_contact | |
169 | Default chunk size: 40k.""" |
|
321 | ||
|
322 | if not content: | |||
|
323 | h.flash(_('No content'), category='warning') | |||
|
324 | return redirect(url('changeset_home', repo_name=c.repo_name, | |||
|
325 | revision='tip')) | |||
|
326 | if not filename: | |||
|
327 | h.flash(_('No filename'), category='warning') | |||
|
328 | return redirect(url('changeset_home', repo_name=c.repo_name, | |||
|
329 | revision='tip')) | |||
|
330 | ||||
|
331 | try: | |||
|
332 | self.scm_model.create_node(repo=c.rhodecode_repo, | |||
|
333 | repo_name=repo_name, cs=c.cs, | |||
|
334 | user=self.rhodecode_user, | |||
|
335 | author=author, message=message, | |||
|
336 | content=content, f_path=node_path) | |||
|
337 | h.flash(_('Successfully committed to %s' % node_path), | |||
|
338 | category='success') | |||
|
339 | except NodeAlreadyExistsError, e: | |||
|
340 | h.flash(_(e), category='error') | |||
|
341 | except Exception: | |||
|
342 | log.error(traceback.format_exc()) | |||
|
343 | h.flash(_('Error occurred during commit'), category='error') | |||
|
344 | return redirect(url('changeset_home', | |||
|
345 | repo_name=c.repo_name, revision='tip')) | |||
|
346 | ||||
|
347 | return render('files/files_add.html') | |||
|
348 | ||||
|
349 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |||
|
350 | 'repository.admin') | |||
|
351 | def archivefile(self, repo_name, fname): | |||
|
352 | ||||
|
353 | fileformat = None | |||
|
354 | revision = None | |||
|
355 | ext = None | |||
|
356 | subrepos = request.GET.get('subrepos') == 'true' | |||
|
357 | ||||
|
358 | for a_type, ext_data in settings.ARCHIVE_SPECS.items(): | |||
|
359 | archive_spec = fname.split(ext_data[1]) | |||
|
360 | if len(archive_spec) == 2 and archive_spec[1] == '': | |||
|
361 | fileformat = a_type or ext_data[1] | |||
|
362 | revision = archive_spec[0] | |||
|
363 | ext = ext_data[1] | |||
|
364 | ||||
|
365 | try: | |||
|
366 | dbrepo = RepoModel().get_by_repo_name(repo_name) | |||
|
367 | if dbrepo.enable_downloads is False: | |||
|
368 | return _('downloads disabled') | |||
|
369 | ||||
|
370 | cs = c.rhodecode_repo.get_changeset(revision) | |||
|
371 | content_type = settings.ARCHIVE_SPECS[fileformat][0] | |||
|
372 | except ChangesetDoesNotExistError: | |||
|
373 | return _('Unknown revision %s') % revision | |||
|
374 | except EmptyRepositoryError: | |||
|
375 | return _('Empty repository') | |||
|
376 | except (ImproperArchiveTypeError, KeyError): | |||
|
377 | return _('Unknown archive type') | |||
|
378 | ||||
|
379 | response.content_type = content_type | |||
|
380 | response.content_disposition = 'attachment; filename=%s-%s%s' \ | |||
|
381 | % (repo_name, revision, ext) | |||
|
382 | ||||
|
383 | import tempfile | |||
|
384 | archive = tempfile.mkstemp()[1] | |||
|
385 | t = open(archive, 'wb') | |||
|
386 | cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos) | |||
|
387 | ||||
|
388 | def get_chunked_archive(archive): | |||
|
389 | stream = open(archive, 'rb') | |||
170 | while True: |
|
390 | while True: | |
171 |
data = |
|
391 | data = stream.read(4096) | |
172 | if not data: |
|
392 | if not data: | |
|
393 | os.remove(archive) | |||
173 | break |
|
394 | break | |
174 | yield data |
|
395 | yield data | |
175 |
|
396 | |||
176 | archive = tempfile.TemporaryFile() |
|
397 | return get_chunked_archive(archive) | |
177 | repo = ScmModel().get_repo(repo_name).repo |
|
|||
178 | fname = '%s-%s%s' % (repo_name, revision, fileformat) |
|
|||
179 | archival.archive(repo, archive, revision, archive_specs[fileformat][1], |
|
|||
180 | prefix='%s-%s' % (repo_name, revision)) |
|
|||
181 | response.content_type = archive_specs[fileformat][0] |
|
|||
182 | response.content_disposition = 'attachment; filename=%s' % fname |
|
|||
183 | archive.seek(0) |
|
|||
184 | return read_in_chunks(archive) |
|
|||
185 |
|
398 | |||
|
399 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |||
|
400 | 'repository.admin') | |||
186 | def diff(self, repo_name, f_path): |
|
401 | def diff(self, repo_name, f_path): | |
187 | hg_model = ScmModel() |
|
|||
188 | diff1 = request.GET.get('diff1') |
|
402 | diff1 = request.GET.get('diff1') | |
189 | diff2 = request.GET.get('diff2') |
|
403 | diff2 = request.GET.get('diff2') | |
190 | c.action = request.GET.get('diff') |
|
404 | c.action = request.GET.get('diff') | |
191 | c.no_changes = diff1 == diff2 |
|
405 | c.no_changes = diff1 == diff2 | |
192 | c.f_path = f_path |
|
406 | c.f_path = f_path | |
193 | c.repo = hg_model.get_repo(c.repo_name) |
|
407 | c.big_diff = False | |
194 |
|
408 | |||
195 | try: |
|
409 | try: | |
196 | if diff1 not in ['', None, 'None', '0' * 12, '0' * 40]: |
|
410 | if diff1 not in ['', None, 'None', '0' * 12, '0' * 40]: | |
197 | c.changeset_1 = c.repo.get_changeset(diff1) |
|
411 | c.changeset_1 = c.rhodecode_repo.get_changeset(diff1) | |
198 | node1 = c.changeset_1.get_node(f_path) |
|
412 | node1 = c.changeset_1.get_node(f_path) | |
199 | else: |
|
413 | else: | |
200 | c.changeset_1 = EmptyChangeset() |
|
414 | c.changeset_1 = EmptyChangeset(repo=c.rhodecode_repo) | |
201 | node1 = FileNode('.', '', changeset=c.changeset_1) |
|
415 | node1 = FileNode('.', '', changeset=c.changeset_1) | |
202 |
|
416 | |||
203 | if diff2 not in ['', None, 'None', '0' * 12, '0' * 40]: |
|
417 | if diff2 not in ['', None, 'None', '0' * 12, '0' * 40]: | |
204 | c.changeset_2 = c.repo.get_changeset(diff2) |
|
418 | c.changeset_2 = c.rhodecode_repo.get_changeset(diff2) | |
205 | node2 = c.changeset_2.get_node(f_path) |
|
419 | node2 = c.changeset_2.get_node(f_path) | |
206 | else: |
|
420 | else: | |
207 | c.changeset_2 = EmptyChangeset() |
|
421 | c.changeset_2 = EmptyChangeset(repo=c.rhodecode_repo) | |
208 | node2 = FileNode('.', '', changeset=c.changeset_2) |
|
422 | node2 = FileNode('.', '', changeset=c.changeset_2) | |
209 | except RepositoryError: |
|
423 | except RepositoryError: | |
210 | return redirect(url('files_home', |
|
424 | return redirect(url('files_home', | |
211 | repo_name=c.repo_name, f_path=f_path)) |
|
425 | repo_name=c.repo_name, f_path=f_path)) | |
212 |
|
426 | |||
213 | f_udiff = differ.get_udiff(node1, node2) |
|
427 | if c.action == 'download': | |
214 |
diff = differ.DiffProcessor( |
|
428 | diff = differ.DiffProcessor(differ.get_gitdiff(node1, node2), | |
|
429 | format='gitdiff') | |||
215 |
|
430 | |||
216 | if c.action == 'download': |
|
|||
217 | diff_name = '%s_vs_%s.diff' % (diff1, diff2) |
|
431 | diff_name = '%s_vs_%s.diff' % (diff1, diff2) | |
218 | response.content_type = 'text/plain' |
|
432 | response.content_type = 'text/plain' | |
219 | response.content_disposition = 'attachment; filename=%s' \ |
|
433 | response.content_disposition = 'attachment; filename=%s' \ | |
220 | % diff_name |
|
434 | % diff_name | |
221 | if node1.is_binary or node2.is_binary: |
|
|||
222 | return _('binary file changed') |
|
|||
223 | return diff.raw_diff() |
|
435 | return diff.raw_diff() | |
224 |
|
436 | |||
225 | elif c.action == 'raw': |
|
437 | elif c.action == 'raw': | |
|
438 | diff = differ.DiffProcessor(differ.get_gitdiff(node1, node2), | |||
|
439 | format='gitdiff') | |||
226 | response.content_type = 'text/plain' |
|
440 | response.content_type = 'text/plain' | |
227 | if node1.is_binary or node2.is_binary: |
|
|||
228 | return _('binary file changed') |
|
|||
229 | return diff.raw_diff() |
|
441 | return diff.raw_diff() | |
230 |
|
442 | |||
231 | elif c.action == 'diff': |
|
443 | elif c.action == 'diff': | |
232 |
if |
|
444 | if node1.is_binary or node2.is_binary: | |
233 | c.cur_diff = _('Binary file') |
|
445 | c.cur_diff = _('Binary file') | |
234 | elif node1.size > self.cut_off_limit or \ |
|
446 | elif node1.size > self.cut_off_limit or \ | |
235 | node2.size > self.cut_off_limit: |
|
447 | node2.size > self.cut_off_limit: | |
236 |
c.cur_diff = |
|
448 | c.cur_diff = '' | |
|
449 | c.big_diff = True | |||
237 | else: |
|
450 | else: | |
|
451 | diff = differ.DiffProcessor(differ.get_gitdiff(node1, node2), | |||
|
452 | format='gitdiff') | |||
238 | c.cur_diff = diff.as_html() |
|
453 | c.cur_diff = diff.as_html() | |
239 | else: |
|
454 | else: | |
|
455 | ||||
240 | #default option |
|
456 | #default option | |
241 | if node1.size > self.cut_off_limit or node2.size > self.cut_off_limit: |
|
457 | if node1.is_binary or node2.is_binary: | |
242 | c.cur_diff = _('Diff is to big to display') |
|
|||
243 | elif node1.is_binary or node2.is_binary: |
|
|||
244 | c.cur_diff = _('Binary file') |
|
458 | c.cur_diff = _('Binary file') | |
|
459 | elif node1.size > self.cut_off_limit or \ | |||
|
460 | node2.size > self.cut_off_limit: | |||
|
461 | c.cur_diff = '' | |||
|
462 | c.big_diff = True | |||
|
463 | ||||
245 | else: |
|
464 | else: | |
|
465 | diff = differ.DiffProcessor(differ.get_gitdiff(node1, node2), | |||
|
466 | format='gitdiff') | |||
246 | c.cur_diff = diff.as_html() |
|
467 | c.cur_diff = diff.as_html() | |
247 |
|
468 | |||
248 | if not c.cur_diff: |
|
469 | if not c.cur_diff and not c.big_diff: | |
249 | c.no_changes = True |
|
470 | c.no_changes = True | |
250 | return render('files/file_diff.html') |
|
471 | return render('files/file_diff.html') | |
251 |
|
472 | |||
252 |
def _get_history(self, |
|
473 | def _get_node_history(self, cs, f_path): | |
253 | from vcs.nodes import NodeKind |
|
474 | changesets = cs.get_file_history(f_path) | |
254 | if not node.kind is NodeKind.FILE: |
|
|||
255 | return [] |
|
|||
256 | changesets = node.history |
|
|||
257 | hist_l = [] |
|
475 | hist_l = [] | |
258 |
|
476 | |||
259 | changesets_group = ([], _("Changesets")) |
|
477 | changesets_group = ([], _("Changesets")) | |
@@ -266,14 +484,24 b' class FilesController(BaseController):' | |||||
266 |
|
484 | |||
267 | hist_l.append(changesets_group) |
|
485 | hist_l.append(changesets_group) | |
268 |
|
486 | |||
269 |
for name, chs in c.r |
|
487 | for name, chs in c.rhodecode_repo.branches.items(): | |
270 | #chs = chs.split(':')[-1] |
|
488 | #chs = chs.split(':')[-1] | |
271 | branches_group[0].append((chs, name),) |
|
489 | branches_group[0].append((chs, name),) | |
272 | hist_l.append(branches_group) |
|
490 | hist_l.append(branches_group) | |
273 |
|
491 | |||
274 |
for name, chs in c.r |
|
492 | for name, chs in c.rhodecode_repo.tags.items(): | |
275 | #chs = chs.split(':')[-1] |
|
493 | #chs = chs.split(':')[-1] | |
276 | tags_group[0].append((chs, name),) |
|
494 | tags_group[0].append((chs, name),) | |
277 | hist_l.append(tags_group) |
|
495 | hist_l.append(tags_group) | |
278 |
|
496 | |||
279 | return hist_l |
|
497 | return hist_l | |
|
498 | ||||
|
499 | @jsonify | |||
|
500 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |||
|
501 | 'repository.admin') | |||
|
502 | def nodelist(self, repo_name, revision, f_path): | |||
|
503 | if request.environ.get('HTTP_X_PARTIAL_XHR'): | |||
|
504 | cs = self.__get_cs_or_redirect(revision, repo_name) | |||
|
505 | _d, _f = self.__get_paths(cs, f_path) | |||
|
506 | return _d + _f | |||
|
507 |
@@ -27,13 +27,15 b' import logging' | |||||
27 | from operator import itemgetter |
|
27 | from operator import itemgetter | |
28 |
|
28 | |||
29 | from pylons import tmpl_context as c, request |
|
29 | from pylons import tmpl_context as c, request | |
|
30 | from paste.httpexceptions import HTTPBadRequest | |||
30 |
|
31 | |||
31 | from rhodecode.lib.auth import LoginRequired |
|
32 | from rhodecode.lib.auth import LoginRequired | |
32 | from rhodecode.lib.base import BaseController, render |
|
33 | from rhodecode.lib.base import BaseController, render | |
33 |
from rhodecode.model. |
|
34 | from rhodecode.model.db import Group, Repository | |
34 |
|
35 | |||
35 | log = logging.getLogger(__name__) |
|
36 | log = logging.getLogger(__name__) | |
36 |
|
37 | |||
|
38 | ||||
37 | class HomeController(BaseController): |
|
39 | class HomeController(BaseController): | |
38 |
|
40 | |||
39 | @LoginRequired() |
|
41 | @LoginRequired() | |
@@ -41,24 +43,18 b' class HomeController(BaseController):' | |||||
41 | super(HomeController, self).__before__() |
|
43 | super(HomeController, self).__before__() | |
42 |
|
44 | |||
43 | def index(self): |
|
45 | def index(self): | |
44 | sortables = ['name', 'description', 'last_change', 'tip', 'owner'] |
|
|||
45 | current_sort = request.GET.get('sort', 'name') |
|
|||
46 | current_sort_slug = current_sort.replace('-', '') |
|
|||
47 |
|
46 | |||
48 | if current_sort_slug not in sortables: |
|
47 | c.repos_list = self.scm_model.get_repos() | |
49 | c.sort_by = 'name' |
|
|||
50 | current_sort_slug = c.sort_by |
|
|||
51 | else: |
|
|||
52 | c.sort_by = current_sort |
|
|||
53 | c.sort_slug = current_sort_slug |
|
|||
54 | cached_repo_list = ScmModel().get_repos() |
|
|||
55 |
|
48 | |||
56 | sort_key = current_sort_slug + '_sort' |
|
49 | c.groups = Group.query().filter(Group.group_parent_id == None).all() | |
57 | if c.sort_by.startswith('-'): |
|
|||
58 | c.repos_list = sorted(cached_repo_list, key=itemgetter(sort_key), |
|
|||
59 | reverse=True) |
|
|||
60 | else: |
|
|||
61 | c.repos_list = sorted(cached_repo_list, key=itemgetter(sort_key), |
|
|||
62 | reverse=False) |
|
|||
63 |
|
50 | |||
64 | return render('/index.html') |
|
51 | return render('/index.html') | |
|
52 | ||||
|
53 | def repo_switcher(self): | |||
|
54 | if request.is_xhr: | |||
|
55 | all_repos = Repository.query().order_by(Repository.repo_name).all() | |||
|
56 | c.repos_list = self.scm_model.get_repos(all_repos, | |||
|
57 | sort_key='name_sort') | |||
|
58 | return render('/repo_switcher_list.html') | |||
|
59 | else: | |||
|
60 | return HTTPBadRequest() |
@@ -4,10 +4,10 b'' | |||||
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
5 |
|
5 | |||
6 | Journal controller for pylons |
|
6 | Journal controller for pylons | |
7 |
|
7 | |||
8 | :created_on: Nov 21, 2010 |
|
8 | :created_on: Nov 21, 2010 | |
9 | :author: marcink |
|
9 | :author: marcink | |
10 |
:copyright: (C) 2009-201 |
|
10 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |
11 | :license: GPLv3, see COPYING for more details. |
|
11 | :license: GPLv3, see COPYING for more details. | |
12 | """ |
|
12 | """ | |
13 | # This program is free software: you can redistribute it and/or modify |
|
13 | # This program is free software: you can redistribute it and/or modify | |
@@ -22,77 +22,209 b'' | |||||
22 | # |
|
22 | # | |
23 | # You should have received a copy of the GNU General Public License |
|
23 | # You should have received a copy of the GNU General Public License | |
24 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
24 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
25 |
|
||||
26 | import logging |
|
25 | import logging | |
27 | import traceback |
|
|||
28 |
|
||||
29 | from pylons import request, response, session, tmpl_context as c, url |
|
|||
30 | from paste.httpexceptions import HTTPInternalServerError, HTTPBadRequest |
|
|||
31 |
|
26 | |||
32 | from sqlalchemy import or_ |
|
27 | from sqlalchemy import or_ | |
|
28 | from sqlalchemy.orm import joinedload, make_transient | |||
|
29 | from webhelpers.paginate import Page | |||
|
30 | from itertools import groupby | |||
33 |
|
31 | |||
|
32 | from paste.httpexceptions import HTTPBadRequest | |||
|
33 | from pylons import request, tmpl_context as c, response, url | |||
|
34 | from pylons.i18n.translation import _ | |||
|
35 | from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed | |||
|
36 | ||||
|
37 | import rhodecode.lib.helpers as h | |||
34 | from rhodecode.lib.auth import LoginRequired, NotAnonymous |
|
38 | from rhodecode.lib.auth import LoginRequired, NotAnonymous | |
35 | from rhodecode.lib.base import BaseController, render |
|
39 | from rhodecode.lib.base import BaseController, render | |
36 | from rhodecode.lib.helpers import get_token |
|
|||
37 | from rhodecode.model.db import UserLog, UserFollowing |
|
40 | from rhodecode.model.db import UserLog, UserFollowing | |
38 | from rhodecode.model.scm import ScmModel |
|
|||
39 |
|
41 | |||
40 | log = logging.getLogger(__name__) |
|
42 | log = logging.getLogger(__name__) | |
41 |
|
43 | |||
|
44 | ||||
42 | class JournalController(BaseController): |
|
45 | class JournalController(BaseController): | |
43 |
|
46 | |||
|
47 | def __before__(self): | |||
|
48 | super(JournalController, self).__before__() | |||
|
49 | self.rhodecode_user = self.rhodecode_user | |||
|
50 | self.title = _('%s public journal %s feed') % (c.rhodecode_name, '%s') | |||
|
51 | self.language = 'en-us' | |||
|
52 | self.ttl = "5" | |||
|
53 | self.feed_nr = 20 | |||
44 |
|
54 | |||
45 | @LoginRequired() |
|
55 | @LoginRequired() | |
46 | @NotAnonymous() |
|
56 | @NotAnonymous() | |
47 | def __before__(self): |
|
|||
48 | super(JournalController, self).__before__() |
|
|||
49 |
|
||||
50 | def index(self): |
|
57 | def index(self): | |
51 | # Return a rendered template |
|
58 | # Return a rendered template | |
|
59 | p = int(request.params.get('page', 1)) | |||
52 |
|
60 | |||
53 | c.following = self.sa.query(UserFollowing)\ |
|
61 | c.following = self.sa.query(UserFollowing)\ | |
54 |
.filter(UserFollowing.user_id == |
|
62 | .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\ | |
|
63 | .options(joinedload(UserFollowing.follows_repository))\ | |||
|
64 | .all() | |||
|
65 | ||||
|
66 | journal = self._get_journal_data(c.following) | |||
|
67 | ||||
|
68 | c.journal_pager = Page(journal, page=p, items_per_page=20) | |||
|
69 | ||||
|
70 | c.journal_day_aggreagate = self._get_daily_aggregate(c.journal_pager) | |||
|
71 | ||||
|
72 | c.journal_data = render('journal/journal_data.html') | |||
|
73 | if request.environ.get('HTTP_X_PARTIAL_XHR'): | |||
|
74 | return c.journal_data | |||
|
75 | return render('journal/journal.html') | |||
55 |
|
76 | |||
56 | repo_ids = [x.follows_repository.repo_id for x in c.following |
|
77 | def _get_daily_aggregate(self, journal): | |
|
78 | groups = [] | |||
|
79 | for k, g in groupby(journal, lambda x: x.action_as_day): | |||
|
80 | user_group = [] | |||
|
81 | for k2, g2 in groupby(list(g), lambda x: x.user.email): | |||
|
82 | l = list(g2) | |||
|
83 | user_group.append((l[0].user, l)) | |||
|
84 | ||||
|
85 | groups.append((k, user_group,)) | |||
|
86 | ||||
|
87 | return groups | |||
|
88 | ||||
|
89 | def _get_journal_data(self, following_repos): | |||
|
90 | repo_ids = [x.follows_repository.repo_id for x in following_repos | |||
57 | if x.follows_repository is not None] |
|
91 | if x.follows_repository is not None] | |
58 |
user_ids = [x.follows_user.user_id for x in |
|
92 | user_ids = [x.follows_user.user_id for x in following_repos | |
59 | if x.follows_user is not None] |
|
93 | if x.follows_user is not None] | |
60 |
|
94 | |||
61 | c.journal = self.sa.query(UserLog)\ |
|
95 | filtering_criterion = None | |
62 | .filter(or_( |
|
|||
63 | UserLog.repository_id.in_(repo_ids), |
|
|||
64 | UserLog.user_id.in_(user_ids), |
|
|||
65 | ))\ |
|
|||
66 | .order_by(UserLog.action_date.desc())\ |
|
|||
67 | .limit(20)\ |
|
|||
68 | .all() |
|
|||
69 | return render('/journal.html') |
|
|||
70 |
|
96 | |||
71 | def toggle_following(self): |
|
97 | if repo_ids and user_ids: | |
|
98 | filtering_criterion = or_(UserLog.repository_id.in_(repo_ids), | |||
|
99 | UserLog.user_id.in_(user_ids)) | |||
|
100 | if repo_ids and not user_ids: | |||
|
101 | filtering_criterion = UserLog.repository_id.in_(repo_ids) | |||
|
102 | if not repo_ids and user_ids: | |||
|
103 | filtering_criterion = UserLog.user_id.in_(user_ids) | |||
|
104 | if filtering_criterion is not None: | |||
|
105 | journal = self.sa.query(UserLog)\ | |||
|
106 | .options(joinedload(UserLog.user))\ | |||
|
107 | .options(joinedload(UserLog.repository))\ | |||
|
108 | .filter(filtering_criterion)\ | |||
|
109 | .order_by(UserLog.action_date.desc()) | |||
|
110 | else: | |||
|
111 | journal = [] | |||
72 |
|
112 | |||
73 | if request.POST.get('auth_token') == get_token(): |
|
113 | return journal | |
74 | scm_model = ScmModel() |
|
114 | ||
|
115 | @LoginRequired() | |||
|
116 | @NotAnonymous() | |||
|
117 | def toggle_following(self): | |||
|
118 | cur_token = request.POST.get('auth_token') | |||
|
119 | token = h.get_token() | |||
|
120 | if cur_token == token: | |||
75 |
|
121 | |||
76 | user_id = request.POST.get('follows_user_id') |
|
122 | user_id = request.POST.get('follows_user_id') | |
77 | if user_id: |
|
123 | if user_id: | |
78 | try: |
|
124 | try: | |
79 | scm_model.toggle_following_user(user_id, |
|
125 | self.scm_model.toggle_following_user(user_id, | |
80 |
|
|
126 | self.rhodecode_user.user_id) | |
81 | return 'ok' |
|
127 | return 'ok' | |
82 | except: |
|
128 | except: | |
83 | log.error(traceback.format_exc()) |
|
129 | raise HTTPBadRequest() | |
84 | raise HTTPInternalServerError() |
|
|||
85 |
|
130 | |||
86 | repo_id = request.POST.get('follows_repo_id') |
|
131 | repo_id = request.POST.get('follows_repo_id') | |
87 | if repo_id: |
|
132 | if repo_id: | |
88 | try: |
|
133 | try: | |
89 | scm_model.toggle_following_repo(repo_id, |
|
134 | self.scm_model.toggle_following_repo(repo_id, | |
90 |
|
|
135 | self.rhodecode_user.user_id) | |
91 | return 'ok' |
|
136 | return 'ok' | |
92 | except: |
|
137 | except: | |
93 | log.error(traceback.format_exc()) |
|
138 | raise HTTPBadRequest() | |
94 | raise HTTPInternalServerError() |
|
139 | ||
|
140 | log.debug('token mismatch %s vs %s', cur_token, token) | |||
|
141 | raise HTTPBadRequest() | |||
|
142 | ||||
|
143 | @LoginRequired() | |||
|
144 | def public_journal(self): | |||
|
145 | # Return a rendered template | |||
|
146 | p = int(request.params.get('page', 1)) | |||
|
147 | ||||
|
148 | c.following = self.sa.query(UserFollowing)\ | |||
|
149 | .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\ | |||
|
150 | .options(joinedload(UserFollowing.follows_repository))\ | |||
|
151 | .all() | |||
|
152 | ||||
|
153 | journal = self._get_journal_data(c.following) | |||
|
154 | ||||
|
155 | c.journal_pager = Page(journal, page=p, items_per_page=20) | |||
|
156 | ||||
|
157 | c.journal_day_aggreagate = self._get_daily_aggregate(c.journal_pager) | |||
|
158 | ||||
|
159 | c.journal_data = render('journal/journal_data.html') | |||
|
160 | if request.environ.get('HTTP_X_PARTIAL_XHR'): | |||
|
161 | return c.journal_data | |||
|
162 | return render('journal/public_journal.html') | |||
|
163 | ||||
|
164 | @LoginRequired(api_access=True) | |||
|
165 | def public_journal_atom(self): | |||
|
166 | """ | |||
|
167 | Produce an atom-1.0 feed via feedgenerator module | |||
|
168 | """ | |||
|
169 | c.following = self.sa.query(UserFollowing)\ | |||
|
170 | .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\ | |||
|
171 | .options(joinedload(UserFollowing.follows_repository))\ | |||
|
172 | .all() | |||
|
173 | ||||
|
174 | journal = self._get_journal_data(c.following) | |||
|
175 | ||||
|
176 | feed = Atom1Feed(title=self.title % 'atom', | |||
|
177 | link=url('public_journal_atom', qualified=True), | |||
|
178 | description=_('Public journal'), | |||
|
179 | language=self.language, | |||
|
180 | ttl=self.ttl) | |||
95 |
|
181 | |||
|
182 | for entry in journal[:self.feed_nr]: | |||
|
183 | #tmpl = h.action_parser(entry)[0] | |||
|
184 | action, action_extra = h.action_parser(entry, feed=True) | |||
|
185 | title = "%s - %s %s" % (entry.user.short_contact, action, | |||
|
186 | entry.repository.repo_name) | |||
|
187 | desc = action_extra() | |||
|
188 | feed.add_item(title=title, | |||
|
189 | pubdate=entry.action_date, | |||
|
190 | link=url('', qualified=True), | |||
|
191 | author_email=entry.user.email, | |||
|
192 | author_name=entry.user.full_contact, | |||
|
193 | description=desc) | |||
96 |
|
194 | |||
|
195 | response.content_type = feed.mime_type | |||
|
196 | return feed.writeString('utf-8') | |||
97 |
|
197 | |||
98 | raise HTTPBadRequest() |
|
198 | @LoginRequired(api_access=True) | |
|
199 | def public_journal_rss(self): | |||
|
200 | """ | |||
|
201 | Produce an rss2 feed via feedgenerator module | |||
|
202 | """ | |||
|
203 | c.following = self.sa.query(UserFollowing)\ | |||
|
204 | .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\ | |||
|
205 | .options(joinedload(UserFollowing.follows_repository))\ | |||
|
206 | .all() | |||
|
207 | ||||
|
208 | journal = self._get_journal_data(c.following) | |||
|
209 | ||||
|
210 | feed = Rss201rev2Feed(title=self.title % 'rss', | |||
|
211 | link=url('public_journal_rss', qualified=True), | |||
|
212 | description=_('Public journal'), | |||
|
213 | language=self.language, | |||
|
214 | ttl=self.ttl) | |||
|
215 | ||||
|
216 | for entry in journal[:self.feed_nr]: | |||
|
217 | #tmpl = h.action_parser(entry)[0] | |||
|
218 | action, action_extra = h.action_parser(entry, feed=True) | |||
|
219 | title = "%s - %s %s" % (entry.user.short_contact, action, | |||
|
220 | entry.repository.repo_name) | |||
|
221 | desc = action_extra() | |||
|
222 | feed.add_item(title=title, | |||
|
223 | pubdate=entry.action_date, | |||
|
224 | link=url('', qualified=True), | |||
|
225 | author_email=entry.user.email, | |||
|
226 | author_name=entry.user.full_contact, | |||
|
227 | description=desc) | |||
|
228 | ||||
|
229 | response.content_type = feed.mime_type | |||
|
230 | return feed.writeString('utf-8') |
@@ -4,10 +4,10 b'' | |||||
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
5 |
|
5 | |||
6 | Login controller for rhodeocode |
|
6 | Login controller for rhodeocode | |
7 |
|
7 | |||
8 | :created_on: Apr 22, 2010 |
|
8 | :created_on: Apr 22, 2010 | |
9 | :author: marcink |
|
9 | :author: marcink | |
10 |
:copyright: (C) 2009-201 |
|
10 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |
11 | :license: GPLv3, see COPYING for more details. |
|
11 | :license: GPLv3, see COPYING for more details. | |
12 | """ |
|
12 | """ | |
13 | # This program is free software: you can redistribute it and/or modify |
|
13 | # This program is free software: you can redistribute it and/or modify | |
@@ -35,12 +35,14 b' from pylons import request, response, se' | |||||
35 | import rhodecode.lib.helpers as h |
|
35 | import rhodecode.lib.helpers as h | |
36 | from rhodecode.lib.auth import AuthUser, HasPermissionAnyDecorator |
|
36 | from rhodecode.lib.auth import AuthUser, HasPermissionAnyDecorator | |
37 | from rhodecode.lib.base import BaseController, render |
|
37 | from rhodecode.lib.base import BaseController, render | |
|
38 | from rhodecode.model.db import User | |||
38 | from rhodecode.model.forms import LoginForm, RegisterForm, PasswordResetForm |
|
39 | from rhodecode.model.forms import LoginForm, RegisterForm, PasswordResetForm | |
39 | from rhodecode.model.user import UserModel |
|
40 | from rhodecode.model.user import UserModel | |
40 |
|
41 | |||
41 |
|
42 | |||
42 | log = logging.getLogger(__name__) |
|
43 | log = logging.getLogger(__name__) | |
43 |
|
44 | |||
|
45 | ||||
44 | class LoginController(BaseController): |
|
46 | class LoginController(BaseController): | |
45 |
|
47 | |||
46 | def __before__(self): |
|
48 | def __before__(self): | |
@@ -50,8 +52,8 b' class LoginController(BaseController):' | |||||
50 | #redirect if already logged in |
|
52 | #redirect if already logged in | |
51 | c.came_from = request.GET.get('came_from', None) |
|
53 | c.came_from = request.GET.get('came_from', None) | |
52 |
|
54 | |||
53 |
if |
|
55 | if self.rhodecode_user.is_authenticated \ | |
54 |
and |
|
56 | and self.rhodecode_user.username != 'default': | |
55 |
|
57 | |||
56 | return redirect(url('home')) |
|
58 | return redirect(url('home')) | |
57 |
|
59 | |||
@@ -60,19 +62,17 b' class LoginController(BaseController):' | |||||
60 | login_form = LoginForm() |
|
62 | login_form = LoginForm() | |
61 | try: |
|
63 | try: | |
62 | c.form_result = login_form.to_python(dict(request.POST)) |
|
64 | c.form_result = login_form.to_python(dict(request.POST)) | |
|
65 | #form checks for username/password, now we're authenticated | |||
63 | username = c.form_result['username'] |
|
66 | username = c.form_result['username'] | |
64 |
user = User |
|
67 | user = User.by_username(username, | |
65 | auth_user = AuthUser() |
|
68 | case_insensitive=True) | |
66 |
auth_user |
|
69 | auth_user = AuthUser(user.user_id) | |
67 |
auth_user. |
|
70 | auth_user.set_authenticated() | |
68 | auth_user.is_admin = user.admin |
|
|||
69 | auth_user.user_id = user.user_id |
|
|||
70 | auth_user.name = user.name |
|
|||
71 | auth_user.lastname = user.lastname |
|
|||
72 | session['rhodecode_user'] = auth_user |
|
71 | session['rhodecode_user'] = auth_user | |
73 | session.save() |
|
72 | session.save() | |
74 | log.info('user %s is now authenticated', username) |
|
|||
75 |
|
73 | |||
|
74 | log.info('user %s is now authenticated and stored in session', | |||
|
75 | username) | |||
76 | user.update_lastlogin() |
|
76 | user.update_lastlogin() | |
77 |
|
77 | |||
78 | if c.came_from: |
|
78 | if c.came_from: | |
@@ -95,7 +95,8 b' class LoginController(BaseController):' | |||||
95 | def register(self): |
|
95 | def register(self): | |
96 | user_model = UserModel() |
|
96 | user_model = UserModel() | |
97 | c.auto_active = False |
|
97 | c.auto_active = False | |
98 |
for perm in user_model.get_by_username('default', |
|
98 | for perm in user_model.get_by_username('default', | |
|
99 | cache=False).user_perms: | |||
99 | if perm.permission.permission_name == 'hg.register.auto_activate': |
|
100 | if perm.permission.permission_name == 'hg.register.auto_activate': | |
100 | c.auto_active = True |
|
101 | c.auto_active = True | |
101 | break |
|
102 | break | |
@@ -128,8 +129,8 b' class LoginController(BaseController):' | |||||
128 | password_reset_form = PasswordResetForm()() |
|
129 | password_reset_form = PasswordResetForm()() | |
129 | try: |
|
130 | try: | |
130 | form_result = password_reset_form.to_python(dict(request.POST)) |
|
131 | form_result = password_reset_form.to_python(dict(request.POST)) | |
131 | user_model.reset_password(form_result) |
|
132 | user_model.reset_password_link(form_result) | |
132 |
h.flash(_('Your |
|
133 | h.flash(_('Your password reset link was sent'), | |
133 | category='success') |
|
134 | category='success') | |
134 | return redirect(url('login_home')) |
|
135 | return redirect(url('login_home')) | |
135 |
|
136 | |||
@@ -143,8 +144,25 b' class LoginController(BaseController):' | |||||
143 |
|
144 | |||
144 | return render('/password_reset.html') |
|
145 | return render('/password_reset.html') | |
145 |
|
146 | |||
|
147 | def password_reset_confirmation(self): | |||
|
148 | ||||
|
149 | if request.GET and request.GET.get('key'): | |||
|
150 | try: | |||
|
151 | user_model = UserModel() | |||
|
152 | user = User.get_by_api_key(request.GET.get('key')) | |||
|
153 | data = dict(email=user.email) | |||
|
154 | user_model.reset_password(data) | |||
|
155 | h.flash(_('Your password reset was successful, ' | |||
|
156 | 'new password has been sent to your email'), | |||
|
157 | category='success') | |||
|
158 | except Exception, e: | |||
|
159 | log.error(e) | |||
|
160 | return redirect(url('reset_password')) | |||
|
161 | ||||
|
162 | return redirect(url('login_home')) | |||
|
163 | ||||
146 | def logout(self): |
|
164 | def logout(self): | |
147 |
session['rhodecode_user'] |
|
165 | del session['rhodecode_user'] | |
148 | session.save() |
|
166 | session.save() | |
149 | log.info('Logging out and setting user as Empty') |
|
167 | log.info('Logging out and setting user as Empty') | |
150 | redirect(url('home')) |
|
168 | redirect(url('home')) |
@@ -4,10 +4,10 b'' | |||||
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
5 |
|
5 | |||
6 | Search controller for rhodecode |
|
6 | Search controller for rhodecode | |
7 |
|
7 | |||
8 | :created_on: Aug 7, 2010 |
|
8 | :created_on: Aug 7, 2010 | |
9 | :author: marcink |
|
9 | :author: marcink | |
10 |
:copyright: (C) 2009-201 |
|
10 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |
11 | :license: GPLv3, see COPYING for more details. |
|
11 | :license: GPLv3, see COPYING for more details. | |
12 | """ |
|
12 | """ | |
13 | # This program is free software: you can redistribute it and/or modify |
|
13 | # This program is free software: you can redistribute it and/or modify | |
@@ -26,8 +26,7 b' import logging' | |||||
26 | import traceback |
|
26 | import traceback | |
27 |
|
27 | |||
28 | from pylons.i18n.translation import _ |
|
28 | from pylons.i18n.translation import _ | |
29 |
from pylons import request |
|
29 | from pylons import request, config, session, tmpl_context as c | |
30 | from pylons.controllers.util import abort, redirect |
|
|||
31 |
|
30 | |||
32 | from rhodecode.lib.auth import LoginRequired |
|
31 | from rhodecode.lib.auth import LoginRequired | |
33 | from rhodecode.lib.base import BaseController, render |
|
32 | from rhodecode.lib.base import BaseController, render | |
@@ -38,10 +37,11 b' from webhelpers.util import update_param' | |||||
38 |
|
37 | |||
39 | from whoosh.index import open_dir, EmptyIndexError |
|
38 | from whoosh.index import open_dir, EmptyIndexError | |
40 | from whoosh.qparser import QueryParser, QueryParserError |
|
39 | from whoosh.qparser import QueryParser, QueryParserError | |
41 | from whoosh.query import Phrase |
|
40 | from whoosh.query import Phrase, Wildcard, Term, Prefix | |
42 |
|
41 | |||
43 | log = logging.getLogger(__name__) |
|
42 | log = logging.getLogger(__name__) | |
44 |
|
43 | |||
|
44 | ||||
45 | class SearchController(BaseController): |
|
45 | class SearchController(BaseController): | |
46 |
|
46 | |||
47 | @LoginRequired() |
|
47 | @LoginRequired() | |
@@ -54,13 +54,12 b' class SearchController(BaseController):' | |||||
54 | c.runtime = '' |
|
54 | c.runtime = '' | |
55 | c.cur_query = request.GET.get('q', None) |
|
55 | c.cur_query = request.GET.get('q', None) | |
56 | c.cur_type = request.GET.get('type', 'source') |
|
56 | c.cur_type = request.GET.get('type', 'source') | |
57 | c.cur_search = search_type = {'content':'content', |
|
57 | c.cur_search = search_type = {'content': 'content', | |
58 | 'commit':'content', |
|
58 | 'commit': 'content', | |
59 | 'path':'path', |
|
59 | 'path': 'path', | |
60 | 'repository':'repository'}\ |
|
60 | 'repository': 'repository'}\ | |
61 | .get(c.cur_type, 'content') |
|
61 | .get(c.cur_type, 'content') | |
62 |
|
62 | |||
63 |
|
||||
64 | if c.cur_query: |
|
63 | if c.cur_query: | |
65 | cur_query = c.cur_query.lower() |
|
64 | cur_query = c.cur_query.lower() | |
66 |
|
65 | |||
@@ -68,8 +67,8 b' class SearchController(BaseController):' | |||||
68 | p = int(request.params.get('page', 1)) |
|
67 | p = int(request.params.get('page', 1)) | |
69 | highlight_items = set() |
|
68 | highlight_items = set() | |
70 | try: |
|
69 | try: | |
71 | idx = open_dir(config['app_conf']['index_dir'] |
|
70 | idx = open_dir(config['app_conf']['index_dir'], | |
72 |
|
|
71 | indexname=IDX_NAME) | |
73 | searcher = idx.searcher() |
|
72 | searcher = idx.searcher() | |
74 |
|
73 | |||
75 | qp = QueryParser(search_type, schema=SCHEMA) |
|
74 | qp = QueryParser(search_type, schema=SCHEMA) | |
@@ -80,6 +79,8 b' class SearchController(BaseController):' | |||||
80 |
|
79 | |||
81 | if isinstance(query, Phrase): |
|
80 | if isinstance(query, Phrase): | |
82 | highlight_items.update(query.words) |
|
81 | highlight_items.update(query.words) | |
|
82 | elif isinstance(query, Prefix): | |||
|
83 | highlight_items.add(query.text) | |||
83 | else: |
|
84 | else: | |
84 | for i in query.all_terms(): |
|
85 | for i in query.all_terms(): | |
85 | if i[0] == 'content': |
|
86 | if i[0] == 'content': | |
@@ -104,7 +105,6 b' class SearchController(BaseController):' | |||||
104 | page=p, item_count=res_ln, |
|
105 | page=p, item_count=res_ln, | |
105 | items_per_page=10, url=url_generator) |
|
106 | items_per_page=10, url=url_generator) | |
106 |
|
107 | |||
107 |
|
||||
108 | except QueryParserError: |
|
108 | except QueryParserError: | |
109 | c.runtime = _('Invalid search query. Try quoting it.') |
|
109 | c.runtime = _('Invalid search query. Try quoting it.') | |
110 | searcher.close() |
|
110 | searcher.close() | |
@@ -113,6 +113,9 b' class SearchController(BaseController):' | |||||
113 | log.error('Empty Index data') |
|
113 | log.error('Empty Index data') | |
114 | c.runtime = _('There is no index to search in. ' |
|
114 | c.runtime = _('There is no index to search in. ' | |
115 | 'Please run whoosh indexer') |
|
115 | 'Please run whoosh indexer') | |
|
116 | except (Exception): | |||
|
117 | log.error(traceback.format_exc()) | |||
|
118 | c.runtime = _('An error occurred during this search operation') | |||
116 |
|
119 | |||
117 | # Return a rendered template |
|
120 | # Return a rendered template | |
118 | return render('/search/search.html') |
|
121 | return render('/search/search.html') |
@@ -4,10 +4,10 b'' | |||||
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
5 |
|
5 | |||
6 | Settings controller for rhodecode |
|
6 | Settings controller for rhodecode | |
7 |
|
7 | |||
8 | :created_on: Jun 30, 2010 |
|
8 | :created_on: Jun 30, 2010 | |
9 | :author: marcink |
|
9 | :author: marcink | |
10 |
:copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> |
|
10 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |
11 | :license: GPLv3, see COPYING for more details. |
|
11 | :license: GPLv3, see COPYING for more details. | |
12 | """ |
|
12 | """ | |
13 | # This program is free software: you can redistribute it and/or modify |
|
13 | # This program is free software: you can redistribute it and/or modify | |
@@ -34,16 +34,20 b' from pylons.controllers.util import redi' | |||||
34 | from pylons.i18n.translation import _ |
|
34 | from pylons.i18n.translation import _ | |
35 |
|
35 | |||
36 | import rhodecode.lib.helpers as h |
|
36 | import rhodecode.lib.helpers as h | |
|
37 | ||||
37 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAllDecorator, \ |
|
38 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAllDecorator, \ | |
38 | HasRepoPermissionAnyDecorator, NotAnonymous |
|
39 | HasRepoPermissionAnyDecorator, NotAnonymous | |
39 | from rhodecode.lib.base import BaseController, render |
|
40 | from rhodecode.lib.base import BaseRepoController, render | |
40 | from rhodecode.lib.utils import invalidate_cache, action_logger |
|
41 | from rhodecode.lib.utils import invalidate_cache, action_logger | |
|
42 | ||||
41 | from rhodecode.model.forms import RepoSettingsForm, RepoForkForm |
|
43 | from rhodecode.model.forms import RepoSettingsForm, RepoForkForm | |
42 | from rhodecode.model.repo import RepoModel |
|
44 | from rhodecode.model.repo import RepoModel | |
|
45 | from rhodecode.model.db import User | |||
43 |
|
46 | |||
44 | log = logging.getLogger(__name__) |
|
47 | log = logging.getLogger(__name__) | |
45 |
|
48 | |||
46 | class SettingsController(BaseController): |
|
49 | ||
|
50 | class SettingsController(BaseRepoController): | |||
47 |
|
51 | |||
48 | @LoginRequired() |
|
52 | @LoginRequired() | |
49 | def __before__(self): |
|
53 | def __before__(self): | |
@@ -61,12 +65,28 b' class SettingsController(BaseController)' | |||||
61 | category='error') |
|
65 | category='error') | |
62 |
|
66 | |||
63 | return redirect(url('home')) |
|
67 | return redirect(url('home')) | |
64 | defaults = c.repo_info.get_dict() |
|
68 | ||
65 | defaults.update({'user':c.repo_info.user.username}) |
|
|||
66 | c.users_array = repo_model.get_users_js() |
|
69 | c.users_array = repo_model.get_users_js() | |
|
70 | c.users_groups_array = repo_model.get_users_groups_js() | |||
67 |
|
71 | |||
|
72 | defaults = c.repo_info.get_dict() | |||
|
73 | ||||
|
74 | #fill owner | |||
|
75 | if c.repo_info.user: | |||
|
76 | defaults.update({'user': c.repo_info.user.username}) | |||
|
77 | else: | |||
|
78 | replacement_user = self.sa.query(User)\ | |||
|
79 | .filter(User.admin == True).first().username | |||
|
80 | defaults.update({'user': replacement_user}) | |||
|
81 | ||||
|
82 | #fill repository users | |||
68 | for p in c.repo_info.repo_to_perm: |
|
83 | for p in c.repo_info.repo_to_perm: | |
69 | defaults.update({'perm_%s' % p.user.username: |
|
84 | defaults.update({'u_perm_%s' % p.user.username: | |
|
85 | p.permission.permission_name}) | |||
|
86 | ||||
|
87 | #fill repository groups | |||
|
88 | for p in c.repo_info.users_group_to_perm: | |||
|
89 | defaults.update({'g_perm_%s' % p.users_group.users_group_name: | |||
70 | p.permission.permission_name}) |
|
90 | p.permission.permission_name}) | |
71 |
|
91 | |||
72 | return htmlfill.render( |
|
92 | return htmlfill.render( | |
@@ -80,7 +100,8 b' class SettingsController(BaseController)' | |||||
80 | def update(self, repo_name): |
|
100 | def update(self, repo_name): | |
81 | repo_model = RepoModel() |
|
101 | repo_model = RepoModel() | |
82 | changed_name = repo_name |
|
102 | changed_name = repo_name | |
83 |
_form = RepoSettingsForm(edit=True, |
|
103 | _form = RepoSettingsForm(edit=True, | |
|
104 | old_data={'repo_name': repo_name})() | |||
84 | try: |
|
105 | try: | |
85 | form_result = _form.to_python(dict(request.POST)) |
|
106 | form_result = _form.to_python(dict(request.POST)) | |
86 | repo_model.update(repo_name, form_result) |
|
107 | repo_model.update(repo_name, form_result) | |
@@ -93,7 +114,7 b' class SettingsController(BaseController)' | |||||
93 | except formencode.Invalid, errors: |
|
114 | except formencode.Invalid, errors: | |
94 | c.repo_info = repo_model.get_by_repo_name(repo_name) |
|
115 | c.repo_info = repo_model.get_by_repo_name(repo_name) | |
95 | c.users_array = repo_model.get_users_js() |
|
116 | c.users_array = repo_model.get_users_js() | |
96 | errors.value.update({'user':c.repo_info.user.username}) |
|
117 | errors.value.update({'user': c.repo_info.user.username}) | |
97 | return htmlfill.render( |
|
118 | return htmlfill.render( | |
98 | render('settings/repo_settings.html'), |
|
119 | render('settings/repo_settings.html'), | |
99 | defaults=errors.value, |
|
120 | defaults=errors.value, | |
@@ -107,7 +128,6 b' class SettingsController(BaseController)' | |||||
107 |
|
128 | |||
108 | return redirect(url('repo_settings_home', repo_name=changed_name)) |
|
129 | return redirect(url('repo_settings_home', repo_name=changed_name)) | |
109 |
|
130 | |||
110 |
|
||||
111 | @HasRepoPermissionAllDecorator('repository.admin') |
|
131 | @HasRepoPermissionAllDecorator('repository.admin') | |
112 | def delete(self, repo_name): |
|
132 | def delete(self, repo_name): | |
113 | """DELETE /repos/repo_name: Delete an existing item""" |
|
133 | """DELETE /repos/repo_name: Delete an existing item""" | |
@@ -135,6 +155,7 b' class SettingsController(BaseController)' | |||||
135 | invalidate_cache('get_repo_cached_%s' % repo_name) |
|
155 | invalidate_cache('get_repo_cached_%s' % repo_name) | |
136 | h.flash(_('deleted repository %s') % repo_name, category='success') |
|
156 | h.flash(_('deleted repository %s') % repo_name, category='success') | |
137 | except Exception: |
|
157 | except Exception: | |
|
158 | log.error(traceback.format_exc()) | |||
138 | h.flash(_('An error occurred during deletion of %s') % repo_name, |
|
159 | h.flash(_('An error occurred during deletion of %s') % repo_name, | |
139 | category='error') |
|
160 | category='error') | |
140 |
|
161 | |||
@@ -163,12 +184,12 b' class SettingsController(BaseController)' | |||||
163 | def fork_create(self, repo_name): |
|
184 | def fork_create(self, repo_name): | |
164 | repo_model = RepoModel() |
|
185 | repo_model = RepoModel() | |
165 | c.repo_info = repo_model.get_by_repo_name(repo_name) |
|
186 | c.repo_info = repo_model.get_by_repo_name(repo_name) | |
166 | _form = RepoForkForm(old_data={'repo_type':c.repo_info.repo_type})() |
|
187 | _form = RepoForkForm(old_data={'repo_type': c.repo_info.repo_type})() | |
167 | form_result = {} |
|
188 | form_result = {} | |
168 | try: |
|
189 | try: | |
169 | form_result = _form.to_python(dict(request.POST)) |
|
190 | form_result = _form.to_python(dict(request.POST)) | |
170 | form_result.update({'repo_name':repo_name}) |
|
191 | form_result.update({'repo_name': repo_name}) | |
171 |
repo_model.create_fork(form_result, |
|
192 | repo_model.create_fork(form_result, self.rhodecode_user) | |
172 | h.flash(_('forked %s repository as %s') \ |
|
193 | h.flash(_('forked %s repository as %s') \ | |
173 | % (repo_name, form_result['fork_name']), |
|
194 | % (repo_name, form_result['fork_name']), | |
174 | category='success') |
|
195 | category='success') | |
@@ -185,4 +206,9 b' class SettingsController(BaseController)' | |||||
185 | errors=errors.error_dict or {}, |
|
206 | errors=errors.error_dict or {}, | |
186 | prefix_error=False, |
|
207 | prefix_error=False, | |
187 | encoding="UTF-8") |
|
208 | encoding="UTF-8") | |
|
209 | except Exception: | |||
|
210 | log.error(traceback.format_exc()) | |||
|
211 | h.flash(_('An error occurred during repository forking %s') % | |||
|
212 | repo_name, category='error') | |||
|
213 | ||||
188 | return redirect(url('home')) |
|
214 | return redirect(url('home')) |
@@ -27,15 +27,14 b' import logging' | |||||
27 |
|
27 | |||
28 | from pylons import tmpl_context as c, request, url |
|
28 | from pylons import tmpl_context as c, request, url | |
29 |
|
29 | |||
30 | from webhelpers.paginate import Page |
|
|||
31 |
|
||||
32 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator |
|
30 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator | |
33 | from rhodecode.lib.base import BaseController, render |
|
31 | from rhodecode.lib.base import BaseRepoController, render | |
34 |
from rhodecode. |
|
32 | from rhodecode.lib.helpers import RepoPage | |
35 |
|
33 | |||
36 | log = logging.getLogger(__name__) |
|
34 | log = logging.getLogger(__name__) | |
37 |
|
35 | |||
38 | class ShortlogController(BaseController): |
|
36 | ||
|
37 | class ShortlogController(BaseRepoController): | |||
39 |
|
38 | |||
40 | @LoginRequired() |
|
39 | @LoginRequired() | |
41 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
|
40 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |
@@ -47,15 +46,14 b' class ShortlogController(BaseController)' | |||||
47 | p = int(request.params.get('page', 1)) |
|
46 | p = int(request.params.get('page', 1)) | |
48 | size = int(request.params.get('size', 20)) |
|
47 | size = int(request.params.get('size', 20)) | |
49 |
|
48 | |||
50 | print repo_name |
|
|||
51 | def url_generator(**kw): |
|
49 | def url_generator(**kw): | |
52 | return url('shortlog_home', repo_name=repo_name, size=size, **kw) |
|
50 | return url('shortlog_home', repo_name=repo_name, size=size, **kw) | |
53 |
|
51 | |||
54 | repo = ScmModel().get_repo(c.repo_name) |
|
52 | c.repo_changesets = RepoPage(c.rhodecode_repo, page=p, | |
55 | c.repo_changesets = Page(repo, page=p, items_per_page=size, |
|
53 | items_per_page=size, | |
56 | url=url_generator) |
|
54 | url=url_generator) | |
57 | c.shortlog_data = render('shortlog/shortlog_data.html') |
|
55 | c.shortlog_data = render('shortlog/shortlog_data.html') | |
58 |
if request. |
|
56 | if request.environ.get('HTTP_X_PARTIAL_XHR'): | |
59 | return c.shortlog_data |
|
57 | return c.shortlog_data | |
60 | r = render('shortlog/shortlog.html') |
|
58 | r = render('shortlog/shortlog.html') | |
61 | return r |
|
59 | return r |
@@ -7,7 +7,7 b'' | |||||
7 |
|
7 | |||
8 | :created_on: Apr 18, 2010 |
|
8 | :created_on: Apr 18, 2010 | |
9 | :author: marcink |
|
9 | :author: marcink | |
10 |
:copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> |
|
10 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |
11 | :license: GPLv3, see COPYING for more details. |
|
11 | :license: GPLv3, see COPYING for more details. | |
12 | """ |
|
12 | """ | |
13 | # This program is free software: you can redistribute it and/or modify |
|
13 | # This program is free software: you can redistribute it and/or modify | |
@@ -33,26 +33,29 b' from vcs.exceptions import ChangesetErro' | |||||
33 | from pylons import tmpl_context as c, request, url |
|
33 | from pylons import tmpl_context as c, request, url | |
34 | from pylons.i18n.translation import _ |
|
34 | from pylons.i18n.translation import _ | |
35 |
|
35 | |||
36 |
from rhodecode.model. |
|
36 | from rhodecode.model.db import Statistics, Repository | |
37 |
from rhodecode.model. |
|
37 | from rhodecode.model.repo import RepoModel | |
38 |
|
38 | |||
39 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator |
|
39 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator | |
40 | from rhodecode.lib.base import BaseController, render |
|
40 | from rhodecode.lib.base import BaseRepoController, render | |
41 |
from rhodecode.lib.utils import |
|
41 | from rhodecode.lib.utils import EmptyChangeset | |
|
42 | from rhodecode.lib.odict import OrderedDict | |||
42 |
|
43 | |||
43 | from rhodecode.lib.celerylib import run_task |
|
44 | from rhodecode.lib.celerylib import run_task | |
44 | from rhodecode.lib.celerylib.tasks import get_commits_stats |
|
45 | from rhodecode.lib.celerylib.tasks import get_commits_stats, \ | |
45 |
|
46 | LANGUAGES_EXTENSIONS_MAP | ||
46 |
from |
|
47 | from rhodecode.lib.helpers import RepoPage | |
47 |
|
48 | |||
48 | try: |
|
49 | try: | |
49 | import json |
|
50 | import json | |
50 | except ImportError: |
|
51 | except ImportError: | |
51 | #python 2.5 compatibility |
|
52 | #python 2.5 compatibility | |
52 | import simplejson as json |
|
53 | import simplejson as json | |
|
54 | ||||
53 | log = logging.getLogger(__name__) |
|
55 | log = logging.getLogger(__name__) | |
54 |
|
56 | |||
55 | class SummaryController(BaseController): |
|
57 | ||
|
58 | class SummaryController(BaseRepoController): | |||
56 |
|
59 | |||
57 | @LoginRequired() |
|
60 | @LoginRequired() | |
58 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
|
61 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |
@@ -61,42 +64,51 b' class SummaryController(BaseController):' | |||||
61 | super(SummaryController, self).__before__() |
|
64 | super(SummaryController, self).__before__() | |
62 |
|
65 | |||
63 | def index(self, repo_name): |
|
66 | def index(self, repo_name): | |
64 | scm_model = ScmModel() |
|
67 | ||
65 | c.repo_info = scm_model.get_repo(c.repo_name) |
|
68 | e = request.environ | |
66 | c.following = scm_model.is_following_repo(c.repo_name, |
|
69 | c.dbrepo = dbrepo = c.rhodecode_db_repo | |
67 | c.rhodecode_user.user_id) |
|
70 | ||
|
71 | c.following = self.scm_model.is_following_repo(repo_name, | |||
|
72 | self.rhodecode_user.user_id) | |||
|
73 | ||||
68 | def url_generator(**kw): |
|
74 | def url_generator(**kw): | |
69 | return url('shortlog_home', repo_name=repo_name, size=10, **kw) |
|
75 | return url('shortlog_home', repo_name=repo_name, size=10, **kw) | |
70 |
|
76 | |||
71 |
c.repo_changesets = Page(c.r |
|
77 | c.repo_changesets = RepoPage(c.rhodecode_repo, page=1, | |
72 |
|
|
78 | items_per_page=10, url=url_generator) | |
73 |
|
||||
74 | e = request.environ |
|
|||
75 |
|
79 | |||
76 | if self.rhodecode_user.username == 'default': |
|
80 | if self.rhodecode_user.username == 'default': | |
77 | password = ':default' |
|
81 | #for default(anonymous) user we don't need to pass credentials | |
|
82 | username = '' | |||
|
83 | password = '' | |||
78 | else: |
|
84 | else: | |
79 | password = '' |
|
85 | username = str(self.rhodecode_user.username) | |
|
86 | password = '@' | |||
80 |
|
87 | |||
81 | uri = u'%(protocol)s://%(user)s%(password)s@%(host)s%(prefix)s/%(repo_name)s' % { |
|
88 | if e.get('wsgi.url_scheme') == 'https': | |
82 | 'protocol': e.get('wsgi.url_scheme'), |
|
89 | split_s = 'https://' | |
83 | 'user':str(c.rhodecode_user.username), |
|
90 | else: | |
84 | 'password':password, |
|
91 | split_s = 'http://' | |
85 | 'host':e.get('HTTP_HOST'), |
|
92 | ||
86 | 'prefix':e.get('SCRIPT_NAME'), |
|
93 | qualified_uri = [split_s] + [url.current(qualified=True)\ | |
87 |
|
|
94 | .split(split_s)[-1]] | |
|
95 | uri = u'%(proto)s%(user)s%(pass)s%(rest)s' \ | |||
|
96 | % {'user': username, | |||
|
97 | 'pass': password, | |||
|
98 | 'proto': qualified_uri[0], | |||
|
99 | 'rest': qualified_uri[1]} | |||
88 | c.clone_repo_url = uri |
|
100 | c.clone_repo_url = uri | |
89 | c.repo_tags = OrderedDict() |
|
101 | c.repo_tags = OrderedDict() | |
90 |
for name, hash in c.r |
|
102 | for name, hash in c.rhodecode_repo.tags.items()[:10]: | |
91 | try: |
|
103 | try: | |
92 |
c.repo_tags[name] = c.r |
|
104 | c.repo_tags[name] = c.rhodecode_repo.get_changeset(hash) | |
93 | except ChangesetError: |
|
105 | except ChangesetError: | |
94 | c.repo_tags[name] = EmptyChangeset(hash) |
|
106 | c.repo_tags[name] = EmptyChangeset(hash) | |
95 |
|
107 | |||
96 | c.repo_branches = OrderedDict() |
|
108 | c.repo_branches = OrderedDict() | |
97 |
for name, hash in c.r |
|
109 | for name, hash in c.rhodecode_repo.branches.items()[:10]: | |
98 | try: |
|
110 | try: | |
99 |
c.repo_branches[name] = c.r |
|
111 | c.repo_branches[name] = c.rhodecode_repo.get_changeset(hash) | |
100 | except ChangesetError: |
|
112 | except ChangesetError: | |
101 | c.repo_branches[name] = EmptyChangeset(hash) |
|
113 | c.repo_branches[name] = EmptyChangeset(hash) | |
102 |
|
114 | |||
@@ -108,34 +120,70 b' class SummaryController(BaseController):' | |||||
108 | ts_min_y = mktime(td_1y.timetuple()) |
|
120 | ts_min_y = mktime(td_1y.timetuple()) | |
109 | ts_max_y = mktime(td.timetuple()) |
|
121 | ts_max_y = mktime(td.timetuple()) | |
110 |
|
122 | |||
111 |
if |
|
123 | if dbrepo.enable_statistics: | |
112 | c.no_data_msg = _('No data loaded yet') |
|
124 | c.no_data_msg = _('No data loaded yet') | |
113 |
run_task(get_commits_stats, c.repo |
|
125 | run_task(get_commits_stats, c.dbrepo.repo_name, ts_min_y, ts_max_y) | |
114 | else: |
|
126 | else: | |
115 |
c.no_data_msg = _('Statistics |
|
127 | c.no_data_msg = _('Statistics are disabled for this repository') | |
116 | c.ts_min = ts_min_m |
|
128 | c.ts_min = ts_min_m | |
117 | c.ts_max = ts_max_y |
|
129 | c.ts_max = ts_max_y | |
118 |
|
130 | |||
119 | stats = self.sa.query(Statistics)\ |
|
131 | stats = self.sa.query(Statistics)\ | |
120 |
.filter(Statistics.repository == |
|
132 | .filter(Statistics.repository == dbrepo)\ | |
121 | .scalar() |
|
133 | .scalar() | |
122 |
|
134 | |||
|
135 | c.stats_percentage = 0 | |||
123 |
|
136 | |||
124 | if stats and stats.languages: |
|
137 | if stats and stats.languages: | |
125 |
c.no_data = False is |
|
138 | c.no_data = False is dbrepo.enable_statistics | |
126 | lang_stats = json.loads(stats.languages) |
|
139 | lang_stats_d = json.loads(stats.languages) | |
127 | c.commit_data = stats.commit_activity |
|
140 | c.commit_data = stats.commit_activity | |
128 | c.overview_data = stats.commit_activity_combined |
|
141 | c.overview_data = stats.commit_activity_combined | |
|
142 | ||||
|
143 | lang_stats = ((x, {"count": y, | |||
|
144 | "desc": LANGUAGES_EXTENSIONS_MAP.get(x)}) | |||
|
145 | for x, y in lang_stats_d.items()) | |||
|
146 | ||||
129 | c.trending_languages = json.dumps(OrderedDict( |
|
147 | c.trending_languages = json.dumps(OrderedDict( | |
130 |
sorted(lang_stats |
|
148 | sorted(lang_stats, reverse=True, | |
131 | key=lambda k: k[1])[:10] |
|
149 | key=lambda k: k[1])[:10] | |
132 | ) |
|
150 | ) | |
133 | ) |
|
151 | ) | |
|
152 | last_rev = stats.stat_on_revision | |||
|
153 | c.repo_last_rev = c.rhodecode_repo.count() - 1 \ | |||
|
154 | if c.rhodecode_repo.revisions else 0 | |||
|
155 | if last_rev == 0 or c.repo_last_rev == 0: | |||
|
156 | pass | |||
|
157 | else: | |||
|
158 | c.stats_percentage = '%.2f' % ((float((last_rev)) / | |||
|
159 | c.repo_last_rev) * 100) | |||
134 | else: |
|
160 | else: | |
135 | c.commit_data = json.dumps({}) |
|
161 | c.commit_data = json.dumps({}) | |
136 |
c.overview_data = json.dumps([[ts_min_y, 0], [ts_max_y, 10] |
|
162 | c.overview_data = json.dumps([[ts_min_y, 0], [ts_max_y, 10]]) | |
137 | c.trending_languages = json.dumps({}) |
|
163 | c.trending_languages = json.dumps({}) | |
138 | c.no_data = True |
|
164 | c.no_data = True | |
|
165 | ||||
|
166 | c.enable_downloads = dbrepo.enable_downloads | |||
|
167 | if c.enable_downloads: | |||
|
168 | c.download_options = self._get_download_links(c.rhodecode_repo) | |||
139 |
|
169 | |||
140 | return render('summary/summary.html') |
|
170 | return render('summary/summary.html') | |
141 |
|
171 | |||
|
172 | def _get_download_links(self, repo): | |||
|
173 | ||||
|
174 | download_l = [] | |||
|
175 | ||||
|
176 | branches_group = ([], _("Branches")) | |||
|
177 | tags_group = ([], _("Tags")) | |||
|
178 | ||||
|
179 | for name, chs in c.rhodecode_repo.branches.items(): | |||
|
180 | #chs = chs.split(':')[-1] | |||
|
181 | branches_group[0].append((chs, name),) | |||
|
182 | download_l.append(branches_group) | |||
|
183 | ||||
|
184 | for name, chs in c.rhodecode_repo.tags.items(): | |||
|
185 | #chs = chs.split(':')[-1] | |||
|
186 | tags_group[0].append((chs, name),) | |||
|
187 | download_l.append(tags_group) | |||
|
188 | ||||
|
189 | return download_l |
@@ -4,10 +4,10 b'' | |||||
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
5 |
|
5 | |||
6 | Tags controller for rhodecode |
|
6 | Tags controller for rhodecode | |
7 |
|
7 | |||
8 | :created_on: Apr 21, 2010 |
|
8 | :created_on: Apr 21, 2010 | |
9 | :author: marcink |
|
9 | :author: marcink | |
10 |
:copyright: (C) 2009-201 |
|
10 | :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | |
11 | :license: GPLv3, see COPYING for more details. |
|
11 | :license: GPLv3, see COPYING for more details. | |
12 | """ |
|
12 | """ | |
13 | # This program is free software: you can redistribute it and/or modify |
|
13 | # This program is free software: you can redistribute it and/or modify | |
@@ -27,13 +27,13 b' import logging' | |||||
27 | from pylons import tmpl_context as c |
|
27 | from pylons import tmpl_context as c | |
28 |
|
28 | |||
29 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator |
|
29 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator | |
30 | from rhodecode.lib.base import BaseController, render |
|
30 | from rhodecode.lib.base import BaseRepoController, render | |
31 |
from rhodecode.lib. |
|
31 | from rhodecode.lib.odict import OrderedDict | |
32 | from rhodecode.model.scm import ScmModel |
|
|||
33 |
|
32 | |||
34 | log = logging.getLogger(__name__) |
|
33 | log = logging.getLogger(__name__) | |
35 |
|
34 | |||
36 | class TagsController(BaseController): |
|
35 | ||
|
36 | class TagsController(BaseRepoController): | |||
37 |
|
37 | |||
38 | @LoginRequired() |
|
38 | @LoginRequired() | |
39 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
|
39 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |
@@ -42,10 +42,12 b' class TagsController(BaseController):' | |||||
42 | super(TagsController, self).__before__() |
|
42 | super(TagsController, self).__before__() | |
43 |
|
43 | |||
44 | def index(self): |
|
44 | def index(self): | |
45 | hg_model = ScmModel() |
|
|||
46 | c.repo_info = hg_model.get_repo(c.repo_name) |
|
|||
47 | c.repo_tags = OrderedDict() |
|
45 | c.repo_tags = OrderedDict() | |
48 | for name, hash_ in c.repo_info.tags.items(): |
|
46 | ||
49 |
|
|
47 | tags = [(name, c.rhodecode_repo.get_changeset(hash_)) for \ | |
|
48 | name, hash_ in c.rhodecode_repo.tags.items()] | |||
|
49 | ordered_tags = sorted(tags, key=lambda x: x[1].date, reverse=True) | |||
|
50 | for name, cs_tag in ordered_tags: | |||
|
51 | c.repo_tags[name] = cs_tag | |||
50 |
|
52 | |||
51 | return render('tags/tags.html') |
|
53 | return render('tags/tags.html') |
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, (2523 lines changed) Show them Hide them | |||||
@@ -7,47 +7,2534 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: 2011-09-14 15:50-0300\n" | |
11 |
"PO-Revision-Date: 201 |
|
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" | |
14 | "Plural-Forms: nplurals=2; plural=(n != 1)\n" |
|
14 | "Plural-Forms: nplurals=2; plural=(n != 1)\n" | |
15 | "MIME-Version: 1.0\n" |
|
15 | "MIME-Version: 1.0\n" | |
16 | "Content-Type: text/plain; charset=utf-8\n" |
|
16 | "Content-Type: text/plain; charset=utf-8\n" | |
17 | "Content-Transfer-Encoding: 8bit\n" |
|
17 | "Content-Transfer-Encoding: 8bit\n" | |
18 |
"Generated-By: Babel 0.9. |
|
18 | "Generated-By: Babel 0.9.6\n" | |
19 |
|
19 | |||
20 |
#: rhodecode/controllers/ |
|
20 | #: rhodecode/controllers/changeset.py:108 | |
|
21 | #: rhodecode/controllers/changeset.py:149 | |||
|
22 | #: rhodecode/controllers/changeset.py:216 | |||
|
23 | #: rhodecode/controllers/changeset.py:229 | |||
|
24 | msgid "binary file" | |||
|
25 | msgstr "" | |||
|
26 | ||||
|
27 | #: rhodecode/controllers/changeset.py:123 | |||
|
28 | #: rhodecode/controllers/changeset.py:168 | |||
|
29 | msgid "Changeset is to big and was cut off, see raw changeset instead" | |||
|
30 | msgstr "" | |||
|
31 | ||||
|
32 | #: rhodecode/controllers/changeset.py:159 | |||
|
33 | msgid "Diff is to big and was cut off, see raw diff instead" | |||
|
34 | msgstr "" | |||
|
35 | ||||
|
36 | #: rhodecode/controllers/error.py:69 | |||
21 | msgid "Home page" |
|
37 | msgid "Home page" | |
22 | msgstr "" |
|
38 | msgstr "" | |
23 |
|
39 | |||
24 |
#: rhodecode/controllers/error.py: |
|
40 | #: rhodecode/controllers/error.py:98 | |
25 | msgid "The request could not be understood by the server due to malformed syntax." |
|
41 | msgid "The request could not be understood by the server due to malformed syntax." | |
26 | msgstr "" |
|
42 | msgstr "" | |
27 |
|
43 | |||
28 |
#: rhodecode/controllers/error.py: |
|
44 | #: rhodecode/controllers/error.py:101 | |
29 | msgid "Unathorized access to resource" |
|
45 | msgid "Unauthorized access to resource" | |
30 | msgstr "" |
|
46 | msgstr "" | |
31 |
|
47 | |||
32 |
#: rhodecode/controllers/error.py: |
|
48 | #: rhodecode/controllers/error.py:103 | |
33 | msgid "You don't have permission to view this page" |
|
49 | msgid "You don't have permission to view this page" | |
34 | msgstr "" |
|
50 | msgstr "" | |
35 |
|
51 | |||
36 |
#: rhodecode/controllers/error.py: |
|
52 | #: rhodecode/controllers/error.py:105 | |
37 | msgid "The resource could not be found" |
|
53 | msgid "The resource could not be found" | |
38 | msgstr "" |
|
54 | msgstr "" | |
39 |
|
55 | |||
40 |
#: rhodecode/controllers/error.py: |
|
56 | #: rhodecode/controllers/error.py:107 | |
41 | msgid "" |
|
57 | msgid "" | |
42 | "The server encountered an unexpected condition which prevented it from " |
|
58 | "The server encountered an unexpected condition which prevented it from " | |
43 | "fulfilling the request." |
|
59 | "fulfilling the request." | |
44 | msgstr "" |
|
60 | msgstr "" | |
45 |
|
61 | |||
46 |
#: rhodecode/ |
|
62 | #: rhodecode/controllers/feed.py:48 | |
|
63 | #, python-format | |||
|
64 | msgid "Changes on %s repository" | |||
|
65 | msgstr "" | |||
|
66 | ||||
|
67 | #: rhodecode/controllers/feed.py:49 | |||
|
68 | #, python-format | |||
|
69 | msgid "%s %s feed" | |||
|
70 | msgstr "" | |||
|
71 | ||||
|
72 | #: rhodecode/controllers/files.py:72 | |||
|
73 | msgid "There are no files yet" | |||
|
74 | msgstr "" | |||
|
75 | ||||
|
76 | #: rhodecode/controllers/files.py:262 | |||
|
77 | #, python-format | |||
|
78 | msgid "Edited %s via RhodeCode" | |||
|
79 | msgstr "" | |||
|
80 | ||||
|
81 | #: rhodecode/controllers/files.py:267 | |||
|
82 | #: rhodecode/templates/files/file_diff.html:40 | |||
|
83 | msgid "No changes" | |||
|
84 | msgstr "" | |||
|
85 | ||||
|
86 | #: rhodecode/controllers/files.py:278 | |||
|
87 | #, python-format | |||
|
88 | msgid "Successfully committed to %s" | |||
|
89 | msgstr "" | |||
|
90 | ||||
|
91 | #: rhodecode/controllers/files.py:283 | |||
|
92 | msgid "Error occurred during commit" | |||
|
93 | msgstr "" | |||
|
94 | ||||
|
95 | #: rhodecode/controllers/files.py:308 | |||
|
96 | msgid "downloads disabled" | |||
|
97 | msgstr "" | |||
|
98 | ||||
|
99 | #: rhodecode/controllers/files.py:313 | |||
|
100 | #, python-format | |||
|
101 | msgid "Unknown revision %s" | |||
|
102 | msgstr "" | |||
|
103 | ||||
|
104 | #: rhodecode/controllers/files.py:315 | |||
|
105 | msgid "Empty repository" | |||
|
106 | msgstr "" | |||
|
107 | ||||
|
108 | #: rhodecode/controllers/files.py:317 | |||
|
109 | msgid "Unknown archive type" | |||
|
110 | msgstr "" | |||
|
111 | ||||
|
112 | #: rhodecode/controllers/files.py:385 rhodecode/controllers/files.py:398 | |||
|
113 | msgid "Binary file" | |||
|
114 | msgstr "" | |||
|
115 | ||||
|
116 | #: rhodecode/controllers/files.py:417 | |||
|
117 | #: rhodecode/templates/changeset/changeset_range.html:4 | |||
|
118 | #: rhodecode/templates/changeset/changeset_range.html:12 | |||
|
119 | #: rhodecode/templates/changeset/changeset_range.html:29 | |||
|
120 | msgid "Changesets" | |||
|
121 | msgstr "" | |||
|
122 | ||||
|
123 | #: rhodecode/controllers/files.py:418 rhodecode/controllers/summary.py:175 | |||
|
124 | #: rhodecode/templates/branches/branches.html:5 | |||
|
125 | #: rhodecode/templates/summary/summary.html:690 | |||
|
126 | msgid "Branches" | |||
|
127 | msgstr "" | |||
|
128 | ||||
|
129 | #: rhodecode/controllers/files.py:419 rhodecode/controllers/summary.py:176 | |||
|
130 | #: rhodecode/templates/summary/summary.html:679 | |||
|
131 | #: rhodecode/templates/tags/tags.html:5 | |||
|
132 | msgid "Tags" | |||
|
133 | msgstr "" | |||
|
134 | ||||
|
135 | #: rhodecode/controllers/journal.py:50 | |||
|
136 | #, python-format | |||
|
137 | msgid "%s public journal %s feed" | |||
|
138 | msgstr "" | |||
|
139 | ||||
|
140 | #: rhodecode/controllers/journal.py:178 rhodecode/controllers/journal.py:212 | |||
|
141 | #: rhodecode/templates/admin/repos/repo_edit.html:171 | |||
|
142 | #: rhodecode/templates/base/base.html:50 | |||
|
143 | msgid "Public journal" | |||
|
144 | msgstr "" | |||
|
145 | ||||
|
146 | #: rhodecode/controllers/login.py:111 | |||
|
147 | msgid "You have successfully registered into rhodecode" | |||
|
148 | msgstr "" | |||
|
149 | ||||
|
150 | #: rhodecode/controllers/login.py:133 | |||
|
151 | msgid "Your password reset link was sent" | |||
|
152 | msgstr "" | |||
|
153 | ||||
|
154 | #: rhodecode/controllers/login.py:155 | |||
|
155 | msgid "" | |||
|
156 | "Your password reset was successful, new password has been sent to your " | |||
|
157 | "email" | |||
|
158 | msgstr "" | |||
|
159 | ||||
|
160 | #: rhodecode/controllers/search.py:109 | |||
|
161 | msgid "Invalid search query. Try quoting it." | |||
|
162 | msgstr "" | |||
|
163 | ||||
|
164 | #: rhodecode/controllers/search.py:114 | |||
|
165 | msgid "There is no index to search in. Please run whoosh indexer" | |||
|
166 | msgstr "" | |||
|
167 | ||||
|
168 | #: rhodecode/controllers/search.py:118 | |||
|
169 | msgid "An error occurred during this search operation" | |||
|
170 | msgstr "" | |||
|
171 | ||||
|
172 | #: rhodecode/controllers/settings.py:61 rhodecode/controllers/settings.py:171 | |||
|
173 | #, python-format | |||
|
174 | msgid "" | |||
|
175 | "%s repository is not mapped to db perhaps it was created or renamed from " | |||
|
176 | "the file system please run the application again in order to rescan " | |||
|
177 | "repositories" | |||
|
178 | msgstr "" | |||
|
179 | ||||
|
180 | #: rhodecode/controllers/settings.py:109 | |||
|
181 | #: rhodecode/controllers/admin/repos.py:239 | |||
|
182 | #, python-format | |||
|
183 | msgid "Repository %s updated successfully" | |||
|
184 | msgstr "" | |||
|
185 | ||||
|
186 | #: rhodecode/controllers/settings.py:126 | |||
|
187 | #: rhodecode/controllers/admin/repos.py:257 | |||
|
188 | #, python-format | |||
|
189 | msgid "error occurred during update of repository %s" | |||
|
190 | msgstr "" | |||
|
191 | ||||
|
192 | #: rhodecode/controllers/settings.py:144 | |||
|
193 | #: rhodecode/controllers/admin/repos.py:275 | |||
|
194 | #, python-format | |||
|
195 | msgid "" | |||
|
196 | "%s repository is not mapped to db perhaps it was moved or renamed from " | |||
|
197 | "the filesystem please run the application again in order to rescan " | |||
|
198 | "repositories" | |||
|
199 | msgstr "" | |||
|
200 | ||||
|
201 | #: rhodecode/controllers/settings.py:156 | |||
|
202 | #: rhodecode/controllers/admin/repos.py:287 | |||
|
203 | #, python-format | |||
|
204 | msgid "deleted repository %s" | |||
|
205 | msgstr "" | |||
|
206 | ||||
|
207 | #: rhodecode/controllers/settings.py:159 | |||
|
208 | #: rhodecode/controllers/admin/repos.py:297 | |||
|
209 | #: rhodecode/controllers/admin/repos.py:303 | |||
|
210 | #, python-format | |||
|
211 | msgid "An error occurred during deletion of %s" | |||
|
212 | msgstr "" | |||
|
213 | ||||
|
214 | #: rhodecode/controllers/settings.py:193 | |||
|
215 | #, python-format | |||
|
216 | msgid "forked %s repository as %s" | |||
|
217 | msgstr "" | |||
|
218 | ||||
|
219 | #: rhodecode/controllers/settings.py:211 | |||
|
220 | #, python-format | |||
|
221 | msgid "An error occurred during repository forking %s" | |||
|
222 | msgstr "" | |||
|
223 | ||||
|
224 | #: rhodecode/controllers/summary.py:123 | |||
|
225 | msgid "No data loaded yet" | |||
|
226 | msgstr "" | |||
|
227 | ||||
|
228 | #: rhodecode/controllers/summary.py:126 | |||
|
229 | msgid "Statistics are disabled for this repository" | |||
|
230 | msgstr "" | |||
|
231 | ||||
|
232 | #: rhodecode/controllers/admin/ldap_settings.py:49 | |||
|
233 | msgid "BASE" | |||
|
234 | msgstr "" | |||
|
235 | ||||
|
236 | #: rhodecode/controllers/admin/ldap_settings.py:50 | |||
|
237 | msgid "ONELEVEL" | |||
|
238 | msgstr "" | |||
|
239 | ||||
|
240 | #: rhodecode/controllers/admin/ldap_settings.py:51 | |||
|
241 | msgid "SUBTREE" | |||
|
242 | msgstr "" | |||
|
243 | ||||
|
244 | #: rhodecode/controllers/admin/ldap_settings.py:55 | |||
|
245 | msgid "NEVER" | |||
|
246 | msgstr "" | |||
|
247 | ||||
|
248 | #: rhodecode/controllers/admin/ldap_settings.py:56 | |||
|
249 | msgid "ALLOW" | |||
|
250 | msgstr "" | |||
|
251 | ||||
|
252 | #: rhodecode/controllers/admin/ldap_settings.py:57 | |||
|
253 | msgid "TRY" | |||
|
254 | msgstr "" | |||
|
255 | ||||
|
256 | #: rhodecode/controllers/admin/ldap_settings.py:58 | |||
|
257 | msgid "DEMAND" | |||
|
258 | msgstr "" | |||
|
259 | ||||
|
260 | #: rhodecode/controllers/admin/ldap_settings.py:59 | |||
|
261 | msgid "HARD" | |||
|
262 | msgstr "" | |||
|
263 | ||||
|
264 | #: rhodecode/controllers/admin/ldap_settings.py:63 | |||
|
265 | msgid "No encryption" | |||
|
266 | msgstr "" | |||
|
267 | ||||
|
268 | #: rhodecode/controllers/admin/ldap_settings.py:64 | |||
|
269 | msgid "LDAPS connection" | |||
|
270 | msgstr "" | |||
|
271 | ||||
|
272 | #: rhodecode/controllers/admin/ldap_settings.py:65 | |||
|
273 | msgid "START_TLS on LDAP connection" | |||
|
274 | msgstr "" | |||
|
275 | ||||
|
276 | #: rhodecode/controllers/admin/ldap_settings.py:115 | |||
|
277 | msgid "Ldap settings updated successfully" | |||
|
278 | msgstr "" | |||
|
279 | ||||
|
280 | #: rhodecode/controllers/admin/ldap_settings.py:120 | |||
|
281 | msgid "Unable to activate ldap. The \"python-ldap\" library is missing." | |||
|
282 | msgstr "" | |||
|
283 | ||||
|
284 | #: rhodecode/controllers/admin/ldap_settings.py:134 | |||
|
285 | msgid "error occurred during update of ldap settings" | |||
|
286 | msgstr "" | |||
|
287 | ||||
|
288 | #: rhodecode/controllers/admin/permissions.py:56 | |||
|
289 | msgid "None" | |||
|
290 | msgstr "" | |||
|
291 | ||||
|
292 | #: rhodecode/controllers/admin/permissions.py:57 | |||
|
293 | msgid "Read" | |||
|
294 | msgstr "" | |||
|
295 | ||||
|
296 | #: rhodecode/controllers/admin/permissions.py:58 | |||
|
297 | msgid "Write" | |||
|
298 | msgstr "" | |||
|
299 | ||||
|
300 | #: rhodecode/controllers/admin/permissions.py:59 | |||
|
301 | #: rhodecode/templates/admin/ldap/ldap.html:9 | |||
|
302 | #: rhodecode/templates/admin/permissions/permissions.html:9 | |||
|
303 | #: rhodecode/templates/admin/repos/repo_add.html:9 | |||
|
304 | #: rhodecode/templates/admin/repos/repo_edit.html:9 | |||
|
305 | #: rhodecode/templates/admin/repos/repos.html:10 | |||
|
306 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:8 | |||
|
307 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:8 | |||
|
308 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10 | |||
|
309 | #: rhodecode/templates/admin/settings/hooks.html:9 | |||
|
310 | #: rhodecode/templates/admin/settings/settings.html:9 | |||
|
311 | #: rhodecode/templates/admin/users/user_add.html:8 | |||
|
312 | #: rhodecode/templates/admin/users/user_edit.html:9 | |||
|
313 | #: rhodecode/templates/admin/users/user_edit.html:110 | |||
|
314 | #: rhodecode/templates/admin/users/users.html:9 | |||
|
315 | #: rhodecode/templates/admin/users_groups/users_group_add.html:8 | |||
|
316 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:9 | |||
|
317 | #: rhodecode/templates/admin/users_groups/users_groups.html:9 | |||
|
318 | #: rhodecode/templates/base/base.html:279 | |||
|
319 | #: rhodecode/templates/base/base.html:366 | |||
|
320 | #: rhodecode/templates/base/base.html:368 | |||
|
321 | #: rhodecode/templates/base/base.html:370 | |||
|
322 | msgid "Admin" | |||
|
323 | msgstr "" | |||
|
324 | ||||
|
325 | #: rhodecode/controllers/admin/permissions.py:62 | |||
|
326 | msgid "disabled" | |||
|
327 | msgstr "" | |||
|
328 | ||||
|
329 | #: rhodecode/controllers/admin/permissions.py:64 | |||
|
330 | msgid "allowed with manual account activation" | |||
|
331 | msgstr "" | |||
|
332 | ||||
|
333 | #: rhodecode/controllers/admin/permissions.py:66 | |||
|
334 | msgid "allowed with automatic account activation" | |||
|
335 | msgstr "" | |||
|
336 | ||||
|
337 | #: rhodecode/controllers/admin/permissions.py:68 | |||
|
338 | msgid "Disabled" | |||
|
339 | msgstr "" | |||
|
340 | ||||
|
341 | #: rhodecode/controllers/admin/permissions.py:69 | |||
|
342 | msgid "Enabled" | |||
|
343 | msgstr "" | |||
|
344 | ||||
|
345 | #: rhodecode/controllers/admin/permissions.py:102 | |||
|
346 | msgid "Default permissions updated successfully" | |||
|
347 | msgstr "" | |||
|
348 | ||||
|
349 | #: rhodecode/controllers/admin/permissions.py:119 | |||
|
350 | msgid "error occurred during update of permissions" | |||
|
351 | msgstr "" | |||
|
352 | ||||
|
353 | #: rhodecode/controllers/admin/repos.py:96 | |||
|
354 | #, python-format | |||
|
355 | msgid "" | |||
|
356 | "%s repository is not mapped to db perhaps it was created or renamed from " | |||
|
357 | "the filesystem please run the application again in order to rescan " | |||
|
358 | "repositories" | |||
|
359 | msgstr "" | |||
|
360 | ||||
|
361 | #: rhodecode/controllers/admin/repos.py:172 | |||
|
362 | #, python-format | |||
|
363 | msgid "created repository %s from %s" | |||
|
364 | msgstr "" | |||
|
365 | ||||
|
366 | #: rhodecode/controllers/admin/repos.py:176 | |||
|
367 | #, python-format | |||
|
368 | msgid "created repository %s" | |||
|
369 | msgstr "" | |||
|
370 | ||||
|
371 | #: rhodecode/controllers/admin/repos.py:205 | |||
|
372 | #, python-format | |||
|
373 | msgid "error occurred during creation of repository %s" | |||
|
374 | msgstr "" | |||
|
375 | ||||
|
376 | #: rhodecode/controllers/admin/repos.py:292 | |||
|
377 | #, python-format | |||
|
378 | msgid "Cannot delete %s it still contains attached forks" | |||
|
379 | msgstr "" | |||
|
380 | ||||
|
381 | #: rhodecode/controllers/admin/repos.py:320 | |||
|
382 | msgid "An error occurred during deletion of repository user" | |||
|
383 | msgstr "" | |||
|
384 | ||||
|
385 | #: rhodecode/controllers/admin/repos.py:335 | |||
|
386 | msgid "An error occurred during deletion of repository users groups" | |||
|
387 | msgstr "" | |||
|
388 | ||||
|
389 | #: rhodecode/controllers/admin/repos.py:352 | |||
|
390 | msgid "An error occurred during deletion of repository stats" | |||
|
391 | msgstr "" | |||
|
392 | ||||
|
393 | #: rhodecode/controllers/admin/repos.py:367 | |||
|
394 | msgid "An error occurred during cache invalidation" | |||
|
395 | msgstr "" | |||
|
396 | ||||
|
397 | #: rhodecode/controllers/admin/repos.py:387 | |||
|
398 | msgid "Updated repository visibility in public journal" | |||
|
399 | msgstr "" | |||
|
400 | ||||
|
401 | #: rhodecode/controllers/admin/repos.py:390 | |||
|
402 | msgid "An error occurred during setting this repository in public journal" | |||
|
403 | msgstr "" | |||
|
404 | ||||
|
405 | #: rhodecode/controllers/admin/repos.py:395 rhodecode/model/forms.py:53 | |||
47 | msgid "Token mismatch" |
|
406 | msgid "Token mismatch" | |
48 | msgstr "" |
|
407 | msgstr "" | |
49 |
|
408 | |||
50 | #: rhodecode/model/forms.py:52 |
|
409 | #: rhodecode/controllers/admin/repos.py:408 | |
51 | msgid "Account number is invalid, it must be 26 digits" |
|
410 | msgid "Pulled from remote location" | |
52 | msgstr "" |
|
411 | msgstr "" | |
53 |
|
412 | |||
|
413 | #: rhodecode/controllers/admin/repos.py:410 | |||
|
414 | msgid "An error occurred during pull from remote location" | |||
|
415 | msgstr "" | |||
|
416 | ||||
|
417 | #: rhodecode/controllers/admin/repos_groups.py:83 | |||
|
418 | #, python-format | |||
|
419 | msgid "created repos group %s" | |||
|
420 | msgstr "" | |||
|
421 | ||||
|
422 | #: rhodecode/controllers/admin/repos_groups.py:96 | |||
|
423 | #, python-format | |||
|
424 | msgid "error occurred during creation of repos group %s" | |||
|
425 | msgstr "" | |||
|
426 | ||||
|
427 | #: rhodecode/controllers/admin/repos_groups.py:130 | |||
|
428 | #, python-format | |||
|
429 | msgid "updated repos group %s" | |||
|
430 | msgstr "" | |||
|
431 | ||||
|
432 | #: rhodecode/controllers/admin/repos_groups.py:143 | |||
|
433 | #, python-format | |||
|
434 | msgid "error occurred during update of repos group %s" | |||
|
435 | msgstr "" | |||
|
436 | ||||
|
437 | #: rhodecode/controllers/admin/repos_groups.py:164 | |||
|
438 | #, python-format | |||
|
439 | msgid "This group contains %s repositores and cannot be deleted" | |||
|
440 | msgstr "" | |||
|
441 | ||||
|
442 | #: rhodecode/controllers/admin/repos_groups.py:171 | |||
|
443 | #, python-format | |||
|
444 | msgid "removed repos group %s" | |||
|
445 | msgstr "" | |||
|
446 | ||||
|
447 | #: rhodecode/controllers/admin/repos_groups.py:175 | |||
|
448 | #, python-format | |||
|
449 | msgid "error occurred during deletion of repos group %s" | |||
|
450 | msgstr "" | |||
|
451 | ||||
|
452 | #: rhodecode/controllers/admin/settings.py:109 | |||
|
453 | #, python-format | |||
|
454 | msgid "Repositories successfully rescanned added: %s,removed: %s" | |||
|
455 | msgstr "" | |||
|
456 | ||||
|
457 | #: rhodecode/controllers/admin/settings.py:118 | |||
|
458 | msgid "Whoosh reindex task scheduled" | |||
|
459 | msgstr "" | |||
|
460 | ||||
|
461 | #: rhodecode/controllers/admin/settings.py:143 | |||
|
462 | msgid "Updated application settings" | |||
|
463 | msgstr "" | |||
|
464 | ||||
|
465 | #: rhodecode/controllers/admin/settings.py:148 | |||
|
466 | #: rhodecode/controllers/admin/settings.py:215 | |||
|
467 | msgid "error occurred during updating application settings" | |||
|
468 | msgstr "" | |||
|
469 | ||||
|
470 | #: rhodecode/controllers/admin/settings.py:210 | |||
|
471 | msgid "Updated mercurial settings" | |||
|
472 | msgstr "" | |||
|
473 | ||||
|
474 | #: rhodecode/controllers/admin/settings.py:236 | |||
|
475 | msgid "Added new hook" | |||
|
476 | msgstr "" | |||
|
477 | ||||
|
478 | #: rhodecode/controllers/admin/settings.py:247 | |||
|
479 | msgid "Updated hooks" | |||
|
480 | msgstr "" | |||
|
481 | ||||
|
482 | #: rhodecode/controllers/admin/settings.py:251 | |||
|
483 | msgid "error occurred during hook creation" | |||
|
484 | msgstr "" | |||
|
485 | ||||
|
486 | #: rhodecode/controllers/admin/settings.py:310 | |||
|
487 | msgid "You can't edit this user since it's crucial for entire application" | |||
|
488 | msgstr "" | |||
|
489 | ||||
|
490 | #: rhodecode/controllers/admin/settings.py:339 | |||
|
491 | msgid "Your account was updated successfully" | |||
|
492 | msgstr "" | |||
|
493 | ||||
|
494 | #: rhodecode/controllers/admin/settings.py:359 | |||
|
495 | #: rhodecode/controllers/admin/users.py:130 | |||
|
496 | #, python-format | |||
|
497 | msgid "error occurred during update of user %s" | |||
|
498 | msgstr "" | |||
|
499 | ||||
|
500 | #: rhodecode/controllers/admin/users.py:78 | |||
|
501 | #, python-format | |||
|
502 | msgid "created user %s" | |||
|
503 | msgstr "" | |||
|
504 | ||||
|
505 | #: rhodecode/controllers/admin/users.py:90 | |||
|
506 | #, python-format | |||
|
507 | msgid "error occurred during creation of user %s" | |||
|
508 | msgstr "" | |||
|
509 | ||||
|
510 | #: rhodecode/controllers/admin/users.py:116 | |||
|
511 | msgid "User updated successfully" | |||
|
512 | msgstr "" | |||
|
513 | ||||
|
514 | #: rhodecode/controllers/admin/users.py:146 | |||
|
515 | msgid "successfully deleted user" | |||
|
516 | msgstr "" | |||
|
517 | ||||
|
518 | #: rhodecode/controllers/admin/users.py:150 | |||
|
519 | msgid "An error occurred during deletion of user" | |||
|
520 | msgstr "" | |||
|
521 | ||||
|
522 | #: rhodecode/controllers/admin/users.py:166 | |||
|
523 | msgid "You can't edit this user" | |||
|
524 | msgstr "" | |||
|
525 | ||||
|
526 | #: rhodecode/controllers/admin/users.py:195 | |||
|
527 | #: rhodecode/controllers/admin/users_groups.py:202 | |||
|
528 | msgid "Granted 'repository create' permission to user" | |||
|
529 | msgstr "" | |||
|
530 | ||||
|
531 | #: rhodecode/controllers/admin/users.py:204 | |||
|
532 | #: rhodecode/controllers/admin/users_groups.py:211 | |||
|
533 | msgid "Revoked 'repository create' permission to user" | |||
|
534 | msgstr "" | |||
|
535 | ||||
|
536 | #: rhodecode/controllers/admin/users_groups.py:74 | |||
|
537 | #, python-format | |||
|
538 | msgid "created users group %s" | |||
|
539 | msgstr "" | |||
|
540 | ||||
|
541 | #: rhodecode/controllers/admin/users_groups.py:86 | |||
|
542 | #, python-format | |||
|
543 | msgid "error occurred during creation of users group %s" | |||
|
544 | msgstr "" | |||
|
545 | ||||
|
546 | #: rhodecode/controllers/admin/users_groups.py:119 | |||
|
547 | #, python-format | |||
|
548 | msgid "updated users group %s" | |||
|
549 | msgstr "" | |||
|
550 | ||||
|
551 | #: rhodecode/controllers/admin/users_groups.py:138 | |||
|
552 | #, python-format | |||
|
553 | msgid "error occurred during update of users group %s" | |||
|
554 | msgstr "" | |||
|
555 | ||||
|
556 | #: rhodecode/controllers/admin/users_groups.py:154 | |||
|
557 | msgid "successfully deleted users group" | |||
|
558 | msgstr "" | |||
|
559 | ||||
|
560 | #: rhodecode/controllers/admin/users_groups.py:158 | |||
|
561 | msgid "An error occurred during deletion of users group" | |||
|
562 | msgstr "" | |||
|
563 | ||||
|
564 | #: rhodecode/lib/__init__.py:279 | |||
|
565 | msgid "year" | |||
|
566 | msgstr "" | |||
|
567 | ||||
|
568 | #: rhodecode/lib/__init__.py:280 | |||
|
569 | msgid "month" | |||
|
570 | msgstr "" | |||
|
571 | ||||
|
572 | #: rhodecode/lib/__init__.py:281 | |||
|
573 | msgid "day" | |||
|
574 | msgstr "" | |||
|
575 | ||||
|
576 | #: rhodecode/lib/__init__.py:282 | |||
|
577 | msgid "hour" | |||
|
578 | msgstr "" | |||
|
579 | ||||
|
580 | #: rhodecode/lib/__init__.py:283 | |||
|
581 | msgid "minute" | |||
|
582 | msgstr "" | |||
|
583 | ||||
|
584 | #: rhodecode/lib/__init__.py:284 | |||
|
585 | msgid "second" | |||
|
586 | msgstr "" | |||
|
587 | ||||
|
588 | #: rhodecode/lib/__init__.py:293 | |||
|
589 | msgid "ago" | |||
|
590 | msgstr "" | |||
|
591 | ||||
|
592 | #: rhodecode/lib/__init__.py:296 | |||
|
593 | msgid "just now" | |||
|
594 | msgstr "" | |||
|
595 | ||||
|
596 | #: rhodecode/lib/auth.py:377 | |||
|
597 | msgid "You need to be a registered user to perform this action" | |||
|
598 | msgstr "" | |||
|
599 | ||||
|
600 | #: rhodecode/lib/auth.py:421 | |||
|
601 | msgid "You need to be a signed in to view this page" | |||
|
602 | msgstr "" | |||
|
603 | ||||
|
604 | #: rhodecode/lib/helpers.py:307 | |||
|
605 | msgid "True" | |||
|
606 | msgstr "" | |||
|
607 | ||||
|
608 | #: rhodecode/lib/helpers.py:311 | |||
|
609 | msgid "False" | |||
|
610 | msgstr "" | |||
|
611 | ||||
|
612 | #: rhodecode/lib/helpers.py:352 | |||
|
613 | #, python-format | |||
|
614 | msgid "Show all combined changesets %s->%s" | |||
|
615 | msgstr "" | |||
|
616 | ||||
|
617 | #: rhodecode/lib/helpers.py:356 | |||
|
618 | msgid "compare view" | |||
|
619 | msgstr "" | |||
|
620 | ||||
|
621 | #: rhodecode/lib/helpers.py:365 | |||
|
622 | msgid "and" | |||
|
623 | msgstr "" | |||
|
624 | ||||
|
625 | #: rhodecode/lib/helpers.py:365 | |||
|
626 | #, python-format | |||
|
627 | msgid "%s more" | |||
|
628 | msgstr "" | |||
|
629 | ||||
|
630 | #: rhodecode/lib/helpers.py:367 rhodecode/templates/changelog/changelog.html:14 | |||
|
631 | #: rhodecode/templates/changelog/changelog.html:39 | |||
|
632 | msgid "revisions" | |||
|
633 | msgstr "" | |||
|
634 | ||||
|
635 | #: rhodecode/lib/helpers.py:385 | |||
|
636 | msgid "fork name " | |||
|
637 | msgstr "" | |||
|
638 | ||||
|
639 | #: rhodecode/lib/helpers.py:388 | |||
|
640 | msgid "[deleted] repository" | |||
|
641 | msgstr "" | |||
|
642 | ||||
|
643 | #: rhodecode/lib/helpers.py:389 rhodecode/lib/helpers.py:393 | |||
|
644 | msgid "[created] repository" | |||
|
645 | msgstr "" | |||
|
646 | ||||
|
647 | #: rhodecode/lib/helpers.py:390 rhodecode/lib/helpers.py:394 | |||
|
648 | msgid "[forked] repository" | |||
|
649 | msgstr "" | |||
|
650 | ||||
|
651 | #: rhodecode/lib/helpers.py:391 rhodecode/lib/helpers.py:395 | |||
|
652 | msgid "[updated] repository" | |||
|
653 | msgstr "" | |||
|
654 | ||||
|
655 | #: rhodecode/lib/helpers.py:392 | |||
|
656 | msgid "[delete] repository" | |||
|
657 | msgstr "" | |||
|
658 | ||||
|
659 | #: rhodecode/lib/helpers.py:396 | |||
|
660 | msgid "[pushed] into" | |||
|
661 | msgstr "" | |||
|
662 | ||||
|
663 | #: rhodecode/lib/helpers.py:397 | |||
|
664 | msgid "[committed via RhodeCode] into" | |||
|
665 | msgstr "" | |||
|
666 | ||||
|
667 | #: rhodecode/lib/helpers.py:398 | |||
|
668 | msgid "[pulled from remote] into" | |||
|
669 | msgstr "" | |||
|
670 | ||||
|
671 | #: rhodecode/lib/helpers.py:399 | |||
|
672 | msgid "[pulled] from" | |||
|
673 | msgstr "" | |||
|
674 | ||||
|
675 | #: rhodecode/lib/helpers.py:400 | |||
|
676 | msgid "[started following] repository" | |||
|
677 | msgstr "" | |||
|
678 | ||||
|
679 | #: rhodecode/lib/helpers.py:401 | |||
|
680 | msgid "[stopped following] repository" | |||
|
681 | msgstr "" | |||
|
682 | ||||
|
683 | #: rhodecode/lib/helpers.py:577 | |||
|
684 | #, python-format | |||
|
685 | msgid " and %s more" | |||
|
686 | msgstr "" | |||
|
687 | ||||
|
688 | #: rhodecode/lib/helpers.py:581 | |||
|
689 | msgid "No Files" | |||
|
690 | msgstr "" | |||
|
691 | ||||
|
692 | #: rhodecode/model/forms.py:66 | |||
|
693 | msgid "Invalid username" | |||
|
694 | msgstr "" | |||
|
695 | ||||
|
696 | #: rhodecode/model/forms.py:75 | |||
|
697 | msgid "This username already exists" | |||
|
698 | msgstr "" | |||
|
699 | ||||
|
700 | #: rhodecode/model/forms.py:79 | |||
|
701 | msgid "" | |||
|
702 | "Username may only contain alphanumeric characters underscores, periods or" | |||
|
703 | " dashes and must begin with alphanumeric character" | |||
|
704 | msgstr "" | |||
|
705 | ||||
|
706 | #: rhodecode/model/forms.py:94 | |||
|
707 | msgid "Invalid group name" | |||
|
708 | msgstr "" | |||
|
709 | ||||
|
710 | #: rhodecode/model/forms.py:104 | |||
|
711 | msgid "This users group already exists" | |||
|
712 | msgstr "" | |||
|
713 | ||||
|
714 | #: rhodecode/model/forms.py:110 | |||
|
715 | msgid "" | |||
|
716 | "Group name may only contain alphanumeric characters underscores, periods " | |||
|
717 | "or dashes and must begin with alphanumeric character" | |||
|
718 | msgstr "" | |||
|
719 | ||||
|
720 | #: rhodecode/model/forms.py:132 | |||
|
721 | msgid "Cannot assign this group as parent" | |||
|
722 | msgstr "" | |||
|
723 | ||||
|
724 | #: rhodecode/model/forms.py:148 | |||
|
725 | msgid "This group already exists" | |||
|
726 | msgstr "" | |||
|
727 | ||||
|
728 | #: rhodecode/model/forms.py:164 rhodecode/model/forms.py:172 | |||
|
729 | #: rhodecode/model/forms.py:180 | |||
|
730 | msgid "Invalid characters in password" | |||
|
731 | msgstr "" | |||
|
732 | ||||
|
733 | #: rhodecode/model/forms.py:191 | |||
|
734 | msgid "Passwords do not match" | |||
|
735 | msgstr "" | |||
|
736 | ||||
|
737 | #: rhodecode/model/forms.py:196 | |||
|
738 | msgid "invalid password" | |||
|
739 | msgstr "" | |||
|
740 | ||||
|
741 | #: rhodecode/model/forms.py:197 | |||
|
742 | msgid "invalid user name" | |||
|
743 | msgstr "" | |||
|
744 | ||||
|
745 | #: rhodecode/model/forms.py:198 | |||
|
746 | msgid "Your account is disabled" | |||
|
747 | msgstr "" | |||
|
748 | ||||
|
749 | #: rhodecode/model/forms.py:233 | |||
|
750 | msgid "This username is not valid" | |||
|
751 | msgstr "" | |||
|
752 | ||||
|
753 | #: rhodecode/model/forms.py:245 | |||
|
754 | msgid "This repository name is disallowed" | |||
|
755 | msgstr "" | |||
|
756 | ||||
|
757 | #: rhodecode/model/forms.py:266 | |||
|
758 | #, python-format | |||
|
759 | msgid "This repository already exists in group \"%s\"" | |||
|
760 | msgstr "" | |||
|
761 | ||||
|
762 | #: rhodecode/model/forms.py:274 | |||
|
763 | msgid "This repository already exists" | |||
|
764 | msgstr "" | |||
|
765 | ||||
|
766 | #: rhodecode/model/forms.py:312 rhodecode/model/forms.py:319 | |||
|
767 | msgid "invalid clone url" | |||
|
768 | msgstr "" | |||
|
769 | ||||
|
770 | #: rhodecode/model/forms.py:322 | |||
|
771 | msgid "Invalid clone url, provide a valid clone http\\s url" | |||
|
772 | msgstr "" | |||
|
773 | ||||
|
774 | #: rhodecode/model/forms.py:334 | |||
|
775 | msgid "Fork have to be the same type as original" | |||
|
776 | msgstr "" | |||
|
777 | ||||
|
778 | #: rhodecode/model/forms.py:341 | |||
|
779 | msgid "This username or users group name is not valid" | |||
|
780 | msgstr "" | |||
|
781 | ||||
|
782 | #: rhodecode/model/forms.py:403 | |||
|
783 | msgid "This is not a valid path" | |||
|
784 | msgstr "" | |||
|
785 | ||||
|
786 | #: rhodecode/model/forms.py:416 | |||
|
787 | msgid "This e-mail address is already taken" | |||
|
788 | msgstr "" | |||
|
789 | ||||
|
790 | #: rhodecode/model/forms.py:427 | |||
|
791 | msgid "This e-mail address doesn't exist." | |||
|
792 | msgstr "" | |||
|
793 | ||||
|
794 | #: rhodecode/model/forms.py:447 | |||
|
795 | msgid "" | |||
|
796 | "The LDAP Login attribute of the CN must be specified - this is the name " | |||
|
797 | "of the attribute that is equivalent to 'username'" | |||
|
798 | msgstr "" | |||
|
799 | ||||
|
800 | #: rhodecode/model/forms.py:466 | |||
|
801 | msgid "Please enter a login" | |||
|
802 | msgstr "" | |||
|
803 | ||||
|
804 | #: rhodecode/model/forms.py:467 | |||
|
805 | #, python-format | |||
|
806 | msgid "Enter a value %(min)i characters long or more" | |||
|
807 | msgstr "" | |||
|
808 | ||||
|
809 | #: rhodecode/model/forms.py:475 | |||
|
810 | msgid "Please enter a password" | |||
|
811 | msgstr "" | |||
|
812 | ||||
|
813 | #: rhodecode/model/forms.py:476 | |||
|
814 | #, python-format | |||
|
815 | msgid "Enter %(min)i characters or more" | |||
|
816 | msgstr "" | |||
|
817 | ||||
|
818 | #: rhodecode/model/user.py:145 | |||
|
819 | msgid "[RhodeCode] New User registration" | |||
|
820 | msgstr "" | |||
|
821 | ||||
|
822 | #: rhodecode/model/user.py:157 rhodecode/model/user.py:179 | |||
|
823 | msgid "You can't Edit this user since it's crucial for entire application" | |||
|
824 | msgstr "" | |||
|
825 | ||||
|
826 | #: rhodecode/model/user.py:201 | |||
|
827 | msgid "You can't remove this user since it's crucial for entire application" | |||
|
828 | msgstr "" | |||
|
829 | ||||
|
830 | #: rhodecode/model/user.py:204 | |||
|
831 | #, python-format | |||
|
832 | msgid "" | |||
|
833 | "This user still owns %s repositories and cannot be removed. Switch owners" | |||
|
834 | " or remove those repositories" | |||
|
835 | msgstr "" | |||
|
836 | ||||
|
837 | #: rhodecode/templates/index.html:4 | |||
|
838 | msgid "Dashboard" | |||
|
839 | msgstr "" | |||
|
840 | ||||
|
841 | #: rhodecode/templates/index_base.html:22 | |||
|
842 | #: rhodecode/templates/admin/users/user_edit_my_account.html:102 | |||
|
843 | msgid "quick filter..." | |||
|
844 | msgstr "" | |||
|
845 | ||||
|
846 | #: rhodecode/templates/index_base.html:23 | |||
|
847 | #: rhodecode/templates/base/base.html:300 | |||
|
848 | msgid "repositories" | |||
|
849 | msgstr "" | |||
|
850 | ||||
|
851 | #: rhodecode/templates/index_base.html:29 | |||
|
852 | #: rhodecode/templates/admin/repos/repos.html:22 | |||
|
853 | msgid "ADD NEW REPOSITORY" | |||
|
854 | msgstr "" | |||
|
855 | ||||
|
856 | #: rhodecode/templates/index_base.html:41 | |||
|
857 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32 | |||
|
858 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32 | |||
|
859 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33 | |||
|
860 | #: rhodecode/templates/admin/users_groups/users_group_add.html:32 | |||
|
861 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:33 | |||
|
862 | msgid "Group name" | |||
|
863 | msgstr "" | |||
|
864 | ||||
|
865 | #: rhodecode/templates/index_base.html:42 | |||
|
866 | #: rhodecode/templates/index_base.html:73 | |||
|
867 | #: rhodecode/templates/admin/repos/repo_add_base.html:44 | |||
|
868 | #: rhodecode/templates/admin/repos/repo_edit.html:64 | |||
|
869 | #: rhodecode/templates/admin/repos/repos.html:31 | |||
|
870 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41 | |||
|
871 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41 | |||
|
872 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34 | |||
|
873 | #: rhodecode/templates/settings/repo_fork.html:40 | |||
|
874 | #: rhodecode/templates/settings/repo_settings.html:40 | |||
|
875 | #: rhodecode/templates/summary/summary.html:92 | |||
|
876 | msgid "Description" | |||
|
877 | msgstr "" | |||
|
878 | ||||
|
879 | #: rhodecode/templates/index_base.html:53 | |||
|
880 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 | |||
|
881 | msgid "Repositories group" | |||
|
882 | msgstr "" | |||
|
883 | ||||
|
884 | #: rhodecode/templates/index_base.html:72 | |||
|
885 | #: rhodecode/templates/admin/repos/repo_add_base.html:9 | |||
|
886 | #: rhodecode/templates/admin/repos/repo_edit.html:32 | |||
|
887 | #: rhodecode/templates/admin/repos/repos.html:30 | |||
|
888 | #: rhodecode/templates/admin/users/user_edit_my_account.html:117 | |||
|
889 | #: rhodecode/templates/files/files_browser.html:157 | |||
|
890 | #: rhodecode/templates/settings/repo_settings.html:31 | |||
|
891 | #: rhodecode/templates/summary/summary.html:31 | |||
|
892 | #: rhodecode/templates/summary/summary.html:107 | |||
|
893 | msgid "Name" | |||
|
894 | msgstr "" | |||
|
895 | ||||
|
896 | #: rhodecode/templates/index_base.html:74 | |||
|
897 | #: rhodecode/templates/admin/repos/repos.html:32 | |||
|
898 | #: rhodecode/templates/summary/summary.html:114 | |||
|
899 | msgid "Last change" | |||
|
900 | msgstr "" | |||
|
901 | ||||
|
902 | #: rhodecode/templates/index_base.html:75 | |||
|
903 | #: rhodecode/templates/admin/repos/repos.html:33 | |||
|
904 | msgid "Tip" | |||
|
905 | msgstr "" | |||
|
906 | ||||
|
907 | #: rhodecode/templates/index_base.html:76 | |||
|
908 | #: rhodecode/templates/admin/repos/repo_edit.html:97 | |||
|
909 | msgid "Owner" | |||
|
910 | msgstr "" | |||
|
911 | ||||
|
912 | #: rhodecode/templates/index_base.html:77 | |||
|
913 | #: rhodecode/templates/journal/public_journal.html:20 | |||
|
914 | #: rhodecode/templates/summary/summary.html:180 | |||
|
915 | #: rhodecode/templates/summary/summary.html:183 | |||
|
916 | msgid "RSS" | |||
|
917 | msgstr "" | |||
|
918 | ||||
|
919 | #: rhodecode/templates/index_base.html:78 | |||
|
920 | #: rhodecode/templates/journal/public_journal.html:23 | |||
|
921 | #: rhodecode/templates/summary/summary.html:181 | |||
|
922 | #: rhodecode/templates/summary/summary.html:184 | |||
|
923 | msgid "Atom" | |||
|
924 | msgstr "" | |||
|
925 | ||||
|
926 | #: rhodecode/templates/index_base.html:87 | |||
|
927 | #: rhodecode/templates/index_base.html:89 | |||
|
928 | #: rhodecode/templates/index_base.html:91 | |||
|
929 | #: rhodecode/templates/base/base.html:209 | |||
|
930 | #: rhodecode/templates/base/base.html:211 | |||
|
931 | #: rhodecode/templates/base/base.html:213 | |||
|
932 | #: rhodecode/templates/summary/summary.html:4 | |||
|
933 | msgid "Summary" | |||
|
934 | msgstr "" | |||
|
935 | ||||
|
936 | #: rhodecode/templates/index_base.html:95 | |||
|
937 | #: rhodecode/templates/index_base.html:97 | |||
|
938 | #: rhodecode/templates/index_base.html:99 | |||
|
939 | #: rhodecode/templates/base/base.html:225 | |||
|
940 | #: rhodecode/templates/base/base.html:227 | |||
|
941 | #: rhodecode/templates/base/base.html:229 | |||
|
942 | #: rhodecode/templates/changelog/changelog.html:6 | |||
|
943 | #: rhodecode/templates/changelog/changelog.html:14 | |||
|
944 | msgid "Changelog" | |||
|
945 | msgstr "" | |||
|
946 | ||||
|
947 | #: rhodecode/templates/index_base.html:103 | |||
|
948 | #: rhodecode/templates/index_base.html:105 | |||
|
949 | #: rhodecode/templates/index_base.html:107 | |||
|
950 | #: rhodecode/templates/base/base.html:268 | |||
|
951 | #: rhodecode/templates/base/base.html:270 | |||
|
952 | #: rhodecode/templates/base/base.html:272 | |||
|
953 | #: rhodecode/templates/files/files.html:4 | |||
|
954 | msgid "Files" | |||
|
955 | msgstr "" | |||
|
956 | ||||
|
957 | #: rhodecode/templates/index_base.html:116 | |||
|
958 | #: rhodecode/templates/admin/repos/repos.html:42 | |||
|
959 | #: rhodecode/templates/admin/users/user_edit_my_account.html:127 | |||
|
960 | #: rhodecode/templates/summary/summary.html:48 | |||
|
961 | msgid "Mercurial repository" | |||
|
962 | msgstr "" | |||
|
963 | ||||
|
964 | #: rhodecode/templates/index_base.html:118 | |||
|
965 | #: rhodecode/templates/admin/repos/repos.html:44 | |||
|
966 | #: rhodecode/templates/admin/users/user_edit_my_account.html:129 | |||
|
967 | #: rhodecode/templates/summary/summary.html:51 | |||
|
968 | msgid "Git repository" | |||
|
969 | msgstr "" | |||
|
970 | ||||
|
971 | #: rhodecode/templates/index_base.html:123 | |||
|
972 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 | |||
|
973 | #: rhodecode/templates/journal/journal.html:53 | |||
|
974 | #: rhodecode/templates/summary/summary.html:56 | |||
|
975 | msgid "private repository" | |||
|
976 | msgstr "" | |||
|
977 | ||||
|
978 | #: rhodecode/templates/index_base.html:125 | |||
|
979 | #: rhodecode/templates/journal/journal.html:55 | |||
|
980 | #: rhodecode/templates/summary/summary.html:58 | |||
|
981 | msgid "public repository" | |||
|
982 | msgstr "" | |||
|
983 | ||||
|
984 | #: rhodecode/templates/index_base.html:133 | |||
|
985 | #: rhodecode/templates/base/base.html:291 | |||
|
986 | #: rhodecode/templates/settings/repo_fork.html:13 | |||
|
987 | msgid "fork" | |||
|
988 | msgstr "" | |||
|
989 | ||||
|
990 | #: rhodecode/templates/index_base.html:134 | |||
|
991 | #: rhodecode/templates/admin/repos/repos.html:60 | |||
|
992 | #: rhodecode/templates/admin/users/user_edit_my_account.html:143 | |||
|
993 | #: rhodecode/templates/summary/summary.html:69 | |||
|
994 | #: rhodecode/templates/summary/summary.html:71 | |||
|
995 | msgid "Fork of" | |||
|
996 | msgstr "" | |||
|
997 | ||||
|
998 | #: rhodecode/templates/index_base.html:155 | |||
|
999 | #: rhodecode/templates/admin/repos/repos.html:73 | |||
|
1000 | msgid "No changesets yet" | |||
|
1001 | msgstr "" | |||
|
1002 | ||||
|
1003 | #: rhodecode/templates/index_base.html:161 | |||
|
1004 | #: rhodecode/templates/index_base.html:163 | |||
|
1005 | #, python-format | |||
|
1006 | msgid "Subscribe to %s rss feed" | |||
|
1007 | msgstr "" | |||
|
1008 | ||||
|
1009 | #: rhodecode/templates/index_base.html:168 | |||
|
1010 | #: rhodecode/templates/index_base.html:170 | |||
|
1011 | #, python-format | |||
|
1012 | msgid "Subscribe to %s atom feed" | |||
|
1013 | msgstr "" | |||
|
1014 | ||||
|
1015 | #: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54 | |||
|
1016 | #: rhodecode/templates/base/base.html:38 | |||
|
1017 | msgid "Sign In" | |||
|
1018 | msgstr "" | |||
|
1019 | ||||
|
1020 | #: rhodecode/templates/login.html:21 | |||
|
1021 | msgid "Sign In to" | |||
|
1022 | msgstr "" | |||
|
1023 | ||||
|
1024 | #: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20 | |||
|
1025 | #: rhodecode/templates/admin/admin_log.html:5 | |||
|
1026 | #: rhodecode/templates/admin/users/user_add.html:32 | |||
|
1027 | #: rhodecode/templates/admin/users/user_edit.html:47 | |||
|
1028 | #: rhodecode/templates/admin/users/user_edit_my_account.html:45 | |||
|
1029 | #: rhodecode/templates/base/base.html:15 | |||
|
1030 | #: rhodecode/templates/summary/summary.html:106 | |||
|
1031 | msgid "Username" | |||
|
1032 | msgstr "" | |||
|
1033 | ||||
|
1034 | #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29 | |||
|
1035 | #: rhodecode/templates/admin/ldap/ldap.html:46 | |||
|
1036 | #: rhodecode/templates/admin/users/user_add.html:41 | |||
|
1037 | #: rhodecode/templates/base/base.html:24 | |||
|
1038 | msgid "Password" | |||
|
1039 | msgstr "" | |||
|
1040 | ||||
|
1041 | #: rhodecode/templates/login.html:60 | |||
|
1042 | msgid "Forgot your password ?" | |||
|
1043 | msgstr "" | |||
|
1044 | ||||
|
1045 | #: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:35 | |||
|
1046 | msgid "Don't have an account ?" | |||
|
1047 | msgstr "" | |||
|
1048 | ||||
|
1049 | #: rhodecode/templates/password_reset.html:5 | |||
|
1050 | msgid "Reset your password" | |||
|
1051 | msgstr "" | |||
|
1052 | ||||
|
1053 | #: rhodecode/templates/password_reset.html:11 | |||
|
1054 | msgid "Reset your password to" | |||
|
1055 | msgstr "" | |||
|
1056 | ||||
|
1057 | #: rhodecode/templates/password_reset.html:21 | |||
|
1058 | msgid "Email address" | |||
|
1059 | msgstr "" | |||
|
1060 | ||||
|
1061 | #: rhodecode/templates/password_reset.html:30 | |||
|
1062 | msgid "Reset my password" | |||
|
1063 | msgstr "" | |||
|
1064 | ||||
|
1065 | #: rhodecode/templates/password_reset.html:31 | |||
|
1066 | msgid "Password reset link will be send to matching email address" | |||
|
1067 | msgstr "" | |||
|
1068 | ||||
|
1069 | #: rhodecode/templates/register.html:5 rhodecode/templates/register.html:74 | |||
|
1070 | msgid "Sign Up" | |||
|
1071 | msgstr "" | |||
|
1072 | ||||
|
1073 | #: rhodecode/templates/register.html:11 | |||
|
1074 | msgid "Sign Up to" | |||
|
1075 | msgstr "" | |||
|
1076 | ||||
|
1077 | #: rhodecode/templates/register.html:38 | |||
|
1078 | msgid "Re-enter password" | |||
|
1079 | msgstr "" | |||
|
1080 | ||||
|
1081 | #: rhodecode/templates/register.html:47 | |||
|
1082 | #: rhodecode/templates/admin/users/user_add.html:50 | |||
|
1083 | #: rhodecode/templates/admin/users/user_edit.html:74 | |||
|
1084 | #: rhodecode/templates/admin/users/user_edit_my_account.html:63 | |||
|
1085 | msgid "First Name" | |||
|
1086 | msgstr "" | |||
|
1087 | ||||
|
1088 | #: rhodecode/templates/register.html:56 | |||
|
1089 | #: rhodecode/templates/admin/users/user_add.html:59 | |||
|
1090 | #: rhodecode/templates/admin/users/user_edit.html:83 | |||
|
1091 | #: rhodecode/templates/admin/users/user_edit_my_account.html:72 | |||
|
1092 | msgid "Last Name" | |||
|
1093 | msgstr "" | |||
|
1094 | ||||
|
1095 | #: rhodecode/templates/register.html:65 | |||
|
1096 | #: rhodecode/templates/admin/users/user_add.html:68 | |||
|
1097 | #: rhodecode/templates/admin/users/user_edit.html:92 | |||
|
1098 | #: rhodecode/templates/admin/users/user_edit_my_account.html:81 | |||
|
1099 | #: rhodecode/templates/summary/summary.html:108 | |||
|
1100 | msgid "Email" | |||
|
1101 | msgstr "" | |||
|
1102 | ||||
|
1103 | #: rhodecode/templates/register.html:76 | |||
|
1104 | msgid "Your account will be activated right after registration" | |||
|
1105 | msgstr "" | |||
|
1106 | ||||
|
1107 | #: rhodecode/templates/register.html:78 | |||
|
1108 | msgid "Your account must wait for activation by administrator" | |||
|
1109 | msgstr "" | |||
|
1110 | ||||
|
1111 | #: rhodecode/templates/repo_switcher_list.html:14 | |||
|
1112 | msgid "Private repository" | |||
|
1113 | msgstr "" | |||
|
1114 | ||||
|
1115 | #: rhodecode/templates/repo_switcher_list.html:19 | |||
|
1116 | msgid "Public repository" | |||
|
1117 | msgstr "" | |||
|
1118 | ||||
|
1119 | #: rhodecode/templates/admin/admin.html:5 | |||
|
1120 | #: rhodecode/templates/admin/admin.html:9 | |||
|
1121 | msgid "Admin journal" | |||
|
1122 | msgstr "" | |||
|
1123 | ||||
|
1124 | #: rhodecode/templates/admin/admin_log.html:6 | |||
|
1125 | msgid "Action" | |||
|
1126 | msgstr "" | |||
|
1127 | ||||
|
1128 | #: rhodecode/templates/admin/admin_log.html:7 | |||
|
1129 | msgid "Repository" | |||
|
1130 | msgstr "" | |||
|
1131 | ||||
|
1132 | #: rhodecode/templates/admin/admin_log.html:8 | |||
|
1133 | msgid "Date" | |||
|
1134 | msgstr "" | |||
|
1135 | ||||
|
1136 | #: rhodecode/templates/admin/admin_log.html:9 | |||
|
1137 | msgid "From IP" | |||
|
1138 | msgstr "" | |||
|
1139 | ||||
|
1140 | #: rhodecode/templates/admin/admin_log.html:52 | |||
|
1141 | msgid "No actions yet" | |||
|
1142 | msgstr "" | |||
|
1143 | ||||
|
1144 | #: rhodecode/templates/admin/ldap/ldap.html:5 | |||
|
1145 | msgid "LDAP administration" | |||
|
1146 | msgstr "" | |||
|
1147 | ||||
|
1148 | #: rhodecode/templates/admin/ldap/ldap.html:11 | |||
|
1149 | msgid "Ldap" | |||
|
1150 | msgstr "" | |||
|
1151 | ||||
|
1152 | #: rhodecode/templates/admin/ldap/ldap.html:28 | |||
|
1153 | msgid "Connection settings" | |||
|
1154 | msgstr "" | |||
|
1155 | ||||
|
1156 | #: rhodecode/templates/admin/ldap/ldap.html:30 | |||
|
1157 | msgid "Enable LDAP" | |||
|
1158 | msgstr "" | |||
|
1159 | ||||
|
1160 | #: rhodecode/templates/admin/ldap/ldap.html:34 | |||
|
1161 | msgid "Host" | |||
|
1162 | msgstr "" | |||
|
1163 | ||||
|
1164 | #: rhodecode/templates/admin/ldap/ldap.html:38 | |||
|
1165 | msgid "Port" | |||
|
1166 | msgstr "" | |||
|
1167 | ||||
|
1168 | #: rhodecode/templates/admin/ldap/ldap.html:42 | |||
|
1169 | msgid "Account" | |||
|
1170 | msgstr "" | |||
|
1171 | ||||
|
1172 | #: rhodecode/templates/admin/ldap/ldap.html:50 | |||
|
1173 | msgid "Connection security" | |||
|
1174 | msgstr "" | |||
|
1175 | ||||
|
1176 | #: rhodecode/templates/admin/ldap/ldap.html:54 | |||
|
1177 | msgid "Certificate Checks" | |||
|
1178 | msgstr "" | |||
|
1179 | ||||
|
1180 | #: rhodecode/templates/admin/ldap/ldap.html:57 | |||
|
1181 | msgid "Search settings" | |||
|
1182 | msgstr "" | |||
|
1183 | ||||
|
1184 | #: rhodecode/templates/admin/ldap/ldap.html:59 | |||
|
1185 | msgid "Base DN" | |||
|
1186 | msgstr "" | |||
|
1187 | ||||
|
1188 | #: rhodecode/templates/admin/ldap/ldap.html:63 | |||
|
1189 | msgid "LDAP Filter" | |||
|
1190 | msgstr "" | |||
|
1191 | ||||
|
1192 | #: rhodecode/templates/admin/ldap/ldap.html:67 | |||
|
1193 | msgid "LDAP Search Scope" | |||
|
1194 | msgstr "" | |||
|
1195 | ||||
|
1196 | #: rhodecode/templates/admin/ldap/ldap.html:70 | |||
|
1197 | msgid "Attribute mappings" | |||
|
1198 | msgstr "" | |||
|
1199 | ||||
|
1200 | #: rhodecode/templates/admin/ldap/ldap.html:72 | |||
|
1201 | msgid "Login Attribute" | |||
|
1202 | msgstr "" | |||
|
1203 | ||||
|
1204 | #: rhodecode/templates/admin/ldap/ldap.html:76 | |||
|
1205 | msgid "First Name Attribute" | |||
|
1206 | msgstr "" | |||
|
1207 | ||||
|
1208 | #: rhodecode/templates/admin/ldap/ldap.html:80 | |||
|
1209 | msgid "Last Name Attribute" | |||
|
1210 | msgstr "" | |||
|
1211 | ||||
|
1212 | #: rhodecode/templates/admin/ldap/ldap.html:84 | |||
|
1213 | msgid "E-mail Attribute" | |||
|
1214 | msgstr "" | |||
|
1215 | ||||
|
1216 | #: rhodecode/templates/admin/ldap/ldap.html:89 | |||
|
1217 | #: rhodecode/templates/admin/settings/hooks.html:73 | |||
|
1218 | #: rhodecode/templates/admin/users/user_edit.html:117 | |||
|
1219 | #: rhodecode/templates/admin/users/user_edit.html:142 | |||
|
1220 | #: rhodecode/templates/admin/users/user_edit_my_account.html:89 | |||
|
1221 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:263 | |||
|
1222 | msgid "Save" | |||
|
1223 | msgstr "" | |||
|
1224 | ||||
|
1225 | #: rhodecode/templates/admin/permissions/permissions.html:5 | |||
|
1226 | msgid "Permissions administration" | |||
|
1227 | msgstr "" | |||
|
1228 | ||||
|
1229 | #: rhodecode/templates/admin/permissions/permissions.html:11 | |||
|
1230 | #: rhodecode/templates/admin/repos/repo_edit.html:109 | |||
|
1231 | #: rhodecode/templates/admin/users/user_edit.html:127 | |||
|
1232 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:248 | |||
|
1233 | #: rhodecode/templates/settings/repo_settings.html:58 | |||
|
1234 | msgid "Permissions" | |||
|
1235 | msgstr "" | |||
|
1236 | ||||
|
1237 | #: rhodecode/templates/admin/permissions/permissions.html:24 | |||
|
1238 | msgid "Default permissions" | |||
|
1239 | msgstr "" | |||
|
1240 | ||||
|
1241 | #: rhodecode/templates/admin/permissions/permissions.html:31 | |||
|
1242 | msgid "Anonymous access" | |||
|
1243 | msgstr "" | |||
|
1244 | ||||
|
1245 | #: rhodecode/templates/admin/permissions/permissions.html:41 | |||
|
1246 | msgid "Repository permission" | |||
|
1247 | msgstr "" | |||
|
1248 | ||||
|
1249 | #: rhodecode/templates/admin/permissions/permissions.html:49 | |||
|
1250 | msgid "" | |||
|
1251 | "All default permissions on each repository will be reset to choosen " | |||
|
1252 | "permission, note that all custom default permission on repositories will " | |||
|
1253 | "be lost" | |||
|
1254 | msgstr "" | |||
|
1255 | ||||
|
1256 | #: rhodecode/templates/admin/permissions/permissions.html:50 | |||
|
1257 | msgid "overwrite existing settings" | |||
|
1258 | msgstr "" | |||
|
1259 | ||||
|
1260 | #: rhodecode/templates/admin/permissions/permissions.html:55 | |||
|
1261 | msgid "Registration" | |||
|
1262 | msgstr "" | |||
|
1263 | ||||
|
1264 | #: rhodecode/templates/admin/permissions/permissions.html:63 | |||
|
1265 | msgid "Repository creation" | |||
|
1266 | msgstr "" | |||
|
1267 | ||||
|
1268 | #: rhodecode/templates/admin/permissions/permissions.html:71 | |||
|
1269 | msgid "set" | |||
|
1270 | msgstr "" | |||
|
1271 | ||||
|
1272 | #: rhodecode/templates/admin/repos/repo_add.html:5 | |||
|
1273 | #: rhodecode/templates/admin/repos/repo_add_create_repository.html:5 | |||
|
1274 | msgid "Add repository" | |||
|
1275 | msgstr "" | |||
|
1276 | ||||
|
1277 | #: rhodecode/templates/admin/repos/repo_add.html:11 | |||
|
1278 | #: rhodecode/templates/admin/repos/repo_edit.html:11 | |||
|
1279 | #: rhodecode/templates/admin/repos/repos.html:10 | |||
|
1280 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10 | |||
|
1281 | msgid "Repositories" | |||
|
1282 | msgstr "" | |||
|
1283 | ||||
|
1284 | #: rhodecode/templates/admin/repos/repo_add.html:13 | |||
|
1285 | msgid "add new" | |||
|
1286 | msgstr "" | |||
|
1287 | ||||
|
1288 | #: rhodecode/templates/admin/repos/repo_add_base.html:20 | |||
|
1289 | #: rhodecode/templates/summary/summary.html:80 | |||
|
1290 | #: rhodecode/templates/summary/summary.html:82 | |||
|
1291 | msgid "Clone from" | |||
|
1292 | msgstr "" | |||
|
1293 | ||||
|
1294 | #: rhodecode/templates/admin/repos/repo_add_base.html:28 | |||
|
1295 | #: rhodecode/templates/admin/repos/repo_edit.html:48 | |||
|
1296 | #: rhodecode/templates/admin/repos_groups/repos_groups.html:4 | |||
|
1297 | msgid "Repository group" | |||
|
1298 | msgstr "" | |||
|
1299 | ||||
|
1300 | #: rhodecode/templates/admin/repos/repo_add_base.html:36 | |||
|
1301 | #: rhodecode/templates/admin/repos/repo_edit.html:56 | |||
|
1302 | msgid "Type" | |||
|
1303 | msgstr "" | |||
|
1304 | ||||
|
1305 | #: rhodecode/templates/admin/repos/repo_add_base.html:52 | |||
|
1306 | #: rhodecode/templates/admin/repos/repo_edit.html:73 | |||
|
1307 | #: rhodecode/templates/settings/repo_fork.html:48 | |||
|
1308 | #: rhodecode/templates/settings/repo_settings.html:49 | |||
|
1309 | msgid "Private" | |||
|
1310 | msgstr "" | |||
|
1311 | ||||
|
1312 | #: rhodecode/templates/admin/repos/repo_add_base.html:59 | |||
|
1313 | msgid "add" | |||
|
1314 | msgstr "" | |||
|
1315 | ||||
|
1316 | #: rhodecode/templates/admin/repos/repo_add_create_repository.html:9 | |||
|
1317 | msgid "add new repository" | |||
|
1318 | msgstr "" | |||
|
1319 | ||||
|
1320 | #: rhodecode/templates/admin/repos/repo_edit.html:5 | |||
|
1321 | msgid "Edit repository" | |||
|
1322 | msgstr "" | |||
|
1323 | ||||
|
1324 | #: rhodecode/templates/admin/repos/repo_edit.html:13 | |||
|
1325 | #: rhodecode/templates/admin/users/user_edit.html:13 | |||
|
1326 | #: rhodecode/templates/admin/users/user_edit_my_account.html:148 | |||
|
1327 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:13 | |||
|
1328 | #: rhodecode/templates/files/files_annotate.html:49 | |||
|
1329 | #: rhodecode/templates/files/files_source.html:20 | |||
|
1330 | msgid "edit" | |||
|
1331 | msgstr "" | |||
|
1332 | ||||
|
1333 | #: rhodecode/templates/admin/repos/repo_edit.html:40 | |||
|
1334 | msgid "Clone uri" | |||
|
1335 | msgstr "" | |||
|
1336 | ||||
|
1337 | #: rhodecode/templates/admin/repos/repo_edit.html:81 | |||
|
1338 | msgid "Enable statistics" | |||
|
1339 | msgstr "" | |||
|
1340 | ||||
|
1341 | #: rhodecode/templates/admin/repos/repo_edit.html:89 | |||
|
1342 | msgid "Enable downloads" | |||
|
1343 | msgstr "" | |||
|
1344 | ||||
|
1345 | #: rhodecode/templates/admin/repos/repo_edit.html:127 | |||
|
1346 | msgid "Administration" | |||
|
1347 | msgstr "" | |||
|
1348 | ||||
|
1349 | #: rhodecode/templates/admin/repos/repo_edit.html:130 | |||
|
1350 | msgid "Statistics" | |||
|
1351 | msgstr "" | |||
|
1352 | ||||
|
1353 | #: rhodecode/templates/admin/repos/repo_edit.html:134 | |||
|
1354 | msgid "Reset current statistics" | |||
|
1355 | msgstr "" | |||
|
1356 | ||||
|
1357 | #: rhodecode/templates/admin/repos/repo_edit.html:134 | |||
|
1358 | msgid "Confirm to remove current statistics" | |||
|
1359 | msgstr "" | |||
|
1360 | ||||
|
1361 | #: rhodecode/templates/admin/repos/repo_edit.html:137 | |||
|
1362 | msgid "Fetched to rev" | |||
|
1363 | msgstr "" | |||
|
1364 | ||||
|
1365 | #: rhodecode/templates/admin/repos/repo_edit.html:138 | |||
|
1366 | msgid "Percentage of stats gathered" | |||
|
1367 | msgstr "" | |||
|
1368 | ||||
|
1369 | #: rhodecode/templates/admin/repos/repo_edit.html:147 | |||
|
1370 | msgid "Remote" | |||
|
1371 | msgstr "" | |||
|
1372 | ||||
|
1373 | #: rhodecode/templates/admin/repos/repo_edit.html:151 | |||
|
1374 | msgid "Pull changes from remote location" | |||
|
1375 | msgstr "" | |||
|
1376 | ||||
|
1377 | #: rhodecode/templates/admin/repos/repo_edit.html:151 | |||
|
1378 | msgid "Confirm to pull changes from remote side" | |||
|
1379 | msgstr "" | |||
|
1380 | ||||
|
1381 | #: rhodecode/templates/admin/repos/repo_edit.html:162 | |||
|
1382 | msgid "Cache" | |||
|
1383 | msgstr "" | |||
|
1384 | ||||
|
1385 | #: rhodecode/templates/admin/repos/repo_edit.html:166 | |||
|
1386 | msgid "Invalidate repository cache" | |||
|
1387 | msgstr "" | |||
|
1388 | ||||
|
1389 | #: rhodecode/templates/admin/repos/repo_edit.html:166 | |||
|
1390 | msgid "Confirm to invalidate repository cache" | |||
|
1391 | msgstr "" | |||
|
1392 | ||||
|
1393 | #: rhodecode/templates/admin/repos/repo_edit.html:177 | |||
|
1394 | msgid "Remove from public journal" | |||
|
1395 | msgstr "" | |||
|
1396 | ||||
|
1397 | #: rhodecode/templates/admin/repos/repo_edit.html:179 | |||
|
1398 | msgid "Add to public journal" | |||
|
1399 | msgstr "" | |||
|
1400 | ||||
|
1401 | #: rhodecode/templates/admin/repos/repo_edit.html:185 | |||
|
1402 | msgid "Delete" | |||
|
1403 | msgstr "" | |||
|
1404 | ||||
|
1405 | #: rhodecode/templates/admin/repos/repo_edit.html:189 | |||
|
1406 | msgid "Remove this repository" | |||
|
1407 | msgstr "" | |||
|
1408 | ||||
|
1409 | #: rhodecode/templates/admin/repos/repo_edit.html:189 | |||
|
1410 | #: rhodecode/templates/admin/repos/repos.html:79 | |||
|
1411 | msgid "Confirm to delete this repository" | |||
|
1412 | msgstr "" | |||
|
1413 | ||||
|
1414 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:3 | |||
|
1415 | msgid "none" | |||
|
1416 | msgstr "" | |||
|
1417 | ||||
|
1418 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:4 | |||
|
1419 | msgid "read" | |||
|
1420 | msgstr "" | |||
|
1421 | ||||
|
1422 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:5 | |||
|
1423 | msgid "write" | |||
|
1424 | msgstr "" | |||
|
1425 | ||||
|
1426 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:6 | |||
|
1427 | #: rhodecode/templates/admin/users/users.html:38 | |||
|
1428 | #: rhodecode/templates/base/base.html:296 | |||
|
1429 | msgid "admin" | |||
|
1430 | msgstr "" | |||
|
1431 | ||||
|
1432 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:7 | |||
|
1433 | msgid "member" | |||
|
1434 | msgstr "" | |||
|
1435 | ||||
|
1436 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:33 | |||
|
1437 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:53 | |||
|
1438 | msgid "revoke" | |||
|
1439 | msgstr "" | |||
|
1440 | ||||
|
1441 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:75 | |||
|
1442 | msgid "Add another member" | |||
|
1443 | msgstr "" | |||
|
1444 | ||||
|
1445 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:89 | |||
|
1446 | msgid "Failed to remove user" | |||
|
1447 | msgstr "" | |||
|
1448 | ||||
|
1449 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:104 | |||
|
1450 | msgid "Failed to remove users group" | |||
|
1451 | msgstr "" | |||
|
1452 | ||||
|
1453 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:205 | |||
|
1454 | msgid "Group" | |||
|
1455 | msgstr "" | |||
|
1456 | ||||
|
1457 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:206 | |||
|
1458 | #: rhodecode/templates/admin/users_groups/users_groups.html:33 | |||
|
1459 | msgid "members" | |||
|
1460 | msgstr "" | |||
|
1461 | ||||
|
1462 | #: rhodecode/templates/admin/repos/repos.html:5 | |||
|
1463 | msgid "Repositories administration" | |||
|
1464 | msgstr "" | |||
|
1465 | ||||
|
1466 | #: rhodecode/templates/admin/repos/repos.html:34 | |||
|
1467 | #: rhodecode/templates/summary/summary.html:100 | |||
|
1468 | msgid "Contact" | |||
|
1469 | msgstr "" | |||
|
1470 | ||||
|
1471 | #: rhodecode/templates/admin/repos/repos.html:35 | |||
|
1472 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36 | |||
|
1473 | #: rhodecode/templates/admin/users/user_edit_my_account.html:119 | |||
|
1474 | #: rhodecode/templates/admin/users/users.html:40 | |||
|
1475 | #: rhodecode/templates/admin/users_groups/users_groups.html:35 | |||
|
1476 | msgid "action" | |||
|
1477 | msgstr "" | |||
|
1478 | ||||
|
1479 | #: rhodecode/templates/admin/repos/repos.html:51 | |||
|
1480 | #: rhodecode/templates/admin/users/user_edit_my_account.html:134 | |||
|
1481 | #: rhodecode/templates/admin/users/user_edit_my_account.html:148 | |||
|
1482 | msgid "private" | |||
|
1483 | msgstr "" | |||
|
1484 | ||||
|
1485 | #: rhodecode/templates/admin/repos/repos.html:53 | |||
|
1486 | #: rhodecode/templates/admin/repos/repos.html:59 | |||
|
1487 | #: rhodecode/templates/admin/users/user_edit_my_account.html:136 | |||
|
1488 | #: rhodecode/templates/admin/users/user_edit_my_account.html:142 | |||
|
1489 | #: rhodecode/templates/summary/summary.html:68 | |||
|
1490 | msgid "public" | |||
|
1491 | msgstr "" | |||
|
1492 | ||||
|
1493 | #: rhodecode/templates/admin/repos/repos.html:79 | |||
|
1494 | #: rhodecode/templates/admin/users/users.html:55 | |||
|
1495 | msgid "delete" | |||
|
1496 | msgstr "" | |||
|
1497 | ||||
|
1498 | #: rhodecode/templates/admin/repos_groups/repos_groups.html:8 | |||
|
1499 | msgid "Groups" | |||
|
1500 | msgstr "" | |||
|
1501 | ||||
|
1502 | #: rhodecode/templates/admin/repos_groups/repos_groups.html:13 | |||
|
1503 | msgid "with" | |||
|
1504 | msgstr "" | |||
|
1505 | ||||
|
1506 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 | |||
|
1507 | msgid "Add repos group" | |||
|
1508 | msgstr "" | |||
|
1509 | ||||
|
1510 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10 | |||
|
1511 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10 | |||
|
1512 | msgid "Repos groups" | |||
|
1513 | msgstr "" | |||
|
1514 | ||||
|
1515 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12 | |||
|
1516 | msgid "add new repos group" | |||
|
1517 | msgstr "" | |||
|
1518 | ||||
|
1519 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50 | |||
|
1520 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50 | |||
|
1521 | msgid "Group parent" | |||
|
1522 | msgstr "" | |||
|
1523 | ||||
|
1524 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58 | |||
|
1525 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58 | |||
|
1526 | #: rhodecode/templates/admin/users/user_add.html:85 | |||
|
1527 | #: rhodecode/templates/admin/users_groups/users_group_add.html:49 | |||
|
1528 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:90 | |||
|
1529 | msgid "save" | |||
|
1530 | msgstr "" | |||
|
1531 | ||||
|
1532 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5 | |||
|
1533 | msgid "Edit repos group" | |||
|
1534 | msgstr "" | |||
|
1535 | ||||
|
1536 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12 | |||
|
1537 | msgid "edit repos group" | |||
|
1538 | msgstr "" | |||
|
1539 | ||||
|
1540 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5 | |||
|
1541 | msgid "Repositories groups administration" | |||
|
1542 | msgstr "" | |||
|
1543 | ||||
|
1544 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22 | |||
|
1545 | msgid "ADD NEW GROUP" | |||
|
1546 | msgstr "" | |||
|
1547 | ||||
|
1548 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35 | |||
|
1549 | msgid "Number of repositories" | |||
|
1550 | msgstr "" | |||
|
1551 | ||||
|
1552 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54 | |||
|
1553 | msgid "Confirm to delete this group" | |||
|
1554 | msgstr "" | |||
|
1555 | ||||
|
1556 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62 | |||
|
1557 | msgid "There are no repositories groups yet" | |||
|
1558 | msgstr "" | |||
|
1559 | ||||
|
1560 | #: rhodecode/templates/admin/settings/hooks.html:5 | |||
|
1561 | #: rhodecode/templates/admin/settings/settings.html:5 | |||
|
1562 | msgid "Settings administration" | |||
|
1563 | msgstr "" | |||
|
1564 | ||||
|
1565 | #: rhodecode/templates/admin/settings/hooks.html:9 | |||
|
1566 | #: rhodecode/templates/admin/settings/settings.html:9 | |||
|
1567 | #: rhodecode/templates/settings/repo_settings.html:5 | |||
|
1568 | #: rhodecode/templates/settings/repo_settings.html:13 | |||
|
1569 | msgid "Settings" | |||
|
1570 | msgstr "" | |||
|
1571 | ||||
|
1572 | #: rhodecode/templates/admin/settings/hooks.html:24 | |||
|
1573 | msgid "Built in hooks - read only" | |||
|
1574 | msgstr "" | |||
|
1575 | ||||
|
1576 | #: rhodecode/templates/admin/settings/hooks.html:40 | |||
|
1577 | msgid "Custom hooks" | |||
|
1578 | msgstr "" | |||
|
1579 | ||||
|
1580 | #: rhodecode/templates/admin/settings/hooks.html:56 | |||
|
1581 | msgid "remove" | |||
|
1582 | msgstr "" | |||
|
1583 | ||||
|
1584 | #: rhodecode/templates/admin/settings/hooks.html:88 | |||
|
1585 | msgid "Failed to remove hook" | |||
|
1586 | msgstr "" | |||
|
1587 | ||||
|
1588 | #: rhodecode/templates/admin/settings/settings.html:24 | |||
|
1589 | msgid "Remap and rescan repositories" | |||
|
1590 | msgstr "" | |||
|
1591 | ||||
|
1592 | #: rhodecode/templates/admin/settings/settings.html:32 | |||
|
1593 | msgid "rescan option" | |||
|
1594 | msgstr "" | |||
|
1595 | ||||
|
1596 | #: rhodecode/templates/admin/settings/settings.html:38 | |||
|
1597 | msgid "" | |||
|
1598 | "In case a repository was deleted from filesystem and there are leftovers " | |||
|
1599 | "in the database check this option to scan obsolete data in database and " | |||
|
1600 | "remove it." | |||
|
1601 | msgstr "" | |||
|
1602 | ||||
|
1603 | #: rhodecode/templates/admin/settings/settings.html:39 | |||
|
1604 | msgid "destroy old data" | |||
|
1605 | msgstr "" | |||
|
1606 | ||||
|
1607 | #: rhodecode/templates/admin/settings/settings.html:45 | |||
|
1608 | msgid "Rescan repositories" | |||
|
1609 | msgstr "" | |||
|
1610 | ||||
|
1611 | #: rhodecode/templates/admin/settings/settings.html:51 | |||
|
1612 | msgid "Whoosh indexing" | |||
|
1613 | msgstr "" | |||
|
1614 | ||||
|
1615 | #: rhodecode/templates/admin/settings/settings.html:59 | |||
|
1616 | msgid "index build option" | |||
|
1617 | msgstr "" | |||
|
1618 | ||||
|
1619 | #: rhodecode/templates/admin/settings/settings.html:64 | |||
|
1620 | msgid "build from scratch" | |||
|
1621 | msgstr "" | |||
|
1622 | ||||
|
1623 | #: rhodecode/templates/admin/settings/settings.html:70 | |||
|
1624 | msgid "Reindex" | |||
|
1625 | msgstr "" | |||
|
1626 | ||||
|
1627 | #: rhodecode/templates/admin/settings/settings.html:76 | |||
|
1628 | msgid "Global application settings" | |||
|
1629 | msgstr "" | |||
|
1630 | ||||
|
1631 | #: rhodecode/templates/admin/settings/settings.html:85 | |||
|
1632 | msgid "Application name" | |||
|
1633 | msgstr "" | |||
|
1634 | ||||
|
1635 | #: rhodecode/templates/admin/settings/settings.html:94 | |||
|
1636 | msgid "Realm text" | |||
|
1637 | msgstr "" | |||
|
1638 | ||||
|
1639 | #: rhodecode/templates/admin/settings/settings.html:103 | |||
|
1640 | msgid "GA code" | |||
|
1641 | msgstr "" | |||
|
1642 | ||||
|
1643 | #: rhodecode/templates/admin/settings/settings.html:111 | |||
|
1644 | #: rhodecode/templates/admin/settings/settings.html:177 | |||
|
1645 | msgid "Save settings" | |||
|
1646 | msgstr "" | |||
|
1647 | ||||
|
1648 | #: rhodecode/templates/admin/settings/settings.html:112 | |||
|
1649 | #: rhodecode/templates/admin/settings/settings.html:178 | |||
|
1650 | #: rhodecode/templates/admin/users/user_edit.html:118 | |||
|
1651 | #: rhodecode/templates/admin/users/user_edit.html:143 | |||
|
1652 | #: rhodecode/templates/admin/users/user_edit_my_account.html:90 | |||
|
1653 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:264 | |||
|
1654 | #: rhodecode/templates/files/files_edit.html:50 | |||
|
1655 | msgid "Reset" | |||
|
1656 | msgstr "" | |||
|
1657 | ||||
|
1658 | #: rhodecode/templates/admin/settings/settings.html:118 | |||
|
1659 | msgid "Mercurial settings" | |||
|
1660 | msgstr "" | |||
|
1661 | ||||
|
1662 | #: rhodecode/templates/admin/settings/settings.html:127 | |||
|
1663 | msgid "Web" | |||
|
1664 | msgstr "" | |||
|
1665 | ||||
|
1666 | #: rhodecode/templates/admin/settings/settings.html:132 | |||
|
1667 | msgid "require ssl for pushing" | |||
|
1668 | msgstr "" | |||
|
1669 | ||||
|
1670 | #: rhodecode/templates/admin/settings/settings.html:139 | |||
|
1671 | msgid "Hooks" | |||
|
1672 | msgstr "" | |||
|
1673 | ||||
|
1674 | #: rhodecode/templates/admin/settings/settings.html:142 | |||
|
1675 | msgid "advanced setup" | |||
|
1676 | msgstr "" | |||
|
1677 | ||||
|
1678 | #: rhodecode/templates/admin/settings/settings.html:147 | |||
|
1679 | msgid "Update repository after push (hg update)" | |||
|
1680 | msgstr "" | |||
|
1681 | ||||
|
1682 | #: rhodecode/templates/admin/settings/settings.html:151 | |||
|
1683 | msgid "Show repository size after push" | |||
|
1684 | msgstr "" | |||
|
1685 | ||||
|
1686 | #: rhodecode/templates/admin/settings/settings.html:155 | |||
|
1687 | msgid "Log user push commands" | |||
|
1688 | msgstr "" | |||
|
1689 | ||||
|
1690 | #: rhodecode/templates/admin/settings/settings.html:159 | |||
|
1691 | msgid "Log user pull commands" | |||
|
1692 | msgstr "" | |||
|
1693 | ||||
|
1694 | #: rhodecode/templates/admin/settings/settings.html:166 | |||
|
1695 | msgid "Repositories location" | |||
|
1696 | msgstr "" | |||
|
1697 | ||||
|
1698 | #: rhodecode/templates/admin/settings/settings.html:171 | |||
|
1699 | msgid "" | |||
|
1700 | "This a crucial application setting. If you are really sure you need to " | |||
|
1701 | "change this, you must restart application in order to make this setting " | |||
|
1702 | "take effect. Click this label to unlock." | |||
|
1703 | msgstr "" | |||
|
1704 | ||||
|
1705 | #: rhodecode/templates/admin/settings/settings.html:172 | |||
|
1706 | msgid "unlock" | |||
|
1707 | msgstr "" | |||
|
1708 | ||||
|
1709 | #: rhodecode/templates/admin/users/user_add.html:5 | |||
|
1710 | msgid "Add user" | |||
|
1711 | msgstr "" | |||
|
1712 | ||||
|
1713 | #: rhodecode/templates/admin/users/user_add.html:10 | |||
|
1714 | #: rhodecode/templates/admin/users/user_edit.html:11 | |||
|
1715 | #: rhodecode/templates/admin/users/users.html:9 | |||
|
1716 | msgid "Users" | |||
|
1717 | msgstr "" | |||
|
1718 | ||||
|
1719 | #: rhodecode/templates/admin/users/user_add.html:12 | |||
|
1720 | msgid "add new user" | |||
|
1721 | msgstr "" | |||
|
1722 | ||||
|
1723 | #: rhodecode/templates/admin/users/user_add.html:77 | |||
|
1724 | #: rhodecode/templates/admin/users/user_edit.html:101 | |||
|
1725 | #: rhodecode/templates/admin/users_groups/users_group_add.html:41 | |||
|
1726 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:42 | |||
|
1727 | msgid "Active" | |||
|
1728 | msgstr "" | |||
|
1729 | ||||
|
1730 | #: rhodecode/templates/admin/users/user_edit.html:5 | |||
|
1731 | msgid "Edit user" | |||
|
1732 | msgstr "" | |||
|
1733 | ||||
|
1734 | #: rhodecode/templates/admin/users/user_edit.html:33 | |||
|
1735 | #: rhodecode/templates/admin/users/user_edit_my_account.html:32 | |||
|
1736 | msgid "Change your avatar at" | |||
|
1737 | msgstr "" | |||
|
1738 | ||||
|
1739 | #: rhodecode/templates/admin/users/user_edit.html:34 | |||
|
1740 | #: rhodecode/templates/admin/users/user_edit_my_account.html:33 | |||
|
1741 | msgid "Using" | |||
|
1742 | msgstr "" | |||
|
1743 | ||||
|
1744 | #: rhodecode/templates/admin/users/user_edit.html:40 | |||
|
1745 | #: rhodecode/templates/admin/users/user_edit_my_account.html:39 | |||
|
1746 | msgid "API key" | |||
|
1747 | msgstr "" | |||
|
1748 | ||||
|
1749 | #: rhodecode/templates/admin/users/user_edit.html:56 | |||
|
1750 | msgid "LDAP DN" | |||
|
1751 | msgstr "" | |||
|
1752 | ||||
|
1753 | #: rhodecode/templates/admin/users/user_edit.html:65 | |||
|
1754 | #: rhodecode/templates/admin/users/user_edit_my_account.html:54 | |||
|
1755 | msgid "New password" | |||
|
1756 | msgstr "" | |||
|
1757 | ||||
|
1758 | #: rhodecode/templates/admin/users/user_edit.html:135 | |||
|
1759 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:256 | |||
|
1760 | msgid "Create repositories" | |||
|
1761 | msgstr "" | |||
|
1762 | ||||
|
1763 | #: rhodecode/templates/admin/users/user_edit_my_account.html:5 | |||
|
1764 | msgid "My account" | |||
|
1765 | msgstr "" | |||
|
1766 | ||||
|
1767 | #: rhodecode/templates/admin/users/user_edit_my_account.html:9 | |||
|
1768 | msgid "My Account" | |||
|
1769 | msgstr "" | |||
|
1770 | ||||
|
1771 | #: rhodecode/templates/admin/users/user_edit_my_account.html:101 | |||
|
1772 | msgid "My repositories" | |||
|
1773 | msgstr "" | |||
|
1774 | ||||
|
1775 | #: rhodecode/templates/admin/users/user_edit_my_account.html:107 | |||
|
1776 | msgid "ADD REPOSITORY" | |||
|
1777 | msgstr "" | |||
|
1778 | ||||
|
1779 | #: rhodecode/templates/admin/users/user_edit_my_account.html:118 | |||
|
1780 | #: rhodecode/templates/branches/branches_data.html:7 | |||
|
1781 | #: rhodecode/templates/shortlog/shortlog_data.html:8 | |||
|
1782 | #: rhodecode/templates/tags/tags_data.html:7 | |||
|
1783 | msgid "revision" | |||
|
1784 | msgstr "" | |||
|
1785 | ||||
|
1786 | #: rhodecode/templates/admin/users/user_edit_my_account.html:157 | |||
|
1787 | msgid "No repositories yet" | |||
|
1788 | msgstr "" | |||
|
1789 | ||||
|
1790 | #: rhodecode/templates/admin/users/user_edit_my_account.html:159 | |||
|
1791 | msgid "create one now" | |||
|
1792 | msgstr "" | |||
|
1793 | ||||
|
1794 | #: rhodecode/templates/admin/users/users.html:5 | |||
|
1795 | msgid "Users administration" | |||
|
1796 | msgstr "" | |||
|
1797 | ||||
|
1798 | #: rhodecode/templates/admin/users/users.html:23 | |||
|
1799 | msgid "ADD NEW USER" | |||
|
1800 | msgstr "" | |||
|
1801 | ||||
|
1802 | #: rhodecode/templates/admin/users/users.html:33 | |||
|
1803 | msgid "username" | |||
|
1804 | msgstr "" | |||
|
1805 | ||||
|
1806 | #: rhodecode/templates/admin/users/users.html:34 | |||
|
1807 | #: rhodecode/templates/branches/branches_data.html:5 | |||
|
1808 | #: rhodecode/templates/tags/tags_data.html:5 | |||
|
1809 | msgid "name" | |||
|
1810 | msgstr "" | |||
|
1811 | ||||
|
1812 | #: rhodecode/templates/admin/users/users.html:35 | |||
|
1813 | msgid "lastname" | |||
|
1814 | msgstr "" | |||
|
1815 | ||||
|
1816 | #: rhodecode/templates/admin/users/users.html:36 | |||
|
1817 | msgid "last login" | |||
|
1818 | msgstr "" | |||
|
1819 | ||||
|
1820 | #: rhodecode/templates/admin/users/users.html:37 | |||
|
1821 | #: rhodecode/templates/admin/users_groups/users_groups.html:34 | |||
|
1822 | msgid "active" | |||
|
1823 | msgstr "" | |||
|
1824 | ||||
|
1825 | #: rhodecode/templates/admin/users/users.html:39 | |||
|
1826 | #: rhodecode/templates/base/base.html:305 | |||
|
1827 | msgid "ldap" | |||
|
1828 | msgstr "" | |||
|
1829 | ||||
|
1830 | #: rhodecode/templates/admin/users/users.html:56 | |||
|
1831 | msgid "Confirm to delete this user" | |||
|
1832 | msgstr "" | |||
|
1833 | ||||
|
1834 | #: rhodecode/templates/admin/users_groups/users_group_add.html:5 | |||
|
1835 | msgid "Add users group" | |||
|
1836 | msgstr "" | |||
|
1837 | ||||
|
1838 | #: rhodecode/templates/admin/users_groups/users_group_add.html:10 | |||
|
1839 | #: rhodecode/templates/admin/users_groups/users_groups.html:9 | |||
|
1840 | msgid "Users groups" | |||
|
1841 | msgstr "" | |||
|
1842 | ||||
|
1843 | #: rhodecode/templates/admin/users_groups/users_group_add.html:12 | |||
|
1844 | msgid "add new users group" | |||
|
1845 | msgstr "" | |||
|
1846 | ||||
|
1847 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:5 | |||
|
1848 | msgid "Edit users group" | |||
|
1849 | msgstr "" | |||
|
1850 | ||||
|
1851 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:11 | |||
|
1852 | msgid "UsersGroups" | |||
|
1853 | msgstr "" | |||
|
1854 | ||||
|
1855 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:50 | |||
|
1856 | msgid "Members" | |||
|
1857 | msgstr "" | |||
|
1858 | ||||
|
1859 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:58 | |||
|
1860 | msgid "Choosen group members" | |||
|
1861 | msgstr "" | |||
|
1862 | ||||
|
1863 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:61 | |||
|
1864 | msgid "Remove all elements" | |||
|
1865 | msgstr "" | |||
|
1866 | ||||
|
1867 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:75 | |||
|
1868 | msgid "Available members" | |||
|
1869 | msgstr "" | |||
|
1870 | ||||
|
1871 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:79 | |||
|
1872 | msgid "Add all elements" | |||
|
1873 | msgstr "" | |||
|
1874 | ||||
|
1875 | #: rhodecode/templates/admin/users_groups/users_groups.html:5 | |||
|
1876 | msgid "Users groups administration" | |||
|
1877 | msgstr "" | |||
|
1878 | ||||
|
1879 | #: rhodecode/templates/admin/users_groups/users_groups.html:23 | |||
|
1880 | msgid "ADD NEW USER GROUP" | |||
|
1881 | msgstr "" | |||
|
1882 | ||||
|
1883 | #: rhodecode/templates/admin/users_groups/users_groups.html:32 | |||
|
1884 | msgid "group name" | |||
|
1885 | msgstr "" | |||
|
1886 | ||||
|
1887 | #: rhodecode/templates/base/base.html:32 | |||
|
1888 | msgid "Forgot password ?" | |||
|
1889 | msgstr "" | |||
|
1890 | ||||
|
1891 | #: rhodecode/templates/base/base.html:57 rhodecode/templates/base/base.html:338 | |||
|
1892 | #: rhodecode/templates/base/base.html:340 | |||
|
1893 | #: rhodecode/templates/base/base.html:342 | |||
|
1894 | msgid "Home" | |||
|
1895 | msgstr "" | |||
|
1896 | ||||
|
1897 | #: rhodecode/templates/base/base.html:61 rhodecode/templates/base/base.html:347 | |||
|
1898 | #: rhodecode/templates/base/base.html:349 | |||
|
1899 | #: rhodecode/templates/base/base.html:351 | |||
|
1900 | #: rhodecode/templates/journal/journal.html:4 | |||
|
1901 | #: rhodecode/templates/journal/journal.html:17 | |||
|
1902 | #: rhodecode/templates/journal/public_journal.html:4 | |||
|
1903 | msgid "Journal" | |||
|
1904 | msgstr "" | |||
|
1905 | ||||
|
1906 | #: rhodecode/templates/base/base.html:66 | |||
|
1907 | msgid "Login" | |||
|
1908 | msgstr "" | |||
|
1909 | ||||
|
1910 | #: rhodecode/templates/base/base.html:68 | |||
|
1911 | msgid "Log Out" | |||
|
1912 | msgstr "" | |||
|
1913 | ||||
|
1914 | #: rhodecode/templates/base/base.html:107 | |||
|
1915 | msgid "Submit a bug" | |||
|
1916 | msgstr "" | |||
|
1917 | ||||
|
1918 | #: rhodecode/templates/base/base.html:141 | |||
|
1919 | msgid "Switch repository" | |||
|
1920 | msgstr "" | |||
|
1921 | ||||
|
1922 | #: rhodecode/templates/base/base.html:143 | |||
|
1923 | msgid "Products" | |||
|
1924 | msgstr "" | |||
|
1925 | ||||
|
1926 | #: rhodecode/templates/base/base.html:149 | |||
|
1927 | msgid "loading..." | |||
|
1928 | msgstr "" | |||
|
1929 | ||||
|
1930 | #: rhodecode/templates/base/base.html:234 | |||
|
1931 | #: rhodecode/templates/base/base.html:236 | |||
|
1932 | #: rhodecode/templates/base/base.html:238 | |||
|
1933 | msgid "Switch to" | |||
|
1934 | msgstr "" | |||
|
1935 | ||||
|
1936 | #: rhodecode/templates/base/base.html:242 | |||
|
1937 | #: rhodecode/templates/branches/branches.html:13 | |||
|
1938 | msgid "branches" | |||
|
1939 | msgstr "" | |||
|
1940 | ||||
|
1941 | #: rhodecode/templates/base/base.html:249 | |||
|
1942 | #: rhodecode/templates/branches/branches_data.html:52 | |||
|
1943 | msgid "There are no branches yet" | |||
|
1944 | msgstr "" | |||
|
1945 | ||||
|
1946 | #: rhodecode/templates/base/base.html:254 | |||
|
1947 | #: rhodecode/templates/shortlog/shortlog_data.html:10 | |||
|
1948 | #: rhodecode/templates/tags/tags.html:14 | |||
|
1949 | msgid "tags" | |||
|
1950 | msgstr "" | |||
|
1951 | ||||
|
1952 | #: rhodecode/templates/base/base.html:261 | |||
|
1953 | #: rhodecode/templates/tags/tags_data.html:32 | |||
|
1954 | msgid "There are no tags yet" | |||
|
1955 | msgstr "" | |||
|
1956 | ||||
|
1957 | #: rhodecode/templates/base/base.html:277 | |||
|
1958 | #: rhodecode/templates/base/base.html:281 | |||
|
1959 | #: rhodecode/templates/files/files_annotate.html:40 | |||
|
1960 | #: rhodecode/templates/files/files_source.html:11 | |||
|
1961 | msgid "Options" | |||
|
1962 | msgstr "" | |||
|
1963 | ||||
|
1964 | #: rhodecode/templates/base/base.html:286 | |||
|
1965 | #: rhodecode/templates/base/base.html:288 | |||
|
1966 | #: rhodecode/templates/base/base.html:306 | |||
|
1967 | msgid "settings" | |||
|
1968 | msgstr "" | |||
|
1969 | ||||
|
1970 | #: rhodecode/templates/base/base.html:292 | |||
|
1971 | msgid "search" | |||
|
1972 | msgstr "" | |||
|
1973 | ||||
|
1974 | #: rhodecode/templates/base/base.html:299 | |||
|
1975 | msgid "journal" | |||
|
1976 | msgstr "" | |||
|
1977 | ||||
|
1978 | #: rhodecode/templates/base/base.html:301 | |||
|
1979 | msgid "repositories groups" | |||
|
1980 | msgstr "" | |||
|
1981 | ||||
|
1982 | #: rhodecode/templates/base/base.html:302 | |||
|
1983 | msgid "users" | |||
|
1984 | msgstr "" | |||
|
1985 | ||||
|
1986 | #: rhodecode/templates/base/base.html:303 | |||
|
1987 | msgid "users groups" | |||
|
1988 | msgstr "" | |||
|
1989 | ||||
|
1990 | #: rhodecode/templates/base/base.html:304 | |||
|
1991 | msgid "permissions" | |||
|
1992 | msgstr "" | |||
|
1993 | ||||
|
1994 | #: rhodecode/templates/base/base.html:317 | |||
|
1995 | #: rhodecode/templates/base/base.html:319 | |||
|
1996 | #: rhodecode/templates/followers/followers.html:5 | |||
|
1997 | msgid "Followers" | |||
|
1998 | msgstr "" | |||
|
1999 | ||||
|
2000 | #: rhodecode/templates/base/base.html:325 | |||
|
2001 | #: rhodecode/templates/base/base.html:327 | |||
|
2002 | #: rhodecode/templates/forks/forks.html:5 | |||
|
2003 | msgid "Forks" | |||
|
2004 | msgstr "" | |||
|
2005 | ||||
|
2006 | #: rhodecode/templates/base/base.html:356 | |||
|
2007 | #: rhodecode/templates/base/base.html:358 | |||
|
2008 | #: rhodecode/templates/base/base.html:360 | |||
|
2009 | #: rhodecode/templates/search/search.html:4 | |||
|
2010 | #: rhodecode/templates/search/search.html:24 | |||
|
2011 | #: rhodecode/templates/search/search.html:46 | |||
|
2012 | msgid "Search" | |||
|
2013 | msgstr "" | |||
|
2014 | ||||
|
2015 | #: rhodecode/templates/base/root.html:57 | |||
|
2016 | #: rhodecode/templates/journal/journal.html:48 | |||
|
2017 | #: rhodecode/templates/summary/summary.html:36 | |||
|
2018 | msgid "Stop following this repository" | |||
|
2019 | msgstr "" | |||
|
2020 | ||||
|
2021 | #: rhodecode/templates/base/root.html:66 | |||
|
2022 | #: rhodecode/templates/summary/summary.html:40 | |||
|
2023 | msgid "Start following this repository" | |||
|
2024 | msgstr "" | |||
|
2025 | ||||
|
2026 | #: rhodecode/templates/branches/branches_data.html:4 | |||
|
2027 | #: rhodecode/templates/tags/tags_data.html:4 | |||
|
2028 | msgid "date" | |||
|
2029 | msgstr "" | |||
|
2030 | ||||
|
2031 | #: rhodecode/templates/branches/branches_data.html:6 | |||
|
2032 | #: rhodecode/templates/shortlog/shortlog_data.html:7 | |||
|
2033 | #: rhodecode/templates/tags/tags_data.html:6 | |||
|
2034 | msgid "author" | |||
|
2035 | msgstr "" | |||
|
2036 | ||||
|
2037 | #: rhodecode/templates/branches/branches_data.html:8 | |||
|
2038 | #: rhodecode/templates/shortlog/shortlog_data.html:11 | |||
|
2039 | #: rhodecode/templates/tags/tags_data.html:8 | |||
|
2040 | msgid "links" | |||
|
2041 | msgstr "" | |||
|
2042 | ||||
|
2043 | #: rhodecode/templates/branches/branches_data.html:23 | |||
|
2044 | #: rhodecode/templates/branches/branches_data.html:43 | |||
|
2045 | #: rhodecode/templates/shortlog/shortlog_data.html:39 | |||
|
2046 | #: rhodecode/templates/tags/tags_data.html:24 | |||
|
2047 | msgid "changeset" | |||
|
2048 | msgstr "" | |||
|
2049 | ||||
|
2050 | #: rhodecode/templates/branches/branches_data.html:25 | |||
|
2051 | #: rhodecode/templates/branches/branches_data.html:45 | |||
|
2052 | #: rhodecode/templates/files/files.html:12 | |||
|
2053 | #: rhodecode/templates/shortlog/shortlog_data.html:41 | |||
|
2054 | #: rhodecode/templates/summary/summary.html:233 | |||
|
2055 | #: rhodecode/templates/tags/tags_data.html:26 | |||
|
2056 | msgid "files" | |||
|
2057 | msgstr "" | |||
|
2058 | ||||
|
2059 | #: rhodecode/templates/changelog/changelog.html:14 | |||
|
2060 | msgid "showing " | |||
|
2061 | msgstr "" | |||
|
2062 | ||||
|
2063 | #: rhodecode/templates/changelog/changelog.html:14 | |||
|
2064 | msgid "out of" | |||
|
2065 | msgstr "" | |||
|
2066 | ||||
|
2067 | #: rhodecode/templates/changelog/changelog.html:37 | |||
|
2068 | msgid "Show" | |||
|
2069 | msgstr "" | |||
|
2070 | ||||
|
2071 | #: rhodecode/templates/changelog/changelog.html:50 | |||
|
2072 | #: rhodecode/templates/changeset/changeset.html:42 | |||
|
2073 | #: rhodecode/templates/summary/summary.html:609 | |||
|
2074 | msgid "commit" | |||
|
2075 | msgstr "" | |||
|
2076 | ||||
|
2077 | #: rhodecode/templates/changelog/changelog.html:63 | |||
|
2078 | msgid "Affected number of files, click to show more details" | |||
|
2079 | msgstr "" | |||
|
2080 | ||||
|
2081 | #: rhodecode/templates/changelog/changelog.html:67 | |||
|
2082 | #: rhodecode/templates/changeset/changeset.html:66 | |||
|
2083 | msgid "merge" | |||
|
2084 | msgstr "" | |||
|
2085 | ||||
|
2086 | #: rhodecode/templates/changelog/changelog.html:72 | |||
|
2087 | #: rhodecode/templates/changeset/changeset.html:72 | |||
|
2088 | msgid "Parent" | |||
|
2089 | msgstr "" | |||
|
2090 | ||||
|
2091 | #: rhodecode/templates/changelog/changelog.html:77 | |||
|
2092 | #: rhodecode/templates/changeset/changeset.html:77 | |||
|
2093 | msgid "No parents" | |||
|
2094 | msgstr "" | |||
|
2095 | ||||
|
2096 | #: rhodecode/templates/changelog/changelog.html:82 | |||
|
2097 | #: rhodecode/templates/changeset/changeset.html:80 | |||
|
2098 | #: rhodecode/templates/files/files.html:29 | |||
|
2099 | #: rhodecode/templates/files/files_annotate.html:25 | |||
|
2100 | #: rhodecode/templates/files/files_edit.html:33 | |||
|
2101 | #: rhodecode/templates/shortlog/shortlog_data.html:9 | |||
|
2102 | msgid "branch" | |||
|
2103 | msgstr "" | |||
|
2104 | ||||
|
2105 | #: rhodecode/templates/changelog/changelog.html:86 | |||
|
2106 | #: rhodecode/templates/changeset/changeset.html:83 | |||
|
2107 | msgid "tag" | |||
|
2108 | msgstr "" | |||
|
2109 | ||||
|
2110 | #: rhodecode/templates/changelog/changelog.html:122 | |||
|
2111 | msgid "Show selected changes __S -> __E" | |||
|
2112 | msgstr "" | |||
|
2113 | ||||
|
2114 | #: rhodecode/templates/changelog/changelog.html:172 | |||
|
2115 | #: rhodecode/templates/shortlog/shortlog_data.html:61 | |||
|
2116 | msgid "There are no changes yet" | |||
|
2117 | msgstr "" | |||
|
2118 | ||||
|
2119 | #: rhodecode/templates/changelog/changelog_details.html:2 | |||
|
2120 | #: rhodecode/templates/changeset/changeset.html:55 | |||
|
2121 | msgid "removed" | |||
|
2122 | msgstr "" | |||
|
2123 | ||||
|
2124 | #: rhodecode/templates/changelog/changelog_details.html:3 | |||
|
2125 | #: rhodecode/templates/changeset/changeset.html:56 | |||
|
2126 | msgid "changed" | |||
|
2127 | msgstr "" | |||
|
2128 | ||||
|
2129 | #: rhodecode/templates/changelog/changelog_details.html:4 | |||
|
2130 | #: rhodecode/templates/changeset/changeset.html:57 | |||
|
2131 | msgid "added" | |||
|
2132 | msgstr "" | |||
|
2133 | ||||
|
2134 | #: rhodecode/templates/changelog/changelog_details.html:6 | |||
|
2135 | #: rhodecode/templates/changelog/changelog_details.html:7 | |||
|
2136 | #: rhodecode/templates/changelog/changelog_details.html:8 | |||
|
2137 | #: rhodecode/templates/changeset/changeset.html:59 | |||
|
2138 | #: rhodecode/templates/changeset/changeset.html:60 | |||
|
2139 | #: rhodecode/templates/changeset/changeset.html:61 | |||
|
2140 | #, python-format | |||
|
2141 | msgid "affected %s files" | |||
|
2142 | msgstr "" | |||
|
2143 | ||||
|
2144 | #: rhodecode/templates/changeset/changeset.html:6 | |||
|
2145 | #: rhodecode/templates/changeset/changeset.html:14 | |||
|
2146 | #: rhodecode/templates/changeset/changeset.html:31 | |||
|
2147 | msgid "Changeset" | |||
|
2148 | msgstr "" | |||
|
2149 | ||||
|
2150 | #: rhodecode/templates/changeset/changeset.html:32 | |||
|
2151 | #: rhodecode/templates/changeset/changeset.html:121 | |||
|
2152 | #: rhodecode/templates/changeset/changeset_range.html:78 | |||
|
2153 | #: rhodecode/templates/files/file_diff.html:32 | |||
|
2154 | #: rhodecode/templates/files/file_diff.html:42 | |||
|
2155 | msgid "raw diff" | |||
|
2156 | msgstr "" | |||
|
2157 | ||||
|
2158 | #: rhodecode/templates/changeset/changeset.html:34 | |||
|
2159 | #: rhodecode/templates/changeset/changeset.html:123 | |||
|
2160 | #: rhodecode/templates/changeset/changeset_range.html:80 | |||
|
2161 | #: rhodecode/templates/files/file_diff.html:34 | |||
|
2162 | msgid "download diff" | |||
|
2163 | msgstr "" | |||
|
2164 | ||||
|
2165 | #: rhodecode/templates/changeset/changeset.html:90 | |||
|
2166 | #, python-format | |||
|
2167 | msgid "%s files affected with %s additions and %s deletions." | |||
|
2168 | msgstr "" | |||
|
2169 | ||||
|
2170 | #: rhodecode/templates/changeset/changeset.html:101 | |||
|
2171 | msgid "Changeset was too big and was cut off..." | |||
|
2172 | msgstr "" | |||
|
2173 | ||||
|
2174 | #: rhodecode/templates/changeset/changeset.html:119 | |||
|
2175 | #: rhodecode/templates/changeset/changeset_range.html:76 | |||
|
2176 | #: rhodecode/templates/files/file_diff.html:30 | |||
|
2177 | msgid "diff" | |||
|
2178 | msgstr "" | |||
|
2179 | ||||
|
2180 | #: rhodecode/templates/changeset/changeset.html:132 | |||
|
2181 | #: rhodecode/templates/changeset/changeset_range.html:89 | |||
|
2182 | msgid "No changes in this file" | |||
|
2183 | msgstr "" | |||
|
2184 | ||||
|
2185 | #: rhodecode/templates/changeset/changeset_range.html:30 | |||
|
2186 | msgid "Compare View" | |||
|
2187 | msgstr "" | |||
|
2188 | ||||
|
2189 | #: rhodecode/templates/changeset/changeset_range.html:52 | |||
|
2190 | msgid "Files affected" | |||
|
2191 | msgstr "" | |||
|
2192 | ||||
|
2193 | #: rhodecode/templates/errors/error_document.html:44 | |||
|
2194 | #, python-format | |||
|
2195 | msgid "You will be redirected to %s in %s seconds" | |||
|
2196 | msgstr "" | |||
|
2197 | ||||
|
2198 | #: rhodecode/templates/files/file_diff.html:4 | |||
|
2199 | #: rhodecode/templates/files/file_diff.html:12 | |||
|
2200 | msgid "File diff" | |||
|
2201 | msgstr "" | |||
|
2202 | ||||
|
2203 | #: rhodecode/templates/files/file_diff.html:42 | |||
|
2204 | msgid "Diff is to big to display" | |||
|
2205 | msgstr "" | |||
|
2206 | ||||
|
2207 | #: rhodecode/templates/files/files.html:37 | |||
|
2208 | #: rhodecode/templates/files/files_annotate.html:31 | |||
|
2209 | #: rhodecode/templates/files/files_edit.html:39 | |||
|
2210 | msgid "Location" | |||
|
2211 | msgstr "" | |||
|
2212 | ||||
|
2213 | #: rhodecode/templates/files/files.html:46 | |||
|
2214 | msgid "Go back" | |||
|
2215 | msgstr "" | |||
|
2216 | ||||
|
2217 | #: rhodecode/templates/files/files.html:47 | |||
|
2218 | msgid "No files at given path" | |||
|
2219 | msgstr "" | |||
|
2220 | ||||
|
2221 | #: rhodecode/templates/files/files_annotate.html:4 | |||
|
2222 | msgid "File annotate" | |||
|
2223 | msgstr "" | |||
|
2224 | ||||
|
2225 | #: rhodecode/templates/files/files_annotate.html:12 | |||
|
2226 | msgid "annotate" | |||
|
2227 | msgstr "" | |||
|
2228 | ||||
|
2229 | #: rhodecode/templates/files/files_annotate.html:33 | |||
|
2230 | #: rhodecode/templates/files/files_browser.html:160 | |||
|
2231 | #: rhodecode/templates/files/files_source.html:2 | |||
|
2232 | msgid "Revision" | |||
|
2233 | msgstr "" | |||
|
2234 | ||||
|
2235 | #: rhodecode/templates/files/files_annotate.html:36 | |||
|
2236 | #: rhodecode/templates/files/files_browser.html:158 | |||
|
2237 | #: rhodecode/templates/files/files_source.html:7 | |||
|
2238 | msgid "Size" | |||
|
2239 | msgstr "" | |||
|
2240 | ||||
|
2241 | #: rhodecode/templates/files/files_annotate.html:38 | |||
|
2242 | #: rhodecode/templates/files/files_browser.html:159 | |||
|
2243 | #: rhodecode/templates/files/files_source.html:9 | |||
|
2244 | msgid "Mimetype" | |||
|
2245 | msgstr "" | |||
|
2246 | ||||
|
2247 | #: rhodecode/templates/files/files_annotate.html:41 | |||
|
2248 | msgid "show source" | |||
|
2249 | msgstr "" | |||
|
2250 | ||||
|
2251 | #: rhodecode/templates/files/files_annotate.html:43 | |||
|
2252 | #: rhodecode/templates/files/files_annotate.html:78 | |||
|
2253 | #: rhodecode/templates/files/files_source.html:14 | |||
|
2254 | #: rhodecode/templates/files/files_source.html:51 | |||
|
2255 | msgid "show as raw" | |||
|
2256 | msgstr "" | |||
|
2257 | ||||
|
2258 | #: rhodecode/templates/files/files_annotate.html:45 | |||
|
2259 | #: rhodecode/templates/files/files_source.html:16 | |||
|
2260 | msgid "download as raw" | |||
|
2261 | msgstr "" | |||
|
2262 | ||||
|
2263 | #: rhodecode/templates/files/files_annotate.html:54 | |||
|
2264 | #: rhodecode/templates/files/files_source.html:25 | |||
|
2265 | msgid "History" | |||
|
2266 | msgstr "" | |||
|
2267 | ||||
|
2268 | #: rhodecode/templates/files/files_annotate.html:73 | |||
|
2269 | #: rhodecode/templates/files/files_source.html:46 | |||
|
2270 | #, python-format | |||
|
2271 | msgid "Binary file (%s)" | |||
|
2272 | msgstr "" | |||
|
2273 | ||||
|
2274 | #: rhodecode/templates/files/files_annotate.html:78 | |||
|
2275 | #: rhodecode/templates/files/files_source.html:51 | |||
|
2276 | msgid "File is too big to display" | |||
|
2277 | msgstr "" | |||
|
2278 | ||||
|
2279 | #: rhodecode/templates/files/files_browser.html:13 | |||
|
2280 | msgid "view" | |||
|
2281 | msgstr "" | |||
|
2282 | ||||
|
2283 | #: rhodecode/templates/files/files_browser.html:14 | |||
|
2284 | msgid "previous revision" | |||
|
2285 | msgstr "" | |||
|
2286 | ||||
|
2287 | #: rhodecode/templates/files/files_browser.html:16 | |||
|
2288 | msgid "next revision" | |||
|
2289 | msgstr "" | |||
|
2290 | ||||
|
2291 | #: rhodecode/templates/files/files_browser.html:23 | |||
|
2292 | msgid "follow current branch" | |||
|
2293 | msgstr "" | |||
|
2294 | ||||
|
2295 | #: rhodecode/templates/files/files_browser.html:27 | |||
|
2296 | msgid "search file list" | |||
|
2297 | msgstr "" | |||
|
2298 | ||||
|
2299 | #: rhodecode/templates/files/files_browser.html:32 | |||
|
2300 | msgid "Loading file list..." | |||
|
2301 | msgstr "" | |||
|
2302 | ||||
|
2303 | #: rhodecode/templates/files/files_browser.html:111 | |||
|
2304 | msgid "search truncated" | |||
|
2305 | msgstr "" | |||
|
2306 | ||||
|
2307 | #: rhodecode/templates/files/files_browser.html:122 | |||
|
2308 | msgid "no matching files" | |||
|
2309 | msgstr "" | |||
|
2310 | ||||
|
2311 | #: rhodecode/templates/files/files_browser.html:161 | |||
|
2312 | msgid "Last modified" | |||
|
2313 | msgstr "" | |||
|
2314 | ||||
|
2315 | #: rhodecode/templates/files/files_browser.html:162 | |||
|
2316 | msgid "Last commiter" | |||
|
2317 | msgstr "" | |||
|
2318 | ||||
|
2319 | #: rhodecode/templates/files/files_edit.html:4 | |||
|
2320 | msgid "Edit file" | |||
|
2321 | msgstr "" | |||
|
2322 | ||||
|
2323 | #: rhodecode/templates/files/files_edit.html:19 | |||
|
2324 | msgid "edit file" | |||
|
2325 | msgstr "" | |||
|
2326 | ||||
|
2327 | #: rhodecode/templates/files/files_edit.html:45 | |||
|
2328 | #: rhodecode/templates/shortlog/shortlog_data.html:5 | |||
|
2329 | msgid "commit message" | |||
|
2330 | msgstr "" | |||
|
2331 | ||||
|
2332 | #: rhodecode/templates/files/files_edit.html:51 | |||
|
2333 | msgid "Commit changes" | |||
|
2334 | msgstr "" | |||
|
2335 | ||||
|
2336 | #: rhodecode/templates/files/files_source.html:12 | |||
|
2337 | msgid "show annotation" | |||
|
2338 | msgstr "" | |||
|
2339 | ||||
|
2340 | #: rhodecode/templates/files/files_source.html:153 | |||
|
2341 | msgid "Selection link" | |||
|
2342 | msgstr "" | |||
|
2343 | ||||
|
2344 | #: rhodecode/templates/followers/followers.html:13 | |||
|
2345 | msgid "followers" | |||
|
2346 | msgstr "" | |||
|
2347 | ||||
|
2348 | #: rhodecode/templates/followers/followers_data.html:12 | |||
|
2349 | msgid "Started following" | |||
|
2350 | msgstr "" | |||
|
2351 | ||||
|
2352 | #: rhodecode/templates/forks/forks.html:13 | |||
|
2353 | msgid "forks" | |||
|
2354 | msgstr "" | |||
|
2355 | ||||
|
2356 | #: rhodecode/templates/forks/forks_data.html:17 | |||
|
2357 | msgid "forked" | |||
|
2358 | msgstr "" | |||
|
2359 | ||||
|
2360 | #: rhodecode/templates/forks/forks_data.html:34 | |||
|
2361 | msgid "There are no forks yet" | |||
|
2362 | msgstr "" | |||
|
2363 | ||||
|
2364 | #: rhodecode/templates/journal/journal.html:34 | |||
|
2365 | msgid "Following" | |||
|
2366 | msgstr "" | |||
|
2367 | ||||
|
2368 | #: rhodecode/templates/journal/journal.html:41 | |||
|
2369 | msgid "following user" | |||
|
2370 | msgstr "" | |||
|
2371 | ||||
|
2372 | #: rhodecode/templates/journal/journal.html:41 | |||
|
2373 | msgid "user" | |||
|
2374 | msgstr "" | |||
|
2375 | ||||
|
2376 | #: rhodecode/templates/journal/journal.html:65 | |||
|
2377 | msgid "You are not following any users or repositories" | |||
|
2378 | msgstr "" | |||
|
2379 | ||||
|
2380 | #: rhodecode/templates/journal/journal_data.html:46 | |||
|
2381 | msgid "No entries yet" | |||
|
2382 | msgstr "" | |||
|
2383 | ||||
|
2384 | #: rhodecode/templates/journal/public_journal.html:17 | |||
|
2385 | msgid "Public Journal" | |||
|
2386 | msgstr "" | |||
|
2387 | ||||
|
2388 | #: rhodecode/templates/search/search.html:7 | |||
|
2389 | #: rhodecode/templates/search/search.html:26 | |||
|
2390 | msgid "in repository: " | |||
|
2391 | msgstr "" | |||
|
2392 | ||||
|
2393 | #: rhodecode/templates/search/search.html:9 | |||
|
2394 | #: rhodecode/templates/search/search.html:28 | |||
|
2395 | msgid "in all repositories" | |||
|
2396 | msgstr "" | |||
|
2397 | ||||
|
2398 | #: rhodecode/templates/search/search.html:42 | |||
|
2399 | msgid "Search term" | |||
|
2400 | msgstr "" | |||
|
2401 | ||||
|
2402 | #: rhodecode/templates/search/search.html:54 | |||
|
2403 | msgid "Search in" | |||
|
2404 | msgstr "" | |||
|
2405 | ||||
|
2406 | #: rhodecode/templates/search/search.html:57 | |||
|
2407 | msgid "File contents" | |||
|
2408 | msgstr "" | |||
|
2409 | ||||
|
2410 | #: rhodecode/templates/search/search.html:59 | |||
|
2411 | msgid "File names" | |||
|
2412 | msgstr "" | |||
|
2413 | ||||
|
2414 | #: rhodecode/templates/search/search_content.html:20 | |||
|
2415 | #: rhodecode/templates/search/search_path.html:15 | |||
|
2416 | msgid "Permission denied" | |||
|
2417 | msgstr "" | |||
|
2418 | ||||
|
2419 | #: rhodecode/templates/settings/repo_fork.html:5 | |||
|
2420 | msgid "Fork" | |||
|
2421 | msgstr "" | |||
|
2422 | ||||
|
2423 | #: rhodecode/templates/settings/repo_fork.html:31 | |||
|
2424 | msgid "Fork name" | |||
|
2425 | msgstr "" | |||
|
2426 | ||||
|
2427 | #: rhodecode/templates/settings/repo_fork.html:55 | |||
|
2428 | msgid "fork this repository" | |||
|
2429 | msgstr "" | |||
|
2430 | ||||
|
2431 | #: rhodecode/templates/shortlog/shortlog.html:5 | |||
|
2432 | #: rhodecode/templates/summary/summary.html:666 | |||
|
2433 | msgid "Shortlog" | |||
|
2434 | msgstr "" | |||
|
2435 | ||||
|
2436 | #: rhodecode/templates/shortlog/shortlog.html:14 | |||
|
2437 | msgid "shortlog" | |||
|
2438 | msgstr "" | |||
|
2439 | ||||
|
2440 | #: rhodecode/templates/shortlog/shortlog_data.html:6 | |||
|
2441 | msgid "age" | |||
|
2442 | msgstr "" | |||
|
2443 | ||||
|
2444 | #: rhodecode/templates/summary/summary.html:12 | |||
|
2445 | msgid "summary" | |||
|
2446 | msgstr "" | |||
|
2447 | ||||
|
2448 | #: rhodecode/templates/summary/summary.html:79 | |||
|
2449 | msgid "remote clone" | |||
|
2450 | msgstr "" | |||
|
2451 | ||||
|
2452 | #: rhodecode/templates/summary/summary.html:121 | |||
|
2453 | msgid "by" | |||
|
2454 | msgstr "" | |||
|
2455 | ||||
|
2456 | #: rhodecode/templates/summary/summary.html:128 | |||
|
2457 | msgid "Clone url" | |||
|
2458 | msgstr "" | |||
|
2459 | ||||
|
2460 | #: rhodecode/templates/summary/summary.html:137 | |||
|
2461 | msgid "Trending source files" | |||
|
2462 | msgstr "" | |||
|
2463 | ||||
|
2464 | #: rhodecode/templates/summary/summary.html:146 | |||
|
2465 | msgid "Download" | |||
|
2466 | msgstr "" | |||
|
2467 | ||||
|
2468 | #: rhodecode/templates/summary/summary.html:150 | |||
|
2469 | msgid "There are no downloads yet" | |||
|
2470 | msgstr "" | |||
|
2471 | ||||
|
2472 | #: rhodecode/templates/summary/summary.html:152 | |||
|
2473 | msgid "Downloads are disabled for this repository" | |||
|
2474 | msgstr "" | |||
|
2475 | ||||
|
2476 | #: rhodecode/templates/summary/summary.html:154 | |||
|
2477 | #: rhodecode/templates/summary/summary.html:320 | |||
|
2478 | msgid "enable" | |||
|
2479 | msgstr "" | |||
|
2480 | ||||
|
2481 | #: rhodecode/templates/summary/summary.html:162 | |||
|
2482 | #: rhodecode/templates/summary/summary.html:297 | |||
|
2483 | #, python-format | |||
|
2484 | msgid "Download %s as %s" | |||
|
2485 | msgstr "" | |||
|
2486 | ||||
|
2487 | #: rhodecode/templates/summary/summary.html:168 | |||
|
2488 | msgid "Check this to download archive with subrepos" | |||
|
2489 | msgstr "" | |||
|
2490 | ||||
|
2491 | #: rhodecode/templates/summary/summary.html:168 | |||
|
2492 | msgid "with subrepos" | |||
|
2493 | msgstr "" | |||
|
2494 | ||||
|
2495 | #: rhodecode/templates/summary/summary.html:176 | |||
|
2496 | msgid "Feeds" | |||
|
2497 | msgstr "" | |||
|
2498 | ||||
|
2499 | #: rhodecode/templates/summary/summary.html:257 | |||
|
2500 | #: rhodecode/templates/summary/summary.html:684 | |||
|
2501 | #: rhodecode/templates/summary/summary.html:695 | |||
|
2502 | msgid "show more" | |||
|
2503 | msgstr "" | |||
|
2504 | ||||
|
2505 | #: rhodecode/templates/summary/summary.html:312 | |||
|
2506 | msgid "Commit activity by day / author" | |||
|
2507 | msgstr "" | |||
|
2508 | ||||
|
2509 | #: rhodecode/templates/summary/summary.html:324 | |||
|
2510 | msgid "Loaded in" | |||
|
2511 | msgstr "" | |||
|
2512 | ||||
|
2513 | #: rhodecode/templates/summary/summary.html:603 | |||
|
2514 | msgid "commits" | |||
|
2515 | msgstr "" | |||
|
2516 | ||||
|
2517 | #: rhodecode/templates/summary/summary.html:604 | |||
|
2518 | msgid "files added" | |||
|
2519 | msgstr "" | |||
|
2520 | ||||
|
2521 | #: rhodecode/templates/summary/summary.html:605 | |||
|
2522 | msgid "files changed" | |||
|
2523 | msgstr "" | |||
|
2524 | ||||
|
2525 | #: rhodecode/templates/summary/summary.html:606 | |||
|
2526 | msgid "files removed" | |||
|
2527 | msgstr "" | |||
|
2528 | ||||
|
2529 | #: rhodecode/templates/summary/summary.html:610 | |||
|
2530 | msgid "file added" | |||
|
2531 | msgstr "" | |||
|
2532 | ||||
|
2533 | #: rhodecode/templates/summary/summary.html:611 | |||
|
2534 | msgid "file changed" | |||
|
2535 | msgstr "" | |||
|
2536 | ||||
|
2537 | #: rhodecode/templates/summary/summary.html:612 | |||
|
2538 | msgid "file removed" | |||
|
2539 | msgstr "" | |||
|
2540 |
@@ -1,15 +1,28 b'' | |||||
1 | #goto pylons folder app (the on holding .ini files) |
|
1 | ########################## | |
|
2 | # to create new language # | |||
|
3 | ########################## | |||
2 |
|
4 | |||
3 | # to create new |
|
5 | #this needs to be done on source codes, preferable default/stable branches | |
|
6 | ||||
4 | python setup.py extract_messages -> get messages from project |
|
7 | python setup.py extract_messages -> get messages from project | |
5 | python setup.py init_catalog -l pl -> create a language directory |
|
8 | python setup.py init_catalog -l pl -> create a language directory for <pl> lang | |
6 | edit the new po file with poedit |
|
9 | edit the new po file with poedit or any other editor | |
7 | python setup.py compile_catalog -> create translation files |
|
10 | python setup.py compile_catalog -> create translation files | |
8 | #done |
|
11 | ||
9 |
|
12 | ############# | ||
10 |
|
|
13 | # to update # | |
|
14 | ############# | |||
|
15 | ||||
11 | python setup.py extract_messages -> get messages from project |
|
16 | python setup.py extract_messages -> get messages from project | |
12 | python setup.py update_catalog -> to update the translations |
|
17 | python setup.py update_catalog -> to update the translations | |
13 | edit the new updated po file with poedit |
|
18 | edit the new updated po file with poedit | |
14 | python setup.py compile_catalog -> create translation files |
|
19 | python setup.py compile_catalog -> create translation files | |
15 | #done No newline at end of file |
|
20 | ||
|
21 | ||||
|
22 | ################### | |||
|
23 | # change language # | |||
|
24 | ################### | |||
|
25 | ||||
|
26 | `lang=en` | |||
|
27 | ||||
|
28 | in the .ini file No newline at end of file |
This diff has been collapsed as it changes many lines, (2073 lines changed) Show them Hide them | |||||
@@ -6,273 +6,477 b'' | |||||
6 | #, fuzzy |
|
6 | #, fuzzy | |
7 | msgid "" |
|
7 | msgid "" | |
8 | msgstr "" |
|
8 | msgstr "" | |
9 |
"Project-Id-Version: RhodeCode 1. |
|
9 | "Project-Id-Version: RhodeCode 1.2.0\n" | |
10 | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" |
|
10 | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | |
11 |
"POT-Creation-Date: 2011-0 |
|
11 | "POT-Creation-Date: 2011-09-14 15:50-0300\n" | |
12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
|
12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
13 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
|
13 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
14 | "Language-Team: LANGUAGE <LL@li.org>\n" |
|
14 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
15 | "MIME-Version: 1.0\n" |
|
15 | "MIME-Version: 1.0\n" | |
16 | "Content-Type: text/plain; charset=utf-8\n" |
|
16 | "Content-Type: text/plain; charset=utf-8\n" | |
17 | "Content-Transfer-Encoding: 8bit\n" |
|
17 | "Content-Transfer-Encoding: 8bit\n" | |
18 |
"Generated-By: Babel 0.9. |
|
18 | "Generated-By: Babel 0.9.6\n" | |
19 |
|
19 | |||
20 |
#: rhodecode/controllers/changeset.py:8 |
|
20 | #: rhodecode/controllers/changeset.py:108 rhodecode/controllers/changeset.py:149 | |
21 |
#: rhodecode/controllers/changeset.py: |
|
21 | #: rhodecode/controllers/changeset.py:216 rhodecode/controllers/changeset.py:229 | |
22 | msgid "binary file" |
|
22 | msgid "binary file" | |
23 | msgstr "" |
|
23 | msgstr "" | |
24 |
|
24 | |||
25 |
#: rhodecode/controllers/changeset.py: |
|
25 | #: rhodecode/controllers/changeset.py:123 rhodecode/controllers/changeset.py:168 | |
26 | msgid "Changeset is to big and was cut off, see raw changeset instead" |
|
26 | msgid "Changeset is to big and was cut off, see raw changeset instead" | |
27 | msgstr "" |
|
27 | msgstr "" | |
28 |
|
28 | |||
29 |
#: rhodecode/controllers/ |
|
29 | #: rhodecode/controllers/changeset.py:159 | |
|
30 | msgid "Diff is to big and was cut off, see raw diff instead" | |||
|
31 | msgstr "" | |||
|
32 | ||||
|
33 | #: rhodecode/controllers/error.py:69 | |||
30 | msgid "Home page" |
|
34 | msgid "Home page" | |
31 | msgstr "" |
|
35 | msgstr "" | |
32 |
|
36 | |||
33 |
#: rhodecode/controllers/error.py: |
|
37 | #: rhodecode/controllers/error.py:98 | |
34 | msgid "The request could not be understood by the server due to malformed syntax." |
|
38 | msgid "The request could not be understood by the server due to malformed syntax." | |
35 | msgstr "" |
|
39 | msgstr "" | |
36 |
|
40 | |||
37 |
#: rhodecode/controllers/error.py:10 |
|
41 | #: rhodecode/controllers/error.py:101 | |
38 | msgid "Unauthorized access to resource" |
|
42 | msgid "Unauthorized access to resource" | |
39 | msgstr "" |
|
43 | msgstr "" | |
40 |
|
44 | |||
41 |
#: rhodecode/controllers/error.py:10 |
|
45 | #: rhodecode/controllers/error.py:103 | |
42 | msgid "You don't have permission to view this page" |
|
46 | msgid "You don't have permission to view this page" | |
43 | msgstr "" |
|
47 | msgstr "" | |
44 |
|
48 | |||
45 |
#: rhodecode/controllers/error.py:10 |
|
49 | #: rhodecode/controllers/error.py:105 | |
46 | msgid "The resource could not be found" |
|
50 | msgid "The resource could not be found" | |
47 | msgstr "" |
|
51 | msgstr "" | |
48 |
|
52 | |||
49 |
#: rhodecode/controllers/error.py:10 |
|
53 | #: rhodecode/controllers/error.py:107 | |
50 | msgid "" |
|
54 | msgid "" | |
51 | "The server encountered an unexpected condition which prevented it from " |
|
55 | "The server encountered an unexpected condition which prevented it from " | |
52 | "fulfilling the request." |
|
56 | "fulfilling the request." | |
53 | msgstr "" |
|
57 | msgstr "" | |
54 |
|
58 | |||
55 |
#: rhodecode/controllers/f |
|
59 | #: rhodecode/controllers/feed.py:48 | |
|
60 | #, python-format | |||
|
61 | msgid "Changes on %s repository" | |||
|
62 | msgstr "" | |||
|
63 | ||||
|
64 | #: rhodecode/controllers/feed.py:49 | |||
|
65 | #, python-format | |||
|
66 | msgid "%s %s feed" | |||
|
67 | msgstr "" | |||
|
68 | ||||
|
69 | #: rhodecode/controllers/files.py:72 | |||
56 | msgid "There are no files yet" |
|
70 | msgid "There are no files yet" | |
57 | msgstr "" |
|
71 | msgstr "" | |
58 |
|
72 | |||
59 |
#: rhodecode/controllers/files.py:2 |
|
73 | #: rhodecode/controllers/files.py:262 | |
60 | msgid "binary file changed" |
|
74 | #, python-format | |
61 | msgstr "" |
|
75 | msgid "Edited %s via RhodeCode" | |
62 |
|
76 | msgstr "" | ||
63 | #: rhodecode/controllers/files.py:233 rhodecode/controllers/files.py:241 |
|
77 | ||
64 | msgid "Diff is to big to display" |
|
78 | #: rhodecode/controllers/files.py:267 rhodecode/templates/files/file_diff.html:40 | |
65 | msgstr "" |
|
79 | msgid "No changes" | |
66 |
|
80 | msgstr "" | ||
67 | #: rhodecode/controllers/files.py:235 rhodecode/controllers/files.py:243 |
|
81 | ||
|
82 | #: rhodecode/controllers/files.py:278 | |||
|
83 | #, python-format | |||
|
84 | msgid "Successfully committed to %s" | |||
|
85 | msgstr "" | |||
|
86 | ||||
|
87 | #: rhodecode/controllers/files.py:283 | |||
|
88 | msgid "Error occurred during commit" | |||
|
89 | msgstr "" | |||
|
90 | ||||
|
91 | #: rhodecode/controllers/files.py:308 | |||
|
92 | msgid "downloads disabled" | |||
|
93 | msgstr "" | |||
|
94 | ||||
|
95 | #: rhodecode/controllers/files.py:313 | |||
|
96 | #, python-format | |||
|
97 | msgid "Unknown revision %s" | |||
|
98 | msgstr "" | |||
|
99 | ||||
|
100 | #: rhodecode/controllers/files.py:315 | |||
|
101 | msgid "Empty repository" | |||
|
102 | msgstr "" | |||
|
103 | ||||
|
104 | #: rhodecode/controllers/files.py:317 | |||
|
105 | msgid "Unknown archive type" | |||
|
106 | msgstr "" | |||
|
107 | ||||
|
108 | #: rhodecode/controllers/files.py:385 rhodecode/controllers/files.py:398 | |||
68 | msgid "Binary file" |
|
109 | msgid "Binary file" | |
69 | msgstr "" |
|
110 | msgstr "" | |
70 |
|
111 | |||
71 |
#: rhodecode/controllers/files.py: |
|
112 | #: rhodecode/controllers/files.py:417 | |
|
113 | #: rhodecode/templates/changeset/changeset_range.html:4 | |||
|
114 | #: rhodecode/templates/changeset/changeset_range.html:12 | |||
|
115 | #: rhodecode/templates/changeset/changeset_range.html:29 | |||
72 | msgid "Changesets" |
|
116 | msgid "Changesets" | |
73 | msgstr "" |
|
117 | msgstr "" | |
74 |
|
118 | |||
75 |
#: rhodecode/controllers/files.py: |
|
119 | #: rhodecode/controllers/files.py:418 rhodecode/controllers/summary.py:175 | |
76 |
#: rhodecode/templates/ |
|
120 | #: rhodecode/templates/branches/branches.html:5 | |
|
121 | #: rhodecode/templates/summary/summary.html:690 | |||
77 | msgid "Branches" |
|
122 | msgid "Branches" | |
78 | msgstr "" |
|
123 | msgstr "" | |
79 |
|
124 | |||
80 |
#: rhodecode/controllers/files.py: |
|
125 | #: rhodecode/controllers/files.py:419 rhodecode/controllers/summary.py:176 | |
|
126 | #: rhodecode/templates/summary/summary.html:679 | |||
81 | #: rhodecode/templates/tags/tags.html:5 |
|
127 | #: rhodecode/templates/tags/tags.html:5 | |
82 | msgid "Tags" |
|
128 | msgid "Tags" | |
83 | msgstr "" |
|
129 | msgstr "" | |
84 |
|
130 | |||
85 |
#: rhodecode/controllers/ |
|
131 | #: rhodecode/controllers/journal.py:50 | |
|
132 | #, python-format | |||
|
133 | msgid "%s public journal %s feed" | |||
|
134 | msgstr "" | |||
|
135 | ||||
|
136 | #: rhodecode/controllers/journal.py:178 rhodecode/controllers/journal.py:212 | |||
|
137 | #: rhodecode/templates/admin/repos/repo_edit.html:171 | |||
|
138 | #: rhodecode/templates/base/base.html:50 | |||
|
139 | msgid "Public journal" | |||
|
140 | msgstr "" | |||
|
141 | ||||
|
142 | #: rhodecode/controllers/login.py:111 | |||
86 | msgid "You have successfully registered into rhodecode" |
|
143 | msgid "You have successfully registered into rhodecode" | |
87 | msgstr "" |
|
144 | msgstr "" | |
88 |
|
145 | |||
89 |
#: rhodecode/controllers/login.py:13 |
|
146 | #: rhodecode/controllers/login.py:133 | |
90 |
msgid "Your |
|
147 | msgid "Your password reset link was sent" | |
91 | msgstr "" |
|
148 | msgstr "" | |
92 |
|
149 | |||
93 |
#: rhodecode/controllers/ |
|
150 | #: rhodecode/controllers/login.py:155 | |
|
151 | msgid "Your password reset was successful, new password has been sent to your email" | |||
|
152 | msgstr "" | |||
|
153 | ||||
|
154 | #: rhodecode/controllers/search.py:109 | |||
94 | msgid "Invalid search query. Try quoting it." |
|
155 | msgid "Invalid search query. Try quoting it." | |
95 | msgstr "" |
|
156 | msgstr "" | |
96 |
|
157 | |||
97 |
#: rhodecode/controllers/search.py:11 |
|
158 | #: rhodecode/controllers/search.py:114 | |
98 | msgid "There is no index to search in. Please run whoosh indexer" |
|
159 | msgid "There is no index to search in. Please run whoosh indexer" | |
99 | msgstr "" |
|
160 | msgstr "" | |
100 |
|
161 | |||
101 | #: rhodecode/controllers/settings.py:59 rhodecode/controllers/settings.py:152 |
|
162 | #: rhodecode/controllers/search.py:118 | |
|
163 | msgid "An error occurred during this search operation" | |||
|
164 | msgstr "" | |||
|
165 | ||||
|
166 | #: rhodecode/controllers/settings.py:61 rhodecode/controllers/settings.py:171 | |||
102 | #, python-format |
|
167 | #, python-format | |
103 | msgid "" |
|
168 | msgid "" | |
104 | "%s repository is not mapped to db perhaps it was created or renamed from the " |
|
169 | "%s repository is not mapped to db perhaps it was created or renamed from the " | |
105 | "file system please run the application again in order to rescan repositories" |
|
170 | "file system please run the application again in order to rescan repositories" | |
106 | msgstr "" |
|
171 | msgstr "" | |
107 |
|
172 | |||
108 |
#: rhodecode/controllers/settings.py:9 |
|
173 | #: rhodecode/controllers/settings.py:109 rhodecode/controllers/admin/repos.py:239 | |
109 | #, python-format |
|
174 | #, python-format | |
110 | msgid "Repository %s updated successfully" |
|
175 | msgid "Repository %s updated successfully" | |
111 | msgstr "" |
|
176 | msgstr "" | |
112 |
|
177 | |||
113 |
#: rhodecode/controllers/settings.py:1 |
|
178 | #: rhodecode/controllers/settings.py:126 rhodecode/controllers/admin/repos.py:257 | |
114 | #, python-format |
|
179 | #, python-format | |
115 | msgid "error occurred during update of repository %s" |
|
180 | msgid "error occurred during update of repository %s" | |
116 | msgstr "" |
|
181 | msgstr "" | |
117 |
|
182 | |||
118 |
#: rhodecode/controllers/settings.py:1 |
|
183 | #: rhodecode/controllers/settings.py:144 rhodecode/controllers/admin/repos.py:275 | |
119 | #, python-format |
|
184 | #, python-format | |
120 | msgid "" |
|
185 | msgid "" | |
121 | "%s repository is not mapped to db perhaps it was moved or renamed from the " |
|
186 | "%s repository is not mapped to db perhaps it was moved or renamed from the " | |
122 | "filesystem please run the application again in order to rescan repositories" |
|
187 | "filesystem please run the application again in order to rescan repositories" | |
123 | msgstr "" |
|
188 | msgstr "" | |
124 |
|
189 | |||
125 |
#: rhodecode/controllers/settings.py:1 |
|
190 | #: rhodecode/controllers/settings.py:156 rhodecode/controllers/admin/repos.py:287 | |
126 | #, python-format |
|
191 | #, python-format | |
127 | msgid "deleted repository %s" |
|
192 | msgid "deleted repository %s" | |
128 | msgstr "" |
|
193 | msgstr "" | |
129 |
|
194 | |||
130 |
#: rhodecode/controllers/settings.py:1 |
|
195 | #: rhodecode/controllers/settings.py:159 rhodecode/controllers/admin/repos.py:297 | |
|
196 | #: rhodecode/controllers/admin/repos.py:303 | |||
131 | #, python-format |
|
197 | #, python-format | |
132 | msgid "An error occurred during deletion of %s" |
|
198 | msgid "An error occurred during deletion of %s" | |
133 | msgstr "" |
|
199 | msgstr "" | |
134 |
|
200 | |||
135 |
#: rhodecode/controllers/settings.py:1 |
|
201 | #: rhodecode/controllers/settings.py:193 | |
136 | #, python-format |
|
202 | #, python-format | |
137 | msgid "forked %s repository as %s" |
|
203 | msgid "forked %s repository as %s" | |
138 | msgstr "" |
|
204 | msgstr "" | |
139 |
|
205 | |||
140 |
#: rhodecode/controllers/s |
|
206 | #: rhodecode/controllers/settings.py:211 | |
|
207 | #, python-format | |||
|
208 | msgid "An error occurred during repository forking %s" | |||
|
209 | msgstr "" | |||
|
210 | ||||
|
211 | #: rhodecode/controllers/summary.py:123 | |||
141 | msgid "No data loaded yet" |
|
212 | msgid "No data loaded yet" | |
142 | msgstr "" |
|
213 | msgstr "" | |
143 |
|
214 | |||
144 |
#: rhodecode/controllers/summary.py:1 |
|
215 | #: rhodecode/controllers/summary.py:126 | |
145 |
msgid "Statistics |
|
216 | msgid "Statistics are disabled for this repository" | |
146 | msgstr "" |
|
217 | msgstr "" | |
147 |
|
218 | |||
148 |
#: rhodecode/controllers/admin/ldap_settings.py: |
|
219 | #: rhodecode/controllers/admin/ldap_settings.py:49 | |
|
220 | msgid "BASE" | |||
|
221 | msgstr "" | |||
|
222 | ||||
|
223 | #: rhodecode/controllers/admin/ldap_settings.py:50 | |||
|
224 | msgid "ONELEVEL" | |||
|
225 | msgstr "" | |||
|
226 | ||||
|
227 | #: rhodecode/controllers/admin/ldap_settings.py:51 | |||
|
228 | msgid "SUBTREE" | |||
|
229 | msgstr "" | |||
|
230 | ||||
|
231 | #: rhodecode/controllers/admin/ldap_settings.py:55 | |||
|
232 | msgid "NEVER" | |||
|
233 | msgstr "" | |||
|
234 | ||||
|
235 | #: rhodecode/controllers/admin/ldap_settings.py:56 | |||
|
236 | msgid "ALLOW" | |||
|
237 | msgstr "" | |||
|
238 | ||||
|
239 | #: rhodecode/controllers/admin/ldap_settings.py:57 | |||
|
240 | msgid "TRY" | |||
|
241 | msgstr "" | |||
|
242 | ||||
|
243 | #: rhodecode/controllers/admin/ldap_settings.py:58 | |||
|
244 | msgid "DEMAND" | |||
|
245 | msgstr "" | |||
|
246 | ||||
|
247 | #: rhodecode/controllers/admin/ldap_settings.py:59 | |||
|
248 | msgid "HARD" | |||
|
249 | msgstr "" | |||
|
250 | ||||
|
251 | #: rhodecode/controllers/admin/ldap_settings.py:63 | |||
|
252 | msgid "No encryption" | |||
|
253 | msgstr "" | |||
|
254 | ||||
|
255 | #: rhodecode/controllers/admin/ldap_settings.py:64 | |||
|
256 | msgid "LDAPS connection" | |||
|
257 | msgstr "" | |||
|
258 | ||||
|
259 | #: rhodecode/controllers/admin/ldap_settings.py:65 | |||
|
260 | msgid "START_TLS on LDAP connection" | |||
|
261 | msgstr "" | |||
|
262 | ||||
|
263 | #: rhodecode/controllers/admin/ldap_settings.py:115 | |||
149 | msgid "Ldap settings updated successfully" |
|
264 | msgid "Ldap settings updated successfully" | |
150 | msgstr "" |
|
265 | msgstr "" | |
151 |
|
266 | |||
152 |
#: rhodecode/controllers/admin/ldap_settings.py: |
|
267 | #: rhodecode/controllers/admin/ldap_settings.py:120 | |
153 | msgid "Unable to activate ldap. The \"python-ldap\" library is missing." |
|
268 | msgid "Unable to activate ldap. The \"python-ldap\" library is missing." | |
154 | msgstr "" |
|
269 | msgstr "" | |
155 |
|
270 | |||
156 |
#: rhodecode/controllers/admin/ldap_settings.py:1 |
|
271 | #: rhodecode/controllers/admin/ldap_settings.py:134 | |
157 | msgid "error occurred during update of ldap settings" |
|
272 | msgid "error occurred during update of ldap settings" | |
158 | msgstr "" |
|
273 | msgstr "" | |
159 |
|
274 | |||
|
275 | #: rhodecode/controllers/admin/permissions.py:56 | |||
|
276 | msgid "None" | |||
|
277 | msgstr "" | |||
|
278 | ||||
|
279 | #: rhodecode/controllers/admin/permissions.py:57 | |||
|
280 | msgid "Read" | |||
|
281 | msgstr "" | |||
|
282 | ||||
|
283 | #: rhodecode/controllers/admin/permissions.py:58 | |||
|
284 | msgid "Write" | |||
|
285 | msgstr "" | |||
|
286 | ||||
160 | #: rhodecode/controllers/admin/permissions.py:59 |
|
287 | #: rhodecode/controllers/admin/permissions.py:59 | |
161 | msgid "None" |
|
|||
162 | msgstr "" |
|
|||
163 |
|
||||
164 | #: rhodecode/controllers/admin/permissions.py:60 |
|
|||
165 | msgid "Read" |
|
|||
166 | msgstr "" |
|
|||
167 |
|
||||
168 | #: rhodecode/controllers/admin/permissions.py:61 |
|
|||
169 | msgid "Write" |
|
|||
170 | msgstr "" |
|
|||
171 |
|
||||
172 | #: rhodecode/controllers/admin/permissions.py:62 |
|
|||
173 | #: rhodecode/templates/admin/ldap/ldap.html:9 |
|
288 | #: rhodecode/templates/admin/ldap/ldap.html:9 | |
174 | #: rhodecode/templates/admin/permissions/permissions.html:9 |
|
289 | #: rhodecode/templates/admin/permissions/permissions.html:9 | |
175 | #: rhodecode/templates/admin/repos/repo_add.html:9 |
|
290 | #: rhodecode/templates/admin/repos/repo_add.html:9 | |
176 | #: rhodecode/templates/admin/repos/repo_edit.html:9 |
|
291 | #: rhodecode/templates/admin/repos/repo_edit.html:9 | |
177 | #: rhodecode/templates/admin/repos/repos.html:10 |
|
292 | #: rhodecode/templates/admin/repos/repos.html:10 | |
|
293 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:8 | |||
|
294 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:8 | |||
|
295 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10 | |||
|
296 | #: rhodecode/templates/admin/settings/hooks.html:9 | |||
178 | #: rhodecode/templates/admin/settings/settings.html:9 |
|
297 | #: rhodecode/templates/admin/settings/settings.html:9 | |
179 | #: rhodecode/templates/admin/users/user_add.html:8 |
|
298 | #: rhodecode/templates/admin/users/user_add.html:8 | |
180 | #: rhodecode/templates/admin/users/user_edit.html:9 |
|
299 | #: rhodecode/templates/admin/users/user_edit.html:9 | |
181 |
#: rhodecode/templates/admin/users/user_edit.html: |
|
300 | #: rhodecode/templates/admin/users/user_edit.html:110 | |
182 | #: rhodecode/templates/admin/users/users.html:9 |
|
301 | #: rhodecode/templates/admin/users/users.html:9 | |
183 | #: rhodecode/templates/base/base.html:209 rhodecode/templates/base/base.html:297 |
|
302 | #: rhodecode/templates/admin/users_groups/users_group_add.html:8 | |
184 | #: rhodecode/templates/base/base.html:299 rhodecode/templates/base/base.html:301 |
|
303 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:9 | |
|
304 | #: rhodecode/templates/admin/users_groups/users_groups.html:9 | |||
|
305 | #: rhodecode/templates/base/base.html:279 rhodecode/templates/base/base.html:366 | |||
|
306 | #: rhodecode/templates/base/base.html:368 rhodecode/templates/base/base.html:370 | |||
185 | msgid "Admin" |
|
307 | msgid "Admin" | |
186 | msgstr "" |
|
308 | msgstr "" | |
187 |
|
309 | |||
188 |
#: rhodecode/controllers/admin/permissions.py:6 |
|
310 | #: rhodecode/controllers/admin/permissions.py:62 | |
189 | msgid "disabled" |
|
311 | msgid "disabled" | |
190 | msgstr "" |
|
312 | msgstr "" | |
191 |
|
313 | |||
192 |
#: rhodecode/controllers/admin/permissions.py:6 |
|
314 | #: rhodecode/controllers/admin/permissions.py:64 | |
193 | msgid "allowed with manual account activation" |
|
315 | msgid "allowed with manual account activation" | |
194 | msgstr "" |
|
316 | msgstr "" | |
195 |
|
317 | |||
|
318 | #: rhodecode/controllers/admin/permissions.py:66 | |||
|
319 | msgid "allowed with automatic account activation" | |||
|
320 | msgstr "" | |||
|
321 | ||||
|
322 | #: rhodecode/controllers/admin/permissions.py:68 | |||
|
323 | msgid "Disabled" | |||
|
324 | msgstr "" | |||
|
325 | ||||
196 | #: rhodecode/controllers/admin/permissions.py:69 |
|
326 | #: rhodecode/controllers/admin/permissions.py:69 | |
197 | msgid "allowed with automatic account activation" |
|
|||
198 | msgstr "" |
|
|||
199 |
|
||||
200 | #: rhodecode/controllers/admin/permissions.py:71 |
|
|||
201 | msgid "Disabled" |
|
|||
202 | msgstr "" |
|
|||
203 |
|
||||
204 | #: rhodecode/controllers/admin/permissions.py:72 |
|
|||
205 | msgid "Enabled" |
|
327 | msgid "Enabled" | |
206 | msgstr "" |
|
328 | msgstr "" | |
207 |
|
329 | |||
208 |
#: rhodecode/controllers/admin/permissions.py:10 |
|
330 | #: rhodecode/controllers/admin/permissions.py:102 | |
209 | msgid "Default permissions updated successfully" |
|
331 | msgid "Default permissions updated successfully" | |
210 | msgstr "" |
|
332 | msgstr "" | |
211 |
|
333 | |||
212 |
#: rhodecode/controllers/admin/permissions.py:1 |
|
334 | #: rhodecode/controllers/admin/permissions.py:119 | |
213 | msgid "error occurred during update of permissions" |
|
335 | msgid "error occurred during update of permissions" | |
214 | msgstr "" |
|
336 | msgstr "" | |
215 |
|
337 | |||
216 |
#: rhodecode/controllers/admin/repos.py: |
|
338 | #: rhodecode/controllers/admin/repos.py:96 | |
217 | #, python-format |
|
|||
218 | msgid "created repository %s" |
|
|||
219 | msgstr "" |
|
|||
220 |
|
||||
221 | #: rhodecode/controllers/admin/repos.py:110 |
|
|||
222 | #, python-format |
|
|||
223 | msgid "error occurred during creation of repository %s" |
|
|||
224 | msgstr "" |
|
|||
225 |
|
||||
226 | #: rhodecode/controllers/admin/repos.py:225 |
|
|||
227 | msgid "An error occurred during deletion of repository user" |
|
|||
228 | msgstr "" |
|
|||
229 |
|
||||
230 | #: rhodecode/controllers/admin/repos.py:240 |
|
|||
231 | msgid "An error occurred during deletion of repository stats" |
|
|||
232 | msgstr "" |
|
|||
233 |
|
||||
234 | #: rhodecode/controllers/admin/repos.py:254 |
|
|||
235 | msgid "An error occurred during cache invalidation" |
|
|||
236 | msgstr "" |
|
|||
237 |
|
||||
238 | #: rhodecode/controllers/admin/repos.py:272 |
|
|||
239 | #, python-format |
|
339 | #, python-format | |
240 | msgid "" |
|
340 | msgid "" | |
241 | "%s repository is not mapped to db perhaps it was created or renamed from the " |
|
341 | "%s repository is not mapped to db perhaps it was created or renamed from the " | |
242 | "filesystem please run the application again in order to rescan repositories" |
|
342 | "filesystem please run the application again in order to rescan repositories" | |
243 | msgstr "" |
|
343 | msgstr "" | |
244 |
|
344 | |||
245 |
#: rhodecode/controllers/admin/ |
|
345 | #: rhodecode/controllers/admin/repos.py:172 | |
246 | msgid "Repositories successfully rescanned" |
|
346 | #, python-format | |
247 | msgstr "" |
|
347 | msgid "created repository %s from %s" | |
248 |
|
348 | msgstr "" | ||
249 | #: rhodecode/controllers/admin/settings.py:119 |
|
349 | ||
|
350 | #: rhodecode/controllers/admin/repos.py:176 | |||
|
351 | #, python-format | |||
|
352 | msgid "created repository %s" | |||
|
353 | msgstr "" | |||
|
354 | ||||
|
355 | #: rhodecode/controllers/admin/repos.py:205 | |||
|
356 | #, python-format | |||
|
357 | msgid "error occurred during creation of repository %s" | |||
|
358 | msgstr "" | |||
|
359 | ||||
|
360 | #: rhodecode/controllers/admin/repos.py:292 | |||
|
361 | #, python-format | |||
|
362 | msgid "Cannot delete %s it still contains attached forks" | |||
|
363 | msgstr "" | |||
|
364 | ||||
|
365 | #: rhodecode/controllers/admin/repos.py:320 | |||
|
366 | msgid "An error occurred during deletion of repository user" | |||
|
367 | msgstr "" | |||
|
368 | ||||
|
369 | #: rhodecode/controllers/admin/repos.py:335 | |||
|
370 | msgid "An error occurred during deletion of repository users groups" | |||
|
371 | msgstr "" | |||
|
372 | ||||
|
373 | #: rhodecode/controllers/admin/repos.py:352 | |||
|
374 | msgid "An error occurred during deletion of repository stats" | |||
|
375 | msgstr "" | |||
|
376 | ||||
|
377 | #: rhodecode/controllers/admin/repos.py:367 | |||
|
378 | msgid "An error occurred during cache invalidation" | |||
|
379 | msgstr "" | |||
|
380 | ||||
|
381 | #: rhodecode/controllers/admin/repos.py:387 | |||
|
382 | msgid "Updated repository visibility in public journal" | |||
|
383 | msgstr "" | |||
|
384 | ||||
|
385 | #: rhodecode/controllers/admin/repos.py:390 | |||
|
386 | msgid "An error occurred during setting this repository in public journal" | |||
|
387 | msgstr "" | |||
|
388 | ||||
|
389 | #: rhodecode/controllers/admin/repos.py:395 rhodecode/model/forms.py:53 | |||
|
390 | msgid "Token mismatch" | |||
|
391 | msgstr "" | |||
|
392 | ||||
|
393 | #: rhodecode/controllers/admin/repos.py:408 | |||
|
394 | msgid "Pulled from remote location" | |||
|
395 | msgstr "" | |||
|
396 | ||||
|
397 | #: rhodecode/controllers/admin/repos.py:410 | |||
|
398 | msgid "An error occurred during pull from remote location" | |||
|
399 | msgstr "" | |||
|
400 | ||||
|
401 | #: rhodecode/controllers/admin/repos_groups.py:83 | |||
|
402 | #, python-format | |||
|
403 | msgid "created repos group %s" | |||
|
404 | msgstr "" | |||
|
405 | ||||
|
406 | #: rhodecode/controllers/admin/repos_groups.py:96 | |||
|
407 | #, python-format | |||
|
408 | msgid "error occurred during creation of repos group %s" | |||
|
409 | msgstr "" | |||
|
410 | ||||
|
411 | #: rhodecode/controllers/admin/repos_groups.py:130 | |||
|
412 | #, python-format | |||
|
413 | msgid "updated repos group %s" | |||
|
414 | msgstr "" | |||
|
415 | ||||
|
416 | #: rhodecode/controllers/admin/repos_groups.py:143 | |||
|
417 | #, python-format | |||
|
418 | msgid "error occurred during update of repos group %s" | |||
|
419 | msgstr "" | |||
|
420 | ||||
|
421 | #: rhodecode/controllers/admin/repos_groups.py:164 | |||
|
422 | #, python-format | |||
|
423 | msgid "This group contains %s repositores and cannot be deleted" | |||
|
424 | msgstr "" | |||
|
425 | ||||
|
426 | #: rhodecode/controllers/admin/repos_groups.py:171 | |||
|
427 | #, python-format | |||
|
428 | msgid "removed repos group %s" | |||
|
429 | msgstr "" | |||
|
430 | ||||
|
431 | #: rhodecode/controllers/admin/repos_groups.py:175 | |||
|
432 | #, python-format | |||
|
433 | msgid "error occurred during deletion of repos group %s" | |||
|
434 | msgstr "" | |||
|
435 | ||||
|
436 | #: rhodecode/controllers/admin/settings.py:109 | |||
|
437 | #, python-format | |||
|
438 | msgid "Repositories successfully rescanned added: %s,removed: %s" | |||
|
439 | msgstr "" | |||
|
440 | ||||
|
441 | #: rhodecode/controllers/admin/settings.py:118 | |||
250 | msgid "Whoosh reindex task scheduled" |
|
442 | msgid "Whoosh reindex task scheduled" | |
251 | msgstr "" |
|
443 | msgstr "" | |
252 |
|
444 | |||
253 | #: rhodecode/controllers/admin/settings.py:138 |
|
|||
254 | msgid "Updated application settings" |
|
|||
255 | msgstr "" |
|
|||
256 |
|
||||
257 | #: rhodecode/controllers/admin/settings.py:143 |
|
445 | #: rhodecode/controllers/admin/settings.py:143 | |
258 | #: rhodecode/controllers/admin/settings.py:204 |
|
446 | msgid "Updated application settings" | |
|
447 | msgstr "" | |||
|
448 | ||||
|
449 | #: rhodecode/controllers/admin/settings.py:148 | |||
|
450 | #: rhodecode/controllers/admin/settings.py:215 | |||
259 | msgid "error occurred during updating application settings" |
|
451 | msgid "error occurred during updating application settings" | |
260 | msgstr "" |
|
452 | msgstr "" | |
261 |
|
453 | |||
262 |
#: rhodecode/controllers/admin/settings.py: |
|
454 | #: rhodecode/controllers/admin/settings.py:210 | |
263 | msgid "Updated mercurial settings" |
|
455 | msgid "Updated mercurial settings" | |
264 | msgstr "" |
|
456 | msgstr "" | |
265 |
|
457 | |||
266 |
#: rhodecode/controllers/admin/settings.py:2 |
|
458 | #: rhodecode/controllers/admin/settings.py:236 | |
|
459 | msgid "Added new hook" | |||
|
460 | msgstr "" | |||
|
461 | ||||
|
462 | #: rhodecode/controllers/admin/settings.py:247 | |||
|
463 | msgid "Updated hooks" | |||
|
464 | msgstr "" | |||
|
465 | ||||
|
466 | #: rhodecode/controllers/admin/settings.py:251 | |||
|
467 | msgid "error occurred during hook creation" | |||
|
468 | msgstr "" | |||
|
469 | ||||
|
470 | #: rhodecode/controllers/admin/settings.py:310 | |||
267 | msgid "You can't edit this user since it's crucial for entire application" |
|
471 | msgid "You can't edit this user since it's crucial for entire application" | |
268 | msgstr "" |
|
472 | msgstr "" | |
269 |
|
473 | |||
270 |
#: rhodecode/controllers/admin/settings.py: |
|
474 | #: rhodecode/controllers/admin/settings.py:339 | |
271 | msgid "Your account was updated successfully" |
|
475 | msgid "Your account was updated successfully" | |
272 | msgstr "" |
|
476 | msgstr "" | |
273 |
|
477 | |||
274 |
#: rhodecode/controllers/admin/settings.py:3 |
|
478 | #: rhodecode/controllers/admin/settings.py:359 | |
275 |
#: rhodecode/controllers/admin/users.py:1 |
|
479 | #: rhodecode/controllers/admin/users.py:130 | |
276 | #, python-format |
|
480 | #, python-format | |
277 | msgid "error occurred during update of user %s" |
|
481 | msgid "error occurred during update of user %s" | |
278 | msgstr "" |
|
482 | msgstr "" | |
@@ -288,442 +492,600 b' msgid "error occurred during creation of' | |||||
288 | msgstr "" |
|
492 | msgstr "" | |
289 |
|
493 | |||
290 | #: rhodecode/controllers/admin/users.py:116 |
|
494 | #: rhodecode/controllers/admin/users.py:116 | |
291 | msgid "User updated succesfully" |
|
495 | msgid "User updated successfully" | |
292 | msgstr "" |
|
496 | msgstr "" | |
293 |
|
497 | |||
294 |
#: rhodecode/controllers/admin/users.py:14 |
|
498 | #: rhodecode/controllers/admin/users.py:146 | |
295 | msgid "sucessfully deleted user" |
|
499 | msgid "successfully deleted user" | |
296 | msgstr "" |
|
500 | msgstr "" | |
297 |
|
501 | |||
298 |
#: rhodecode/controllers/admin/users.py:1 |
|
502 | #: rhodecode/controllers/admin/users.py:150 | |
299 | msgid "An error occurred during deletion of user" |
|
503 | msgid "An error occurred during deletion of user" | |
300 | msgstr "" |
|
504 | msgstr "" | |
301 |
|
505 | |||
302 |
#: rhodecode/controllers/admin/users.py:16 |
|
506 | #: rhodecode/controllers/admin/users.py:166 | |
303 | msgid "You can't edit this user" |
|
507 | msgid "You can't edit this user" | |
304 | msgstr "" |
|
508 | msgstr "" | |
305 |
|
509 | |||
306 |
#: rhodecode/ |
|
510 | #: rhodecode/controllers/admin/users.py:195 | |
|
511 | #: rhodecode/controllers/admin/users_groups.py:202 | |||
|
512 | msgid "Granted 'repository create' permission to user" | |||
|
513 | msgstr "" | |||
|
514 | ||||
|
515 | #: rhodecode/controllers/admin/users.py:204 | |||
|
516 | #: rhodecode/controllers/admin/users_groups.py:211 | |||
|
517 | msgid "Revoked 'repository create' permission to user" | |||
|
518 | msgstr "" | |||
|
519 | ||||
|
520 | #: rhodecode/controllers/admin/users_groups.py:74 | |||
|
521 | #, python-format | |||
|
522 | msgid "created users group %s" | |||
|
523 | msgstr "" | |||
|
524 | ||||
|
525 | #: rhodecode/controllers/admin/users_groups.py:86 | |||
|
526 | #, python-format | |||
|
527 | msgid "error occurred during creation of users group %s" | |||
|
528 | msgstr "" | |||
|
529 | ||||
|
530 | #: rhodecode/controllers/admin/users_groups.py:119 | |||
|
531 | #, python-format | |||
|
532 | msgid "updated users group %s" | |||
|
533 | msgstr "" | |||
|
534 | ||||
|
535 | #: rhodecode/controllers/admin/users_groups.py:138 | |||
|
536 | #, python-format | |||
|
537 | msgid "error occurred during update of users group %s" | |||
|
538 | msgstr "" | |||
|
539 | ||||
|
540 | #: rhodecode/controllers/admin/users_groups.py:154 | |||
|
541 | msgid "successfully deleted users group" | |||
|
542 | msgstr "" | |||
|
543 | ||||
|
544 | #: rhodecode/controllers/admin/users_groups.py:158 | |||
|
545 | msgid "An error occurred during deletion of users group" | |||
|
546 | msgstr "" | |||
|
547 | ||||
|
548 | #: rhodecode/lib/__init__.py:279 | |||
|
549 | msgid "year" | |||
|
550 | msgstr "" | |||
|
551 | ||||
|
552 | #: rhodecode/lib/__init__.py:280 | |||
|
553 | msgid "month" | |||
|
554 | msgstr "" | |||
|
555 | ||||
|
556 | #: rhodecode/lib/__init__.py:281 | |||
|
557 | msgid "day" | |||
|
558 | msgstr "" | |||
|
559 | ||||
|
560 | #: rhodecode/lib/__init__.py:282 | |||
|
561 | msgid "hour" | |||
|
562 | msgstr "" | |||
|
563 | ||||
|
564 | #: rhodecode/lib/__init__.py:283 | |||
|
565 | msgid "minute" | |||
|
566 | msgstr "" | |||
|
567 | ||||
|
568 | #: rhodecode/lib/__init__.py:284 | |||
|
569 | msgid "second" | |||
|
570 | msgstr "" | |||
|
571 | ||||
|
572 | #: rhodecode/lib/__init__.py:293 | |||
307 | msgid "ago" |
|
573 | msgid "ago" | |
308 | msgstr "" |
|
574 | msgstr "" | |
309 |
|
575 | |||
310 |
#: rhodecode/lib/ |
|
576 | #: rhodecode/lib/__init__.py:296 | |
311 | msgid "just now" |
|
577 | msgid "just now" | |
312 | msgstr "" |
|
578 | msgstr "" | |
313 |
|
579 | |||
314 |
#: rhodecode/lib/ |
|
580 | #: rhodecode/lib/auth.py:377 | |
|
581 | msgid "You need to be a registered user to perform this action" | |||
|
582 | msgstr "" | |||
|
583 | ||||
|
584 | #: rhodecode/lib/auth.py:421 | |||
|
585 | msgid "You need to be a signed in to view this page" | |||
|
586 | msgstr "" | |||
|
587 | ||||
|
588 | #: rhodecode/lib/helpers.py:307 | |||
315 | msgid "True" |
|
589 | msgid "True" | |
316 | msgstr "" |
|
590 | msgstr "" | |
317 |
|
591 | |||
318 |
#: rhodecode/lib/helpers.py: |
|
592 | #: rhodecode/lib/helpers.py:311 | |
319 | msgid "False" |
|
593 | msgid "False" | |
320 | msgstr "" |
|
594 | msgstr "" | |
321 |
|
595 | |||
322 |
#: rhodecode/lib/helpers.py: |
|
596 | #: rhodecode/lib/helpers.py:352 | |
|
597 | #, python-format | |||
|
598 | msgid "Show all combined changesets %s->%s" | |||
|
599 | msgstr "" | |||
|
600 | ||||
|
601 | #: rhodecode/lib/helpers.py:356 | |||
|
602 | msgid "compare view" | |||
|
603 | msgstr "" | |||
|
604 | ||||
|
605 | #: rhodecode/lib/helpers.py:365 | |||
323 | msgid "and" |
|
606 | msgid "and" | |
324 | msgstr "" |
|
607 | msgstr "" | |
325 |
|
608 | |||
326 |
#: rhodecode/lib/helpers.py: |
|
609 | #: rhodecode/lib/helpers.py:365 | |
327 | #, python-format |
|
610 | #, python-format | |
328 | msgid "%s more" |
|
611 | msgid "%s more" | |
329 | msgstr "" |
|
612 | msgstr "" | |
330 |
|
613 | |||
331 |
#: rhodecode/lib/helpers.py: |
|
614 | #: rhodecode/lib/helpers.py:367 rhodecode/templates/changelog/changelog.html:14 | |
332 |
#: rhodecode/templates/changelog/changelog.html: |
|
615 | #: rhodecode/templates/changelog/changelog.html:39 | |
333 | msgid "revisions" |
|
616 | msgid "revisions" | |
334 | msgstr "" |
|
617 | msgstr "" | |
335 |
|
618 | |||
336 |
#: rhodecode/lib/helpers.py: |
|
619 | #: rhodecode/lib/helpers.py:385 | |
|
620 | msgid "fork name " | |||
|
621 | msgstr "" | |||
|
622 | ||||
|
623 | #: rhodecode/lib/helpers.py:388 | |||
337 | msgid "[deleted] repository" |
|
624 | msgid "[deleted] repository" | |
338 | msgstr "" |
|
625 | msgstr "" | |
339 |
|
626 | |||
340 |
#: rhodecode/lib/helpers.py: |
|
627 | #: rhodecode/lib/helpers.py:389 rhodecode/lib/helpers.py:393 | |
341 | msgid "[created] repository" |
|
628 | msgid "[created] repository" | |
342 | msgstr "" |
|
629 | msgstr "" | |
343 |
|
630 | |||
344 |
#: rhodecode/lib/helpers.py:4 |
|
631 | #: rhodecode/lib/helpers.py:390 rhodecode/lib/helpers.py:394 | |
345 |
msgid "[forked] repository |
|
632 | msgid "[forked] repository" | |
346 | msgstr "" |
|
633 | msgstr "" | |
347 |
|
634 | |||
348 |
#: rhodecode/lib/helpers.py: |
|
635 | #: rhodecode/lib/helpers.py:391 rhodecode/lib/helpers.py:395 | |
349 | msgid "[updated] repository" |
|
636 | msgid "[updated] repository" | |
350 | msgstr "" |
|
637 | msgstr "" | |
351 |
|
638 | |||
352 |
#: rhodecode/lib/helpers.py: |
|
639 | #: rhodecode/lib/helpers.py:392 | |
353 | msgid "[delete] repository" |
|
640 | msgid "[delete] repository" | |
354 | msgstr "" |
|
641 | msgstr "" | |
355 |
|
642 | |||
356 |
#: rhodecode/lib/helpers.py: |
|
643 | #: rhodecode/lib/helpers.py:396 | |
357 |
msgid "[ |
|
644 | msgid "[pushed] into" | |
358 | msgstr "" |
|
645 | msgstr "" | |
359 |
|
646 | |||
360 |
#: rhodecode/lib/helpers.py: |
|
647 | #: rhodecode/lib/helpers.py:397 | |
361 | msgid "[pushed] " |
|
648 | msgid "[committed via RhodeCode] into" | |
362 | msgstr "" |
|
649 | msgstr "" | |
363 |
|
650 | |||
364 |
#: rhodecode/lib/helpers.py: |
|
651 | #: rhodecode/lib/helpers.py:398 | |
365 | msgid "[pulled] " |
|
652 | msgid "[pulled from remote] into" | |
366 | msgstr "" |
|
653 | msgstr "" | |
367 |
|
654 | |||
368 |
#: rhodecode/lib/helpers.py: |
|
655 | #: rhodecode/lib/helpers.py:399 | |
|
656 | msgid "[pulled] from" | |||
|
657 | msgstr "" | |||
|
658 | ||||
|
659 | #: rhodecode/lib/helpers.py:400 | |||
369 | msgid "[started following] repository" |
|
660 | msgid "[started following] repository" | |
370 | msgstr "" |
|
661 | msgstr "" | |
371 |
|
662 | |||
372 |
#: rhodecode/lib/helpers.py:4 |
|
663 | #: rhodecode/lib/helpers.py:401 | |
373 | msgid "[stopped following] repository" |
|
664 | msgid "[stopped following] repository" | |
374 | msgstr "" |
|
665 | msgstr "" | |
375 |
|
666 | |||
376 | #: rhodecode/lib/helpers.py:554 rhodecode/templates/changelog/changelog.html:68 |
|
667 | #: rhodecode/lib/helpers.py:577 | |
377 | #, python-format |
|
668 | #, python-format | |
378 | msgid " and %s more" |
|
669 | msgid " and %s more" | |
379 | msgstr "" |
|
670 | msgstr "" | |
380 |
|
671 | |||
381 | #: rhodecode/lib/helpers.py:557 rhodecode/templates/changelog/changelog.html:71 |
|
672 | #: rhodecode/lib/helpers.py:581 | |
382 | msgid "No Files" |
|
673 | msgid "No Files" | |
383 | msgstr "" |
|
674 | msgstr "" | |
384 |
|
675 | |||
385 |
#: rhodecode/model/forms.py: |
|
676 | #: rhodecode/model/forms.py:66 | |
386 | msgid "Token mismatch" |
|
|||
387 | msgstr "" |
|
|||
388 |
|
||||
389 | #: rhodecode/model/forms.py:67 |
|
|||
390 | msgid "Invalid username" |
|
677 | msgid "Invalid username" | |
391 | msgstr "" |
|
678 | msgstr "" | |
392 |
|
679 | |||
393 |
#: rhodecode/model/forms.py:7 |
|
680 | #: rhodecode/model/forms.py:75 | |
394 | msgid "This username already exists" |
|
681 | msgid "This username already exists" | |
395 | msgstr "" |
|
682 | msgstr "" | |
396 |
|
683 | |||
397 |
#: rhodecode/model/forms.py: |
|
684 | #: rhodecode/model/forms.py:79 | |
398 | msgid "" |
|
685 | msgid "" | |
399 | "Username may only contain alphanumeric characters underscores, periods or " |
|
686 | "Username may only contain alphanumeric characters underscores, periods or " | |
400 | "dashes and must begin with alphanumeric character" |
|
687 | "dashes and must begin with alphanumeric character" | |
401 | msgstr "" |
|
688 | msgstr "" | |
402 |
|
689 | |||
403 |
#: rhodecode/model/forms.py: |
|
690 | #: rhodecode/model/forms.py:94 | |
404 | #: rhodecode/model/forms.py:117 |
|
691 | msgid "Invalid group name" | |
|
692 | msgstr "" | |||
|
693 | ||||
|
694 | #: rhodecode/model/forms.py:104 | |||
|
695 | msgid "This users group already exists" | |||
|
696 | msgstr "" | |||
|
697 | ||||
|
698 | #: rhodecode/model/forms.py:110 | |||
|
699 | msgid "" | |||
|
700 | "Group name may only contain alphanumeric characters underscores, periods or " | |||
|
701 | "dashes and must begin with alphanumeric character" | |||
|
702 | msgstr "" | |||
|
703 | ||||
|
704 | #: rhodecode/model/forms.py:132 | |||
|
705 | msgid "Cannot assign this group as parent" | |||
|
706 | msgstr "" | |||
|
707 | ||||
|
708 | #: rhodecode/model/forms.py:148 | |||
|
709 | msgid "This group already exists" | |||
|
710 | msgstr "" | |||
|
711 | ||||
|
712 | #: rhodecode/model/forms.py:164 rhodecode/model/forms.py:172 | |||
|
713 | #: rhodecode/model/forms.py:180 | |||
405 | msgid "Invalid characters in password" |
|
714 | msgid "Invalid characters in password" | |
406 | msgstr "" |
|
715 | msgstr "" | |
407 |
|
716 | |||
408 |
#: rhodecode/model/forms.py:1 |
|
717 | #: rhodecode/model/forms.py:191 | |
409 | msgid "Password do not match" |
|
718 | msgid "Passwords do not match" | |
410 | msgstr "" |
|
719 | msgstr "" | |
411 |
|
720 | |||
412 |
#: rhodecode/model/forms.py:1 |
|
721 | #: rhodecode/model/forms.py:196 | |
413 | msgid "invalid password" |
|
722 | msgid "invalid password" | |
414 | msgstr "" |
|
723 | msgstr "" | |
415 |
|
724 | |||
416 |
#: rhodecode/model/forms.py:1 |
|
725 | #: rhodecode/model/forms.py:197 | |
417 | msgid "invalid user name" |
|
726 | msgid "invalid user name" | |
418 | msgstr "" |
|
727 | msgstr "" | |
419 |
|
728 | |||
420 |
#: rhodecode/model/forms.py:1 |
|
729 | #: rhodecode/model/forms.py:198 | |
421 | msgid "Your account is disabled" |
|
730 | msgid "Your account is disabled" | |
422 | msgstr "" |
|
731 | msgstr "" | |
423 |
|
732 | |||
424 |
#: rhodecode/model/forms.py: |
|
733 | #: rhodecode/model/forms.py:233 | |
425 | msgid "This username is not valid" |
|
734 | msgid "This username is not valid" | |
426 | msgstr "" |
|
735 | msgstr "" | |
427 |
|
736 | |||
428 |
#: rhodecode/model/forms.py: |
|
737 | #: rhodecode/model/forms.py:245 | |
429 | msgid "This repository name is disallowed" |
|
738 | msgid "This repository name is disallowed" | |
430 | msgstr "" |
|
739 | msgstr "" | |
431 |
|
740 | |||
432 |
#: rhodecode/model/forms.py: |
|
741 | #: rhodecode/model/forms.py:266 | |
|
742 | #, python-format | |||
|
743 | msgid "This repository already exists in group \"%s\"" | |||
|
744 | msgstr "" | |||
|
745 | ||||
|
746 | #: rhodecode/model/forms.py:274 | |||
433 | msgid "This repository already exists" |
|
747 | msgid "This repository already exists" | |
434 | msgstr "" |
|
748 | msgstr "" | |
435 |
|
749 | |||
436 |
#: rhodecode/model/forms.py: |
|
750 | #: rhodecode/model/forms.py:312 rhodecode/model/forms.py:319 | |
437 | msgid "Fork have to be the same type as original" |
|
751 | msgid "invalid clone url" | |
438 | msgstr "" |
|
752 | msgstr "" | |
439 |
|
753 | |||
440 |
#: rhodecode/model/forms.py: |
|
754 | #: rhodecode/model/forms.py:322 | |
441 | msgid "This is not a valid path" |
|
755 | msgid "Invalid clone url, provide a valid clone http\\s url" | |
442 | msgstr "" |
|
|||
443 |
|
||||
444 | #: rhodecode/model/forms.py:270 |
|
|||
445 | msgid "This e-mail address is already taken" |
|
|||
446 | msgstr "" |
|
|||
447 |
|
||||
448 | #: rhodecode/model/forms.py:286 |
|
|||
449 | msgid "This e-mail address doesn't exist." |
|
|||
450 | msgstr "" |
|
|||
451 |
|
||||
452 | #: rhodecode/model/forms.py:311 |
|
|||
453 | #, python-format |
|
|||
454 | msgid "" |
|
|||
455 | "You need to specify %(user)s in template for example uid=%(user)s " |
|
|||
456 | ",dc=company..." |
|
|||
457 | msgstr "" |
|
|||
458 |
|
||||
459 | #: rhodecode/model/forms.py:317 |
|
|||
460 | #, python-format |
|
|||
461 | msgid "Wrong template used, only %(user)s is an valid entry" |
|
|||
462 | msgstr "" |
|
756 | msgstr "" | |
463 |
|
757 | |||
464 | #: rhodecode/model/forms.py:334 |
|
758 | #: rhodecode/model/forms.py:334 | |
|
759 | msgid "Fork have to be the same type as original" | |||
|
760 | msgstr "" | |||
|
761 | ||||
|
762 | #: rhodecode/model/forms.py:341 | |||
|
763 | msgid "This username or users group name is not valid" | |||
|
764 | msgstr "" | |||
|
765 | ||||
|
766 | #: rhodecode/model/forms.py:403 | |||
|
767 | msgid "This is not a valid path" | |||
|
768 | msgstr "" | |||
|
769 | ||||
|
770 | #: rhodecode/model/forms.py:416 | |||
|
771 | msgid "This e-mail address is already taken" | |||
|
772 | msgstr "" | |||
|
773 | ||||
|
774 | #: rhodecode/model/forms.py:427 | |||
|
775 | msgid "This e-mail address doesn't exist." | |||
|
776 | msgstr "" | |||
|
777 | ||||
|
778 | #: rhodecode/model/forms.py:447 | |||
|
779 | msgid "" | |||
|
780 | "The LDAP Login attribute of the CN must be specified - this is the name of " | |||
|
781 | "the attribute that is equivalent to 'username'" | |||
|
782 | msgstr "" | |||
|
783 | ||||
|
784 | #: rhodecode/model/forms.py:466 | |||
465 | msgid "Please enter a login" |
|
785 | msgid "Please enter a login" | |
466 | msgstr "" |
|
786 | msgstr "" | |
467 |
|
787 | |||
468 |
#: rhodecode/model/forms.py: |
|
788 | #: rhodecode/model/forms.py:467 | |
469 | #, python-format |
|
789 | #, python-format | |
470 | msgid "Enter a value %(min)i characters long or more" |
|
790 | msgid "Enter a value %(min)i characters long or more" | |
471 | msgstr "" |
|
791 | msgstr "" | |
472 |
|
792 | |||
473 |
#: rhodecode/model/forms.py: |
|
793 | #: rhodecode/model/forms.py:475 | |
474 | msgid "Please enter a password" |
|
794 | msgid "Please enter a password" | |
475 | msgstr "" |
|
795 | msgstr "" | |
476 |
|
796 | |||
477 |
#: rhodecode/model/forms.py: |
|
797 | #: rhodecode/model/forms.py:476 | |
478 | #, python-format |
|
798 | #, python-format | |
479 | msgid "Enter %(min)i characters or more" |
|
799 | msgid "Enter %(min)i characters or more" | |
480 | msgstr "" |
|
800 | msgstr "" | |
481 |
|
801 | |||
482 |
#: rhodecode/model/user.py:1 |
|
802 | #: rhodecode/model/user.py:145 | |
483 | msgid "[RhodeCode] New User registration" |
|
803 | msgid "[RhodeCode] New User registration" | |
484 | msgstr "" |
|
804 | msgstr "" | |
485 |
|
805 | |||
486 |
#: rhodecode/model/user.py:1 |
|
806 | #: rhodecode/model/user.py:157 rhodecode/model/user.py:179 | |
487 | msgid "You can't Edit this user since it's crucial for entire application" |
|
807 | msgid "You can't Edit this user since it's crucial for entire application" | |
488 | msgstr "" |
|
808 | msgstr "" | |
489 |
|
809 | |||
490 |
#: rhodecode/model/user.py: |
|
810 | #: rhodecode/model/user.py:201 | |
491 | msgid "You can't remove this user since it's crucial for entire application" |
|
811 | msgid "You can't remove this user since it's crucial for entire application" | |
492 | msgstr "" |
|
812 | msgstr "" | |
493 |
|
813 | |||
494 |
#: rhodecode/model/user.py: |
|
814 | #: rhodecode/model/user.py:204 | |
495 | #, python-format |
|
815 | #, python-format | |
496 | msgid "" |
|
816 | msgid "" | |
497 | "This user still owns %s repositories and cannot be removed. Switch owners or " |
|
817 | "This user still owns %s repositories and cannot be removed. Switch owners or " | |
498 | "remove those repositories" |
|
818 | "remove those repositories" | |
499 | msgstr "" |
|
819 | msgstr "" | |
500 |
|
820 | |||
501 |
#: rhodecode/templates/index.html:4 |
|
821 | #: rhodecode/templates/index.html:4 | |
502 | msgid "Dashboard" |
|
822 | msgid "Dashboard" | |
503 | msgstr "" |
|
823 | msgstr "" | |
504 |
|
824 | |||
505 |
#: rhodecode/templates/index.html: |
|
825 | #: rhodecode/templates/index_base.html:22 | |
506 |
#: rhodecode/templates/admin/users/user_edit_my_account.html:10 |
|
826 | #: rhodecode/templates/admin/users/user_edit_my_account.html:102 | |
507 | msgid "quick filter..." |
|
827 | msgid "quick filter..." | |
508 | msgstr "" |
|
828 | msgstr "" | |
509 |
|
829 | |||
510 |
#: rhodecode/templates/index.html: |
|
830 | #: rhodecode/templates/index_base.html:23 rhodecode/templates/base/base.html:300 | |
|
831 | msgid "repositories" | |||
|
832 | msgstr "" | |||
|
833 | ||||
|
834 | #: rhodecode/templates/index_base.html:29 | |||
|
835 | #: rhodecode/templates/admin/repos/repos.html:22 | |||
511 | msgid "ADD NEW REPOSITORY" |
|
836 | msgid "ADD NEW REPOSITORY" | |
512 | msgstr "" |
|
837 | msgstr "" | |
513 |
|
838 | |||
514 |
#: rhodecode/templates/index.html:4 |
|
839 | #: rhodecode/templates/index_base.html:41 | |
515 |
#: rhodecode/templates/admin/repos/repo_add.html:3 |
|
840 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32 | |
516 |
#: rhodecode/templates/admin/repos |
|
841 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32 | |
|
842 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33 | |||
|
843 | #: rhodecode/templates/admin/users_groups/users_group_add.html:32 | |||
|
844 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:33 | |||
|
845 | msgid "Group name" | |||
|
846 | msgstr "" | |||
|
847 | ||||
|
848 | #: rhodecode/templates/index_base.html:42 rhodecode/templates/index_base.html:73 | |||
|
849 | #: rhodecode/templates/admin/repos/repo_add_base.html:44 | |||
|
850 | #: rhodecode/templates/admin/repos/repo_edit.html:64 | |||
|
851 | #: rhodecode/templates/admin/repos/repos.html:31 | |||
|
852 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41 | |||
|
853 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41 | |||
|
854 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34 | |||
|
855 | #: rhodecode/templates/settings/repo_fork.html:40 | |||
|
856 | #: rhodecode/templates/settings/repo_settings.html:40 | |||
|
857 | #: rhodecode/templates/summary/summary.html:92 | |||
|
858 | msgid "Description" | |||
|
859 | msgstr "" | |||
|
860 | ||||
|
861 | #: rhodecode/templates/index_base.html:53 | |||
|
862 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 | |||
|
863 | msgid "Repositories group" | |||
|
864 | msgstr "" | |||
|
865 | ||||
|
866 | #: rhodecode/templates/index_base.html:72 | |||
|
867 | #: rhodecode/templates/admin/repos/repo_add_base.html:9 | |||
517 | #: rhodecode/templates/admin/repos/repo_edit.html:32 |
|
868 | #: rhodecode/templates/admin/repos/repo_edit.html:32 | |
518 | #: rhodecode/templates/admin/repos/repos.html:30 |
|
869 | #: rhodecode/templates/admin/repos/repos.html:30 | |
519 |
#: rhodecode/templates/admin/users/user_edit_my_account.html:11 |
|
870 | #: rhodecode/templates/admin/users/user_edit_my_account.html:117 | |
520 |
#: rhodecode/templates/files/files_browser.html: |
|
871 | #: rhodecode/templates/files/files_browser.html:157 | |
521 |
#: rhodecode/templates/settings/repo_settings.html: |
|
872 | #: rhodecode/templates/settings/repo_settings.html:31 | |
522 | #: rhodecode/templates/summary/summary.html:31 |
|
873 | #: rhodecode/templates/summary/summary.html:31 | |
523 |
#: rhodecode/templates/summary/summary.html: |
|
874 | #: rhodecode/templates/summary/summary.html:107 | |
524 | msgid "Name" |
|
875 | msgid "Name" | |
525 | msgstr "" |
|
876 | msgstr "" | |
526 |
|
877 | |||
527 |
#: rhodecode/templates/index.html:4 |
|
878 | #: rhodecode/templates/index_base.html:74 | |
528 |
#: rhodecode/templates/admin/repos/repo |
|
879 | #: rhodecode/templates/admin/repos/repos.html:32 | |
529 |
#: rhodecode/templates/ |
|
880 | #: rhodecode/templates/summary/summary.html:114 | |
530 | #: rhodecode/templates/admin/repos/repo_edit.html:48 |
|
|||
531 | #: rhodecode/templates/admin/repos/repos.html:31 |
|
|||
532 | #: rhodecode/templates/settings/repo_fork.html:38 |
|
|||
533 | #: rhodecode/templates/settings/repo_settings.html:38 |
|
|||
534 | #: rhodecode/templates/summary/summary.html:75 |
|
|||
535 | msgid "Description" |
|
|||
536 | msgstr "" |
|
|||
537 |
|
||||
538 | #: rhodecode/templates/index.html:50 rhodecode/templates/admin/repos/repos.html:32 |
|
|||
539 | #: rhodecode/templates/summary/summary.html:99 |
|
|||
540 | msgid "Last change" |
|
881 | msgid "Last change" | |
541 | msgstr "" |
|
882 | msgstr "" | |
542 |
|
883 | |||
543 | #: rhodecode/templates/index.html:51 rhodecode/templates/admin/repos/repos.html:33 |
|
884 | #: rhodecode/templates/index_base.html:75 | |
|
885 | #: rhodecode/templates/admin/repos/repos.html:33 | |||
544 | msgid "Tip" |
|
886 | msgid "Tip" | |
545 | msgstr "" |
|
887 | msgstr "" | |
546 |
|
888 | |||
547 |
#: rhodecode/templates/index.html: |
|
889 | #: rhodecode/templates/index_base.html:76 | |
548 |
#: rhodecode/templates/admin/repos/repo_edit.html:7 |
|
890 | #: rhodecode/templates/admin/repos/repo_edit.html:97 | |
549 | msgid "Owner" |
|
891 | msgid "Owner" | |
550 | msgstr "" |
|
892 | msgstr "" | |
551 |
|
893 | |||
552 | #: rhodecode/templates/index.html:53 rhodecode/templates/summary/summary.html:236 |
|
894 | #: rhodecode/templates/index_base.html:77 | |
|
895 | #: rhodecode/templates/journal/public_journal.html:20 | |||
|
896 | #: rhodecode/templates/summary/summary.html:180 | |||
|
897 | #: rhodecode/templates/summary/summary.html:183 | |||
553 | msgid "RSS" |
|
898 | msgid "RSS" | |
554 | msgstr "" |
|
899 | msgstr "" | |
555 |
|
900 | |||
556 | #: rhodecode/templates/index.html:54 rhodecode/templates/summary/summary.html:237 |
|
901 | #: rhodecode/templates/index_base.html:78 | |
|
902 | #: rhodecode/templates/journal/public_journal.html:23 | |||
|
903 | #: rhodecode/templates/summary/summary.html:181 | |||
|
904 | #: rhodecode/templates/summary/summary.html:184 | |||
557 | msgid "Atom" |
|
905 | msgid "Atom" | |
558 | msgstr "" |
|
906 | msgstr "" | |
559 |
|
907 | |||
560 |
#: rhodecode/templates/index.html: |
|
908 | #: rhodecode/templates/index_base.html:87 rhodecode/templates/index_base.html:89 | |
561 | #: rhodecode/templates/admin/users/user_edit_my_account.html:126 |
|
909 | #: rhodecode/templates/index_base.html:91 rhodecode/templates/base/base.html:209 | |
562 | #: rhodecode/templates/summary/summary.html:35 |
|
910 | #: rhodecode/templates/base/base.html:211 rhodecode/templates/base/base.html:213 | |
|
911 | #: rhodecode/templates/summary/summary.html:4 | |||
|
912 | msgid "Summary" | |||
|
913 | msgstr "" | |||
|
914 | ||||
|
915 | #: rhodecode/templates/index_base.html:95 rhodecode/templates/index_base.html:97 | |||
|
916 | #: rhodecode/templates/index_base.html:99 rhodecode/templates/base/base.html:225 | |||
|
917 | #: rhodecode/templates/base/base.html:227 rhodecode/templates/base/base.html:229 | |||
|
918 | #: rhodecode/templates/changelog/changelog.html:6 | |||
|
919 | #: rhodecode/templates/changelog/changelog.html:14 | |||
|
920 | msgid "Changelog" | |||
|
921 | msgstr "" | |||
|
922 | ||||
|
923 | #: rhodecode/templates/index_base.html:103 rhodecode/templates/index_base.html:105 | |||
|
924 | #: rhodecode/templates/index_base.html:107 rhodecode/templates/base/base.html:268 | |||
|
925 | #: rhodecode/templates/base/base.html:270 rhodecode/templates/base/base.html:272 | |||
|
926 | #: rhodecode/templates/files/files.html:4 | |||
|
927 | msgid "Files" | |||
|
928 | msgstr "" | |||
|
929 | ||||
|
930 | #: rhodecode/templates/index_base.html:116 | |||
|
931 | #: rhodecode/templates/admin/repos/repos.html:42 | |||
|
932 | #: rhodecode/templates/admin/users/user_edit_my_account.html:127 | |||
|
933 | #: rhodecode/templates/summary/summary.html:48 | |||
563 | msgid "Mercurial repository" |
|
934 | msgid "Mercurial repository" | |
564 | msgstr "" |
|
935 | msgstr "" | |
565 |
|
936 | |||
566 | #: rhodecode/templates/index.html:66 rhodecode/templates/admin/repos/repos.html:44 |
|
937 | #: rhodecode/templates/index_base.html:118 | |
567 |
#: rhodecode/templates/admin/ |
|
938 | #: rhodecode/templates/admin/repos/repos.html:44 | |
568 |
#: rhodecode/templates/ |
|
939 | #: rhodecode/templates/admin/users/user_edit_my_account.html:129 | |
|
940 | #: rhodecode/templates/summary/summary.html:51 | |||
569 | msgid "Git repository" |
|
941 | msgid "Git repository" | |
570 | msgstr "" |
|
942 | msgstr "" | |
571 |
|
943 | |||
572 |
#: rhodecode/templates/index |
|
944 | #: rhodecode/templates/index_base.html:123 | |
573 |
#: rhodecode/templates/admin/repos/repo_edit.html:1 |
|
945 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 | |
574 |
#: rhodecode/templates/ |
|
946 | #: rhodecode/templates/journal/journal.html:53 | |
575 |
#: rhodecode/templates/summary/summary.html: |
|
947 | #: rhodecode/templates/summary/summary.html:56 | |
576 | msgid "private repository" |
|
948 | msgid "private repository" | |
577 | msgstr "" |
|
949 | msgstr "" | |
578 |
|
950 | |||
579 |
#: rhodecode/templates/index |
|
951 | #: rhodecode/templates/index_base.html:125 | |
580 |
#: rhodecode/templates/ |
|
952 | #: rhodecode/templates/journal/journal.html:55 | |
|
953 | #: rhodecode/templates/summary/summary.html:58 | |||
581 | msgid "public repository" |
|
954 | msgid "public repository" | |
582 | msgstr "" |
|
955 | msgstr "" | |
583 |
|
956 | |||
584 |
#: rhodecode/templates/index.html: |
|
957 | #: rhodecode/templates/index_base.html:133 rhodecode/templates/base/base.html:291 | |
585 |
#: rhodecode/templates/settings/repo_fork.html:1 |
|
958 | #: rhodecode/templates/settings/repo_fork.html:13 | |
586 | msgid "fork" |
|
959 | msgid "fork" | |
587 | msgstr "" |
|
960 | msgstr "" | |
588 |
|
961 | |||
589 | #: rhodecode/templates/index.html:84 rhodecode/templates/admin/repos/repos.html:60 |
|
962 | #: rhodecode/templates/index_base.html:134 | |
590 |
#: rhodecode/templates/admin/ |
|
963 | #: rhodecode/templates/admin/repos/repos.html:60 | |
591 |
#: rhodecode/templates/ |
|
964 | #: rhodecode/templates/admin/users/user_edit_my_account.html:143 | |
592 |
#: rhodecode/templates/summary/summary.html:6 |
|
965 | #: rhodecode/templates/summary/summary.html:69 | |
|
966 | #: rhodecode/templates/summary/summary.html:71 | |||
593 | msgid "Fork of" |
|
967 | msgid "Fork of" | |
594 | msgstr "" |
|
968 | msgstr "" | |
595 |
|
969 | |||
596 | #: rhodecode/templates/index.html:105 rhodecode/templates/admin/repos/repos.html:73 |
|
970 | #: rhodecode/templates/index_base.html:155 | |
|
971 | #: rhodecode/templates/admin/repos/repos.html:73 | |||
597 | msgid "No changesets yet" |
|
972 | msgid "No changesets yet" | |
598 | msgstr "" |
|
973 | msgstr "" | |
599 |
|
974 | |||
600 |
#: rhodecode/templates/index.html:1 |
|
975 | #: rhodecode/templates/index_base.html:161 rhodecode/templates/index_base.html:163 | |
601 | #, python-format |
|
976 | #, python-format | |
602 | msgid "Subscribe to %s rss feed" |
|
977 | msgid "Subscribe to %s rss feed" | |
603 | msgstr "" |
|
978 | msgstr "" | |
604 |
|
979 | |||
605 |
#: rhodecode/templates/index.html:1 |
|
980 | #: rhodecode/templates/index_base.html:168 rhodecode/templates/index_base.html:170 | |
606 | #, python-format |
|
981 | #, python-format | |
607 | msgid "Subscribe to %s atom feed" |
|
982 | msgid "Subscribe to %s atom feed" | |
608 | msgstr "" |
|
983 | msgstr "" | |
609 |
|
984 | |||
610 |
#: rhodecode/templates/ |
|
985 | #: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54 | |
611 |
#: rhodecode/templates/base/base.html: |
|
986 | #: rhodecode/templates/base/base.html:38 | |
612 | #: rhodecode/templates/base/base.html:280 rhodecode/templates/base/base.html:282 |
|
|||
613 | msgid "Journal" |
|
|||
614 | msgstr "" |
|
|||
615 |
|
||||
616 | #: rhodecode/templates/journal.html:45 |
|
|||
617 | msgid "No entries yet" |
|
|||
618 | msgstr "" |
|
|||
619 |
|
||||
620 | #: rhodecode/templates/journal.html:53 |
|
|||
621 | msgid "Following" |
|
|||
622 | msgstr "" |
|
|||
623 |
|
||||
624 | #: rhodecode/templates/journal.html:60 |
|
|||
625 | msgid "following user" |
|
|||
626 | msgstr "" |
|
|||
627 |
|
||||
628 | #: rhodecode/templates/journal.html:60 |
|
|||
629 | #: rhodecode/templates/admin/repos/repo_edit.html:94 |
|
|||
630 | #: rhodecode/templates/settings/repo_settings.html:65 |
|
|||
631 | msgid "user" |
|
|||
632 | msgstr "" |
|
|||
633 |
|
||||
634 | #: rhodecode/templates/journal.html:79 |
|
|||
635 | msgid "You are not following any users or repositories" |
|
|||
636 | msgstr "" |
|
|||
637 |
|
||||
638 | #: rhodecode/templates/login.html:5 |
|
|||
639 | msgid "Sign In" |
|
987 | msgid "Sign In" | |
640 | msgstr "" |
|
988 | msgstr "" | |
641 |
|
989 | |||
642 |
#: rhodecode/templates/login.html:2 |
|
990 | #: rhodecode/templates/login.html:21 | |
643 | msgid "Sign In to" |
|
991 | msgid "Sign In to" | |
644 | msgstr "" |
|
992 | msgstr "" | |
645 |
|
993 | |||
646 |
#: rhodecode/templates/login.html:3 |
|
994 | #: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20 | |
647 | #: rhodecode/templates/admin/admin_log.html:5 |
|
995 | #: rhodecode/templates/admin/admin_log.html:5 | |
648 | #: rhodecode/templates/admin/users/user_add.html:32 |
|
996 | #: rhodecode/templates/admin/users/user_add.html:32 | |
649 |
#: rhodecode/templates/admin/users/user_edit.html:4 |
|
997 | #: rhodecode/templates/admin/users/user_edit.html:47 | |
650 |
#: rhodecode/templates/admin/users/user_edit_my_account.html:4 |
|
998 | #: rhodecode/templates/admin/users/user_edit_my_account.html:45 | |
651 |
#: rhodecode/templates/ |
|
999 | #: rhodecode/templates/base/base.html:15 | |
|
1000 | #: rhodecode/templates/summary/summary.html:106 | |||
652 | msgid "Username" |
|
1001 | msgid "Username" | |
653 | msgstr "" |
|
1002 | msgstr "" | |
654 |
|
1003 | |||
655 |
#: rhodecode/templates/login.html:4 |
|
1004 | #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29 | |
656 |
#: rhodecode/templates/admin/ldap/ldap.html: |
|
1005 | #: rhodecode/templates/admin/ldap/ldap.html:46 | |
657 | #: rhodecode/templates/admin/users/user_add.html:41 |
|
1006 | #: rhodecode/templates/admin/users/user_add.html:41 | |
|
1007 | #: rhodecode/templates/base/base.html:24 | |||
658 | msgid "Password" |
|
1008 | msgid "Password" | |
659 | msgstr "" |
|
1009 | msgstr "" | |
660 |
|
1010 | |||
661 |
#: rhodecode/templates/login.html:6 |
|
1011 | #: rhodecode/templates/login.html:60 | |
662 | msgid "Forgot your password ?" |
|
1012 | msgid "Forgot your password ?" | |
663 | msgstr "" |
|
1013 | msgstr "" | |
664 |
|
1014 | |||
665 |
#: rhodecode/templates/login.html: |
|
1015 | #: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:35 | |
666 | msgid "Don't have an account ?" |
|
1016 | msgid "Don't have an account ?" | |
667 | msgstr "" |
|
1017 | msgstr "" | |
668 |
|
1018 | |||
669 | #: rhodecode/templates/password_reset.html:5 |
|
1019 | #: rhodecode/templates/password_reset.html:5 | |
670 |
msgid "Reset |
|
1020 | msgid "Reset your password" | |
671 | msgstr "" |
|
1021 | msgstr "" | |
672 |
|
1022 | |||
673 |
#: rhodecode/templates/password_reset.html:1 |
|
1023 | #: rhodecode/templates/password_reset.html:11 | |
674 |
msgid "Reset |
|
1024 | msgid "Reset your password to" | |
675 | msgstr "" |
|
1025 | msgstr "" | |
676 |
|
1026 | |||
677 |
#: rhodecode/templates/password_reset.html:2 |
|
1027 | #: rhodecode/templates/password_reset.html:21 | |
678 | msgid "Email address" |
|
1028 | msgid "Email address" | |
679 | msgstr "" |
|
1029 | msgstr "" | |
680 |
|
1030 | |||
681 |
#: rhodecode/templates/password_reset.html:3 |
|
1031 | #: rhodecode/templates/password_reset.html:30 | |
682 | msgid "Your new password will be send to matching email address" |
|
1032 | msgid "Reset my password" | |
683 | msgstr "" |
|
1033 | msgstr "" | |
684 |
|
1034 | |||
685 |
#: rhodecode/templates/ |
|
1035 | #: rhodecode/templates/password_reset.html:31 | |
|
1036 | msgid "Password reset link will be send to matching email address" | |||
|
1037 | msgstr "" | |||
|
1038 | ||||
|
1039 | #: rhodecode/templates/register.html:5 rhodecode/templates/register.html:74 | |||
686 | msgid "Sign Up" |
|
1040 | msgid "Sign Up" | |
687 | msgstr "" |
|
1041 | msgstr "" | |
688 |
|
1042 | |||
689 |
#: rhodecode/templates/register.html:1 |
|
1043 | #: rhodecode/templates/register.html:11 | |
690 | msgid "Sign Up to" |
|
1044 | msgid "Sign Up to" | |
691 | msgstr "" |
|
1045 | msgstr "" | |
692 |
|
1046 | |||
693 |
#: rhodecode/templates/register.html: |
|
1047 | #: rhodecode/templates/register.html:38 | |
694 | msgid "Re-enter password" |
|
1048 | msgid "Re-enter password" | |
695 | msgstr "" |
|
1049 | msgstr "" | |
696 |
|
1050 | |||
697 |
#: rhodecode/templates/register.html: |
|
1051 | #: rhodecode/templates/register.html:47 | |
698 | #: rhodecode/templates/admin/users/user_add.html:50 |
|
1052 | #: rhodecode/templates/admin/users/user_add.html:50 | |
699 |
#: rhodecode/templates/admin/users/user_edit.html: |
|
1053 | #: rhodecode/templates/admin/users/user_edit.html:74 | |
700 |
#: rhodecode/templates/admin/users/user_edit_my_account.html: |
|
1054 | #: rhodecode/templates/admin/users/user_edit_my_account.html:63 | |
701 | msgid "First Name" |
|
1055 | msgid "First Name" | |
702 | msgstr "" |
|
1056 | msgstr "" | |
703 |
|
1057 | |||
704 |
#: rhodecode/templates/register.html:6 |
|
1058 | #: rhodecode/templates/register.html:56 | |
705 | #: rhodecode/templates/admin/users/user_add.html:59 |
|
1059 | #: rhodecode/templates/admin/users/user_add.html:59 | |
706 |
#: rhodecode/templates/admin/users/user_edit.html: |
|
1060 | #: rhodecode/templates/admin/users/user_edit.html:83 | |
707 |
#: rhodecode/templates/admin/users/user_edit_my_account.html: |
|
1061 | #: rhodecode/templates/admin/users/user_edit_my_account.html:72 | |
708 | msgid "Last Name" |
|
1062 | msgid "Last Name" | |
709 | msgstr "" |
|
1063 | msgstr "" | |
710 |
|
1064 | |||
711 |
#: rhodecode/templates/register.html: |
|
1065 | #: rhodecode/templates/register.html:65 | |
712 | #: rhodecode/templates/admin/users/user_add.html:68 |
|
1066 | #: rhodecode/templates/admin/users/user_add.html:68 | |
713 |
#: rhodecode/templates/admin/users/user_edit.html: |
|
1067 | #: rhodecode/templates/admin/users/user_edit.html:92 | |
714 |
#: rhodecode/templates/admin/users/user_edit_my_account.html: |
|
1068 | #: rhodecode/templates/admin/users/user_edit_my_account.html:81 | |
715 |
#: rhodecode/templates/summary/summary.html: |
|
1069 | #: rhodecode/templates/summary/summary.html:108 | |
716 | msgid "Email" |
|
1070 | msgid "Email" | |
717 | msgstr "" |
|
1071 | msgstr "" | |
718 |
|
1072 | |||
719 |
#: rhodecode/templates/register.html: |
|
1073 | #: rhodecode/templates/register.html:76 | |
720 | msgid "Your account will be activated right after registration" |
|
1074 | msgid "Your account will be activated right after registration" | |
721 | msgstr "" |
|
1075 | msgstr "" | |
722 |
|
1076 | |||
723 |
#: rhodecode/templates/register.html:8 |
|
1077 | #: rhodecode/templates/register.html:78 | |
724 | msgid "Your account must wait for activation by administrator" |
|
1078 | msgid "Your account must wait for activation by administrator" | |
725 | msgstr "" |
|
1079 | msgstr "" | |
726 |
|
1080 | |||
|
1081 | #: rhodecode/templates/repo_switcher_list.html:14 | |||
|
1082 | msgid "Private repository" | |||
|
1083 | msgstr "" | |||
|
1084 | ||||
|
1085 | #: rhodecode/templates/repo_switcher_list.html:19 | |||
|
1086 | msgid "Public repository" | |||
|
1087 | msgstr "" | |||
|
1088 | ||||
727 | #: rhodecode/templates/admin/admin.html:5 rhodecode/templates/admin/admin.html:9 |
|
1089 | #: rhodecode/templates/admin/admin.html:5 rhodecode/templates/admin/admin.html:9 | |
728 | msgid "Admin journal" |
|
1090 | msgid "Admin journal" | |
729 | msgstr "" |
|
1091 | msgstr "" | |
@@ -744,12 +1106,11 b' msgstr ""' | |||||
744 | msgid "From IP" |
|
1106 | msgid "From IP" | |
745 | msgstr "" |
|
1107 | msgstr "" | |
746 |
|
1108 | |||
747 |
#: rhodecode/templates/admin/admin_log.html: |
|
1109 | #: rhodecode/templates/admin/admin_log.html:52 | |
748 | msgid "No actions yet" |
|
1110 | msgid "No actions yet" | |
749 | msgstr "" |
|
1111 | msgstr "" | |
750 |
|
1112 | |||
751 | #: rhodecode/templates/admin/ldap/ldap.html:5 |
|
1113 | #: rhodecode/templates/admin/ldap/ldap.html:5 | |
752 | #: rhodecode/templates/admin/ldap/ldap.html:24 |
|
|||
753 | msgid "LDAP administration" |
|
1114 | msgid "LDAP administration" | |
754 | msgstr "" |
|
1115 | msgstr "" | |
755 |
|
1116 | |||
@@ -757,8 +1118,12 b' msgstr ""' | |||||
757 | msgid "Ldap" |
|
1118 | msgid "Ldap" | |
758 | msgstr "" |
|
1119 | msgstr "" | |
759 |
|
1120 | |||
|
1121 | #: rhodecode/templates/admin/ldap/ldap.html:28 | |||
|
1122 | msgid "Connection settings" | |||
|
1123 | msgstr "" | |||
|
1124 | ||||
760 | #: rhodecode/templates/admin/ldap/ldap.html:30 |
|
1125 | #: rhodecode/templates/admin/ldap/ldap.html:30 | |
761 |
msgid "Enable |
|
1126 | msgid "Enable LDAP" | |
762 | msgstr "" |
|
1127 | msgstr "" | |
763 |
|
1128 | |||
764 | #: rhodecode/templates/admin/ldap/ldap.html:34 |
|
1129 | #: rhodecode/templates/admin/ldap/ldap.html:34 | |
@@ -770,24 +1135,71 b' msgid "Port"' | |||||
770 | msgstr "" |
|
1135 | msgstr "" | |
771 |
|
1136 | |||
772 | #: rhodecode/templates/admin/ldap/ldap.html:42 |
|
1137 | #: rhodecode/templates/admin/ldap/ldap.html:42 | |
773 | msgid "Enable LDAPS" |
|
|||
774 | msgstr "" |
|
|||
775 |
|
||||
776 | #: rhodecode/templates/admin/ldap/ldap.html:46 |
|
|||
777 | msgid "Account" |
|
1138 | msgid "Account" | |
778 | msgstr "" |
|
1139 | msgstr "" | |
779 |
|
1140 | |||
|
1141 | #: rhodecode/templates/admin/ldap/ldap.html:50 | |||
|
1142 | msgid "Connection security" | |||
|
1143 | msgstr "" | |||
|
1144 | ||||
780 | #: rhodecode/templates/admin/ldap/ldap.html:54 |
|
1145 | #: rhodecode/templates/admin/ldap/ldap.html:54 | |
|
1146 | msgid "Certificate Checks" | |||
|
1147 | msgstr "" | |||
|
1148 | ||||
|
1149 | #: rhodecode/templates/admin/ldap/ldap.html:57 | |||
|
1150 | msgid "Search settings" | |||
|
1151 | msgstr "" | |||
|
1152 | ||||
|
1153 | #: rhodecode/templates/admin/ldap/ldap.html:59 | |||
781 | msgid "Base DN" |
|
1154 | msgid "Base DN" | |
782 | msgstr "" |
|
1155 | msgstr "" | |
783 |
|
1156 | |||
|
1157 | #: rhodecode/templates/admin/ldap/ldap.html:63 | |||
|
1158 | msgid "LDAP Filter" | |||
|
1159 | msgstr "" | |||
|
1160 | ||||
|
1161 | #: rhodecode/templates/admin/ldap/ldap.html:67 | |||
|
1162 | msgid "LDAP Search Scope" | |||
|
1163 | msgstr "" | |||
|
1164 | ||||
|
1165 | #: rhodecode/templates/admin/ldap/ldap.html:70 | |||
|
1166 | msgid "Attribute mappings" | |||
|
1167 | msgstr "" | |||
|
1168 | ||||
|
1169 | #: rhodecode/templates/admin/ldap/ldap.html:72 | |||
|
1170 | msgid "Login Attribute" | |||
|
1171 | msgstr "" | |||
|
1172 | ||||
|
1173 | #: rhodecode/templates/admin/ldap/ldap.html:76 | |||
|
1174 | msgid "First Name Attribute" | |||
|
1175 | msgstr "" | |||
|
1176 | ||||
|
1177 | #: rhodecode/templates/admin/ldap/ldap.html:80 | |||
|
1178 | msgid "Last Name Attribute" | |||
|
1179 | msgstr "" | |||
|
1180 | ||||
|
1181 | #: rhodecode/templates/admin/ldap/ldap.html:84 | |||
|
1182 | msgid "E-mail Attribute" | |||
|
1183 | msgstr "" | |||
|
1184 | ||||
|
1185 | #: rhodecode/templates/admin/ldap/ldap.html:89 | |||
|
1186 | #: rhodecode/templates/admin/settings/hooks.html:73 | |||
|
1187 | #: rhodecode/templates/admin/users/user_edit.html:117 | |||
|
1188 | #: rhodecode/templates/admin/users/user_edit.html:142 | |||
|
1189 | #: rhodecode/templates/admin/users/user_edit_my_account.html:89 | |||
|
1190 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:263 | |||
|
1191 | msgid "Save" | |||
|
1192 | msgstr "" | |||
|
1193 | ||||
784 | #: rhodecode/templates/admin/permissions/permissions.html:5 |
|
1194 | #: rhodecode/templates/admin/permissions/permissions.html:5 | |
785 | msgid "Permissions administration" |
|
1195 | msgid "Permissions administration" | |
786 | msgstr "" |
|
1196 | msgstr "" | |
787 |
|
1197 | |||
788 | #: rhodecode/templates/admin/permissions/permissions.html:11 |
|
1198 | #: rhodecode/templates/admin/permissions/permissions.html:11 | |
789 |
#: rhodecode/templates/admin/repos/repo_edit.html: |
|
1199 | #: rhodecode/templates/admin/repos/repo_edit.html:109 | |
790 |
#: rhodecode/templates/ |
|
1200 | #: rhodecode/templates/admin/users/user_edit.html:127 | |
|
1201 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:248 | |||
|
1202 | #: rhodecode/templates/settings/repo_settings.html:58 | |||
791 | msgid "Permissions" |
|
1203 | msgid "Permissions" | |
792 | msgstr "" |
|
1204 | msgstr "" | |
793 |
|
1205 | |||
@@ -822,6 +1234,10 b' msgstr ""' | |||||
822 | msgid "Repository creation" |
|
1234 | msgid "Repository creation" | |
823 | msgstr "" |
|
1235 | msgstr "" | |
824 |
|
1236 | |||
|
1237 | #: rhodecode/templates/admin/permissions/permissions.html:71 | |||
|
1238 | msgid "set" | |||
|
1239 | msgstr "" | |||
|
1240 | ||||
825 | #: rhodecode/templates/admin/repos/repo_add.html:5 |
|
1241 | #: rhodecode/templates/admin/repos/repo_add.html:5 | |
826 | #: rhodecode/templates/admin/repos/repo_add_create_repository.html:5 |
|
1242 | #: rhodecode/templates/admin/repos/repo_add_create_repository.html:5 | |
827 | msgid "Add repository" |
|
1243 | msgid "Add repository" | |
@@ -830,6 +1246,7 b' msgstr ""' | |||||
830 | #: rhodecode/templates/admin/repos/repo_add.html:11 |
|
1246 | #: rhodecode/templates/admin/repos/repo_add.html:11 | |
831 | #: rhodecode/templates/admin/repos/repo_edit.html:11 |
|
1247 | #: rhodecode/templates/admin/repos/repo_edit.html:11 | |
832 | #: rhodecode/templates/admin/repos/repos.html:10 |
|
1248 | #: rhodecode/templates/admin/repos/repos.html:10 | |
|
1249 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10 | |||
833 | msgid "Repositories" |
|
1250 | msgid "Repositories" | |
834 | msgstr "" |
|
1251 | msgstr "" | |
835 |
|
1252 | |||
@@ -837,20 +1254,34 b' msgstr ""' | |||||
837 | msgid "add new" |
|
1254 | msgid "add new" | |
838 | msgstr "" |
|
1255 | msgstr "" | |
839 |
|
1256 | |||
840 |
#: rhodecode/templates/admin/repos/repo_add.html: |
|
1257 | #: rhodecode/templates/admin/repos/repo_add_base.html:20 | |
841 | #: rhodecode/templates/admin/repos/repo_add_create_repository.html:36 |
|
1258 | #: rhodecode/templates/summary/summary.html:80 | |
842 |
#: rhodecode/templates/ |
|
1259 | #: rhodecode/templates/summary/summary.html:82 | |
|
1260 | msgid "Clone from" | |||
|
1261 | msgstr "" | |||
|
1262 | ||||
|
1263 | #: rhodecode/templates/admin/repos/repo_add_base.html:28 | |||
|
1264 | #: rhodecode/templates/admin/repos/repo_edit.html:48 | |||
|
1265 | #: rhodecode/templates/admin/repos_groups/repos_groups.html:4 | |||
|
1266 | msgid "Repository group" | |||
|
1267 | msgstr "" | |||
|
1268 | ||||
|
1269 | #: rhodecode/templates/admin/repos/repo_add_base.html:36 | |||
|
1270 | #: rhodecode/templates/admin/repos/repo_edit.html:56 | |||
843 | msgid "Type" |
|
1271 | msgid "Type" | |
844 | msgstr "" |
|
1272 | msgstr "" | |
845 |
|
1273 | |||
846 |
#: rhodecode/templates/admin/repos/repo_add.html:5 |
|
1274 | #: rhodecode/templates/admin/repos/repo_add_base.html:52 | |
847 |
#: rhodecode/templates/admin/repos/repo_ |
|
1275 | #: rhodecode/templates/admin/repos/repo_edit.html:73 | |
848 |
#: rhodecode/templates/ |
|
1276 | #: rhodecode/templates/settings/repo_fork.html:48 | |
849 |
#: rhodecode/templates/settings/repo_ |
|
1277 | #: rhodecode/templates/settings/repo_settings.html:49 | |
850 | #: rhodecode/templates/settings/repo_settings.html:47 |
|
|||
851 | msgid "Private" |
|
1278 | msgid "Private" | |
852 | msgstr "" |
|
1279 | msgstr "" | |
853 |
|
1280 | |||
|
1281 | #: rhodecode/templates/admin/repos/repo_add_base.html:59 | |||
|
1282 | msgid "add" | |||
|
1283 | msgstr "" | |||
|
1284 | ||||
854 | #: rhodecode/templates/admin/repos/repo_add_create_repository.html:9 |
|
1285 | #: rhodecode/templates/admin/repos/repo_add_create_repository.html:9 | |
855 | msgid "add new repository" |
|
1286 | msgid "add new repository" | |
856 | msgstr "" |
|
1287 | msgstr "" | |
@@ -861,121 +1292,268 b' msgstr ""' | |||||
861 |
|
1292 | |||
862 | #: rhodecode/templates/admin/repos/repo_edit.html:13 |
|
1293 | #: rhodecode/templates/admin/repos/repo_edit.html:13 | |
863 | #: rhodecode/templates/admin/users/user_edit.html:13 |
|
1294 | #: rhodecode/templates/admin/users/user_edit.html:13 | |
864 |
#: rhodecode/templates/admin/users/user_edit_my_account.html:14 |
|
1295 | #: rhodecode/templates/admin/users/user_edit_my_account.html:148 | |
|
1296 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:13 | |||
|
1297 | #: rhodecode/templates/files/files_annotate.html:49 | |||
|
1298 | #: rhodecode/templates/files/files_source.html:20 | |||
865 | msgid "edit" |
|
1299 | msgid "edit" | |
866 | msgstr "" |
|
1300 | msgstr "" | |
867 |
|
1301 | |||
868 |
#: rhodecode/templates/admin/repos/repo_edit.html: |
|
1302 | #: rhodecode/templates/admin/repos/repo_edit.html:40 | |
|
1303 | msgid "Clone uri" | |||
|
1304 | msgstr "" | |||
|
1305 | ||||
|
1306 | #: rhodecode/templates/admin/repos/repo_edit.html:81 | |||
869 | msgid "Enable statistics" |
|
1307 | msgid "Enable statistics" | |
870 | msgstr "" |
|
1308 | msgstr "" | |
871 |
|
1309 | |||
872 |
#: rhodecode/templates/admin/repos/repo_edit.html:9 |
|
1310 | #: rhodecode/templates/admin/repos/repo_edit.html:89 | |
873 | #: rhodecode/templates/settings/repo_settings.html:61 |
|
1311 | msgid "Enable downloads" | |
874 | msgid "none" |
|
1312 | msgstr "" | |
875 | msgstr "" |
|
1313 | ||
876 |
|
1314 | #: rhodecode/templates/admin/repos/repo_edit.html:127 | ||
877 | #: rhodecode/templates/admin/repos/repo_edit.html:91 |
|
1315 | msgid "Administration" | |
878 | #: rhodecode/templates/settings/repo_settings.html:62 |
|
1316 | msgstr "" | |
879 | msgid "read" |
|
1317 | ||
880 | msgstr "" |
|
1318 | #: rhodecode/templates/admin/repos/repo_edit.html:130 | |
881 |
|
1319 | msgid "Statistics" | ||
882 | #: rhodecode/templates/admin/repos/repo_edit.html:92 |
|
1320 | msgstr "" | |
883 | #: rhodecode/templates/settings/repo_settings.html:63 |
|
1321 | ||
884 | msgid "write" |
|
1322 | #: rhodecode/templates/admin/repos/repo_edit.html:134 | |
885 | msgstr "" |
|
1323 | msgid "Reset current statistics" | |
886 |
|
1324 | msgstr "" | ||
887 | #: rhodecode/templates/admin/repos/repo_edit.html:93 |
|
1325 | ||
888 |
#: rhodecode/templates/admin/ |
|
1326 | #: rhodecode/templates/admin/repos/repo_edit.html:134 | |
889 | #: rhodecode/templates/base/base.html:226 |
|
1327 | msgid "Confirm to remove current statistics" | |
890 | #: rhodecode/templates/settings/repo_settings.html:64 |
|
1328 | msgstr "" | |
891 | msgid "admin" |
|
1329 | ||
892 | msgstr "" |
|
1330 | #: rhodecode/templates/admin/repos/repo_edit.html:137 | |
893 |
|
1331 | msgid "Fetched to rev" | ||
894 | #: rhodecode/templates/admin/repos/repo_edit.html:124 |
|
1332 | msgstr "" | |
895 | #: rhodecode/templates/settings/repo_settings.html:95 |
|
1333 | ||
896 | msgid "Failed to remove user" |
|
1334 | #: rhodecode/templates/admin/repos/repo_edit.html:138 | |
|
1335 | msgid "Percentage of stats gathered" | |||
|
1336 | msgstr "" | |||
|
1337 | ||||
|
1338 | #: rhodecode/templates/admin/repos/repo_edit.html:147 | |||
|
1339 | msgid "Remote" | |||
|
1340 | msgstr "" | |||
|
1341 | ||||
|
1342 | #: rhodecode/templates/admin/repos/repo_edit.html:151 | |||
|
1343 | msgid "Pull changes from remote location" | |||
897 | msgstr "" |
|
1344 | msgstr "" | |
898 |
|
1345 | |||
899 | #: rhodecode/templates/admin/repos/repo_edit.html:151 |
|
1346 | #: rhodecode/templates/admin/repos/repo_edit.html:151 | |
900 | #: rhodecode/templates/settings/repo_settings.html:123 |
|
1347 | msgid "Confirm to pull changes from remote side" | |
901 | msgid "Add another user" |
|
1348 | msgstr "" | |
902 | msgstr "" |
|
1349 | ||
903 |
|
1350 | #: rhodecode/templates/admin/repos/repo_edit.html:162 | ||
904 | #: rhodecode/templates/admin/repos/repo_edit.html:293 |
|
|||
905 | msgid "Administration" |
|
|||
906 | msgstr "" |
|
|||
907 |
|
||||
908 | #: rhodecode/templates/admin/repos/repo_edit.html:296 |
|
|||
909 | msgid "Statistics" |
|
|||
910 | msgstr "" |
|
|||
911 |
|
||||
912 | #: rhodecode/templates/admin/repos/repo_edit.html:301 |
|
|||
913 | msgid "Reset current statistics" |
|
|||
914 | msgstr "" |
|
|||
915 |
|
||||
916 | #: rhodecode/templates/admin/repos/repo_edit.html:305 |
|
|||
917 | msgid "Fetched to rev" |
|
|||
918 | msgstr "" |
|
|||
919 |
|
||||
920 | #: rhodecode/templates/admin/repos/repo_edit.html:306 |
|
|||
921 | msgid "Percentage of stats gathered" |
|
|||
922 | msgstr "" |
|
|||
923 |
|
||||
924 | #: rhodecode/templates/admin/repos/repo_edit.html:314 |
|
|||
925 | msgid "Cache" |
|
1351 | msgid "Cache" | |
926 | msgstr "" |
|
1352 | msgstr "" | |
927 |
|
1353 | |||
928 |
#: rhodecode/templates/admin/repos/repo_edit.html: |
|
1354 | #: rhodecode/templates/admin/repos/repo_edit.html:166 | |
929 | msgid "Invalidate repository cache" |
|
1355 | msgid "Invalidate repository cache" | |
930 | msgstr "" |
|
1356 | msgstr "" | |
931 |
|
1357 | |||
932 |
#: rhodecode/templates/admin/repos/repo_edit.html: |
|
1358 | #: rhodecode/templates/admin/repos/repo_edit.html:166 | |
|
1359 | msgid "Confirm to invalidate repository cache" | |||
|
1360 | msgstr "" | |||
|
1361 | ||||
|
1362 | #: rhodecode/templates/admin/repos/repo_edit.html:177 | |||
|
1363 | msgid "Remove from public journal" | |||
|
1364 | msgstr "" | |||
|
1365 | ||||
|
1366 | #: rhodecode/templates/admin/repos/repo_edit.html:179 | |||
|
1367 | msgid "Add to public journal" | |||
|
1368 | msgstr "" | |||
|
1369 | ||||
|
1370 | #: rhodecode/templates/admin/repos/repo_edit.html:185 | |||
933 | msgid "Delete" |
|
1371 | msgid "Delete" | |
934 | msgstr "" |
|
1372 | msgstr "" | |
935 |
|
1373 | |||
936 |
#: rhodecode/templates/admin/repos/repo_edit.html: |
|
1374 | #: rhodecode/templates/admin/repos/repo_edit.html:189 | |
937 | msgid "Remove this repository" |
|
1375 | msgid "Remove this repository" | |
938 | msgstr "" |
|
1376 | msgstr "" | |
939 |
|
1377 | |||
|
1378 | #: rhodecode/templates/admin/repos/repo_edit.html:189 | |||
|
1379 | #: rhodecode/templates/admin/repos/repos.html:79 | |||
|
1380 | msgid "Confirm to delete this repository" | |||
|
1381 | msgstr "" | |||
|
1382 | ||||
|
1383 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:3 | |||
|
1384 | msgid "none" | |||
|
1385 | msgstr "" | |||
|
1386 | ||||
|
1387 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:4 | |||
|
1388 | msgid "read" | |||
|
1389 | msgstr "" | |||
|
1390 | ||||
|
1391 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:5 | |||
|
1392 | msgid "write" | |||
|
1393 | msgstr "" | |||
|
1394 | ||||
|
1395 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:6 | |||
|
1396 | #: rhodecode/templates/admin/users/users.html:38 | |||
|
1397 | #: rhodecode/templates/base/base.html:296 | |||
|
1398 | msgid "admin" | |||
|
1399 | msgstr "" | |||
|
1400 | ||||
|
1401 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:7 | |||
|
1402 | msgid "member" | |||
|
1403 | msgstr "" | |||
|
1404 | ||||
|
1405 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:33 | |||
|
1406 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:53 | |||
|
1407 | msgid "revoke" | |||
|
1408 | msgstr "" | |||
|
1409 | ||||
|
1410 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:75 | |||
|
1411 | msgid "Add another member" | |||
|
1412 | msgstr "" | |||
|
1413 | ||||
|
1414 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:89 | |||
|
1415 | msgid "Failed to remove user" | |||
|
1416 | msgstr "" | |||
|
1417 | ||||
|
1418 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:104 | |||
|
1419 | msgid "Failed to remove users group" | |||
|
1420 | msgstr "" | |||
|
1421 | ||||
|
1422 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:205 | |||
|
1423 | msgid "Group" | |||
|
1424 | msgstr "" | |||
|
1425 | ||||
|
1426 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:206 | |||
|
1427 | #: rhodecode/templates/admin/users_groups/users_groups.html:33 | |||
|
1428 | msgid "members" | |||
|
1429 | msgstr "" | |||
|
1430 | ||||
940 | #: rhodecode/templates/admin/repos/repos.html:5 |
|
1431 | #: rhodecode/templates/admin/repos/repos.html:5 | |
941 | msgid "Repositories administration" |
|
1432 | msgid "Repositories administration" | |
942 | msgstr "" |
|
1433 | msgstr "" | |
943 |
|
1434 | |||
944 | #: rhodecode/templates/admin/repos/repos.html:34 |
|
1435 | #: rhodecode/templates/admin/repos/repos.html:34 | |
945 |
#: rhodecode/templates/summary/summary.html: |
|
1436 | #: rhodecode/templates/summary/summary.html:100 | |
946 | msgid "Contact" |
|
1437 | msgid "Contact" | |
947 | msgstr "" |
|
1438 | msgstr "" | |
948 |
|
1439 | |||
949 | #: rhodecode/templates/admin/repos/repos.html:35 |
|
1440 | #: rhodecode/templates/admin/repos/repos.html:35 | |
950 |
#: rhodecode/templates/admin/ |
|
1441 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36 | |
951 |
#: rhodecode/templates/admin/users/user |
|
1442 | #: rhodecode/templates/admin/users/user_edit_my_account.html:119 | |
|
1443 | #: rhodecode/templates/admin/users/users.html:40 | |||
|
1444 | #: rhodecode/templates/admin/users_groups/users_groups.html:35 | |||
952 | msgid "action" |
|
1445 | msgid "action" | |
953 | msgstr "" |
|
1446 | msgstr "" | |
954 |
|
1447 | |||
955 | #: rhodecode/templates/admin/repos/repos.html:51 |
|
1448 | #: rhodecode/templates/admin/repos/repos.html:51 | |
956 |
#: rhodecode/templates/admin/users/user_edit_my_account.html:13 |
|
1449 | #: rhodecode/templates/admin/users/user_edit_my_account.html:134 | |
957 |
#: rhodecode/templates/admin/users/user_edit_my_account.html:14 |
|
1450 | #: rhodecode/templates/admin/users/user_edit_my_account.html:148 | |
958 | msgid "private" |
|
1451 | msgid "private" | |
959 | msgstr "" |
|
1452 | msgstr "" | |
960 |
|
1453 | |||
961 | #: rhodecode/templates/admin/repos/repos.html:53 |
|
1454 | #: rhodecode/templates/admin/repos/repos.html:53 | |
962 | #: rhodecode/templates/admin/repos/repos.html:59 |
|
1455 | #: rhodecode/templates/admin/repos/repos.html:59 | |
963 |
#: rhodecode/templates/admin/users/user_edit_my_account.html:13 |
|
1456 | #: rhodecode/templates/admin/users/user_edit_my_account.html:136 | |
964 |
#: rhodecode/templates/admin/users/user_edit_my_account.html:14 |
|
1457 | #: rhodecode/templates/admin/users/user_edit_my_account.html:142 | |
965 |
#: rhodecode/templates/summary/summary.html:6 |
|
1458 | #: rhodecode/templates/summary/summary.html:68 | |
966 | msgid "public" |
|
1459 | msgid "public" | |
967 | msgstr "" |
|
1460 | msgstr "" | |
968 |
|
1461 | |||
|
1462 | #: rhodecode/templates/admin/repos/repos.html:79 | |||
|
1463 | #: rhodecode/templates/admin/users/users.html:55 | |||
|
1464 | msgid "delete" | |||
|
1465 | msgstr "" | |||
|
1466 | ||||
|
1467 | #: rhodecode/templates/admin/repos_groups/repos_groups.html:8 | |||
|
1468 | msgid "Groups" | |||
|
1469 | msgstr "" | |||
|
1470 | ||||
|
1471 | #: rhodecode/templates/admin/repos_groups/repos_groups.html:13 | |||
|
1472 | msgid "with" | |||
|
1473 | msgstr "" | |||
|
1474 | ||||
|
1475 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 | |||
|
1476 | msgid "Add repos group" | |||
|
1477 | msgstr "" | |||
|
1478 | ||||
|
1479 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10 | |||
|
1480 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10 | |||
|
1481 | msgid "Repos groups" | |||
|
1482 | msgstr "" | |||
|
1483 | ||||
|
1484 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12 | |||
|
1485 | msgid "add new repos group" | |||
|
1486 | msgstr "" | |||
|
1487 | ||||
|
1488 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50 | |||
|
1489 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50 | |||
|
1490 | msgid "Group parent" | |||
|
1491 | msgstr "" | |||
|
1492 | ||||
|
1493 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58 | |||
|
1494 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58 | |||
|
1495 | #: rhodecode/templates/admin/users/user_add.html:85 | |||
|
1496 | #: rhodecode/templates/admin/users_groups/users_group_add.html:49 | |||
|
1497 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:90 | |||
|
1498 | msgid "save" | |||
|
1499 | msgstr "" | |||
|
1500 | ||||
|
1501 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5 | |||
|
1502 | msgid "Edit repos group" | |||
|
1503 | msgstr "" | |||
|
1504 | ||||
|
1505 | #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12 | |||
|
1506 | msgid "edit repos group" | |||
|
1507 | msgstr "" | |||
|
1508 | ||||
|
1509 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5 | |||
|
1510 | msgid "Repositories groups administration" | |||
|
1511 | msgstr "" | |||
|
1512 | ||||
|
1513 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22 | |||
|
1514 | msgid "ADD NEW GROUP" | |||
|
1515 | msgstr "" | |||
|
1516 | ||||
|
1517 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35 | |||
|
1518 | msgid "Number of repositories" | |||
|
1519 | msgstr "" | |||
|
1520 | ||||
|
1521 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54 | |||
|
1522 | msgid "Confirm to delete this group" | |||
|
1523 | msgstr "" | |||
|
1524 | ||||
|
1525 | #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62 | |||
|
1526 | msgid "There are no repositories groups yet" | |||
|
1527 | msgstr "" | |||
|
1528 | ||||
|
1529 | #: rhodecode/templates/admin/settings/hooks.html:5 | |||
969 | #: rhodecode/templates/admin/settings/settings.html:5 |
|
1530 | #: rhodecode/templates/admin/settings/settings.html:5 | |
970 | msgid "Settings administration" |
|
1531 | msgid "Settings administration" | |
971 | msgstr "" |
|
1532 | msgstr "" | |
972 |
|
1533 | |||
|
1534 | #: rhodecode/templates/admin/settings/hooks.html:9 | |||
973 | #: rhodecode/templates/admin/settings/settings.html:9 |
|
1535 | #: rhodecode/templates/admin/settings/settings.html:9 | |
974 | #: rhodecode/templates/settings/repo_settings.html:5 |
|
1536 | #: rhodecode/templates/settings/repo_settings.html:5 | |
975 |
#: rhodecode/templates/settings/repo_settings.html:1 |
|
1537 | #: rhodecode/templates/settings/repo_settings.html:13 | |
976 | msgid "Settings" |
|
1538 | msgid "Settings" | |
977 | msgstr "" |
|
1539 | msgstr "" | |
978 |
|
1540 | |||
|
1541 | #: rhodecode/templates/admin/settings/hooks.html:24 | |||
|
1542 | msgid "Built in hooks - read only" | |||
|
1543 | msgstr "" | |||
|
1544 | ||||
|
1545 | #: rhodecode/templates/admin/settings/hooks.html:40 | |||
|
1546 | msgid "Custom hooks" | |||
|
1547 | msgstr "" | |||
|
1548 | ||||
|
1549 | #: rhodecode/templates/admin/settings/hooks.html:56 | |||
|
1550 | msgid "remove" | |||
|
1551 | msgstr "" | |||
|
1552 | ||||
|
1553 | #: rhodecode/templates/admin/settings/hooks.html:88 | |||
|
1554 | msgid "Failed to remove hook" | |||
|
1555 | msgstr "" | |||
|
1556 | ||||
979 | #: rhodecode/templates/admin/settings/settings.html:24 |
|
1557 | #: rhodecode/templates/admin/settings/settings.html:24 | |
980 | msgid "Remap and rescan repositories" |
|
1558 | msgid "Remap and rescan repositories" | |
981 | msgstr "" |
|
1559 | msgstr "" | |
@@ -995,6 +1573,10 b' msgstr ""' | |||||
995 | msgid "destroy old data" |
|
1573 | msgid "destroy old data" | |
996 | msgstr "" |
|
1574 | msgstr "" | |
997 |
|
1575 | |||
|
1576 | #: rhodecode/templates/admin/settings/settings.html:45 | |||
|
1577 | msgid "Rescan repositories" | |||
|
1578 | msgstr "" | |||
|
1579 | ||||
998 | #: rhodecode/templates/admin/settings/settings.html:51 |
|
1580 | #: rhodecode/templates/admin/settings/settings.html:51 | |
999 | msgid "Whoosh indexing" |
|
1581 | msgid "Whoosh indexing" | |
1000 | msgstr "" |
|
1582 | msgstr "" | |
@@ -1007,6 +1589,10 b' msgstr ""' | |||||
1007 | msgid "build from scratch" |
|
1589 | msgid "build from scratch" | |
1008 | msgstr "" |
|
1590 | msgstr "" | |
1009 |
|
1591 | |||
|
1592 | #: rhodecode/templates/admin/settings/settings.html:70 | |||
|
1593 | msgid "Reindex" | |||
|
1594 | msgstr "" | |||
|
1595 | ||||
1010 | #: rhodecode/templates/admin/settings/settings.html:76 |
|
1596 | #: rhodecode/templates/admin/settings/settings.html:76 | |
1011 | msgid "Global application settings" |
|
1597 | msgid "Global application settings" | |
1012 | msgstr "" |
|
1598 | msgstr "" | |
@@ -1019,50 +1605,73 b' msgstr ""' | |||||
1019 | msgid "Realm text" |
|
1605 | msgid "Realm text" | |
1020 | msgstr "" |
|
1606 | msgstr "" | |
1021 |
|
1607 | |||
1022 |
#: rhodecode/templates/admin/settings/settings.html:10 |
|
1608 | #: rhodecode/templates/admin/settings/settings.html:103 | |
1023 | msgid "Mercurial settings" |
|
1609 | msgid "GA code" | |
|
1610 | msgstr "" | |||
|
1611 | ||||
|
1612 | #: rhodecode/templates/admin/settings/settings.html:111 | |||
|
1613 | #: rhodecode/templates/admin/settings/settings.html:177 | |||
|
1614 | msgid "Save settings" | |||
|
1615 | msgstr "" | |||
|
1616 | ||||
|
1617 | #: rhodecode/templates/admin/settings/settings.html:112 | |||
|
1618 | #: rhodecode/templates/admin/settings/settings.html:178 | |||
|
1619 | #: rhodecode/templates/admin/users/user_edit.html:118 | |||
|
1620 | #: rhodecode/templates/admin/users/user_edit.html:143 | |||
|
1621 | #: rhodecode/templates/admin/users/user_edit_my_account.html:90 | |||
|
1622 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:264 | |||
|
1623 | #: rhodecode/templates/files/files_edit.html:50 | |||
|
1624 | msgid "Reset" | |||
1024 | msgstr "" |
|
1625 | msgstr "" | |
1025 |
|
1626 | |||
1026 | #: rhodecode/templates/admin/settings/settings.html:118 |
|
1627 | #: rhodecode/templates/admin/settings/settings.html:118 | |
|
1628 | msgid "Mercurial settings" | |||
|
1629 | msgstr "" | |||
|
1630 | ||||
|
1631 | #: rhodecode/templates/admin/settings/settings.html:127 | |||
1027 | msgid "Web" |
|
1632 | msgid "Web" | |
1028 | msgstr "" |
|
1633 | msgstr "" | |
1029 |
|
1634 | |||
1030 |
#: rhodecode/templates/admin/settings/settings.html:1 |
|
1635 | #: rhodecode/templates/admin/settings/settings.html:132 | |
1031 | msgid "require ssl for pushing" |
|
1636 | msgid "require ssl for pushing" | |
1032 | msgstr "" |
|
1637 | msgstr "" | |
1033 |
|
1638 | |||
1034 | #: rhodecode/templates/admin/settings/settings.html:130 |
|
|||
1035 | msgid "Hooks" |
|
|||
1036 | msgstr "" |
|
|||
1037 |
|
||||
1038 | #: rhodecode/templates/admin/settings/settings.html:135 |
|
|||
1039 | msgid "Update repository after push (hg update)" |
|
|||
1040 | msgstr "" |
|
|||
1041 |
|
||||
1042 | #: rhodecode/templates/admin/settings/settings.html:139 |
|
1639 | #: rhodecode/templates/admin/settings/settings.html:139 | |
1043 | msgid "Show repository size after push" |
|
1640 | msgid "Hooks" | |
1044 | msgstr "" |
|
1641 | msgstr "" | |
1045 |
|
1642 | |||
1046 |
#: rhodecode/templates/admin/settings/settings.html:14 |
|
1643 | #: rhodecode/templates/admin/settings/settings.html:142 | |
1047 | msgid "Log user push commands" |
|
1644 | msgid "advanced setup" | |
1048 | msgstr "" |
|
1645 | msgstr "" | |
1049 |
|
1646 | |||
1050 | #: rhodecode/templates/admin/settings/settings.html:147 |
|
1647 | #: rhodecode/templates/admin/settings/settings.html:147 | |
1051 | msgid "Log user pull commands" |
|
1648 | msgid "Update repository after push (hg update)" | |
1052 | msgstr "" |
|
1649 | msgstr "" | |
1053 |
|
1650 | |||
1054 |
#: rhodecode/templates/admin/settings/settings.html:15 |
|
1651 | #: rhodecode/templates/admin/settings/settings.html:151 | |
1055 | msgid "Repositories location" |
|
1652 | msgid "Show repository size after push" | |
|
1653 | msgstr "" | |||
|
1654 | ||||
|
1655 | #: rhodecode/templates/admin/settings/settings.html:155 | |||
|
1656 | msgid "Log user push commands" | |||
1056 | msgstr "" |
|
1657 | msgstr "" | |
1057 |
|
1658 | |||
1058 | #: rhodecode/templates/admin/settings/settings.html:159 |
|
1659 | #: rhodecode/templates/admin/settings/settings.html:159 | |
|
1660 | msgid "Log user pull commands" | |||
|
1661 | msgstr "" | |||
|
1662 | ||||
|
1663 | #: rhodecode/templates/admin/settings/settings.html:166 | |||
|
1664 | msgid "Repositories location" | |||
|
1665 | msgstr "" | |||
|
1666 | ||||
|
1667 | #: rhodecode/templates/admin/settings/settings.html:171 | |||
1059 | msgid "" |
|
1668 | msgid "" | |
1060 |
"This a crucial application setting. If |
|
1669 | "This a crucial application setting. If you are really sure you need to change" | |
1061 |
"this, you must restart application in order to make this setting |
|
1670 | " this, you must restart application in order to make this setting take " | |
1062 | "effect. Click this label to unlock." |
|
1671 | "effect. Click this label to unlock." | |
1063 | msgstr "" |
|
1672 | msgstr "" | |
1064 |
|
1673 | |||
1065 |
#: rhodecode/templates/admin/settings/settings.html:1 |
|
1674 | #: rhodecode/templates/admin/settings/settings.html:172 | |
1066 | msgid "unlock" |
|
1675 | msgid "unlock" | |
1067 | msgstr "" |
|
1676 | msgstr "" | |
1068 |
|
1677 | |||
@@ -1081,7 +1690,9 b' msgid "add new user"' | |||||
1081 | msgstr "" |
|
1690 | msgstr "" | |
1082 |
|
1691 | |||
1083 | #: rhodecode/templates/admin/users/user_add.html:77 |
|
1692 | #: rhodecode/templates/admin/users/user_add.html:77 | |
1084 |
#: rhodecode/templates/admin/users/user_edit.html: |
|
1693 | #: rhodecode/templates/admin/users/user_edit.html:101 | |
|
1694 | #: rhodecode/templates/admin/users_groups/users_group_add.html:41 | |||
|
1695 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:42 | |||
1085 | msgid "Active" |
|
1696 | msgid "Active" | |
1086 | msgstr "" |
|
1697 | msgstr "" | |
1087 |
|
1698 | |||
@@ -1089,16 +1700,35 b' msgstr ""' | |||||
1089 | msgid "Edit user" |
|
1700 | msgid "Edit user" | |
1090 | msgstr "" |
|
1701 | msgstr "" | |
1091 |
|
1702 | |||
1092 |
#: rhodecode/templates/admin/users/user_edit.html:3 |
|
1703 | #: rhodecode/templates/admin/users/user_edit.html:33 | |
|
1704 | #: rhodecode/templates/admin/users/user_edit_my_account.html:32 | |||
|
1705 | msgid "Change your avatar at" | |||
|
1706 | msgstr "" | |||
|
1707 | ||||
|
1708 | #: rhodecode/templates/admin/users/user_edit.html:34 | |||
1093 | #: rhodecode/templates/admin/users/user_edit_my_account.html:33 |
|
1709 | #: rhodecode/templates/admin/users/user_edit_my_account.html:33 | |
1094 | msgid "Using" |
|
1710 | msgid "Using" | |
1095 | msgstr "" |
|
1711 | msgstr "" | |
1096 |
|
1712 | |||
1097 |
#: rhodecode/templates/admin/users/user_edit.html: |
|
1713 | #: rhodecode/templates/admin/users/user_edit.html:40 | |
1098 |
#: rhodecode/templates/admin/users/user_edit_my_account.html: |
|
1714 | #: rhodecode/templates/admin/users/user_edit_my_account.html:39 | |
|
1715 | msgid "API key" | |||
|
1716 | msgstr "" | |||
|
1717 | ||||
|
1718 | #: rhodecode/templates/admin/users/user_edit.html:56 | |||
|
1719 | msgid "LDAP DN" | |||
|
1720 | msgstr "" | |||
|
1721 | ||||
|
1722 | #: rhodecode/templates/admin/users/user_edit.html:65 | |||
|
1723 | #: rhodecode/templates/admin/users/user_edit_my_account.html:54 | |||
1099 | msgid "New password" |
|
1724 | msgid "New password" | |
1100 | msgstr "" |
|
1725 | msgstr "" | |
1101 |
|
1726 | |||
|
1727 | #: rhodecode/templates/admin/users/user_edit.html:135 | |||
|
1728 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:256 | |||
|
1729 | msgid "Create repositories" | |||
|
1730 | msgstr "" | |||
|
1731 | ||||
1102 | #: rhodecode/templates/admin/users/user_edit_my_account.html:5 |
|
1732 | #: rhodecode/templates/admin/users/user_edit_my_account.html:5 | |
1103 | msgid "My account" |
|
1733 | msgid "My account" | |
1104 | msgstr "" |
|
1734 | msgstr "" | |
@@ -1107,26 +1737,26 b' msgstr ""' | |||||
1107 | msgid "My Account" |
|
1737 | msgid "My Account" | |
1108 | msgstr "" |
|
1738 | msgstr "" | |
1109 |
|
1739 | |||
1110 |
#: rhodecode/templates/admin/users/user_edit_my_account.html:10 |
|
1740 | #: rhodecode/templates/admin/users/user_edit_my_account.html:101 | |
1111 | msgid "My repositories" |
|
1741 | msgid "My repositories" | |
1112 | msgstr "" |
|
1742 | msgstr "" | |
1113 |
|
1743 | |||
1114 |
#: rhodecode/templates/admin/users/user_edit_my_account.html:10 |
|
1744 | #: rhodecode/templates/admin/users/user_edit_my_account.html:107 | |
1115 | msgid "ADD REPOSITORY" |
|
1745 | msgid "ADD REPOSITORY" | |
1116 | msgstr "" |
|
1746 | msgstr "" | |
1117 |
|
1747 | |||
1118 |
#: rhodecode/templates/admin/users/user_edit_my_account.html:11 |
|
1748 | #: rhodecode/templates/admin/users/user_edit_my_account.html:118 | |
1119 | #: rhodecode/templates/branches/branches_data.html:7 |
|
1749 | #: rhodecode/templates/branches/branches_data.html:7 | |
1120 | #: rhodecode/templates/shortlog/shortlog_data.html:8 |
|
1750 | #: rhodecode/templates/shortlog/shortlog_data.html:8 | |
1121 | #: rhodecode/templates/tags/tags_data.html:7 |
|
1751 | #: rhodecode/templates/tags/tags_data.html:7 | |
1122 | msgid "revision" |
|
1752 | msgid "revision" | |
1123 | msgstr "" |
|
1753 | msgstr "" | |
1124 |
|
1754 | |||
1125 |
#: rhodecode/templates/admin/users/user_edit_my_account.html:15 |
|
1755 | #: rhodecode/templates/admin/users/user_edit_my_account.html:157 | |
1126 | msgid "No repositories yet" |
|
1756 | msgid "No repositories yet" | |
1127 | msgstr "" |
|
1757 | msgstr "" | |
1128 |
|
1758 | |||
1129 |
#: rhodecode/templates/admin/users/user_edit_my_account.html:15 |
|
1759 | #: rhodecode/templates/admin/users/user_edit_my_account.html:159 | |
1130 | msgid "create one now" |
|
1760 | msgid "create one now" | |
1131 | msgstr "" |
|
1761 | msgstr "" | |
1132 |
|
1762 | |||
@@ -1134,6 +1764,10 b' msgstr ""' | |||||
1134 | msgid "Users administration" |
|
1764 | msgid "Users administration" | |
1135 | msgstr "" |
|
1765 | msgstr "" | |
1136 |
|
1766 | |||
|
1767 | #: rhodecode/templates/admin/users/users.html:23 | |||
|
1768 | msgid "ADD NEW USER" | |||
|
1769 | msgstr "" | |||
|
1770 | ||||
1137 | #: rhodecode/templates/admin/users/users.html:33 |
|
1771 | #: rhodecode/templates/admin/users/users.html:33 | |
1138 | msgid "username" |
|
1772 | msgid "username" | |
1139 | msgstr "" |
|
1773 | msgstr "" | |
@@ -1149,140 +1783,203 b' msgid "lastname"' | |||||
1149 | msgstr "" |
|
1783 | msgstr "" | |
1150 |
|
1784 | |||
1151 | #: rhodecode/templates/admin/users/users.html:36 |
|
1785 | #: rhodecode/templates/admin/users/users.html:36 | |
|
1786 | msgid "last login" | |||
|
1787 | msgstr "" | |||
|
1788 | ||||
|
1789 | #: rhodecode/templates/admin/users/users.html:37 | |||
|
1790 | #: rhodecode/templates/admin/users_groups/users_groups.html:34 | |||
1152 | msgid "active" |
|
1791 | msgid "active" | |
1153 | msgstr "" |
|
1792 | msgstr "" | |
1154 |
|
1793 | |||
1155 |
#: rhodecode/templates/admin/users/users.html:3 |
|
1794 | #: rhodecode/templates/admin/users/users.html:39 | |
1156 |
#: rhodecode/templates/base/base.html: |
|
1795 | #: rhodecode/templates/base/base.html:305 | |
1157 | msgid "ldap" |
|
1796 | msgid "ldap" | |
1158 | msgstr "" |
|
1797 | msgstr "" | |
1159 |
|
1798 | |||
1160 | #: rhodecode/templates/base/base.html:37 rhodecode/templates/base/base.html:269 |
|
1799 | #: rhodecode/templates/admin/users/users.html:56 | |
1161 | #: rhodecode/templates/base/base.html:271 rhodecode/templates/base/base.html:273 |
|
1800 | msgid "Confirm to delete this user" | |
|
1801 | msgstr "" | |||
|
1802 | ||||
|
1803 | #: rhodecode/templates/admin/users_groups/users_group_add.html:5 | |||
|
1804 | msgid "Add users group" | |||
|
1805 | msgstr "" | |||
|
1806 | ||||
|
1807 | #: rhodecode/templates/admin/users_groups/users_group_add.html:10 | |||
|
1808 | #: rhodecode/templates/admin/users_groups/users_groups.html:9 | |||
|
1809 | msgid "Users groups" | |||
|
1810 | msgstr "" | |||
|
1811 | ||||
|
1812 | #: rhodecode/templates/admin/users_groups/users_group_add.html:12 | |||
|
1813 | msgid "add new users group" | |||
|
1814 | msgstr "" | |||
|
1815 | ||||
|
1816 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:5 | |||
|
1817 | msgid "Edit users group" | |||
|
1818 | msgstr "" | |||
|
1819 | ||||
|
1820 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:11 | |||
|
1821 | msgid "UsersGroups" | |||
|
1822 | msgstr "" | |||
|
1823 | ||||
|
1824 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:50 | |||
|
1825 | msgid "Members" | |||
|
1826 | msgstr "" | |||
|
1827 | ||||
|
1828 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:58 | |||
|
1829 | msgid "Choosen group members" | |||
|
1830 | msgstr "" | |||
|
1831 | ||||
|
1832 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:61 | |||
|
1833 | msgid "Remove all elements" | |||
|
1834 | msgstr "" | |||
|
1835 | ||||
|
1836 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:75 | |||
|
1837 | msgid "Available members" | |||
|
1838 | msgstr "" | |||
|
1839 | ||||
|
1840 | #: rhodecode/templates/admin/users_groups/users_group_edit.html:79 | |||
|
1841 | msgid "Add all elements" | |||
|
1842 | msgstr "" | |||
|
1843 | ||||
|
1844 | #: rhodecode/templates/admin/users_groups/users_groups.html:5 | |||
|
1845 | msgid "Users groups administration" | |||
|
1846 | msgstr "" | |||
|
1847 | ||||
|
1848 | #: rhodecode/templates/admin/users_groups/users_groups.html:23 | |||
|
1849 | msgid "ADD NEW USER GROUP" | |||
|
1850 | msgstr "" | |||
|
1851 | ||||
|
1852 | #: rhodecode/templates/admin/users_groups/users_groups.html:32 | |||
|
1853 | msgid "group name" | |||
|
1854 | msgstr "" | |||
|
1855 | ||||
|
1856 | #: rhodecode/templates/base/base.html:32 | |||
|
1857 | msgid "Forgot password ?" | |||
|
1858 | msgstr "" | |||
|
1859 | ||||
|
1860 | #: rhodecode/templates/base/base.html:57 rhodecode/templates/base/base.html:338 | |||
|
1861 | #: rhodecode/templates/base/base.html:340 rhodecode/templates/base/base.html:342 | |||
1162 | msgid "Home" |
|
1862 | msgid "Home" | |
1163 | msgstr "" |
|
1863 | msgstr "" | |
1164 |
|
1864 | |||
1165 |
#: rhodecode/templates/base/base.html: |
|
1865 | #: rhodecode/templates/base/base.html:61 rhodecode/templates/base/base.html:347 | |
|
1866 | #: rhodecode/templates/base/base.html:349 rhodecode/templates/base/base.html:351 | |||
|
1867 | #: rhodecode/templates/journal/journal.html:4 | |||
|
1868 | #: rhodecode/templates/journal/journal.html:17 | |||
|
1869 | #: rhodecode/templates/journal/public_journal.html:4 | |||
|
1870 | msgid "Journal" | |||
|
1871 | msgstr "" | |||
|
1872 | ||||
|
1873 | #: rhodecode/templates/base/base.html:66 | |||
|
1874 | msgid "Login" | |||
|
1875 | msgstr "" | |||
|
1876 | ||||
|
1877 | #: rhodecode/templates/base/base.html:68 | |||
|
1878 | msgid "Log Out" | |||
|
1879 | msgstr "" | |||
|
1880 | ||||
|
1881 | #: rhodecode/templates/base/base.html:107 | |||
1166 | msgid "Submit a bug" |
|
1882 | msgid "Submit a bug" | |
1167 | msgstr "" |
|
1883 | msgstr "" | |
1168 |
|
1884 | |||
1169 |
#: rhodecode/templates/base/base.html: |
|
1885 | #: rhodecode/templates/base/base.html:141 | |
1170 | msgid "GPL license" |
|
|||
1171 | msgstr "" |
|
|||
1172 |
|
||||
1173 | #: rhodecode/templates/base/base.html:120 |
|
|||
1174 | msgid "Switch repository" |
|
1886 | msgid "Switch repository" | |
1175 | msgstr "" |
|
1887 | msgstr "" | |
1176 |
|
1888 | |||
1177 |
#: rhodecode/templates/base/base.html:1 |
|
1889 | #: rhodecode/templates/base/base.html:143 | |
1178 | msgid "Products" |
|
1890 | msgid "Products" | |
1179 | msgstr "" |
|
1891 | msgstr "" | |
1180 |
|
1892 | |||
1181 |
#: rhodecode/templates/base/base.html:1 |
|
1893 | #: rhodecode/templates/base/base.html:149 | |
1182 | msgid "Private repository" |
|
1894 | msgid "loading..." | |
1183 | msgstr "" |
|
1895 | msgstr "" | |
1184 |
|
1896 | |||
1185 |
#: rhodecode/templates/base/base.html: |
|
1897 | #: rhodecode/templates/base/base.html:234 rhodecode/templates/base/base.html:236 | |
1186 | msgid "Public repository" |
|
1898 | #: rhodecode/templates/base/base.html:238 | |
1187 | msgstr "" |
|
|||
1188 |
|
||||
1189 | #: rhodecode/templates/base/base.html:139 rhodecode/templates/base/base.html:141 |
|
|||
1190 | #: rhodecode/templates/base/base.html:143 |
|
|||
1191 | #: rhodecode/templates/summary/summary.html:4 |
|
|||
1192 | msgid "Summary" |
|
|||
1193 | msgstr "" |
|
|||
1194 |
|
||||
1195 | #: rhodecode/templates/base/base.html:155 rhodecode/templates/base/base.html:157 |
|
|||
1196 | #: rhodecode/templates/base/base.html:159 |
|
|||
1197 | #: rhodecode/templates/changelog/changelog.html:6 |
|
|||
1198 | #: rhodecode/templates/changelog/changelog.html:14 |
|
|||
1199 | msgid "Changelog" |
|
|||
1200 | msgstr "" |
|
|||
1201 |
|
||||
1202 | #: rhodecode/templates/base/base.html:164 rhodecode/templates/base/base.html:166 |
|
|||
1203 | #: rhodecode/templates/base/base.html:168 |
|
|||
1204 | msgid "Switch to" |
|
1899 | msgid "Switch to" | |
1205 | msgstr "" |
|
1900 | msgstr "" | |
1206 |
|
1901 | |||
1207 |
#: rhodecode/templates/base/base.html: |
|
1902 | #: rhodecode/templates/base/base.html:242 | |
1208 | #: rhodecode/templates/branches/branches.html:13 |
|
1903 | #: rhodecode/templates/branches/branches.html:13 | |
1209 | msgid "branches" |
|
1904 | msgid "branches" | |
1210 | msgstr "" |
|
1905 | msgstr "" | |
1211 |
|
1906 | |||
1212 |
#: rhodecode/templates/base/base.html: |
|
1907 | #: rhodecode/templates/base/base.html:249 | |
1213 |
#: rhodecode/templates/branches/branches_data.html: |
|
1908 | #: rhodecode/templates/branches/branches_data.html:52 | |
1214 | msgid "There are no branches yet" |
|
1909 | msgid "There are no branches yet" | |
1215 | msgstr "" |
|
1910 | msgstr "" | |
1216 |
|
1911 | |||
1217 |
#: rhodecode/templates/base/base.html: |
|
1912 | #: rhodecode/templates/base/base.html:254 | |
1218 | #: rhodecode/templates/shortlog/shortlog_data.html:10 |
|
1913 | #: rhodecode/templates/shortlog/shortlog_data.html:10 | |
1219 | #: rhodecode/templates/tags/tags.html:14 |
|
1914 | #: rhodecode/templates/tags/tags.html:14 | |
1220 | msgid "tags" |
|
1915 | msgid "tags" | |
1221 | msgstr "" |
|
1916 | msgstr "" | |
1222 |
|
1917 | |||
1223 |
#: rhodecode/templates/base/base.html: |
|
1918 | #: rhodecode/templates/base/base.html:261 | |
1224 | #: rhodecode/templates/tags/tags_data.html:32 |
|
1919 | #: rhodecode/templates/tags/tags_data.html:32 | |
1225 | msgid "There are no tags yet" |
|
1920 | msgid "There are no tags yet" | |
1226 | msgstr "" |
|
1921 | msgstr "" | |
1227 |
|
1922 | |||
1228 |
#: rhodecode/templates/base/base.html: |
|
1923 | #: rhodecode/templates/base/base.html:277 rhodecode/templates/base/base.html:281 | |
1229 | #: rhodecode/templates/base/base.html:202 rhodecode/templates/files/files.html:4 |
|
|||
1230 | msgid "Files" |
|
|||
1231 | msgstr "" |
|
|||
1232 |
|
||||
1233 | #: rhodecode/templates/base/base.html:207 rhodecode/templates/base/base.html:211 |
|
|||
1234 | #: rhodecode/templates/files/files_annotate.html:40 |
|
1924 | #: rhodecode/templates/files/files_annotate.html:40 | |
1235 | #: rhodecode/templates/files/files_source.html:11 |
|
1925 | #: rhodecode/templates/files/files_source.html:11 | |
1236 | msgid "Options" |
|
1926 | msgid "Options" | |
1237 | msgstr "" |
|
1927 | msgstr "" | |
1238 |
|
1928 | |||
1239 |
#: rhodecode/templates/base/base.html:2 |
|
1929 | #: rhodecode/templates/base/base.html:286 rhodecode/templates/base/base.html:288 | |
1240 |
#: rhodecode/templates/base/base.html: |
|
1930 | #: rhodecode/templates/base/base.html:306 | |
1241 | msgid "settings" |
|
1931 | msgid "settings" | |
1242 | msgstr "" |
|
1932 | msgstr "" | |
1243 |
|
1933 | |||
1244 |
#: rhodecode/templates/base/base.html:2 |
|
1934 | #: rhodecode/templates/base/base.html:292 | |
1245 | msgid "search" |
|
1935 | msgid "search" | |
1246 | msgstr "" |
|
1936 | msgstr "" | |
1247 |
|
1937 | |||
1248 |
#: rhodecode/templates/base/base.html:2 |
|
1938 | #: rhodecode/templates/base/base.html:299 | |
1249 | msgid "journal" |
|
1939 | msgid "journal" | |
1250 | msgstr "" |
|
1940 | msgstr "" | |
1251 |
|
1941 | |||
1252 |
#: rhodecode/templates/base/base.html: |
|
1942 | #: rhodecode/templates/base/base.html:301 | |
1253 | msgid "repositories" |
|
1943 | msgid "repositories groups" | |
1254 | msgstr "" |
|
1944 | msgstr "" | |
1255 |
|
1945 | |||
1256 |
#: rhodecode/templates/base/base.html: |
|
1946 | #: rhodecode/templates/base/base.html:302 | |
1257 | msgid "users" |
|
1947 | msgid "users" | |
1258 | msgstr "" |
|
1948 | msgstr "" | |
1259 |
|
1949 | |||
1260 |
#: rhodecode/templates/base/base.html: |
|
1950 | #: rhodecode/templates/base/base.html:303 | |
|
1951 | msgid "users groups" | |||
|
1952 | msgstr "" | |||
|
1953 | ||||
|
1954 | #: rhodecode/templates/base/base.html:304 | |||
1261 | msgid "permissions" |
|
1955 | msgid "permissions" | |
1262 | msgstr "" |
|
1956 | msgstr "" | |
1263 |
|
1957 | |||
1264 |
#: rhodecode/templates/base/base.html: |
|
1958 | #: rhodecode/templates/base/base.html:317 rhodecode/templates/base/base.html:319 | |
|
1959 | #: rhodecode/templates/followers/followers.html:5 | |||
1265 | msgid "Followers" |
|
1960 | msgid "Followers" | |
1266 | msgstr "" |
|
1961 | msgstr "" | |
1267 |
|
1962 | |||
1268 |
#: rhodecode/templates/base/base.html:25 |
|
1963 | #: rhodecode/templates/base/base.html:325 rhodecode/templates/base/base.html:327 | |
|
1964 | #: rhodecode/templates/forks/forks.html:5 | |||
1269 | msgid "Forks" |
|
1965 | msgid "Forks" | |
1270 | msgstr "" |
|
1966 | msgstr "" | |
1271 |
|
1967 | |||
1272 |
#: rhodecode/templates/base/base.html: |
|
1968 | #: rhodecode/templates/base/base.html:356 rhodecode/templates/base/base.html:358 | |
1273 |
#: rhodecode/templates/base/base.html: |
|
1969 | #: rhodecode/templates/base/base.html:360 rhodecode/templates/search/search.html:4 | |
1274 | #: rhodecode/templates/search/search.html:24 |
|
1970 | #: rhodecode/templates/search/search.html:24 | |
1275 | #: rhodecode/templates/search/search.html:46 |
|
1971 | #: rhodecode/templates/search/search.html:46 | |
1276 | msgid "Search" |
|
1972 | msgid "Search" | |
1277 | msgstr "" |
|
1973 | msgstr "" | |
1278 |
|
1974 | |||
1279 |
#: rhodecode/templates/base/ |
|
1975 | #: rhodecode/templates/base/root.html:57 | |
1280 |
#: rhodecode/templates/ |
|
1976 | #: rhodecode/templates/journal/journal.html:48 | |
|
1977 | #: rhodecode/templates/summary/summary.html:36 | |||
1281 | msgid "Stop following this repository" |
|
1978 | msgid "Stop following this repository" | |
1282 | msgstr "" |
|
1979 | msgstr "" | |
1283 |
|
1980 | |||
1284 |
#: rhodecode/templates/base/ |
|
1981 | #: rhodecode/templates/base/root.html:66 | |
1285 |
#: rhodecode/templates/summary/summary.html: |
|
1982 | #: rhodecode/templates/summary/summary.html:40 | |
1286 | msgid "Start following this repository" |
|
1983 | msgid "Start following this repository" | |
1287 | msgstr "" |
|
1984 | msgstr "" | |
1288 |
|
1985 | |||
@@ -1303,16 +2000,18 b' msgstr ""' | |||||
1303 | msgid "links" |
|
2000 | msgid "links" | |
1304 | msgstr "" |
|
2001 | msgstr "" | |
1305 |
|
2002 | |||
1306 |
#: rhodecode/templates/branches/branches_data.html:2 |
|
2003 | #: rhodecode/templates/branches/branches_data.html:23 | |
|
2004 | #: rhodecode/templates/branches/branches_data.html:43 | |||
1307 | #: rhodecode/templates/shortlog/shortlog_data.html:39 |
|
2005 | #: rhodecode/templates/shortlog/shortlog_data.html:39 | |
1308 | #: rhodecode/templates/tags/tags_data.html:24 |
|
2006 | #: rhodecode/templates/tags/tags_data.html:24 | |
1309 | msgid "changeset" |
|
2007 | msgid "changeset" | |
1310 | msgstr "" |
|
2008 | msgstr "" | |
1311 |
|
2009 | |||
1312 |
#: rhodecode/templates/branches/branches_data.html:2 |
|
2010 | #: rhodecode/templates/branches/branches_data.html:25 | |
|
2011 | #: rhodecode/templates/branches/branches_data.html:45 | |||
1313 | #: rhodecode/templates/files/files.html:12 |
|
2012 | #: rhodecode/templates/files/files.html:12 | |
1314 | #: rhodecode/templates/shortlog/shortlog_data.html:41 |
|
2013 | #: rhodecode/templates/shortlog/shortlog_data.html:41 | |
1315 |
#: rhodecode/templates/summary/summary.html: |
|
2014 | #: rhodecode/templates/summary/summary.html:233 | |
1316 | #: rhodecode/templates/tags/tags_data.html:26 |
|
2015 | #: rhodecode/templates/tags/tags_data.html:26 | |
1317 | msgid "files" |
|
2016 | msgid "files" | |
1318 | msgstr "" |
|
2017 | msgstr "" | |
@@ -1325,119 +2024,130 b' msgstr ""' | |||||
1325 | msgid "out of" |
|
2024 | msgid "out of" | |
1326 | msgstr "" |
|
2025 | msgstr "" | |
1327 |
|
2026 | |||
1328 |
#: rhodecode/templates/changelog/changelog.html:3 |
|
2027 | #: rhodecode/templates/changelog/changelog.html:37 | |
1329 | msgid "Show" |
|
2028 | msgid "Show" | |
1330 | msgstr "" |
|
2029 | msgstr "" | |
1331 |
|
2030 | |||
1332 |
#: rhodecode/templates/changelog/changelog.html: |
|
2031 | #: rhodecode/templates/changelog/changelog.html:50 | |
1333 | msgid "set" |
|
2032 | #: rhodecode/templates/changeset/changeset.html:42 | |
1334 | msgstr "" |
|
2033 | #: rhodecode/templates/summary/summary.html:609 | |
1335 |
|
||||
1336 | #: rhodecode/templates/changelog/changelog.html:49 |
|
|||
1337 | #: rhodecode/templates/changeset/changeset.html:40 |
|
|||
1338 | #: rhodecode/templates/summary/summary.html:552 |
|
|||
1339 | msgid "commit" |
|
2034 | msgid "commit" | |
1340 | msgstr "" |
|
2035 | msgstr "" | |
1341 |
|
2036 | |||
1342 |
#: rhodecode/templates/changelog/changelog.html: |
|
2037 | #: rhodecode/templates/changelog/changelog.html:63 | |
1343 | #: rhodecode/templates/changeset/changeset.html:52 |
|
2038 | msgid "Affected number of files, click to show more details" | |
1344 | msgid "removed" |
|
2039 | msgstr "" | |
1345 | msgstr "" |
|
2040 | ||
1346 |
|
2041 | #: rhodecode/templates/changelog/changelog.html:67 | ||
1347 |
#: rhodecode/templates/change |
|
2042 | #: rhodecode/templates/changeset/changeset.html:66 | |
1348 | #: rhodecode/templates/changeset/changeset.html:53 |
|
|||
1349 | msgid "changed" |
|
|||
1350 | msgstr "" |
|
|||
1351 |
|
||||
1352 | #: rhodecode/templates/changelog/changelog.html:76 |
|
|||
1353 | #: rhodecode/templates/changeset/changeset.html:54 |
|
|||
1354 | msgid "added" |
|
|||
1355 | msgstr "" |
|
|||
1356 |
|
||||
1357 | #: rhodecode/templates/changelog/changelog.html:80 |
|
|||
1358 | #: rhodecode/templates/changeset/changeset.html:58 |
|
|||
1359 | msgid "merge" |
|
2043 | msgid "merge" | |
1360 | msgstr "" |
|
2044 | msgstr "" | |
1361 |
|
2045 | |||
1362 |
#: rhodecode/templates/changelog/changelog.html: |
|
2046 | #: rhodecode/templates/changelog/changelog.html:72 | |
1363 |
#: rhodecode/templates/changeset/changeset.html: |
|
2047 | #: rhodecode/templates/changeset/changeset.html:72 | |
1364 | msgid "Parent" |
|
2048 | msgid "Parent" | |
1365 | msgstr "" |
|
2049 | msgstr "" | |
1366 |
|
2050 | |||
1367 |
#: rhodecode/templates/changelog/changelog.html: |
|
2051 | #: rhodecode/templates/changelog/changelog.html:77 | |
1368 |
#: rhodecode/templates/changeset/changeset.html: |
|
2052 | #: rhodecode/templates/changeset/changeset.html:77 | |
1369 | msgid "No parents" |
|
2053 | msgid "No parents" | |
1370 | msgstr "" |
|
2054 | msgstr "" | |
1371 |
|
2055 | |||
1372 |
#: rhodecode/templates/changelog/changelog.html: |
|
2056 | #: rhodecode/templates/changelog/changelog.html:82 | |
1373 |
#: rhodecode/templates/changeset/changeset.html: |
|
2057 | #: rhodecode/templates/changeset/changeset.html:80 | |
1374 | #: rhodecode/templates/files/files.html:29 |
|
2058 | #: rhodecode/templates/files/files.html:29 | |
1375 | #: rhodecode/templates/files/files_annotate.html:25 |
|
2059 | #: rhodecode/templates/files/files_annotate.html:25 | |
|
2060 | #: rhodecode/templates/files/files_edit.html:33 | |||
1376 | #: rhodecode/templates/shortlog/shortlog_data.html:9 |
|
2061 | #: rhodecode/templates/shortlog/shortlog_data.html:9 | |
1377 | msgid "branch" |
|
2062 | msgid "branch" | |
1378 | msgstr "" |
|
2063 | msgstr "" | |
1379 |
|
2064 | |||
1380 |
#: rhodecode/templates/changelog/changelog.html: |
|
2065 | #: rhodecode/templates/changelog/changelog.html:86 | |
1381 |
#: rhodecode/templates/changeset/changeset.html: |
|
2066 | #: rhodecode/templates/changeset/changeset.html:83 | |
1382 | msgid "tag" |
|
2067 | msgid "tag" | |
1383 | msgstr "" |
|
2068 | msgstr "" | |
1384 |
|
2069 | |||
1385 |
#: rhodecode/templates/changelog/changelog.html:1 |
|
2070 | #: rhodecode/templates/changelog/changelog.html:122 | |
1386 | #: rhodecode/templates/shortlog/shortlog_data.html:64 |
|
2071 | msgid "Show selected changes __S -> __E" | |
|
2072 | msgstr "" | |||
|
2073 | ||||
|
2074 | #: rhodecode/templates/changelog/changelog.html:172 | |||
|
2075 | #: rhodecode/templates/shortlog/shortlog_data.html:61 | |||
1387 | msgid "There are no changes yet" |
|
2076 | msgid "There are no changes yet" | |
1388 | msgstr "" |
|
2077 | msgstr "" | |
1389 |
|
2078 | |||
1390 |
#: rhodecode/templates/change |
|
2079 | #: rhodecode/templates/changelog/changelog_details.html:2 | |
1391 |
#: rhodecode/templates/changeset/changeset.html: |
|
2080 | #: rhodecode/templates/changeset/changeset.html:55 | |
1392 | #: rhodecode/templates/changeset/changeset.html:29 |
|
2081 | msgid "removed" | |
|
2082 | msgstr "" | |||
|
2083 | ||||
|
2084 | #: rhodecode/templates/changelog/changelog_details.html:3 | |||
|
2085 | #: rhodecode/templates/changeset/changeset.html:56 | |||
|
2086 | msgid "changed" | |||
|
2087 | msgstr "" | |||
|
2088 | ||||
|
2089 | #: rhodecode/templates/changelog/changelog_details.html:4 | |||
|
2090 | #: rhodecode/templates/changeset/changeset.html:57 | |||
|
2091 | msgid "added" | |||
|
2092 | msgstr "" | |||
|
2093 | ||||
|
2094 | #: rhodecode/templates/changelog/changelog_details.html:6 | |||
|
2095 | #: rhodecode/templates/changelog/changelog_details.html:7 | |||
|
2096 | #: rhodecode/templates/changelog/changelog_details.html:8 | |||
|
2097 | #: rhodecode/templates/changeset/changeset.html:59 | |||
|
2098 | #: rhodecode/templates/changeset/changeset.html:60 | |||
|
2099 | #: rhodecode/templates/changeset/changeset.html:61 | |||
|
2100 | #, python-format | |||
|
2101 | msgid "affected %s files" | |||
|
2102 | msgstr "" | |||
|
2103 | ||||
|
2104 | #: rhodecode/templates/changeset/changeset.html:6 | |||
|
2105 | #: rhodecode/templates/changeset/changeset.html:14 | |||
|
2106 | #: rhodecode/templates/changeset/changeset.html:31 | |||
1393 | msgid "Changeset" |
|
2107 | msgid "Changeset" | |
1394 | msgstr "" |
|
2108 | msgstr "" | |
1395 |
|
2109 | |||
1396 | #: rhodecode/templates/changeset/changeset.html:30 |
|
|||
1397 | #: rhodecode/templates/changeset/changeset.html:104 |
|
|||
1398 | #: rhodecode/templates/files/file_diff.html:32 |
|
|||
1399 | msgid "raw diff" |
|
|||
1400 | msgstr "" |
|
|||
1401 |
|
||||
1402 | #: rhodecode/templates/changeset/changeset.html:32 |
|
2110 | #: rhodecode/templates/changeset/changeset.html:32 | |
1403 |
#: rhodecode/templates/changeset/changeset.html:1 |
|
2111 | #: rhodecode/templates/changeset/changeset.html:121 | |
|
2112 | #: rhodecode/templates/changeset/changeset_range.html:78 | |||
|
2113 | #: rhodecode/templates/files/file_diff.html:32 | |||
|
2114 | #: rhodecode/templates/files/file_diff.html:42 | |||
|
2115 | msgid "raw diff" | |||
|
2116 | msgstr "" | |||
|
2117 | ||||
|
2118 | #: rhodecode/templates/changeset/changeset.html:34 | |||
|
2119 | #: rhodecode/templates/changeset/changeset.html:123 | |||
|
2120 | #: rhodecode/templates/changeset/changeset_range.html:80 | |||
1404 | #: rhodecode/templates/files/file_diff.html:34 |
|
2121 | #: rhodecode/templates/files/file_diff.html:34 | |
1405 | msgid "download diff" |
|
2122 | msgid "download diff" | |
1406 | msgstr "" |
|
2123 | msgstr "" | |
1407 |
|
2124 | |||
1408 |
#: rhodecode/templates/changeset/changeset.html: |
|
2125 | #: rhodecode/templates/changeset/changeset.html:90 | |
1409 | msgid "Files affected" |
|
2126 | #, python-format | |
1410 | msgstr "" |
|
2127 | msgid "%s files affected with %s additions and %s deletions." | |
1411 |
|
2128 | msgstr "" | ||
1412 | #: rhodecode/templates/changeset/changeset.html:102 |
|
2129 | ||
|
2130 | #: rhodecode/templates/changeset/changeset.html:101 | |||
|
2131 | msgid "Changeset was too big and was cut off..." | |||
|
2132 | msgstr "" | |||
|
2133 | ||||
|
2134 | #: rhodecode/templates/changeset/changeset.html:119 | |||
|
2135 | #: rhodecode/templates/changeset/changeset_range.html:76 | |||
1413 | #: rhodecode/templates/files/file_diff.html:30 |
|
2136 | #: rhodecode/templates/files/file_diff.html:30 | |
1414 | msgid "diff" |
|
2137 | msgid "diff" | |
1415 | msgstr "" |
|
2138 | msgstr "" | |
1416 |
|
2139 | |||
1417 |
#: rhodecode/templates/changeset/changeset.html:1 |
|
2140 | #: rhodecode/templates/changeset/changeset.html:132 | |
|
2141 | #: rhodecode/templates/changeset/changeset_range.html:89 | |||
1418 | msgid "No changes in this file" |
|
2142 | msgid "No changes in this file" | |
1419 | msgstr "" |
|
2143 | msgstr "" | |
1420 |
|
2144 | |||
1421 |
#: rhodecode/templates/ |
|
2145 | #: rhodecode/templates/changeset/changeset_range.html:30 | |
1422 | msgid "Repository not found" |
|
2146 | msgid "Compare View" | |
1423 | msgstr "" |
|
2147 | msgstr "" | |
1424 |
|
2148 | |||
1425 |
#: rhodecode/templates/ |
|
2149 | #: rhodecode/templates/changeset/changeset_range.html:52 | |
1426 | msgid "Not Found" |
|
2150 | msgid "Files affected" | |
1427 | msgstr "" |
|
|||
1428 |
|
||||
1429 | #: rhodecode/templates/errors/error_404.html:23 |
|
|||
1430 | #, python-format |
|
|||
1431 | msgid "The specified repository \"%s\" is unknown, sorry." |
|
|||
1432 | msgstr "" |
|
|||
1433 |
|
||||
1434 | #: rhodecode/templates/errors/error_404.html:26 |
|
|||
1435 | #, python-format |
|
|||
1436 | msgid "Create \"%s\" repository as %s" |
|
|||
1437 | msgstr "" |
|
|||
1438 |
|
||||
1439 | #: rhodecode/templates/errors/error_404.html:29 |
|
|||
1440 | msgid "Go back to the main repository list page" |
|
|||
1441 | msgstr "" |
|
2151 | msgstr "" | |
1442 |
|
2152 | |||
1443 | #: rhodecode/templates/errors/error_document.html:44 |
|
2153 | #: rhodecode/templates/errors/error_document.html:44 | |
@@ -1450,12 +2160,13 b' msgstr ""' | |||||
1450 | msgid "File diff" |
|
2160 | msgid "File diff" | |
1451 | msgstr "" |
|
2161 | msgstr "" | |
1452 |
|
2162 | |||
1453 |
#: rhodecode/templates/files/file_diff.html:4 |
|
2163 | #: rhodecode/templates/files/file_diff.html:42 | |
1454 | msgid "No changes" |
|
2164 | msgid "Diff is to big to display" | |
1455 | msgstr "" |
|
2165 | msgstr "" | |
1456 |
|
2166 | |||
1457 | #: rhodecode/templates/files/files.html:37 |
|
2167 | #: rhodecode/templates/files/files.html:37 | |
1458 | #: rhodecode/templates/files/files_annotate.html:31 |
|
2168 | #: rhodecode/templates/files/files_annotate.html:31 | |
|
2169 | #: rhodecode/templates/files/files_edit.html:39 | |||
1459 | msgid "Location" |
|
2170 | msgid "Location" | |
1460 | msgstr "" |
|
2171 | msgstr "" | |
1461 |
|
2172 | |||
@@ -1476,19 +2187,19 b' msgid "annotate"' | |||||
1476 | msgstr "" |
|
2187 | msgstr "" | |
1477 |
|
2188 | |||
1478 | #: rhodecode/templates/files/files_annotate.html:33 |
|
2189 | #: rhodecode/templates/files/files_annotate.html:33 | |
1479 |
#: rhodecode/templates/files/files_browser.html: |
|
2190 | #: rhodecode/templates/files/files_browser.html:160 | |
1480 | #: rhodecode/templates/files/files_source.html:2 |
|
2191 | #: rhodecode/templates/files/files_source.html:2 | |
1481 | msgid "Revision" |
|
2192 | msgid "Revision" | |
1482 | msgstr "" |
|
2193 | msgstr "" | |
1483 |
|
2194 | |||
1484 | #: rhodecode/templates/files/files_annotate.html:36 |
|
2195 | #: rhodecode/templates/files/files_annotate.html:36 | |
1485 |
#: rhodecode/templates/files/files_browser.html: |
|
2196 | #: rhodecode/templates/files/files_browser.html:158 | |
1486 | #: rhodecode/templates/files/files_source.html:7 |
|
2197 | #: rhodecode/templates/files/files_source.html:7 | |
1487 | msgid "Size" |
|
2198 | msgid "Size" | |
1488 | msgstr "" |
|
2199 | msgstr "" | |
1489 |
|
2200 | |||
1490 | #: rhodecode/templates/files/files_annotate.html:38 |
|
2201 | #: rhodecode/templates/files/files_annotate.html:38 | |
1491 |
#: rhodecode/templates/files/files_browser.html: |
|
2202 | #: rhodecode/templates/files/files_browser.html:159 | |
1492 | #: rhodecode/templates/files/files_source.html:9 |
|
2203 | #: rhodecode/templates/files/files_source.html:9 | |
1493 | msgid "Mimetype" |
|
2204 | msgid "Mimetype" | |
1494 | msgstr "" |
|
2205 | msgstr "" | |
@@ -1498,9 +2209,9 b' msgid "show source"' | |||||
1498 | msgstr "" |
|
2209 | msgstr "" | |
1499 |
|
2210 | |||
1500 | #: rhodecode/templates/files/files_annotate.html:43 |
|
2211 | #: rhodecode/templates/files/files_annotate.html:43 | |
1501 |
#: rhodecode/templates/files/files_annotate.html: |
|
2212 | #: rhodecode/templates/files/files_annotate.html:78 | |
1502 | #: rhodecode/templates/files/files_source.html:14 |
|
2213 | #: rhodecode/templates/files/files_source.html:14 | |
1503 |
#: rhodecode/templates/files/files_source.html: |
|
2214 | #: rhodecode/templates/files/files_source.html:51 | |
1504 | msgid "show as raw" |
|
2215 | msgid "show as raw" | |
1505 | msgstr "" |
|
2216 | msgstr "" | |
1506 |
|
2217 | |||
@@ -1509,40 +2220,131 b' msgstr ""' | |||||
1509 | msgid "download as raw" |
|
2220 | msgid "download as raw" | |
1510 | msgstr "" |
|
2221 | msgstr "" | |
1511 |
|
2222 | |||
1512 |
#: rhodecode/templates/files/files_annotate.html:4 |
|
2223 | #: rhodecode/templates/files/files_annotate.html:54 | |
1513 |
#: rhodecode/templates/files/files_source.html: |
|
2224 | #: rhodecode/templates/files/files_source.html:25 | |
1514 | msgid "History" |
|
2225 | msgid "History" | |
1515 | msgstr "" |
|
2226 | msgstr "" | |
1516 |
|
2227 | |||
1517 |
#: rhodecode/templates/files/files_annotate.html: |
|
2228 | #: rhodecode/templates/files/files_annotate.html:73 | |
1518 |
#: rhodecode/templates/files/files_source.html:4 |
|
2229 | #: rhodecode/templates/files/files_source.html:46 | |
1519 | msgid "File is to big to display" |
|
2230 | #, python-format | |
1520 | msgstr "" |
|
2231 | msgid "Binary file (%s)" | |
1521 |
|
2232 | msgstr "" | ||
1522 | #: rhodecode/templates/files/files_browser.html:12 |
|
2233 | ||
1523 | msgid "view" |
|
2234 | #: rhodecode/templates/files/files_annotate.html:78 | |
|
2235 | #: rhodecode/templates/files/files_source.html:51 | |||
|
2236 | msgid "File is too big to display" | |||
1524 | msgstr "" |
|
2237 | msgstr "" | |
1525 |
|
2238 | |||
1526 | #: rhodecode/templates/files/files_browser.html:13 |
|
2239 | #: rhodecode/templates/files/files_browser.html:13 | |
|
2240 | msgid "view" | |||
|
2241 | msgstr "" | |||
|
2242 | ||||
|
2243 | #: rhodecode/templates/files/files_browser.html:14 | |||
1527 | msgid "previous revision" |
|
2244 | msgid "previous revision" | |
1528 | msgstr "" |
|
2245 | msgstr "" | |
1529 |
|
2246 | |||
1530 |
#: rhodecode/templates/files/files_browser.html:1 |
|
2247 | #: rhodecode/templates/files/files_browser.html:16 | |
1531 | msgid "next revision" |
|
2248 | msgid "next revision" | |
1532 | msgstr "" |
|
2249 | msgstr "" | |
1533 |
|
2250 | |||
1534 |
#: rhodecode/templates/files/files_browser.html:3 |
|
2251 | #: rhodecode/templates/files/files_browser.html:23 | |
1535 | msgid "Last modified" |
|
2252 | msgid "follow current branch" | |
|
2253 | msgstr "" | |||
|
2254 | ||||
|
2255 | #: rhodecode/templates/files/files_browser.html:27 | |||
|
2256 | msgid "search file list" | |||
1536 | msgstr "" |
|
2257 | msgstr "" | |
1537 |
|
2258 | |||
1538 | #: rhodecode/templates/files/files_browser.html:32 |
|
2259 | #: rhodecode/templates/files/files_browser.html:32 | |
|
2260 | msgid "Loading file list..." | |||
|
2261 | msgstr "" | |||
|
2262 | ||||
|
2263 | #: rhodecode/templates/files/files_browser.html:111 | |||
|
2264 | msgid "search truncated" | |||
|
2265 | msgstr "" | |||
|
2266 | ||||
|
2267 | #: rhodecode/templates/files/files_browser.html:122 | |||
|
2268 | msgid "no matching files" | |||
|
2269 | msgstr "" | |||
|
2270 | ||||
|
2271 | #: rhodecode/templates/files/files_browser.html:161 | |||
|
2272 | msgid "Last modified" | |||
|
2273 | msgstr "" | |||
|
2274 | ||||
|
2275 | #: rhodecode/templates/files/files_browser.html:162 | |||
1539 | msgid "Last commiter" |
|
2276 | msgid "Last commiter" | |
1540 | msgstr "" |
|
2277 | msgstr "" | |
1541 |
|
2278 | |||
|
2279 | #: rhodecode/templates/files/files_edit.html:4 | |||
|
2280 | msgid "Edit file" | |||
|
2281 | msgstr "" | |||
|
2282 | ||||
|
2283 | #: rhodecode/templates/files/files_edit.html:19 | |||
|
2284 | msgid "edit file" | |||
|
2285 | msgstr "" | |||
|
2286 | ||||
|
2287 | #: rhodecode/templates/files/files_edit.html:45 | |||
|
2288 | #: rhodecode/templates/shortlog/shortlog_data.html:5 | |||
|
2289 | msgid "commit message" | |||
|
2290 | msgstr "" | |||
|
2291 | ||||
|
2292 | #: rhodecode/templates/files/files_edit.html:51 | |||
|
2293 | msgid "Commit changes" | |||
|
2294 | msgstr "" | |||
|
2295 | ||||
1542 | #: rhodecode/templates/files/files_source.html:12 |
|
2296 | #: rhodecode/templates/files/files_source.html:12 | |
1543 | msgid "show annotation" |
|
2297 | msgid "show annotation" | |
1544 | msgstr "" |
|
2298 | msgstr "" | |
1545 |
|
2299 | |||
|
2300 | #: rhodecode/templates/files/files_source.html:153 | |||
|
2301 | msgid "Selection link" | |||
|
2302 | msgstr "" | |||
|
2303 | ||||
|
2304 | #: rhodecode/templates/followers/followers.html:13 | |||
|
2305 | msgid "followers" | |||
|
2306 | msgstr "" | |||
|
2307 | ||||
|
2308 | #: rhodecode/templates/followers/followers_data.html:12 | |||
|
2309 | msgid "Started following" | |||
|
2310 | msgstr "" | |||
|
2311 | ||||
|
2312 | #: rhodecode/templates/forks/forks.html:13 | |||
|
2313 | msgid "forks" | |||
|
2314 | msgstr "" | |||
|
2315 | ||||
|
2316 | #: rhodecode/templates/forks/forks_data.html:17 | |||
|
2317 | msgid "forked" | |||
|
2318 | msgstr "" | |||
|
2319 | ||||
|
2320 | #: rhodecode/templates/forks/forks_data.html:34 | |||
|
2321 | msgid "There are no forks yet" | |||
|
2322 | msgstr "" | |||
|
2323 | ||||
|
2324 | #: rhodecode/templates/journal/journal.html:34 | |||
|
2325 | msgid "Following" | |||
|
2326 | msgstr "" | |||
|
2327 | ||||
|
2328 | #: rhodecode/templates/journal/journal.html:41 | |||
|
2329 | msgid "following user" | |||
|
2330 | msgstr "" | |||
|
2331 | ||||
|
2332 | #: rhodecode/templates/journal/journal.html:41 | |||
|
2333 | msgid "user" | |||
|
2334 | msgstr "" | |||
|
2335 | ||||
|
2336 | #: rhodecode/templates/journal/journal.html:65 | |||
|
2337 | msgid "You are not following any users or repositories" | |||
|
2338 | msgstr "" | |||
|
2339 | ||||
|
2340 | #: rhodecode/templates/journal/journal_data.html:46 | |||
|
2341 | msgid "No entries yet" | |||
|
2342 | msgstr "" | |||
|
2343 | ||||
|
2344 | #: rhodecode/templates/journal/public_journal.html:17 | |||
|
2345 | msgid "Public Journal" | |||
|
2346 | msgstr "" | |||
|
2347 | ||||
1546 | #: rhodecode/templates/search/search.html:7 |
|
2348 | #: rhodecode/templates/search/search.html:7 | |
1547 | #: rhodecode/templates/search/search.html:26 |
|
2349 | #: rhodecode/templates/search/search.html:26 | |
1548 | msgid "in repository: " |
|
2350 | msgid "in repository: " | |
@@ -1562,7 +2364,7 b' msgid "Search in"' | |||||
1562 | msgstr "" |
|
2364 | msgstr "" | |
1563 |
|
2365 | |||
1564 | #: rhodecode/templates/search/search.html:57 |
|
2366 | #: rhodecode/templates/search/search.html:57 | |
1565 |
msgid " |
|
2367 | msgid "File contents" | |
1566 | msgstr "" |
|
2368 | msgstr "" | |
1567 |
|
2369 | |||
1568 | #: rhodecode/templates/search/search.html:59 |
|
2370 | #: rhodecode/templates/search/search.html:59 | |
@@ -1578,12 +2380,16 b' msgstr ""' | |||||
1578 | msgid "Fork" |
|
2380 | msgid "Fork" | |
1579 | msgstr "" |
|
2381 | msgstr "" | |
1580 |
|
2382 | |||
1581 |
#: rhodecode/templates/settings/repo_fork.html: |
|
2383 | #: rhodecode/templates/settings/repo_fork.html:31 | |
1582 | msgid "Fork name" |
|
2384 | msgid "Fork name" | |
1583 | msgstr "" |
|
2385 | msgstr "" | |
1584 |
|
2386 | |||
|
2387 | #: rhodecode/templates/settings/repo_fork.html:55 | |||
|
2388 | msgid "fork this repository" | |||
|
2389 | msgstr "" | |||
|
2390 | ||||
1585 | #: rhodecode/templates/shortlog/shortlog.html:5 |
|
2391 | #: rhodecode/templates/shortlog/shortlog.html:5 | |
1586 |
#: rhodecode/templates/summary/summary.html:6 |
|
2392 | #: rhodecode/templates/summary/summary.html:666 | |
1587 | msgid "Shortlog" |
|
2393 | msgid "Shortlog" | |
1588 | msgstr "" |
|
2394 | msgstr "" | |
1589 |
|
2395 | |||
@@ -1591,10 +2397,6 b' msgstr ""' | |||||
1591 | msgid "shortlog" |
|
2397 | msgid "shortlog" | |
1592 | msgstr "" |
|
2398 | msgstr "" | |
1593 |
|
2399 | |||
1594 | #: rhodecode/templates/shortlog/shortlog_data.html:5 |
|
|||
1595 | msgid "commit message" |
|
|||
1596 | msgstr "" |
|
|||
1597 |
|
||||
1598 | #: rhodecode/templates/shortlog/shortlog_data.html:6 |
|
2400 | #: rhodecode/templates/shortlog/shortlog_data.html:6 | |
1599 | msgid "age" |
|
2401 | msgid "age" | |
1600 | msgstr "" |
|
2402 | msgstr "" | |
@@ -1603,61 +2405,96 b' msgstr ""' | |||||
1603 | msgid "summary" |
|
2405 | msgid "summary" | |
1604 | msgstr "" |
|
2406 | msgstr "" | |
1605 |
|
2407 | |||
1606 |
#: rhodecode/templates/summary/summary.html: |
|
2408 | #: rhodecode/templates/summary/summary.html:79 | |
|
2409 | msgid "remote clone" | |||
|
2410 | msgstr "" | |||
|
2411 | ||||
|
2412 | #: rhodecode/templates/summary/summary.html:121 | |||
1607 | msgid "by" |
|
2413 | msgid "by" | |
1608 | msgstr "" |
|
2414 | msgstr "" | |
1609 |
|
2415 | |||
1610 |
#: rhodecode/templates/summary/summary.html:1 |
|
2416 | #: rhodecode/templates/summary/summary.html:128 | |
1611 | msgid "Clone url" |
|
2417 | msgid "Clone url" | |
1612 | msgstr "" |
|
2418 | msgstr "" | |
1613 |
|
2419 | |||
1614 |
#: rhodecode/templates/summary/summary.html:1 |
|
2420 | #: rhodecode/templates/summary/summary.html:137 | |
1615 | msgid "Trending source files" |
|
2421 | msgid "Trending source files" | |
1616 | msgstr "" |
|
2422 | msgstr "" | |
1617 |
|
2423 | |||
1618 |
#: rhodecode/templates/summary/summary.html:1 |
|
2424 | #: rhodecode/templates/summary/summary.html:146 | |
1619 | #: rhodecode/templates/summary/summary.html:627 |
|
|||
1620 | #: rhodecode/templates/summary/summary.html:638 |
|
|||
1621 | msgid "show more" |
|
|||
1622 | msgstr "" |
|
|||
1623 |
|
||||
1624 | #: rhodecode/templates/summary/summary.html:217 |
|
|||
1625 | msgid "Download" |
|
2425 | msgid "Download" | |
1626 | msgstr "" |
|
2426 | msgstr "" | |
1627 |
|
2427 | |||
1628 |
#: rhodecode/templates/summary/summary.html: |
|
2428 | #: rhodecode/templates/summary/summary.html:150 | |
|
2429 | msgid "There are no downloads yet" | |||
|
2430 | msgstr "" | |||
|
2431 | ||||
|
2432 | #: rhodecode/templates/summary/summary.html:152 | |||
|
2433 | msgid "Downloads are disabled for this repository" | |||
|
2434 | msgstr "" | |||
|
2435 | ||||
|
2436 | #: rhodecode/templates/summary/summary.html:154 | |||
|
2437 | #: rhodecode/templates/summary/summary.html:320 | |||
|
2438 | msgid "enable" | |||
|
2439 | msgstr "" | |||
|
2440 | ||||
|
2441 | #: rhodecode/templates/summary/summary.html:162 | |||
|
2442 | #: rhodecode/templates/summary/summary.html:297 | |||
|
2443 | #, python-format | |||
|
2444 | msgid "Download %s as %s" | |||
|
2445 | msgstr "" | |||
|
2446 | ||||
|
2447 | #: rhodecode/templates/summary/summary.html:168 | |||
|
2448 | msgid "Check this to download archive with subrepos" | |||
|
2449 | msgstr "" | |||
|
2450 | ||||
|
2451 | #: rhodecode/templates/summary/summary.html:168 | |||
|
2452 | msgid "with subrepos" | |||
|
2453 | msgstr "" | |||
|
2454 | ||||
|
2455 | #: rhodecode/templates/summary/summary.html:176 | |||
1629 | msgid "Feeds" |
|
2456 | msgid "Feeds" | |
1630 | msgstr "" |
|
2457 | msgstr "" | |
1631 |
|
2458 | |||
1632 |
#: rhodecode/templates/summary/summary.html:2 |
|
2459 | #: rhodecode/templates/summary/summary.html:257 | |
|
2460 | #: rhodecode/templates/summary/summary.html:684 | |||
|
2461 | #: rhodecode/templates/summary/summary.html:695 | |||
|
2462 | msgid "show more" | |||
|
2463 | msgstr "" | |||
|
2464 | ||||
|
2465 | #: rhodecode/templates/summary/summary.html:312 | |||
1633 | msgid "Commit activity by day / author" |
|
2466 | msgid "Commit activity by day / author" | |
1634 | msgstr "" |
|
2467 | msgstr "" | |
1635 |
|
2468 | |||
1636 |
#: rhodecode/templates/summary/summary.html: |
|
2469 | #: rhodecode/templates/summary/summary.html:324 | |
|
2470 | msgid "Loaded in" | |||
|
2471 | msgstr "" | |||
|
2472 | ||||
|
2473 | #: rhodecode/templates/summary/summary.html:603 | |||
1637 | msgid "commits" |
|
2474 | msgid "commits" | |
1638 | msgstr "" |
|
2475 | msgstr "" | |
1639 |
|
2476 | |||
1640 |
#: rhodecode/templates/summary/summary.html: |
|
2477 | #: rhodecode/templates/summary/summary.html:604 | |
1641 | msgid "files added" |
|
2478 | msgid "files added" | |
1642 | msgstr "" |
|
2479 | msgstr "" | |
1643 |
|
2480 | |||
1644 |
#: rhodecode/templates/summary/summary.html:5 |
|
2481 | #: rhodecode/templates/summary/summary.html:605 | |
1645 | msgid "files changed" |
|
2482 | msgid "files changed" | |
1646 | msgstr "" |
|
2483 | msgstr "" | |
1647 |
|
2484 | |||
1648 |
#: rhodecode/templates/summary/summary.html: |
|
2485 | #: rhodecode/templates/summary/summary.html:606 | |
1649 | msgid "files removed" |
|
2486 | msgid "files removed" | |
1650 | msgstr "" |
|
2487 | msgstr "" | |
1651 |
|
2488 | |||
1652 |
#: rhodecode/templates/summary/summary.html: |
|
2489 | #: rhodecode/templates/summary/summary.html:610 | |
1653 | msgid "file added" |
|
2490 | msgid "file added" | |
1654 | msgstr "" |
|
2491 | msgstr "" | |
1655 |
|
2492 | |||
1656 |
#: rhodecode/templates/summary/summary.html: |
|
2493 | #: rhodecode/templates/summary/summary.html:611 | |
1657 | msgid "file changed" |
|
2494 | msgid "file changed" | |
1658 | msgstr "" |
|
2495 | msgstr "" | |
1659 |
|
2496 | |||
1660 |
#: rhodecode/templates/summary/summary.html: |
|
2497 | #: rhodecode/templates/summary/summary.html:612 | |
1661 | msgid "file removed" |
|
2498 | msgid "file removed" | |
1662 | msgstr "" |
|
2499 | msgstr "" | |
1663 |
|
2500 |
@@ -24,6 +24,55 b'' | |||||
24 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
24 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
25 |
|
25 | |||
26 |
|
26 | |||
|
27 | try: | |||
|
28 | import json | |||
|
29 | except ImportError: | |||
|
30 | #python 2.5 compatibility | |||
|
31 | import simplejson as json | |||
|
32 | ||||
|
33 | ||||
|
34 | def __get_lem(): | |||
|
35 | from pygments import lexers | |||
|
36 | from string import lower | |||
|
37 | from collections import defaultdict | |||
|
38 | ||||
|
39 | d = defaultdict(lambda: []) | |||
|
40 | ||||
|
41 | def __clean(s): | |||
|
42 | s = s.lstrip('*') | |||
|
43 | s = s.lstrip('.') | |||
|
44 | ||||
|
45 | if s.find('[') != -1: | |||
|
46 | exts = [] | |||
|
47 | start, stop = s.find('['), s.find(']') | |||
|
48 | ||||
|
49 | for suffix in s[start + 1:stop]: | |||
|
50 | exts.append(s[:s.find('[')] + suffix) | |||
|
51 | return map(lower, exts) | |||
|
52 | else: | |||
|
53 | return map(lower, [s]) | |||
|
54 | ||||
|
55 | for lx, t in sorted(lexers.LEXERS.items()): | |||
|
56 | m = map(__clean, t[-2]) | |||
|
57 | if m: | |||
|
58 | m = reduce(lambda x, y: x + y, m) | |||
|
59 | for ext in m: | |||
|
60 | desc = lx.replace('Lexer', '') | |||
|
61 | d[ext].append(desc) | |||
|
62 | ||||
|
63 | return dict(d) | |||
|
64 | ||||
|
65 | # language map is also used by whoosh indexer, which for those specified | |||
|
66 | # extensions will index it's content | |||
|
67 | LANGUAGES_EXTENSIONS_MAP = __get_lem() | |||
|
68 | ||||
|
69 | # Additional mappings that are not present in the pygments lexers | |||
|
70 | # NOTE: that this will overide any mappings in LANGUAGES_EXTENSIONS_MAP | |||
|
71 | ADDITIONAL_MAPPINGS = {'xaml': 'XAML'} | |||
|
72 | ||||
|
73 | LANGUAGES_EXTENSIONS_MAP.update(ADDITIONAL_MAPPINGS) | |||
|
74 | ||||
|
75 | ||||
27 | def str2bool(_str): |
|
76 | def str2bool(_str): | |
28 | """ |
|
77 | """ | |
29 | returs True/False value from given string, it tries to translate the |
|
78 | returs True/False value from given string, it tries to translate the | |
@@ -41,9 +90,57 b' def str2bool(_str):' | |||||
41 | return _str in ('t', 'true', 'y', 'yes', 'on', '1') |
|
90 | return _str in ('t', 'true', 'y', 'yes', 'on', '1') | |
42 |
|
91 | |||
43 |
|
92 | |||
|
93 | def convert_line_endings(line, mode): | |||
|
94 | """ | |||
|
95 | Converts a given line "line end" accordingly to given mode | |||
|
96 | ||||
|
97 | Available modes are:: | |||
|
98 | 0 - Unix | |||
|
99 | 1 - Mac | |||
|
100 | 2 - DOS | |||
|
101 | ||||
|
102 | :param line: given line to convert | |||
|
103 | :param mode: mode to convert to | |||
|
104 | :rtype: str | |||
|
105 | :return: converted line according to mode | |||
|
106 | """ | |||
|
107 | from string import replace | |||
|
108 | ||||
|
109 | if mode == 0: | |||
|
110 | line = replace(line, '\r\n', '\n') | |||
|
111 | line = replace(line, '\r', '\n') | |||
|
112 | elif mode == 1: | |||
|
113 | line = replace(line, '\r\n', '\r') | |||
|
114 | line = replace(line, '\n', '\r') | |||
|
115 | elif mode == 2: | |||
|
116 | import re | |||
|
117 | line = re.sub("\r(?!\n)|(?<!\r)\n", "\r\n", line) | |||
|
118 | return line | |||
|
119 | ||||
|
120 | ||||
|
121 | def detect_mode(line, default): | |||
|
122 | """ | |||
|
123 | Detects line break for given line, if line break couldn't be found | |||
|
124 | given default value is returned | |||
|
125 | ||||
|
126 | :param line: str line | |||
|
127 | :param default: default | |||
|
128 | :rtype: int | |||
|
129 | :return: value of line end on of 0 - Unix, 1 - Mac, 2 - DOS | |||
|
130 | """ | |||
|
131 | if line.endswith('\r\n'): | |||
|
132 | return 2 | |||
|
133 | elif line.endswith('\n'): | |||
|
134 | return 0 | |||
|
135 | elif line.endswith('\r'): | |||
|
136 | return 1 | |||
|
137 | else: | |||
|
138 | return default | |||
|
139 | ||||
|
140 | ||||
44 | def generate_api_key(username, salt=None): |
|
141 | def generate_api_key(username, salt=None): | |
45 | """ |
|
142 | """ | |
46 | Generates unique API key for given username,if salt is not given |
|
143 | Generates unique API key for given username, if salt is not given | |
47 | it'll be generated from some random string |
|
144 | it'll be generated from some random string | |
48 |
|
145 | |||
49 | :param username: username as string |
|
146 | :param username: username as string | |
@@ -60,22 +157,233 b' def generate_api_key(username, salt=None' | |||||
60 | return hashlib.sha1(username + salt).hexdigest() |
|
157 | return hashlib.sha1(username + salt).hexdigest() | |
61 |
|
158 | |||
62 |
|
159 | |||
63 |
def safe_unicode( |
|
160 | def safe_unicode(str_, from_encoding='utf8'): | |
64 | """ |
|
161 | """ | |
65 | safe unicode function. In case of UnicodeDecode error we try to return |
|
162 | safe unicode function. Does few trick to turn str_ into unicode | |
66 | unicode with errors replace |
|
163 | ||
|
164 | In case of UnicodeDecode error we try to return it with encoding detected | |||
|
165 | by chardet library if it fails fallback to unicode with errors replaced | |||
67 |
|
166 | |||
68 |
:param |
|
167 | :param str_: string to decode | |
69 | :rtype: unicode |
|
168 | :rtype: unicode | |
70 | :returns: unicode object |
|
169 | :returns: unicode object | |
71 | """ |
|
170 | """ | |
|
171 | if isinstance(str_, unicode): | |||
|
172 | return str_ | |||
72 |
|
173 | |||
73 | if isinstance(_str, unicode): |
|
174 | try: | |
74 |
return |
|
175 | return unicode(str_) | |
|
176 | except UnicodeDecodeError: | |||
|
177 | pass | |||
|
178 | ||||
|
179 | try: | |||
|
180 | return unicode(str_, from_encoding) | |||
|
181 | except UnicodeDecodeError: | |||
|
182 | pass | |||
|
183 | ||||
|
184 | try: | |||
|
185 | import chardet | |||
|
186 | encoding = chardet.detect(str_)['encoding'] | |||
|
187 | if encoding is None: | |||
|
188 | raise Exception() | |||
|
189 | return str_.decode(encoding) | |||
|
190 | except (ImportError, UnicodeDecodeError, Exception): | |||
|
191 | return unicode(str_, from_encoding, 'replace') | |||
|
192 | ||||
|
193 | def safe_str(unicode_, to_encoding='utf8'): | |||
|
194 | """ | |||
|
195 | safe str function. Does few trick to turn unicode_ into string | |||
|
196 | ||||
|
197 | In case of UnicodeEncodeError we try to return it with encoding detected | |||
|
198 | by chardet library if it fails fallback to string with errors replaced | |||
|
199 | ||||
|
200 | :param unicode_: unicode to encode | |||
|
201 | :rtype: str | |||
|
202 | :returns: str object | |||
|
203 | """ | |||
|
204 | ||||
|
205 | if isinstance(unicode_, str): | |||
|
206 | return unicode_ | |||
75 |
|
207 | |||
76 | try: |
|
208 | try: | |
77 |
u |
|
209 | return unicode_.encode(to_encoding) | |
78 |
except Unicode |
|
210 | except UnicodeEncodeError: | |
79 | u_str = unicode(_str, from_encoding, 'replace') |
|
211 | pass | |
|
212 | ||||
|
213 | try: | |||
|
214 | import chardet | |||
|
215 | encoding = chardet.detect(unicode_)['encoding'] | |||
|
216 | print encoding | |||
|
217 | if encoding is None: | |||
|
218 | raise UnicodeEncodeError() | |||
|
219 | ||||
|
220 | return unicode_.encode(encoding) | |||
|
221 | except (ImportError, UnicodeEncodeError): | |||
|
222 | return unicode_.encode(to_encoding, 'replace') | |||
|
223 | ||||
|
224 | return safe_str | |||
|
225 | ||||
|
226 | ||||
|
227 | ||||
|
228 | def engine_from_config(configuration, prefix='sqlalchemy.', **kwargs): | |||
|
229 | """ | |||
|
230 | Custom engine_from_config functions that makes sure we use NullPool for | |||
|
231 | file based sqlite databases. This prevents errors on sqlite. This only | |||
|
232 | applies to sqlalchemy versions < 0.7.0 | |||
|
233 | ||||
|
234 | """ | |||
|
235 | import sqlalchemy | |||
|
236 | from sqlalchemy import engine_from_config as efc | |||
|
237 | import logging | |||
|
238 | ||||
|
239 | if int(sqlalchemy.__version__.split('.')[1]) < 7: | |||
|
240 | ||||
|
241 | # This solution should work for sqlalchemy < 0.7.0, and should use | |||
|
242 | # proxy=TimerProxy() for execution time profiling | |||
|
243 | ||||
|
244 | from sqlalchemy.pool import NullPool | |||
|
245 | url = configuration[prefix + 'url'] | |||
|
246 | ||||
|
247 | if url.startswith('sqlite'): | |||
|
248 | kwargs.update({'poolclass': NullPool}) | |||
|
249 | return efc(configuration, prefix, **kwargs) | |||
|
250 | else: | |||
|
251 | import time | |||
|
252 | from sqlalchemy import event | |||
|
253 | from sqlalchemy.engine import Engine | |||
|
254 | ||||
|
255 | log = logging.getLogger('sqlalchemy.engine') | |||
|
256 | BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = xrange(30, 38) | |||
|
257 | engine = efc(configuration, prefix, **kwargs) | |||
|
258 | ||||
|
259 | def color_sql(sql): | |||
|
260 | COLOR_SEQ = "\033[1;%dm" | |||
|
261 | COLOR_SQL = YELLOW | |||
|
262 | normal = '\x1b[0m' | |||
|
263 | return ''.join([COLOR_SEQ % COLOR_SQL, sql, normal]) | |||
|
264 | ||||
|
265 | if configuration['debug']: | |||
|
266 | #attach events only for debug configuration | |||
|
267 | ||||
|
268 | def before_cursor_execute(conn, cursor, statement, | |||
|
269 | parameters, context, executemany): | |||
|
270 | context._query_start_time = time.time() | |||
|
271 | log.info(color_sql(">>>>> STARTING QUERY >>>>>")) | |||
|
272 | ||||
|
273 | ||||
|
274 | def after_cursor_execute(conn, cursor, statement, | |||
|
275 | parameters, context, executemany): | |||
|
276 | total = time.time() - context._query_start_time | |||
|
277 | log.info(color_sql("<<<<< TOTAL TIME: %f <<<<<" % total)) | |||
|
278 | ||||
|
279 | event.listen(engine, "before_cursor_execute", | |||
|
280 | before_cursor_execute) | |||
|
281 | event.listen(engine, "after_cursor_execute", | |||
|
282 | after_cursor_execute) | |||
|
283 | ||||
|
284 | return engine | |||
|
285 | ||||
|
286 | ||||
|
287 | def age(curdate): | |||
|
288 | """ | |||
|
289 | turns a datetime into an age string. | |||
|
290 | ||||
|
291 | :param curdate: datetime object | |||
|
292 | :rtype: unicode | |||
|
293 | :returns: unicode words describing age | |||
|
294 | """ | |||
|
295 | ||||
|
296 | from datetime import datetime | |||
|
297 | from webhelpers.date import time_ago_in_words | |||
80 |
|
298 | |||
81 | return u_str |
|
299 | _ = lambda s:s | |
|
300 | ||||
|
301 | if not curdate: | |||
|
302 | return '' | |||
|
303 | ||||
|
304 | agescales = [(_(u"year"), 3600 * 24 * 365), | |||
|
305 | (_(u"month"), 3600 * 24 * 30), | |||
|
306 | (_(u"day"), 3600 * 24), | |||
|
307 | (_(u"hour"), 3600), | |||
|
308 | (_(u"minute"), 60), | |||
|
309 | (_(u"second"), 1), ] | |||
|
310 | ||||
|
311 | age = datetime.now() - curdate | |||
|
312 | age_seconds = (age.days * agescales[2][1]) + age.seconds | |||
|
313 | pos = 1 | |||
|
314 | for scale in agescales: | |||
|
315 | if scale[1] <= age_seconds: | |||
|
316 | if pos == 6:pos = 5 | |||
|
317 | return '%s %s' % (time_ago_in_words(curdate, | |||
|
318 | agescales[pos][0]), _('ago')) | |||
|
319 | pos += 1 | |||
|
320 | ||||
|
321 | return _(u'just now') | |||
|
322 | ||||
|
323 | ||||
|
324 | def uri_filter(uri): | |||
|
325 | """ | |||
|
326 | Removes user:password from given url string | |||
|
327 | ||||
|
328 | :param uri: | |||
|
329 | :rtype: unicode | |||
|
330 | :returns: filtered list of strings | |||
|
331 | """ | |||
|
332 | if not uri: | |||
|
333 | return '' | |||
|
334 | ||||
|
335 | proto = '' | |||
|
336 | ||||
|
337 | for pat in ('https://', 'http://'): | |||
|
338 | if uri.startswith(pat): | |||
|
339 | uri = uri[len(pat):] | |||
|
340 | proto = pat | |||
|
341 | break | |||
|
342 | ||||
|
343 | # remove passwords and username | |||
|
344 | uri = uri[uri.find('@') + 1:] | |||
|
345 | ||||
|
346 | # get the port | |||
|
347 | cred_pos = uri.find(':') | |||
|
348 | if cred_pos == -1: | |||
|
349 | host, port = uri, None | |||
|
350 | else: | |||
|
351 | host, port = uri[:cred_pos], uri[cred_pos + 1:] | |||
|
352 | ||||
|
353 | return filter(None, [proto, host, port]) | |||
|
354 | ||||
|
355 | ||||
|
356 | def credentials_filter(uri): | |||
|
357 | """ | |||
|
358 | Returns a url with removed credentials | |||
|
359 | ||||
|
360 | :param uri: | |||
|
361 | """ | |||
|
362 | ||||
|
363 | uri = uri_filter(uri) | |||
|
364 | #check if we have port | |||
|
365 | if len(uri) > 2 and uri[2]: | |||
|
366 | uri[2] = ':' + uri[2] | |||
|
367 | ||||
|
368 | return ''.join(uri) | |||
|
369 | ||||
|
370 | def get_changeset_safe(repo, rev): | |||
|
371 | """ | |||
|
372 | Safe version of get_changeset if this changeset doesn't exists for a | |||
|
373 | repo it returns a Dummy one instead | |||
|
374 | ||||
|
375 | :param repo: | |||
|
376 | :param rev: | |||
|
377 | """ | |||
|
378 | from vcs.backends.base import BaseRepository | |||
|
379 | from vcs.exceptions import RepositoryError | |||
|
380 | if not isinstance(repo, BaseRepository): | |||
|
381 | raise Exception('You must pass an Repository ' | |||
|
382 | 'object as first argument got %s', type(repo)) | |||
|
383 | ||||
|
384 | try: | |||
|
385 | cs = repo.get_changeset(rev) | |||
|
386 | except RepositoryError: | |||
|
387 | from rhodecode.lib.utils import EmptyChangeset | |||
|
388 | cs = EmptyChangeset(requested_revision=rev) | |||
|
389 | return cs No newline at end of file |
@@ -2,7 +2,7 b'' | |||||
2 |
|
2 | |||
3 | from beaker.cache import CacheManager |
|
3 | from beaker.cache import CacheManager | |
4 | from beaker.util import parse_cache_config_options |
|
4 | from beaker.util import parse_cache_config_options | |
5 | from vcs.utils.lazy import LazyProperty |
|
5 | ||
6 |
|
6 | |||
7 | class Globals(object): |
|
7 | class Globals(object): | |
8 | """Globals acts as a container for objects available throughout the |
|
8 | """Globals acts as a container for objects available throughout the | |
@@ -18,14 +18,3 b' class Globals(object):' | |||||
18 | """ |
|
18 | """ | |
19 | self.cache = CacheManager(**parse_cache_config_options(config)) |
|
19 | self.cache = CacheManager(**parse_cache_config_options(config)) | |
20 | self.available_permissions = None # propagated after init_model |
|
20 | self.available_permissions = None # propagated after init_model | |
21 | self.baseui = None # propagated after init_model |
|
|||
22 |
|
||||
23 | @LazyProperty |
|
|||
24 | def paths(self): |
|
|||
25 | if self.baseui: |
|
|||
26 | return self.baseui.configitems('paths') |
|
|||
27 |
|
||||
28 | @LazyProperty |
|
|||
29 | def base_path(self): |
|
|||
30 | if self.baseui: |
|
|||
31 | return self.paths[0][1] |
|
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: 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: file renamed from rhodecode/templates/journal.html to rhodecode/templates/journal/journal.html |
|
NO CONTENT: file renamed from rhodecode/templates/journal.html to rhodecode/templates/journal/journal.html | ||
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/tests/test_hg_operations.sh to rhodecode/tests/test_hg_operations.py |
|
NO CONTENT: file renamed from rhodecode/tests/test_hg_operations.sh to rhodecode/tests/test_hg_operations.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: 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, binary diff hidden |
|
NO CONTENT: file was removed, binary diff hidden |
1 | NO CONTENT: file was removed, binary diff hidden |
|
NO CONTENT: file was removed, binary diff hidden |
1 | NO CONTENT: file was removed, binary diff hidden |
|
NO CONTENT: file was removed, binary diff hidden |
1 | NO CONTENT: file was removed, binary diff hidden |
|
NO CONTENT: file was removed, binary diff hidden |
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