##// END OF EJS Templates
Merged dev into stable/default/master branch
marcink -
r3960:5293d4bb merge default
parent child Browse files
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -0,0 +1,15 b''
1 [main]
2 host = https://www.transifex.com
3
4 [RhodeCode.pot]
5 source_file = rhodecode/i18n/rhodecode.pot
6 source_lang = en
7
8 trans.pl = rhodecode/i18n/pl/LC_MESSAGES/rhodecode.po
9 trans.ru = rhodecode/i18n/ru/LC_MESSAGES/rhodecode.po
10 trans.fr = rhodecode/i18n/fr/LC_MESSAGES/rhodecode.po
11 trans.ja = rhodecode/i18n/ja/LC_MESSAGES/rhodecode.po
12 trans.pt_BR = rhodecode/i18n/pt_BR/LC_MESSAGES/rhodecode.po
13 trans.zh_CN = rhodecode/i18n/zh_CN/LC_MESSAGES/rhodecode.po
14 trans.zh_TW = rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.po
15 type = PO
@@ -0,0 +1,145 b''
1 """
2 Base utils for shell scripts
3 """
4 import os
5 import sys
6 import random
7 import urllib2
8 import pprint
9
10 try:
11 from rhodecode.lib.ext_json import json
12 except ImportError:
13 try:
14 import simplejson as json
15 except ImportError:
16 import json
17
18 CONFIG_NAME = '.rhodecode'
19 FORMAT_PRETTY = 'pretty'
20 FORMAT_JSON = 'json'
21
22
23 def api_call(apikey, apihost, method=None, **kw):
24 """
25 Api_call wrapper for RhodeCode.
26
27 :param apikey:
28 :param apihost:
29 :param format: formatting, pretty means prints and pprint of json
30 json returns unparsed json
31 :param method:
32 :returns: json response from server
33 """
34 def _build_data(random_id):
35 """
36 Builds API data with given random ID
37
38 :param random_id:
39 """
40 return {
41 "id": random_id,
42 "api_key": apikey,
43 "method": method,
44 "args": kw
45 }
46
47 if not method:
48 raise Exception('please specify method name !')
49
50 id_ = random.randrange(1, 9999)
51 req = urllib2.Request('%s/_admin/api' % apihost,
52 data=json.dumps(_build_data(id_)),
53 headers={'content-type': 'text/plain'})
54 ret = urllib2.urlopen(req)
55 raw_json = ret.read()
56 json_data = json.loads(raw_json)
57 id_ret = json_data['id']
58 if id_ret == id_:
59 return json_data
60
61 else:
62 _formatted_json = pprint.pformat(json_data)
63 raise Exception('something went wrong. '
64 'ID mismatch got %s, expected %s | %s' % (
65 id_ret, id_, _formatted_json))
66
67
68 class RcConf(object):
69 """
70 RhodeCode config for API
71
72 conf = RcConf()
73 conf['key']
74
75 """
76
77 def __init__(self, config_location=None, autoload=True, autocreate=False,
78 config=None):
79 HOME = os.getenv('HOME', os.getenv('USERPROFILE')) or ''
80 HOME_CONF = os.path.abspath(os.path.join(HOME, CONFIG_NAME))
81 self._conf_name = HOME_CONF if not config_location else config_location
82 self._conf = {}
83 if autocreate:
84 self.make_config(config)
85 if autoload:
86 self._conf = self.load_config()
87
88 def __getitem__(self, key):
89 return self._conf[key]
90
91 def __nonzero__(self):
92 if self._conf:
93 return True
94 return False
95
96 def __eq__(self):
97 return self._conf.__eq__()
98
99 def __repr__(self):
100 return 'RcConf<%s>' % self._conf.__repr__()
101
102 def make_config(self, config):
103 """
104 Saves given config as a JSON dump in the _conf_name location
105
106 :param config:
107 """
108 update = False
109 if os.path.exists(self._conf_name):
110 update = True
111 with open(self._conf_name, 'wb') as f:
112 json.dump(config, f, indent=4)
113
114 if update:
115 sys.stdout.write('Updated config in %s\n' % self._conf_name)
116 else:
117 sys.stdout.write('Created new config in %s\n' % self._conf_name)
118
119 def update_config(self, new_config):
120 """
121 Reads the JSON config updates it's values with new_config and
122 saves it back as JSON dump
123
124 :param new_config:
125 """
126 config = {}
127 try:
128 with open(self._conf_name, 'rb') as conf:
129 config = json.load(conf)
130 except IOError, e:
131 sys.stderr.write(str(e) + '\n')
132
133 config.update(new_config)
134 self.make_config(config)
135
136 def load_config(self):
137 """
138 Loads config from file and returns loaded JSON object
139 """
140 try:
141 with open(self._conf_name, 'rb') as conf:
142 return json.load(conf)
143 except IOError, e:
144 #sys.stderr.write(str(e) + '\n')
145 pass
@@ -0,0 +1,171 b''
1 # -*- coding: utf-8 -*-
2 """
3 rhodecode.bin.gist
4 ~~~~~~~~~~~~~~~~~~
5
6 Gist CLI client for RhodeCode
7
8 :created_on: May 9, 2013
9 :author: marcink
10 :copyright: (C) 2010-2013 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 from __future__ import with_statement
27 import os
28 import sys
29 import stat
30 import argparse
31 import fileinput
32
33 from rhodecode.bin.base import json, api_call, RcConf, FORMAT_JSON, FORMAT_PRETTY
34
35
36 def argparser(argv):
37 usage = (
38 "rhodecode-gist [-h] [--format=FORMAT] [--apikey=APIKEY] [--apihost=APIHOST] "
39 "[--config=CONFIG] [--save-config] [GIST OPTIONS] "
40 "[filename or stdin use - for terminal stdin ]\n"
41 "Create config file: rhodecode-gist --apikey=<key> --apihost=http://rhodecode.server --save-config"
42 )
43
44 parser = argparse.ArgumentParser(description='RhodeCode Gist cli',
45 usage=usage)
46
47 ## config
48 group = parser.add_argument_group('config')
49 group.add_argument('--apikey', help='api access key')
50 group.add_argument('--apihost', help='api host')
51 group.add_argument('--config', help='config file path DEFAULT: ~/.rhodecode')
52 group.add_argument('--save-config', action='store_true',
53 help='save the given config into a file')
54
55 group = parser.add_argument_group('GIST')
56 group.add_argument('-p', '--private', action='store_true',
57 help='create private Gist')
58 group.add_argument('-f', '--filename',
59 help='set uploaded gist filename, '
60 'also defines syntax highlighting')
61 group.add_argument('-d', '--description', help='Gist description')
62 group.add_argument('-l', '--lifetime', metavar='MINUTES',
63 help='gist lifetime in minutes, -1 (DEFAULT) is forever')
64 group.add_argument('--format', dest='format', type=str,
65 help='output format DEFAULT: `%s` can '
66 'be also `%s`' % (FORMAT_PRETTY, FORMAT_JSON),
67 default=FORMAT_PRETTY
68 )
69 args, other = parser.parse_known_args()
70 return parser, args, other
71
72
73 def _run(argv):
74 conf = None
75 parser, args, other = argparser(argv)
76
77 api_credentials_given = (args.apikey and args.apihost)
78 if args.save_config:
79 if not api_credentials_given:
80 raise parser.error('--save-config requires --apikey and --apihost')
81 conf = RcConf(config_location=args.config,
82 autocreate=True, config={'apikey': args.apikey,
83 'apihost': args.apihost})
84 sys.exit()
85
86 if not conf:
87 conf = RcConf(config_location=args.config, autoload=True)
88 if not conf:
89 if not api_credentials_given:
90 parser.error('Could not find config file and missing '
91 '--apikey or --apihost in params')
92
93 apikey = args.apikey or conf['apikey']
94 host = args.apihost or conf['apihost']
95 DEFAULT_FILENAME = 'gistfile1.txt'
96 if other:
97 # skip multifiles for now
98 filename = other[0]
99 if filename == '-':
100 filename = DEFAULT_FILENAME
101 gist_content = ''
102 for line in fileinput.input('-'):
103 gist_content += line
104 else:
105 with open(filename, 'rb') as f:
106 gist_content = f.read()
107
108 else:
109 filename = DEFAULT_FILENAME
110 gist_content = None
111 # little bit hacky but cross platform check where the
112 # stdin comes from we skip the terminal case it can be handled by '-'
113 mode = os.fstat(0).st_mode
114 if stat.S_ISFIFO(mode):
115 # "stdin is piped"
116 gist_content = sys.stdin.read()
117 elif stat.S_ISREG(mode):
118 # "stdin is redirected"
119 gist_content = sys.stdin.read()
120 else:
121 # "stdin is terminal"
122 pass
123
124 # make sure we don't upload binary stuff
125 if gist_content and '\0' in gist_content:
126 raise Exception('Error: binary files upload is not possible')
127
128 filename = os.path.basename(args.filename or filename)
129 if gist_content:
130 files = {
131 filename: {
132 'content': gist_content,
133 'lexer': None
134 }
135 }
136
137 margs = dict(
138 lifetime=args.lifetime,
139 description=args.description,
140 gist_type='private' if args.private else 'public',
141 files=files
142 )
143
144 json_data = api_call(apikey, host, 'create_gist', **margs)['result']
145 if args.format == FORMAT_JSON:
146 print json.dumps(json_data)
147 elif args.format == FORMAT_PRETTY:
148 print json_data
149 print 'Created %s gist %s' % (json_data['gist']['type'],
150 json_data['gist']['url'])
151 return 0
152
153
154 def main(argv=None):
155 """
156 Main execution function for cli
157
158 :param argv:
159 """
160 if argv is None:
161 argv = sys.argv
162
163 try:
164 return _run(argv)
165 except Exception, e:
166 print e
167 return 1
168
169
170 if __name__ == '__main__':
171 sys.exit(main(sys.argv))
@@ -0,0 +1,198 b''
1 # -*- coding: utf-8 -*-
2 """
3 rhodecode.controllers.admin.gist
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5
6 gist controller for RhodeCode
7
8 :created_on: May 9, 2013
9 :author: marcink
10 :copyright: (C) 2010-2013 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 time
26 import logging
27 import traceback
28 import formencode
29 from formencode import htmlfill
30
31 from pylons import request, response, tmpl_context as c, url
32 from pylons.controllers.util import abort, redirect
33 from pylons.i18n.translation import _
34
35 from rhodecode.model.forms import GistForm
36 from rhodecode.model.gist import GistModel
37 from rhodecode.model.meta import Session
38 from rhodecode.model.db import Gist
39 from rhodecode.lib import helpers as h
40 from rhodecode.lib.base import BaseController, render
41 from rhodecode.lib.auth import LoginRequired, NotAnonymous
42 from rhodecode.lib.utils2 import safe_str, safe_int, time_to_datetime
43 from rhodecode.lib.helpers import Page
44 from webob.exc import HTTPNotFound, HTTPForbidden
45 from sqlalchemy.sql.expression import or_
46 from rhodecode.lib.vcs.exceptions import VCSError
47
48 log = logging.getLogger(__name__)
49
50
51 class GistsController(BaseController):
52 """REST Controller styled on the Atom Publishing Protocol"""
53
54 def __load_defaults(self):
55 c.lifetime_values = [
56 (str(-1), _('forever')),
57 (str(5), _('5 minutes')),
58 (str(60), _('1 hour')),
59 (str(60 * 24), _('1 day')),
60 (str(60 * 24 * 30), _('1 month')),
61 ]
62 c.lifetime_options = [(c.lifetime_values, _("Lifetime"))]
63
64 @LoginRequired()
65 def index(self, format='html'):
66 """GET /admin/gists: All items in the collection"""
67 # url('gists')
68 c.show_private = request.GET.get('private') and c.rhodecode_user.username != 'default'
69 c.show_public = request.GET.get('public') and c.rhodecode_user.username != 'default'
70
71 gists = Gist().query()\
72 .filter(or_(Gist.gist_expires == -1, Gist.gist_expires >= time.time()))\
73 .order_by(Gist.created_on.desc())
74 if c.show_private:
75 c.gists = gists.filter(Gist.gist_type == Gist.GIST_PRIVATE)\
76 .filter(Gist.gist_owner == c.rhodecode_user.user_id)
77 elif c.show_public:
78 c.gists = gists.filter(Gist.gist_type == Gist.GIST_PUBLIC)\
79 .filter(Gist.gist_owner == c.rhodecode_user.user_id)
80
81 else:
82 c.gists = gists.filter(Gist.gist_type == Gist.GIST_PUBLIC)
83 p = safe_int(request.GET.get('page', 1), 1)
84 c.gists_pager = Page(c.gists, page=p, items_per_page=10)
85 return render('admin/gists/index.html')
86
87 @LoginRequired()
88 @NotAnonymous()
89 def create(self):
90 """POST /admin/gists: Create a new item"""
91 # url('gists')
92 self.__load_defaults()
93 gist_form = GistForm([x[0] for x in c.lifetime_values])()
94 try:
95 form_result = gist_form.to_python(dict(request.POST))
96 #TODO: multiple files support, from the form
97 nodes = {
98 form_result['filename'] or 'gistfile1.txt': {
99 'content': form_result['content'],
100 'lexer': None # autodetect
101 }
102 }
103 _public = form_result['public']
104 gist_type = Gist.GIST_PUBLIC if _public else Gist.GIST_PRIVATE
105 gist = GistModel().create(
106 description=form_result['description'],
107 owner=c.rhodecode_user,
108 gist_mapping=nodes,
109 gist_type=gist_type,
110 lifetime=form_result['lifetime']
111 )
112 Session().commit()
113 new_gist_id = gist.gist_access_id
114 except formencode.Invalid, errors:
115 defaults = errors.value
116
117 return formencode.htmlfill.render(
118 render('admin/gists/new.html'),
119 defaults=defaults,
120 errors=errors.error_dict or {},
121 prefix_error=False,
122 encoding="UTF-8"
123 )
124
125 except Exception, e:
126 log.error(traceback.format_exc())
127 h.flash(_('Error occurred during gist creation'), category='error')
128 return redirect(url('new_gist'))
129 return redirect(url('gist', gist_id=new_gist_id))
130
131 @LoginRequired()
132 @NotAnonymous()
133 def new(self, format='html'):
134 """GET /admin/gists/new: Form to create a new item"""
135 # url('new_gist')
136 self.__load_defaults()
137 return render('admin/gists/new.html')
138
139 @LoginRequired()
140 @NotAnonymous()
141 def update(self, gist_id):
142 """PUT /admin/gists/gist_id: Update an existing item"""
143 # Forms posted to this method should contain a hidden field:
144 # <input type="hidden" name="_method" value="PUT" />
145 # Or using helpers:
146 # h.form(url('gist', gist_id=ID),
147 # method='put')
148 # url('gist', gist_id=ID)
149
150 @LoginRequired()
151 @NotAnonymous()
152 def delete(self, gist_id):
153 """DELETE /admin/gists/gist_id: Delete an existing item"""
154 # Forms posted to this method should contain a hidden field:
155 # <input type="hidden" name="_method" value="DELETE" />
156 # Or using helpers:
157 # h.form(url('gist', gist_id=ID),
158 # method='delete')
159 # url('gist', gist_id=ID)
160 gist = GistModel().get_gist(gist_id)
161 owner = gist.gist_owner == c.rhodecode_user.user_id
162 if h.HasPermissionAny('hg.admin')() or owner:
163 GistModel().delete(gist)
164 Session().commit()
165 h.flash(_('Deleted gist %s') % gist.gist_access_id, category='success')
166 else:
167 raise HTTPForbidden()
168
169 return redirect(url('gists'))
170
171 @LoginRequired()
172 def show(self, gist_id, format='html', revision='tip', f_path=None):
173 """GET /admin/gists/gist_id: Show a specific item"""
174 # url('gist', gist_id=ID)
175 c.gist = Gist.get_or_404(gist_id)
176
177 #check if this gist is not expired
178 if c.gist.gist_expires != -1:
179 if time.time() > c.gist.gist_expires:
180 log.error('Gist expired at %s' %
181 (time_to_datetime(c.gist.gist_expires)))
182 raise HTTPNotFound()
183 try:
184 c.file_changeset, c.files = GistModel().get_gist_files(gist_id)
185 except VCSError:
186 log.error(traceback.format_exc())
187 raise HTTPNotFound()
188 if format == 'raw':
189 content = '\n\n'.join([f.content for f in c.files if (f_path is None or f.path == f_path)])
190 response.content_type = 'text/plain'
191 return content
192 return render('admin/gists/show.html')
193
194 @LoginRequired()
195 @NotAnonymous()
196 def edit(self, gist_id, format='html'):
197 """GET /admin/gists/gist_id/edit: Form to edit an existing item"""
198 # url('edit_gist', gist_id=ID)
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
@@ -12,6 +12,7 b' syntax: regexp'
12 12 ^docs/build/
13 13 ^docs/_build/
14 14 ^data$
15 ^sql_dumps/
15 16 ^\.settings$
16 17 ^\.project$
17 18 ^\.pydevproject$
@@ -22,3 +23,4 b' syntax: regexp'
22 23 ^rc.*\.ini$
23 24 ^fabfile.py
24 25 ^\.rhodecode$
26 ^\.idea$
@@ -34,3 +34,5 b' List of contributors to RhodeCode projec'
34 34 Mads Kiilerich <madski@unity3d.com>
35 35 Dan Sheridan <djs@adelard.com>
36 36 Dennis Brakhane <brakhane@googlemail.com>
37 Simon Lopez <simon.lopez@slopez.org>
38
@@ -74,10 +74,12 b' RhodeCode Features'
74 74 Proven to work with 1000s of repositories and users
75 75 - Supports http/https, LDAP, AD, proxy-pass authentication.
76 76 - Full permissions (private/read/write/admin) together with IP restrictions for each repository,
77 additional explicit forking and repository creation permissions.
78 - User groups for easier permission management
79 - Repository groups let you group repos and manage them easier.
77 additional explicit forking, repositories group and repository creation permissions.
78 - User groups for easier permission management.
79 - Repository groups let you group repos and manage them easier. They come with
80 permission delegation features, so you can delegate groups management.
80 81 - Users can fork other users repos, and compare them at any time.
82 - Built in Gist functionality for sharing code snippets.
81 83 - Integrates easily with other systems, with custom created mappers you can connect it to almost
82 84 any issue tracker, and with an JSON-RPC API you can make much more
83 85 - Build in commit-api let's you add, edit and commit files right from RhodeCode
@@ -118,7 +120,6 b' Incoming / Plans'
118 120 - Simple issue tracker
119 121 - SSH based authentication with server side key management
120 122 - Commit based built in wiki system
121 - Gist server
122 123 - More statistics and graph (global annotation + some more statistics)
123 124 - Other advancements as development continues (or you can of course make
124 125 additions and or requests)
@@ -29,24 +29,38 b' pdebug = false'
29 29 #smtp_auth =
30 30
31 31 [server:main]
32 ## PASTE
33 ## nr of threads to spawn
32 ## PASTE ##
33 #use = egg:Paste#http
34 ## nr of worker threads to spawn
34 35 #threadpool_workers = 5
35
36 36 ## max request before thread respawn
37 37 #threadpool_max_requests = 10
38
39 38 ## option to use threads of process
40 39 #use_threadpool = true
41 40
42 #use = egg:Paste#http
43
44 ## WAITRESS
41 ## WAITRESS ##
42 use = egg:waitress#main
43 ## number of worker threads
45 44 threads = 5
46 ## 100GB
45 ## MAX BODY SIZE 100GB
47 46 max_request_body_size = 107374182400
48 use = egg:waitress#main
47 ## use poll instead of select, fixes fd limits, may not work on old
48 ## windows systems.
49 #asyncore_use_poll = True
49 50
51 ## GUNICORN ##
52 #use = egg:gunicorn#main
53 ## number of process workers. You must set `instance_id = *` when this option
54 ## is set to more than one worker
55 #workers = 1
56 ## process name
57 #proc_name = rhodecode
58 ## type of worker class, one of sync, eventlet, gevent, tornado
59 ## recommended for bigger setup is using of of other than sync one
60 #worker_class = sync
61 #max_requests = 5
62
63 ## COMMON ##
50 64 host = 0.0.0.0
51 65 port = 5000
52 66
@@ -68,6 +82,10 b' lang = en'
68 82 cache_dir = %(here)s/data
69 83 index_dir = %(here)s/data/index
70 84
85 ## perform a full repository scan on each server start, this should be
86 ## set to false after first startup, to allow faster server restarts.
87 initial_repo_scan = true
88
71 89 ## uncomment and set this path to use archive download cache
72 90 #archive_cache_dir = /tmp/tarballcache
73 91
@@ -89,9 +107,6 b' use_htsts = false'
89 107 ## number of commits stats will parse on each iteration
90 108 commit_parse_limit = 25
91 109
92 ## number of items displayed in lightweight dashboard before paginating is shown
93 dashboard_items = 100
94
95 110 ## use gravatar service to display avatars
96 111 use_gravatar = true
97 112
@@ -111,6 +126,18 b' rss_include_diff = false'
111 126 show_sha_length = 12
112 127 show_revision_number = true
113 128
129 ## gist URL alias, used to create nicer urls for gist. This should be an
130 ## url that does rewrites to _admin/gists/<gistid>.
131 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
132 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/<gistid>
133 gist_alias_url =
134
135 ## white list of API enabled controllers. This allows to add list of
136 ## controllers to which access will be enabled by api_key. eg: to enable
137 ## api access to raw_files put `FilesController:raw`, to enable access to patches
138 ## add `ChangesetController:changeset_patch`. This list should be "," separated
139 ## Syntax is <ControllerClass>:<function>. Check debug logs for generated names
140 api_access_controllers_whitelist =
114 141
115 142 ## alternative_gravatar_url allows you to use your own avatar server application
116 143 ## the following parts of the URL will be replaced
@@ -186,6 +213,7 b' auth_ret_code ='
186 213 ## codes don't break the transactions while 4XX codes do
187 214 lock_ret_code = 423
188 215
216 allow_repo_location_change = True
189 217
190 218 ####################################
191 219 ### CELERY CONFIG ####
@@ -16,9 +16,24 b' API ACCESS FOR WEB VIEWS'
16 16 API access can also be turned on for each web view in RhodeCode that is
17 17 decorated with `@LoginRequired` decorator. To enable API access simple change
18 18 the standard login decorator to `@LoginRequired(api_access=True)`.
19
20 To make this operation easier, starting from version 1.7.0 there's a white list
21 of views that will have API access enabled. Simply edit `api_access_controllers_whitelist`
22 option in your .ini file, and define views that should have API access enabled.
23 Following example shows how to enable API access to patch/diff raw file and archive
24 in RhodeCode::
25
26 api_access_controllers_whitelist =
27 ChangesetController:changeset_patch,
28 ChangesetController:changeset_raw,
29 FilesController:raw,
30 FilesController:archivefile
31
32
19 33 After this change, a rhodecode view can be accessed without login by adding a
20 34 GET parameter `?api_key=<api_key>` to url. By default this is only
21 enabled on RSS/ATOM feed views.
35 enabled on RSS/ATOM feed views. Exposing raw diffs is a good way to integrate with
36 3rd party services like code review, or build farms that could download archives.
22 37
23 38
24 39 API ACCESS
@@ -171,7 +186,7 b' INPUT::'
171 186 OUTPUT::
172 187
173 188 id : <id_given_in_input>
174 result : "Cache for repository `<reponame>` was invalidated: invalidated cache keys: <list_of_cache_keys>"
189 result : "Caches of repository `<reponame>`"
175 190 error : null
176 191
177 192 lock
@@ -197,7 +212,13 b' INPUT::'
197 212 OUTPUT::
198 213
199 214 id : <id_given_in_input>
200 result : "User `<username>` set lock state for repo `<reponame>` to `true|false`"
215 result : {
216 "repo": "<reponame>",
217 "locked": "<bool true|false>",
218 "locked_since": "<float lock_time>",
219 "locked_by": "<username>",
220 "msg": "User `<username>` set lock state for repo `<reponame>` to `<false|true>`"
221 }
201 222 error : null
202 223
203 224
@@ -302,6 +323,7 b' OUTPUT::'
302 323 result: [
303 324 {
304 325 "user_id" : "<user_id>",
326 "api_key" : "<api_key>",
305 327 "username" : "<username>",
306 328 "firstname": "<firstname>",
307 329 "lastname" : "<lastname>",
@@ -333,7 +355,7 b' INPUT::'
333 355 args : {
334 356 "username" : "<username>",
335 357 "email" : "<useremail>",
336 "password" : "<password>",
358 "password" : "<password = Optional(None)>",
337 359 "firstname" : "<firstname> = Optional(None)",
338 360 "lastname" : "<lastname> = Optional(None)",
339 361 "active" : "<bool> = Optional(True)",
@@ -393,6 +415,7 b' OUTPUT::'
393 415 "msg" : "updated user ID:<userid> <username>",
394 416 "user": {
395 417 "user_id" : "<user_id>",
418 "api_key" : "<api_key>",
396 419 "username" : "<username>",
397 420 "firstname": "<firstname>",
398 421 "lastname" : "<lastname>",
@@ -461,6 +484,7 b' OUTPUT::'
461 484 "members" : [
462 485 {
463 486 "user_id" : "<user_id>",
487 "api_key" : "<api_key>",
464 488 "username" : "<username>",
465 489 "firstname": "<firstname>",
466 490 "lastname" : "<lastname>",
@@ -518,8 +542,9 b' INPUT::'
518 542 api_key : "<api_key>"
519 543 method : "create_users_group"
520 544 args: {
521 "group_name": "<groupname>",
522 "active":"<bool> = Optional(True)"
545 "group_name": "<groupname>",
546 "owner" : "<onwer_name_or_id = Optional(=apiuser)>",
547 "active": "<bool> = Optional(True)"
523 548 }
524 549
525 550 OUTPUT::
@@ -642,6 +667,7 b' OUTPUT::'
642 667 {
643 668 "type": "user",
644 669 "user_id" : "<user_id>",
670 "api_key" : "<api_key>",
645 671 "username" : "<username>",
646 672 "firstname": "<firstname>",
647 673 "lastname" : "<lastname>",
@@ -667,6 +693,7 b' OUTPUT::'
667 693 {
668 694 "user_id" : "<user_id>",
669 695 "username" : "<username>",
696 "api_key" : "<api_key>",
670 697 "firstname": "<firstname>",
671 698 "lastname" : "<lastname>",
672 699 "email" : "<email>",
@@ -4,6 +4,45 b''
4 4 Changelog
5 5 =========
6 6
7 1.7.0 (**2013-05-XX**)
8 ----------------------
9
10 news
11 ++++
12
13 - Manage User’s Groups(teams): create, delete, rename, add/remove users inside.
14 by delegated user group admins.
15 - Implemented simple Gist functionality.
16 - External authentication got special flag to controll user activation.
17 - Created whitelist for API access. Each view can now be accessed by api_key
18 if added to whitelist.
19 - Added dedicated file history page.
20 - Added compare option into bookmarks
21 - Improved diff display for binary files and renames.
22 - Archive downloading are now stored in main action journal.
23 - Switch gravatar to always use ssl.
24 - Implements #842 RhodeCode version disclosure.
25 - Allow underscore to be the optionally first character of username.
26
27 fixes
28 +++++
29
30 - #818: Bookmarks Do Not Display on Changeset View.
31 - Fixed default permissions population during upgrades.
32 - Fixed overwrite default user group permission flag.
33 - Fixed issue with h.person() function returned prematurly giving only email
34 info from changeset metadata.
35 - get_changeset uses now mercurial revrange to filter out branches.
36 Switch to branch it's around 20% faster this way.
37 - Fixed some issues with paginators on chrome.
38 - Forbid changing of repository type.
39 - Adde missing permission checks in list of forks in repository settings.
40 - Fixes #834 hooks error on remote pulling.
41 - Fixes issues #849. Web Commits functionality failed for non-ascii files.
42 - Fixed #850. Whoosh indexer should use the default revision when doing index.
43 - Fixed #851 and #563 make-index crashes on non-ascii files.
44 - Fixes #852, flash messages had issies with non-ascii messages
45
7 46 1.6.0 (**2013-05-12**)
8 47 ----------------------
9 48
@@ -20,7 +59,7 b' fixes'
20 59 permissions when doing upgrades
21 60 - Fixed some unicode problems with git file path
22 61 - Fixed broken handling of adding an htsts headers.
23 - Fixed redirection loop on changelog for empty repository
62 - Fixed redirection loop on changelog for empty repository
24 63 - Fixed issue with web-editor that didn't preserve executable bit
25 64 after editing files
26 65
@@ -29,7 +68,7 b' 1.6.0rc1 (**2013-04-07**)'
29 68
30 69 news
31 70 ++++
32
71
33 72 - Redesign UI, with lots of small improvements.
34 73 - Group management delegation. Group admin can manage a group, and repos
35 74 under it, admin can create child groups inside group he manages.
@@ -57,7 +96,7 b' news'
57 96 - Linaro's ldap sync scripts.
58 97 - #797 git refs filter is now configurable via .ini file.
59 98 - New ishell paster command for easier administrative tasks.
60
99
61 100 fixes
62 101 +++++
63 102
@@ -68,8 +107,8 b' fixes'
68 107 - #731 update-repoinfo sometimes failed to update data when changesets were
69 108 initial commits.
70 109 - #749,#805 and #516 Removed duplication of repo settings for rhodecode admins
71 and repo admins.
72 - Global permission update with "overwrite existing settings" shouldn't
110 and repo admins.
111 - Global permission update with "overwrite existing settings" shouldn't
73 112 override private repositories.
74 113 - #642 added recursion limit for stats gathering.
75 114 - #739 Delete/Edit repositories should only point to admin links if the user
@@ -99,7 +138,7 b' fixes'
99 138 - Automatically assign instance_id for host and process if it has been set to *
100 139 - Fixed multiple IP addresses in each of extracted IP.
101 140 - Lot of other small bug fixes and improvements.
102
141
103 142 1.5.4 (**2013-03-13**)
104 143 ----------------------
105 144
@@ -196,6 +196,13 b" Here's a typical ldap setup::"
196 196 Last Name Attribute = lastName
197 197 E-mail Attribute = mail
198 198
199 If your user groups are placed in a Organisation Unit (OU) structure the Search Settings configuration differs::
200
201 Search settings
202 Base DN = DC=host,DC=example,DC=org
203 LDAP Filter = (&(memberOf=CN=your user group,OU=subunit,OU=unit,DC=host,DC=example,DC=org)(objectClass=user))
204 LDAP Search Scope = SUBTREE
205
199 206 .. _enable_ldap:
200 207
201 208 Enable LDAP : required
@@ -444,11 +451,11 b' to define a regular expression that will'
444 451 messages and replace that with an url to this issue. To enable this simply
445 452 uncomment following variables in the ini file::
446 453
447 url_pat = (?:^#|\s#)(\w+)
454 issue_pat = (?:^#|\s#)(\w+)
448 455 issue_server_link = https://myissueserver.com/{repo}/issue/{id}
449 456 issue_prefix = #
450 457
451 `url_pat` is the regular expression that will fetch issues from commit messages.
458 `issue_pat` is the regular expression that will fetch issues from commit messages.
452 459 Default regex will match issues in format of #<number> eg. #300.
453 460
454 461 Matched issues will be replace with the link specified as `issue_server_link`
@@ -527,6 +534,27 b' Sample config for nginx using proxy::'
527 534 #server 127.0.0.1:5002;
528 535 }
529 536
537 ## gist alias
538 server {
539 listen 443;
540 server_name gist.myserver.com;
541 access_log /var/log/nginx/gist.access.log;
542 error_log /var/log/nginx/gist.error.log;
543
544 ssl on;
545 ssl_certificate gist.rhodecode.myserver.com.crt;
546 ssl_certificate_key gist.rhodecode.myserver.com.key;
547
548 ssl_session_timeout 5m;
549
550 ssl_protocols SSLv3 TLSv1;
551 ssl_ciphers DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:EDH-RSA-DES-CBC3-SHA:AES256-SHA:DES-CBC3-SHA:AES128-SHA:RC4-SHA:RC4-MD5;
552 ssl_prefer_server_ciphers on;
553
554 rewrite ^/(.+)$ https://rhodecode.myserver.com/_admin/gists/$1;
555 rewrite (.*) https://rhodecode.myserver.com/_admin/gists;
556 }
557
530 558 server {
531 559 listen 443;
532 560 server_name rhodecode.myserver.com;
@@ -543,25 +571,16 b' Sample config for nginx using proxy::'
543 571 ssl_ciphers DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:EDH-RSA-DES-CBC3-SHA:AES256-SHA:DES-CBC3-SHA:AES128-SHA:RC4-SHA:RC4-MD5;
544 572 ssl_prefer_server_ciphers on;
545 573
546 # uncomment if you have nginx with chunking module compiled
547 # fixes the issues of having to put postBuffer data for large git
548 # pushes
549 #chunkin on;
550 #error_page 411 = @my_411_error;
551 #location @my_411_error {
552 # chunkin_resume;
553 #}
554
555 # uncomment if you want to serve static files by nginx
574 ## uncomment root directive if you want to serve static files by nginx
575 ## requires static_files = false in .ini file
556 576 #root /path/to/installation/rhodecode/public;
557
577 include /etc/nginx/proxy.conf;
558 578 location / {
559 579 try_files $uri @rhode;
560 580 }
561 581
562 582 location @rhode {
563 583 proxy_pass http://rc;
564 include /etc/nginx/proxy.conf;
565 584 }
566 585
567 586 }
@@ -576,25 +595,14 b' pushes or large pushes::'
576 595 proxy_set_header X-Real-IP $remote_addr;
577 596 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
578 597 proxy_set_header Proxy-host $proxy_host;
579 client_max_body_size 400m;
580 client_body_buffer_size 128k;
581 598 proxy_buffering off;
582 599 proxy_connect_timeout 7200;
583 600 proxy_send_timeout 7200;
584 601 proxy_read_timeout 7200;
585 602 proxy_buffers 8 32k;
586
587 Also, when using root path with nginx you might set the static files to false
588 in the production.ini file::
589
590 [app:main]
591 use = egg:rhodecode
592 full_stack = true
593 static_files = false
594 lang=en
595 cache_dir = %(here)s/data
596
597 In order to not have the statics served by the application. This improves speed.
603 client_max_body_size 1024m;
604 client_body_buffer_size 128k;
605 large_client_header_buffers 8 64k;
598 606
599 607
600 608 Apache virtual host reverse proxy example
@@ -113,3 +113,54 b' might pass the url with stored credentia'
113 113 using given credentials. Please take a note that they will be stored as
114 114 plaintext inside the database. RhodeCode will remove auth info when showing the
115 115 clone url in summary page.
116
117
118
119 Visual settings in admin pannel
120 -------------------------------
121
122
123 Visualisation settings in RhodeCode settings view are extra customizations
124 of server behavior. There are 3 main section in the settings.
125
126 General
127 ~~~~~~~
128
129 `Use repository extra fields` option allows to set a custom fields for each
130 repository in the system. Each new field consists of 3 attributes `field key`,
131 `field label`, `field description`. Example usage of such fields would be to
132 define company specific information into repositories eg. defining repo_manager
133 key that would add give info about a manager of each repository. There's no
134 limit for adding custom fields. Newly created fields are accessible via API.
135
136 `Show RhodeCode version` option toggles displaying exact RhodeCode version in
137 the footer
138
139
140 Dashboard items
141 ~~~~~~~~~~~~~~~
142
143 Number if items in main page dashboard before pagination is displayed
144
145
146 Icons
147 ~~~~~
148
149 Show public repo icon / Show private repo icon on repositories - defines if
150 public/private icons should be shown in the UI.
151
152
153 Meta-Tagging
154 ~~~~~~~~~~~~
155
156 With this option enabled, special metatags that are recognisible by RhodeCode
157 will be turned into colored tags. Currently available tags are::
158
159 [featured]
160 [stale]
161 [dead]
162 [lang => lang]
163 [license => License]
164 [requires => Repo]
165 [recommends => Repo]
166 [see => URI]
@@ -29,26 +29,40 b' pdebug = false'
29 29 #smtp_auth =
30 30
31 31 [server:main]
32 ## PASTE
33 ## nr of threads to spawn
32 ## PASTE ##
33 #use = egg:Paste#http
34 ## nr of worker threads to spawn
34 35 #threadpool_workers = 5
35
36 36 ## max request before thread respawn
37 37 #threadpool_max_requests = 10
38
39 38 ## option to use threads of process
40 39 #use_threadpool = true
41 40
42 #use = egg:Paste#http
43
44 ## WAITRESS
41 ## WAITRESS ##
42 use = egg:waitress#main
43 ## number of worker threads
45 44 threads = 5
46 ## 100GB
45 ## MAX BODY SIZE 100GB
47 46 max_request_body_size = 107374182400
48 use = egg:waitress#main
47 ## use poll instead of select, fixes fd limits, may not work on old
48 ## windows systems.
49 #asyncore_use_poll = True
49 50
51 ## GUNICORN ##
52 #use = egg:gunicorn#main
53 ## number of process workers. You must set `instance_id = *` when this option
54 ## is set to more than one worker
55 #workers = 1
56 ## process name
57 #proc_name = rhodecode
58 ## type of worker class, one of sync, eventlet, gevent, tornado
59 ## recommended for bigger setup is using of of other than sync one
60 #worker_class = sync
61 #max_requests = 5
62
63 ## COMMON ##
50 64 host = 127.0.0.1
51 port = 8001
65 port = 5000
52 66
53 67 ## prefix middleware for rc
54 68 #[filter:proxy-prefix]
@@ -68,6 +82,10 b' lang = en'
68 82 cache_dir = %(here)s/data
69 83 index_dir = %(here)s/data/index
70 84
85 ## perform a full repository scan on each server start, this should be
86 ## set to false after first startup, to allow faster server restarts.
87 initial_repo_scan = true
88
71 89 ## uncomment and set this path to use archive download cache
72 90 #archive_cache_dir = /tmp/tarballcache
73 91
@@ -89,9 +107,6 b' use_htsts = false'
89 107 ## number of commits stats will parse on each iteration
90 108 commit_parse_limit = 25
91 109
92 ## number of items displayed in lightweight dashboard before paginating is shown
93 dashboard_items = 100
94
95 110 ## use gravatar service to display avatars
96 111 use_gravatar = true
97 112
@@ -111,6 +126,18 b' rss_include_diff = false'
111 126 show_sha_length = 12
112 127 show_revision_number = true
113 128
129 ## gist URL alias, used to create nicer urls for gist. This should be an
130 ## url that does rewrites to _admin/gists/<gistid>.
131 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
132 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/<gistid>
133 gist_alias_url =
134
135 ## white list of API enabled controllers. This allows to add list of
136 ## controllers to which access will be enabled by api_key. eg: to enable
137 ## api access to raw_files put `FilesController:raw`, to enable access to patches
138 ## add `ChangesetController:changeset_patch`. This list should be "," separated
139 ## Syntax is <ControllerClass>:<function>. Check debug logs for generated names
140 api_access_controllers_whitelist =
114 141
115 142 ## alternative_gravatar_url allows you to use your own avatar server application
116 143 ## the following parts of the URL will be replaced
@@ -186,6 +213,7 b' auth_ret_code ='
186 213 ## codes don't break the transactions while 4XX codes do
187 214 lock_ret_code = 423
188 215
216 allow_repo_location_change = True
189 217
190 218 ####################################
191 219 ### CELERY CONFIG ####
@@ -26,32 +26,7 b''
26 26 import sys
27 27 import platform
28 28
29 VERSION = (1, 6, 1)
30
31 try:
32 from rhodecode.lib import get_current_revision
33 _rev = get_current_revision(quiet=True)
34 if _rev and len(VERSION) > 3:
35 VERSION += ('dev%s' % _rev[0],)
36 except ImportError:
37 pass
38
39 __version__ = ('.'.join((str(each) for each in VERSION[:3])) +
40 '.'.join(VERSION[3:]))
41 __dbversion__ = 11 # defines current db version for migrations
42 __platform__ = platform.system()
43 __license__ = 'GPLv3'
44 __py_version__ = sys.version_info
45 __author__ = 'Marcin Kuzminski'
46 __url__ = 'http://rhodecode.org'
47
48 PLATFORM_WIN = ('Windows')
49 PLATFORM_OTHERS = ('Linux', 'Darwin', 'FreeBSD', 'OpenBSD', 'SunOS') #depracated
50
51 is_windows = __platform__ in PLATFORM_WIN
52 is_unix = not is_windows
53
54
29 VERSION = (1, 7, 0)
55 30 BACKENDS = {
56 31 'hg': 'Mercurial repository',
57 32 'git': 'Git repository',
@@ -65,3 +40,23 b' CONFIG = {}'
65 40
66 41 # Linked module for extensions
67 42 EXTENSIONS = {}
43
44 try:
45 from rhodecode.lib import get_current_revision
46 _rev = get_current_revision(quiet=True)
47 if _rev and len(VERSION) > 3:
48 VERSION += ('%s' % _rev[0],)
49 except ImportError:
50 pass
51
52 __version__ = ('.'.join((str(each) for each in VERSION[:3])) +
53 '.'.join(VERSION[3:]))
54 __dbversion__ = 13 # defines current db version for migrations
55 __platform__ = platform.system()
56 __license__ = 'GPLv3'
57 __py_version__ = sys.version_info
58 __author__ = 'Marcin Kuzminski'
59 __url__ = 'http://rhodecode.org'
60
61 is_windows = __platform__ in ['Windows']
62 is_unix = not is_windows
@@ -14,7 +14,14 b''
14 14 import ldap
15 15 import urllib2
16 16 import uuid
17 import json
17
18 try:
19 from rhodecode.lib.compat import json
20 except ImportError:
21 try:
22 import simplejson as json
23 except ImportError:
24 import json
18 25
19 26 from ConfigParser import ConfigParser
20 27
@@ -72,7 +79,7 b' class RhodecodeAPI():'
72 79 if uid != response["id"]:
73 80 raise InvalidResponseIDError("UUID does not match.")
74 81
75 if response["error"] != None:
82 if response["error"] is not None:
76 83 raise RhodecodeResponseError(response["error"])
77 84
78 85 return response["result"]
@@ -1,7 +1,7 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 rhodecode.bin.backup_manager
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3 rhodecode.bin.api
4 ~~~~~~~~~~~~~~~~~
5 5
6 6 Api CLI client for RhodeCode
7 7
@@ -24,160 +24,18 b''
24 24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25 25
26 26 from __future__ import with_statement
27 import os
28 27 import sys
29 import random
30 import urllib2
31 import pprint
32 28 import argparse
33 29
34 try:
35 from rhodecode.lib.ext_json import json
36 except ImportError:
37 try:
38 import simplejson as json
39 except ImportError:
40 import json
41
42
43 CONFIG_NAME = '.rhodecode'
44 FORMAT_PRETTY = 'pretty'
45 FORMAT_JSON = 'json'
46
47
48 class RcConf(object):
49 """
50 RhodeCode config for API
51
52 conf = RcConf()
53 conf['key']
54
55 """
56
57 def __init__(self, config_location=None, autoload=True, autocreate=False,
58 config=None):
59 self._conf_name = CONFIG_NAME if not config_location else config_location
60 self._conf = {}
61 if autocreate:
62 self.make_config(config)
63 if autoload:
64 self._conf = self.load_config()
65
66 def __getitem__(self, key):
67 return self._conf[key]
68
69 def __nonzero__(self):
70 if self._conf:
71 return True
72 return False
73
74 def __eq__(self):
75 return self._conf.__eq__()
76
77 def __repr__(self):
78 return 'RcConf<%s>' % self._conf.__repr__()
79
80 def make_config(self, config):
81 """
82 Saves given config as a JSON dump in the _conf_name location
83
84 :param config:
85 :type config:
86 """
87 update = False
88 if os.path.exists(self._conf_name):
89 update = True
90 with open(self._conf_name, 'wb') as f:
91 json.dump(config, f, indent=4)
92
93 if update:
94 sys.stdout.write('Updated config in %s\n' % self._conf_name)
95 else:
96 sys.stdout.write('Created new config in %s\n' % self._conf_name)
97
98 def update_config(self, new_config):
99 """
100 Reads the JSON config updates it's values with new_config and
101 saves it back as JSON dump
102
103 :param new_config:
104 """
105 config = {}
106 try:
107 with open(self._conf_name, 'rb') as conf:
108 config = json.load(conf)
109 except IOError, e:
110 sys.stderr.write(str(e) + '\n')
111
112 config.update(new_config)
113 self.make_config(config)
114
115 def load_config(self):
116 """
117 Loads config from file and returns loaded JSON object
118 """
119 try:
120 with open(self._conf_name, 'rb') as conf:
121 return json.load(conf)
122 except IOError, e:
123 #sys.stderr.write(str(e) + '\n')
124 pass
125
126
127 def api_call(apikey, apihost, format, method=None, **kw):
128 """
129 Api_call wrapper for RhodeCode
130
131 :param apikey:
132 :param apihost:
133 :param format: formatting, pretty means prints and pprint of json
134 json returns unparsed json
135 :param method:
136 """
137 def _build_data(random_id):
138 """
139 Builds API data with given random ID
140
141 :param random_id:
142 :type random_id:
143 """
144 return {
145 "id": random_id,
146 "api_key": apikey,
147 "method": method,
148 "args": kw
149 }
150
151 if not method:
152 raise Exception('please specify method name !')
153 id_ = random.randrange(1, 9999)
154 req = urllib2.Request('%s/_admin/api' % apihost,
155 data=json.dumps(_build_data(id_)),
156 headers={'content-type': 'text/plain'})
157 if format == FORMAT_PRETTY:
158 sys.stdout.write('calling %s to %s \n' % (req.get_data(), apihost))
159 ret = urllib2.urlopen(req)
160 raw_json = ret.read()
161 json_data = json.loads(raw_json)
162 id_ret = json_data['id']
163 _formatted_json = pprint.pformat(json_data)
164 if id_ret == id_:
165 if format == FORMAT_JSON:
166 sys.stdout.write(str(raw_json))
167 else:
168 sys.stdout.write('rhodecode returned:\n%s\n' % (_formatted_json))
169
170 else:
171 raise Exception('something went wrong. '
172 'ID mismatch got %s, expected %s | %s' % (
173 id_ret, id_, _formatted_json))
30 from rhodecode.bin.base import json, api_call, RcConf, FORMAT_JSON, FORMAT_PRETTY
174 31
175 32
176 33 def argparser(argv):
177 34 usage = (
178 "rhodecode_api [-h] [--format=FORMAT] [--apikey=APIKEY] [--apihost=APIHOST] "
179 " [--config=CONFIG] "
180 "_create_config or METHOD <key:val> <key2:val> ..."
35 "rhodecode-api [-h] [--format=FORMAT] [--apikey=APIKEY] [--apihost=APIHOST] "
36 "[--config=CONFIG] [--save-config] "
37 "METHOD <key:val> <key2:val> ...\n"
38 "Create config file: rhodecode-gist --apikey=<key> --apihost=http://rhodecode.server --save-config"
181 39 )
182 40
183 41 parser = argparse.ArgumentParser(description='RhodeCode API cli',
@@ -188,14 +46,15 b' def argparser(argv):'
188 46 group.add_argument('--apikey', help='api access key')
189 47 group.add_argument('--apihost', help='api host')
190 48 group.add_argument('--config', help='config file')
49 group.add_argument('--save-config', action='store_true', help='save the given config into a file')
191 50
192 51 group = parser.add_argument_group('API')
193 group.add_argument('method', metavar='METHOD', type=str,
52 group.add_argument('method', metavar='METHOD', nargs='?', type=str, default=None,
194 53 help='API method name to call followed by key:value attributes',
195 54 )
196 55 group.add_argument('--format', dest='format', type=str,
197 help='output format default: `pretty` can '
198 'be also `%s`' % FORMAT_JSON,
56 help='output format default: `%s` can '
57 'be also `%s`' % (FORMAT_PRETTY, FORMAT_JSON),
199 58 default=FORMAT_PRETTY
200 59 )
201 60 args, other = parser.parse_known_args()
@@ -207,7 +66,6 b' def main(argv=None):'
207 66 Main execution function for cli
208 67
209 68 :param argv:
210 :type argv:
211 69 """
212 70 if argv is None:
213 71 argv = sys.argv
@@ -216,12 +74,13 b' def main(argv=None):'
216 74 parser, args, other = argparser(argv)
217 75
218 76 api_credentials_given = (args.apikey and args.apihost)
219 if args.method == '_create_config':
77 if args.save_config:
220 78 if not api_credentials_given:
221 raise parser.error('_create_config requires --apikey and --apihost')
79 raise parser.error('--save-config requires --apikey and --apihost')
222 80 conf = RcConf(config_location=args.config,
223 81 autocreate=True, config={'apikey': args.apikey,
224 82 'apihost': args.apihost})
83 sys.exit()
225 84
226 85 if not conf:
227 86 conf = RcConf(config_location=args.config, autoload=True)
@@ -231,18 +90,31 b' def main(argv=None):'
231 90 '--apikey or --apihost in params')
232 91
233 92 apikey = args.apikey or conf['apikey']
234 host = args.apihost or conf['apihost']
93 apihost = args.apihost or conf['apihost']
235 94 method = args.method
236 if method == '_create_config':
237 sys.exit()
95
96 # if we don't have method here it's an error
97 if not method:
98 parser.error('Please specify method name')
238 99
239 100 try:
240 101 margs = dict(map(lambda s: s.split(':', 1), other))
241 102 except Exception:
242 103 sys.stderr.write('Error parsing arguments \n')
243 104 sys.exit()
105 if args.format == FORMAT_PRETTY:
106 print 'Calling method %s => %s' % (method, apihost)
244 107
245 api_call(apikey, host, args.format, method, **margs)
108 json_resp = api_call(apikey, apihost, method, **margs)
109 if json_resp['error']:
110 json_data = json_resp['error']
111 else:
112 json_data = json_resp['result']
113 if args.format == FORMAT_JSON:
114 print json.dumps(json_data)
115 elif args.format == FORMAT_PRETTY:
116 print 'Server response \n%s' % (
117 json.dumps(json_data, indent=4, sort_keys=True))
246 118 return 0
247 119
248 120 if __name__ == '__main__':
@@ -29,24 +29,38 b' pdebug = false'
29 29 #smtp_auth =
30 30
31 31 [server:main]
32 ## PASTE
33 ## nr of threads to spawn
32 ## PASTE ##
33 #use = egg:Paste#http
34 ## nr of worker threads to spawn
34 35 #threadpool_workers = 5
35
36 36 ## max request before thread respawn
37 37 #threadpool_max_requests = 10
38
39 38 ## option to use threads of process
40 39 #use_threadpool = true
41 40
42 #use = egg:Paste#http
43
44 ## WAITRESS
41 ## WAITRESS ##
42 use = egg:waitress#main
43 ## number of worker threads
45 44 threads = 5
46 ## 100GB
45 ## MAX BODY SIZE 100GB
47 46 max_request_body_size = 107374182400
48 use = egg:waitress#main
47 ## use poll instead of select, fixes fd limits, may not work on old
48 ## windows systems.
49 #asyncore_use_poll = True
49 50
51 ## GUNICORN ##
52 #use = egg:gunicorn#main
53 ## number of process workers. You must set `instance_id = *` when this option
54 ## is set to more than one worker
55 #workers = 1
56 ## process name
57 #proc_name = rhodecode
58 ## type of worker class, one of sync, eventlet, gevent, tornado
59 ## recommended for bigger setup is using of of other than sync one
60 #worker_class = sync
61 #max_requests = 5
62
63 ## COMMON ##
50 64 host = 127.0.0.1
51 65 port = 5000
52 66
@@ -68,6 +82,10 b' lang = en'
68 82 cache_dir = %(here)s/data
69 83 index_dir = %(here)s/data/index
70 84
85 ## perform a full repository scan on each server start, this should be
86 ## set to false after first startup, to allow faster server restarts.
87 initial_repo_scan = true
88
71 89 ## uncomment and set this path to use archive download cache
72 90 #archive_cache_dir = /tmp/tarballcache
73 91
@@ -89,9 +107,6 b' use_htsts = false'
89 107 ## number of commits stats will parse on each iteration
90 108 commit_parse_limit = 25
91 109
92 ## number of items displayed in lightweight dashboard before paginating is shown
93 dashboard_items = 100
94
95 110 ## use gravatar service to display avatars
96 111 use_gravatar = true
97 112
@@ -111,6 +126,18 b' rss_include_diff = false'
111 126 show_sha_length = 12
112 127 show_revision_number = true
113 128
129 ## gist URL alias, used to create nicer urls for gist. This should be an
130 ## url that does rewrites to _admin/gists/<gistid>.
131 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
132 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/<gistid>
133 gist_alias_url =
134
135 ## white list of API enabled controllers. This allows to add list of
136 ## controllers to which access will be enabled by api_key. eg: to enable
137 ## api access to raw_files put `FilesController:raw`, to enable access to patches
138 ## add `ChangesetController:changeset_patch`. This list should be "," separated
139 ## Syntax is <ControllerClass>:<function>. Check debug logs for generated names
140 api_access_controllers_whitelist =
114 141
115 142 ## alternative_gravatar_url allows you to use your own avatar server application
116 143 ## the following parts of the URL will be replaced
@@ -186,6 +213,7 b' auth_ret_code ='
186 213 ## codes don't break the transactions while 4XX codes do
187 214 lock_ret_code = 423
188 215
216 allow_repo_location_change = True
189 217
190 218 ####################################
191 219 ### CELERY CONFIG ####
@@ -18,7 +18,7 b' from rhodecode.config.routing import mak'
18 18 from rhodecode.lib import helpers
19 19 from rhodecode.lib.auth import set_available_permissions
20 20 from rhodecode.lib.utils import repo2db_mapper, make_ui, set_rhodecode_config,\
21 load_rcextensions, check_git_version
21 load_rcextensions, check_git_version, set_vcs_config
22 22 from rhodecode.lib.utils2 import engine_from_config, str2bool
23 23 from rhodecode.lib.db_manage import DbManage
24 24 from rhodecode.model import init_model
@@ -87,18 +87,14 b' def load_environment(global_conf, app_co'
87 87 if not int(os.environ.get('RC_WHOOSH_TEST_DISABLE', 0)):
88 88 create_test_index(TESTS_TMP_PATH, config, True)
89 89
90 #check git version
91 check_git_version()
92 90 DbManage.check_waitress()
93 91 # MULTIPLE DB configs
94 92 # Setup the SQLAlchemy database engine
95 93 sa_engine_db1 = engine_from_config(config, 'sqlalchemy.db1.')
96 94 init_model(sa_engine_db1)
97 95
96 set_available_permissions(config)
98 97 repos_path = make_ui('db').configitems('paths')[0][1]
99 repo2db_mapper(ScmModel().repo_scan(repos_path),
100 remove_obsolete=False, install_git_hook=False)
101 set_available_permissions(config)
102 98 config['base_path'] = repos_path
103 99 set_rhodecode_config(config)
104 100
@@ -113,4 +109,12 b' def load_environment(global_conf, app_co'
113 109 # store config reference into our module to skip import magic of
114 110 # pylons
115 111 rhodecode.CONFIG.update(config)
112 set_vcs_config(rhodecode.CONFIG)
113
114 #check git version
115 check_git_version()
116
117 if str2bool(config.get('initial_repo_scan', True)):
118 repo2db_mapper(ScmModel().repo_scan(repos_path),
119 remove_obsolete=False, install_git_hook=False)
116 120 return config
@@ -68,6 +68,15 b' def make_map(config):'
68 68 return is_valid_repos_group(repos_group_name, config['base_path'],
69 69 skip_path_check=True)
70 70
71 def check_user_group(environ, match_dict):
72 """
73 check for valid user group for proper 404 handling
74
75 :param environ:
76 :param match_dict:
77 """
78 return True
79
71 80 def check_int(environ, match_dict):
72 81 return match_dict.get('id').isdigit()
73 82
@@ -122,19 +131,15 b' def make_map(config):'
122 131 action="show", conditions=dict(method=["GET"],
123 132 function=check_repo))
124 133 #add repo perm member
125 m.connect('set_repo_perm_member', "/set_repo_perm_member/{repo_name:.*?}",
126 action="set_repo_perm_member",
127 conditions=dict(method=["POST"], function=check_repo))
134 m.connect('set_repo_perm_member',
135 "/repos/{repo_name:.*?}/grant_perm",
136 action="set_repo_perm_member",
137 conditions=dict(method=["POST"], function=check_repo))
128 138
129 139 #ajax delete repo perm user
130 m.connect('delete_repo_user', "/repos_delete_user/{repo_name:.*?}",
131 action="delete_perm_user",
132 conditions=dict(method=["DELETE"], function=check_repo))
133
134 #ajax delete repo perm users_group
135 m.connect('delete_repo_users_group',
136 "/repos_delete_users_group/{repo_name:.*?}",
137 action="delete_perm_users_group",
140 m.connect('delete_repo_perm_member',
141 "/repos/{repo_name:.*?}/revoke_perm",
142 action="delete_repo_perm_member",
138 143 conditions=dict(method=["DELETE"], function=check_repo))
139 144
140 145 #settings actions
@@ -184,6 +189,18 b' def make_map(config):'
184 189 m.connect("update_repos_group", "/repos_groups/{group_name:.*?}",
185 190 action="update", conditions=dict(method=["PUT"],
186 191 function=check_group))
192 #add repo group perm member
193 m.connect('set_repo_group_perm_member',
194 "/repos_groups/{group_name:.*?}/grant_perm",
195 action="set_repo_group_perm_member",
196 conditions=dict(method=["POST"], function=check_group))
197
198 #ajax delete repo group perm
199 m.connect('delete_repo_group_perm_member',
200 "/repos_groups/{group_name:.*?}/revoke_perm",
201 action="delete_repo_group_perm_member",
202 conditions=dict(method=["DELETE"], function=check_group))
203
187 204 m.connect("delete_repos_group", "/repos_groups/{group_name:.*?}",
188 205 action="delete", conditions=dict(method=["DELETE"],
189 206 function=check_group_skip_path))
@@ -200,17 +217,6 b' def make_map(config):'
200 217 m.connect("formatted_repos_group", "/repos_groups/{group_name:.*?}.{format}",
201 218 action="show", conditions=dict(method=["GET"],
202 219 function=check_group))
203 # ajax delete repository group perm user
204 m.connect('delete_repos_group_user_perm',
205 "/delete_repos_group_user_perm/{group_name:.*?}",
206 action="delete_repos_group_user_perm",
207 conditions=dict(method=["DELETE"], function=check_group))
208
209 # ajax delete repository group perm users_group
210 m.connect('delete_repos_group_users_group_perm',
211 "/delete_repos_group_users_group_perm/{group_name:.*?}",
212 action="delete_repos_group_users_group_perm",
213 conditions=dict(method=["DELETE"], function=check_group))
214 220
215 221 #ADMIN USER REST ROUTES
216 222 with rmap.submapper(path_prefix=ADMIN_PREFIX,
@@ -269,7 +275,8 b' def make_map(config):'
269 275 m.connect("delete_users_group", "/users_groups/{id}",
270 276 action="delete", conditions=dict(method=["DELETE"]))
271 277 m.connect("edit_users_group", "/users_groups/{id}/edit",
272 action="edit", conditions=dict(method=["GET"]))
278 action="edit", conditions=dict(method=["GET"]),
279 function=check_user_group)
273 280 m.connect("formatted_edit_users_group",
274 281 "/users_groups/{id}.{format}/edit",
275 282 action="edit", conditions=dict(method=["GET"]))
@@ -279,9 +286,20 b' def make_map(config):'
279 286 action="show", conditions=dict(method=["GET"]))
280 287
281 288 #EXTRAS USER ROUTES
282 m.connect("users_group_perm", "/users_groups_perm/{id}",
289 # update
290 m.connect("users_group_perm", "/users_groups/{id}/update_global_perm",
283 291 action="update_perm", conditions=dict(method=["PUT"]))
284 292
293 #add user group perm member
294 m.connect('set_user_group_perm_member', "/users_groups/{id}/grant_perm",
295 action="set_user_group_perm_member",
296 conditions=dict(method=["POST"]))
297
298 #ajax delete user group perm
299 m.connect('delete_user_group_perm_member', "/users_groups/{id}/revoke_perm",
300 action="delete_user_group_perm_member",
301 conditions=dict(method=["DELETE"]))
302
285 303 #ADMIN GROUP REST ROUTES
286 304 rmap.resource('group', 'groups',
287 305 controller='admin/groups', path_prefix=ADMIN_PREFIX)
@@ -352,27 +370,55 b' def make_map(config):'
352 370 action="new", conditions=dict(method=["GET"]))
353 371 m.connect("formatted_new_notification", "/notifications/new.{format}",
354 372 action="new", conditions=dict(method=["GET"]))
355 m.connect("/notification/{notification_id}",
373 m.connect("/notifications/{notification_id}",
356 374 action="update", conditions=dict(method=["PUT"]))
357 m.connect("/notification/{notification_id}",
375 m.connect("/notifications/{notification_id}",
358 376 action="delete", conditions=dict(method=["DELETE"]))
359 m.connect("edit_notification", "/notification/{notification_id}/edit",
377 m.connect("edit_notification", "/notifications/{notification_id}/edit",
360 378 action="edit", conditions=dict(method=["GET"]))
361 379 m.connect("formatted_edit_notification",
362 "/notification/{notification_id}.{format}/edit",
380 "/notifications/{notification_id}.{format}/edit",
363 381 action="edit", conditions=dict(method=["GET"]))
364 m.connect("notification", "/notification/{notification_id}",
382 m.connect("notification", "/notifications/{notification_id}",
365 383 action="show", conditions=dict(method=["GET"]))
366 384 m.connect("formatted_notification", "/notifications/{notification_id}.{format}",
367 385 action="show", conditions=dict(method=["GET"]))
368 386
387 #ADMIN GIST
388 with rmap.submapper(path_prefix=ADMIN_PREFIX,
389 controller='admin/gists') as m:
390 m.connect("gists", "/gists",
391 action="create", conditions=dict(method=["POST"]))
392 m.connect("gists", "/gists",
393 action="index", conditions=dict(method=["GET"]))
394 m.connect("new_gist", "/gists/new",
395 action="new", conditions=dict(method=["GET"]))
396 m.connect("formatted_new_gist", "/gists/new.{format}",
397 action="new", conditions=dict(method=["GET"]))
398 m.connect("formatted_gists", "/gists.{format}",
399 action="index", conditions=dict(method=["GET"]))
400 m.connect("/gists/{gist_id}",
401 action="update", conditions=dict(method=["PUT"]))
402 m.connect("/gists/{gist_id}",
403 action="delete", conditions=dict(method=["DELETE"]))
404 m.connect("edit_gist", "/gists/{gist_id}/edit",
405 action="edit", conditions=dict(method=["GET"]))
406 m.connect("formatted_edit_gist",
407 "/gists/{gist_id}/{format}/edit",
408 action="edit", conditions=dict(method=["GET"]))
409 m.connect("gist", "/gists/{gist_id}",
410 action="show", conditions=dict(method=["GET"]))
411 m.connect("formatted_gist", "/gists/{gist_id}/{format}",
412 action="show", conditions=dict(method=["GET"]))
413 m.connect("formatted_gist_file", "/gists/{gist_id}/{format}/{revision}/{f_path:.*}",
414 action="show", conditions=dict(method=["GET"]))
415
369 416 #ADMIN MAIN PAGES
370 417 with rmap.submapper(path_prefix=ADMIN_PREFIX,
371 418 controller='admin/admin') as m:
372 419 m.connect('admin_home', '', action='index')
373 420 m.connect('admin_add_repo', '/add_repo/{new_repo:[a-z0-9\. _-]*}',
374 421 action='add_repo')
375
376 422 #==========================================================================
377 423 # API V2
378 424 #==========================================================================
@@ -500,6 +546,11 b' def make_map(config):'
500 546 controller='changeset', revision='tip', action='comment',
501 547 conditions=dict(function=check_repo))
502 548
549 rmap.connect('changeset_comment_preview',
550 '/{repo_name:.*?}/changeset/comment/preview',
551 controller='changeset', action='preview_comment',
552 conditions=dict(function=check_repo, method=["POST"]))
553
503 554 rmap.connect('changeset_comment_delete',
504 555 '/{repo_name:.*?}/changeset/comment/{comment_id}/delete',
505 556 controller='changeset', action='delete_comment',
@@ -563,13 +614,6 b' def make_map(config):'
563 614 rmap.connect('summary_home_summary', '/{repo_name:.*?}/summary',
564 615 controller='summary', conditions=dict(function=check_repo))
565 616
566 rmap.connect('shortlog_home', '/{repo_name:.*?}/shortlog',
567 controller='shortlog', conditions=dict(function=check_repo))
568
569 rmap.connect('shortlog_file_home', '/{repo_name:.*?}/shortlog/{revision}/{f_path:.*}',
570 controller='shortlog', f_path=None,
571 conditions=dict(function=check_repo))
572
573 617 rmap.connect('branches_home', '/{repo_name:.*?}/branches',
574 618 controller='branches', conditions=dict(function=check_repo))
575 619
@@ -582,6 +626,14 b' def make_map(config):'
582 626 rmap.connect('changelog_home', '/{repo_name:.*?}/changelog',
583 627 controller='changelog', conditions=dict(function=check_repo))
584 628
629 rmap.connect('changelog_summary_home', '/{repo_name:.*?}/changelog_summary',
630 controller='changelog', action='changelog_summary',
631 conditions=dict(function=check_repo))
632
633 rmap.connect('changelog_file_home', '/{repo_name:.*?}/changelog/{revision}/{f_path:.*}',
634 controller='changelog', f_path=None,
635 conditions=dict(function=check_repo))
636
585 637 rmap.connect('changelog_details', '/{repo_name:.*?}/changelog_details/{cs}',
586 638 controller='changelog', action='changelog_details',
587 639 conditions=dict(function=check_repo))
@@ -27,17 +27,17 b' import logging'
27 27
28 28 from pylons import request, tmpl_context as c, url
29 29 from sqlalchemy.orm import joinedload
30 from webhelpers.paginate import Page
31 30 from whoosh.qparser.default import QueryParser
31 from whoosh.qparser.dateparse import DateParserPlugin
32 32 from whoosh import query
33 33 from sqlalchemy.sql.expression import or_, and_, func
34 34
35 from rhodecode.model.db import UserLog, User
35 36 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
36 37 from rhodecode.lib.base import BaseController, render
37 from rhodecode.model.db import UserLog, User
38 38 from rhodecode.lib.utils2 import safe_int, remove_prefix, remove_suffix
39 39 from rhodecode.lib.indexers import JOURNAL_SCHEMA
40 from whoosh.qparser.dateparse import DateParserPlugin
40 from rhodecode.lib.helpers import Page
41 41
42 42
43 43 log = logging.getLogger(__name__)
@@ -71,8 +71,6 b' class LdapSettingsController(BaseControl'
71 71 @LoginRequired()
72 72 @HasPermissionAllDecorator('hg.admin')
73 73 def __before__(self):
74 c.admin_user = session.get('admin_user')
75 c.admin_username = session.get('admin_username')
76 74 c.search_scope_choices = self.search_scope_choices
77 75 c.tls_reqcert_choices = self.tls_reqcert_choices
78 76 c.tls_kind_choices = self.tls_kind_choices
@@ -30,15 +30,13 b' from pylons import request'
30 30 from pylons import tmpl_context as c, url
31 31 from pylons.controllers.util import redirect, abort
32 32
33 from webhelpers.paginate import Page
34
33 from rhodecode.model.db import Notification
34 from rhodecode.model.notification import NotificationModel
35 from rhodecode.model.meta import Session
36 from rhodecode.lib.auth import LoginRequired, NotAnonymous
35 37 from rhodecode.lib.base import BaseController, render
36 from rhodecode.model.db import Notification
37
38 from rhodecode.model.notification import NotificationModel
39 from rhodecode.lib.auth import LoginRequired, NotAnonymous
40 38 from rhodecode.lib import helpers as h
41 from rhodecode.model.meta import Session
39 from rhodecode.lib.helpers import Page
42 40 from rhodecode.lib.utils2 import safe_int
43 41
44 42
@@ -38,7 +38,7 b' from rhodecode.lib.auth import LoginRequ'
38 38 from rhodecode.lib.base import BaseController, render
39 39 from rhodecode.model.forms import DefaultPermissionsForm
40 40 from rhodecode.model.permission import PermissionModel
41 from rhodecode.model.db import User, UserIpMap
41 from rhodecode.model.db import User, UserIpMap, Permission
42 42 from rhodecode.model.meta import Session
43 43
44 44 log = logging.getLogger(__name__)
@@ -53,19 +53,21 b' class PermissionsController(BaseControll'
53 53 @LoginRequired()
54 54 @HasPermissionAllDecorator('hg.admin')
55 55 def __before__(self):
56 c.admin_user = session.get('admin_user')
57 c.admin_username = session.get('admin_username')
58 56 super(PermissionsController, self).__before__()
59 57
60 self.repo_perms_choices = [('repository.none', _('None'),),
58 c.repo_perms_choices = [('repository.none', _('None'),),
61 59 ('repository.read', _('Read'),),
62 60 ('repository.write', _('Write'),),
63 61 ('repository.admin', _('Admin'),)]
64 self.group_perms_choices = [('group.none', _('None'),),
65 ('group.read', _('Read'),),
66 ('group.write', _('Write'),),
67 ('group.admin', _('Admin'),)]
68 self.register_choices = [
62 c.group_perms_choices = [('group.none', _('None'),),
63 ('group.read', _('Read'),),
64 ('group.write', _('Write'),),
65 ('group.admin', _('Admin'),)]
66 c.user_group_perms_choices = [('usergroup.none', _('None'),),
67 ('usergroup.read', _('Read'),),
68 ('usergroup.write', _('Write'),),
69 ('usergroup.admin', _('Admin'),)]
70 c.register_choices = [
69 71 ('hg.register.none',
70 72 _('Disabled')),
71 73 ('hg.register.manual_activate',
@@ -73,18 +75,22 b' class PermissionsController(BaseControll'
73 75 ('hg.register.auto_activate',
74 76 _('Allowed with automatic account activation')), ]
75 77
76 self.create_choices = [('hg.create.none', _('Disabled')),
77 ('hg.create.repository', _('Enabled'))]
78 c.extern_activate_choices = [
79 ('hg.extern_activate.manual', _('Manual activation of external account')),
80 ('hg.extern_activate.auto', _('Automatic activation of external account')),
81 ]
78 82
79 self.fork_choices = [('hg.fork.none', _('Disabled')),
80 ('hg.fork.repository', _('Enabled'))]
83 c.repo_create_choices = [('hg.create.none', _('Disabled')),
84 ('hg.create.repository', _('Enabled'))]
81 85
82 # set the global template variables
83 c.repo_perms_choices = self.repo_perms_choices
84 c.group_perms_choices = self.group_perms_choices
85 c.register_choices = self.register_choices
86 c.create_choices = self.create_choices
87 c.fork_choices = self.fork_choices
86 c.user_group_create_choices = [('hg.usergroup.create.false', _('Disabled')),
87 ('hg.usergroup.create.true', _('Enabled'))]
88
89 c.repo_group_create_choices = [('hg.repogroup.create.false', _('Disabled')),
90 ('hg.repogroup.create.true', _('Enabled'))]
91
92 c.fork_choices = [('hg.fork.none', _('Disabled')),
93 ('hg.fork.repository', _('Enabled'))]
88 94
89 95 def index(self, format='html'):
90 96 """GET /permissions: All items in the collection"""
@@ -107,23 +113,27 b' class PermissionsController(BaseControll'
107 113 # method='put')
108 114 # url('permission', id=ID)
109 115 if id == 'default':
110 c.user = default_user = User.get_by_username('default')
116 c.user = default_user = User.get_default_user()
111 117 c.perm_user = AuthUser(user_id=default_user.user_id)
112 118 c.user_ip_map = UserIpMap.query()\
113 119 .filter(UserIpMap.user == default_user).all()
114 permission_model = PermissionModel()
115 120
116 121 _form = DefaultPermissionsForm(
117 [x[0] for x in self.repo_perms_choices],
118 [x[0] for x in self.group_perms_choices],
119 [x[0] for x in self.register_choices],
120 [x[0] for x in self.create_choices],
121 [x[0] for x in self.fork_choices])()
122 [x[0] for x in c.repo_perms_choices],
123 [x[0] for x in c.group_perms_choices],
124 [x[0] for x in c.user_group_perms_choices],
125 [x[0] for x in c.repo_create_choices],
126 [x[0] for x in c.repo_group_create_choices],
127 [x[0] for x in c.user_group_create_choices],
128 [x[0] for x in c.fork_choices],
129 [x[0] for x in c.register_choices],
130 [x[0] for x in c.extern_activate_choices],
131 )()
122 132
123 133 try:
124 134 form_result = _form.to_python(dict(request.POST))
125 135 form_result.update({'perm_user_name': id})
126 permission_model.update(form_result)
136 PermissionModel().update(form_result)
127 137 Session().commit()
128 138 h.flash(_('Default permissions updated successfully'),
129 139 category='success')
@@ -156,6 +166,7 b' class PermissionsController(BaseControll'
156 166 def show(self, id, format='html'):
157 167 """GET /permissions/id: Show a specific item"""
158 168 # url('permission', id=ID)
169 Permission.get_or_404(-1)
159 170
160 171 def edit(self, id, format='html'):
161 172 """GET /permissions/id/edit: Form to edit an existing item"""
@@ -163,23 +174,35 b' class PermissionsController(BaseControll'
163 174
164 175 #this form can only edit default user permissions
165 176 if id == 'default':
166 c.user = default_user = User.get_by_username('default')
167 defaults = {'anonymous': default_user.active}
168 c.perm_user = AuthUser(user_id=default_user.user_id)
177 c.user = User.get_default_user()
178 defaults = {'anonymous': c.user.active}
179 c.perm_user = c.user.AuthUser
169 180 c.user_ip_map = UserIpMap.query()\
170 .filter(UserIpMap.user == default_user).all()
171 for p in default_user.user_perms:
181 .filter(UserIpMap.user == c.user).all()
182 for p in c.user.user_perms:
172 183 if p.permission.permission_name.startswith('repository.'):
173 184 defaults['default_repo_perm'] = p.permission.permission_name
174 185
175 186 if p.permission.permission_name.startswith('group.'):
176 187 defaults['default_group_perm'] = p.permission.permission_name
177 188
189 if p.permission.permission_name.startswith('usergroup.'):
190 defaults['default_user_group_perm'] = p.permission.permission_name
191
192 if p.permission.permission_name.startswith('hg.create.'):
193 defaults['default_repo_create'] = p.permission.permission_name
194
195 if p.permission.permission_name.startswith('hg.repogroup.'):
196 defaults['default_repo_group_create'] = p.permission.permission_name
197
198 if p.permission.permission_name.startswith('hg.usergroup.'):
199 defaults['default_user_group_create'] = p.permission.permission_name
200
178 201 if p.permission.permission_name.startswith('hg.register.'):
179 202 defaults['default_register'] = p.permission.permission_name
180 203
181 if p.permission.permission_name.startswith('hg.create.'):
182 defaults['default_create'] = p.permission.permission_name
204 if p.permission.permission_name.startswith('hg.extern_activate.'):
205 defaults['default_extern_activate'] = p.permission.permission_name
183 206
184 207 if p.permission.permission_name.startswith('hg.fork.'):
185 208 defaults['default_fork'] = p.permission.permission_name
@@ -40,17 +40,18 b' from rhodecode.lib.auth import LoginRequ'
40 40 HasPermissionAnyDecorator, HasRepoPermissionAllDecorator, NotAnonymous,\
41 41 HasPermissionAny, HasReposGroupPermissionAny, HasRepoPermissionAnyDecorator
42 42 from rhodecode.lib.base import BaseRepoController, render
43 from rhodecode.lib.utils import invalidate_cache, action_logger, repo_name_slug
43 from rhodecode.lib.utils import action_logger, repo_name_slug
44 44 from rhodecode.lib.helpers import get_token
45 45 from rhodecode.model.meta import Session
46 46 from rhodecode.model.db import User, Repository, UserFollowing, RepoGroup,\
47 47 RhodeCodeSetting, RepositoryField
48 48 from rhodecode.model.forms import RepoForm, RepoFieldForm, RepoPermsForm
49 from rhodecode.model.scm import ScmModel, GroupList
49 from rhodecode.model.scm import ScmModel, RepoGroupList, RepoList
50 50 from rhodecode.model.repo import RepoModel
51 51 from rhodecode.lib.compat import json
52 52 from sqlalchemy.sql.expression import func
53 53 from rhodecode.lib.exceptions import AttachedForksError
54 from rhodecode.lib.utils2 import safe_int
54 55
55 56 log = logging.getLogger(__name__)
56 57
@@ -64,12 +65,10 b' class ReposController(BaseRepoController'
64 65
65 66 @LoginRequired()
66 67 def __before__(self):
67 c.admin_user = session.get('admin_user')
68 c.admin_username = session.get('admin_username')
69 68 super(ReposController, self).__before__()
70 69
71 70 def __load_defaults(self):
72 acl_groups = GroupList(RepoGroup.query().all(),
71 acl_groups = RepoGroupList(RepoGroup.query().all(),
73 72 perm_set=['group.write', 'group.admin'])
74 73 c.repo_groups = RepoGroup.groups_choices(groups=acl_groups)
75 74 c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
@@ -99,7 +98,7 b' class ReposController(BaseRepoController'
99 98 choices, c.landing_revs = ScmModel().get_repo_landing_revs(c.repo_info)
100 99 c.landing_revs_choices = choices
101 100
102 c.default_user_id = User.get_by_username('default').user_id
101 c.default_user_id = User.get_default_user().user_id
103 102 c.in_public_journal = UserFollowing.query()\
104 103 .filter(UserFollowing.user_id == c.default_user_id)\
105 104 .filter(UserFollowing.follows_repository == c.repo_info).scalar()
@@ -124,23 +123,24 b' class ReposController(BaseRepoController'
124 123
125 124 defaults = RepoModel()._get_defaults(repo_name)
126 125
126 _repos = Repository.query().order_by(Repository.repo_name).all()
127 read_access_repos = RepoList(_repos)
127 128 c.repos_list = [('', _('--REMOVE FORK--'))]
128 c.repos_list += [(x.repo_id, x.repo_name) for x in
129 Repository.query().order_by(Repository.repo_name).all()
130 if x.repo_id != c.repo_info.repo_id]
129 c.repos_list += [(x.repo_id, x.repo_name)
130 for x in read_access_repos
131 if x.repo_id != c.repo_info.repo_id]
131 132
132 133 defaults['id_fork_of'] = db_repo.fork.repo_id if db_repo.fork else ''
133 134 return defaults
134 135
135 @HasPermissionAllDecorator('hg.admin')
136 136 def index(self, format='html'):
137 137 """GET /repos: All items in the collection"""
138 138 # url('repos')
139 repo_list = Repository.query()\
140 .order_by(func.lower(Repository.repo_name))\
141 .all()
139 142
140 c.repos_list = Repository.query()\
141 .order_by(func.lower(Repository.repo_name))\
142 .all()
143
143 c.repos_list = RepoList(repo_list, perm_set=['repository.admin'])
144 144 repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list,
145 145 admin=True,
146 146 super_user_actions=True)
@@ -216,7 +216,7 b' class ReposController(BaseRepoController'
216 216 if not HasReposGroupPermissionAny('group.admin', 'group.write')(group_name=gr_name):
217 217 raise HTTPForbidden
218 218
219 acl_groups = GroupList(RepoGroup.query().all(),
219 acl_groups = RepoGroupList(RepoGroup.query().all(),
220 220 perm_set=['group.write', 'group.admin'])
221 221 c.repo_groups = RepoGroup.groups_choices(groups=acl_groups)
222 222 c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
@@ -266,7 +266,7 b' class ReposController(BaseRepoController'
266 266 try:
267 267 form_result = _form.to_python(dict(request.POST))
268 268 repo = repo_model.update(repo_name, **form_result)
269 invalidate_cache('get_repo_cached_%s' % repo_name)
269 ScmModel().mark_for_invalidation(repo_name)
270 270 h.flash(_('Repository %s updated successfully') % repo_name,
271 271 category='success')
272 272 changed_name = repo.repo_name
@@ -319,7 +319,7 b' class ReposController(BaseRepoController'
319 319 repo_model.delete(repo, forks=handle_forks)
320 320 action_logger(self.rhodecode_user, 'admin_deleted_repo',
321 321 repo_name, self.ip_addr, self.sa)
322 invalidate_cache('get_repo_cached_%s' % repo_name)
322 ScmModel().mark_for_invalidation(repo_name)
323 323 h.flash(_('Deleted repository %s') % repo_name, category='success')
324 324 Session().commit()
325 325 except AttachedForksError:
@@ -336,32 +336,8 b' class ReposController(BaseRepoController'
336 336 @HasRepoPermissionAllDecorator('repository.admin')
337 337 def set_repo_perm_member(self, repo_name):
338 338 form = RepoPermsForm()().to_python(request.POST)
339
340 perms_new = form['perms_new']
341 perms_updates = form['perms_updates']
342 cur_repo = repo_name
343
344 # update permissions
345 for member, perm, member_type in perms_updates:
346 if member_type == 'user':
347 # this updates existing one
348 RepoModel().grant_user_permission(
349 repo=cur_repo, user=member, perm=perm
350 )
351 else:
352 RepoModel().grant_users_group_permission(
353 repo=cur_repo, group_name=member, perm=perm
354 )
355 # set new permissions
356 for member, perm, member_type in perms_new:
357 if member_type == 'user':
358 RepoModel().grant_user_permission(
359 repo=cur_repo, user=member, perm=perm
360 )
361 else:
362 RepoModel().grant_users_group_permission(
363 repo=cur_repo, group_name=member, perm=perm
364 )
339 RepoModel()._update_permissions(repo_name, form['perms_new'],
340 form['perms_updates'])
365 341 #TODO: implement this
366 342 #action_logger(self.rhodecode_user, 'admin_changed_repo_permissions',
367 343 # repo_name, self.ip_addr, self.sa)
@@ -370,42 +346,33 b' class ReposController(BaseRepoController'
370 346 return redirect(url('edit_repo', repo_name=repo_name))
371 347
372 348 @HasRepoPermissionAllDecorator('repository.admin')
373 def delete_perm_user(self, repo_name):
349 def delete_repo_perm_member(self, repo_name):
374 350 """
375 351 DELETE an existing repository permission user
376 352
377 353 :param repo_name:
378 354 """
379 355 try:
380 RepoModel().revoke_user_permission(repo=repo_name,
381 user=request.POST['user_id'])
356 obj_type = request.POST.get('obj_type')
357 obj_id = None
358 if obj_type == 'user':
359 obj_id = safe_int(request.POST.get('user_id'))
360 elif obj_type == 'user_group':
361 obj_id = safe_int(request.POST.get('user_group_id'))
362
363 if obj_type == 'user':
364 RepoModel().revoke_user_permission(repo=repo_name, user=obj_id)
365 elif obj_type == 'user_group':
366 RepoModel().revoke_users_group_permission(
367 repo=repo_name, group_name=obj_id
368 )
382 369 #TODO: implement this
383 370 #action_logger(self.rhodecode_user, 'admin_revoked_repo_permissions',
384 371 # repo_name, self.ip_addr, self.sa)
385 372 Session().commit()
386 373 except Exception:
387 374 log.error(traceback.format_exc())
388 h.flash(_('An error occurred during deletion of repository user'),
389 category='error')
390 raise HTTPInternalServerError()
391
392 @HasRepoPermissionAllDecorator('repository.admin')
393 def delete_perm_users_group(self, repo_name):
394 """
395 DELETE an existing repository permission user group
396
397 :param repo_name:
398 """
399
400 try:
401 RepoModel().revoke_users_group_permission(
402 repo=repo_name, group_name=request.POST['users_group_id']
403 )
404 Session().commit()
405 except Exception:
406 log.error(traceback.format_exc())
407 h.flash(_('An error occurred during deletion of repository'
408 ' user groups'),
375 h.flash(_('An error occurred during revoking of permission'),
409 376 category='error')
410 377 raise HTTPInternalServerError()
411 378
@@ -504,7 +471,7 b' class ReposController(BaseRepoController'
504 471 if cur_token == token:
505 472 try:
506 473 repo_id = Repository.get_by_repo_name(repo_name).repo_id
507 user_id = User.get_by_username('default').user_id
474 user_id = User.get_default_user().user_id
508 475 self.scm_model.toggle_following_repo(repo_id, user_id)
509 476 h.flash(_('Updated repository visibility in public journal'),
510 477 category='success')
@@ -530,6 +497,7 b' class ReposController(BaseRepoController'
530 497 ScmModel().pull_changes(repo_name, self.rhodecode_user.username)
531 498 h.flash(_('Pulled from remote location'), category='success')
532 499 except Exception, e:
500 log.error(traceback.format_exc())
533 501 h.flash(_('An error occurred during pull from remote location'),
534 502 category='error')
535 503
@@ -37,20 +37,21 b' from sqlalchemy.exc import IntegrityErro'
37 37
38 38 import rhodecode
39 39 from rhodecode.lib import helpers as h
40 from rhodecode.lib.ext_json import json
40 from rhodecode.lib.compat import json
41 41 from rhodecode.lib.auth import LoginRequired, HasPermissionAnyDecorator,\
42 42 HasReposGroupPermissionAnyDecorator, HasReposGroupPermissionAll,\
43 43 HasPermissionAll
44 44 from rhodecode.lib.base import BaseController, render
45 45 from rhodecode.model.db import RepoGroup, Repository
46 from rhodecode.model.scm import RepoGroupList
46 47 from rhodecode.model.repos_group import ReposGroupModel
47 from rhodecode.model.forms import ReposGroupForm
48 from rhodecode.model.forms import ReposGroupForm, RepoGroupPermsForm
48 49 from rhodecode.model.meta import Session
49 50 from rhodecode.model.repo import RepoModel
50 51 from webob.exc import HTTPInternalServerError, HTTPNotFound
51 52 from rhodecode.lib.utils2 import str2bool, safe_int
52 53 from sqlalchemy.sql.expression import func
53 from rhodecode.model.scm import GroupList
54
54 55
55 56 log = logging.getLogger(__name__)
56 57
@@ -72,7 +73,7 b' class ReposGroupsController(BaseControll'
72 73
73 74 #override the choices for this form, we need to filter choices
74 75 #and display only those we have ADMIN right
75 groups_with_admin_rights = GroupList(RepoGroup.query().all(),
76 groups_with_admin_rights = RepoGroupList(RepoGroup.query().all(),
76 77 perm_set=['group.admin'])
77 78 c.repo_groups = RepoGroup.groups_choices(groups=groups_with_admin_rights,
78 79 show_empty_group=allow_empty_group)
@@ -94,12 +95,12 b' class ReposGroupsController(BaseControll'
94 95 data = repo_group.get_dict()
95 96 data['group_name'] = repo_group.name
96 97
97 # fill repository users
98 # fill repository group users
98 99 for p in repo_group.repo_group_to_perm:
99 100 data.update({'u_perm_%s' % p.user.username:
100 101 p.permission.permission_name})
101 102
102 # fill repository groups
103 # fill repository group groups
103 104 for p in repo_group.users_group_to_perm:
104 105 data.update({'g_perm_%s' % p.users_group.users_group_name:
105 106 p.permission.permission_name})
@@ -118,7 +119,8 b' class ReposGroupsController(BaseControll'
118 119 def index(self, format='html'):
119 120 """GET /repos_groups: All items in the collection"""
120 121 # url('repos_groups')
121 group_iter = GroupList(RepoGroup.query().all(), perm_set=['group.admin'])
122 group_iter = RepoGroupList(RepoGroup.query().all(),
123 perm_set=['group.admin'])
122 124 sk = lambda g: g.parents[0].group_name if g.parents else g.group_name
123 125 c.groups = sorted(group_iter, key=sk)
124 126 return render('admin/repos_groups/repos_groups_show.html')
@@ -190,7 +192,7 b' class ReposGroupsController(BaseControll'
190 192 # method='put')
191 193 # url('repos_group', group_name=GROUP_NAME)
192 194
193 c.repos_group = ReposGroupModel()._get_repos_group(group_name)
195 c.repos_group = ReposGroupModel()._get_repo_group(group_name)
194 196 if HasPermissionAll('hg.admin')('group edit'):
195 197 #we're global admin, we're ok and we can create TOP level groups
196 198 allow_empty_group = True
@@ -209,11 +211,6 b' class ReposGroupsController(BaseControll'
209 211 )()
210 212 try:
211 213 form_result = repos_group_form.to_python(dict(request.POST))
212 if not c.rhodecode_user.is_admin:
213 if self._revoke_perms_on_yourself(form_result):
214 msg = _('Cannot revoke permission for yourself as admin')
215 h.flash(msg, category='warning')
216 raise Exception('revoke admin permission on self')
217 214
218 215 new_gr = ReposGroupModel().update(group_name, form_result)
219 216 Session().commit()
@@ -247,7 +244,7 b' class ReposGroupsController(BaseControll'
247 244 # method='delete')
248 245 # url('repos_group', group_name=GROUP_NAME)
249 246
250 gr = c.repos_group = ReposGroupModel()._get_repos_group(group_name)
247 gr = c.repos_group = ReposGroupModel()._get_repo_group(group_name)
251 248 repos = gr.repositories.all()
252 249 if repos:
253 250 h.flash(_('This group contains %s repositores and cannot be '
@@ -268,55 +265,71 b' class ReposGroupsController(BaseControll'
268 265 #TODO: in future action_logger(, '', '', '', self.sa)
269 266 except Exception:
270 267 log.error(traceback.format_exc())
271 h.flash(_('Error occurred during deletion of repos '
272 'group %s') % group_name, category='error')
268 h.flash(_('Error occurred during deletion of repository group %s')
269 % group_name, category='error')
273 270
274 271 return redirect(url('repos_groups'))
275 272
276 273 @HasReposGroupPermissionAnyDecorator('group.admin')
277 def delete_repos_group_user_perm(self, group_name):
274 def set_repo_group_perm_member(self, group_name):
275 c.repos_group = ReposGroupModel()._get_repo_group(group_name)
276 form_result = RepoGroupPermsForm()().to_python(request.POST)
277 if not c.rhodecode_user.is_admin:
278 if self._revoke_perms_on_yourself(form_result):
279 msg = _('Cannot revoke permission for yourself as admin')
280 h.flash(msg, category='warning')
281 return redirect(url('edit_repos_group', group_name=group_name))
282 recursive = form_result['recursive']
283 # iterate over all members(if in recursive mode) of this groups and
284 # set the permissions !
285 # this can be potentially heavy operation
286 ReposGroupModel()._update_permissions(c.repos_group,
287 form_result['perms_new'],
288 form_result['perms_updates'],
289 recursive)
290 #TODO: implement this
291 #action_logger(self.rhodecode_user, 'admin_changed_repo_permissions',
292 # repo_name, self.ip_addr, self.sa)
293 Session().commit()
294 h.flash(_('Repository Group permissions updated'), category='success')
295 return redirect(url('edit_repos_group', group_name=group_name))
296
297 @HasReposGroupPermissionAnyDecorator('group.admin')
298 def delete_repo_group_perm_member(self, group_name):
278 299 """
279 300 DELETE an existing repository group permission user
280 301
281 302 :param group_name:
282 303 """
283 304 try:
305 obj_type = request.POST.get('obj_type')
306 obj_id = None
307 if obj_type == 'user':
308 obj_id = safe_int(request.POST.get('user_id'))
309 elif obj_type == 'user_group':
310 obj_id = safe_int(request.POST.get('user_group_id'))
311
284 312 if not c.rhodecode_user.is_admin:
285 if c.rhodecode_user.user_id == safe_int(request.POST['user_id']):
313 if obj_type == 'user' and c.rhodecode_user.user_id == obj_id:
286 314 msg = _('Cannot revoke permission for yourself as admin')
287 315 h.flash(msg, category='warning')
288 316 raise Exception('revoke admin permission on self')
289 317 recursive = str2bool(request.POST.get('recursive', False))
290 ReposGroupModel().delete_permission(
291 repos_group=group_name, obj=request.POST['user_id'],
292 obj_type='user', recursive=recursive
293 )
318 if obj_type == 'user':
319 ReposGroupModel().delete_permission(
320 repos_group=group_name, obj=obj_id,
321 obj_type='user', recursive=recursive
322 )
323 elif obj_type == 'user_group':
324 ReposGroupModel().delete_permission(
325 repos_group=group_name, obj=obj_id,
326 obj_type='users_group', recursive=recursive
327 )
328
294 329 Session().commit()
295 330 except Exception:
296 331 log.error(traceback.format_exc())
297 h.flash(_('An error occurred during deletion of group user'),
298 category='error')
299 raise HTTPInternalServerError()
300
301 @HasReposGroupPermissionAnyDecorator('group.admin')
302 def delete_repos_group_users_group_perm(self, group_name):
303 """
304 DELETE an existing repository group permission user group
305
306 :param group_name:
307 """
308
309 try:
310 recursive = str2bool(request.POST.get('recursive', False))
311 ReposGroupModel().delete_permission(
312 repos_group=group_name, obj=request.POST['users_group_id'],
313 obj_type='users_group', recursive=recursive
314 )
315 Session().commit()
316 except Exception:
317 log.error(traceback.format_exc())
318 h.flash(_('An error occurred during deletion of group'
319 ' user groups'),
332 h.flash(_('An error occurred during revoking of permission'),
320 333 category='error')
321 334 raise HTTPInternalServerError()
322 335
@@ -337,7 +350,7 b' class ReposGroupsController(BaseControll'
337 350 """GET /repos_groups/group_name: Show a specific item"""
338 351 # url('repos_group', group_name=GROUP_NAME)
339 352
340 c.group = c.repos_group = ReposGroupModel()._get_repos_group(group_name)
353 c.group = c.repos_group = ReposGroupModel()._get_repo_group(group_name)
341 354 c.group_repos = c.group.repositories.all()
342 355
343 356 #overwrite our cached list with current filter
@@ -348,19 +361,15 b' class ReposGroupsController(BaseControll'
348 361 .filter(RepoGroup.group_parent_id == c.group.group_id).all()
349 362 c.groups = self.scm_model.get_repos_groups(groups)
350 363
351 if not c.visual.lightweight_dashboard:
352 c.repos_list = self.scm_model.get_repos(all_repos=gr_filter)
353 ## lightweight version of dashboard
354 else:
355 c.repos_list = Repository.query()\
356 .filter(Repository.group_id == c.group.group_id)\
357 .order_by(func.lower(Repository.repo_name))\
358 .all()
364 c.repos_list = Repository.query()\
365 .filter(Repository.group_id == c.group.group_id)\
366 .order_by(func.lower(Repository.repo_name))\
367 .all()
359 368
360 repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list,
361 admin=False)
362 #json used to render the grid
363 c.data = json.dumps(repos_data)
369 repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list,
370 admin=False)
371 #json used to render the grid
372 c.data = json.dumps(repos_data)
364 373
365 374 return render('admin/repos_groups/repos_groups.html')
366 375
@@ -369,7 +378,7 b' class ReposGroupsController(BaseControll'
369 378 """GET /repos_groups/group_name/edit: Form to edit an existing item"""
370 379 # url('edit_repos_group', group_name=GROUP_NAME)
371 380
372 c.repos_group = ReposGroupModel()._get_repos_group(group_name)
381 c.repos_group = ReposGroupModel()._get_repo_group(group_name)
373 382 #we can only allow moving empty group if it's already a top-level
374 383 #group, ie has no parents, or we're admin
375 384 if HasPermissionAll('hg.admin')('group edit'):
@@ -41,13 +41,13 b' from rhodecode.lib.auth import LoginRequ'
41 41 HasReposGroupPermissionAll, HasReposGroupPermissionAny, AuthUser
42 42 from rhodecode.lib.base import BaseController, render
43 43 from rhodecode.lib.celerylib import tasks, run_task
44 from rhodecode.lib.utils import repo2db_mapper, invalidate_cache, \
45 set_rhodecode_config, repo_name_slug, check_git_version
44 from rhodecode.lib.utils import repo2db_mapper, set_rhodecode_config, \
45 check_git_version
46 46 from rhodecode.model.db import RhodeCodeUi, Repository, RepoGroup, \
47 47 RhodeCodeSetting, PullRequest, PullRequestReviewers
48 48 from rhodecode.model.forms import UserForm, ApplicationSettingsForm, \
49 49 ApplicationUiSettingsForm, ApplicationVisualisationForm
50 from rhodecode.model.scm import ScmModel, GroupList
50 from rhodecode.model.scm import ScmModel, RepoGroupList
51 51 from rhodecode.model.user import UserModel
52 52 from rhodecode.model.repo import RepoModel
53 53 from rhodecode.model.db import User
@@ -55,7 +55,6 b' from rhodecode.model.notification import'
55 55 from rhodecode.model.meta import Session
56 56 from rhodecode.lib.utils2 import str2bool, safe_unicode
57 57 from rhodecode.lib.compat import json
58 from webob.exc import HTTPForbidden
59 58 log = logging.getLogger(__name__)
60 59
61 60
@@ -68,15 +67,13 b' class SettingsController(BaseController)'
68 67
69 68 @LoginRequired()
70 69 def __before__(self):
71 c.admin_user = session.get('admin_user')
72 c.admin_username = session.get('admin_username')
70 super(SettingsController, self).__before__()
73 71 c.modules = sorted([(p.project_name, p.version)
74 72 for p in pkg_resources.working_set]
75 73 + [('git', check_git_version())],
76 74 key=lambda k: k[0].lower())
77 75 c.py_version = platform.python_version()
78 76 c.platform = platform.platform()
79 super(SettingsController, self).__before__()
80 77
81 78 @HasPermissionAllDecorator('hg.admin')
82 79 def index(self, format='html'):
@@ -115,13 +112,17 b' class SettingsController(BaseController)'
115 112
116 113 if setting_id == 'mapping':
117 114 rm_obsolete = request.POST.get('destroy', False)
118 log.debug('Rescanning directories with destroy=%s' % rm_obsolete)
119 initial = ScmModel().repo_scan()
120 log.debug('invalidating all repositories')
121 for repo_name in initial.keys():
122 invalidate_cache('get_repo_cached_%s' % repo_name)
115 invalidate_cache = request.POST.get('invalidate', False)
116 log.debug('rescanning repo location with destroy obsolete=%s'
117 % (rm_obsolete,))
123 118
124 added, removed = repo2db_mapper(initial, rm_obsolete)
119 if invalidate_cache:
120 log.debug('invalidating all repositories cache')
121 for repo in Repository.get_all():
122 ScmModel().mark_for_invalidation(repo.repo_name)
123
124 filesystem_repos = ScmModel().repo_scan()
125 added, removed = repo2db_mapper(filesystem_repos, rm_obsolete)
125 126 _repr = lambda l: ', '.join(map(safe_unicode, l)) or '-'
126 127 h.flash(_('Repositories successfully '
127 128 'rescanned added: %s ; removed: %s') %
@@ -186,6 +187,7 b' class SettingsController(BaseController)'
186 187 )
187 188
188 189 try:
190 #TODO: rewrite this to something less ugly
189 191 sett1 = RhodeCodeSetting.get_by_name_or_create('show_public_icon')
190 192 sett1.app_settings_value = \
191 193 form_result['rhodecode_show_public_icon']
@@ -201,16 +203,21 b' class SettingsController(BaseController)'
201 203 form_result['rhodecode_stylify_metatags']
202 204 Session().add(sett3)
203 205
204 sett4 = RhodeCodeSetting.get_by_name_or_create('lightweight_dashboard')
205 sett4.app_settings_value = \
206 form_result['rhodecode_lightweight_dashboard']
207 Session().add(sett4)
208
209 206 sett4 = RhodeCodeSetting.get_by_name_or_create('repository_fields')
210 207 sett4.app_settings_value = \
211 208 form_result['rhodecode_repository_fields']
212 209 Session().add(sett4)
213 210
211 sett5 = RhodeCodeSetting.get_by_name_or_create('dashboard_items')
212 sett5.app_settings_value = \
213 form_result['rhodecode_dashboard_items']
214 Session().add(sett5)
215
216 sett6 = RhodeCodeSetting.get_by_name_or_create('show_version')
217 sett6.app_settings_value = \
218 form_result['rhodecode_show_version']
219 Session().add(sett6)
220
214 221 Session().commit()
215 222 set_rhodecode_config(config)
216 223 h.flash(_('Updated visualisation settings'),
@@ -239,10 +246,10 b' class SettingsController(BaseController)'
239 246 sett = RhodeCodeUi.get_by_key('push_ssl')
240 247 sett.ui_value = form_result['web_push_ssl']
241 248 Session().add(sett)
242
243 sett = RhodeCodeUi.get_by_key('/')
244 sett.ui_value = form_result['paths_root_path']
245 Session().add(sett)
249 if c.visual.allow_repo_location_change:
250 sett = RhodeCodeUi.get_by_key('/')
251 sett.ui_value = form_result['paths_root_path']
252 Session().add(sett)
246 253
247 254 #HOOKS
248 255 sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_UPDATE)
@@ -41,8 +41,8 b' from rhodecode.lib.auth import LoginRequ'
41 41 AuthUser
42 42 from rhodecode.lib.base import BaseController, render
43 43
44 from rhodecode.model.db import User, UserEmailMap, UserIpMap
45 from rhodecode.model.forms import UserForm
44 from rhodecode.model.db import User, UserEmailMap, UserIpMap, UserToPerm
45 from rhodecode.model.forms import UserForm, CustomDefaultPermissionsForm
46 46 from rhodecode.model.user import UserModel
47 47 from rhodecode.model.meta import Session
48 48 from rhodecode.lib.utils import action_logger
@@ -61,8 +61,6 b' class UsersController(BaseController):'
61 61 @LoginRequired()
62 62 @HasPermissionAllDecorator('hg.admin')
63 63 def __before__(self):
64 c.admin_user = session.get('admin_user')
65 c.admin_username = session.get('admin_username')
66 64 super(UsersController, self).__before__()
67 65 c.available_permissions = config['available_permissions']
68 66
@@ -70,7 +68,9 b' class UsersController(BaseController):'
70 68 """GET /users: All items in the collection"""
71 69 # url('users')
72 70
73 c.users_list = User.query().order_by(User.username).all()
71 c.users_list = User.query().order_by(User.username)\
72 .filter(User.username != User.DEFAULT_USER)\
73 .all()
74 74
75 75 users_data = []
76 76 total_records = len(c.users_list)
@@ -223,6 +223,7 b' class UsersController(BaseController):'
223 223 def show(self, id, format='html'):
224 224 """GET /users/id: Show a specific item"""
225 225 # url('user', id=ID)
226 User.get_or_404(-1)
226 227
227 228 def edit(self, id, format='html'):
228 229 """GET /users/id/edit: Form to edit an existing item"""
@@ -241,12 +242,13 b' class UsersController(BaseController):'
241 242 .filter(UserEmailMap.user == c.user).all()
242 243 c.user_ip_map = UserIpMap.query()\
243 244 .filter(UserIpMap.user == c.user).all()
244 user_model = UserModel()
245 umodel = UserModel()
245 246 c.ldap_dn = c.user.ldap_dn
246 247 defaults = c.user.get_dict()
247 248 defaults.update({
248 'create_repo_perm': user_model.has_perm(id, 'hg.create.repository'),
249 'fork_repo_perm': user_model.has_perm(id, 'hg.fork.repository'),
249 'create_repo_perm': umodel.has_perm(c.user, 'hg.create.repository'),
250 'create_user_group_perm': umodel.has_perm(c.user, 'hg.usergroup.create.true'),
251 'fork_repo_perm': umodel.has_perm(c.user, 'hg.fork.repository'),
250 252 })
251 253
252 254 return htmlfill.render(
@@ -259,39 +261,36 b' class UsersController(BaseController):'
259 261 def update_perm(self, id):
260 262 """PUT /users_perm/id: Update an existing item"""
261 263 # url('user_perm', id=ID, method='put')
262 usr = User.get_or_404(id)
263 grant_create_perm = str2bool(request.POST.get('create_repo_perm'))
264 grant_fork_perm = str2bool(request.POST.get('fork_repo_perm'))
265 inherit_perms = str2bool(request.POST.get('inherit_default_permissions'))
266
267 user_model = UserModel()
264 user = User.get_or_404(id)
268 265
269 266 try:
270 usr.inherit_default_permissions = inherit_perms
271 Session().add(usr)
267 form = CustomDefaultPermissionsForm()()
268 form_result = form.to_python(request.POST)
269
270 inherit_perms = form_result['inherit_default_permissions']
271 user.inherit_default_permissions = inherit_perms
272 Session().add(user)
273 user_model = UserModel()
272 274
273 if grant_create_perm:
274 user_model.revoke_perm(usr, 'hg.create.none')
275 user_model.grant_perm(usr, 'hg.create.repository')
276 h.flash(_("Granted 'repository create' permission to user"),
277 category='success')
275 defs = UserToPerm.query()\
276 .filter(UserToPerm.user == user)\
277 .all()
278 for ug in defs:
279 Session().delete(ug)
280
281 if form_result['create_repo_perm']:
282 user_model.grant_perm(id, 'hg.create.repository')
278 283 else:
279 user_model.revoke_perm(usr, 'hg.create.repository')
280 user_model.grant_perm(usr, 'hg.create.none')
281 h.flash(_("Revoked 'repository create' permission to user"),
282 category='success')
283
284 if grant_fork_perm:
285 user_model.revoke_perm(usr, 'hg.fork.none')
286 user_model.grant_perm(usr, 'hg.fork.repository')
287 h.flash(_("Granted 'repository fork' permission to user"),
288 category='success')
284 user_model.grant_perm(id, 'hg.create.none')
285 if form_result['create_user_group_perm']:
286 user_model.grant_perm(id, 'hg.usergroup.create.true')
289 287 else:
290 user_model.revoke_perm(usr, 'hg.fork.repository')
291 user_model.grant_perm(usr, 'hg.fork.none')
292 h.flash(_("Revoked 'repository fork' permission to user"),
293 category='success')
294
288 user_model.grant_perm(id, 'hg.usergroup.create.false')
289 if form_result['fork_repo_perm']:
290 user_model.grant_perm(id, 'hg.fork.repository')
291 else:
292 user_model.grant_perm(id, 'hg.fork.none')
293 h.flash(_("Updated permissions"), category='success')
295 294 Session().commit()
296 295 except Exception:
297 296 log.error(traceback.format_exc())
@@ -33,19 +33,23 b' from pylons.controllers.util import abor'
33 33 from pylons.i18n.translation import _
34 34
35 35 from rhodecode.lib import helpers as h
36 from rhodecode.lib.exceptions import UserGroupsAssignedException
37 from rhodecode.lib.utils2 import safe_unicode, str2bool
38 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
36 from rhodecode.lib.exceptions import UserGroupsAssignedException,\
37 RepoGroupAssignmentError
38 from rhodecode.lib.utils2 import safe_unicode, str2bool, safe_int
39 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator,\
40 HasUserGroupPermissionAnyDecorator, HasPermissionAnyDecorator
39 41 from rhodecode.lib.base import BaseController, render
40
42 from rhodecode.model.scm import UserGroupList
41 43 from rhodecode.model.users_group import UserGroupModel
42
44 from rhodecode.model.repo import RepoModel
43 45 from rhodecode.model.db import User, UserGroup, UserGroupToPerm,\
44 46 UserGroupRepoToPerm, UserGroupRepoGroupToPerm
45 from rhodecode.model.forms import UserGroupForm
47 from rhodecode.model.forms import UserGroupForm, UserGroupPermsForm,\
48 CustomDefaultPermissionsForm
46 49 from rhodecode.model.meta import Session
47 50 from rhodecode.lib.utils import action_logger
48 51 from sqlalchemy.orm import joinedload
52 from webob.exc import HTTPInternalServerError
49 53
50 54 log = logging.getLogger(__name__)
51 55
@@ -57,19 +61,89 b' class UsersGroupsController(BaseControll'
57 61 # map.resource('users_group', 'users_groups')
58 62
59 63 @LoginRequired()
60 @HasPermissionAllDecorator('hg.admin')
61 64 def __before__(self):
62 c.admin_user = session.get('admin_user')
63 c.admin_username = session.get('admin_username')
64 65 super(UsersGroupsController, self).__before__()
65 66 c.available_permissions = config['available_permissions']
66 67
68 def __load_data(self, user_group_id):
69 permissions = {
70 'repositories': {},
71 'repositories_groups': {}
72 }
73 ugroup_repo_perms = UserGroupRepoToPerm.query()\
74 .options(joinedload(UserGroupRepoToPerm.permission))\
75 .options(joinedload(UserGroupRepoToPerm.repository))\
76 .filter(UserGroupRepoToPerm.users_group_id == user_group_id)\
77 .all()
78
79 for gr in ugroup_repo_perms:
80 permissions['repositories'][gr.repository.repo_name] \
81 = gr.permission.permission_name
82
83 ugroup_group_perms = UserGroupRepoGroupToPerm.query()\
84 .options(joinedload(UserGroupRepoGroupToPerm.permission))\
85 .options(joinedload(UserGroupRepoGroupToPerm.group))\
86 .filter(UserGroupRepoGroupToPerm.users_group_id == user_group_id)\
87 .all()
88
89 for gr in ugroup_group_perms:
90 permissions['repositories_groups'][gr.group.group_name] \
91 = gr.permission.permission_name
92 c.permissions = permissions
93 c.group_members_obj = sorted((x.user for x in c.users_group.members),
94 key=lambda u: u.username.lower())
95
96 c.group_members = [(x.user_id, x.username) for x in c.group_members_obj]
97 c.available_members = sorted(((x.user_id, x.username) for x in
98 User.query().all()),
99 key=lambda u: u[1].lower())
100 repo_model = RepoModel()
101 c.users_array = repo_model.get_users_js()
102 c.users_groups_array = repo_model.get_users_groups_js()
103 c.available_permissions = config['available_permissions']
104
105 def __load_defaults(self, user_group_id):
106 """
107 Load defaults settings for edit, and update
108
109 :param user_group_id:
110 """
111 user_group = UserGroup.get_or_404(user_group_id)
112 data = user_group.get_dict()
113
114 ug_model = UserGroupModel()
115
116 data.update({
117 'create_repo_perm': ug_model.has_perm(user_group,
118 'hg.create.repository'),
119 'create_user_group_perm': ug_model.has_perm(user_group,
120 'hg.usergroup.create.true'),
121 'fork_repo_perm': ug_model.has_perm(user_group,
122 'hg.fork.repository'),
123 })
124
125 # fill user group users
126 for p in user_group.user_user_group_to_perm:
127 data.update({'u_perm_%s' % p.user.username:
128 p.permission.permission_name})
129
130 for p in user_group.user_group_user_group_to_perm:
131 data.update({'g_perm_%s' % p.user_group.users_group_name:
132 p.permission.permission_name})
133
134 return data
135
67 136 def index(self, format='html'):
68 137 """GET /users_groups: All items in the collection"""
69 138 # url('users_groups')
70 c.users_groups_list = UserGroup().query().all()
139
140 group_iter = UserGroupList(UserGroup().query().all(),
141 perm_set=['usergroup.admin'])
142 sk = lambda g: g.users_group_name
143 c.users_groups_list = sorted(group_iter, key=sk)
71 144 return render('admin/users_groups/users_groups.html')
72 145
146 @HasPermissionAnyDecorator('hg.admin', 'hg.usergroup.create.true')
73 147 def create(self):
74 148 """POST /users_groups: Create a new item"""
75 149 # url('users_groups')
@@ -78,7 +152,9 b' class UsersGroupsController(BaseControll'
78 152 try:
79 153 form_result = users_group_form.to_python(dict(request.POST))
80 154 UserGroupModel().create(name=form_result['users_group_name'],
81 active=form_result['users_group_active'])
155 owner=self.rhodecode_user.user_id,
156 active=form_result['users_group_active'])
157
82 158 gr = form_result['users_group_name']
83 159 action_logger(self.rhodecode_user,
84 160 'admin_created_users_group:%s' % gr,
@@ -99,45 +175,13 b' class UsersGroupsController(BaseControll'
99 175
100 176 return redirect(url('users_groups'))
101 177
178 @HasPermissionAnyDecorator('hg.admin', 'hg.usergroup.create.true')
102 179 def new(self, format='html'):
103 180 """GET /users_groups/new: Form to create a new item"""
104 181 # url('new_users_group')
105 182 return render('admin/users_groups/users_group_add.html')
106 183
107 def _load_data(self, id):
108 c.users_group.permissions = {
109 'repositories': {},
110 'repositories_groups': {}
111 }
112
113 ugroup_repo_perms = UserGroupRepoToPerm.query()\
114 .options(joinedload(UserGroupRepoToPerm.permission))\
115 .options(joinedload(UserGroupRepoToPerm.repository))\
116 .filter(UserGroupRepoToPerm.users_group_id == id)\
117 .all()
118
119 for gr in ugroup_repo_perms:
120 c.users_group.permissions['repositories'][gr.repository.repo_name] \
121 = gr.permission.permission_name
122
123 ugroup_group_perms = UserGroupRepoGroupToPerm.query()\
124 .options(joinedload(UserGroupRepoGroupToPerm.permission))\
125 .options(joinedload(UserGroupRepoGroupToPerm.group))\
126 .filter(UserGroupRepoGroupToPerm.users_group_id == id)\
127 .all()
128
129 for gr in ugroup_group_perms:
130 c.users_group.permissions['repositories_groups'][gr.group.group_name] \
131 = gr.permission.permission_name
132
133 c.group_members_obj = sorted((x.user for x in c.users_group.members),
134 key=lambda u: u.username.lower())
135 c.group_members = [(x.user_id, x.username) for x in
136 c.group_members_obj]
137 c.available_members = sorted(((x.user_id, x.username) for x in
138 User.query().all()),
139 key=lambda u: u[1].lower())
140
184 @HasUserGroupPermissionAnyDecorator('usergroup.admin')
141 185 def update(self, id):
142 186 """PUT /users_groups/id: Update an existing item"""
143 187 # Forms posted to this method should contain a hidden field:
@@ -148,7 +192,7 b' class UsersGroupsController(BaseControll'
148 192 # url('users_group', id=ID)
149 193
150 194 c.users_group = UserGroup.get_or_404(id)
151 self._load_data(id)
195 self.__load_data(id)
152 196
153 197 available_members = [safe_unicode(x[0]) for x in c.available_members]
154 198
@@ -190,6 +234,7 b' class UsersGroupsController(BaseControll'
190 234
191 235 return redirect(url('edit_users_group', id=id))
192 236
237 @HasUserGroupPermissionAnyDecorator('usergroup.admin')
193 238 def delete(self, id):
194 239 """DELETE /users_groups/id: Delete an existing item"""
195 240 # Forms posted to this method should contain a hidden field:
@@ -211,25 +256,76 b' class UsersGroupsController(BaseControll'
211 256 category='error')
212 257 return redirect(url('users_groups'))
213 258
259 @HasUserGroupPermissionAnyDecorator('usergroup.admin')
260 def set_user_group_perm_member(self, id):
261 """
262 grant permission for given usergroup
263
264 :param id:
265 """
266 user_group = UserGroup.get_or_404(id)
267 form = UserGroupPermsForm()().to_python(request.POST)
268
269 # set the permissions !
270 try:
271 UserGroupModel()._update_permissions(user_group, form['perms_new'],
272 form['perms_updates'])
273 except RepoGroupAssignmentError:
274 h.flash(_('Target group cannot be the same'), category='error')
275 return redirect(url('edit_users_group', id=id))
276 #TODO: implement this
277 #action_logger(self.rhodecode_user, 'admin_changed_repo_permissions',
278 # repo_name, self.ip_addr, self.sa)
279 Session().commit()
280 h.flash(_('User Group permissions updated'), category='success')
281 return redirect(url('edit_users_group', id=id))
282
283 @HasUserGroupPermissionAnyDecorator('usergroup.admin')
284 def delete_user_group_perm_member(self, id):
285 """
286 DELETE an existing repository group permission user
287
288 :param group_name:
289 """
290 try:
291 obj_type = request.POST.get('obj_type')
292 obj_id = None
293 if obj_type == 'user':
294 obj_id = safe_int(request.POST.get('user_id'))
295 elif obj_type == 'user_group':
296 obj_id = safe_int(request.POST.get('user_group_id'))
297
298 if not c.rhodecode_user.is_admin:
299 if obj_type == 'user' and c.rhodecode_user.user_id == obj_id:
300 msg = _('Cannot revoke permission for yourself as admin')
301 h.flash(msg, category='warning')
302 raise Exception('revoke admin permission on self')
303 if obj_type == 'user':
304 UserGroupModel().revoke_user_permission(user_group=id,
305 user=obj_id)
306 elif obj_type == 'user_group':
307 UserGroupModel().revoke_users_group_permission(target_user_group=id,
308 user_group=obj_id)
309 Session().commit()
310 except Exception:
311 log.error(traceback.format_exc())
312 h.flash(_('An error occurred during revoking of permission'),
313 category='error')
314 raise HTTPInternalServerError()
315
214 316 def show(self, id, format='html'):
215 317 """GET /users_groups/id: Show a specific item"""
216 318 # url('users_group', id=ID)
217 319
320 @HasUserGroupPermissionAnyDecorator('usergroup.admin')
218 321 def edit(self, id, format='html'):
219 322 """GET /users_groups/id/edit: Form to edit an existing item"""
220 323 # url('edit_users_group', id=ID)
221 324
222 325 c.users_group = UserGroup.get_or_404(id)
223 self._load_data(id)
326 self.__load_data(id)
224 327
225 ug_model = UserGroupModel()
226 defaults = c.users_group.get_dict()
227 defaults.update({
228 'create_repo_perm': ug_model.has_perm(c.users_group,
229 'hg.create.repository'),
230 'fork_repo_perm': ug_model.has_perm(c.users_group,
231 'hg.fork.repository'),
232 })
328 defaults = self.__load_defaults(id)
233 329
234 330 return htmlfill.render(
235 331 render('admin/users_groups/users_group_edit.html'),
@@ -238,43 +334,42 b' class UsersGroupsController(BaseControll'
238 334 force_defaults=False
239 335 )
240 336
337 @HasUserGroupPermissionAnyDecorator('usergroup.admin')
241 338 def update_perm(self, id):
242 339 """PUT /users_perm/id: Update an existing item"""
243 340 # url('users_group_perm', id=ID, method='put')
244 341
245 342 users_group = UserGroup.get_or_404(id)
246 grant_create_perm = str2bool(request.POST.get('create_repo_perm'))
247 grant_fork_perm = str2bool(request.POST.get('fork_repo_perm'))
248 inherit_perms = str2bool(request.POST.get('inherit_default_permissions'))
249
250 usergroup_model = UserGroupModel()
251 343
252 344 try:
345 form = CustomDefaultPermissionsForm()()
346 form_result = form.to_python(request.POST)
347
348 inherit_perms = form_result['inherit_default_permissions']
253 349 users_group.inherit_default_permissions = inherit_perms
254 350 Session().add(users_group)
351 usergroup_model = UserGroupModel()
255 352
256 if grant_create_perm:
257 usergroup_model.revoke_perm(id, 'hg.create.none')
258 usergroup_model.grant_perm(id, 'hg.create.repository')
259 h.flash(_("Granted 'repository create' permission to user group"),
260 category='success')
261 else:
262 usergroup_model.revoke_perm(id, 'hg.create.repository')
263 usergroup_model.grant_perm(id, 'hg.create.none')
264 h.flash(_("Revoked 'repository create' permission to user group"),
265 category='success')
353 defs = UserGroupToPerm.query()\
354 .filter(UserGroupToPerm.users_group == users_group)\
355 .all()
356 for ug in defs:
357 Session().delete(ug)
266 358
267 if grant_fork_perm:
268 usergroup_model.revoke_perm(id, 'hg.fork.none')
269 usergroup_model.grant_perm(id, 'hg.fork.repository')
270 h.flash(_("Granted 'repository fork' permission to user group"),
271 category='success')
359 if form_result['create_repo_perm']:
360 usergroup_model.grant_perm(id, 'hg.create.repository')
361 else:
362 usergroup_model.grant_perm(id, 'hg.create.none')
363 if form_result['create_user_group_perm']:
364 usergroup_model.grant_perm(id, 'hg.usergroup.create.true')
272 365 else:
273 usergroup_model.revoke_perm(id, 'hg.fork.repository')
366 usergroup_model.grant_perm(id, 'hg.usergroup.create.false')
367 if form_result['fork_repo_perm']:
368 usergroup_model.grant_perm(id, 'hg.fork.repository')
369 else:
274 370 usergroup_model.grant_perm(id, 'hg.fork.none')
275 h.flash(_("Revoked 'repository fork' permission to user group"),
276 category='success')
277 371
372 h.flash(_("Updated permissions"), category='success')
278 373 Session().commit()
279 374 except Exception:
280 375 log.error(traceback.format_exc())
@@ -25,6 +25,7 b''
25 25 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
26 26 # MA 02110-1301, USA.
27 27
28 import time
28 29 import traceback
29 30 import logging
30 31
@@ -34,19 +35,30 b' from rhodecode.lib.auth import PasswordG'
34 35 HasPermissionAnyApi, HasRepoPermissionAnyApi
35 36 from rhodecode.lib.utils import map_groups, repo2db_mapper
36 37 from rhodecode.lib.utils2 import str2bool, time_to_datetime, safe_int
37 from rhodecode.lib import helpers as h
38 38 from rhodecode.model.meta import Session
39 39 from rhodecode.model.scm import ScmModel
40 40 from rhodecode.model.repo import RepoModel
41 41 from rhodecode.model.user import UserModel
42 42 from rhodecode.model.users_group import UserGroupModel
43 from rhodecode.model.repos_group import ReposGroupModel
43 44 from rhodecode.model.db import Repository, RhodeCodeSetting, UserIpMap,\
44 Permission
45 Permission, User, Gist
45 46 from rhodecode.lib.compat import json
47 from rhodecode.lib.exceptions import DefaultUserException
48 from rhodecode.model.gist import GistModel
46 49
47 50 log = logging.getLogger(__name__)
48 51
49 52
53 def store_update(updates, attr, name):
54 """
55 Stores param in updates dict if it's not instance of Optional
56 allows easy updates of passed in params
57 """
58 if not isinstance(attr, Optional):
59 updates[name] = attr
60
61
50 62 class OptionalAttr(object):
51 63 """
52 64 Special Optional Option that defines other attribute
@@ -113,7 +125,7 b' def get_repo_or_error(repoid):'
113 125 """
114 126 Get repo by id or name or return JsonRPCError if not found
115 127
116 :param userid:
128 :param repoid:
117 129 """
118 130 repo = RepoModel().get_repo(repoid)
119 131 if repo is None:
@@ -121,6 +133,19 b' def get_repo_or_error(repoid):'
121 133 return repo
122 134
123 135
136 def get_repo_group_or_error(repogroupid):
137 """
138 Get repo group by id or name or return JsonRPCError if not found
139
140 :param repogroupid:
141 """
142 repo_group = ReposGroupModel()._get_repo_group(repogroupid)
143 if repo_group is None:
144 raise JSONRPCError(
145 'repository group `%s` does not exist' % (repogroupid,))
146 return repo_group
147
148
124 149 def get_users_group_or_error(usersgroupid):
125 150 """
126 151 Get user group by id or name or return JsonRPCError if not found
@@ -212,7 +237,7 b' class ApiController(JSONRPCController):'
212 237 :param repoid:
213 238 """
214 239 repo = get_repo_or_error(repoid)
215 if HasPermissionAnyApi('hg.admin')(user=apiuser) is False:
240 if not HasPermissionAnyApi('hg.admin')(user=apiuser):
216 241 # check if we have admin permission for this repo !
217 242 if HasRepoPermissionAnyApi('repository.admin',
218 243 'repository.write')(user=apiuser,
@@ -220,16 +245,15 b' class ApiController(JSONRPCController):'
220 245 raise JSONRPCError('repository `%s` does not exist' % (repoid))
221 246
222 247 try:
223 invalidated_keys = ScmModel().mark_for_invalidation(repo.repo_name)
224 Session().commit()
225 return ('Cache for repository `%s` was invalidated: '
226 'invalidated cache keys: %s' % (repoid, invalidated_keys))
248 ScmModel().mark_for_invalidation(repo.repo_name)
249 return ('Caches of repository `%s` was invalidated' % repoid)
227 250 except Exception:
228 251 log.error(traceback.format_exc())
229 252 raise JSONRPCError(
230 253 'Error occurred during cache invalidation action'
231 254 )
232 255
256 # permission check inside
233 257 def lock(self, apiuser, repoid, locked=Optional(None),
234 258 userid=Optional(OAttr('apiuser'))):
235 259 """
@@ -266,27 +290,47 b' class ApiController(JSONRPCController):'
266 290 lockobj = Repository.getlock(repo)
267 291
268 292 if lockobj[0] is None:
269 return ('Repo `%s` not locked. Locked=`False`.'
270 % (repo.repo_name))
293 _d = {
294 'repo': repo.repo_name,
295 'locked': False,
296 'locked_since': None,
297 'locked_by': None,
298 'msg': 'Repo `%s` not locked.' % repo.repo_name
299 }
300 return _d
271 301 else:
272 302 userid, time_ = lockobj
273 user = get_user_or_error(userid)
303 lock_user = get_user_or_error(userid)
304 _d = {
305 'repo': repo.repo_name,
306 'locked': True,
307 'locked_since': time_,
308 'locked_by': lock_user.username,
309 'msg': ('Repo `%s` locked by `%s`. '
310 % (repo.repo_name,
311 json.dumps(time_to_datetime(time_))))
312 }
313 return _d
274 314
275 return ('Repo `%s` locked by `%s`. Locked=`True`. '
276 'Locked since: `%s`'
277 % (repo.repo_name, user.username,
278 json.dumps(time_to_datetime(time_))))
279
315 # force locked state through a flag
280 316 else:
281 317 locked = str2bool(locked)
282 318 try:
283 319 if locked:
284 Repository.lock(repo, user.user_id)
320 lock_time = time.time()
321 Repository.lock(repo, user.user_id, lock_time)
285 322 else:
323 lock_time = None
286 324 Repository.unlock(repo)
287
288 return ('User `%s` set lock state for repo `%s` to `%s`'
289 % (user.username, repo.repo_name, locked))
325 _d = {
326 'repo': repo.repo_name,
327 'locked': locked,
328 'locked_since': lock_time,
329 'locked_by': user.username,
330 'msg': ('User `%s` set lock state for repo `%s` to `%s`'
331 % (user.username, repo.repo_name, locked))
332 }
333 return _d
290 334 except Exception:
291 335 log.error(traceback.format_exc())
292 336 raise JSONRPCError(
@@ -302,9 +346,8 b' class ApiController(JSONRPCController):'
302 346 :param apiuser:
303 347 :param userid:
304 348 """
305 if HasPermissionAnyApi('hg.admin')(user=apiuser):
306 pass
307 else:
349
350 if not HasPermissionAnyApi('hg.admin')(user=apiuser):
308 351 #make sure normal user does not pass someone else userid,
309 352 #he is not allowed to do that
310 353 if not isinstance(userid, Optional) and userid != apiuser.user_id:
@@ -354,7 +397,7 b' class ApiController(JSONRPCController):'
354 397 :param apiuser:
355 398 :param userid:
356 399 """
357 if HasPermissionAnyApi('hg.admin')(user=apiuser) is False:
400 if not HasPermissionAnyApi('hg.admin')(user=apiuser):
358 401 #make sure normal user does not pass someone else userid,
359 402 #he is not allowed to do that
360 403 if not isinstance(userid, Optional) and userid != apiuser.user_id:
@@ -379,12 +422,15 b' class ApiController(JSONRPCController):'
379 422 """
380 423
381 424 result = []
382 for user in UserModel().get_all():
425 users_list = User.query().order_by(User.username)\
426 .filter(User.username != User.DEFAULT_USER)\
427 .all()
428 for user in users_list:
383 429 result.append(user.get_api_data())
384 430 return result
385 431
386 432 @HasPermissionAllDecorator('hg.admin')
387 def create_user(self, apiuser, username, email, password,
433 def create_user(self, apiuser, username, email, password=Optional(None),
388 434 firstname=Optional(None), lastname=Optional(None),
389 435 active=Optional(True), admin=Optional(False),
390 436 ldap_dn=Optional(None)):
@@ -479,6 +525,9 b' class ApiController(JSONRPCController):'
479 525 msg='updated user ID:%s %s' % (user.user_id, user.username),
480 526 user=user.get_api_data()
481 527 )
528 except DefaultUserException:
529 log.error(traceback.format_exc())
530 raise JSONRPCError('editing default user is forbidden')
482 531 except Exception:
483 532 log.error(traceback.format_exc())
484 533 raise JSONRPCError('failed to update user `%s`' % userid)
@@ -538,12 +587,15 b' class ApiController(JSONRPCController):'
538 587 return result
539 588
540 589 @HasPermissionAllDecorator('hg.admin')
541 def create_users_group(self, apiuser, group_name, active=Optional(True)):
590 def create_users_group(self, apiuser, group_name,
591 owner=Optional(OAttr('apiuser')),
592 active=Optional(True)):
542 593 """
543 594 Creates an new usergroup
544 595
545 596 :param apiuser:
546 597 :param group_name:
598 :param owner:
547 599 :param active:
548 600 """
549 601
@@ -551,8 +603,14 b' class ApiController(JSONRPCController):'
551 603 raise JSONRPCError("user group `%s` already exist" % group_name)
552 604
553 605 try:
606 if isinstance(owner, Optional):
607 owner = apiuser.user_id
608
609 owner = get_user_or_error(owner)
554 610 active = Optional.extract(active)
555 ug = UserGroupModel().create(name=group_name, active=active)
611 ug = UserGroupModel().create(name=group_name,
612 owner=owner,
613 active=active)
556 614 Session().commit()
557 615 return dict(
558 616 msg='created new user group `%s`' % group_name,
@@ -633,10 +691,10 b' class ApiController(JSONRPCController):'
633 691 """
634 692 repo = get_repo_or_error(repoid)
635 693
636 if HasPermissionAnyApi('hg.admin')(user=apiuser) is False:
694 if not HasPermissionAnyApi('hg.admin')(user=apiuser):
637 695 # check if we have admin permission for this repo !
638 if HasRepoPermissionAnyApi('repository.admin')(user=apiuser,
639 repo_name=repo.repo_name) is False:
696 if not HasRepoPermissionAnyApi('repository.admin')(user=apiuser,
697 repo_name=repo.repo_name):
640 698 raise JSONRPCError('repository `%s` does not exist' % (repoid))
641 699
642 700 members = []
@@ -665,6 +723,7 b' class ApiController(JSONRPCController):'
665 723 data['followers'] = followers
666 724 return data
667 725
726 # permission check inside
668 727 def get_repos(self, apiuser):
669 728 """"
670 729 Get all repositories
@@ -792,6 +851,71 b' class ApiController(JSONRPCController):'
792 851 log.error(traceback.format_exc())
793 852 raise JSONRPCError('failed to create repository `%s`' % repo_name)
794 853
854 # permission check inside
855 def update_repo(self, apiuser, repoid, name=Optional(None),
856 owner=Optional(OAttr('apiuser')),
857 group=Optional(None),
858 description=Optional(''), private=Optional(False),
859 clone_uri=Optional(None), landing_rev=Optional('tip'),
860 enable_statistics=Optional(False),
861 enable_locking=Optional(False),
862 enable_downloads=Optional(False)):
863
864 """
865 Updates repo
866
867 :param apiuser: filled automatically from apikey
868 :type apiuser: AuthUser
869 :param repoid: repository name or repository id
870 :type repoid: str or int
871 :param name:
872 :param owner:
873 :param group:
874 :param description:
875 :param private:
876 :param clone_uri:
877 :param landing_rev:
878 :param enable_statistics:
879 :param enable_locking:
880 :param enable_downloads:
881 """
882 repo = get_repo_or_error(repoid)
883 if not HasPermissionAnyApi('hg.admin')(user=apiuser):
884 # check if we have admin permission for this repo !
885 if not HasRepoPermissionAnyApi('repository.admin')(user=apiuser,
886 repo_name=repo.repo_name):
887 raise JSONRPCError('repository `%s` does not exist' % (repoid,))
888
889 updates = {
890 # update function requires this.
891 'repo_name': repo.repo_name
892 }
893 repo_group = group
894 if not isinstance(repo_group, Optional):
895 repo_group = get_repo_group_or_error(repo_group)
896 repo_group = repo_group.group_id
897 try:
898 store_update(updates, name, 'repo_name')
899 store_update(updates, repo_group, 'repo_group')
900 store_update(updates, owner, 'user')
901 store_update(updates, description, 'repo_description')
902 store_update(updates, private, 'repo_private')
903 store_update(updates, clone_uri, 'clone_uri')
904 store_update(updates, landing_rev, 'repo_landing_rev')
905 store_update(updates, enable_statistics, 'repo_enable_statistics')
906 store_update(updates, enable_locking, 'repo_enable_locking')
907 store_update(updates, enable_downloads, 'repo_enable_downloads')
908
909 RepoModel().update(repo, **updates)
910 Session().commit()
911 return dict(
912 msg='updated repo ID:%s %s' % (repo.repo_id, repo.repo_name),
913 repository=repo.get_api_data()
914 )
915 except Exception:
916 log.error(traceback.format_exc())
917 raise JSONRPCError('failed to update repo `%s`' % repoid)
918
795 919 @HasPermissionAnyDecorator('hg.admin', 'hg.fork.repository')
796 920 def fork_repo(self, apiuser, repoid, fork_name, owner=Optional(OAttr('apiuser')),
797 921 description=Optional(''), copy_permissions=Optional(False),
@@ -853,6 +977,7 b' class ApiController(JSONRPCController):'
853 977 fork_name)
854 978 )
855 979
980 # perms handled inside
856 981 def delete_repo(self, apiuser, repoid, forks=Optional(None)):
857 982 """
858 983 Deletes a given repository
@@ -874,9 +999,9 b' class ApiController(JSONRPCController):'
874 999 _forks_msg = ''
875 1000 _forks = [f for f in repo.forks]
876 1001 if handle_forks == 'detach':
877 _forks_msg = ' ' + _('Detached %s forks') % len(_forks)
1002 _forks_msg = ' ' + 'Detached %s forks' % len(_forks)
878 1003 elif handle_forks == 'delete':
879 _forks_msg = ' ' + _('Deleted %s forks') % len(_forks)
1004 _forks_msg = ' ' + 'Deleted %s forks' % len(_forks)
880 1005 elif _forks:
881 1006 raise JSONRPCError(
882 1007 'Cannot delete `%s` it still contains attached forks'
@@ -1029,3 +1154,34 b' class ApiController(JSONRPCController):'
1029 1154 users_group.users_group_name, repo.repo_name
1030 1155 )
1031 1156 )
1157
1158 def create_gist(self, apiuser, files, owner=Optional(OAttr('apiuser')),
1159 gist_type=Optional(Gist.GIST_PUBLIC), lifetime=Optional(-1),
1160 description=Optional('')):
1161
1162 try:
1163 if isinstance(owner, Optional):
1164 owner = apiuser.user_id
1165
1166 owner = get_user_or_error(owner)
1167 description = Optional.extract(description)
1168 gist_type = Optional.extract(gist_type)
1169 lifetime = Optional.extract(lifetime)
1170
1171 # files: {
1172 # 'filename': {'content':'...', 'lexer': null},
1173 # 'filename2': {'content':'...', 'lexer': null}
1174 #}
1175 gist = GistModel().create(description=description,
1176 owner=owner,
1177 gist_mapping=files,
1178 gist_type=gist_type,
1179 lifetime=lifetime)
1180 Session().commit()
1181 return dict(
1182 msg='created new gist',
1183 gist=gist.get_api_data()
1184 )
1185 except Exception:
1186 log.error(traceback.format_exc())
1187 raise JSONRPCError('failed to create gist')
@@ -36,12 +36,12 b' log = logging.getLogger(__name__)'
36 36
37 37 class BookmarksController(BaseRepoController):
38 38
39 def __before__(self):
40 super(BookmarksController, self).__before__()
41
39 42 @LoginRequired()
40 43 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
41 44 'repository.admin')
42 def __before__(self):
43 super(BookmarksController, self).__before__()
44
45 45 def index(self):
46 46 if c.rhodecode_repo.alias != 'hg':
47 47 raise HTTPNotFound()
@@ -38,12 +38,12 b' log = logging.getLogger(__name__)'
38 38
39 39 class BranchesController(BaseRepoController):
40 40
41 def __before__(self):
42 super(BranchesController, self).__before__()
43
41 44 @LoginRequired()
42 45 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
43 46 'repository.admin')
44 def __before__(self):
45 super(BranchesController, self).__before__()
46
47 47 def index(self):
48 48
49 49 def _branchtags(localrepo):
@@ -72,5 +72,4 b' class BranchesController(BaseRepoControl'
72 72 key=lambda ctx: ctx[0],
73 73 reverse=False))
74 74
75
76 75 return render('branches/branches.html')
@@ -37,22 +37,65 b' from rhodecode.lib.helpers import RepoPa'
37 37 from rhodecode.lib.compat import json
38 38 from rhodecode.lib.graphmod import _colored, _dagwalker
39 39 from rhodecode.lib.vcs.exceptions import RepositoryError, ChangesetDoesNotExistError,\
40 EmptyRepositoryError
40 ChangesetError, NodeDoesNotExistError, EmptyRepositoryError
41 41 from rhodecode.lib.utils2 import safe_int
42 from webob.exc import HTTPNotFound
42 43
43 44 log = logging.getLogger(__name__)
44 45
45 46
47 def _load_changelog_summary():
48 p = safe_int(request.GET.get('page'), 1)
49 size = safe_int(request.GET.get('size'), 10)
50
51 def url_generator(**kw):
52 return url('changelog_summary_home',
53 repo_name=c.rhodecode_db_repo.repo_name, size=size, **kw)
54
55 collection = c.rhodecode_repo
56
57 c.repo_changesets = RepoPage(collection, page=p,
58 items_per_page=size,
59 url=url_generator)
60 page_revisions = [x.raw_id for x in list(c.repo_changesets)]
61 c.comments = c.rhodecode_db_repo.get_comments(page_revisions)
62 c.statuses = c.rhodecode_db_repo.statuses(page_revisions)
63
64
46 65 class ChangelogController(BaseRepoController):
47 66
48 @LoginRequired()
49 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
50 'repository.admin')
51 67 def __before__(self):
52 68 super(ChangelogController, self).__before__()
53 69 c.affected_files_cut_off = 60
54 70
55 def index(self):
71 def _graph(self, repo, revs_int, repo_size, size, p):
72 """
73 Generates a DAG graph for repo
74
75 :param repo:
76 :param revs_int:
77 :param repo_size:
78 :param size:
79 :param p:
80 """
81 if not revs_int:
82 c.jsdata = json.dumps([])
83 return
84
85 data = []
86 revs = revs_int
87
88 dag = _dagwalker(repo, revs, repo.alias)
89 dag = _colored(dag)
90 for (id, type, ctx, vtx, edges) in dag:
91 data.append(['', vtx, edges])
92
93 c.jsdata = json.dumps(data)
94
95 @LoginRequired()
96 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
97 'repository.admin')
98 def index(self, repo_name, revision=None, f_path=None):
56 99 limit = 100
57 100 default = 20
58 101 if request.GET.get('size'):
@@ -65,20 +108,33 b' class ChangelogController(BaseRepoContro'
65 108 c.size = max(c.size, 1)
66 109 p = safe_int(request.GET.get('page', 1), 1)
67 110 branch_name = request.GET.get('branch', None)
111 c.changelog_for_path = f_path
68 112 try:
69 if branch_name:
70 collection = [z for z in
71 c.rhodecode_repo.get_changesets(start=0,
72 branch_name=branch_name)]
73 c.total_cs = len(collection)
113
114 if f_path:
115 log.debug('generating changelog for path %s' % f_path)
116 # get the history for the file !
117 tip_cs = c.rhodecode_repo.get_changeset()
118 try:
119 collection = tip_cs.get_file_history(f_path)
120 except (NodeDoesNotExistError, ChangesetError):
121 #this node is not present at tip !
122 try:
123 cs = self.__get_cs_or_redirect(revision, repo_name)
124 collection = cs.get_file_history(f_path)
125 except RepositoryError, e:
126 h.flash(str(e), category='warning')
127 redirect(h.url('changelog_home', repo_name=repo_name))
128 collection = list(reversed(collection))
74 129 else:
75 collection = c.rhodecode_repo
76 c.total_cs = len(c.rhodecode_repo)
130 collection = c.rhodecode_repo.get_changesets(start=0,
131 branch_name=branch_name)
132 c.total_cs = len(collection)
77 133
78 134 c.pagination = RepoPage(collection, page=p, item_count=c.total_cs,
79 items_per_page=c.size, branch=branch_name)
135 items_per_page=c.size, branch=branch_name,)
80 136 collection = list(c.pagination)
81 page_revisions = [x.raw_id for x in collection]
137 page_revisions = [x.raw_id for x in c.pagination]
82 138 c.comments = c.rhodecode_db_repo.get_comments(page_revisions)
83 139 c.statuses = c.rhodecode_db_repo.statuses(page_revisions)
84 140 except (EmptyRepositoryError), e:
@@ -89,37 +145,31 b' class ChangelogController(BaseRepoContro'
89 145 h.flash(str(e), category='error')
90 146 return redirect(url('changelog_home', repo_name=c.repo_name))
91 147
92 self._graph(c.rhodecode_repo, collection, c.total_cs, c.size, p)
93
94 148 c.branch_name = branch_name
95 149 c.branch_filters = [('', _('All Branches'))] + \
96 150 [(k, k) for k in c.rhodecode_repo.branches.keys()]
151 _revs = []
152 if not f_path:
153 _revs = [x.revision for x in c.pagination]
154 self._graph(c.rhodecode_repo, _revs, c.total_cs, c.size, p)
97 155
98 156 return render('changelog/changelog.html')
99 157
158 @LoginRequired()
159 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
160 'repository.admin')
100 161 def changelog_details(self, cs):
101 162 if request.environ.get('HTTP_X_PARTIAL_XHR'):
102 163 c.cs = c.rhodecode_repo.get_changeset(cs)
103 164 return render('changelog/changelog_details.html')
104
105 def _graph(self, repo, collection, repo_size, size, p):
106 """
107 Generates a DAG graph for mercurial
165 raise HTTPNotFound()
108 166
109 :param repo: repo instance
110 :param size: number of commits to show
111 :param p: page number
112 """
113 if not collection:
114 c.jsdata = json.dumps([])
115 return
167 @LoginRequired()
168 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
169 'repository.admin')
170 def changelog_summary(self, repo_name):
171 if request.environ.get('HTTP_X_PARTIAL_XHR'):
172 _load_changelog_summary()
116 173
117 data = []
118 revs = [x.revision for x in collection]
119
120 dag = _dagwalker(repo, revs, repo.alias)
121 dag = _colored(dag)
122 for (id, type, ctx, vtx, edges) in dag:
123 data.append(['', vtx, edges])
124
125 c.jsdata = json.dumps(data)
174 return render('changelog/changelog_summary_data.html')
175 raise HTTPNotFound()
@@ -37,7 +37,8 b' from rhodecode.lib.vcs.exceptions import'
37 37 ChangesetDoesNotExistError
38 38
39 39 import rhodecode.lib.helpers as h
40 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
40 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator,\
41 NotAnonymous
41 42 from rhodecode.lib.base import BaseRepoController, render
42 43 from rhodecode.lib.utils import action_logger
43 44 from rhodecode.lib.compat import OrderedDict
@@ -169,9 +170,6 b' def _context_url(GET, fileid=None):'
169 170
170 171 class ChangesetController(BaseRepoController):
171 172
172 @LoginRequired()
173 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
174 'repository.admin')
175 173 def __before__(self):
176 174 super(ChangesetController, self).__before__()
177 175 c.affected_files_cut_off = 60
@@ -179,7 +177,7 b' class ChangesetController(BaseRepoContro'
179 177 c.users_array = repo_model.get_users_js()
180 178 c.users_groups_array = repo_model.get_users_groups_js()
181 179
182 def index(self, revision, method='show'):
180 def _index(self, revision, method):
183 181 c.anchor_url = anchor_url
184 182 c.ignorews_url = _ignorews_url
185 183 c.context_url = _context_url
@@ -236,7 +234,7 b' class ChangesetController(BaseRepoContro'
236 234 # show comments from them
237 235
238 236 prs = set([x.pull_request for x in
239 filter(lambda x: x.pull_request != None, st)])
237 filter(lambda x: x.pull_request is not None, st)])
240 238
241 239 for pr in prs:
242 240 c.comments.extend(pr.comments)
@@ -267,9 +265,8 b' class ChangesetController(BaseRepoContro'
267 265 c.limited_diff = True
268 266 for f in _parsed:
269 267 st = f['stats']
270 if st[0] != 'b':
271 c.lines_added += st[0]
272 c.lines_deleted += st[1]
268 c.lines_added += st['added']
269 c.lines_deleted += st['deleted']
273 270 fid = h.FID(changeset.raw_id, f['filename'])
274 271 diff = diff_processor.as_html(enable_comments=enable_comments,
275 272 parsed_lines=[f])
@@ -311,15 +308,34 b' class ChangesetController(BaseRepoContro'
311 308 else:
312 309 return render('changeset/changeset_range.html')
313 310
311 @LoginRequired()
312 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
313 'repository.admin')
314 def index(self, revision, method='show'):
315 return self._index(revision, method=method)
316
317 @LoginRequired()
318 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
319 'repository.admin')
314 320 def changeset_raw(self, revision):
315 return self.index(revision, method='raw')
321 return self._index(revision, method='raw')
316 322
323 @LoginRequired()
324 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
325 'repository.admin')
317 326 def changeset_patch(self, revision):
318 return self.index(revision, method='patch')
327 return self._index(revision, method='patch')
319 328
329 @LoginRequired()
330 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
331 'repository.admin')
320 332 def changeset_download(self, revision):
321 return self.index(revision, method='download')
333 return self._index(revision, method='download')
322 334
335 @LoginRequired()
336 @NotAnonymous()
337 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
338 'repository.admin')
323 339 @jsonify
324 340 def comment(self, repo_name, revision):
325 341 status = request.POST.get('changeset_status')
@@ -382,6 +398,22 b' class ChangesetController(BaseRepoContro'
382 398
383 399 return data
384 400
401 @LoginRequired()
402 @NotAnonymous()
403 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
404 'repository.admin')
405 def preview_comment(self):
406 if not request.environ.get('HTTP_X_PARTIAL_XHR'):
407 raise HTTPBadRequest()
408 text = request.POST.get('text')
409 if text:
410 return h.rst_w_mentions(text)
411 return ''
412
413 @LoginRequired()
414 @NotAnonymous()
415 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
416 'repository.admin')
385 417 @jsonify
386 418 def delete_comment(self, repo_name, comment_id):
387 419 co = ChangesetComment.get(comment_id)
@@ -393,6 +425,9 b' class ChangesetController(BaseRepoContro'
393 425 else:
394 426 raise HTTPForbidden()
395 427
428 @LoginRequired()
429 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
430 'repository.admin')
396 431 @jsonify
397 432 def changeset_info(self, repo_name, revision):
398 433 if request.is_xhr:
@@ -23,8 +23,10 b''
23 23 #
24 24 # You should have received a copy of the GNU General Public License
25 25 # along with this program. If not, see <http://www.gnu.org/licenses/>.
26
26 27 import logging
27 28 import traceback
29 import re
28 30
29 31 from webob.exc import HTTPNotFound
30 32 from pylons import request, response, session, tmpl_context as c, url
@@ -32,25 +34,23 b' from pylons.controllers.util import abor'
32 34 from pylons.i18n.translation import _
33 35
34 36 from rhodecode.lib.vcs.exceptions import EmptyRepositoryError, RepositoryError
37 from rhodecode.lib.vcs.utils import safe_str
38 from rhodecode.lib.vcs.utils.hgcompat import scmutil
35 39 from rhodecode.lib import helpers as h
36 40 from rhodecode.lib.base import BaseRepoController, render
37 41 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
38 from rhodecode.lib import diffs
42 from rhodecode.lib import diffs, unionrepo
39 43
40 44 from rhodecode.model.db import Repository
41 from rhodecode.model.pull_request import PullRequestModel
42 45 from webob.exc import HTTPBadRequest
43 46 from rhodecode.lib.diffs import LimitedDiffContainer
44 from rhodecode.lib.vcs.backends.base import EmptyChangeset
47
45 48
46 49 log = logging.getLogger(__name__)
47 50
48 51
49 52 class CompareController(BaseRepoController):
50 53
51 @LoginRequired()
52 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
53 'repository.admin')
54 54 def __before__(self):
55 55 super(CompareController, self).__before__()
56 56
@@ -82,6 +82,81 b' class CompareController(BaseRepoControll'
82 82 redirect(h.url('summary_home', repo_name=repo.repo_name))
83 83 raise HTTPBadRequest()
84 84
85 def _get_changesets(self, alias, org_repo, org_ref, other_repo, other_ref, merge):
86 """
87 Returns a list of changesets that can be merged from org_repo@org_ref
88 to other_repo@other_ref ... and the ancestor that would be used for merge
89
90 :param org_repo:
91 :param org_ref:
92 :param other_repo:
93 :param other_ref:
94 :param tmp:
95 """
96
97 ancestor = None
98
99 if alias == 'hg':
100 # lookup up the exact node id
101 _revset_predicates = {
102 'branch': 'branch',
103 'book': 'bookmark',
104 'tag': 'tag',
105 'rev': 'id',
106 }
107
108 org_rev_spec = "max(%s(%%s))" % _revset_predicates[org_ref[0]]
109 org_revs = org_repo._repo.revs(org_rev_spec, safe_str(org_ref[1]))
110 org_rev = org_repo._repo[org_revs[-1] if org_revs else -1].hex()
111
112 other_revs_spec = "max(%s(%%s))" % _revset_predicates[other_ref[0]]
113 other_revs = other_repo._repo.revs(other_revs_spec, safe_str(other_ref[1]))
114 other_rev = other_repo._repo[other_revs[-1] if other_revs else -1].hex()
115
116 #case two independent repos
117 if org_repo != other_repo:
118 hgrepo = unionrepo.unionrepository(other_repo.baseui,
119 other_repo.path,
120 org_repo.path)
121 # all the changesets we are looking for will be in other_repo,
122 # so rev numbers from hgrepo can be used in other_repo
123
124 #no remote compare do it on the same repository
125 else:
126 hgrepo = other_repo._repo
127
128 if merge:
129 revs = hgrepo.revs("ancestors(id(%s)) and not ancestors(id(%s)) and not id(%s)",
130 other_rev, org_rev, org_rev)
131
132 ancestors = hgrepo.revs("ancestor(id(%s), id(%s))", org_rev, other_rev)
133 if ancestors:
134 # pick arbitrary ancestor - but there is usually only one
135 ancestor = hgrepo[ancestors[0]].hex()
136 else:
137 # TODO: have both + and - changesets
138 revs = hgrepo.revs("id(%s) :: id(%s) - id(%s)",
139 org_rev, other_rev, org_rev)
140
141 changesets = [other_repo.get_changeset(rev) for rev in revs]
142
143 elif alias == 'git':
144 if org_repo != other_repo:
145 raise Exception('Comparing of different GIT repositories is not'
146 'allowed. Got %s != %s' % (org_repo, other_repo))
147
148 so, se = org_repo.run_git_command(
149 'log --reverse --pretty="format: %%H" -s -p %s..%s'
150 % (org_ref[1], other_ref[1])
151 )
152 changesets = [org_repo.get_changeset(cs)
153 for cs in re.findall(r'[0-9a-fA-F]{40}', so)]
154
155 return changesets, ancestor
156
157 @LoginRequired()
158 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
159 'repository.admin')
85 160 def index(self, org_ref_type, org_ref, other_ref_type, other_ref):
86 161 # org_ref will be evaluated in org_repo
87 162 org_repo = c.rhodecode_db_repo.repo_name
@@ -140,13 +215,17 b' class CompareController(BaseRepoControll'
140 215 c.org_ref_type = org_ref[0]
141 216 c.other_ref_type = other_ref[0]
142 217
143 c.cs_ranges, c.ancestor = PullRequestModel().get_compare_data(
144 org_repo, org_ref, other_repo, other_ref, merge)
218 c.cs_ranges, c.ancestor = self._get_changesets(org_repo.scm_instance.alias,
219 org_repo.scm_instance, org_ref,
220 other_repo.scm_instance, other_ref,
221 merge)
145 222
146 223 c.statuses = c.rhodecode_db_repo.statuses([x.raw_id for x in
147 224 c.cs_ranges])
225 if not c.ancestor:
226 log.warning('Unable to find ancestor revision')
227
148 228 if partial:
149 assert c.ancestor
150 229 return render('compare/compare_cs.html')
151 230
152 231 if c.ancestor:
@@ -161,9 +240,11 b' class CompareController(BaseRepoControll'
161 240
162 241 diff_limit = self.cut_off_limit if not c.fulldiff else None
163 242
164 _diff = diffs.differ(org_repo, org_ref, other_repo, other_ref)
243 log.debug('running diff between %s and %s in %s'
244 % (org_ref, other_ref, org_repo.scm_instance.path))
245 txtdiff = org_repo.scm_instance.get_diff(rev1=safe_str(org_ref[1]), rev2=safe_str(other_ref[1]))
165 246
166 diff_processor = diffs.DiffProcessor(_diff or '', format='gitdiff',
247 diff_processor = diffs.DiffProcessor(txtdiff or '', format='gitdiff',
167 248 diff_limit=diff_limit)
168 249 _parsed = diff_processor.prepare()
169 250
@@ -177,12 +258,12 b' class CompareController(BaseRepoControll'
177 258 c.lines_deleted = 0
178 259 for f in _parsed:
179 260 st = f['stats']
180 if st[0] != 'b':
181 c.lines_added += st[0]
182 c.lines_deleted += st[1]
261 if not st['binary']:
262 c.lines_added += st['added']
263 c.lines_deleted += st['deleted']
183 264 fid = h.FID('', f['filename'])
184 265 c.files.append([fid, f['operation'], f['filename'], f['stats']])
185 diff = diff_processor.as_html(enable_comments=False, parsed_lines=[f])
186 c.changes[fid] = [f['operation'], f['filename'], diff]
266 htmldiff = diff_processor.as_html(enable_comments=False, parsed_lines=[f])
267 c.changes[fid] = [f['operation'], f['filename'], htmldiff]
187 268
188 269 return render('compare/compare_diff.html')
@@ -87,8 +87,8 b' class ErrorController(BaseController):'
87 87 return fapp(request.environ, self.start_response)
88 88
89 89 def get_error_explanation(self, code):
90 ''' get the error explanations of int codes
91 [400, 401, 403, 404, 500]'''
90 """ get the error explanations of int codes
91 [400, 401, 403, 404, 500]"""
92 92 try:
93 93 code = int(code)
94 94 except Exception:
@@ -76,8 +76,8 b' class FeedController(BaseRepoController)'
76 76 limited_diff = True
77 77
78 78 for st in _parsed:
79 st.update({'added': st['stats'][0],
80 'removed': st['stats'][1]})
79 st.update({'added': st['stats']['added'],
80 'removed': st['stats']['deleted']})
81 81 changes.append('\n %(operation)s %(filename)s '
82 82 '(%(added)s lines added, %(removed)s lines removed)'
83 83 % st)
@@ -87,9 +87,8 b' class FeedController(BaseRepoController)'
87 87 return diff_processor, changes
88 88
89 89 def __get_desc(self, cs):
90 desc_msg = []
91 desc_msg.append((_('%s committed on %s')
92 % (h.person(cs.author), h.fmt_date(cs.date))) + '<br/>')
90 desc_msg = [(_('%s committed on %s')
91 % (h.person(cs.author), h.fmt_date(cs.date))) + '<br/>']
93 92 #branches, tags, bookmarks
94 93 if cs.branch:
95 94 desc_msg.append('branch: %s<br/>' % cs.branch)
@@ -118,7 +117,7 b' class FeedController(BaseRepoController)'
118 117 """Produce an atom-1.0 feed via feedgenerator module"""
119 118
120 119 @cache_region('long_term')
121 def _get_feed_from_cache(key):
120 def _get_feed_from_cache(key, kind):
122 121 feed = Atom1Feed(
123 122 title=self.title % repo_name,
124 123 link=url('summary_home', repo_name=repo_name,
@@ -140,18 +139,17 b' class FeedController(BaseRepoController)'
140 139 response.content_type = feed.mime_type
141 140 return feed.writeString('utf-8')
142 141
143 key = repo_name + '_ATOM'
144 inv = CacheInvalidation.invalidate(key)
145 if inv is not None:
146 region_invalidate(_get_feed_from_cache, None, key)
147 CacheInvalidation.set_valid(inv.cache_key)
148 return _get_feed_from_cache(key)
142 kind = 'ATOM'
143 valid = CacheInvalidation.test_and_set_valid(repo_name, kind)
144 if not valid:
145 region_invalidate(_get_feed_from_cache, None, repo_name, kind)
146 return _get_feed_from_cache(repo_name, kind)
149 147
150 148 def rss(self, repo_name):
151 149 """Produce an rss2 feed via feedgenerator module"""
152 150
153 151 @cache_region('long_term')
154 def _get_feed_from_cache(key):
152 def _get_feed_from_cache(key, kind):
155 153 feed = Rss201rev2Feed(
156 154 title=self.title % repo_name,
157 155 link=url('summary_home', repo_name=repo_name,
@@ -173,9 +171,8 b' class FeedController(BaseRepoController)'
173 171 response.content_type = feed.mime_type
174 172 return feed.writeString('utf-8')
175 173
176 key = repo_name + '_RSS'
177 inv = CacheInvalidation.invalidate(key)
178 if inv is not None:
179 region_invalidate(_get_feed_from_cache, None, key)
180 CacheInvalidation.set_valid(inv.cache_key)
181 return _get_feed_from_cache(key)
174 kind = 'RSS'
175 valid = CacheInvalidation.test_and_set_valid(repo_name, kind)
176 if not valid:
177 region_invalidate(_get_feed_from_cache, None, repo_name, kind)
178 return _get_feed_from_cache(repo_name, kind)
@@ -32,7 +32,7 b' import shutil'
32 32 from pylons import request, response, tmpl_context as c, url
33 33 from pylons.i18n.translation import _
34 34 from pylons.controllers.util import redirect
35 from rhodecode.lib.utils import jsonify
35 from rhodecode.lib.utils import jsonify, action_logger
36 36
37 37 from rhodecode.lib import diffs
38 38 from rhodecode.lib import helpers as h
@@ -57,6 +57,7 b' from rhodecode.model.db import Repositor'
57 57 from rhodecode.controllers.changeset import anchor_url, _ignorews_url,\
58 58 _context_url, get_line_ctx, get_ignore_ws
59 59 from webob.exc import HTTPNotFound
60 from rhodecode.lib.exceptions import NonRelativePathError
60 61
61 62
62 63 log = logging.getLogger(__name__)
@@ -303,7 +304,7 b' class FilesController(BaseRepoController'
303 304 first_line = sl[0] if sl else ''
304 305 # modes: 0 - Unix, 1 - Mac, 2 - DOS
305 306 mode = detect_mode(first_line, 0)
306 content = convert_line_endings(r_post.get('content'), mode)
307 content = convert_line_endings(r_post.get('content', ''), mode)
307 308
308 309 message = r_post.get('message') or c.default_message
309 310 author = self.rhodecode_user.full_contact
@@ -352,11 +353,11 b' class FilesController(BaseRepoController'
352 353
353 354 if r_post:
354 355 unix_mode = 0
355 content = convert_line_endings(r_post.get('content'), unix_mode)
356 content = convert_line_endings(r_post.get('content', ''), unix_mode)
356 357
357 358 message = r_post.get('message') or c.default_message
358 359 filename = r_post.get('filename')
359 location = r_post.get('location')
360 location = r_post.get('location', '')
360 361 file_obj = r_post.get('upload_file', None)
361 362
362 363 if file_obj is not None and hasattr(file_obj, 'filename'):
@@ -371,25 +372,32 b' class FilesController(BaseRepoController'
371 372 h.flash(_('No filename'), category='warning')
372 373 return redirect(url('changeset_home', repo_name=c.repo_name,
373 374 revision='tip'))
374 if location.startswith('/') or location.startswith('.') or '../' in location:
375 h.flash(_('Location must be relative path and must not '
376 'contain .. in path'), category='warning')
377 return redirect(url('changeset_home', repo_name=c.repo_name,
378 revision='tip'))
379 if location:
380 location = os.path.normpath(location)
375 #strip all crap out of file, just leave the basename
381 376 filename = os.path.basename(filename)
382 377 node_path = os.path.join(location, filename)
383 378 author = self.rhodecode_user.full_contact
384 379
385 380 try:
386 self.scm_model.create_node(repo=c.rhodecode_repo,
387 repo_name=repo_name, cs=c.cs,
388 user=self.rhodecode_user.user_id,
389 author=author, message=message,
390 content=content, f_path=node_path)
381 nodes = {
382 node_path: {
383 'content': content
384 }
385 }
386 self.scm_model.create_nodes(
387 user=c.rhodecode_user.user_id, repo=c.rhodecode_db_repo,
388 message=message,
389 nodes=nodes,
390 parent_cs=c.cs,
391 author=author,
392 )
393
391 394 h.flash(_('Successfully committed to %s') % node_path,
392 395 category='success')
396 except NonRelativePathError, e:
397 h.flash(_('Location must be relative path and must not '
398 'contain .. in path'), category='warning')
399 return redirect(url('changeset_home', repo_name=c.repo_name,
400 revision='tip'))
393 401 except (NodeError, NodeAlreadyExistsError), e:
394 402 h.flash(_(e), category='error')
395 403 except Exception:
@@ -484,7 +492,10 b' class FilesController(BaseRepoController'
484 492 os.remove(archive)
485 493 break
486 494 yield data
487
495 # store download action
496 action_logger(user=c.rhodecode_user,
497 action='user_downloaded_archive:%s' % (archive_name),
498 repo=repo_name, ipaddr=self.ip_addr, commit=True)
488 499 response.content_disposition = str('attachment; filename=%s' % (archive_name))
489 500 response.content_type = str(content_type)
490 501 return get_chunked_archive(archive)
@@ -37,12 +37,12 b' log = logging.getLogger(__name__)'
37 37
38 38 class FollowersController(BaseRepoController):
39 39
40 def __before__(self):
41 super(FollowersController, self).__before__()
42
40 43 @LoginRequired()
41 44 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
42 45 'repository.admin')
43 def __before__(self):
44 super(FollowersController, self).__before__()
45
46 46 def followers(self, repo_name):
47 47 p = safe_int(request.GET.get('page', 1), 1)
48 48 repo_id = c.rhodecode_db_repo.repo_id
@@ -42,7 +42,7 b' from rhodecode.model.db import Repositor'
42 42 RhodeCodeUi
43 43 from rhodecode.model.repo import RepoModel
44 44 from rhodecode.model.forms import RepoForkForm
45 from rhodecode.model.scm import ScmModel, GroupList
45 from rhodecode.model.scm import ScmModel, RepoGroupList
46 46 from rhodecode.lib.utils2 import safe_int
47 47
48 48 log = logging.getLogger(__name__)
@@ -50,12 +50,11 b' log = logging.getLogger(__name__)'
50 50
51 51 class ForksController(BaseRepoController):
52 52
53 @LoginRequired()
54 53 def __before__(self):
55 54 super(ForksController, self).__before__()
56 55
57 56 def __load_defaults(self):
58 acl_groups = GroupList(RepoGroup.query().all(),
57 acl_groups = RepoGroupList(RepoGroup.query().all(),
59 58 perm_set=['group.write', 'group.admin'])
60 59 c.repo_groups = RepoGroup.groups_choices(groups=acl_groups)
61 60 c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
@@ -78,7 +77,7 b' class ForksController(BaseRepoController'
78 77 h.not_mapped_error(repo_name)
79 78 return redirect(url('repos'))
80 79
81 c.default_user_id = User.get_by_username('default').user_id
80 c.default_user_id = User.get_default_user().user_id
82 81 c.in_public_journal = UserFollowing.query()\
83 82 .filter(UserFollowing.user_id == c.default_user_id)\
84 83 .filter(UserFollowing.follows_repository == c.repo_info).scalar()
@@ -107,6 +106,7 b' class ForksController(BaseRepoController'
107 106
108 107 return defaults
109 108
109 @LoginRequired()
110 110 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
111 111 'repository.admin')
112 112 def forks(self, repo_name):
@@ -128,6 +128,7 b' class ForksController(BaseRepoController'
128 128
129 129 return render('/forks/forks.html')
130 130
131 @LoginRequired()
131 132 @NotAnonymous()
132 133 @HasPermissionAnyDecorator('hg.admin', 'hg.fork.repository')
133 134 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
@@ -147,6 +148,7 b' class ForksController(BaseRepoController'
147 148 force_defaults=False
148 149 )
149 150
151 @LoginRequired()
150 152 @NotAnonymous()
151 153 @HasPermissionAnyDecorator('hg.admin', 'hg.fork.repository')
152 154 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
@@ -32,7 +32,7 b' from sqlalchemy.sql.expression import fu'
32 32
33 33 import rhodecode
34 34 from rhodecode.lib import helpers as h
35 from rhodecode.lib.ext_json import json
35 from rhodecode.lib.compat import json
36 36 from rhodecode.lib.auth import LoginRequired
37 37 from rhodecode.lib.base import BaseController, render
38 38 from rhodecode.model.db import Repository
@@ -44,30 +44,27 b' log = logging.getLogger(__name__)'
44 44
45 45 class HomeController(BaseController):
46 46
47 @LoginRequired()
48 47 def __before__(self):
49 48 super(HomeController, self).__before__()
50 49
50 @LoginRequired()
51 51 def index(self):
52 52 c.groups = self.scm_model.get_repos_groups()
53 53 c.group = None
54 54
55 if not c.visual.lightweight_dashboard:
56 c.repos_list = self.scm_model.get_repos()
57 ## lightweight version of dashboard
58 else:
59 c.repos_list = Repository.query()\
60 .filter(Repository.group_id == None)\
61 .order_by(func.lower(Repository.repo_name))\
62 .all()
55 c.repos_list = Repository.query()\
56 .filter(Repository.group_id == None)\
57 .order_by(func.lower(Repository.repo_name))\
58 .all()
63 59
64 repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list,
65 admin=False)
66 #json used to render the grid
67 c.data = json.dumps(repos_data)
60 repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list,
61 admin=False)
62 #json used to render the grid
63 c.data = json.dumps(repos_data)
68 64
69 65 return render('/index.html')
70 66
67 @LoginRequired()
71 68 def repo_switcher(self):
72 69 if request.is_xhr:
73 70 all_repos = Repository.query().order_by(Repository.repo_name).all()
@@ -78,6 +75,7 b' class HomeController(BaseController):'
78 75 else:
79 76 raise HTTPBadRequest()
80 77
78 @LoginRequired()
81 79 def branch_tag_switcher(self, repo_name):
82 80 if request.is_xhr:
83 81 c.rhodecode_db_repo = Repository.get_by_repo_name(c.repo_name)
@@ -29,21 +29,21 b' from sqlalchemy import or_'
29 29 from sqlalchemy.orm import joinedload
30 30 from sqlalchemy.sql.expression import func
31 31
32 from webhelpers.paginate import Page
33 32 from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed
34 33
35 34 from webob.exc import HTTPBadRequest
36 35 from pylons import request, tmpl_context as c, response, url
37 36 from pylons.i18n.translation import _
38 37
38 from rhodecode.controllers.admin.admin import _journal_filter
39 from rhodecode.model.db import UserLog, UserFollowing, Repository, User
40 from rhodecode.model.meta import Session
41 from rhodecode.model.repo import RepoModel
39 42 import rhodecode.lib.helpers as h
43 from rhodecode.lib.helpers import Page
40 44 from rhodecode.lib.auth import LoginRequired, NotAnonymous
41 45 from rhodecode.lib.base import BaseController, render
42 from rhodecode.model.db import UserLog, UserFollowing, Repository, User
43 from rhodecode.model.meta import Session
44 46 from rhodecode.lib.utils2 import safe_int, AttributeDict
45 from rhodecode.controllers.admin.admin import _journal_filter
46 from rhodecode.model.repo import RepoModel
47 47 from rhodecode.lib.compat import json
48 48
49 49 log = logging.getLogger(__name__)
@@ -58,6 +58,137 b' class JournalController(BaseController):'
58 58 self.feed_nr = 20
59 59 c.search_term = request.GET.get('filter')
60 60
61 def _get_daily_aggregate(self, journal):
62 groups = []
63 for k, g in groupby(journal, lambda x: x.action_as_day):
64 user_group = []
65 #groupby username if it's a present value, else fallback to journal username
66 for _, g2 in groupby(list(g), lambda x: x.user.username if x.user else x.username):
67 l = list(g2)
68 user_group.append((l[0].user, l))
69
70 groups.append((k, user_group,))
71
72 return groups
73
74 def _get_journal_data(self, following_repos):
75 repo_ids = [x.follows_repository.repo_id for x in following_repos
76 if x.follows_repository is not None]
77 user_ids = [x.follows_user.user_id for x in following_repos
78 if x.follows_user is not None]
79
80 filtering_criterion = None
81
82 if repo_ids and user_ids:
83 filtering_criterion = or_(UserLog.repository_id.in_(repo_ids),
84 UserLog.user_id.in_(user_ids))
85 if repo_ids and not user_ids:
86 filtering_criterion = UserLog.repository_id.in_(repo_ids)
87 if not repo_ids and user_ids:
88 filtering_criterion = UserLog.user_id.in_(user_ids)
89 if filtering_criterion is not None:
90 journal = self.sa.query(UserLog)\
91 .options(joinedload(UserLog.user))\
92 .options(joinedload(UserLog.repository))
93 #filter
94 try:
95 journal = _journal_filter(journal, c.search_term)
96 except Exception:
97 # we want this to crash for now
98 raise
99 journal = journal.filter(filtering_criterion)\
100 .order_by(UserLog.action_date.desc())
101 else:
102 journal = []
103
104 return journal
105
106 def _atom_feed(self, repos, public=True):
107 journal = self._get_journal_data(repos)
108 if public:
109 _link = url('public_journal_atom', qualified=True)
110 _desc = '%s %s %s' % (c.rhodecode_name, _('public journal'),
111 'atom feed')
112 else:
113 _link = url('journal_atom', qualified=True)
114 _desc = '%s %s %s' % (c.rhodecode_name, _('journal'), 'atom feed')
115
116 feed = Atom1Feed(title=_desc,
117 link=_link,
118 description=_desc,
119 language=self.language,
120 ttl=self.ttl)
121
122 for entry in journal[:self.feed_nr]:
123 user = entry.user
124 if user is None:
125 #fix deleted users
126 user = AttributeDict({'short_contact': entry.username,
127 'email': '',
128 'full_contact': ''})
129 action, action_extra, ico = h.action_parser(entry, feed=True)
130 title = "%s - %s %s" % (user.short_contact, action(),
131 entry.repository.repo_name)
132 desc = action_extra()
133 _url = None
134 if entry.repository is not None:
135 _url = url('changelog_home',
136 repo_name=entry.repository.repo_name,
137 qualified=True)
138
139 feed.add_item(title=title,
140 pubdate=entry.action_date,
141 link=_url or url('', qualified=True),
142 author_email=user.email,
143 author_name=user.full_contact,
144 description=desc)
145
146 response.content_type = feed.mime_type
147 return feed.writeString('utf-8')
148
149 def _rss_feed(self, repos, public=True):
150 journal = self._get_journal_data(repos)
151 if public:
152 _link = url('public_journal_atom', qualified=True)
153 _desc = '%s %s %s' % (c.rhodecode_name, _('public journal'),
154 'rss feed')
155 else:
156 _link = url('journal_atom', qualified=True)
157 _desc = '%s %s %s' % (c.rhodecode_name, _('journal'), 'rss feed')
158
159 feed = Rss201rev2Feed(title=_desc,
160 link=_link,
161 description=_desc,
162 language=self.language,
163 ttl=self.ttl)
164
165 for entry in journal[:self.feed_nr]:
166 user = entry.user
167 if user is None:
168 #fix deleted users
169 user = AttributeDict({'short_contact': entry.username,
170 'email': '',
171 'full_contact': ''})
172 action, action_extra, ico = h.action_parser(entry, feed=True)
173 title = "%s - %s %s" % (user.short_contact, action(),
174 entry.repository.repo_name)
175 desc = action_extra()
176 _url = None
177 if entry.repository is not None:
178 _url = url('changelog_home',
179 repo_name=entry.repository.repo_name,
180 qualified=True)
181
182 feed.add_item(title=title,
183 pubdate=entry.action_date,
184 link=_url or url('', qualified=True),
185 author_email=user.email,
186 author_name=user.full_contact,
187 description=desc)
188
189 response.content_type = feed.mime_type
190 return feed.writeString('utf-8')
191
61 192 @LoginRequired()
62 193 @NotAnonymous()
63 194 def index(self):
@@ -172,51 +303,6 b' class JournalController(BaseController):'
172 303 .all()
173 304 return self._rss_feed(following, public=False)
174 305
175 def _get_daily_aggregate(self, journal):
176 groups = []
177 for k, g in groupby(journal, lambda x: x.action_as_day):
178 user_group = []
179 #groupby username if it's a present value, else fallback to journal username
180 for _, g2 in groupby(list(g), lambda x: x.user.username if x.user else x.username):
181 l = list(g2)
182 user_group.append((l[0].user, l))
183
184 groups.append((k, user_group,))
185
186 return groups
187
188 def _get_journal_data(self, following_repos):
189 repo_ids = [x.follows_repository.repo_id for x in following_repos
190 if x.follows_repository is not None]
191 user_ids = [x.follows_user.user_id for x in following_repos
192 if x.follows_user is not None]
193
194 filtering_criterion = None
195
196 if repo_ids and user_ids:
197 filtering_criterion = or_(UserLog.repository_id.in_(repo_ids),
198 UserLog.user_id.in_(user_ids))
199 if repo_ids and not user_ids:
200 filtering_criterion = UserLog.repository_id.in_(repo_ids)
201 if not repo_ids and user_ids:
202 filtering_criterion = UserLog.user_id.in_(user_ids)
203 if filtering_criterion is not None:
204 journal = self.sa.query(UserLog)\
205 .options(joinedload(UserLog.user))\
206 .options(joinedload(UserLog.repository))
207 #filter
208 try:
209 journal = _journal_filter(journal, c.search_term)
210 except Exception:
211 # we want this to crash for now
212 raise
213 journal = journal.filter(filtering_criterion)\
214 .order_by(UserLog.action_date.desc())
215 else:
216 journal = []
217
218 return journal
219
220 306 @LoginRequired()
221 307 @NotAnonymous()
222 308 def toggle_following(self):
@@ -268,92 +354,6 b' class JournalController(BaseController):'
268 354 return c.journal_data
269 355 return render('journal/public_journal.html')
270 356
271 def _atom_feed(self, repos, public=True):
272 journal = self._get_journal_data(repos)
273 if public:
274 _link = url('public_journal_atom', qualified=True)
275 _desc = '%s %s %s' % (c.rhodecode_name, _('public journal'),
276 'atom feed')
277 else:
278 _link = url('journal_atom', qualified=True)
279 _desc = '%s %s %s' % (c.rhodecode_name, _('journal'), 'atom feed')
280
281 feed = Atom1Feed(title=_desc,
282 link=_link,
283 description=_desc,
284 language=self.language,
285 ttl=self.ttl)
286
287 for entry in journal[:self.feed_nr]:
288 user = entry.user
289 if user is None:
290 #fix deleted users
291 user = AttributeDict({'short_contact': entry.username,
292 'email': '',
293 'full_contact': ''})
294 action, action_extra, ico = h.action_parser(entry, feed=True)
295 title = "%s - %s %s" % (user.short_contact, action(),
296 entry.repository.repo_name)
297 desc = action_extra()
298 _url = None
299 if entry.repository is not None:
300 _url = url('changelog_home',
301 repo_name=entry.repository.repo_name,
302 qualified=True)
303
304 feed.add_item(title=title,
305 pubdate=entry.action_date,
306 link=_url or url('', qualified=True),
307 author_email=user.email,
308 author_name=user.full_contact,
309 description=desc)
310
311 response.content_type = feed.mime_type
312 return feed.writeString('utf-8')
313
314 def _rss_feed(self, repos, public=True):
315 journal = self._get_journal_data(repos)
316 if public:
317 _link = url('public_journal_atom', qualified=True)
318 _desc = '%s %s %s' % (c.rhodecode_name, _('public journal'),
319 'rss feed')
320 else:
321 _link = url('journal_atom', qualified=True)
322 _desc = '%s %s %s' % (c.rhodecode_name, _('journal'), 'rss feed')
323
324 feed = Rss201rev2Feed(title=_desc,
325 link=_link,
326 description=_desc,
327 language=self.language,
328 ttl=self.ttl)
329
330 for entry in journal[:self.feed_nr]:
331 user = entry.user
332 if user is None:
333 #fix deleted users
334 user = AttributeDict({'short_contact': entry.username,
335 'email': '',
336 'full_contact': ''})
337 action, action_extra, ico = h.action_parser(entry, feed=True)
338 title = "%s - %s %s" % (user.short_contact, action(),
339 entry.repository.repo_name)
340 desc = action_extra()
341 _url = None
342 if entry.repository is not None:
343 _url = url('changelog_home',
344 repo_name=entry.repository.repo_name,
345 qualified=True)
346
347 feed.add_item(title=title,
348 pubdate=entry.action_date,
349 link=_url or url('', qualified=True),
350 author_email=user.email,
351 author_name=user.full_contact,
352 description=desc)
353
354 response.content_type = feed.mime_type
355 return feed.writeString('utf-8')
356
357 357 @LoginRequired(api_access=True)
358 358 def public_journal_atom(self):
359 359 """
@@ -126,7 +126,7 b' class LoginController(BaseController):'
126 126 @HasPermissionAnyDecorator('hg.admin', 'hg.register.auto_activate',
127 127 'hg.register.manual_activate')
128 128 def register(self):
129 c.auto_active = 'hg.register.auto_activate' in User.get_by_username('default')\
129 c.auto_active = 'hg.register.auto_activate' in User.get_default_user()\
130 130 .AuthUser.permissions['global']
131 131
132 132 if request.POST:
@@ -30,8 +30,8 b' from webob.exc import HTTPNotFound, HTTP'
30 30 from collections import defaultdict
31 31 from itertools import groupby
32 32
33 from pylons import request, response, session, tmpl_context as c, url
34 from pylons.controllers.util import abort, redirect
33 from pylons import request, tmpl_context as c, url
34 from pylons.controllers.util import redirect
35 35 from pylons.i18n.translation import _
36 36
37 37 from rhodecode.lib.compat import json
@@ -42,18 +42,16 b' from rhodecode.lib.helpers import Page'
42 42 from rhodecode.lib import helpers as h
43 43 from rhodecode.lib import diffs
44 44 from rhodecode.lib.utils import action_logger, jsonify
45 from rhodecode.lib.vcs.utils import safe_str
45 46 from rhodecode.lib.vcs.exceptions import EmptyRepositoryError
46 from rhodecode.lib.vcs.backends.base import EmptyChangeset
47 47 from rhodecode.lib.diffs import LimitedDiffContainer
48 from rhodecode.model.db import User, PullRequest, ChangesetStatus,\
49 ChangesetComment
48 from rhodecode.model.db import PullRequest, ChangesetStatus, ChangesetComment
50 49 from rhodecode.model.pull_request import PullRequestModel
51 50 from rhodecode.model.meta import Session
52 51 from rhodecode.model.repo import RepoModel
53 52 from rhodecode.model.comment import ChangesetCommentsModel
54 53 from rhodecode.model.changeset_status import ChangesetStatusModel
55 54 from rhodecode.model.forms import PullRequestForm
56 from mercurial import scmutil
57 55 from rhodecode.lib.utils2 import safe_int
58 56
59 57 log = logging.getLogger(__name__)
@@ -61,47 +59,67 b' log = logging.getLogger(__name__)'
61 59
62 60 class PullrequestsController(BaseRepoController):
63 61
64 @LoginRequired()
65 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
66 'repository.admin')
67 62 def __before__(self):
68 63 super(PullrequestsController, self).__before__()
69 64 repo_model = RepoModel()
70 65 c.users_array = repo_model.get_users_js()
71 66 c.users_groups_array = repo_model.get_users_groups_js()
72 67
73 def _get_repo_refs(self, repo, rev=None, branch_rev=None):
68 def _get_repo_refs(self, repo, rev=None, branch=None, branch_rev=None):
74 69 """return a structure with repo's interesting changesets, suitable for
75 the selectors in pullrequest.html"""
70 the selectors in pullrequest.html
76 71
72 rev: a revision that must be in the list somehow and selected by default
73 branch: a branch that must be in the list and selected by default - even if closed
74 branch_rev: a revision of which peers should be preferred and available."""
77 75 # list named branches that has been merged to this named branch - it should probably merge back
78 76 peers = []
77
78 if rev:
79 rev = safe_str(rev)
80
81 if branch:
82 branch = safe_str(branch)
83
79 84 if branch_rev:
85 branch_rev = safe_str(branch_rev)
80 86 # not restricting to merge() would also get branch point and be better
81 87 # (especially because it would get the branch point) ... but is currently too expensive
82 revs = ["sort(parents(branch(id('%s')) and merge()) - branch(id('%s')))" %
83 (branch_rev, branch_rev)]
84 88 otherbranches = {}
85 for i in scmutil.revrange(repo._repo, revs):
89 for i in repo._repo.revs(
90 "sort(parents(branch(id(%s)) and merge()) - branch(id(%s)))",
91 branch_rev, branch_rev):
86 92 cs = repo.get_changeset(i)
87 93 otherbranches[cs.branch] = cs.raw_id
88 for branch, node in otherbranches.iteritems():
89 selected = 'branch:%s:%s' % (branch, node)
90 peers.append((selected, branch))
94 for abranch, node in otherbranches.iteritems():
95 selected = 'branch:%s:%s' % (abranch, node)
96 peers.append((selected, abranch))
91 97
92 98 selected = None
99
93 100 branches = []
94 for branch, branchrev in repo.branches.iteritems():
95 n = 'branch:%s:%s' % (branch, branchrev)
96 branches.append((n, branch))
101 for abranch, branchrev in repo.branches.iteritems():
102 n = 'branch:%s:%s' % (abranch, branchrev)
103 branches.append((n, abranch))
97 104 if rev == branchrev:
98 105 selected = n
106 if branch == abranch:
107 selected = n
108 branch = None
109 if branch: # branch not in list - it is probably closed
110 revs = repo._repo.revs('max(branch(%s))', branch)
111 if revs:
112 cs = repo.get_changeset(revs[0])
113 selected = 'branch:%s:%s' % (branch, cs.raw_id)
114 branches.append((selected, branch))
115
99 116 bookmarks = []
100 117 for bookmark, bookmarkrev in repo.bookmarks.iteritems():
101 118 n = 'book:%s:%s' % (bookmark, bookmarkrev)
102 119 bookmarks.append((n, bookmark))
103 120 if rev == bookmarkrev:
104 121 selected = n
122
105 123 tags = []
106 124 for tag, tagrev in repo.tags.iteritems():
107 125 n = 'tag:%s:%s' % (tag, tagrev)
@@ -139,6 +157,74 b' class PullrequestsController(BaseRepoCon'
139 157 pull_request.reviewers]
140 158 return (self.rhodecode_user.admin or owner or reviewer)
141 159
160 def _load_compare_data(self, pull_request, enable_comments=True):
161 """
162 Load context data needed for generating compare diff
163
164 :param pull_request:
165 """
166 org_repo = pull_request.org_repo
167 (org_ref_type,
168 org_ref_name,
169 org_ref_rev) = pull_request.org_ref.split(':')
170
171 other_repo = org_repo
172 (other_ref_type,
173 other_ref_name,
174 other_ref_rev) = pull_request.other_ref.split(':')
175
176 # despite opening revisions for bookmarks/branches/tags, we always
177 # convert this to rev to prevent changes after bookmark or branch change
178 org_ref = ('rev', org_ref_rev)
179 other_ref = ('rev', other_ref_rev)
180
181 c.org_repo = org_repo
182 c.other_repo = other_repo
183
184 c.fulldiff = fulldiff = request.GET.get('fulldiff')
185
186 c.cs_ranges = [org_repo.get_changeset(x) for x in pull_request.revisions]
187
188 c.statuses = org_repo.statuses([x.raw_id for x in c.cs_ranges])
189
190 c.org_ref = org_ref[1]
191 c.org_ref_type = org_ref[0]
192 c.other_ref = other_ref[1]
193 c.other_ref_type = other_ref[0]
194
195 diff_limit = self.cut_off_limit if not fulldiff else None
196
197 # we swap org/other ref since we run a simple diff on one repo
198 log.debug('running diff between %s and %s in %s'
199 % (other_ref, org_ref, org_repo.scm_instance.path))
200 txtdiff = org_repo.scm_instance.get_diff(rev1=safe_str(other_ref[1]), rev2=safe_str(org_ref[1]))
201
202 diff_processor = diffs.DiffProcessor(txtdiff or '', format='gitdiff',
203 diff_limit=diff_limit)
204 _parsed = diff_processor.prepare()
205
206 c.limited_diff = False
207 if isinstance(_parsed, LimitedDiffContainer):
208 c.limited_diff = True
209
210 c.files = []
211 c.changes = {}
212 c.lines_added = 0
213 c.lines_deleted = 0
214
215 for f in _parsed:
216 st = f['stats']
217 c.lines_added += st['added']
218 c.lines_deleted += st['deleted']
219 fid = h.FID('', f['filename'])
220 c.files.append([fid, f['operation'], f['filename'], f['stats']])
221 htmldiff = diff_processor.as_html(enable_comments=enable_comments,
222 parsed_lines=[f])
223 c.changes[fid] = [f['operation'], f['filename'], htmldiff]
224
225 @LoginRequired()
226 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
227 'repository.admin')
142 228 def show_all(self, repo_name):
143 229 c.pull_requests = PullRequestModel().get_all(repo_name)
144 230 c.repo_name = repo_name
@@ -153,7 +239,10 b' class PullrequestsController(BaseRepoCon'
153 239
154 240 return render('/pullrequests/pullrequest_show_all.html')
155 241
242 @LoginRequired()
156 243 @NotAnonymous()
244 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
245 'repository.admin')
157 246 def index(self):
158 247 org_repo = c.rhodecode_db_repo
159 248
@@ -172,11 +261,12 b' class PullrequestsController(BaseRepoCon'
172 261 # rev_start is not directly useful - its parent could however be used
173 262 # as default for other and thus give a simple compare view
174 263 #other_rev = request.POST.get('rev_start')
264 branch = request.GET.get('branch')
175 265
176 266 c.org_repos = []
177 267 c.org_repos.append((org_repo.repo_name, org_repo.repo_name))
178 268 c.default_org_repo = org_repo.repo_name
179 c.org_refs, c.default_org_ref = self._get_repo_refs(org_repo.scm_instance, org_rev)
269 c.org_refs, c.default_org_ref = self._get_repo_refs(org_repo.scm_instance, rev=org_rev, branch=branch)
180 270
181 271 c.other_repos = []
182 272 other_repos_info = {}
@@ -215,7 +305,10 b' class PullrequestsController(BaseRepoCon'
215 305
216 306 return render('/pullrequests/pullrequest.html')
217 307
308 @LoginRequired()
218 309 @NotAnonymous()
310 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
311 'repository.admin')
219 312 def create(self, repo_name):
220 313 repo = RepoModel()._get_repo(repo_name)
221 314 try:
@@ -236,12 +329,11 b' class PullrequestsController(BaseRepoCon'
236 329 org_ref = 'rev:merge:%s' % _form['merge_rev']
237 330 other_repo = _form['other_repo']
238 331 other_ref = 'rev:ancestor:%s' % _form['ancestor_rev']
239 revisions = _form['revisions']
332 revisions = [x for x in reversed(_form['revisions'])]
240 333 reviewers = _form['review_members']
241 334
242 335 title = _form['pullrequest_title']
243 336 description = _form['pullrequest_desc']
244
245 337 try:
246 338 pull_request = PullRequestModel().create(
247 339 self.rhodecode_user.user_id, org_repo, org_ref, other_repo,
@@ -259,7 +351,10 b' class PullrequestsController(BaseRepoCon'
259 351 return redirect(url('pullrequest_show', repo_name=other_repo,
260 352 pull_request_id=pull_request.pull_request_id))
261 353
354 @LoginRequired()
262 355 @NotAnonymous()
356 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
357 'repository.admin')
263 358 @jsonify
264 359 def update(self, repo_name, pull_request_id):
265 360 pull_request = PullRequest.get_or_404(pull_request_id)
@@ -276,7 +371,10 b' class PullrequestsController(BaseRepoCon'
276 371 return True
277 372 raise HTTPForbidden()
278 373
374 @LoginRequired()
279 375 @NotAnonymous()
376 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
377 'repository.admin')
280 378 @jsonify
281 379 def delete(self, repo_name, pull_request_id):
282 380 pull_request = PullRequest.get_or_404(pull_request_id)
@@ -289,70 +387,9 b' class PullrequestsController(BaseRepoCon'
289 387 return redirect(url('admin_settings_my_account', anchor='pullrequests'))
290 388 raise HTTPForbidden()
291 389
292 def _load_compare_data(self, pull_request, enable_comments=True):
293 """
294 Load context data needed for generating compare diff
295
296 :param pull_request:
297 :type pull_request:
298 """
299 org_repo = pull_request.org_repo
300 (org_ref_type,
301 org_ref_name,
302 org_ref_rev) = pull_request.org_ref.split(':')
303
304 other_repo = org_repo
305 (other_ref_type,
306 other_ref_name,
307 other_ref_rev) = pull_request.other_ref.split(':')
308
309 # despite opening revisions for bookmarks/branches/tags, we always
310 # convert this to rev to prevent changes after bookmark or branch change
311 org_ref = ('rev', org_ref_rev)
312 other_ref = ('rev', other_ref_rev)
313
314 c.org_repo = org_repo
315 c.other_repo = other_repo
316
317 c.fulldiff = fulldiff = request.GET.get('fulldiff')
318
319 c.cs_ranges = [org_repo.get_changeset(x) for x in pull_request.revisions]
320
321 c.statuses = org_repo.statuses([x.raw_id for x in c.cs_ranges])
322
323 c.org_ref = org_ref[1]
324 c.org_ref_type = org_ref[0]
325 c.other_ref = other_ref[1]
326 c.other_ref_type = other_ref[0]
327
328 diff_limit = self.cut_off_limit if not fulldiff else None
329
330 #we swap org/other ref since we run a simple diff on one repo
331 _diff = diffs.differ(org_repo, other_ref, other_repo, org_ref)
332
333 diff_processor = diffs.DiffProcessor(_diff or '', format='gitdiff',
334 diff_limit=diff_limit)
335 _parsed = diff_processor.prepare()
336
337 c.limited_diff = False
338 if isinstance(_parsed, LimitedDiffContainer):
339 c.limited_diff = True
340
341 c.files = []
342 c.changes = {}
343 c.lines_added = 0
344 c.lines_deleted = 0
345 for f in _parsed:
346 st = f['stats']
347 if st[0] != 'b':
348 c.lines_added += st[0]
349 c.lines_deleted += st[1]
350 fid = h.FID('', f['filename'])
351 c.files.append([fid, f['operation'], f['filename'], f['stats']])
352 diff = diff_processor.as_html(enable_comments=enable_comments,
353 parsed_lines=[f])
354 c.changes[fid] = [f['operation'], f['filename'], diff]
355
390 @LoginRequired()
391 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
392 'repository.admin')
356 393 def show(self, repo_name, pull_request_id):
357 394 repo_model = RepoModel()
358 395 c.users_array = repo_model.get_users_js()
@@ -421,7 +458,10 b' class PullrequestsController(BaseRepoCon'
421 458 c.ancestor = None # there is one - but right here we don't know which
422 459 return render('/pullrequests/pullrequest_show.html')
423 460
461 @LoginRequired()
424 462 @NotAnonymous()
463 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
464 'repository.admin')
425 465 @jsonify
426 466 def comment(self, repo_name, pull_request_id):
427 467 pull_request = PullRequest.get_or_404(pull_request_id)
@@ -496,7 +536,10 b' class PullrequestsController(BaseRepoCon'
496 536
497 537 return data
498 538
539 @LoginRequired()
499 540 @NotAnonymous()
541 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
542 'repository.admin')
500 543 @jsonify
501 544 def delete_comment(self, repo_name, comment_id):
502 545 co = ChangesetComment.get(comment_id)
@@ -28,30 +28,28 b' import urllib'
28 28 from pylons.i18n.translation import _
29 29 from pylons import request, config, tmpl_context as c
30 30
31 from whoosh.index import open_dir, EmptyIndexError
32 from whoosh.qparser import QueryParser, QueryParserError
33 from whoosh.query import Phrase, Wildcard, Term, Prefix
34 from webhelpers.util import update_params
35
31 36 from rhodecode.lib.auth import LoginRequired
32 37 from rhodecode.lib.base import BaseRepoController, render
33 38 from rhodecode.lib.indexers import CHGSETS_SCHEMA, SCHEMA, CHGSET_IDX_NAME, \
34 39 IDX_NAME, WhooshResultWrapper
35
36 from webhelpers.paginate import Page
37 from webhelpers.util import update_params
38
39 from whoosh.index import open_dir, EmptyIndexError
40 from whoosh.qparser import QueryParser, QueryParserError
41 from whoosh.query import Phrase, Wildcard, Term, Prefix
42 40 from rhodecode.model.repo import RepoModel
43 41 from rhodecode.lib.utils2 import safe_str, safe_int
44
42 from rhodecode.lib.helpers import Page
45 43
46 44 log = logging.getLogger(__name__)
47 45
48 46
49 47 class SearchController(BaseRepoController):
50 48
51 @LoginRequired()
52 49 def __before__(self):
53 50 super(SearchController, self).__before__()
54 51
52 @LoginRequired()
55 53 def index(self, repo_name=None):
56 54 c.repo_name = repo_name
57 55 c.formated_results = []
@@ -55,6 +55,7 b' from rhodecode.lib.celerylib.tasks impor'
55 55 from rhodecode.lib.helpers import RepoPage
56 56 from rhodecode.lib.compat import json, OrderedDict
57 57 from rhodecode.lib.vcs.nodes import FileNode
58 from rhodecode.controllers.changelog import _load_changelog_summary
58 59
59 60 log = logging.getLogger(__name__)
60 61
@@ -65,23 +66,76 b" README_FILES = [''.join([x[0][0], x[1][0"
65 66
66 67 class SummaryController(BaseRepoController):
67 68
68 @LoginRequired()
69 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
70 'repository.admin')
71 69 def __before__(self):
72 70 super(SummaryController, self).__before__()
73 71
72 def _get_download_links(self, repo):
73
74 download_l = []
75
76 branches_group = ([], _("Branches"))
77 tags_group = ([], _("Tags"))
78
79 for name, chs in c.rhodecode_repo.branches.items():
80 #chs = chs.split(':')[-1]
81 branches_group[0].append((chs, name),)
82 download_l.append(branches_group)
83
84 for name, chs in c.rhodecode_repo.tags.items():
85 #chs = chs.split(':')[-1]
86 tags_group[0].append((chs, name),)
87 download_l.append(tags_group)
88
89 return download_l
90
91 def __get_readme_data(self, db_repo):
92 repo_name = db_repo.repo_name
93
94 @cache_region('long_term')
95 def _get_readme_from_cache(key, kind):
96 readme_data = None
97 readme_file = None
98 log.debug('Looking for README file')
99 try:
100 # get's the landing revision! or tip if fails
101 cs = db_repo.get_landing_changeset()
102 if isinstance(cs, EmptyChangeset):
103 raise EmptyRepositoryError()
104 renderer = MarkupRenderer()
105 for f in README_FILES:
106 try:
107 readme = cs.get_node(f)
108 if not isinstance(readme, FileNode):
109 continue
110 readme_file = f
111 log.debug('Found README file `%s` rendering...' %
112 readme_file)
113 readme_data = renderer.render(readme.content, f)
114 break
115 except NodeDoesNotExistError:
116 continue
117 except ChangesetError:
118 log.error(traceback.format_exc())
119 pass
120 except EmptyRepositoryError:
121 pass
122 except Exception:
123 log.error(traceback.format_exc())
124
125 return readme_data, readme_file
126
127 kind = 'README'
128 valid = CacheInvalidation.test_and_set_valid(repo_name, kind)
129 if not valid:
130 region_invalidate(_get_readme_from_cache, None, repo_name, kind)
131 return _get_readme_from_cache(repo_name, kind)
132
133 @LoginRequired()
134 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
135 'repository.admin')
74 136 def index(self, repo_name):
75 137 c.dbrepo = dbrepo = c.rhodecode_db_repo
76
77 def url_generator(**kw):
78 return url('shortlog_home', repo_name=repo_name, size=10, **kw)
79
80 c.repo_changesets = RepoPage(c.rhodecode_repo, page=1,
81 items_per_page=10, url=url_generator)
82 page_revisions = [x.raw_id for x in list(c.repo_changesets)]
83 c.statuses = c.rhodecode_db_repo.statuses(page_revisions)
84
138 _load_changelog_summary()
85 139 if self.rhodecode_user.username == 'default':
86 140 # for default(anonymous) user we don't need to pass credentials
87 141 username = ''
@@ -114,19 +168,6 b' class SummaryController(BaseRepoControll'
114 168
115 169 c.clone_repo_url = uri
116 170 c.clone_repo_url_id = uri_id
117 c.repo_tags = OrderedDict()
118 for name, hash_ in c.rhodecode_repo.tags.items()[:10]:
119 try:
120 c.repo_tags[name] = c.rhodecode_repo.get_changeset(hash_)
121 except ChangesetError:
122 c.repo_tags[name] = EmptyChangeset(hash_)
123
124 c.repo_branches = OrderedDict()
125 for name, hash_ in c.rhodecode_repo.branches.items()[:10]:
126 try:
127 c.repo_branches[name] = c.rhodecode_repo.get_changeset(hash_)
128 except ChangesetError:
129 c.repo_branches[name] = EmptyChangeset(hash_)
130 171
131 172 td = date.today() + timedelta(days=1)
132 173 td_1m = td - timedelta(days=calendar.mdays[td.month])
@@ -189,72 +230,13 b' class SummaryController(BaseRepoControll'
189 230 self.__get_readme_data(c.rhodecode_db_repo)
190 231 return render('summary/summary.html')
191 232
233 @LoginRequired()
192 234 @NotAnonymous()
235 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
236 'repository.admin')
193 237 @jsonify
194 238 def repo_size(self, repo_name):
195 239 if request.is_xhr:
196 240 return c.rhodecode_db_repo._repo_size()
197 241 else:
198 242 raise HTTPBadRequest()
199
200 def __get_readme_data(self, db_repo):
201 repo_name = db_repo.repo_name
202
203 @cache_region('long_term')
204 def _get_readme_from_cache(key):
205 readme_data = None
206 readme_file = None
207 log.debug('Looking for README file')
208 try:
209 # get's the landing revision! or tip if fails
210 cs = db_repo.get_landing_changeset()
211 if isinstance(cs, EmptyChangeset):
212 raise EmptyRepositoryError()
213 renderer = MarkupRenderer()
214 for f in README_FILES:
215 try:
216 readme = cs.get_node(f)
217 if not isinstance(readme, FileNode):
218 continue
219 readme_file = f
220 log.debug('Found README file `%s` rendering...' %
221 readme_file)
222 readme_data = renderer.render(readme.content, f)
223 break
224 except NodeDoesNotExistError:
225 continue
226 except ChangesetError:
227 log.error(traceback.format_exc())
228 pass
229 except EmptyRepositoryError:
230 pass
231 except Exception:
232 log.error(traceback.format_exc())
233
234 return readme_data, readme_file
235
236 key = repo_name + '_README'
237 inv = CacheInvalidation.invalidate(key)
238 if inv is not None:
239 region_invalidate(_get_readme_from_cache, None, key)
240 CacheInvalidation.set_valid(inv.cache_key)
241 return _get_readme_from_cache(key)
242
243 def _get_download_links(self, repo):
244
245 download_l = []
246
247 branches_group = ([], _("Branches"))
248 tags_group = ([], _("Tags"))
249
250 for name, chs in c.rhodecode_repo.branches.items():
251 #chs = chs.split(':')[-1]
252 branches_group[0].append((chs, name),)
253 download_l.append(branches_group)
254
255 for name, chs in c.rhodecode_repo.tags.items():
256 #chs = chs.split(':')[-1]
257 tags_group[0].append((chs, name),)
258 download_l.append(tags_group)
259
260 return download_l
@@ -35,12 +35,12 b' log = logging.getLogger(__name__)'
35 35
36 36 class TagsController(BaseRepoController):
37 37
38 def __before__(self):
39 super(TagsController, self).__before__()
40
38 41 @LoginRequired()
39 42 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
40 43 'repository.admin')
41 def __before__(self):
42 super(TagsController, self).__before__()
43
44 44 def index(self):
45 45 c.repo_tags = OrderedDict()
46 46
1 NO CONTENT: modified file, binary diff hidden
This diff has been collapsed as it changes many lines, (2265 lines changed) Show them Hide them
@@ -7,7 +7,7 b' msgid ""'
7 7 msgstr ""
8 8 "Project-Id-Version: rhodecode 0.1\n"
9 9 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
10 "POT-Creation-Date: 2013-04-05 10:19-0700\n"
10 "POT-Creation-Date: 2013-06-01 18:38+0200\n"
11 11 "PO-Revision-Date: 2011-02-25 19:13+0100\n"
12 12 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13 13 "Language-Team: en <LL@li.org>\n"
@@ -17,38 +17,37 b' msgstr ""'
17 17 "Content-Transfer-Encoding: 8bit\n"
18 18 "Generated-By: Babel 0.9.6\n"
19 19
20 #: rhodecode/controllers/changelog.py:95
20 #: rhodecode/controllers/changelog.py:149
21 21 msgid "All Branches"
22 22 msgstr ""
23 23
24 #: rhodecode/controllers/changeset.py:83
24 #: rhodecode/controllers/changeset.py:84
25 25 msgid "Show white space"
26 26 msgstr ""
27 27
28 #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97
28 #: rhodecode/controllers/changeset.py:91 rhodecode/controllers/changeset.py:98
29 29 msgid "Ignore white space"
30 30 msgstr ""
31 31
32 #: rhodecode/controllers/changeset.py:163
32 #: rhodecode/controllers/changeset.py:164
33 33 #, python-format
34 34 msgid "%s line context"
35 35 msgstr ""
36 36
37 #: rhodecode/controllers/changeset.py:329
38 #: rhodecode/controllers/pullrequests.py:438
37 #: rhodecode/controllers/changeset.py:345
38 #: rhodecode/controllers/pullrequests.py:481
39 39 #, python-format
40 40 msgid "Status change -> %s"
41 41 msgstr ""
42 42
43 #: rhodecode/controllers/changeset.py:360
43 #: rhodecode/controllers/changeset.py:376
44 44 msgid ""
45 45 "Changing status on a changeset associated with a closed pull request is "
46 46 "not allowed"
47 47 msgstr ""
48 48
49 49 #: rhodecode/controllers/compare.py:74
50 #: rhodecode/controllers/pullrequests.py:167
51 #: rhodecode/controllers/shortlog.py:100
50 #: rhodecode/controllers/pullrequests.py:259
52 51 msgid "There are no changesets yet"
53 52 msgstr ""
54 53
@@ -89,8 +88,8 b' msgid "%s %s feed"'
89 88 msgstr ""
90 89
91 90 #: rhodecode/controllers/feed.py:86
92 #: rhodecode/templates/changeset/changeset.html:134
93 #: rhodecode/templates/changeset/changeset.html:146
91 #: rhodecode/templates/changeset/changeset.html:141
92 #: rhodecode/templates/changeset/changeset.html:153
94 93 #: rhodecode/templates/compare/compare_diff.html:58
95 94 #: rhodecode/templates/compare/compare_diff.html:69
96 95 #: rhodecode/templates/pullrequests/pullrequest_show.html:131
@@ -98,115 +97,116 b' msgstr ""'
98 97 msgid "Changeset was too big and was cut off..."
99 98 msgstr ""
100 99
101 #: rhodecode/controllers/feed.py:91
100 #: rhodecode/controllers/feed.py:90
102 101 #, python-format
103 102 msgid "%s committed on %s"
104 103 msgstr ""
105 104
106 #: rhodecode/controllers/files.py:88
107 msgid "Click here to add new file"
108 msgstr ""
109
110 105 #: rhodecode/controllers/files.py:89
106 msgid "Click here to add new file"
107 msgstr ""
108
109 #: rhodecode/controllers/files.py:90
111 110 #, python-format
112 111 msgid "There are no files yet %s"
113 112 msgstr ""
114 113
115 #: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335
114 #: rhodecode/controllers/files.py:271 rhodecode/controllers/files.py:339
116 115 #, python-format
117 116 msgid "This repository is has been locked by %s on %s"
118 117 msgstr ""
119 118
120 #: rhodecode/controllers/files.py:279
119 #: rhodecode/controllers/files.py:283
121 120 msgid "You can only edit files with revision being a valid branch "
122 121 msgstr ""
123 122
124 #: rhodecode/controllers/files.py:293
123 #: rhodecode/controllers/files.py:297
125 124 #, python-format
126 125 msgid "Edited file %s via RhodeCode"
127 126 msgstr ""
128 127
129 #: rhodecode/controllers/files.py:309
128 #: rhodecode/controllers/files.py:313
130 129 msgid "No changes"
131 130 msgstr ""
132 131
133 #: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388
132 #: rhodecode/controllers/files.py:322 rhodecode/controllers/files.py:394
134 133 #, python-format
135 134 msgid "Successfully committed to %s"
136 135 msgstr ""
137 136
138 #: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394
137 #: rhodecode/controllers/files.py:327 rhodecode/controllers/files.py:405
139 138 msgid "Error occurred during commit"
140 139 msgstr ""
141 140
142 #: rhodecode/controllers/files.py:347
141 #: rhodecode/controllers/files.py:351
143 142 msgid "Added file via RhodeCode"
144 143 msgstr ""
145 144
146 #: rhodecode/controllers/files.py:364
147 msgid "No content"
148 msgstr ""
149
150 145 #: rhodecode/controllers/files.py:368
151 msgid "No filename"
146 msgid "No content"
152 147 msgstr ""
153 148
154 149 #: rhodecode/controllers/files.py:372
150 msgid "No filename"
151 msgstr ""
152
153 #: rhodecode/controllers/files.py:397
155 154 msgid "Location must be relative path and must not contain .. in path"
156 155 msgstr ""
157 156
158 #: rhodecode/controllers/files.py:420
159 msgid "Downloads disabled"
160 msgstr ""
161
162 157 #: rhodecode/controllers/files.py:431
158 msgid "Downloads disabled"
159 msgstr ""
160
161 #: rhodecode/controllers/files.py:442
163 162 #, python-format
164 163 msgid "Unknown revision %s"
165 164 msgstr ""
166 165
167 #: rhodecode/controllers/files.py:433
166 #: rhodecode/controllers/files.py:444
168 167 msgid "Empty repository"
169 168 msgstr ""
170 169
171 #: rhodecode/controllers/files.py:435
170 #: rhodecode/controllers/files.py:446
172 171 msgid "Unknown archive type"
173 172 msgstr ""
174 173
175 #: rhodecode/controllers/files.py:617
174 #: rhodecode/controllers/files.py:631
176 175 #: rhodecode/templates/changeset/changeset_range.html:9
176 #: rhodecode/templates/email_templates/pull_request.html:12
177 #: rhodecode/templates/pullrequests/pullrequest.html:124
177 178 msgid "Changesets"
178 179 msgstr ""
179 180
180 #: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131
181 #: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606
181 #: rhodecode/controllers/files.py:632 rhodecode/controllers/pullrequests.py:152
182 #: rhodecode/controllers/summary.py:76 rhodecode/model/scm.py:682
182 183 #: rhodecode/templates/switch_to_list.html:3
183 184 #: rhodecode/templates/branches/branches.html:10
184 185 msgid "Branches"
185 186 msgstr ""
186 187
187 #: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132
188 #: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617
188 #: rhodecode/controllers/files.py:633 rhodecode/controllers/pullrequests.py:153
189 #: rhodecode/controllers/summary.py:77 rhodecode/model/scm.py:693
189 190 #: rhodecode/templates/switch_to_list.html:15
190 #: rhodecode/templates/shortlog/shortlog_data.html:10
191 191 #: rhodecode/templates/tags/tags.html:10
192 192 msgid "Tags"
193 193 msgstr ""
194 194
195 #: rhodecode/controllers/forks.py:175
195 #: rhodecode/controllers/forks.py:176
196 196 #, python-format
197 197 msgid "Forked repository %s as %s"
198 198 msgstr ""
199 199
200 #: rhodecode/controllers/forks.py:189
200 #: rhodecode/controllers/forks.py:190
201 201 #, python-format
202 202 msgid "An error occurred during repository forking %s"
203 203 msgstr ""
204 204
205 #: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318
205 #: rhodecode/controllers/journal.py:110 rhodecode/controllers/journal.py:153
206 206 msgid "public journal"
207 207 msgstr ""
208 208
209 #: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322
209 #: rhodecode/controllers/journal.py:114 rhodecode/controllers/journal.py:157
210 210 #: rhodecode/templates/journal/journal.html:12
211 211 msgid "journal"
212 212 msgstr ""
@@ -225,71 +225,71 b' msgid ""'
225 225 "email"
226 226 msgstr ""
227 227
228 #: rhodecode/controllers/pullrequests.py:118
228 #: rhodecode/controllers/pullrequests.py:139
229 229 #: rhodecode/templates/changeset/changeset.html:10
230 #: rhodecode/templates/email_templates/changeset_comment.html:15
230 #: rhodecode/templates/email_templates/changeset_comment.html:8
231 231 msgid "Changeset"
232 232 msgstr ""
233 233
234 #: rhodecode/controllers/pullrequests.py:128
234 #: rhodecode/controllers/pullrequests.py:149
235 235 msgid "Special"
236 236 msgstr ""
237 237
238 #: rhodecode/controllers/pullrequests.py:129
238 #: rhodecode/controllers/pullrequests.py:150
239 239 msgid "Peer branches"
240 240 msgstr ""
241 241
242 #: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612
242 #: rhodecode/controllers/pullrequests.py:151 rhodecode/model/scm.py:688
243 243 #: rhodecode/templates/switch_to_list.html:28
244 244 #: rhodecode/templates/bookmarks/bookmarks.html:10
245 245 msgid "Bookmarks"
246 246 msgstr ""
247 247
248 #: rhodecode/controllers/pullrequests.py:228
248 #: rhodecode/controllers/pullrequests.py:324
249 249 msgid "Pull request requires a title with min. 3 chars"
250 250 msgstr ""
251 251
252 #: rhodecode/controllers/pullrequests.py:230
252 #: rhodecode/controllers/pullrequests.py:326
253 253 msgid "Error creating pull request"
254 254 msgstr ""
255 255
256 #: rhodecode/controllers/pullrequests.py:251
256 #: rhodecode/controllers/pullrequests.py:346
257 257 msgid "Successfully opened new pull request"
258 258 msgstr ""
259 259
260 #: rhodecode/controllers/pullrequests.py:254
260 #: rhodecode/controllers/pullrequests.py:349
261 261 msgid "Error occurred during sending pull request"
262 262 msgstr ""
263 263
264 #: rhodecode/controllers/pullrequests.py:287
264 #: rhodecode/controllers/pullrequests.py:388
265 265 msgid "Successfully deleted pull request"
266 266 msgstr ""
267 267
268 #: rhodecode/controllers/pullrequests.py:441
268 #: rhodecode/controllers/pullrequests.py:484
269 269 msgid "Closing with"
270 270 msgstr ""
271 271
272 #: rhodecode/controllers/pullrequests.py:478
272 #: rhodecode/controllers/pullrequests.py:521
273 273 msgid "Closing pull request on other statuses than rejected or approved forbidden"
274 274 msgstr ""
275 275
276 #: rhodecode/controllers/search.py:134
276 #: rhodecode/controllers/search.py:132
277 277 msgid "Invalid search query. Try quoting it."
278 278 msgstr ""
279 279
280 #: rhodecode/controllers/search.py:139
280 #: rhodecode/controllers/search.py:137
281 281 msgid "There is no index to search in. Please run whoosh indexer"
282 282 msgstr ""
283 283
284 #: rhodecode/controllers/search.py:143
284 #: rhodecode/controllers/search.py:141
285 285 msgid "An error occurred during this search operation"
286 286 msgstr ""
287 287
288 #: rhodecode/controllers/summary.py:141
288 #: rhodecode/controllers/summary.py:182
289 289 msgid "No data loaded yet"
290 290 msgstr ""
291 291
292 #: rhodecode/controllers/summary.py:147
292 #: rhodecode/controllers/summary.py:188
293 293 #: rhodecode/templates/summary/summary.html:149
294 294 msgid "Statistics are disabled for this repository"
295 295 msgstr ""
@@ -302,6 +302,43 b' msgstr ""'
302 302 msgid "Error occurred during update of defaults"
303 303 msgstr ""
304 304
305 #: rhodecode/controllers/admin/gists.py:56
306 msgid "forever"
307 msgstr ""
308
309 #: rhodecode/controllers/admin/gists.py:57
310 #, fuzzy
311 msgid "5 minutes"
312 msgstr ""
313
314 #: rhodecode/controllers/admin/gists.py:58
315 #, fuzzy
316 msgid "1 hour"
317 msgstr ""
318
319 #: rhodecode/controllers/admin/gists.py:59
320 #, fuzzy
321 msgid "1 day"
322 msgstr ""
323
324 #: rhodecode/controllers/admin/gists.py:60
325 #, fuzzy
326 msgid "1 month"
327 msgstr ""
328
329 #: rhodecode/controllers/admin/gists.py:62
330 msgid "Lifetime"
331 msgstr ""
332
333 #: rhodecode/controllers/admin/gists.py:127
334 msgid "Error occurred during gist creation"
335 msgstr ""
336
337 #: rhodecode/controllers/admin/gists.py:165
338 #, python-format
339 msgid "Deleted gist %s"
340 msgstr ""
341
305 342 #: rhodecode/controllers/admin/ldap_settings.py:50
306 343 msgid "BASE"
307 344 msgstr ""
@@ -346,35 +383,39 b' msgstr ""'
346 383 msgid "START_TLS on LDAP connection"
347 384 msgstr ""
348 385
349 #: rhodecode/controllers/admin/ldap_settings.py:126
386 #: rhodecode/controllers/admin/ldap_settings.py:124
350 387 msgid "LDAP settings updated successfully"
351 388 msgstr ""
352 389
353 #: rhodecode/controllers/admin/ldap_settings.py:130
390 #: rhodecode/controllers/admin/ldap_settings.py:128
354 391 msgid "Unable to activate ldap. The \"python-ldap\" library is missing."
355 392 msgstr ""
356 393
357 #: rhodecode/controllers/admin/ldap_settings.py:147
394 #: rhodecode/controllers/admin/ldap_settings.py:145
358 395 msgid "Error occurred during update of ldap settings"
359 396 msgstr ""
360 397
398 #: rhodecode/controllers/admin/permissions.py:58
399 #: rhodecode/controllers/admin/permissions.py:62
400 #: rhodecode/controllers/admin/permissions.py:66
401 msgid "None"
402 msgstr ""
403
404 #: rhodecode/controllers/admin/permissions.py:59
405 #: rhodecode/controllers/admin/permissions.py:63
406 #: rhodecode/controllers/admin/permissions.py:67
407 msgid "Read"
408 msgstr ""
409
361 410 #: rhodecode/controllers/admin/permissions.py:60
362 411 #: rhodecode/controllers/admin/permissions.py:64
363 msgid "None"
412 #: rhodecode/controllers/admin/permissions.py:68
413 msgid "Write"
364 414 msgstr ""
365 415
366 416 #: rhodecode/controllers/admin/permissions.py:61
367 417 #: rhodecode/controllers/admin/permissions.py:65
368 msgid "Read"
369 msgstr ""
370
371 #: rhodecode/controllers/admin/permissions.py:62
372 #: rhodecode/controllers/admin/permissions.py:66
373 msgid "Write"
374 msgstr ""
375
376 #: rhodecode/controllers/admin/permissions.py:63
377 #: rhodecode/controllers/admin/permissions.py:67
418 #: rhodecode/controllers/admin/permissions.py:69
378 419 #: rhodecode/templates/admin/defaults/defaults.html:9
379 420 #: rhodecode/templates/admin/ldap/ldap.html:9
380 421 #: rhodecode/templates/admin/permissions/permissions.html:9
@@ -395,41 +436,55 b' msgstr ""'
395 436 #: rhodecode/templates/admin/users_groups/users_group_add.html:8
396 437 #: rhodecode/templates/admin/users_groups/users_group_edit.html:9
397 438 #: rhodecode/templates/admin/users_groups/users_groups.html:9
398 #: rhodecode/templates/base/base.html:292
399 #: rhodecode/templates/base/base.html:293
400 #: rhodecode/templates/base/base.html:299
401 #: rhodecode/templates/base/base.html:300
439 #: rhodecode/templates/base/base.html:317
440 #: rhodecode/templates/base/base.html:318
441 #: rhodecode/templates/base/base.html:324
442 #: rhodecode/templates/base/base.html:325
402 443 msgid "Admin"
403 444 msgstr ""
404 445
405 #: rhodecode/controllers/admin/permissions.py:70
406 #: rhodecode/controllers/admin/permissions.py:76
407 #: rhodecode/controllers/admin/permissions.py:79
408 msgid "Disabled"
409 msgstr ""
410
411 446 #: rhodecode/controllers/admin/permissions.py:72
412 msgid "Allowed with manual account activation"
447 #: rhodecode/controllers/admin/permissions.py:83
448 #: rhodecode/controllers/admin/permissions.py:86
449 #: rhodecode/controllers/admin/permissions.py:89
450 #: rhodecode/controllers/admin/permissions.py:92
451 msgid "Disabled"
413 452 msgstr ""
414 453
415 454 #: rhodecode/controllers/admin/permissions.py:74
455 msgid "Allowed with manual account activation"
456 msgstr ""
457
458 #: rhodecode/controllers/admin/permissions.py:76
416 459 msgid "Allowed with automatic account activation"
417 460 msgstr ""
418 461
419 #: rhodecode/controllers/admin/permissions.py:77
462 #: rhodecode/controllers/admin/permissions.py:79
463 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1439 rhodecode/model/db.py:1444
464 msgid "Manual activation of external account"
465 msgstr ""
466
420 467 #: rhodecode/controllers/admin/permissions.py:80
468 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1440 rhodecode/model/db.py:1445
469 msgid "Automatic activation of external account"
470 msgstr ""
471
472 #: rhodecode/controllers/admin/permissions.py:84
473 #: rhodecode/controllers/admin/permissions.py:87
474 #: rhodecode/controllers/admin/permissions.py:90
475 #: rhodecode/controllers/admin/permissions.py:93
421 476 msgid "Enabled"
422 477 msgstr ""
423 478
424 #: rhodecode/controllers/admin/permissions.py:128
479 #: rhodecode/controllers/admin/permissions.py:138
425 480 msgid "Default permissions updated successfully"
426 481 msgstr ""
427 482
428 #: rhodecode/controllers/admin/permissions.py:142
483 #: rhodecode/controllers/admin/permissions.py:152
429 484 msgid "Error occurred during update of permissions"
430 485 msgstr ""
431 486
432 #: rhodecode/controllers/admin/repos.py:127
487 #: rhodecode/controllers/admin/repos.py:128
433 488 msgid "--REMOVE FORK--"
434 489 msgstr ""
435 490
@@ -448,230 +503,223 b' msgstr ""'
448 503 msgid "Error creating repository %s"
449 504 msgstr ""
450 505
451 #: rhodecode/controllers/admin/repos.py:266
506 #: rhodecode/controllers/admin/repos.py:270
452 507 #, python-format
453 508 msgid "Repository %s updated successfully"
454 509 msgstr ""
455 510
456 #: rhodecode/controllers/admin/repos.py:284
511 #: rhodecode/controllers/admin/repos.py:288
457 512 #, python-format
458 513 msgid "Error occurred during update of repository %s"
459 514 msgstr ""
460 515
461 #: rhodecode/controllers/admin/repos.py:311
462 #: rhodecode/controllers/api/api.py:877
516 #: rhodecode/controllers/admin/repos.py:315
463 517 #, python-format
464 518 msgid "Detached %s forks"
465 519 msgstr ""
466 520
467 #: rhodecode/controllers/admin/repos.py:314
468 #: rhodecode/controllers/api/api.py:879
521 #: rhodecode/controllers/admin/repos.py:318
469 522 #, python-format
470 523 msgid "Deleted %s forks"
471 524 msgstr ""
472 525
473 #: rhodecode/controllers/admin/repos.py:319
526 #: rhodecode/controllers/admin/repos.py:323
474 527 #, python-format
475 528 msgid "Deleted repository %s"
476 529 msgstr ""
477 530
478 #: rhodecode/controllers/admin/repos.py:322
531 #: rhodecode/controllers/admin/repos.py:326
479 532 #, python-format
480 533 msgid "Cannot delete %s it still contains attached forks"
481 534 msgstr ""
482 535
483 #: rhodecode/controllers/admin/repos.py:327
536 #: rhodecode/controllers/admin/repos.py:331
484 537 #, python-format
485 538 msgid "An error occurred during deletion of %s"
486 539 msgstr ""
487 540
488 #: rhodecode/controllers/admin/repos.py:365
541 #: rhodecode/controllers/admin/repos.py:345
489 542 msgid "Repository permissions updated"
490 543 msgstr ""
491 544
492 #: rhodecode/controllers/admin/repos.py:384
493 msgid "An error occurred during deletion of repository user"
494 msgstr ""
495
496 #: rhodecode/controllers/admin/repos.py:403
497 msgid "An error occurred during deletion of repository user groups"
498 msgstr ""
499
500 #: rhodecode/controllers/admin/repos.py:421
545 #: rhodecode/controllers/admin/repos.py:375
546 #: rhodecode/controllers/admin/repos_groups.py:332
547 #: rhodecode/controllers/admin/users_groups.py:312
548 msgid "An error occurred during revoking of permission"
549 msgstr ""
550
551 #: rhodecode/controllers/admin/repos.py:392
501 552 msgid "An error occurred during deletion of repository stats"
502 553 msgstr ""
503 554
504 #: rhodecode/controllers/admin/repos.py:438
555 #: rhodecode/controllers/admin/repos.py:409
505 556 msgid "An error occurred during cache invalidation"
506 557 msgstr ""
507 558
508 #: rhodecode/controllers/admin/repos.py:458
509 #: rhodecode/controllers/admin/repos.py:485
559 #: rhodecode/controllers/admin/repos.py:429
560 #: rhodecode/controllers/admin/repos.py:456
510 561 msgid "An error occurred during unlocking"
511 562 msgstr ""
512 563
564 #: rhodecode/controllers/admin/repos.py:447
565 msgid "Unlocked"
566 msgstr ""
567
568 #: rhodecode/controllers/admin/repos.py:450
569 msgid "Locked"
570 msgstr ""
571
572 #: rhodecode/controllers/admin/repos.py:452
573 #, python-format
574 msgid "Repository has been %s"
575 msgstr ""
576
513 577 #: rhodecode/controllers/admin/repos.py:476
514 msgid "Unlocked"
515 msgstr ""
516
517 #: rhodecode/controllers/admin/repos.py:479
518 msgid "Locked"
519 msgstr ""
520
521 #: rhodecode/controllers/admin/repos.py:481
522 #, python-format
523 msgid "Repository has been %s"
524 msgstr ""
525
526 #: rhodecode/controllers/admin/repos.py:505
527 578 msgid "Updated repository visibility in public journal"
528 579 msgstr ""
529 580
530 #: rhodecode/controllers/admin/repos.py:509
581 #: rhodecode/controllers/admin/repos.py:480
531 582 msgid "An error occurred during setting this repository in public journal"
532 583 msgstr ""
533 584
534 #: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302
585 #: rhodecode/controllers/admin/repos.py:485 rhodecode/model/validators.py:302
535 586 msgid "Token mismatch"
536 587 msgstr ""
537 588
538 #: rhodecode/controllers/admin/repos.py:527
589 #: rhodecode/controllers/admin/repos.py:498
539 590 msgid "Pulled from remote location"
540 591 msgstr ""
541 592
542 #: rhodecode/controllers/admin/repos.py:529
593 #: rhodecode/controllers/admin/repos.py:501
543 594 msgid "An error occurred during pull from remote location"
544 595 msgstr ""
545 596
546 #: rhodecode/controllers/admin/repos.py:545
597 #: rhodecode/controllers/admin/repos.py:517
547 598 msgid "Nothing"
548 599 msgstr ""
549 600
550 #: rhodecode/controllers/admin/repos.py:547
601 #: rhodecode/controllers/admin/repos.py:519
551 602 #, python-format
552 603 msgid "Marked repo %s as fork of %s"
553 604 msgstr ""
554 605
555 #: rhodecode/controllers/admin/repos.py:551
606 #: rhodecode/controllers/admin/repos.py:523
556 607 msgid "An error occurred during this operation"
557 608 msgstr ""
558 609
559 #: rhodecode/controllers/admin/repos.py:590
610 #: rhodecode/controllers/admin/repos.py:562
560 611 msgid "An error occurred during creation of field"
561 612 msgstr ""
562 613
563 #: rhodecode/controllers/admin/repos.py:604
614 #: rhodecode/controllers/admin/repos.py:576
564 615 msgid "An error occurred during removal of field"
565 616 msgstr ""
566 617
567 #: rhodecode/controllers/admin/repos_groups.py:145
618 #: rhodecode/controllers/admin/repos_groups.py:147
568 619 #, python-format
569 620 msgid "Created repository group %s"
570 621 msgstr ""
571 622
572 #: rhodecode/controllers/admin/repos_groups.py:157
623 #: rhodecode/controllers/admin/repos_groups.py:159
573 624 #, python-format
574 625 msgid "Error occurred during creation of repository group %s"
575 626 msgstr ""
576 627
577 #: rhodecode/controllers/admin/repos_groups.py:214
578 #: rhodecode/controllers/admin/repos_groups.py:286
579 msgid "Cannot revoke permission for yourself as admin"
580 msgstr ""
581
582 #: rhodecode/controllers/admin/repos_groups.py:220
628 #: rhodecode/controllers/admin/repos_groups.py:217
583 629 #, python-format
584 630 msgid "Updated repository group %s"
585 631 msgstr ""
586 632
587 #: rhodecode/controllers/admin/repos_groups.py:235
633 #: rhodecode/controllers/admin/repos_groups.py:232
588 634 #, python-format
589 635 msgid "Error occurred during update of repository group %s"
590 636 msgstr ""
591 637
592 #: rhodecode/controllers/admin/repos_groups.py:253
638 #: rhodecode/controllers/admin/repos_groups.py:250
593 639 #, python-format
594 640 msgid "This group contains %s repositores and cannot be deleted"
595 641 msgstr ""
596 642
597 #: rhodecode/controllers/admin/repos_groups.py:260
643 #: rhodecode/controllers/admin/repos_groups.py:257
598 644 #, python-format
599 645 msgid "This group contains %s subgroups and cannot be deleted"
600 646 msgstr ""
601 647
602 #: rhodecode/controllers/admin/repos_groups.py:266
648 #: rhodecode/controllers/admin/repos_groups.py:263
603 649 #, python-format
604 650 msgid "Removed repository group %s"
605 651 msgstr ""
606 652
607 #: rhodecode/controllers/admin/repos_groups.py:271
653 #: rhodecode/controllers/admin/repos_groups.py:268
608 654 #, python-format
609 655 msgid "Error occurred during deletion of repos group %s"
610 656 msgstr ""
611 657
612 #: rhodecode/controllers/admin/repos_groups.py:297
613 msgid "An error occurred during deletion of group user"
614 msgstr ""
615
616 #: rhodecode/controllers/admin/repos_groups.py:318
617 msgid "An error occurred during deletion of group user groups"
618 msgstr ""
619
620 #: rhodecode/controllers/admin/settings.py:126
658 #: rhodecode/controllers/admin/repos_groups.py:279
659 #: rhodecode/controllers/admin/repos_groups.py:314
660 #: rhodecode/controllers/admin/users_groups.py:300
661 msgid "Cannot revoke permission for yourself as admin"
662 msgstr ""
663
664 #: rhodecode/controllers/admin/repos_groups.py:294
665 msgid "Repository Group permissions updated"
666 msgstr ""
667
668 #: rhodecode/controllers/admin/settings.py:123
621 669 #, python-format
622 670 msgid "Repositories successfully rescanned added: %s ; removed: %s"
623 671 msgstr ""
624 672
625 #: rhodecode/controllers/admin/settings.py:135
673 #: rhodecode/controllers/admin/settings.py:132
626 674 msgid "Whoosh reindex task scheduled"
627 675 msgstr ""
628 676
629 #: rhodecode/controllers/admin/settings.py:166
677 #: rhodecode/controllers/admin/settings.py:163
630 678 msgid "Updated application settings"
631 679 msgstr ""
632 680
633 #: rhodecode/controllers/admin/settings.py:170
634 #: rhodecode/controllers/admin/settings.py:301
681 #: rhodecode/controllers/admin/settings.py:167
682 #: rhodecode/controllers/admin/settings.py:304
635 683 msgid "Error occurred during updating application settings"
636 684 msgstr ""
637 685
638 #: rhodecode/controllers/admin/settings.py:216
686 #: rhodecode/controllers/admin/settings.py:219
639 687 msgid "Updated visualisation settings"
640 688 msgstr ""
641 689
642 #: rhodecode/controllers/admin/settings.py:221
690 #: rhodecode/controllers/admin/settings.py:224
643 691 msgid "Error occurred during updating visualisation settings"
644 692 msgstr ""
645 693
646 #: rhodecode/controllers/admin/settings.py:297
694 #: rhodecode/controllers/admin/settings.py:300
647 695 msgid "Updated VCS settings"
648 696 msgstr ""
649 697
650 #: rhodecode/controllers/admin/settings.py:311
698 #: rhodecode/controllers/admin/settings.py:314
651 699 msgid "Added new hook"
652 700 msgstr ""
653 701
654 #: rhodecode/controllers/admin/settings.py:323
702 #: rhodecode/controllers/admin/settings.py:326
655 703 msgid "Updated hooks"
656 704 msgstr ""
657 705
658 #: rhodecode/controllers/admin/settings.py:327
706 #: rhodecode/controllers/admin/settings.py:330
659 707 msgid "Error occurred during hook creation"
660 708 msgstr ""
661 709
662 #: rhodecode/controllers/admin/settings.py:346
710 #: rhodecode/controllers/admin/settings.py:349
663 711 msgid "Email task created"
664 712 msgstr ""
665 713
666 #: rhodecode/controllers/admin/settings.py:410
714 #: rhodecode/controllers/admin/settings.py:413
667 715 msgid "You can't edit this user since it's crucial for entire application"
668 716 msgstr ""
669 717
670 #: rhodecode/controllers/admin/settings.py:452
718 #: rhodecode/controllers/admin/settings.py:455
671 719 msgid "Your account was updated successfully"
672 720 msgstr ""
673 721
674 #: rhodecode/controllers/admin/settings.py:467
722 #: rhodecode/controllers/admin/settings.py:470
675 723 #: rhodecode/controllers/admin/users.py:198
676 724 #, python-format
677 725 msgid "Error occurred during update of user %s"
@@ -699,111 +747,92 b' msgstr ""'
699 747 msgid "An error occurred during deletion of user"
700 748 msgstr ""
701 749
702 #: rhodecode/controllers/admin/users.py:233
750 #: rhodecode/controllers/admin/users.py:234
703 751 msgid "You can't edit this user"
704 752 msgstr ""
705 753
706 #: rhodecode/controllers/admin/users.py:276
707 msgid "Granted 'repository create' permission to user"
708 msgstr ""
709
710 #: rhodecode/controllers/admin/users.py:281
711 msgid "Revoked 'repository create' permission to user"
712 msgstr ""
713
714 #: rhodecode/controllers/admin/users.py:287
715 msgid "Granted 'repository fork' permission to user"
716 msgstr ""
717
718 #: rhodecode/controllers/admin/users.py:292
719 msgid "Revoked 'repository fork' permission to user"
720 msgstr ""
721
722 #: rhodecode/controllers/admin/users.py:298
723 #: rhodecode/controllers/admin/users_groups.py:281
754 #: rhodecode/controllers/admin/users.py:293
755 #: rhodecode/controllers/admin/users_groups.py:372
756 msgid "Updated permissions"
757 msgstr ""
758
759 #: rhodecode/controllers/admin/users.py:297
760 #: rhodecode/controllers/admin/users_groups.py:376
724 761 msgid "An error occurred during permissions saving"
725 762 msgstr ""
726 763
727 #: rhodecode/controllers/admin/users.py:312
764 #: rhodecode/controllers/admin/users.py:311
728 765 #, python-format
729 766 msgid "Added email %s to user"
730 767 msgstr ""
731 768
732 #: rhodecode/controllers/admin/users.py:318
769 #: rhodecode/controllers/admin/users.py:317
733 770 msgid "An error occurred during email saving"
734 771 msgstr ""
735 772
736 #: rhodecode/controllers/admin/users.py:328
773 #: rhodecode/controllers/admin/users.py:327
737 774 msgid "Removed email from user"
738 775 msgstr ""
739 776
740 #: rhodecode/controllers/admin/users.py:341
777 #: rhodecode/controllers/admin/users.py:340
741 778 #, python-format
742 779 msgid "Added ip %s to user"
743 780 msgstr ""
744 781
745 #: rhodecode/controllers/admin/users.py:347
782 #: rhodecode/controllers/admin/users.py:346
746 783 msgid "An error occurred during ip saving"
747 784 msgstr ""
748 785
749 #: rhodecode/controllers/admin/users.py:359
786 #: rhodecode/controllers/admin/users.py:358
750 787 msgid "Removed ip from user"
751 788 msgstr ""
752 789
753 #: rhodecode/controllers/admin/users_groups.py:86
790 #: rhodecode/controllers/admin/users_groups.py:162
754 791 #, python-format
755 792 msgid "Created user group %s"
756 793 msgstr ""
757 794
758 #: rhodecode/controllers/admin/users_groups.py:97
795 #: rhodecode/controllers/admin/users_groups.py:173
759 796 #, python-format
760 797 msgid "Error occurred during creation of user group %s"
761 798 msgstr ""
762 799
763 #: rhodecode/controllers/admin/users_groups.py:166
764 #, python-format
765 msgid "Updated user group %s"
766 msgstr ""
767
768 #: rhodecode/controllers/admin/users_groups.py:188
769 #, python-format
770 msgid "Error occurred during update of user group %s"
771 msgstr ""
772
773 #: rhodecode/controllers/admin/users_groups.py:205
774 msgid "Successfully deleted user group"
775 msgstr ""
776
777 800 #: rhodecode/controllers/admin/users_groups.py:210
801 #, python-format
802 msgid "Updated user group %s"
803 msgstr ""
804
805 #: rhodecode/controllers/admin/users_groups.py:232
806 #, python-format
807 msgid "Error occurred during update of user group %s"
808 msgstr ""
809
810 #: rhodecode/controllers/admin/users_groups.py:250
811 msgid "Successfully deleted user group"
812 msgstr ""
813
814 #: rhodecode/controllers/admin/users_groups.py:255
778 815 msgid "An error occurred during deletion of user group"
779 816 msgstr ""
780 817
781 #: rhodecode/controllers/admin/users_groups.py:259
782 msgid "Granted 'repository create' permission to user group"
783 msgstr ""
784
785 #: rhodecode/controllers/admin/users_groups.py:264
786 msgid "Revoked 'repository create' permission to user group"
787 msgstr ""
788
789 #: rhodecode/controllers/admin/users_groups.py:270
790 msgid "Granted 'repository fork' permission to user group"
791 msgstr ""
792
793 #: rhodecode/controllers/admin/users_groups.py:275
794 msgid "Revoked 'repository fork' permission to user group"
795 msgstr ""
796
797 #: rhodecode/lib/auth.py:530
818 #: rhodecode/controllers/admin/users_groups.py:274
819 msgid "Target group cannot be the same"
820 msgstr ""
821
822 #: rhodecode/controllers/admin/users_groups.py:280
823 msgid "User Group permissions updated"
824 msgstr ""
825
826 #: rhodecode/lib/auth.py:544
798 827 #, python-format
799 828 msgid "IP %s not allowed"
800 829 msgstr ""
801 830
802 #: rhodecode/lib/auth.py:579
831 #: rhodecode/lib/auth.py:593
803 832 msgid "You need to be a registered user to perform this action"
804 833 msgstr ""
805 834
806 #: rhodecode/lib/auth.py:620
835 #: rhodecode/lib/auth.py:634
807 836 msgid "You need to be a signed in to view this page"
808 837 msgstr ""
809 838
@@ -819,152 +848,176 b' msgstr ""'
819 848 msgid "No changes detected"
820 849 msgstr ""
821 850
822 #: rhodecode/lib/helpers.py:394
851 #: rhodecode/lib/helpers.py:428
823 852 #, python-format
824 853 msgid "%a, %d %b %Y %H:%M:%S"
825 854 msgstr ""
826 855
827 #: rhodecode/lib/helpers.py:506
856 #: rhodecode/lib/helpers.py:539
828 857 msgid "True"
829 858 msgstr ""
830 859
831 #: rhodecode/lib/helpers.py:509
860 #: rhodecode/lib/helpers.py:542
832 861 msgid "False"
833 862 msgstr ""
834 863
835 #: rhodecode/lib/helpers.py:547
864 #: rhodecode/lib/helpers.py:580
836 865 #, python-format
837 866 msgid "Deleted branch: %s"
838 867 msgstr ""
839 868
840 #: rhodecode/lib/helpers.py:550
869 #: rhodecode/lib/helpers.py:583
841 870 #, python-format
842 871 msgid "Created tag: %s"
843 872 msgstr ""
844 873
845 #: rhodecode/lib/helpers.py:563
874 #: rhodecode/lib/helpers.py:596
846 875 msgid "Changeset not found"
847 876 msgstr ""
848 877
849 #: rhodecode/lib/helpers.py:615
878 #: rhodecode/lib/helpers.py:646
850 879 #, python-format
851 880 msgid "Show all combined changesets %s->%s"
852 881 msgstr ""
853 882
854 #: rhodecode/lib/helpers.py:621
883 #: rhodecode/lib/helpers.py:652
855 884 msgid "compare view"
856 885 msgstr ""
857 886
858 #: rhodecode/lib/helpers.py:641
887 #: rhodecode/lib/helpers.py:672
859 888 msgid "and"
860 889 msgstr ""
861 890
862 #: rhodecode/lib/helpers.py:642
891 #: rhodecode/lib/helpers.py:673
863 892 #, python-format
864 893 msgid "%s more"
865 894 msgstr ""
866 895
867 #: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44
896 #: rhodecode/lib/helpers.py:674 rhodecode/templates/changelog/changelog.html:53
868 897 msgid "revisions"
869 898 msgstr ""
870 899
871 #: rhodecode/lib/helpers.py:667
900 #: rhodecode/lib/helpers.py:698
872 901 #, python-format
873 902 msgid "fork name %s"
874 903 msgstr ""
875 904
876 #: rhodecode/lib/helpers.py:684
905 #: rhodecode/lib/helpers.py:715
877 906 #: rhodecode/templates/pullrequests/pullrequest_show.html:8
878 907 #, python-format
879 908 msgid "Pull request #%s"
880 909 msgstr ""
881 910
882 #: rhodecode/lib/helpers.py:690
911 #: rhodecode/lib/helpers.py:725
883 912 msgid "[deleted] repository"
884 913 msgstr ""
885 914
886 #: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702
915 #: rhodecode/lib/helpers.py:727 rhodecode/lib/helpers.py:739
887 916 msgid "[created] repository"
888 917 msgstr ""
889 918
890 #: rhodecode/lib/helpers.py:694
919 #: rhodecode/lib/helpers.py:729
891 920 msgid "[created] repository as fork"
892 921 msgstr ""
893 922
894 #: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704
923 #: rhodecode/lib/helpers.py:731 rhodecode/lib/helpers.py:741
895 924 msgid "[forked] repository"
896 925 msgstr ""
897 926
898 #: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706
927 #: rhodecode/lib/helpers.py:733 rhodecode/lib/helpers.py:743
899 928 msgid "[updated] repository"
900 929 msgstr ""
901 930
902 #: rhodecode/lib/helpers.py:700
931 #: rhodecode/lib/helpers.py:735
932 msgid "[downloaded] archive from repository"
933 msgstr ""
934
935 #: rhodecode/lib/helpers.py:737
903 936 msgid "[delete] repository"
904 937 msgstr ""
905 938
906 #: rhodecode/lib/helpers.py:708
939 #: rhodecode/lib/helpers.py:745
907 940 msgid "[created] user"
908 941 msgstr ""
909 942
910 #: rhodecode/lib/helpers.py:710
943 #: rhodecode/lib/helpers.py:747
911 944 msgid "[updated] user"
912 945 msgstr ""
913 946
914 #: rhodecode/lib/helpers.py:712
947 #: rhodecode/lib/helpers.py:749
915 948 msgid "[created] user group"
916 949 msgstr ""
917 950
918 #: rhodecode/lib/helpers.py:714
951 #: rhodecode/lib/helpers.py:751
919 952 msgid "[updated] user group"
920 953 msgstr ""
921 954
922 #: rhodecode/lib/helpers.py:716
955 #: rhodecode/lib/helpers.py:753
923 956 msgid "[commented] on revision in repository"
924 957 msgstr ""
925 958
926 #: rhodecode/lib/helpers.py:718
959 #: rhodecode/lib/helpers.py:755
927 960 msgid "[commented] on pull request for"
928 961 msgstr ""
929 962
930 #: rhodecode/lib/helpers.py:720
963 #: rhodecode/lib/helpers.py:757
931 964 msgid "[closed] pull request for"
932 965 msgstr ""
933 966
934 #: rhodecode/lib/helpers.py:722
967 #: rhodecode/lib/helpers.py:759
935 968 msgid "[pushed] into"
936 969 msgstr ""
937 970
938 #: rhodecode/lib/helpers.py:724
971 #: rhodecode/lib/helpers.py:761
939 972 msgid "[committed via RhodeCode] into repository"
940 973 msgstr ""
941 974
942 #: rhodecode/lib/helpers.py:726
975 #: rhodecode/lib/helpers.py:763
943 976 msgid "[pulled from remote] into repository"
944 977 msgstr ""
945 978
946 #: rhodecode/lib/helpers.py:728
979 #: rhodecode/lib/helpers.py:765
947 980 msgid "[pulled] from"
948 981 msgstr ""
949 982
950 #: rhodecode/lib/helpers.py:730
983 #: rhodecode/lib/helpers.py:767
951 984 msgid "[started following] repository"
952 985 msgstr ""
953 986
954 #: rhodecode/lib/helpers.py:732
987 #: rhodecode/lib/helpers.py:769
955 988 msgid "[stopped following] repository"
956 989 msgstr ""
957 990
958 #: rhodecode/lib/helpers.py:910
991 #: rhodecode/lib/helpers.py:1088
959 992 #, python-format
960 993 msgid " and %s more"
961 994 msgstr ""
962 995
963 #: rhodecode/lib/helpers.py:914
996 #: rhodecode/lib/helpers.py:1092
964 997 msgid "No Files"
965 998 msgstr ""
966 999
967 #: rhodecode/lib/helpers.py:1198
1000 #: rhodecode/lib/helpers.py:1158
1001 msgid "new file"
1002 msgstr ""
1003
1004 #: rhodecode/lib/helpers.py:1161
1005 msgid "mod"
1006 msgstr ""
1007
1008 #: rhodecode/lib/helpers.py:1164
1009 msgid "del"
1010 msgstr ""
1011
1012 #: rhodecode/lib/helpers.py:1167
1013 msgid "rename"
1014 msgstr ""
1015
1016 #: rhodecode/lib/helpers.py:1172
1017 msgid "chmod"
1018 msgstr ""
1019
1020 #: rhodecode/lib/helpers.py:1404
968 1021 #, python-format
969 1022 msgid ""
970 1023 "%s repository is not mapped to db perhaps it was created or renamed from "
@@ -976,221 +1029,299 b' msgstr ""'
976 1029 msgid "cannot create new union repository"
977 1030 msgstr ""
978 1031
979 #: rhodecode/lib/utils2.py:411
1032 #: rhodecode/lib/utils2.py:410
980 1033 #, python-format
981 1034 msgid "%d year"
982 1035 msgid_plural "%d years"
983 1036 msgstr[0] ""
984 1037 msgstr[1] ""
985 1038
986 #: rhodecode/lib/utils2.py:412
1039 #: rhodecode/lib/utils2.py:411
987 1040 #, python-format
988 1041 msgid "%d month"
989 1042 msgid_plural "%d months"
990 1043 msgstr[0] ""
991 1044 msgstr[1] ""
992 1045
1046 #: rhodecode/lib/utils2.py:412
1047 #, python-format
1048 msgid "%d day"
1049 msgid_plural "%d days"
1050 msgstr[0] ""
1051 msgstr[1] ""
1052
993 1053 #: rhodecode/lib/utils2.py:413
994 1054 #, python-format
995 msgid "%d day"
996 msgid_plural "%d days"
1055 msgid "%d hour"
1056 msgid_plural "%d hours"
997 1057 msgstr[0] ""
998 1058 msgstr[1] ""
999 1059
1000 1060 #: rhodecode/lib/utils2.py:414
1001 1061 #, python-format
1002 msgid "%d hour"
1003 msgid_plural "%d hours"
1062 msgid "%d minute"
1063 msgid_plural "%d minutes"
1004 1064 msgstr[0] ""
1005 1065 msgstr[1] ""
1006 1066
1007 1067 #: rhodecode/lib/utils2.py:415
1008 1068 #, python-format
1009 msgid "%d minute"
1010 msgid_plural "%d minutes"
1011 msgstr[0] ""
1012 msgstr[1] ""
1013
1014 #: rhodecode/lib/utils2.py:416
1015 #, python-format
1016 1069 msgid "%d second"
1017 1070 msgid_plural "%d seconds"
1018 1071 msgstr[0] ""
1019 1072 msgstr[1] ""
1020 1073
1021 #: rhodecode/lib/utils2.py:432
1074 #: rhodecode/lib/utils2.py:431
1022 1075 #, python-format
1023 1076 msgid "in %s"
1024 1077 msgstr ""
1025 1078
1026 #: rhodecode/lib/utils2.py:434
1079 #: rhodecode/lib/utils2.py:433
1027 1080 #, python-format
1028 1081 msgid "%s ago"
1029 1082 msgstr ""
1030 1083
1031 #: rhodecode/lib/utils2.py:436
1084 #: rhodecode/lib/utils2.py:435
1032 1085 #, python-format
1033 1086 msgid "in %s and %s"
1034 1087 msgstr ""
1035 1088
1036 #: rhodecode/lib/utils2.py:439
1089 #: rhodecode/lib/utils2.py:438
1037 1090 #, python-format
1038 1091 msgid "%s and %s ago"
1039 1092 msgstr ""
1040 1093
1041 #: rhodecode/lib/utils2.py:442
1094 #: rhodecode/lib/utils2.py:441
1042 1095 msgid "just now"
1043 1096 msgstr ""
1044 1097
1045 1098 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163
1046 1099 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183
1047 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388
1100 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303
1101 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1388
1102 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1408 rhodecode/model/db.py:1413
1048 1103 msgid "Repository no access"
1049 1104 msgstr ""
1050 1105
1051 1106 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164
1052 1107 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184
1053 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389
1108 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304
1109 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1389
1110 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1409 rhodecode/model/db.py:1414
1054 1111 msgid "Repository read access"
1055 1112 msgstr ""
1056 1113
1057 1114 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165
1058 1115 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185
1059 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390
1116 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305
1117 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1390
1118 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1410 rhodecode/model/db.py:1415
1060 1119 msgid "Repository write access"
1061 1120 msgstr ""
1062 1121
1063 1122 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166
1064 1123 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186
1065 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391
1124 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1306
1125 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1391
1126 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1411 rhodecode/model/db.py:1416
1066 1127 msgid "Repository admin access"
1067 1128 msgstr ""
1068 1129
1069 1130 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168
1070 1131 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188
1071 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294
1132 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308
1072 1133 msgid "Repositories Group no access"
1073 1134 msgstr ""
1074 1135
1075 1136 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169
1076 1137 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189
1077 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295
1138 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1309
1078 1139 msgid "Repositories Group read access"
1079 1140 msgstr ""
1080 1141
1081 1142 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170
1082 1143 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190
1083 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296
1144 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1310
1084 1145 msgid "Repositories Group write access"
1085 1146 msgstr ""
1086 1147
1087 1148 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171
1088 1149 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191
1089 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297
1150 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1311
1090 1151 msgid "Repositories Group admin access"
1091 1152 msgstr ""
1092 1153
1093 1154 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173
1094 1155 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193
1095 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398
1156 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1313
1157 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1398
1158 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1406 rhodecode/model/db.py:1411
1096 1159 msgid "RhodeCode Administrator"
1097 1160 msgstr ""
1098 1161
1099 1162 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174
1100 1163 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194
1101 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399
1164 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1314
1165 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1399
1166 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1429 rhodecode/model/db.py:1434
1102 1167 msgid "Repository creation disabled"
1103 1168 msgstr ""
1104 1169
1105 1170 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175
1106 1171 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195
1107 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400
1172 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1315
1173 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1400
1174 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1430 rhodecode/model/db.py:1435
1108 1175 msgid "Repository creation enabled"
1109 1176 msgstr ""
1110 1177
1111 1178 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176
1112 1179 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196
1113 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401
1180 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1316
1181 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1401
1182 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1432 rhodecode/model/db.py:1437
1114 1183 msgid "Repository forking disabled"
1115 1184 msgstr ""
1116 1185
1117 1186 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177
1118 1187 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197
1119 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402
1188 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1317
1189 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1402
1190 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1433 rhodecode/model/db.py:1438
1120 1191 msgid "Repository forking enabled"
1121 1192 msgstr ""
1122 1193
1123 1194 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178
1124 1195 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198
1125 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403
1196 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1318
1197 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1403
1126 1198 msgid "Register disabled"
1127 1199 msgstr ""
1128 1200
1129 1201 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179
1130 1202 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199
1131 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404
1203 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1319
1204 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1404
1132 1205 msgid "Register new user with RhodeCode with manual activation"
1133 1206 msgstr ""
1134 1207
1135 1208 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182
1136 1209 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202
1137 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407
1210 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1322
1211 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1407
1138 1212 msgid "Register new user with RhodeCode with auto activation"
1139 1213 msgstr ""
1140 1214
1141 1215 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623
1142 1216 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643
1143 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838
1217 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1763
1218 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1838
1219 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1934 rhodecode/model/db.py:1939
1144 1220 msgid "Not Reviewed"
1145 1221 msgstr ""
1146 1222
1147 1223 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624
1148 1224 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644
1149 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839
1225 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1764
1226 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1839
1227 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1935 rhodecode/model/db.py:1940
1150 1228 msgid "Approved"
1151 1229 msgstr ""
1152 1230
1153 1231 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625
1154 1232 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645
1155 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840
1233 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1765
1234 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1840
1235 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1936 rhodecode/model/db.py:1941
1156 1236 msgid "Rejected"
1157 1237 msgstr ""
1158 1238
1159 1239 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626
1160 1240 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646
1161 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841
1241 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1766
1242 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1841
1243 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1937 rhodecode/model/db.py:1942
1162 1244 msgid "Under Review"
1163 1245 msgstr ""
1164 1246
1247 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1252
1248 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1270 rhodecode/model/db.py:1275
1249 msgid "top level"
1250 msgstr ""
1251
1252 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1393
1253 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1413 rhodecode/model/db.py:1418
1254 msgid "Repository group no access"
1255 msgstr ""
1256
1257 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1394
1258 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1414 rhodecode/model/db.py:1419
1259 msgid "Repository group read access"
1260 msgstr ""
1261
1262 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1395
1263 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1415 rhodecode/model/db.py:1420
1264 msgid "Repository group write access"
1265 msgstr ""
1266
1267 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1396
1268 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1416 rhodecode/model/db.py:1421
1269 msgid "Repository group admin access"
1270 msgstr ""
1271
1272 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1418 rhodecode/model/db.py:1423
1273 msgid "User group no access"
1274 msgstr ""
1275
1276 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1419 rhodecode/model/db.py:1424
1277 msgid "User group read access"
1278 msgstr ""
1279
1280 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1420 rhodecode/model/db.py:1425
1281 msgid "User group write access"
1282 msgstr ""
1283
1284 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1421 rhodecode/model/db.py:1426
1285 msgid "User group admin access"
1286 msgstr ""
1287
1288 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1423 rhodecode/model/db.py:1428
1289 msgid "Repository Group creation disabled"
1290 msgstr ""
1291
1292 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1424 rhodecode/model/db.py:1429
1293 msgid "Repository Group creation enabled"
1294 msgstr ""
1295
1296 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1426 rhodecode/model/db.py:1431
1297 msgid "User Group creation disabled"
1298 msgstr ""
1299
1300 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1427 rhodecode/model/db.py:1432
1301 msgid "User Group creation enabled"
1302 msgstr ""
1303
1304 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1435 rhodecode/model/db.py:1440
1305 msgid "Registration disabled"
1306 msgstr ""
1307
1308 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1436 rhodecode/model/db.py:1441
1309 msgid "User Registration with manual account activation"
1310 msgstr ""
1311
1312 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1437 rhodecode/model/db.py:1442
1313 msgid "User Registration with automatic account activation"
1314 msgstr ""
1315
1165 1316 #: rhodecode/model/comment.py:75
1166 1317 #, python-format
1167 1318 msgid "on line %s"
1168 1319 msgstr ""
1169 1320
1170 #: rhodecode/model/comment.py:219
1321 #: rhodecode/model/comment.py:220
1171 1322 msgid "[Mention]"
1172 1323 msgstr ""
1173 1324
1174 #: rhodecode/model/db.py:1252
1175 msgid "top level"
1176 msgstr ""
1177
1178 #: rhodecode/model/db.py:1393
1179 msgid "Repository group no access"
1180 msgstr ""
1181
1182 #: rhodecode/model/db.py:1394
1183 msgid "Repository group read access"
1184 msgstr ""
1185
1186 #: rhodecode/model/db.py:1395
1187 msgid "Repository group write access"
1188 msgstr ""
1189
1190 #: rhodecode/model/db.py:1396
1191 msgid "Repository group admin access"
1192 msgstr ""
1193
1194 1325 #: rhodecode/model/forms.py:43
1195 1326 msgid "Please enter a login"
1196 1327 msgstr ""
@@ -1209,42 +1340,42 b' msgstr ""'
1209 1340 msgid "Enter %(min)i characters or more"
1210 1341 msgstr ""
1211 1342
1212 #: rhodecode/model/notification.py:224
1343 #: rhodecode/model/notification.py:228
1213 1344 #, python-format
1214 1345 msgid "%(user)s commented on changeset at %(when)s"
1215 1346 msgstr ""
1216 1347
1217 #: rhodecode/model/notification.py:225
1218 #, python-format
1219 msgid "%(user)s sent message at %(when)s"
1220 msgstr ""
1221
1222 #: rhodecode/model/notification.py:226
1223 #, python-format
1224 msgid "%(user)s mentioned you at %(when)s"
1225 msgstr ""
1226
1227 #: rhodecode/model/notification.py:227
1228 #, python-format
1229 msgid "%(user)s registered in RhodeCode at %(when)s"
1230 msgstr ""
1231
1232 #: rhodecode/model/notification.py:228
1233 #, python-format
1234 msgid "%(user)s opened new pull request at %(when)s"
1235 msgstr ""
1236
1237 1348 #: rhodecode/model/notification.py:229
1238 1349 #, python-format
1350 msgid "%(user)s sent message at %(when)s"
1351 msgstr ""
1352
1353 #: rhodecode/model/notification.py:230
1354 #, python-format
1355 msgid "%(user)s mentioned you at %(when)s"
1356 msgstr ""
1357
1358 #: rhodecode/model/notification.py:231
1359 #, python-format
1360 msgid "%(user)s registered in RhodeCode at %(when)s"
1361 msgstr ""
1362
1363 #: rhodecode/model/notification.py:232
1364 #, python-format
1365 msgid "%(user)s opened new pull request at %(when)s"
1366 msgstr ""
1367
1368 #: rhodecode/model/notification.py:233
1369 #, python-format
1239 1370 msgid "%(user)s commented on pull request at %(when)s"
1240 1371 msgstr ""
1241 1372
1242 #: rhodecode/model/pull_request.py:104
1373 #: rhodecode/model/pull_request.py:98
1243 1374 #, python-format
1244 1375 msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s"
1245 1376 msgstr ""
1246 1377
1247 #: rhodecode/model/scm.py:598
1378 #: rhodecode/model/scm.py:674
1248 1379 msgid "latest tip"
1249 1380 msgstr ""
1250 1381
@@ -1297,7 +1428,7 b' msgstr ""'
1297 1428 #: rhodecode/model/validators.py:89
1298 1429 msgid ""
1299 1430 "Username may only contain alphanumeric characters underscores, periods or"
1300 " dashes and must begin with alphanumeric character"
1431 " dashes and must begin with alphanumeric character or underscore"
1301 1432 msgstr ""
1302 1433
1303 1434 #: rhodecode/model/validators.py:117
@@ -1398,47 +1529,51 b' msgstr ""'
1398 1529 msgid "You don't have permissions to create a group in this location"
1399 1530 msgstr ""
1400 1531
1401 #: rhodecode/model/validators.py:557
1532 #: rhodecode/model/validators.py:559
1402 1533 msgid "This username or user group name is not valid"
1403 1534 msgstr ""
1404 1535
1405 #: rhodecode/model/validators.py:650
1536 #: rhodecode/model/validators.py:652
1406 1537 msgid "This is not a valid path"
1407 1538 msgstr ""
1408 1539
1409 #: rhodecode/model/validators.py:665
1540 #: rhodecode/model/validators.py:667
1410 1541 msgid "This e-mail address is already taken"
1411 1542 msgstr ""
1412 1543
1413 #: rhodecode/model/validators.py:685
1544 #: rhodecode/model/validators.py:687
1414 1545 #, python-format
1415 1546 msgid "e-mail \"%(email)s\" does not exist."
1416 1547 msgstr ""
1417 1548
1418 #: rhodecode/model/validators.py:722
1549 #: rhodecode/model/validators.py:724
1419 1550 msgid ""
1420 1551 "The LDAP Login attribute of the CN must be specified - this is the name "
1421 1552 "of the attribute that is equivalent to \"username\""
1422 1553 msgstr ""
1423 1554
1424 #: rhodecode/model/validators.py:735
1555 #: rhodecode/model/validators.py:737
1425 1556 #, python-format
1426 1557 msgid "Revisions %(revs)s are already part of pull request or have set status"
1427 1558 msgstr ""
1428 1559
1429 #: rhodecode/model/validators.py:767
1560 #: rhodecode/model/validators.py:769
1430 1561 msgid "Please enter a valid IPv4 or IpV6 address"
1431 1562 msgstr ""
1432 1563
1433 #: rhodecode/model/validators.py:768
1564 #: rhodecode/model/validators.py:770
1434 1565 #, python-format
1435 1566 msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)"
1436 1567 msgstr ""
1437 1568
1438 #: rhodecode/model/validators.py:800
1569 #: rhodecode/model/validators.py:803
1439 1570 msgid "Key name can only consist of letters, underscore, dash or numbers"
1440 1571 msgstr ""
1441 1572
1573 #: rhodecode/model/validators.py:817
1574 msgid "Filename cannot be inside a directory"
1575 msgstr ""
1576
1442 1577 #: rhodecode/templates/index.html:5
1443 1578 msgid "Dashboard"
1444 1579 msgstr ""
@@ -1484,29 +1619,28 b' msgid "You have admin right to this grou'
1484 1619 msgstr ""
1485 1620
1486 1621 #: rhodecode/templates/index_base.html:40
1487 #: rhodecode/templates/index_base.html:140
1488 1622 #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33
1489 1623 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38
1490 1624 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43
1491 1625 #: rhodecode/templates/admin/users_groups/users_group_add.html:32
1492 1626 #: rhodecode/templates/admin/users_groups/users_group_edit.html:33
1493 #: rhodecode/templates/admin/users_groups/users_groups.html:34
1627 #: rhodecode/templates/admin/users_groups/users_groups.html:37
1494 1628 msgid "Group name"
1495 1629 msgstr ""
1496 1630
1497 1631 #: rhodecode/templates/index_base.html:41
1498 #: rhodecode/templates/index_base.html:83
1499 #: rhodecode/templates/index_base.html:142
1500 #: rhodecode/templates/index_base.html:180
1501 #: rhodecode/templates/index_base.html:270
1632 #: rhodecode/templates/index_base.html:123
1502 1633 #: rhodecode/templates/admin/repos/repo_add_base.html:56
1503 #: rhodecode/templates/admin/repos/repo_edit.html:75
1634 #: rhodecode/templates/admin/repos/repo_edit.html:68
1504 1635 #: rhodecode/templates/admin/repos/repos.html:73
1505 1636 #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42
1506 1637 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47
1507 1638 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44
1639 #: rhodecode/templates/email_templates/changeset_comment.html:9
1640 #: rhodecode/templates/email_templates/pull_request.html:9
1508 1641 #: rhodecode/templates/forks/fork.html:56
1509 #: rhodecode/templates/pullrequests/pullrequest.html:101
1642 #: rhodecode/templates/pullrequests/pullrequest.html:43
1643 #: rhodecode/templates/pullrequests/pullrequest_show.html:81
1510 1644 #: rhodecode/templates/summary/summary.html:106
1511 1645 msgid "Description"
1512 1646 msgstr ""
@@ -1514,27 +1648,25 b' msgstr ""'
1514 1648 #: rhodecode/templates/index_base.html:51
1515 1649 #: rhodecode/templates/admin/permissions/permissions.html:55
1516 1650 #: rhodecode/templates/admin/repos/repo_add_base.html:29
1517 #: rhodecode/templates/admin/repos/repo_edit.html:49
1651 #: rhodecode/templates/admin/repos/repo_edit.html:50
1518 1652 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:57
1519 1653 #: rhodecode/templates/forks/fork.html:47
1520 1654 msgid "Repository group"
1521 1655 msgstr ""
1522 1656
1523 #: rhodecode/templates/index_base.html:82
1524 #: rhodecode/templates/index_base.html:178
1525 #: rhodecode/templates/index_base.html:268
1657 #: rhodecode/templates/index_base.html:121
1526 1658 #: rhodecode/templates/admin/repos/repo_add_base.html:9
1527 1659 #: rhodecode/templates/admin/repos/repo_edit.html:32
1528 1660 #: rhodecode/templates/admin/repos/repos.html:71
1529 1661 #: rhodecode/templates/admin/users/user_edit_my_account.html:172
1530 #: rhodecode/templates/base/perms_summary.html:14
1531 #: rhodecode/templates/bookmarks/bookmarks.html:34
1662 #: rhodecode/templates/base/perms_summary.html:37
1663 #: rhodecode/templates/bookmarks/bookmarks.html:48
1532 1664 #: rhodecode/templates/bookmarks/bookmarks_data.html:6
1533 1665 #: rhodecode/templates/branches/branches.html:47
1534 1666 #: rhodecode/templates/branches/branches_data.html:6
1535 1667 #: rhodecode/templates/files/files_browser.html:47
1536 1668 #: rhodecode/templates/journal/journal.html:193
1537 #: rhodecode/templates/journal/journal.html:296
1669 #: rhodecode/templates/journal/journal.html:283
1538 1670 #: rhodecode/templates/summary/summary.html:55
1539 1671 #: rhodecode/templates/summary/summary.html:124
1540 1672 #: rhodecode/templates/tags/tags.html:48
@@ -1542,109 +1674,78 b' msgstr ""'
1542 1674 msgid "Name"
1543 1675 msgstr ""
1544 1676
1545 #: rhodecode/templates/index_base.html:84
1546 msgid "Last change"
1547 msgstr ""
1548
1549 #: rhodecode/templates/index_base.html:85
1550 #: rhodecode/templates/index_base.html:183
1551 #: rhodecode/templates/index_base.html:273
1677 #: rhodecode/templates/index_base.html:124
1678 msgid "Last Change"
1679 msgstr ""
1680
1681 #: rhodecode/templates/index_base.html:126
1552 1682 #: rhodecode/templates/admin/repos/repos.html:74
1553 1683 #: rhodecode/templates/admin/users/user_edit_my_account.html:174
1554 1684 #: rhodecode/templates/journal/journal.html:195
1555 #: rhodecode/templates/journal/journal.html:298
1685 #: rhodecode/templates/journal/journal.html:285
1556 1686 msgid "Tip"
1557 1687 msgstr ""
1558 1688
1559 #: rhodecode/templates/index_base.html:86
1560 #: rhodecode/templates/index_base.html:185
1561 #: rhodecode/templates/index_base.html:275
1562 #: rhodecode/templates/admin/repos/repo_edit.html:121
1689 #: rhodecode/templates/index_base.html:128
1690 #: rhodecode/templates/admin/repos/repo_edit.html:114
1563 1691 #: rhodecode/templates/admin/repos/repos.html:76
1564 1692 msgid "Owner"
1565 1693 msgstr ""
1566 1694
1567 #: rhodecode/templates/index_base.html:87
1568 msgid "Atom"
1569 msgstr ""
1570
1571 #: rhodecode/templates/index_base.html:171
1572 #: rhodecode/templates/index_base.html:209
1573 #: rhodecode/templates/index_base.html:296
1574 #: rhodecode/templates/admin/repos/repos.html:97
1575 #: rhodecode/templates/admin/users/user_edit_my_account.html:196
1695 #: rhodecode/templates/index_base.html:136
1696 #: rhodecode/templates/admin/repos/repos.html:84
1697 #: rhodecode/templates/admin/users/user_edit_my_account.html:183
1576 1698 #: rhodecode/templates/admin/users/users.html:107
1577 #: rhodecode/templates/bookmarks/bookmarks.html:58
1699 #: rhodecode/templates/bookmarks/bookmarks.html:74
1578 1700 #: rhodecode/templates/branches/branches.html:73
1579 #: rhodecode/templates/journal/journal.html:217
1580 #: rhodecode/templates/journal/journal.html:320
1701 #: rhodecode/templates/journal/journal.html:204
1702 #: rhodecode/templates/journal/journal.html:294
1581 1703 #: rhodecode/templates/tags/tags.html:74
1582 1704 msgid "Click to sort ascending"
1583 1705 msgstr ""
1584 1706
1585 #: rhodecode/templates/index_base.html:172
1586 #: rhodecode/templates/index_base.html:210
1587 #: rhodecode/templates/index_base.html:297
1588 #: rhodecode/templates/admin/repos/repos.html:98
1589 #: rhodecode/templates/admin/users/user_edit_my_account.html:197
1707 #: rhodecode/templates/index_base.html:137
1708 #: rhodecode/templates/admin/repos/repos.html:85
1709 #: rhodecode/templates/admin/users/user_edit_my_account.html:184
1590 1710 #: rhodecode/templates/admin/users/users.html:108
1591 #: rhodecode/templates/bookmarks/bookmarks.html:59
1711 #: rhodecode/templates/bookmarks/bookmarks.html:75
1592 1712 #: rhodecode/templates/branches/branches.html:74
1593 #: rhodecode/templates/journal/journal.html:218
1594 #: rhodecode/templates/journal/journal.html:321
1713 #: rhodecode/templates/journal/journal.html:205
1714 #: rhodecode/templates/journal/journal.html:295
1595 1715 #: rhodecode/templates/tags/tags.html:75
1596 1716 msgid "Click to sort descending"
1597 1717 msgstr ""
1598 1718
1599 #: rhodecode/templates/index_base.html:181
1600 #: rhodecode/templates/index_base.html:271
1601 msgid "Last Change"
1602 msgstr ""
1603
1604 #: rhodecode/templates/index_base.html:211
1605 #: rhodecode/templates/admin/repos/repos.html:99
1606 #: rhodecode/templates/admin/users/user_edit_my_account.html:198
1607 #: rhodecode/templates/admin/users/users.html:109
1608 #: rhodecode/templates/bookmarks/bookmarks.html:60
1609 #: rhodecode/templates/branches/branches.html:75
1610 #: rhodecode/templates/journal/journal.html:219
1611 #: rhodecode/templates/journal/journal.html:322
1612 #: rhodecode/templates/tags/tags.html:76
1613 msgid "No records found."
1614 msgstr ""
1615
1616 #: rhodecode/templates/index_base.html:212
1617 #: rhodecode/templates/index_base.html:299
1618 #: rhodecode/templates/admin/repos/repos.html:100
1619 #: rhodecode/templates/admin/users/user_edit_my_account.html:199
1719 #: rhodecode/templates/index_base.html:138
1720 msgid "No repositories found."
1721 msgstr ""
1722
1723 #: rhodecode/templates/index_base.html:139
1724 #: rhodecode/templates/admin/repos/repos.html:87
1725 #: rhodecode/templates/admin/users/user_edit_my_account.html:186
1620 1726 #: rhodecode/templates/admin/users/users.html:110
1621 #: rhodecode/templates/bookmarks/bookmarks.html:61
1727 #: rhodecode/templates/bookmarks/bookmarks.html:77
1622 1728 #: rhodecode/templates/branches/branches.html:76
1623 #: rhodecode/templates/journal/journal.html:220
1624 #: rhodecode/templates/journal/journal.html:323
1729 #: rhodecode/templates/journal/journal.html:207
1730 #: rhodecode/templates/journal/journal.html:297
1625 1731 #: rhodecode/templates/tags/tags.html:77
1626 1732 msgid "Data error."
1627 1733 msgstr ""
1628 1734
1629 #: rhodecode/templates/index_base.html:213
1630 #: rhodecode/templates/index_base.html:300
1631 #: rhodecode/templates/admin/repos/repos.html:101
1735 #: rhodecode/templates/index_base.html:140
1736 #: rhodecode/templates/admin/repos/repos.html:88
1632 1737 #: rhodecode/templates/admin/users/user_edit_my_account.html:58
1633 #: rhodecode/templates/admin/users/user_edit_my_account.html:200
1738 #: rhodecode/templates/admin/users/user_edit_my_account.html:187
1634 1739 #: rhodecode/templates/admin/users/users.html:111
1635 #: rhodecode/templates/bookmarks/bookmarks.html:62
1740 #: rhodecode/templates/bookmarks/bookmarks.html:78
1636 1741 #: rhodecode/templates/branches/branches.html:77
1637 #: rhodecode/templates/journal/journal.html:221
1638 #: rhodecode/templates/journal/journal.html:324
1742 #: rhodecode/templates/journal/journal.html:208
1743 #: rhodecode/templates/journal/journal.html:298
1639 1744 #: rhodecode/templates/tags/tags.html:78
1640 1745 msgid "Loading..."
1641 1746 msgstr ""
1642 1747
1643 #: rhodecode/templates/index_base.html:298
1644 msgid "No repositories found."
1645 msgstr ""
1646
1647 #: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227
1748 #: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:239
1648 1749 msgid "Log In"
1649 1750 msgstr ""
1650 1751
@@ -1659,7 +1760,7 b' msgstr ""'
1659 1760 #: rhodecode/templates/admin/users/user_edit.html:57
1660 1761 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:31
1661 1762 #: rhodecode/templates/admin/users/users.html:77
1662 #: rhodecode/templates/base/base.html:203
1763 #: rhodecode/templates/base/base.html:215
1663 1764 #: rhodecode/templates/summary/summary.html:123
1664 1765 msgid "Username"
1665 1766 msgstr ""
@@ -1667,7 +1768,7 b' msgstr ""'
1667 1768 #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
1668 1769 #: rhodecode/templates/admin/ldap/ldap.html:46
1669 1770 #: rhodecode/templates/admin/users/user_add.html:41
1670 #: rhodecode/templates/base/base.html:212
1771 #: rhodecode/templates/base/base.html:224
1671 1772 msgid "Password"
1672 1773 msgstr ""
1673 1774
@@ -1683,7 +1784,7 b' msgstr ""'
1683 1784 msgid "Forgot your password ?"
1684 1785 msgstr ""
1685 1786
1686 #: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223
1787 #: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:235
1687 1788 msgid "Don't have an account ?"
1688 1789 msgstr ""
1689 1790
@@ -1752,7 +1853,7 b' msgstr ""'
1752 1853 #: rhodecode/templates/repo_switcher_list.html:10
1753 1854 #: rhodecode/templates/admin/defaults/defaults.html:44
1754 1855 #: rhodecode/templates/admin/repos/repo_add_base.html:65
1755 #: rhodecode/templates/admin/repos/repo_edit.html:85
1856 #: rhodecode/templates/admin/repos/repo_edit.html:78
1756 1857 #: rhodecode/templates/data_table/_dt_elements.html:61
1757 1858 #: rhodecode/templates/summary/summary.html:77
1758 1859 msgid "Private repository"
@@ -1775,13 +1876,13 b' msgid "There are no tags yet"'
1775 1876 msgstr ""
1776 1877
1777 1878 #: rhodecode/templates/switch_to_list.html:35
1778 #: rhodecode/templates/bookmarks/bookmarks_data.html:32
1879 #: rhodecode/templates/bookmarks/bookmarks_data.html:37
1779 1880 msgid "There are no bookmarks yet"
1780 1881 msgstr ""
1781 1882
1782 1883 #: rhodecode/templates/admin/admin.html:5
1783 1884 #: rhodecode/templates/admin/admin.html:13
1784 #: rhodecode/templates/base/base.html:68
1885 #: rhodecode/templates/base/base.html:73
1785 1886 msgid "Admin journal"
1786 1887 msgstr ""
1787 1888
@@ -1807,9 +1908,9 b' msgstr[1] ""'
1807 1908 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
1808 1909 #: rhodecode/templates/admin/users/user_edit_my_account.html:176
1809 1910 #: rhodecode/templates/admin/users/users.html:87
1810 #: rhodecode/templates/admin/users_groups/users_groups.html:37
1911 #: rhodecode/templates/admin/users_groups/users_groups.html:40
1811 1912 #: rhodecode/templates/journal/journal.html:197
1812 #: rhodecode/templates/journal/journal.html:300
1913 #: rhodecode/templates/journal/journal.html:287
1813 1914 msgid "Action"
1814 1915 msgstr ""
1815 1916
@@ -1819,7 +1920,7 b' msgid "Repository"'
1819 1920 msgstr ""
1820 1921
1821 1922 #: rhodecode/templates/admin/admin_log.html:8
1822 #: rhodecode/templates/bookmarks/bookmarks.html:35
1923 #: rhodecode/templates/bookmarks/bookmarks.html:49
1823 1924 #: rhodecode/templates/bookmarks/bookmarks_data.html:7
1824 1925 #: rhodecode/templates/branches/branches.html:48
1825 1926 #: rhodecode/templates/branches/branches_data.html:7
@@ -1842,19 +1943,18 b' msgid "Repositories defaults"'
1842 1943 msgstr ""
1843 1944
1844 1945 #: rhodecode/templates/admin/defaults/defaults.html:11
1845 #: rhodecode/templates/base/base.html:75
1946 #: rhodecode/templates/base/base.html:80
1846 1947 msgid "Defaults"
1847 1948 msgstr ""
1848 1949
1849 1950 #: rhodecode/templates/admin/defaults/defaults.html:35
1850 1951 #: rhodecode/templates/admin/repos/repo_add_base.html:38
1851 #: rhodecode/templates/admin/repos/repo_edit.html:58
1852 1952 msgid "Type"
1853 1953 msgstr ""
1854 1954
1855 1955 #: rhodecode/templates/admin/defaults/defaults.html:48
1856 1956 #: rhodecode/templates/admin/repos/repo_add_base.html:69
1857 #: rhodecode/templates/admin/repos/repo_edit.html:89
1957 #: rhodecode/templates/admin/repos/repo_edit.html:82
1858 1958 #: rhodecode/templates/forks/fork.html:69
1859 1959 msgid ""
1860 1960 "Private repositories are only visible to people explicitly added as "
@@ -1862,60 +1962,185 b' msgid ""'
1862 1962 msgstr ""
1863 1963
1864 1964 #: rhodecode/templates/admin/defaults/defaults.html:55
1865 #: rhodecode/templates/admin/repos/repo_edit.html:94
1965 #: rhodecode/templates/admin/repos/repo_edit.html:87
1866 1966 msgid "Enable statistics"
1867 1967 msgstr ""
1868 1968
1869 1969 #: rhodecode/templates/admin/defaults/defaults.html:59
1870 #: rhodecode/templates/admin/repos/repo_edit.html:98
1970 #: rhodecode/templates/admin/repos/repo_edit.html:91
1871 1971 msgid "Enable statistics window on summary page."
1872 1972 msgstr ""
1873 1973
1874 1974 #: rhodecode/templates/admin/defaults/defaults.html:65
1875 #: rhodecode/templates/admin/repos/repo_edit.html:103
1975 #: rhodecode/templates/admin/repos/repo_edit.html:96
1876 1976 msgid "Enable downloads"
1877 1977 msgstr ""
1878 1978
1879 1979 #: rhodecode/templates/admin/defaults/defaults.html:69
1880 #: rhodecode/templates/admin/repos/repo_edit.html:107
1980 #: rhodecode/templates/admin/repos/repo_edit.html:100
1881 1981 msgid "Enable download menu on summary page."
1882 1982 msgstr ""
1883 1983
1884 1984 #: rhodecode/templates/admin/defaults/defaults.html:75
1885 #: rhodecode/templates/admin/repos/repo_edit.html:112
1886 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72
1985 #: rhodecode/templates/admin/repos/repo_edit.html:105
1986 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64
1887 1987 msgid "Enable locking"
1888 1988 msgstr ""
1889 1989
1890 1990 #: rhodecode/templates/admin/defaults/defaults.html:79
1891 #: rhodecode/templates/admin/repos/repo_edit.html:116
1991 #: rhodecode/templates/admin/repos/repo_edit.html:109
1892 1992 msgid "Enable lock-by-pulling on repository."
1893 1993 msgstr ""
1894 1994
1895 1995 #: rhodecode/templates/admin/defaults/defaults.html:84
1896 1996 #: rhodecode/templates/admin/ldap/ldap.html:89
1897 #: rhodecode/templates/admin/permissions/permissions.html:92
1898 #: rhodecode/templates/admin/repos/repo_edit.html:148
1899 #: rhodecode/templates/admin/repos/repo_edit.html:173
1900 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80
1997 #: rhodecode/templates/admin/permissions/permissions.html:122
1998 #: rhodecode/templates/admin/repos/repo_edit.html:141
1999 #: rhodecode/templates/admin/repos/repo_edit.html:166
2000 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72
2001 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:96
1901 2002 #: rhodecode/templates/admin/settings/hooks.html:73
1902 2003 #: rhodecode/templates/admin/users/user_add.html:94
1903 2004 #: rhodecode/templates/admin/users/user_edit.html:140
1904 #: rhodecode/templates/admin/users/user_edit.html:185
1905 2005 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:88
1906 2006 #: rhodecode/templates/admin/users_groups/users_group_add.html:49
1907 2007 #: rhodecode/templates/admin/users_groups/users_group_edit.html:90
1908 #: rhodecode/templates/admin/users_groups/users_group_edit.html:135
2008 #: rhodecode/templates/admin/users_groups/users_group_edit.html:143
2009 #: rhodecode/templates/base/default_perms_box.html:53
1909 2010 msgid "Save"
1910 2011 msgstr ""
1911 2012
2013 #: rhodecode/templates/admin/gists/index.html:5
2014 #: rhodecode/templates/base/base.html:299
2015 msgid "Gists"
2016 msgstr ""
2017
2018 #: rhodecode/templates/admin/gists/index.html:10
2019 #, python-format
2020 msgid "Private Gists for user %s"
2021 msgstr ""
2022
2023 #: rhodecode/templates/admin/gists/index.html:12
2024 #, python-format
2025 msgid "Public Gists for user %s"
2026 msgstr ""
2027
2028 #: rhodecode/templates/admin/gists/index.html:14
2029 msgid "Public Gists"
2030 msgstr ""
2031
2032 #: rhodecode/templates/admin/gists/index.html:31
2033 #: rhodecode/templates/admin/gists/show.html:24
2034 #: rhodecode/templates/base/base.html:302
2035 msgid "Create new gist"
2036 msgstr ""
2037
2038 #: rhodecode/templates/admin/gists/index.html:48
2039 msgid "Created"
2040 msgstr ""
2041
2042 #: rhodecode/templates/admin/gists/index.html:51
2043 #: rhodecode/templates/admin/gists/index.html:53
2044 #: rhodecode/templates/admin/gists/show.html:43
2045 #: rhodecode/templates/admin/gists/show.html:45
2046 msgid "Expires"
2047 msgstr ""
2048
2049 #: rhodecode/templates/admin/gists/index.html:51
2050 #: rhodecode/templates/admin/gists/show.html:43
2051 msgid "never"
2052 msgstr ""
2053
2054 #: rhodecode/templates/admin/gists/index.html:68
2055 msgid "There are no gists yet"
2056 msgstr ""
2057
2058 #: rhodecode/templates/admin/gists/new.html:5
2059 #: rhodecode/templates/admin/gists/new.html:16
2060 msgid "New gist"
2061 msgstr ""
2062
2063 #: rhodecode/templates/admin/gists/new.html:37
2064 msgid "Gist description ..."
2065 msgstr ""
2066
2067 #: rhodecode/templates/admin/gists/new.html:52
2068 msgid "Create private gist"
2069 msgstr ""
2070
2071 #: rhodecode/templates/admin/gists/new.html:53
2072 msgid "Create public gist"
2073 msgstr ""
2074
2075 #: rhodecode/templates/admin/gists/new.html:54
2076 #: rhodecode/templates/admin/permissions/permissions.html:123
2077 #: rhodecode/templates/admin/permissions/permissions.html:185
2078 #: rhodecode/templates/admin/repos/repo_edit.html:142
2079 #: rhodecode/templates/admin/repos/repo_edit.html:167
2080 #: rhodecode/templates/admin/repos/repo_edit.html:381
2081 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:73
2082 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:97
2083 #: rhodecode/templates/admin/settings/settings.html:115
2084 #: rhodecode/templates/admin/settings/settings.html:196
2085 #: rhodecode/templates/admin/settings/settings.html:288
2086 #: rhodecode/templates/admin/users/user_edit.html:141
2087 #: rhodecode/templates/admin/users/user_edit.html:198
2088 #: rhodecode/templates/admin/users/user_edit.html:246
2089 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:89
2090 #: rhodecode/templates/admin/users_groups/users_group_edit.html:144
2091 #: rhodecode/templates/base/default_perms_box.html:54
2092 #: rhodecode/templates/files/files_add.html:80
2093 #: rhodecode/templates/files/files_edit.html:66
2094 #: rhodecode/templates/pullrequests/pullrequest.html:86
2095 msgid "Reset"
2096 msgstr ""
2097
2098 #: rhodecode/templates/admin/gists/show.html:5
2099 msgid "gist"
2100 msgstr ""
2101
2102 #: rhodecode/templates/admin/gists/show.html:9
2103 msgid "Gist"
2104 msgstr ""
2105
2106 #: rhodecode/templates/admin/gists/show.html:36
2107 msgid "Public gist"
2108 msgstr ""
2109
2110 #: rhodecode/templates/admin/gists/show.html:38
2111 msgid "Private gist"
2112 msgstr ""
2113
2114 #: rhodecode/templates/admin/gists/show.html:54
2115 #: rhodecode/templates/admin/repos/repo_edit.html:299
2116 #: rhodecode/templates/changeset/changeset_file_comment.html:40
2117 msgid "Delete"
2118 msgstr ""
2119
2120 #: rhodecode/templates/admin/gists/show.html:54
2121 #, fuzzy
2122 msgid "Confirm to delete this gist"
2123 msgstr ""
2124
2125 #: rhodecode/templates/admin/gists/show.html:63
2126 #: rhodecode/templates/admin/gists/show.html:84
2127 #: rhodecode/templates/files/files_edit.html:48
2128 #: rhodecode/templates/files/files_source.html:25
2129 #: rhodecode/templates/files/files_source.html:55
2130 msgid "Show as raw"
2131 msgstr ""
2132
2133 #: rhodecode/templates/admin/gists/show.html:71
2134 msgid "created"
2135 msgstr ""
2136
1912 2137 #: rhodecode/templates/admin/ldap/ldap.html:5
1913 2138 msgid "LDAP administration"
1914 2139 msgstr ""
1915 2140
1916 2141 #: rhodecode/templates/admin/ldap/ldap.html:11
1917 2142 #: rhodecode/templates/admin/users/users.html:86
1918 #: rhodecode/templates/base/base.html:74
2143 #: rhodecode/templates/base/base.html:79
1919 2144 msgid "LDAP"
1920 2145 msgstr ""
1921 2146
@@ -2016,7 +2241,7 b' msgid "Show notification"'
2016 2241 msgstr ""
2017 2242
2018 2243 #: rhodecode/templates/admin/notifications/show_notification.html:9
2019 #: rhodecode/templates/base/base.html:241
2244 #: rhodecode/templates/base/base.html:253
2020 2245 msgid "Notifications"
2021 2246 msgstr ""
2022 2247
@@ -2025,12 +2250,14 b' msgid "Permissions administration"'
2025 2250 msgstr ""
2026 2251
2027 2252 #: rhodecode/templates/admin/permissions/permissions.html:11
2253 #: rhodecode/templates/admin/repos/repo_edit.html:151
2028 2254 #: rhodecode/templates/admin/repos/repo_edit.html:158
2029 #: rhodecode/templates/admin/repos/repo_edit.html:165
2030 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64
2255 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81
2256 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:88
2031 2257 #: rhodecode/templates/admin/users/user_edit.html:150
2032 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100
2033 #: rhodecode/templates/base/base.html:73
2258 #: rhodecode/templates/admin/users_groups/users_group_edit.html:129
2259 #: rhodecode/templates/admin/users_groups/users_group_edit.html:136
2260 #: rhodecode/templates/base/base.html:78
2034 2261 msgid "Permissions"
2035 2262 msgstr ""
2036 2263
@@ -2051,6 +2278,7 b' msgstr ""'
2051 2278
2052 2279 #: rhodecode/templates/admin/permissions/permissions.html:50
2053 2280 #: rhodecode/templates/admin/permissions/permissions.html:63
2281 #: rhodecode/templates/admin/permissions/permissions.html:77
2054 2282 msgid "Overwrite existing settings"
2055 2283 msgstr ""
2056 2284
@@ -2062,86 +2290,85 b' msgid ""'
2062 2290 msgstr ""
2063 2291
2064 2292 #: rhodecode/templates/admin/permissions/permissions.html:69
2065 msgid "Registration"
2066 msgstr ""
2067
2068 #: rhodecode/templates/admin/permissions/permissions.html:77
2293 msgid "User group"
2294 msgstr ""
2295
2296 #: rhodecode/templates/admin/permissions/permissions.html:76
2297 msgid ""
2298 "All default permissions on each user group will be reset to chosen "
2299 "permission, note that all custom default permission on repository groups "
2300 "will be lost"
2301 msgstr ""
2302
2303 #: rhodecode/templates/admin/permissions/permissions.html:83
2069 2304 msgid "Repository creation"
2070 2305 msgstr ""
2071 2306
2072 #: rhodecode/templates/admin/permissions/permissions.html:85
2307 #: rhodecode/templates/admin/permissions/permissions.html:91
2308 msgid "User group creation"
2309 msgstr ""
2310
2311 #: rhodecode/templates/admin/permissions/permissions.html:99
2073 2312 msgid "Repository forking"
2074 2313 msgstr ""
2075 2314
2076 #: rhodecode/templates/admin/permissions/permissions.html:93
2077 #: rhodecode/templates/admin/permissions/permissions.html:154
2078 #: rhodecode/templates/admin/repos/repo_edit.html:149
2079 #: rhodecode/templates/admin/repos/repo_edit.html:174
2080 #: rhodecode/templates/admin/repos/repo_edit.html:388
2081 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81
2082 #: rhodecode/templates/admin/settings/settings.html:115
2083 #: rhodecode/templates/admin/settings/settings.html:187
2084 #: rhodecode/templates/admin/settings/settings.html:278
2085 #: rhodecode/templates/admin/users/user_edit.html:141
2086 #: rhodecode/templates/admin/users/user_edit.html:186
2087 #: rhodecode/templates/admin/users/user_edit.html:235
2088 #: rhodecode/templates/admin/users/user_edit.html:283
2089 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:89
2090 #: rhodecode/templates/admin/users_groups/users_group_edit.html:136
2091 #: rhodecode/templates/files/files_add.html:80
2092 #: rhodecode/templates/files/files_edit.html:66
2093 #: rhodecode/templates/pullrequests/pullrequest.html:110
2094 msgid "Reset"
2095 msgstr ""
2096
2097 #: rhodecode/templates/admin/permissions/permissions.html:103
2315 #: rhodecode/templates/admin/permissions/permissions.html:107
2316 msgid "Registration"
2317 msgstr ""
2318
2319 #: rhodecode/templates/admin/permissions/permissions.html:115
2320 msgid "External auth account activation"
2321 msgstr ""
2322
2323 #: rhodecode/templates/admin/permissions/permissions.html:133
2098 2324 msgid "Default User Permissions"
2099 2325 msgstr ""
2100 2326
2101 #: rhodecode/templates/admin/permissions/permissions.html:113
2102 #: rhodecode/templates/admin/users/user_edit.html:244
2327 #: rhodecode/templates/admin/permissions/permissions.html:144
2328 #: rhodecode/templates/admin/users/user_edit.html:207
2103 2329 msgid "Allowed IP addresses"
2104 2330 msgstr ""
2105 2331
2106 #: rhodecode/templates/admin/permissions/permissions.html:127
2107 #: rhodecode/templates/admin/repos/repo_edit.html:347
2332 #: rhodecode/templates/admin/permissions/permissions.html:158
2333 #: rhodecode/templates/admin/repos/repo_edit.html:340
2108 2334 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70
2109 #: rhodecode/templates/admin/users/user_edit.html:212
2110 #: rhodecode/templates/admin/users/user_edit.html:257
2111 #: rhodecode/templates/admin/users_groups/users_groups.html:46
2335 #: rhodecode/templates/admin/users/user_edit.html:175
2336 #: rhodecode/templates/admin/users/user_edit.html:220
2337 #: rhodecode/templates/admin/users_groups/users_groups.html:54
2112 2338 #: rhodecode/templates/data_table/_dt_elements.html:122
2113 #: rhodecode/templates/data_table/_dt_elements.html:130
2339 #: rhodecode/templates/data_table/_dt_elements.html:136
2114 2340 msgid "delete"
2115 2341 msgstr ""
2116 2342
2117 #: rhodecode/templates/admin/permissions/permissions.html:128
2118 #: rhodecode/templates/admin/users/user_edit.html:258
2343 #: rhodecode/templates/admin/permissions/permissions.html:159
2344 #: rhodecode/templates/admin/users/user_edit.html:221
2119 2345 #, fuzzy, python-format
2120 2346 msgid "Confirm to delete this ip: %s"
2121 2347 msgstr ""
2122 2348
2123 #: rhodecode/templates/admin/permissions/permissions.html:134
2124 #: rhodecode/templates/admin/users/user_edit.html:264
2349 #: rhodecode/templates/admin/permissions/permissions.html:165
2350 #: rhodecode/templates/admin/users/user_edit.html:227
2125 2351 msgid "All IP addresses are allowed"
2126 2352 msgstr ""
2127 2353
2128 #: rhodecode/templates/admin/permissions/permissions.html:145
2129 #: rhodecode/templates/admin/users/user_edit.html:275
2354 #: rhodecode/templates/admin/permissions/permissions.html:176
2355 #: rhodecode/templates/admin/users/user_edit.html:238
2130 2356 msgid "New ip address"
2131 2357 msgstr ""
2132 2358
2133 #: rhodecode/templates/admin/permissions/permissions.html:153
2359 #: rhodecode/templates/admin/permissions/permissions.html:184
2134 2360 #: rhodecode/templates/admin/repos/repo_add_base.html:73
2135 #: rhodecode/templates/admin/repos/repo_edit.html:387
2136 #: rhodecode/templates/admin/users/user_edit.html:234
2137 #: rhodecode/templates/admin/users/user_edit.html:282
2361 #: rhodecode/templates/admin/repos/repo_edit.html:380
2362 #: rhodecode/templates/admin/users/user_edit.html:197
2363 #: rhodecode/templates/admin/users/user_edit.html:245
2138 2364 msgid "Add"
2139 2365 msgstr ""
2140 2366
2141 2367 #: rhodecode/templates/admin/repos/repo_add.html:12
2142 2368 #: rhodecode/templates/admin/repos/repo_add.html:16
2143 #: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103
2144 #: rhodecode/templates/base/base.html:263
2369 #: rhodecode/templates/base/base.html:74 rhodecode/templates/base/base.html:88
2370 #: rhodecode/templates/base/base.html:116
2371 #: rhodecode/templates/base/base.html:275
2145 2372 msgid "Repositories"
2146 2373 msgstr ""
2147 2374
@@ -2156,7 +2383,7 b' msgid "Clone from"'
2156 2383 msgstr ""
2157 2384
2158 2385 #: rhodecode/templates/admin/repos/repo_add_base.html:24
2159 #: rhodecode/templates/admin/repos/repo_edit.html:44
2386 #: rhodecode/templates/admin/repos/repo_edit.html:45
2160 2387 msgid "Optional http[s] url from which repository should be cloned."
2161 2388 msgstr ""
2162 2389
@@ -2170,19 +2397,19 b' msgid "Type of repository to create."'
2170 2397 msgstr ""
2171 2398
2172 2399 #: rhodecode/templates/admin/repos/repo_add_base.html:47
2173 #: rhodecode/templates/admin/repos/repo_edit.html:66
2400 #: rhodecode/templates/admin/repos/repo_edit.html:59
2174 2401 #: rhodecode/templates/forks/fork.html:38
2175 2402 msgid "Landing revision"
2176 2403 msgstr ""
2177 2404
2178 2405 #: rhodecode/templates/admin/repos/repo_add_base.html:51
2179 #: rhodecode/templates/admin/repos/repo_edit.html:70
2406 #: rhodecode/templates/admin/repos/repo_edit.html:63
2180 2407 #: rhodecode/templates/forks/fork.html:42
2181 2408 msgid "Default revision for files page, downloads, whoosh and readme"
2182 2409 msgstr ""
2183 2410
2184 2411 #: rhodecode/templates/admin/repos/repo_add_base.html:60
2185 #: rhodecode/templates/admin/repos/repo_edit.html:79
2412 #: rhodecode/templates/admin/repos/repo_edit.html:72
2186 2413 #: rhodecode/templates/forks/fork.html:60
2187 2414 msgid "Keep it short and to the point. Use a README file for longer descriptions."
2188 2415 msgstr ""
@@ -2194,245 +2421,249 b' msgstr ""'
2194 2421 #: rhodecode/templates/admin/repos/repo_edit.html:12
2195 2422 #: rhodecode/templates/admin/settings/hooks.html:9
2196 2423 #: rhodecode/templates/admin/settings/settings.html:11
2197 #: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121
2424 #: rhodecode/templates/base/base.html:81 rhodecode/templates/base/base.html:134
2198 2425 #: rhodecode/templates/summary/summary.html:212
2199 2426 msgid "Settings"
2200 2427 msgstr ""
2201 2428
2202 #: rhodecode/templates/admin/repos/repo_edit.html:40
2429 #: rhodecode/templates/admin/repos/repo_edit.html:36
2430 msgid "Non-changeable id"
2431 msgstr ""
2432
2433 #: rhodecode/templates/admin/repos/repo_edit.html:41
2203 2434 msgid "Clone uri"
2204 2435 msgstr ""
2205 2436
2206 #: rhodecode/templates/admin/repos/repo_edit.html:53
2437 #: rhodecode/templates/admin/repos/repo_edit.html:54
2207 2438 msgid "Optional select a group to put this repository into."
2208 2439 msgstr ""
2209 2440
2210 #: rhodecode/templates/admin/repos/repo_edit.html:126
2441 #: rhodecode/templates/admin/repos/repo_edit.html:119
2211 2442 msgid "Change owner of this repository."
2212 2443 msgstr ""
2213 2444
2445 #: rhodecode/templates/admin/repos/repo_edit.html:177
2446 msgid "Advanced settings"
2447 msgstr ""
2448
2449 #: rhodecode/templates/admin/repos/repo_edit.html:180
2450 msgid "Statistics"
2451 msgstr ""
2452
2214 2453 #: rhodecode/templates/admin/repos/repo_edit.html:184
2215 msgid "Advanced settings"
2454 msgid "Reset current statistics"
2455 msgstr ""
2456
2457 #: rhodecode/templates/admin/repos/repo_edit.html:184
2458 msgid "Confirm to remove current statistics"
2216 2459 msgstr ""
2217 2460
2218 2461 #: rhodecode/templates/admin/repos/repo_edit.html:187
2219 msgid "Statistics"
2220 msgstr ""
2221
2222 #: rhodecode/templates/admin/repos/repo_edit.html:191
2223 msgid "Reset current statistics"
2224 msgstr ""
2225
2226 #: rhodecode/templates/admin/repos/repo_edit.html:191
2227 msgid "Confirm to remove current statistics"
2228 msgstr ""
2229
2230 #: rhodecode/templates/admin/repos/repo_edit.html:194
2231 2462 msgid "Fetched to rev"
2232 2463 msgstr ""
2233 2464
2234 #: rhodecode/templates/admin/repos/repo_edit.html:195
2465 #: rhodecode/templates/admin/repos/repo_edit.html:188
2235 2466 msgid "Stats gathered"
2236 2467 msgstr ""
2237 2468
2238 #: rhodecode/templates/admin/repos/repo_edit.html:203
2469 #: rhodecode/templates/admin/repos/repo_edit.html:196
2239 2470 msgid "Remote"
2240 2471 msgstr ""
2241 2472
2242 #: rhodecode/templates/admin/repos/repo_edit.html:207
2473 #: rhodecode/templates/admin/repos/repo_edit.html:200
2243 2474 msgid "Pull changes from remote location"
2244 2475 msgstr ""
2245 2476
2246 #: rhodecode/templates/admin/repos/repo_edit.html:207
2477 #: rhodecode/templates/admin/repos/repo_edit.html:200
2247 2478 msgid "Confirm to pull changes from remote side"
2248 2479 msgstr ""
2249 2480
2481 #: rhodecode/templates/admin/repos/repo_edit.html:211
2482 msgid "Cache"
2483 msgstr ""
2484
2485 #: rhodecode/templates/admin/repos/repo_edit.html:215
2486 msgid "Invalidate repository cache"
2487 msgstr ""
2488
2489 #: rhodecode/templates/admin/repos/repo_edit.html:215
2490 msgid "Confirm to invalidate repository cache"
2491 msgstr ""
2492
2250 2493 #: rhodecode/templates/admin/repos/repo_edit.html:218
2251 msgid "Cache"
2252 msgstr ""
2253
2254 #: rhodecode/templates/admin/repos/repo_edit.html:222
2255 msgid "Invalidate repository cache"
2256 msgstr ""
2257
2258 #: rhodecode/templates/admin/repos/repo_edit.html:222
2259 msgid "Confirm to invalidate repository cache"
2260 msgstr ""
2261
2262 #: rhodecode/templates/admin/repos/repo_edit.html:225
2263 2494 msgid ""
2264 2495 "Manually invalidate cache for this repository. On first access repository"
2265 2496 " will be cached again"
2266 2497 msgstr ""
2267 2498
2268 #: rhodecode/templates/admin/repos/repo_edit.html:230
2499 #: rhodecode/templates/admin/repos/repo_edit.html:223
2269 2500 msgid "List of cached values"
2270 2501 msgstr ""
2271 2502
2272 #: rhodecode/templates/admin/repos/repo_edit.html:233
2503 #: rhodecode/templates/admin/repos/repo_edit.html:226
2273 2504 msgid "Prefix"
2274 2505 msgstr ""
2275 2506
2276 #: rhodecode/templates/admin/repos/repo_edit.html:234
2507 #: rhodecode/templates/admin/repos/repo_edit.html:227
2277 2508 msgid "Key"
2278 2509 msgstr ""
2279 2510
2280 #: rhodecode/templates/admin/repos/repo_edit.html:235
2511 #: rhodecode/templates/admin/repos/repo_edit.html:228
2281 2512 #: rhodecode/templates/admin/users/user_add.html:86
2282 2513 #: rhodecode/templates/admin/users/user_edit.html:124
2283 2514 #: rhodecode/templates/admin/users/users.html:84
2284 2515 #: rhodecode/templates/admin/users_groups/users_group_add.html:41
2285 2516 #: rhodecode/templates/admin/users_groups/users_group_edit.html:42
2286 #: rhodecode/templates/admin/users_groups/users_groups.html:36
2517 #: rhodecode/templates/admin/users_groups/users_groups.html:39
2287 2518 msgid "Active"
2288 2519 msgstr ""
2289 2520
2290 #: rhodecode/templates/admin/repos/repo_edit.html:250
2291 #: rhodecode/templates/base/base.html:280
2292 #: rhodecode/templates/base/base.html:281
2521 #: rhodecode/templates/admin/repos/repo_edit.html:243
2522 #: rhodecode/templates/base/base.html:292
2523 #: rhodecode/templates/base/base.html:293
2293 2524 msgid "Public journal"
2294 2525 msgstr ""
2295 2526
2527 #: rhodecode/templates/admin/repos/repo_edit.html:249
2528 msgid "Remove from public journal"
2529 msgstr ""
2530
2531 #: rhodecode/templates/admin/repos/repo_edit.html:251
2532 msgid "Add to public journal"
2533 msgstr ""
2534
2296 2535 #: rhodecode/templates/admin/repos/repo_edit.html:256
2297 msgid "Remove from public journal"
2298 msgstr ""
2299
2300 #: rhodecode/templates/admin/repos/repo_edit.html:258
2301 msgid "Add to public journal"
2302 msgstr ""
2303
2304 #: rhodecode/templates/admin/repos/repo_edit.html:263
2305 2536 msgid ""
2306 2537 "All actions made on this repository will be accessible to everyone in "
2307 2538 "public journal"
2308 2539 msgstr ""
2309 2540
2310 #: rhodecode/templates/admin/repos/repo_edit.html:270
2541 #: rhodecode/templates/admin/repos/repo_edit.html:263
2311 2542 msgid "Locking"
2312 2543 msgstr ""
2313 2544
2314 #: rhodecode/templates/admin/repos/repo_edit.html:275
2545 #: rhodecode/templates/admin/repos/repo_edit.html:268
2315 2546 msgid "Unlock locked repo"
2316 2547 msgstr ""
2317 2548
2318 #: rhodecode/templates/admin/repos/repo_edit.html:275
2549 #: rhodecode/templates/admin/repos/repo_edit.html:268
2319 2550 msgid "Confirm to unlock repository"
2320 2551 msgstr ""
2321 2552
2322 #: rhodecode/templates/admin/repos/repo_edit.html:278
2323 msgid "lock repo"
2324 msgstr ""
2325
2326 #: rhodecode/templates/admin/repos/repo_edit.html:278
2553 #: rhodecode/templates/admin/repos/repo_edit.html:271
2554 msgid "Lock repo"
2555 msgstr ""
2556
2557 #: rhodecode/templates/admin/repos/repo_edit.html:271
2327 2558 msgid "Confirm to lock repository"
2328 2559 msgstr ""
2329 2560
2330 #: rhodecode/templates/admin/repos/repo_edit.html:279
2561 #: rhodecode/templates/admin/repos/repo_edit.html:272
2331 2562 msgid "Repository is not locked"
2332 2563 msgstr ""
2333 2564
2565 #: rhodecode/templates/admin/repos/repo_edit.html:277
2566 msgid "Force locking on repository. Works only when anonymous access is disabled"
2567 msgstr ""
2568
2334 2569 #: rhodecode/templates/admin/repos/repo_edit.html:284
2335 msgid "Force locking on repository. Works only when anonymous access is disabled"
2336 msgstr ""
2337
2338 #: rhodecode/templates/admin/repos/repo_edit.html:291
2339 2570 msgid "Set as fork of"
2340 2571 msgstr ""
2341 2572
2342 #: rhodecode/templates/admin/repos/repo_edit.html:296
2343 msgid "set"
2344 msgstr ""
2345
2346 #: rhodecode/templates/admin/repos/repo_edit.html:300
2573 #: rhodecode/templates/admin/repos/repo_edit.html:289
2574 msgid "Set"
2575 msgstr ""
2576
2577 #: rhodecode/templates/admin/repos/repo_edit.html:293
2347 2578 msgid "Manually set this repository as a fork of another from the list"
2348 2579 msgstr ""
2349 2580
2350 #: rhodecode/templates/admin/repos/repo_edit.html:306
2351 #: rhodecode/templates/changeset/changeset_file_comment.html:41
2352 msgid "Delete"
2353 msgstr ""
2354
2355 #: rhodecode/templates/admin/repos/repo_edit.html:315
2581 #: rhodecode/templates/admin/repos/repo_edit.html:308
2356 2582 msgid "Remove this repository"
2357 2583 msgstr ""
2358 2584
2359 #: rhodecode/templates/admin/repos/repo_edit.html:315
2585 #: rhodecode/templates/admin/repos/repo_edit.html:308
2360 2586 msgid "Confirm to delete this repository"
2361 2587 msgstr ""
2362 2588
2363 #: rhodecode/templates/admin/repos/repo_edit.html:317
2589 #: rhodecode/templates/admin/repos/repo_edit.html:310
2364 2590 #, python-format
2365 2591 msgid "this repository has %s fork"
2366 2592 msgid_plural "this repository has %s forks"
2367 2593 msgstr[0] ""
2368 2594 msgstr[1] ""
2369 2595
2370 #: rhodecode/templates/admin/repos/repo_edit.html:318
2596 #: rhodecode/templates/admin/repos/repo_edit.html:311
2371 2597 msgid "Detach forks"
2372 2598 msgstr ""
2373 2599
2374 #: rhodecode/templates/admin/repos/repo_edit.html:319
2600 #: rhodecode/templates/admin/repos/repo_edit.html:312
2375 2601 msgid "Delete forks"
2376 2602 msgstr ""
2377 2603
2378 #: rhodecode/templates/admin/repos/repo_edit.html:322
2604 #: rhodecode/templates/admin/repos/repo_edit.html:315
2379 2605 msgid ""
2380 2606 "This repository will be renamed in a special way in order to be "
2381 2607 "unaccesible for RhodeCode and VCS systems. If you need to fully delete it"
2382 2608 " from file system please do it manually"
2383 2609 msgstr ""
2384 2610
2385 #: rhodecode/templates/admin/repos/repo_edit.html:336
2611 #: rhodecode/templates/admin/repos/repo_edit.html:329
2386 2612 msgid "Extra fields"
2387 2613 msgstr ""
2388 2614
2389 #: rhodecode/templates/admin/repos/repo_edit.html:348
2615 #: rhodecode/templates/admin/repos/repo_edit.html:341
2390 2616 #, fuzzy, python-format
2391 2617 msgid "Confirm to delete this field: %s"
2392 2618 msgstr ""
2393 2619
2394 #: rhodecode/templates/admin/repos/repo_edit.html:362
2620 #: rhodecode/templates/admin/repos/repo_edit.html:355
2395 2621 msgid "New field key"
2396 2622 msgstr ""
2397 2623
2398 #: rhodecode/templates/admin/repos/repo_edit.html:370
2624 #: rhodecode/templates/admin/repos/repo_edit.html:363
2399 2625 msgid "New field label"
2400 2626 msgstr ""
2401 2627
2402 #: rhodecode/templates/admin/repos/repo_edit.html:373
2628 #: rhodecode/templates/admin/repos/repo_edit.html:366
2403 2629 msgid "Enter short label"
2404 2630 msgstr ""
2405 2631
2406 #: rhodecode/templates/admin/repos/repo_edit.html:379
2632 #: rhodecode/templates/admin/repos/repo_edit.html:372
2407 2633 msgid "New field description"
2408 2634 msgstr ""
2409 2635
2410 #: rhodecode/templates/admin/repos/repo_edit.html:382
2636 #: rhodecode/templates/admin/repos/repo_edit.html:375
2411 2637 msgid "Enter description of a field"
2412 2638 msgstr ""
2413 2639
2414 2640 #: rhodecode/templates/admin/repos/repo_edit_perms.html:3
2415 2641 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
2642 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:3
2416 2643 msgid "none"
2417 2644 msgstr ""
2418 2645
2419 2646 #: rhodecode/templates/admin/repos/repo_edit_perms.html:4
2420 2647 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:4
2648 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:4
2421 2649 msgid "read"
2422 2650 msgstr ""
2423 2651
2424 2652 #: rhodecode/templates/admin/repos/repo_edit_perms.html:5
2425 2653 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:5
2654 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:5
2426 2655 msgid "write"
2427 2656 msgstr ""
2428 2657
2429 2658 #: rhodecode/templates/admin/repos/repo_edit_perms.html:6
2430 2659 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
2660 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:6
2431 2661 msgid "admin"
2432 2662 msgstr ""
2433 2663
2434 2664 #: rhodecode/templates/admin/repos/repo_edit_perms.html:7
2435 2665 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:7
2666 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:7
2436 2667 msgid "member"
2437 2668 msgstr ""
2438 2669
@@ -2444,6 +2675,8 b' msgstr ""'
2444 2675 #: rhodecode/templates/admin/repos/repo_edit_perms.html:28
2445 2676 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20
2446 2677 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35
2678 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:20
2679 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:35
2447 2680 msgid "default"
2448 2681 msgstr ""
2449 2682
@@ -2451,33 +2684,37 b' msgstr ""'
2451 2684 #: rhodecode/templates/admin/repos/repo_edit_perms.html:58
2452 2685 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25
2453 2686 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55
2687 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:25
2688 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:55
2454 2689 msgid "revoke"
2455 2690 msgstr ""
2456 2691
2457 2692 #: rhodecode/templates/admin/repos/repo_edit_perms.html:83
2458 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80
2693 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:81
2694 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:81
2459 2695 msgid "Add another member"
2460 2696 msgstr ""
2461 2697
2462 #: rhodecode/templates/admin/repos/repo_edit_perms.html:97
2463 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100
2464 msgid "Failed to remove user"
2465 msgstr ""
2466
2467 #: rhodecode/templates/admin/repos/repo_edit_perms.html:112
2468 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116
2469 msgid "Failed to remove user group"
2470 msgstr ""
2471
2472 2698 #: rhodecode/templates/admin/repos/repos.html:5
2473 2699 msgid "Repositories administration"
2474 2700 msgstr ""
2475 2701
2476 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86
2477 msgid "apply to children"
2702 #: rhodecode/templates/admin/repos/repos.html:86
2703 #: rhodecode/templates/admin/users/user_edit_my_account.html:185
2704 #: rhodecode/templates/admin/users/users.html:109
2705 #: rhodecode/templates/bookmarks/bookmarks.html:76
2706 #: rhodecode/templates/branches/branches.html:75
2707 #: rhodecode/templates/journal/journal.html:206
2708 #: rhodecode/templates/journal/journal.html:296
2709 #: rhodecode/templates/tags/tags.html:76
2710 msgid "No records found."
2478 2711 msgstr ""
2479 2712
2480 2713 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
2714 msgid "apply to children"
2715 msgstr ""
2716
2717 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:88
2481 2718 msgid ""
2482 2719 "Set or revoke permission to all children of that group, including non-"
2483 2720 "private repositories and other groups"
@@ -2503,7 +2740,7 b' msgstr ""'
2503 2740 #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11
2504 2741 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11
2505 2742 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16
2506 #: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82
2743 #: rhodecode/templates/base/base.html:75 rhodecode/templates/base/base.html:91
2507 2744 msgid "Repository groups"
2508 2745 msgstr ""
2509 2746
@@ -2533,7 +2770,7 b' msgstr ""'
2533 2770 msgid "Add child group"
2534 2771 msgstr ""
2535 2772
2536 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76
2773 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:68
2537 2774 msgid ""
2538 2775 "Enable lock-by-pulling on group. This option will be applied to all other"
2539 2776 " groups and repositories inside"
@@ -2548,15 +2785,21 b' msgid "Number of toplevel repositories"'
2548 2785 msgstr ""
2549 2786
2550 2787 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64
2788 #: rhodecode/templates/admin/users_groups/users_groups.html:48
2789 #: rhodecode/templates/changeset/changeset_file_comment.html:73
2790 #: rhodecode/templates/changeset/changeset_file_comment.html:171
2551 2791 msgid "Edit"
2552 2792 msgstr ""
2553 2793
2554 2794 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65
2795 #: rhodecode/templates/admin/users_groups/users_groups.html:49
2555 2796 #: rhodecode/templates/base/perms_summary.html:29
2556 #: rhodecode/templates/base/perms_summary.html:48
2557 #: rhodecode/templates/base/perms_summary.html:50
2797 #: rhodecode/templates/base/perms_summary.html:60
2798 #: rhodecode/templates/base/perms_summary.html:62
2558 2799 #: rhodecode/templates/data_table/_dt_elements.html:116
2559 2800 #: rhodecode/templates/data_table/_dt_elements.html:117
2801 #: rhodecode/templates/data_table/_dt_elements.html:130
2802 #: rhodecode/templates/data_table/_dt_elements.html:131
2560 2803 msgid "edit"
2561 2804 msgstr ""
2562 2805
@@ -2654,8 +2897,8 b' msgid "Google Analytics code"'
2654 2897 msgstr ""
2655 2898
2656 2899 #: rhodecode/templates/admin/settings/settings.html:114
2657 #: rhodecode/templates/admin/settings/settings.html:186
2658 #: rhodecode/templates/admin/settings/settings.html:277
2900 #: rhodecode/templates/admin/settings/settings.html:195
2901 #: rhodecode/templates/admin/settings/settings.html:287
2659 2902 msgid "Save settings"
2660 2903 msgstr ""
2661 2904
@@ -2668,133 +2911,154 b' msgid "General"'
2668 2911 msgstr ""
2669 2912
2670 2913 #: rhodecode/templates/admin/settings/settings.html:134
2671 msgid "Use lightweight dashboard"
2672 msgstr ""
2673
2674 #: rhodecode/templates/admin/settings/settings.html:140
2675 2914 msgid "Use repository extra fields"
2676 2915 msgstr ""
2677 2916
2678 #: rhodecode/templates/admin/settings/settings.html:147
2917 #: rhodecode/templates/admin/settings/settings.html:136
2918 msgid "Allows storing additional customized fields per repository."
2919 msgstr ""
2920
2921 #: rhodecode/templates/admin/settings/settings.html:139
2922 msgid "Show RhodeCode version"
2923 msgstr ""
2924
2925 #: rhodecode/templates/admin/settings/settings.html:141
2926 msgid "Shows or hides displayed version of RhodeCode in the footer"
2927 msgstr ""
2928
2929 #: rhodecode/templates/admin/settings/settings.html:146
2930 msgid "Dashboard items"
2931 msgstr ""
2932
2933 #: rhodecode/templates/admin/settings/settings.html:150
2934 msgid ""
2935 "Number of items displayed in lightweight dashboard before pagination is "
2936 "shown."
2937 msgstr ""
2938
2939 #: rhodecode/templates/admin/settings/settings.html:155
2679 2940 msgid "Icons"
2680 2941 msgstr ""
2681 2942
2682 #: rhodecode/templates/admin/settings/settings.html:152
2943 #: rhodecode/templates/admin/settings/settings.html:160
2683 2944 msgid "Show public repo icon on repositories"
2684 2945 msgstr ""
2685 2946
2686 #: rhodecode/templates/admin/settings/settings.html:156
2947 #: rhodecode/templates/admin/settings/settings.html:164
2687 2948 msgid "Show private repo icon on repositories"
2688 2949 msgstr ""
2689 2950
2690 #: rhodecode/templates/admin/settings/settings.html:163
2951 #: rhodecode/templates/admin/settings/settings.html:166
2952 msgid "Show public/private icons next to repositories names"
2953 msgstr ""
2954
2955 #: rhodecode/templates/admin/settings/settings.html:172
2691 2956 msgid "Meta-Tagging"
2692 2957 msgstr ""
2693 2958
2694 #: rhodecode/templates/admin/settings/settings.html:168
2959 #: rhodecode/templates/admin/settings/settings.html:177
2695 2960 msgid "Stylify recognised metatags:"
2696 2961 msgstr ""
2697 2962
2698 #: rhodecode/templates/admin/settings/settings.html:195
2699 msgid "VCS settings"
2700 msgstr ""
2701
2702 2963 #: rhodecode/templates/admin/settings/settings.html:204
2964 msgid "VCS settings"
2965 msgstr ""
2966
2967 #: rhodecode/templates/admin/settings/settings.html:213
2703 2968 msgid "Web"
2704 2969 msgstr ""
2705 2970
2706 #: rhodecode/templates/admin/settings/settings.html:209
2971 #: rhodecode/templates/admin/settings/settings.html:218
2707 2972 msgid "Require SSL for vcs operations"
2708 2973 msgstr ""
2709 2974
2710 #: rhodecode/templates/admin/settings/settings.html:211
2975 #: rhodecode/templates/admin/settings/settings.html:220
2711 2976 msgid ""
2712 2977 "RhodeCode will require SSL for pushing or pulling. If SSL is missing it "
2713 2978 "will return HTTP Error 406: Not Acceptable"
2714 2979 msgstr ""
2715 2980
2716 #: rhodecode/templates/admin/settings/settings.html:217
2717 msgid "Hooks"
2718 msgstr ""
2719
2720 #: rhodecode/templates/admin/settings/settings.html:222
2721 msgid "Update repository after push (hg update)"
2722 msgstr ""
2723
2724 2981 #: rhodecode/templates/admin/settings/settings.html:226
2982 msgid "Hooks"
2983 msgstr ""
2984
2985 #: rhodecode/templates/admin/settings/settings.html:231
2986 msgid "Update repository after push (hg update)"
2987 msgstr ""
2988
2989 #: rhodecode/templates/admin/settings/settings.html:235
2725 2990 msgid "Show repository size after push"
2726 2991 msgstr ""
2727 2992
2728 #: rhodecode/templates/admin/settings/settings.html:230
2993 #: rhodecode/templates/admin/settings/settings.html:239
2729 2994 msgid "Log user push commands"
2730 2995 msgstr ""
2731 2996
2732 #: rhodecode/templates/admin/settings/settings.html:234
2733 msgid "Log user pull commands"
2734 msgstr ""
2735
2736 #: rhodecode/templates/admin/settings/settings.html:238
2737 msgid "Advanced setup"
2738 msgstr ""
2739
2740 2997 #: rhodecode/templates/admin/settings/settings.html:243
2741 msgid "Mercurial Extensions"
2742 msgstr ""
2743
2744 #: rhodecode/templates/admin/settings/settings.html:248
2745 msgid "Enable largefiles extension"
2998 msgid "Log user pull commands"
2999 msgstr ""
3000
3001 #: rhodecode/templates/admin/settings/settings.html:247
3002 msgid "Advanced setup"
2746 3003 msgstr ""
2747 3004
2748 3005 #: rhodecode/templates/admin/settings/settings.html:252
3006 msgid "Mercurial Extensions"
3007 msgstr ""
3008
3009 #: rhodecode/templates/admin/settings/settings.html:257
3010 msgid "Enable largefiles extension"
3011 msgstr ""
3012
3013 #: rhodecode/templates/admin/settings/settings.html:261
2749 3014 msgid "Enable hgsubversion extension"
2750 3015 msgstr ""
2751 3016
2752 #: rhodecode/templates/admin/settings/settings.html:254
3017 #: rhodecode/templates/admin/settings/settings.html:263
2753 3018 msgid ""
2754 3019 "Requires hgsubversion library installed. Allows cloning from svn remote "
2755 3020 "locations"
2756 3021 msgstr ""
2757 3022
2758 #: rhodecode/templates/admin/settings/settings.html:264
3023 #: rhodecode/templates/admin/settings/settings.html:274
2759 3024 msgid "Repositories location"
2760 3025 msgstr ""
2761 3026
2762 #: rhodecode/templates/admin/settings/settings.html:269
3027 #: rhodecode/templates/admin/settings/settings.html:279
2763 3028 msgid ""
2764 "This a crucial application setting. If you are really sure you need to "
2765 "change this, you must restart application in order to make this setting "
2766 "take effect. Click this label to unlock."
2767 msgstr ""
2768
2769 #: rhodecode/templates/admin/settings/settings.html:270
2770 #: rhodecode/templates/base/base.html:131
3029 "Click to unlock. You must restart RhodeCode in order to make this setting"
3030 " take effect."
3031 msgstr ""
3032
3033 #: rhodecode/templates/admin/settings/settings.html:280
3034 #: rhodecode/templates/base/base.html:143
2771 3035 msgid "Unlock"
2772 3036 msgstr ""
2773 3037
2774 #: rhodecode/templates/admin/settings/settings.html:272
3038 #: rhodecode/templates/admin/settings/settings.html:282
2775 3039 msgid ""
2776 3040 "Location where repositories are stored. After changing this value a "
2777 3041 "restart, and rescan is required"
2778 3042 msgstr ""
2779 3043
2780 #: rhodecode/templates/admin/settings/settings.html:292
3044 #: rhodecode/templates/admin/settings/settings.html:303
2781 3045 msgid "Test Email"
2782 3046 msgstr ""
2783 3047
2784 #: rhodecode/templates/admin/settings/settings.html:300
3048 #: rhodecode/templates/admin/settings/settings.html:311
2785 3049 msgid "Email to"
2786 3050 msgstr ""
2787 3051
2788 #: rhodecode/templates/admin/settings/settings.html:308
3052 #: rhodecode/templates/admin/settings/settings.html:319
2789 3053 msgid "Send"
2790 3054 msgstr ""
2791 3055
2792 #: rhodecode/templates/admin/settings/settings.html:314
3056 #: rhodecode/templates/admin/settings/settings.html:325
2793 3057 msgid "System Info and Packages"
2794 3058 msgstr ""
2795 3059
2796 #: rhodecode/templates/admin/settings/settings.html:317
2797 #: rhodecode/templates/changelog/changelog.html:42
3060 #: rhodecode/templates/admin/settings/settings.html:328
3061 #: rhodecode/templates/changelog/changelog.html:51
2798 3062 msgid "Show"
2799 3063 msgstr ""
2800 3064
@@ -2804,7 +3068,7 b' msgstr ""'
2804 3068
2805 3069 #: rhodecode/templates/admin/users/user_add.html:10
2806 3070 #: rhodecode/templates/admin/users/user_edit.html:11
2807 #: rhodecode/templates/base/base.html:71
3071 #: rhodecode/templates/base/base.html:76
2808 3072 msgid "Users"
2809 3073 msgstr ""
2810 3074
@@ -2861,44 +3125,21 b' msgstr ""'
2861 3125 msgid "New password confirmation"
2862 3126 msgstr ""
2863 3127
2864 #: rhodecode/templates/admin/users/user_edit.html:158
2865 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108
2866 msgid "Inherit default permissions"
2867 msgstr ""
2868
2869 3128 #: rhodecode/templates/admin/users/user_edit.html:163
2870 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113
2871 #, python-format
2872 msgid ""
2873 "Select to inherit permissions from %s settings. With this selected below "
2874 "options does not have any action"
2875 msgstr ""
2876
2877 #: rhodecode/templates/admin/users/user_edit.html:169
2878 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119
2879 msgid "Create repositories"
2880 msgstr ""
2881
2882 #: rhodecode/templates/admin/users/user_edit.html:177
2883 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127
2884 msgid "Fork repositories"
2885 msgstr ""
2886
2887 #: rhodecode/templates/admin/users/user_edit.html:200
2888 3129 msgid "Email addresses"
2889 3130 msgstr ""
2890 3131
2891 #: rhodecode/templates/admin/users/user_edit.html:213
3132 #: rhodecode/templates/admin/users/user_edit.html:176
2892 3133 #, python-format
2893 3134 msgid "Confirm to delete this email: %s"
2894 3135 msgstr ""
2895 3136
2896 #: rhodecode/templates/admin/users/user_edit.html:227
3137 #: rhodecode/templates/admin/users/user_edit.html:190
2897 3138 msgid "New email address"
2898 3139 msgstr ""
2899 3140
2900 3141 #: rhodecode/templates/admin/users/user_edit_my_account.html:5
2901 #: rhodecode/templates/base/base.html:242
3142 #: rhodecode/templates/base/base.html:254
2902 3143 msgid "My account"
2903 3144 msgstr ""
2904 3145
@@ -2935,7 +3176,7 b' msgstr ""'
2935 3176
2936 3177 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17
2937 3178 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45
2938 #: rhodecode/templates/pullrequests/pullrequest_data.html:7
3179 #: rhodecode/templates/pullrequests/pullrequest_data.html:11
2939 3180 #: rhodecode/templates/pullrequests/pullrequest_show.html:27
2940 3181 #: rhodecode/templates/pullrequests/pullrequest_show.html:42
2941 3182 msgid "Closed"
@@ -2955,7 +3196,7 b' msgid "I participate in"'
2955 3196 msgstr ""
2956 3197
2957 3198 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42
2958 #: rhodecode/templates/pullrequests/pullrequest_data.html:11
3199 #: rhodecode/templates/pullrequests/pullrequest_data.html:8
2959 3200 #, python-format
2960 3201 msgid "Pull request #%s opened by %s on %s"
2961 3202 msgstr ""
@@ -2986,12 +3227,12 b' msgstr ""'
2986 3227
2987 3228 #: rhodecode/templates/admin/users_groups/users_group_add.html:10
2988 3229 #: rhodecode/templates/admin/users_groups/users_groups.html:11
2989 #: rhodecode/templates/base/base.html:72
3230 #: rhodecode/templates/base/base.html:77 rhodecode/templates/base/base.html:94
2990 3231 msgid "User groups"
2991 3232 msgstr ""
2992 3233
2993 3234 #: rhodecode/templates/admin/users_groups/users_group_add.html:12
2994 #: rhodecode/templates/admin/users_groups/users_groups.html:25
3235 #: rhodecode/templates/admin/users_groups/users_groups.html:26
2995 3236 msgid "Add new user group"
2996 3237 msgstr ""
2997 3238
@@ -3004,7 +3245,7 b' msgid "UserGroups"'
3004 3245 msgstr ""
3005 3246
3006 3247 #: rhodecode/templates/admin/users_groups/users_group_edit.html:50
3007 #: rhodecode/templates/admin/users_groups/users_groups.html:35
3248 #: rhodecode/templates/admin/users_groups/users_groups.html:38
3008 3249 msgid "Members"
3009 3250 msgstr ""
3010 3251
@@ -3024,45 +3265,53 b' msgstr ""'
3024 3265 msgid "Add all elements"
3025 3266 msgstr ""
3026 3267
3027 #: rhodecode/templates/admin/users_groups/users_group_edit.html:150
3028 msgid "Group members"
3029 msgstr ""
3030
3031 #: rhodecode/templates/admin/users_groups/users_group_edit.html:167
3268 #: rhodecode/templates/admin/users_groups/users_group_edit.html:109
3032 3269 msgid "No members yet"
3033 3270 msgstr ""
3034 3271
3272 #: rhodecode/templates/admin/users_groups/users_group_edit.html:117
3273 msgid "Global Permissions"
3274 msgstr ""
3275
3035 3276 #: rhodecode/templates/admin/users_groups/users_groups.html:5
3036 3277 msgid "User groups administration"
3037 3278 msgstr ""
3038 3279
3039 #: rhodecode/templates/admin/users_groups/users_groups.html:47
3280 #: rhodecode/templates/admin/users_groups/users_groups.html:55
3040 3281 #, fuzzy, python-format
3041 3282 msgid "Confirm to delete this user group: %s"
3042 3283 msgstr ""
3043 3284
3285 #: rhodecode/templates/admin/users_groups/users_groups.html:62
3286 msgid "There are no user groups yet"
3287 msgstr ""
3288
3044 3289 #: rhodecode/templates/base/base.html:42
3045 msgid "Submit a bug"
3046 msgstr ""
3047
3048 #: rhodecode/templates/base/base.html:108
3290 #, python-format
3291 msgid "Server instance: %s"
3292 msgstr ""
3293
3294 #: rhodecode/templates/base/base.html:52
3295 msgid "Report a bug"
3296 msgstr ""
3297
3298 #: rhodecode/templates/base/base.html:121
3049 3299 #: rhodecode/templates/data_table/_dt_elements.html:9
3050 3300 #: rhodecode/templates/data_table/_dt_elements.html:11
3051 3301 #: rhodecode/templates/data_table/_dt_elements.html:13
3052 #: rhodecode/templates/pullrequests/pullrequest_show.html:81
3053 3302 #: rhodecode/templates/summary/summary.html:8
3054 3303 msgid "Summary"
3055 3304 msgstr ""
3056 3305
3057 #: rhodecode/templates/base/base.html:109
3058 #: rhodecode/templates/changelog/changelog.html:11
3306 #: rhodecode/templates/base/base.html:122
3307 #: rhodecode/templates/changelog/changelog.html:15
3059 3308 #: rhodecode/templates/data_table/_dt_elements.html:17
3060 3309 #: rhodecode/templates/data_table/_dt_elements.html:19
3061 3310 #: rhodecode/templates/data_table/_dt_elements.html:21
3062 3311 msgid "Changelog"
3063 3312 msgstr ""
3064 3313
3065 #: rhodecode/templates/base/base.html:110
3314 #: rhodecode/templates/base/base.html:123
3066 3315 #: rhodecode/templates/data_table/_dt_elements.html:25
3067 3316 #: rhodecode/templates/data_table/_dt_elements.html:27
3068 3317 #: rhodecode/templates/data_table/_dt_elements.html:29
@@ -3070,48 +3319,44 b' msgstr ""'
3070 3319 msgid "Files"
3071 3320 msgstr ""
3072 3321
3073 #: rhodecode/templates/base/base.html:112
3322 #: rhodecode/templates/base/base.html:125
3074 3323 msgid "Switch To"
3075 3324 msgstr ""
3076 3325
3077 #: rhodecode/templates/base/base.html:114
3078 #: rhodecode/templates/base/base.html:267
3079 msgid "loading..."
3080 msgstr ""
3081
3082 #: rhodecode/templates/base/base.html:118
3083 msgid "Options"
3084 msgstr ""
3085
3086 #: rhodecode/templates/base/base.html:124
3087 #: rhodecode/templates/forks/forks_data.html:21
3088 msgid "Compare fork"
3089 msgstr ""
3090
3091 #: rhodecode/templates/base/base.html:126
3092 msgid "Lightweight changelog"
3093 msgstr ""
3094
3095 3326 #: rhodecode/templates/base/base.html:127
3096 #: rhodecode/templates/base/base.html:287
3327 #: rhodecode/templates/base/base.html:279
3328 msgid "loading..."
3329 msgstr ""
3330
3331 #: rhodecode/templates/base/base.html:131
3332 msgid "Options"
3333 msgstr ""
3334
3335 #: rhodecode/templates/base/base.html:137
3336 #: rhodecode/templates/forks/forks_data.html:21
3337 msgid "Compare fork"
3338 msgstr ""
3339
3340 #: rhodecode/templates/base/base.html:139
3341 #: rhodecode/templates/base/base.html:312
3097 3342 #: rhodecode/templates/search/search.html:14
3098 3343 #: rhodecode/templates/search/search.html:54
3099 3344 msgid "Search"
3100 3345 msgstr ""
3101 3346
3102 #: rhodecode/templates/base/base.html:133
3347 #: rhodecode/templates/base/base.html:145
3103 3348 msgid "Lock"
3104 3349 msgstr ""
3105 3350
3106 #: rhodecode/templates/base/base.html:141
3351 #: rhodecode/templates/base/base.html:153
3107 3352 msgid "Follow"
3108 3353 msgstr ""
3109 3354
3110 #: rhodecode/templates/base/base.html:142
3355 #: rhodecode/templates/base/base.html:154
3111 3356 msgid "Unfollow"
3112 3357 msgstr ""
3113 3358
3114 #: rhodecode/templates/base/base.html:145
3359 #: rhodecode/templates/base/base.html:157
3115 3360 #: rhodecode/templates/data_table/_dt_elements.html:33
3116 3361 #: rhodecode/templates/data_table/_dt_elements.html:35
3117 3362 #: rhodecode/templates/data_table/_dt_elements.html:37
@@ -3120,60 +3365,113 b' msgstr ""'
3120 3365 msgid "Fork"
3121 3366 msgstr ""
3122 3367
3123 #: rhodecode/templates/base/base.html:147
3368 #: rhodecode/templates/base/base.html:159
3124 3369 msgid "Create Pull Request"
3125 3370 msgstr ""
3126 3371
3127 #: rhodecode/templates/base/base.html:153
3372 #: rhodecode/templates/base/base.html:165
3128 3373 msgid "Show Pull Requests"
3129 3374 msgstr ""
3130 3375
3131 #: rhodecode/templates/base/base.html:153
3376 #: rhodecode/templates/base/base.html:165
3132 3377 msgid "Pull Requests"
3133 3378 msgstr ""
3134 3379
3135 #: rhodecode/templates/base/base.html:190
3380 #: rhodecode/templates/base/base.html:202
3136 3381 msgid "Not logged in"
3137 3382 msgstr ""
3138 3383
3139 #: rhodecode/templates/base/base.html:197
3384 #: rhodecode/templates/base/base.html:209
3140 3385 msgid "Login to your account"
3141 3386 msgstr ""
3142 3387
3143 #: rhodecode/templates/base/base.html:220
3388 #: rhodecode/templates/base/base.html:232
3144 3389 msgid "Forgot password ?"
3145 3390 msgstr ""
3146 3391
3147 #: rhodecode/templates/base/base.html:243
3392 #: rhodecode/templates/base/base.html:255
3148 3393 msgid "Log Out"
3149 3394 msgstr ""
3150 3395
3151 #: rhodecode/templates/base/base.html:262
3152 msgid "Switch repository"
3153 msgstr ""
3154
3155 3396 #: rhodecode/templates/base/base.html:274
3156 msgid "Show recent activity"
3157 msgstr ""
3158
3159 #: rhodecode/templates/base/base.html:275
3160 #: rhodecode/templates/journal/journal.html:4
3161 msgid "Journal"
3397 msgid "Switch repository"
3162 3398 msgstr ""
3163 3399
3164 3400 #: rhodecode/templates/base/base.html:286
3401 msgid "Show recent activity"
3402 msgstr ""
3403
3404 #: rhodecode/templates/base/base.html:287
3405 #: rhodecode/templates/journal/journal.html:4
3406 msgid "Journal"
3407 msgstr ""
3408
3409 #: rhodecode/templates/base/base.html:298
3410 msgid "Show public gists"
3411 msgstr ""
3412
3413 #: rhodecode/templates/base/base.html:303
3414 msgid "All public gists"
3415 msgstr ""
3416
3417 #: rhodecode/templates/base/base.html:305
3418 msgid "My public gists"
3419 msgstr ""
3420
3421 #: rhodecode/templates/base/base.html:306
3422 msgid "My private gists"
3423 msgstr ""
3424
3425 #: rhodecode/templates/base/base.html:311
3165 3426 msgid "Search in repositories"
3166 3427 msgstr ""
3167 3428
3168 #: rhodecode/templates/base/perms_summary.html:8
3429 #: rhodecode/templates/base/default_perms_box.html:14
3430 msgid "Inherit default permissions"
3431 msgstr ""
3432
3433 #: rhodecode/templates/base/default_perms_box.html:18
3434 #, python-format
3435 msgid ""
3436 "Select to inherit permissions from %s settings. With this selected below "
3437 "options does not apply."
3438 msgstr ""
3439
3440 #: rhodecode/templates/base/default_perms_box.html:26
3441 msgid "Create repositories"
3442 msgstr ""
3443
3444 #: rhodecode/templates/base/default_perms_box.html:30
3445 msgid "Select this option to allow repository creation for this user"
3446 msgstr ""
3447
3448 #: rhodecode/templates/base/default_perms_box.html:35
3449 msgid "Create user groups"
3450 msgstr ""
3451
3452 #: rhodecode/templates/base/default_perms_box.html:39
3453 msgid "Select this option to allow user group creation for this user"
3454 msgstr ""
3455
3456 #: rhodecode/templates/base/default_perms_box.html:44
3457 msgid "Fork repositories"
3458 msgstr ""
3459
3460 #: rhodecode/templates/base/default_perms_box.html:48
3461 msgid "Select this option to allow repository forking for this user"
3462 msgstr ""
3463
3464 #: rhodecode/templates/base/perms_summary.html:11
3169 3465 msgid "No permissions defined yet"
3170 3466 msgstr ""
3171 3467
3172 #: rhodecode/templates/base/perms_summary.html:15
3468 #: rhodecode/templates/base/perms_summary.html:19
3469 #: rhodecode/templates/base/perms_summary.html:38
3173 3470 msgid "Permission"
3174 3471 msgstr ""
3175 3472
3176 #: rhodecode/templates/base/perms_summary.html:16
3473 #: rhodecode/templates/base/perms_summary.html:20
3474 #: rhodecode/templates/base/perms_summary.html:39
3177 3475 msgid "Edit Permission"
3178 3476 msgstr ""
3179 3477
@@ -3183,7 +3481,7 b' msgid "Add another comment"'
3183 3481 msgstr ""
3184 3482
3185 3483 #: rhodecode/templates/base/root.html:44
3186 #: rhodecode/templates/data_table/_dt_elements.html:140
3484 #: rhodecode/templates/data_table/_dt_elements.html:147
3187 3485 msgid "Stop following this repository"
3188 3486 msgstr ""
3189 3487
@@ -3200,7 +3498,7 b' msgid "members"'
3200 3498 msgstr ""
3201 3499
3202 3500 #: rhodecode/templates/base/root.html:48
3203 #: rhodecode/templates/pullrequests/pullrequest.html:181
3501 #: rhodecode/templates/pullrequests/pullrequest.html:203
3204 3502 msgid "Loading ..."
3205 3503 msgstr ""
3206 3504
@@ -3213,7 +3511,7 b' msgid "No matching files"'
3213 3511 msgstr ""
3214 3512
3215 3513 #: rhodecode/templates/base/root.html:51
3216 #: rhodecode/templates/changelog/changelog.html:36
3514 #: rhodecode/templates/changelog/changelog.html:45
3217 3515 msgid "Open new pull request"
3218 3516 msgstr ""
3219 3517
@@ -3242,31 +3540,48 b' msgstr ""'
3242 3540 msgid "Expand diff"
3243 3541 msgstr ""
3244 3542
3543 #: rhodecode/templates/base/root.html:58
3544 msgid "Failed to remoke permission"
3545 msgstr ""
3546
3245 3547 #: rhodecode/templates/bookmarks/bookmarks.html:5
3246 3548 #, python-format
3247 3549 msgid "%s Bookmarks"
3248 3550 msgstr ""
3249 3551
3250 #: rhodecode/templates/bookmarks/bookmarks.html:37
3552 #: rhodecode/templates/bookmarks/bookmarks.html:26
3553 msgid "Compare bookmarks"
3554 msgstr ""
3555
3556 #: rhodecode/templates/bookmarks/bookmarks.html:51
3251 3557 #: rhodecode/templates/bookmarks/bookmarks_data.html:8
3252 3558 #: rhodecode/templates/branches/branches.html:50
3253 3559 #: rhodecode/templates/branches/branches_data.html:8
3254 #: rhodecode/templates/shortlog/shortlog_data.html:8
3560 #: rhodecode/templates/changelog/changelog_summary_data.html:8
3255 3561 #: rhodecode/templates/tags/tags.html:51
3256 3562 #: rhodecode/templates/tags/tags_data.html:8
3257 3563 msgid "Author"
3258 3564 msgstr ""
3259 3565
3260 #: rhodecode/templates/bookmarks/bookmarks.html:38
3566 #: rhodecode/templates/bookmarks/bookmarks.html:52
3261 3567 #: rhodecode/templates/bookmarks/bookmarks_data.html:9
3262 3568 #: rhodecode/templates/branches/branches.html:51
3263 3569 #: rhodecode/templates/branches/branches_data.html:9
3264 #: rhodecode/templates/shortlog/shortlog_data.html:5
3570 #: rhodecode/templates/changelog/changelog_summary_data.html:5
3265 3571 #: rhodecode/templates/tags/tags.html:52
3266 3572 #: rhodecode/templates/tags/tags_data.html:9
3267 3573 msgid "Revision"
3268 3574 msgstr ""
3269 3575
3576 #: rhodecode/templates/bookmarks/bookmarks.html:54
3577 #: rhodecode/templates/bookmarks/bookmarks_data.html:10
3578 #: rhodecode/templates/branches/branches.html:53
3579 #: rhodecode/templates/branches/branches_data.html:10
3580 #: rhodecode/templates/tags/tags.html:54
3581 #: rhodecode/templates/tags/tags_data.html:10
3582 msgid "Compare"
3583 msgstr ""
3584
3270 3585 #: rhodecode/templates/branches/branches.html:5
3271 3586 #, python-format
3272 3587 msgid "%s Branches"
@@ -3276,65 +3591,68 b' msgstr ""'
3276 3591 msgid "Compare branches"
3277 3592 msgstr ""
3278 3593
3279 #: rhodecode/templates/branches/branches.html:53
3280 #: rhodecode/templates/branches/branches_data.html:10
3281 #: rhodecode/templates/tags/tags.html:54
3282 #: rhodecode/templates/tags/tags_data.html:10
3283 msgid "Compare"
3284 msgstr ""
3285
3286 3594 #: rhodecode/templates/changelog/changelog.html:6
3287 3595 #, python-format
3288 3596 msgid "%s Changelog"
3289 3597 msgstr ""
3290 3598
3291 #: rhodecode/templates/changelog/changelog.html:11
3599 #: rhodecode/templates/changelog/changelog.html:19
3292 3600 #, python-format
3293 3601 msgid "showing %d out of %d revision"
3294 3602 msgid_plural "showing %d out of %d revisions"
3295 3603 msgstr[0] ""
3296 3604 msgstr[1] ""
3297 3605
3298 #: rhodecode/templates/changelog/changelog.html:30
3606 #: rhodecode/templates/changelog/changelog.html:39
3299 3607 msgid "Clear selection"
3300 3608 msgstr ""
3301 3609
3302 #: rhodecode/templates/changelog/changelog.html:33
3610 #: rhodecode/templates/changelog/changelog.html:42
3303 3611 #: rhodecode/templates/forks/forks_data.html:19
3304 3612 #, python-format
3305 3613 msgid "Compare fork with %s"
3306 3614 msgstr ""
3307 3615
3308 #: rhodecode/templates/changelog/changelog.html:33
3616 #: rhodecode/templates/changelog/changelog.html:42
3309 3617 msgid "Compare fork with parent"
3310 3618 msgstr ""
3311 3619
3312 #: rhodecode/templates/changelog/changelog.html:76
3313 #: rhodecode/templates/summary/summary.html:404
3620 #: rhodecode/templates/changelog/changelog.html:78
3621 #: rhodecode/templates/changelog/changelog_summary_data.html:28
3622 #, python-format
3623 msgid "Click to open associated pull request #%s"
3624 msgstr ""
3625
3626 #: rhodecode/templates/changelog/changelog.html:102
3627 #: rhodecode/templates/summary/summary.html:403
3314 3628 msgid "Show more"
3315 3629 msgstr ""
3316 3630
3317 #: rhodecode/templates/changelog/changelog.html:89
3631 #: rhodecode/templates/changelog/changelog.html:115
3632 #: rhodecode/templates/changelog/changelog_summary_data.html:50
3633 #: rhodecode/templates/changeset/changeset.html:107
3318 3634 #: rhodecode/templates/changeset/changeset_range.html:86
3319 3635 #, python-format
3320 3636 msgid "Bookmark %s"
3321 3637 msgstr ""
3322 3638
3323 #: rhodecode/templates/changelog/changelog.html:95
3324 #: rhodecode/templates/changeset/changeset.html:111
3639 #: rhodecode/templates/changelog/changelog.html:121
3640 #: rhodecode/templates/changelog/changelog_summary_data.html:56
3641 #: rhodecode/templates/changeset/changeset.html:113
3325 3642 #: rhodecode/templates/changeset/changeset_range.html:92
3326 3643 #, python-format
3327 3644 msgid "Tag %s"
3328 3645 msgstr ""
3329 3646
3330 #: rhodecode/templates/changelog/changelog.html:100
3331 #: rhodecode/templates/changeset/changeset.html:106
3332 #: rhodecode/templates/changeset/changeset_range.html:80
3647 #: rhodecode/templates/changelog/changelog.html:126
3648 #: rhodecode/templates/changelog/changelog_summary_data.html:61
3649 #: rhodecode/templates/changeset/changeset.html:117
3650 #: rhodecode/templates/changeset/changeset_range.html:96
3333 3651 #, python-format
3334 3652 msgid "Branch %s"
3335 3653 msgstr ""
3336 3654
3337 #: rhodecode/templates/changelog/changelog.html:258
3655 #: rhodecode/templates/changelog/changelog.html:286
3338 3656 msgid "There are no changes yet"
3339 3657 msgstr ""
3340 3658
@@ -3364,6 +3682,38 b' msgstr ""'
3364 3682 msgid "Affected %s files"
3365 3683 msgstr ""
3366 3684
3685 #: rhodecode/templates/changelog/changelog_summary_data.html:6
3686 #: rhodecode/templates/files/files_add.html:75
3687 #: rhodecode/templates/files/files_edit.html:61
3688 msgid "Commit message"
3689 msgstr ""
3690
3691 #: rhodecode/templates/changelog/changelog_summary_data.html:7
3692 msgid "Age"
3693 msgstr ""
3694
3695 #: rhodecode/templates/changelog/changelog_summary_data.html:9
3696 msgid "Refs"
3697 msgstr ""
3698
3699 #: rhodecode/templates/changelog/changelog_summary_data.html:86
3700 msgid "Add or upload files directly via RhodeCode"
3701 msgstr ""
3702
3703 #: rhodecode/templates/changelog/changelog_summary_data.html:89
3704 #: rhodecode/templates/files/files_add.html:38
3705 #: rhodecode/templates/files/files_browser.html:31
3706 msgid "Add new file"
3707 msgstr ""
3708
3709 #: rhodecode/templates/changelog/changelog_summary_data.html:95
3710 msgid "Push new repo"
3711 msgstr ""
3712
3713 #: rhodecode/templates/changelog/changelog_summary_data.html:103
3714 msgid "Existing repository?"
3715 msgstr ""
3716
3367 3717 #: rhodecode/templates/changeset/changeset.html:6
3368 3718 #, python-format
3369 3719 msgid "%s Changeset"
@@ -3384,7 +3734,7 b' msgid "Changeset status"'
3384 3734 msgstr ""
3385 3735
3386 3736 #: rhodecode/templates/changeset/changeset.html:67
3387 #: rhodecode/templates/changeset/diff_block.html:23
3737 #: rhodecode/templates/changeset/diff_block.html:22
3388 3738 msgid "Raw diff"
3389 3739 msgstr ""
3390 3740
@@ -3393,12 +3743,12 b' msgid "Patch diff"'
3393 3743 msgstr ""
3394 3744
3395 3745 #: rhodecode/templates/changeset/changeset.html:69
3396 #: rhodecode/templates/changeset/diff_block.html:24
3746 #: rhodecode/templates/changeset/diff_block.html:23
3397 3747 msgid "Download diff"
3398 3748 msgstr ""
3399 3749
3400 3750 #: rhodecode/templates/changeset/changeset.html:73
3401 #: rhodecode/templates/changeset/changeset_file_comment.html:97
3751 #: rhodecode/templates/changeset/changeset_file_comment.html:103
3402 3752 #, python-format
3403 3753 msgid "%d comment"
3404 3754 msgid_plural "%d comments"
@@ -3406,7 +3756,7 b' msgstr[0] ""'
3406 3756 msgstr[1] ""
3407 3757
3408 3758 #: rhodecode/templates/changeset/changeset.html:73
3409 #: rhodecode/templates/changeset/changeset_file_comment.html:97
3759 #: rhodecode/templates/changeset/changeset_file_comment.html:103
3410 3760 #, python-format
3411 3761 msgid "(%d inline)"
3412 3762 msgid_plural "(%d inline)"
@@ -3414,11 +3764,11 b' msgstr[0] ""'
3414 3764 msgstr[1] ""
3415 3765
3416 3766 #: rhodecode/templates/changeset/changeset.html:103
3417 #: rhodecode/templates/changeset/changeset_range.html:77
3767 #: rhodecode/templates/changeset/changeset_range.html:82
3418 3768 msgid "merge"
3419 3769 msgstr ""
3420 3770
3421 #: rhodecode/templates/changeset/changeset.html:119
3771 #: rhodecode/templates/changeset/changeset.html:126
3422 3772 #: rhodecode/templates/compare/compare_diff.html:40
3423 3773 #: rhodecode/templates/pullrequests/pullrequest_show.html:113
3424 3774 #, python-format
@@ -3427,7 +3777,7 b' msgid_plural "%s files changed"'
3427 3777 msgstr[0] ""
3428 3778 msgstr[1] ""
3429 3779
3430 #: rhodecode/templates/changeset/changeset.html:121
3780 #: rhodecode/templates/changeset/changeset.html:128
3431 3781 #: rhodecode/templates/compare/compare_diff.html:42
3432 3782 #: rhodecode/templates/pullrequests/pullrequest_show.html:115
3433 3783 #, python-format
@@ -3436,15 +3786,15 b' msgid_plural "%s files changed with %s i'
3436 3786 msgstr[0] ""
3437 3787 msgstr[1] ""
3438 3788
3439 #: rhodecode/templates/changeset/changeset.html:134
3440 #: rhodecode/templates/changeset/changeset.html:146
3789 #: rhodecode/templates/changeset/changeset.html:141
3790 #: rhodecode/templates/changeset/changeset.html:153
3441 3791 #: rhodecode/templates/pullrequests/pullrequest_show.html:131
3442 3792 #: rhodecode/templates/pullrequests/pullrequest_show.html:195
3443 3793 msgid "Showing a huge diff might take some time and resources"
3444 3794 msgstr ""
3445 3795
3446 #: rhodecode/templates/changeset/changeset.html:134
3447 #: rhodecode/templates/changeset/changeset.html:146
3796 #: rhodecode/templates/changeset/changeset.html:141
3797 #: rhodecode/templates/changeset/changeset.html:153
3448 3798 #: rhodecode/templates/compare/compare_diff.html:58
3449 3799 #: rhodecode/templates/compare/compare_diff.html:69
3450 3800 #: rhodecode/templates/pullrequests/pullrequest_show.html:131
@@ -3462,51 +3812,64 b' msgstr ""'
3462 3812 msgid "Comment on pull request #%s"
3463 3813 msgstr ""
3464 3814
3465 #: rhodecode/templates/changeset/changeset_file_comment.html:57
3815 #: rhodecode/templates/changeset/changeset_file_comment.html:55
3466 3816 msgid "Submitting..."
3467 3817 msgstr ""
3468 3818
3469 #: rhodecode/templates/changeset/changeset_file_comment.html:60
3819 #: rhodecode/templates/changeset/changeset_file_comment.html:58
3470 3820 msgid "Commenting on line {1}."
3471 3821 msgstr ""
3472 3822
3823 #: rhodecode/templates/changeset/changeset_file_comment.html:59
3824 #: rhodecode/templates/changeset/changeset_file_comment.html:145
3825 #, python-format
3826 msgid "Comments parsed using %s syntax with %s support."
3827 msgstr ""
3828
3473 3829 #: rhodecode/templates/changeset/changeset_file_comment.html:61
3474 #: rhodecode/templates/changeset/changeset_file_comment.html:139
3475 #, python-format
3476 msgid "Comments parsed using %s syntax with %s support."
3477 msgstr ""
3478
3479 #: rhodecode/templates/changeset/changeset_file_comment.html:63
3480 #: rhodecode/templates/changeset/changeset_file_comment.html:141
3830 #: rhodecode/templates/changeset/changeset_file_comment.html:147
3481 3831 msgid "Use @username inside this text to send notification to this RhodeCode user"
3482 3832 msgstr ""
3483 3833
3484 #: rhodecode/templates/changeset/changeset_file_comment.html:74
3485 #: rhodecode/templates/changeset/changeset_file_comment.html:161
3834 #: rhodecode/templates/changeset/changeset_file_comment.html:65
3835 #: rhodecode/templates/changeset/changeset_file_comment.html:152
3836 #, fuzzy
3837 msgid "Preview"
3838 msgstr ""
3839
3840 #: rhodecode/templates/changeset/changeset_file_comment.html:72
3841 #: rhodecode/templates/changeset/changeset_file_comment.html:170
3842 msgid "Comment preview"
3843 msgstr ""
3844
3845 #: rhodecode/templates/changeset/changeset_file_comment.html:80
3846 #: rhodecode/templates/changeset/changeset_file_comment.html:177
3847 #: rhodecode/templates/email_templates/changeset_comment.html:16
3848 #: rhodecode/templates/email_templates/pull_request_comment.html:16
3486 3849 msgid "Comment"
3487 3850 msgstr ""
3488 3851
3489 #: rhodecode/templates/changeset/changeset_file_comment.html:75
3852 #: rhodecode/templates/changeset/changeset_file_comment.html:81
3490 3853 msgid "Cancel"
3491 3854 msgstr ""
3492 3855
3493 #: rhodecode/templates/changeset/changeset_file_comment.html:82
3856 #: rhodecode/templates/changeset/changeset_file_comment.html:88
3494 3857 msgid "You need to be logged in to comment."
3495 3858 msgstr ""
3496 3859
3497 #: rhodecode/templates/changeset/changeset_file_comment.html:82
3860 #: rhodecode/templates/changeset/changeset_file_comment.html:88
3498 3861 msgid "Login now"
3499 3862 msgstr ""
3500 3863
3501 #: rhodecode/templates/changeset/changeset_file_comment.html:86
3864 #: rhodecode/templates/changeset/changeset_file_comment.html:92
3502 3865 msgid "Hide"
3503 3866 msgstr ""
3504 3867
3505 #: rhodecode/templates/changeset/changeset_file_comment.html:143
3868 #: rhodecode/templates/changeset/changeset_file_comment.html:149
3506 3869 msgid "Change status"
3507 3870 msgstr ""
3508 3871
3509 #: rhodecode/templates/changeset/changeset_file_comment.html:163
3872 #: rhodecode/templates/changeset/changeset_file_comment.html:179
3510 3873 msgid "Comment and close"
3511 3874 msgstr ""
3512 3875
@@ -3519,19 +3882,19 b' msgstr ""'
3519 3882 msgid "Files affected"
3520 3883 msgstr ""
3521 3884
3522 #: rhodecode/templates/changeset/diff_block.html:22
3885 #: rhodecode/templates/changeset/diff_block.html:21
3523 3886 msgid "Show full diff for this file"
3524 3887 msgstr ""
3525 3888
3526 #: rhodecode/templates/changeset/diff_block.html:30
3889 #: rhodecode/templates/changeset/diff_block.html:29
3527 3890 msgid "Show inline comments"
3528 3891 msgstr ""
3529 3892
3530 #: rhodecode/templates/changeset/diff_block.html:55
3893 #: rhodecode/templates/changeset/diff_block.html:53
3531 3894 msgid "Show file at latest version in this repo"
3532 3895 msgstr ""
3533 3896
3534 #: rhodecode/templates/changeset/diff_block.html:56
3897 #: rhodecode/templates/changeset/diff_block.html:54
3535 3898 msgid "Show file at initial version in this repo"
3536 3899 msgstr ""
3537 3900
@@ -3606,27 +3969,24 b' msgstr ""'
3606 3969 msgid "Confirm to delete this repository: %s"
3607 3970 msgstr ""
3608 3971
3609 #: rhodecode/templates/data_table/_dt_elements.html:131
3972 #: rhodecode/templates/data_table/_dt_elements.html:137
3610 3973 #, python-format
3611 3974 msgid "Confirm to delete this user: %s"
3612 3975 msgstr ""
3613 3976
3614 #: rhodecode/templates/email_templates/changeset_comment.html:9
3615 #: rhodecode/templates/email_templates/pull_request_comment.html:15
3616 msgid "New status"
3617 msgstr ""
3618
3619 #: rhodecode/templates/email_templates/changeset_comment.html:11
3620 #: rhodecode/templates/email_templates/pull_request_comment.html:9
3621 msgid "View this comment here"
3977 #: rhodecode/templates/email_templates/changeset_comment.html:4
3978 #: rhodecode/templates/email_templates/pull_request.html:4
3979 #: rhodecode/templates/email_templates/pull_request_comment.html:4
3980 msgid "URL"
3981 msgstr ""
3982
3983 #: rhodecode/templates/email_templates/changeset_comment.html:6
3984 #, python-format
3985 msgid "%s commented on a %s changeset."
3622 3986 msgstr ""
3623 3987
3624 3988 #: rhodecode/templates/email_templates/changeset_comment.html:14
3625 msgid "Repo"
3626 msgstr ""
3627
3628 #: rhodecode/templates/email_templates/changeset_comment.html:16
3629 msgid "desc"
3989 msgid "The changeset status was changed to"
3630 3990 msgstr ""
3631 3991
3632 3992 #: rhodecode/templates/email_templates/main.html:8
@@ -3646,47 +4006,38 b' msgstr ""'
3646 4006 msgid "You can generate it by clicking following URL"
3647 4007 msgstr ""
3648 4008
3649 #: rhodecode/templates/email_templates/password_reset.html:11
3650 msgid "If you did not request new password please ignore this email."
3651 msgstr ""
3652
3653 #: rhodecode/templates/email_templates/pull_request.html:4
3654 #, python-format
3655 msgid ""
3656 "User %s opened pull request for repository %s and wants you to review "
3657 "changes."
3658 msgstr ""
3659
3660 #: rhodecode/templates/email_templates/pull_request.html:5
3661 msgid "View this pull request here"
4009 #: rhodecode/templates/email_templates/password_reset.html:10
4010 msgid "Please ignore this email if you did not request a new password ."
3662 4011 msgstr ""
3663 4012
3664 4013 #: rhodecode/templates/email_templates/pull_request.html:6
3665 msgid "title"
3666 msgstr ""
3667
3668 #: rhodecode/templates/email_templates/pull_request.html:7
3669 msgid "description"
3670 msgstr ""
3671
3672 #: rhodecode/templates/email_templates/pull_request.html:12
3673 msgid "revisions for reviewing"
3674 msgstr ""
3675
3676 #: rhodecode/templates/email_templates/pull_request_comment.html:3
3677 4014 #, python-format
3678 msgid "Pull request #%s for repository %s"
3679 msgstr ""
3680
3681 #: rhodecode/templates/email_templates/pull_request_comment.html:13
3682 msgid "Closing pull request with status"
3683 msgstr ""
3684
3685 #: rhodecode/templates/email_templates/registration.html:4
3686 msgid "A new user have registered in RhodeCode"
3687 msgstr ""
3688
3689 #: rhodecode/templates/email_templates/registration.html:9
4015 msgid ""
4016 "%s opened a pull request for repository %s and wants you to review "
4017 "changes."
4018 msgstr ""
4019
4020 #: rhodecode/templates/email_templates/pull_request.html:8
4021 #: rhodecode/templates/pullrequests/pullrequest.html:34
4022 #: rhodecode/templates/pullrequests/pullrequest_data.html:14
4023 #: rhodecode/templates/pullrequests/pullrequest_show.html:25
4024 msgid "Title"
4025 msgstr ""
4026
4027 #: rhodecode/templates/email_templates/pull_request_comment.html:6
4028 #, python-format
4029 msgid "%s commented on pull request \"%s\""
4030 msgstr ""
4031
4032 #: rhodecode/templates/email_templates/pull_request_comment.html:10
4033 msgid "Pull request was closed with status"
4034 msgstr ""
4035
4036 #: rhodecode/templates/email_templates/pull_request_comment.html:12
4037 msgid "Pull request changed status"
4038 msgstr ""
4039
4040 #: rhodecode/templates/email_templates/registration.html:6
3690 4041 msgid "View this user here"
3691 4042 msgstr ""
3692 4043
@@ -3713,7 +4064,6 b' msgstr ""'
3713 4064 #: rhodecode/templates/files/files.html:30
3714 4065 #: rhodecode/templates/files/files_add.html:31
3715 4066 #: rhodecode/templates/files/files_edit.html:31
3716 #: rhodecode/templates/shortlog/shortlog_data.html:9
3717 4067 msgid "Branch"
3718 4068 msgstr ""
3719 4069
@@ -3726,12 +4076,6 b' msgstr ""'
3726 4076 msgid "Add file"
3727 4077 msgstr ""
3728 4078
3729 #: rhodecode/templates/files/files_add.html:38
3730 #: rhodecode/templates/files/files_browser.html:31
3731 #: rhodecode/templates/shortlog/shortlog_data.html:78
3732 msgid "Add new file"
3733 msgstr ""
3734
3735 4079 #: rhodecode/templates/files/files_add.html:43
3736 4080 msgid "File Name"
3737 4081 msgstr ""
@@ -3760,12 +4104,6 b' msgstr ""'
3760 4104 msgid "use / to separate directories"
3761 4105 msgstr ""
3762 4106
3763 #: rhodecode/templates/files/files_add.html:75
3764 #: rhodecode/templates/files/files_edit.html:61
3765 #: rhodecode/templates/shortlog/shortlog_data.html:6
3766 msgid "Commit message"
3767 msgstr ""
3768
3769 4107 #: rhodecode/templates/files/files_add.html:79
3770 4108 #: rhodecode/templates/files/files_edit.html:65
3771 4109 msgid "Commit changes"
@@ -3829,12 +4167,6 b' msgstr ""'
3829 4167 msgid "Show annotation"
3830 4168 msgstr ""
3831 4169
3832 #: rhodecode/templates/files/files_edit.html:48
3833 #: rhodecode/templates/files/files_source.html:25
3834 #: rhodecode/templates/files/files_source.html:55
3835 msgid "Show as raw"
3836 msgstr ""
3837
3838 4170 #: rhodecode/templates/files/files_edit.html:49
3839 4171 #: rhodecode/templates/files/files_source.html:26
3840 4172 msgid "Download as raw"
@@ -4024,36 +4356,47 b' msgstr ""'
4024 4356 msgid "New pull request"
4025 4357 msgstr ""
4026 4358
4027 #: rhodecode/templates/pullrequests/pullrequest.html:52
4028 msgid "Detailed compare view"
4029 msgstr ""
4030
4031 #: rhodecode/templates/pullrequests/pullrequest.html:56
4359 #: rhodecode/templates/pullrequests/pullrequest.html:25
4360 msgid "Create new pull request"
4361 msgstr ""
4362
4363 #: rhodecode/templates/pullrequests/pullrequest.html:47
4364 msgid "Write a short description on this pull request"
4365 msgstr ""
4366
4367 #: rhodecode/templates/pullrequests/pullrequest.html:53
4368 msgid "Changeset flow"
4369 msgstr ""
4370
4371 #: rhodecode/templates/pullrequests/pullrequest.html:60
4372 #: rhodecode/templates/pullrequests/pullrequest_show.html:65
4373 msgid "Origin repository"
4374 msgstr ""
4375
4376 #: rhodecode/templates/pullrequests/pullrequest.html:85
4377 msgid "Send pull request"
4378 msgstr ""
4379
4380 #: rhodecode/templates/pullrequests/pullrequest.html:94
4032 4381 #: rhodecode/templates/pullrequests/pullrequest_show.html:137
4033 4382 msgid "Pull request reviewers"
4034 4383 msgstr ""
4035 4384
4036 #: rhodecode/templates/pullrequests/pullrequest.html:65
4385 #: rhodecode/templates/pullrequests/pullrequest.html:103
4037 4386 #: rhodecode/templates/pullrequests/pullrequest_show.html:149
4038 4387 msgid "owner"
4039 4388 msgstr ""
4040 4389
4041 #: rhodecode/templates/pullrequests/pullrequest.html:77
4390 #: rhodecode/templates/pullrequests/pullrequest.html:115
4042 4391 msgid "Add reviewer to this pull request."
4043 4392 msgstr ""
4044 4393
4045 #: rhodecode/templates/pullrequests/pullrequest.html:83
4046 msgid "Create new pull request"
4047 msgstr ""
4048
4049 #: rhodecode/templates/pullrequests/pullrequest.html:92
4050 #: rhodecode/templates/pullrequests/pullrequest_data.html:14
4051 #: rhodecode/templates/pullrequests/pullrequest_show.html:25
4052 msgid "Title"
4053 msgstr ""
4054
4055 #: rhodecode/templates/pullrequests/pullrequest.html:109
4056 msgid "Send pull request"
4394 #: rhodecode/templates/pullrequests/pullrequest.html:129
4395 msgid "Detailed compare view"
4396 msgstr ""
4397
4398 #: rhodecode/templates/pullrequests/pullrequest.html:150
4399 msgid "Destination repository"
4057 4400 msgstr ""
4058 4401
4059 4402 #: rhodecode/templates/pullrequests/pullrequest_show.html:4
@@ -4084,10 +4427,6 b' msgstr[1] ""'
4084 4427 msgid "Pull request was reviewed by all reviewers"
4085 4428 msgstr ""
4086 4429
4087 #: rhodecode/templates/pullrequests/pullrequest_show.html:65
4088 msgid "Origin repository"
4089 msgstr ""
4090
4091 4430 #: rhodecode/templates/pullrequests/pullrequest_show.html:89
4092 4431 msgid "Created on"
4093 4432 msgstr ""
@@ -4150,37 +4489,6 b' msgstr ""'
4150 4489 msgid "Permission denied"
4151 4490 msgstr ""
4152 4491
4153 #: rhodecode/templates/shortlog/shortlog.html:5
4154 #, fuzzy, python-format
4155 msgid "%s Lightweight Changelog"
4156 msgstr ""
4157
4158 #: rhodecode/templates/shortlog/shortlog.html:11
4159 #: rhodecode/templates/shortlog/shortlog.html:15
4160 msgid "Lightweight Changelog"
4161 msgstr ""
4162
4163 #: rhodecode/templates/shortlog/shortlog_data.html:7
4164 msgid "Age"
4165 msgstr ""
4166
4167 #: rhodecode/templates/shortlog/shortlog_data.html:20
4168 #, python-format
4169 msgid "Click to open associated pull request #%s"
4170 msgstr ""
4171
4172 #: rhodecode/templates/shortlog/shortlog_data.html:75
4173 msgid "Add or upload files directly via RhodeCode"
4174 msgstr ""
4175
4176 #: rhodecode/templates/shortlog/shortlog_data.html:84
4177 msgid "Push new repo"
4178 msgstr ""
4179
4180 #: rhodecode/templates/shortlog/shortlog_data.html:92
4181 msgid "Existing repository?"
4182 msgstr ""
4183
4184 4492 #: rhodecode/templates/summary/summary.html:4
4185 4493 #, python-format
4186 4494 msgid "%s Summary"
@@ -4219,7 +4527,7 b' msgstr ""'
4219 4527 msgid "Fork of"
4220 4528 msgstr ""
4221 4529
4222 #: rhodecode/templates/summary/summary.html:96
4530 #: rhodecode/templates/summary/summary.html:97
4223 4531 msgid "Remote clone"
4224 4532 msgstr ""
4225 4533
@@ -4245,8 +4553,7 b' msgstr ""'
4245 4553
4246 4554 #: rhodecode/templates/summary/summary.html:151
4247 4555 #: rhodecode/templates/summary/summary.html:167
4248 #: rhodecode/templates/summary/summary.html:232
4249 msgid "enable"
4556 msgid "Enable"
4250 4557 msgstr ""
4251 4558
4252 4559 #: rhodecode/templates/summary/summary.html:159
@@ -4261,7 +4568,7 b' msgstr ""'
4261 4568 msgid "Downloads are disabled for this repository"
4262 4569 msgstr ""
4263 4570
4264 #: rhodecode/templates/summary/summary.html:171
4571 #: rhodecode/templates/summary/summary.html:170
4265 4572 msgid "Download as zip"
4266 4573 msgstr ""
4267 4574
@@ -4286,6 +4593,10 b' msgstr ""'
4286 4593 msgid "Commit activity by day / author"
4287 4594 msgstr ""
4288 4595
4596 #: rhodecode/templates/summary/summary.html:232
4597 msgid "enable"
4598 msgstr ""
4599
4289 4600 #: rhodecode/templates/summary/summary.html:235
4290 4601 msgid "Stats gathered: "
4291 4602 msgstr ""
@@ -4300,51 +4611,47 b' msgstr ""'
4300 4611
4301 4612 #: rhodecode/templates/summary/summary.html:272
4302 4613 #, python-format
4303 msgid "Readme file at revision '%s'"
4304 msgstr ""
4305
4306 #: rhodecode/templates/summary/summary.html:275
4307 msgid "Permalink to this readme"
4308 msgstr ""
4309
4310 #: rhodecode/templates/summary/summary.html:333
4614 msgid "Readme file from revision %s"
4615 msgstr ""
4616
4617 #: rhodecode/templates/summary/summary.html:332
4311 4618 #, python-format
4312 4619 msgid "Download %s as %s"
4313 4620 msgstr ""
4314 4621
4315 #: rhodecode/templates/summary/summary.html:380
4622 #: rhodecode/templates/summary/summary.html:379
4316 4623 msgid "files"
4317 4624 msgstr ""
4318 4625
4626 #: rhodecode/templates/summary/summary.html:689
4627 msgid "commits"
4628 msgstr ""
4629
4319 4630 #: rhodecode/templates/summary/summary.html:690
4320 msgid "commits"
4631 msgid "files added"
4321 4632 msgstr ""
4322 4633
4323 4634 #: rhodecode/templates/summary/summary.html:691
4324 msgid "files added"
4635 msgid "files changed"
4325 4636 msgstr ""
4326 4637
4327 4638 #: rhodecode/templates/summary/summary.html:692
4328 msgid "files changed"
4329 msgstr ""
4330
4331 #: rhodecode/templates/summary/summary.html:693
4332 4639 msgid "files removed"
4333 4640 msgstr ""
4334 4641
4642 #: rhodecode/templates/summary/summary.html:694
4643 msgid "commit"
4644 msgstr ""
4645
4335 4646 #: rhodecode/templates/summary/summary.html:695
4336 msgid "commit"
4647 msgid "file added"
4337 4648 msgstr ""
4338 4649
4339 4650 #: rhodecode/templates/summary/summary.html:696
4340 msgid "file added"
4651 msgid "file changed"
4341 4652 msgstr ""
4342 4653
4343 4654 #: rhodecode/templates/summary/summary.html:697
4344 msgid "file changed"
4345 msgstr ""
4346
4347 #: rhodecode/templates/summary/summary.html:698
4348 4655 msgid "file removed"
4349 4656 msgstr ""
4350 4657
1 NO CONTENT: modified file, binary diff hidden
This diff has been collapsed as it changes many lines, (2163 lines changed) Show them Hide them
@@ -7,7 +7,7 b' msgid ""'
7 7 msgstr ""
8 8 "Project-Id-Version: RhodeCode 1.1.5\n"
9 9 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
10 "POT-Creation-Date: 2013-04-05 10:19-0700\n"
10 "POT-Creation-Date: 2013-06-01 18:38+0200\n"
11 11 "PO-Revision-Date: 2012-10-02 11:32+0100\n"
12 12 "Last-Translator: Vincent Duvert <vincent@duvert.net>\n"
13 13 "Language-Team: fr <LL@li.org>\n"
@@ -17,32 +17,30 b' msgstr ""'
17 17 "Content-Transfer-Encoding: 8bit\n"
18 18 "Generated-By: Babel 0.9.6\n"
19 19
20 #: rhodecode/controllers/changelog.py:95
20 #: rhodecode/controllers/changelog.py:149
21 21 msgid "All Branches"
22 22 msgstr "Toutes les branches"
23 23
24 #: rhodecode/controllers/changeset.py:83
25 #, fuzzy
24 #: rhodecode/controllers/changeset.py:84
26 25 msgid "Show white space"
27 26 msgstr "Afficher les espaces et tabulations"
28 27
29 #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97
30 #, fuzzy
28 #: rhodecode/controllers/changeset.py:91 rhodecode/controllers/changeset.py:98
31 29 msgid "Ignore white space"
32 30 msgstr "Ignorer les espaces et tabulations"
33 31
34 #: rhodecode/controllers/changeset.py:163
32 #: rhodecode/controllers/changeset.py:164
35 33 #, python-format
36 34 msgid "%s line context"
37 35 msgstr "Afficher %s lignes de contexte"
38 36
39 #: rhodecode/controllers/changeset.py:329
40 #: rhodecode/controllers/pullrequests.py:438
37 #: rhodecode/controllers/changeset.py:345
38 #: rhodecode/controllers/pullrequests.py:481
41 39 #, python-format
42 40 msgid "Status change -> %s"
43 41 msgstr "Changement de statut -> %s"
44 42
45 #: rhodecode/controllers/changeset.py:360
43 #: rhodecode/controllers/changeset.py:376
46 44 #, fuzzy
47 45 msgid ""
48 46 "Changing status on a changeset associated with a closed pull request is "
@@ -52,8 +50,7 b' msgstr ""'
52 50 "n’est pas autorisé."
53 51
54 52 #: rhodecode/controllers/compare.py:74
55 #: rhodecode/controllers/pullrequests.py:167
56 #: rhodecode/controllers/shortlog.py:100
53 #: rhodecode/controllers/pullrequests.py:259
57 54 msgid "There are no changesets yet"
58 55 msgstr "Il n’y a aucun changement pour le moment"
59 56
@@ -98,8 +95,8 b' msgid "%s %s feed"'
98 95 msgstr "Flux %s de %s"
99 96
100 97 #: rhodecode/controllers/feed.py:86
101 #: rhodecode/templates/changeset/changeset.html:134
102 #: rhodecode/templates/changeset/changeset.html:146
98 #: rhodecode/templates/changeset/changeset.html:141
99 #: rhodecode/templates/changeset/changeset.html:153
103 100 #: rhodecode/templates/compare/compare_diff.html:58
104 101 #: rhodecode/templates/compare/compare_diff.html:69
105 102 #: rhodecode/templates/pullrequests/pullrequest_show.html:131
@@ -107,124 +104,125 b' msgstr "Flux %s de %s"'
107 104 msgid "Changeset was too big and was cut off..."
108 105 msgstr "Cet ensemble de changements était trop important et a été découpé…"
109 106
110 #: rhodecode/controllers/feed.py:91
111 #, fuzzy, python-format
107 #: rhodecode/controllers/feed.py:90
108 #, python-format
112 109 msgid "%s committed on %s"
113 110 msgstr "%s a commité, le %s"
114 111
115 #: rhodecode/controllers/files.py:88
116 #, fuzzy
112 #: rhodecode/controllers/files.py:89
113 #
117 114 msgid "Click here to add new file"
118 115 msgstr "Ajouter un nouveau fichier"
119 116
120 #: rhodecode/controllers/files.py:89
117 #: rhodecode/controllers/files.py:90
121 118 #, python-format
122 119 msgid "There are no files yet %s"
123 120 msgstr "Il n’y a pas encore de fichiers %s"
124 121
125 #: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335
122 #: rhodecode/controllers/files.py:271 rhodecode/controllers/files.py:339
126 123 #, python-format
127 124 msgid "This repository is has been locked by %s on %s"
128 125 msgstr "Ce dépôt a été verrouillé par %s sur %s."
129 126
130 #: rhodecode/controllers/files.py:279
127 #: rhodecode/controllers/files.py:283
131 128 msgid "You can only edit files with revision being a valid branch "
132 129 msgstr ""
133 130
134 #: rhodecode/controllers/files.py:293
135 #, fuzzy, python-format
131 #: rhodecode/controllers/files.py:297
132 #, python-format
136 133 msgid "Edited file %s via RhodeCode"
137 134 msgstr "%s édité via RhodeCode"
138 135
139 #: rhodecode/controllers/files.py:309
136 #: rhodecode/controllers/files.py:313
140 137 msgid "No changes"
141 138 msgstr "Aucun changement"
142 139
143 #: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388
140 #: rhodecode/controllers/files.py:322 rhodecode/controllers/files.py:394
144 141 #, python-format
145 142 msgid "Successfully committed to %s"
146 143 msgstr "Commit réalisé avec succès sur %s"
147 144
148 #: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394
145 #: rhodecode/controllers/files.py:327 rhodecode/controllers/files.py:405
149 146 msgid "Error occurred during commit"
150 147 msgstr "Une erreur est survenue durant le commit"
151 148
152 #: rhodecode/controllers/files.py:347
153 #, fuzzy
149 #: rhodecode/controllers/files.py:351
150 #
154 151 msgid "Added file via RhodeCode"
155 152 msgstr "%s ajouté par RhodeCode"
156 153
157 #: rhodecode/controllers/files.py:364
158 msgid "No content"
159 msgstr "Aucun contenu"
160
161 154 #: rhodecode/controllers/files.py:368
155 msgid "No content"
156 msgstr "Aucun contenu"
157
158 #: rhodecode/controllers/files.py:372
162 159 msgid "No filename"
163 160 msgstr "Aucun nom de fichier"
164 161
165 #: rhodecode/controllers/files.py:372
162 #: rhodecode/controllers/files.py:397
166 163 msgid "Location must be relative path and must not contain .. in path"
167 164 msgstr ""
168 165
169 #: rhodecode/controllers/files.py:420
170 #, fuzzy
166 #: rhodecode/controllers/files.py:431
167 #
171 168 msgid "Downloads disabled"
172 169 msgstr "Les téléchargements sont désactivés"
173 170
174 #: rhodecode/controllers/files.py:431
171 #: rhodecode/controllers/files.py:442
175 172 #, python-format
176 173 msgid "Unknown revision %s"
177 174 msgstr "Révision %s inconnue."
178 175
179 #: rhodecode/controllers/files.py:433
176 #: rhodecode/controllers/files.py:444
180 177 msgid "Empty repository"
181 178 msgstr "Dépôt vide."
182 179
183 #: rhodecode/controllers/files.py:435
180 #: rhodecode/controllers/files.py:446
184 181 msgid "Unknown archive type"
185 182 msgstr "Type d’archive inconnu"
186 183
187 #: rhodecode/controllers/files.py:617
184 #: rhodecode/controllers/files.py:631
188 185 #: rhodecode/templates/changeset/changeset_range.html:9
186 #: rhodecode/templates/email_templates/pull_request.html:12
187 #: rhodecode/templates/pullrequests/pullrequest.html:124
189 188 msgid "Changesets"
190 189 msgstr "Changesets"
191 190
192 #: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131
193 #: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606
191 #: rhodecode/controllers/files.py:632 rhodecode/controllers/pullrequests.py:152
192 #: rhodecode/controllers/summary.py:76 rhodecode/model/scm.py:682
194 193 #: rhodecode/templates/switch_to_list.html:3
195 194 #: rhodecode/templates/branches/branches.html:10
196 195 msgid "Branches"
197 196 msgstr "Branches"
198 197
199 #: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132
200 #: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617
198 #: rhodecode/controllers/files.py:633 rhodecode/controllers/pullrequests.py:153
199 #: rhodecode/controllers/summary.py:77 rhodecode/model/scm.py:693
201 200 #: rhodecode/templates/switch_to_list.html:15
202 #: rhodecode/templates/shortlog/shortlog_data.html:10
203 201 #: rhodecode/templates/tags/tags.html:10
204 202 msgid "Tags"
205 203 msgstr "Tags"
206 204
207 #: rhodecode/controllers/forks.py:175
208 #, fuzzy, python-format
205 #: rhodecode/controllers/forks.py:176
206 #, python-format
209 207 msgid "Forked repository %s as %s"
210 208 msgstr "dépôt %s forké en tant que %s"
211 209
212 #: rhodecode/controllers/forks.py:189
210 #: rhodecode/controllers/forks.py:190
213 211 #, python-format
214 212 msgid "An error occurred during repository forking %s"
215 213 msgstr "Une erreur est survenue durant le fork du dépôt %s."
216 214
217 #: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318
215 #: rhodecode/controllers/journal.py:110 rhodecode/controllers/journal.py:153
218 216 msgid "public journal"
219 217 msgstr "Journal public"
220 218
221 #: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322
219 #: rhodecode/controllers/journal.py:114 rhodecode/controllers/journal.py:157
222 220 #: rhodecode/templates/journal/journal.html:12
223 221 msgid "journal"
224 222 msgstr "Journal"
225 223
226 224 #: rhodecode/controllers/login.py:138
227 #, fuzzy
225 #
228 226 msgid "You have successfully registered into RhodeCode"
229 227 msgstr "Vous vous êtes inscrits avec succès à RhodeCode"
230 228
@@ -240,75 +238,75 b' msgstr ""'
240 238 "Votre mot de passe a été réinitialisé. Votre nouveau mot de passe vous a "
241 239 "été envoyé par e-mail."
242 240
243 #: rhodecode/controllers/pullrequests.py:118
241 #: rhodecode/controllers/pullrequests.py:139
244 242 #: rhodecode/templates/changeset/changeset.html:10
245 #: rhodecode/templates/email_templates/changeset_comment.html:15
243 #: rhodecode/templates/email_templates/changeset_comment.html:8
246 244 msgid "Changeset"
247 245 msgstr "Changements"
248 246
249 #: rhodecode/controllers/pullrequests.py:128
247 #: rhodecode/controllers/pullrequests.py:149
250 248 msgid "Special"
251 249 msgstr ""
252 250
253 #: rhodecode/controllers/pullrequests.py:129
254 #, fuzzy
251 #: rhodecode/controllers/pullrequests.py:150
252 #
255 253 msgid "Peer branches"
256 msgstr "Branches"
257
258 #: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612
254 msgstr ""
255
256 #: rhodecode/controllers/pullrequests.py:151 rhodecode/model/scm.py:688
259 257 #: rhodecode/templates/switch_to_list.html:28
260 258 #: rhodecode/templates/bookmarks/bookmarks.html:10
261 259 msgid "Bookmarks"
262 260 msgstr "Signets"
263 261
264 #: rhodecode/controllers/pullrequests.py:228
262 #: rhodecode/controllers/pullrequests.py:324
265 263 msgid "Pull request requires a title with min. 3 chars"
266 264 msgstr "Les requêtes de pull nécessitent un titre d’au moins 3 caractères."
267 265
268 #: rhodecode/controllers/pullrequests.py:230
269 #, fuzzy
266 #: rhodecode/controllers/pullrequests.py:326
267 #
270 268 msgid "Error creating pull request"
271 269 msgstr "Une erreur est survenue lors de la création de la requête de pull."
272 270
273 #: rhodecode/controllers/pullrequests.py:251
271 #: rhodecode/controllers/pullrequests.py:346
274 272 msgid "Successfully opened new pull request"
275 273 msgstr "La requête de pull a été ouverte avec succès."
276 274
277 #: rhodecode/controllers/pullrequests.py:254
275 #: rhodecode/controllers/pullrequests.py:349
278 276 msgid "Error occurred during sending pull request"
279 277 msgstr "Une erreur est survenue durant l’envoi de la requête de pull."
280 278
281 #: rhodecode/controllers/pullrequests.py:287
279 #: rhodecode/controllers/pullrequests.py:388
282 280 msgid "Successfully deleted pull request"
283 281 msgstr "La requête de pull a été supprimée avec succès."
284 282
285 #: rhodecode/controllers/pullrequests.py:441
283 #: rhodecode/controllers/pullrequests.py:484
286 284 msgid "Closing with"
287 285 msgstr ""
288 286
289 #: rhodecode/controllers/pullrequests.py:478
287 #: rhodecode/controllers/pullrequests.py:521
290 288 msgid "Closing pull request on other statuses than rejected or approved forbidden"
291 289 msgstr ""
292 290
293 #: rhodecode/controllers/search.py:134
291 #: rhodecode/controllers/search.py:132
294 292 msgid "Invalid search query. Try quoting it."
295 293 msgstr "Requête invalide. Essayer de la mettre entre guillemets."
296 294
297 #: rhodecode/controllers/search.py:139
295 #: rhodecode/controllers/search.py:137
298 296 msgid "There is no index to search in. Please run whoosh indexer"
299 297 msgstr ""
300 298 "L’index de recherche n’est pas présent. Veuillez exécuter l’indexeur de "
301 299 "code Whoosh."
302 300
303 #: rhodecode/controllers/search.py:143
301 #: rhodecode/controllers/search.py:141
304 302 msgid "An error occurred during this search operation"
305 303 msgstr "Une erreur est survenue durant l’opération de recherche."
306 304
307 #: rhodecode/controllers/summary.py:141
305 #: rhodecode/controllers/summary.py:182
308 306 msgid "No data loaded yet"
309 307 msgstr "Aucune donnée actuellement disponible."
310 308
311 #: rhodecode/controllers/summary.py:147
309 #: rhodecode/controllers/summary.py:188
312 310 #: rhodecode/templates/summary/summary.html:149
313 311 msgid "Statistics are disabled for this repository"
314 312 msgstr "La mise à jour des statistiques est désactivée pour ce dépôt."
@@ -323,6 +321,45 b' msgstr "Mise \xc3\xa0 jour r\xc3\xa9ussie des r\xc3\xa9glages LDAP"'
323 321 msgid "Error occurred during update of defaults"
324 322 msgstr "Une erreur est survenue durant la mise à jour de l’utilisateur %s."
325 323
324 #: rhodecode/controllers/admin/gists.py:56
325 #
326 msgid "forever"
327 msgstr ""
328
329 #: rhodecode/controllers/admin/gists.py:57
330 #
331 msgid "5 minutes"
332 msgstr "5 minute"
333
334 #: rhodecode/controllers/admin/gists.py:58
335 #
336 msgid "1 hour"
337 msgstr "1 heure"
338
339 #: rhodecode/controllers/admin/gists.py:59
340 #
341 msgid "1 day"
342 msgstr "1 jour"
343
344 #: rhodecode/controllers/admin/gists.py:60
345 #
346 msgid "1 month"
347 msgstr "1 mois"
348
349 #: rhodecode/controllers/admin/gists.py:62
350 msgid "Lifetime"
351 msgstr ""
352
353 #: rhodecode/controllers/admin/gists.py:127
354 #, fuzzy
355 msgid "Error occurred during gist creation"
356 msgstr "Une erreur est survenue durant la création du hook."
357
358 #: rhodecode/controllers/admin/gists.py:165
359 #, fuzzy, python-format
360 msgid "Deleted gist %s"
361 msgstr "Dépôt %s supprimé"
362
326 363 #: rhodecode/controllers/admin/ldap_settings.py:50
327 364 msgid "BASE"
328 365 msgstr "Base"
@@ -367,36 +404,40 b' msgstr "Connection LDAPS"'
367 404 msgid "START_TLS on LDAP connection"
368 405 msgstr "START_TLS à la connexion"
369 406
370 #: rhodecode/controllers/admin/ldap_settings.py:126
407 #: rhodecode/controllers/admin/ldap_settings.py:124
371 408 msgid "LDAP settings updated successfully"
372 409 msgstr "Mise à jour réussie des réglages LDAP"
373 410
374 #: rhodecode/controllers/admin/ldap_settings.py:130
411 #: rhodecode/controllers/admin/ldap_settings.py:128
375 412 msgid "Unable to activate ldap. The \"python-ldap\" library is missing."
376 413 msgstr "Impossible d’activer LDAP. La bibliothèque « python-ldap » est manquante."
377 414
378 #: rhodecode/controllers/admin/ldap_settings.py:147
415 #: rhodecode/controllers/admin/ldap_settings.py:145
379 416 #, fuzzy
380 417 msgid "Error occurred during update of ldap settings"
381 418 msgstr "Une erreur est survenue durant la mise à jour des réglages du LDAP."
382 419
420 #: rhodecode/controllers/admin/permissions.py:58
421 #: rhodecode/controllers/admin/permissions.py:62
422 #: rhodecode/controllers/admin/permissions.py:66
423 msgid "None"
424 msgstr "Aucun"
425
426 #: rhodecode/controllers/admin/permissions.py:59
427 #: rhodecode/controllers/admin/permissions.py:63
428 #: rhodecode/controllers/admin/permissions.py:67
429 msgid "Read"
430 msgstr "Lire"
431
383 432 #: rhodecode/controllers/admin/permissions.py:60
384 433 #: rhodecode/controllers/admin/permissions.py:64
385 msgid "None"
386 msgstr "Aucun"
434 #: rhodecode/controllers/admin/permissions.py:68
435 msgid "Write"
436 msgstr "Écrire"
387 437
388 438 #: rhodecode/controllers/admin/permissions.py:61
389 439 #: rhodecode/controllers/admin/permissions.py:65
390 msgid "Read"
391 msgstr "Lire"
392
393 #: rhodecode/controllers/admin/permissions.py:62
394 #: rhodecode/controllers/admin/permissions.py:66
395 msgid "Write"
396 msgstr "Écrire"
397
398 #: rhodecode/controllers/admin/permissions.py:63
399 #: rhodecode/controllers/admin/permissions.py:67
440 #: rhodecode/controllers/admin/permissions.py:69
400 441 #: rhodecode/templates/admin/defaults/defaults.html:9
401 442 #: rhodecode/templates/admin/ldap/ldap.html:9
402 443 #: rhodecode/templates/admin/permissions/permissions.html:9
@@ -417,44 +458,58 b' msgstr "\xc3\x89crire"'
417 458 #: rhodecode/templates/admin/users_groups/users_group_add.html:8
418 459 #: rhodecode/templates/admin/users_groups/users_group_edit.html:9
419 460 #: rhodecode/templates/admin/users_groups/users_groups.html:9
420 #: rhodecode/templates/base/base.html:292
421 #: rhodecode/templates/base/base.html:293
422 #: rhodecode/templates/base/base.html:299
423 #: rhodecode/templates/base/base.html:300
461 #: rhodecode/templates/base/base.html:317
462 #: rhodecode/templates/base/base.html:318
463 #: rhodecode/templates/base/base.html:324
464 #: rhodecode/templates/base/base.html:325
424 465 msgid "Admin"
425 466 msgstr "Administration"
426 467
427 #: rhodecode/controllers/admin/permissions.py:70
428 #: rhodecode/controllers/admin/permissions.py:76
429 #: rhodecode/controllers/admin/permissions.py:79
468 #: rhodecode/controllers/admin/permissions.py:72
469 #: rhodecode/controllers/admin/permissions.py:83
470 #: rhodecode/controllers/admin/permissions.py:86
471 #: rhodecode/controllers/admin/permissions.py:89
472 #: rhodecode/controllers/admin/permissions.py:92
430 473 msgid "Disabled"
431 474 msgstr "Interdite"
432 475
433 #: rhodecode/controllers/admin/permissions.py:72
476 #: rhodecode/controllers/admin/permissions.py:74
434 477 #, fuzzy
435 478 msgid "Allowed with manual account activation"
436 479 msgstr "Autorisé avec activation manuelle du compte"
437 480
438 #: rhodecode/controllers/admin/permissions.py:74
481 #: rhodecode/controllers/admin/permissions.py:76
439 482 #, fuzzy
440 483 msgid "Allowed with automatic account activation"
441 484 msgstr "Autorisé avec activation automatique du compte"
442 485
443 #: rhodecode/controllers/admin/permissions.py:77
486 #: rhodecode/controllers/admin/permissions.py:79
487 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1439 rhodecode/model/db.py:1444
488 msgid "Manual activation of external account"
489 msgstr ""
490
444 491 #: rhodecode/controllers/admin/permissions.py:80
492 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1440 rhodecode/model/db.py:1445
493 msgid "Automatic activation of external account"
494 msgstr ""
495
496 #: rhodecode/controllers/admin/permissions.py:84
497 #: rhodecode/controllers/admin/permissions.py:87
498 #: rhodecode/controllers/admin/permissions.py:90
499 #: rhodecode/controllers/admin/permissions.py:93
445 500 msgid "Enabled"
446 501 msgstr "Autorisée"
447 502
448 #: rhodecode/controllers/admin/permissions.py:128
503 #: rhodecode/controllers/admin/permissions.py:138
449 504 msgid "Default permissions updated successfully"
450 505 msgstr "Permissions par défaut mises à jour avec succès"
451 506
452 #: rhodecode/controllers/admin/permissions.py:142
507 #: rhodecode/controllers/admin/permissions.py:152
453 508 #, fuzzy
454 509 msgid "Error occurred during update of permissions"
455 510 msgstr "erreur pendant la mise à jour des permissions"
456 511
457 #: rhodecode/controllers/admin/repos.py:127
512 #: rhodecode/controllers/admin/repos.py:128
458 513 msgid "--REMOVE FORK--"
459 514 msgstr "[Pas un fork]"
460 515
@@ -473,250 +528,237 b' msgstr "Le d\xc3\xa9p\xc3\xb4t %s a \xc3\xa9t\xc3\xa9 cr\xc3\xa9\xc3\xa9."'
473 528 msgid "Error creating repository %s"
474 529 msgstr "Le dépôt %s a été créé."
475 530
476 #: rhodecode/controllers/admin/repos.py:266
531 #: rhodecode/controllers/admin/repos.py:270
477 532 #, python-format
478 533 msgid "Repository %s updated successfully"
479 534 msgstr "Dépôt %s mis à jour avec succès."
480 535
481 #: rhodecode/controllers/admin/repos.py:284
536 #: rhodecode/controllers/admin/repos.py:288
482 537 #, fuzzy, python-format
483 538 msgid "Error occurred during update of repository %s"
484 539 msgstr "Une erreur est survenue lors de la mise à jour du dépôt %s."
485 540
486 #: rhodecode/controllers/admin/repos.py:311
487 #: rhodecode/controllers/api/api.py:877
541 #: rhodecode/controllers/admin/repos.py:315
488 542 #, python-format
489 543 msgid "Detached %s forks"
490 544 msgstr ""
491 545
492 #: rhodecode/controllers/admin/repos.py:314
493 #: rhodecode/controllers/api/api.py:879
546 #: rhodecode/controllers/admin/repos.py:318
494 547 #, fuzzy, python-format
495 548 msgid "Deleted %s forks"
496 549 msgstr "Dépôt %s supprimé"
497 550
498 #: rhodecode/controllers/admin/repos.py:319
551 #: rhodecode/controllers/admin/repos.py:323
499 552 #, fuzzy, python-format
500 553 msgid "Deleted repository %s"
501 554 msgstr "Dépôt %s supprimé"
502 555
503 #: rhodecode/controllers/admin/repos.py:322
556 #: rhodecode/controllers/admin/repos.py:326
504 557 #, python-format
505 558 msgid "Cannot delete %s it still contains attached forks"
506 559 msgstr "Impossible de supprimer le dépôt %s : Des forks y sont attachés."
507 560
508 #: rhodecode/controllers/admin/repos.py:327
561 #: rhodecode/controllers/admin/repos.py:331
509 562 #, python-format
510 563 msgid "An error occurred during deletion of %s"
511 564 msgstr "Erreur pendant la suppression de %s"
512 565
513 #: rhodecode/controllers/admin/repos.py:365
566 #: rhodecode/controllers/admin/repos.py:345
514 567 #, fuzzy
515 568 msgid "Repository permissions updated"
516 569 msgstr "Création de dépôt désactivée"
517 570
518 #: rhodecode/controllers/admin/repos.py:384
519 msgid "An error occurred during deletion of repository user"
520 msgstr "Une erreur est survenue durant la suppression de l’utilisateur du dépôt."
521
522 #: rhodecode/controllers/admin/repos.py:403
523 #, fuzzy
524 msgid "An error occurred during deletion of repository user groups"
525 msgstr ""
526 "Une erreur est survenue durant la suppression du groupe d’utilisateurs de"
527 " ce dépôt."
528
529 #: rhodecode/controllers/admin/repos.py:421
571 #: rhodecode/controllers/admin/repos.py:375
572 #: rhodecode/controllers/admin/repos_groups.py:332
573 #: rhodecode/controllers/admin/users_groups.py:312
574 #, fuzzy
575 msgid "An error occurred during revoking of permission"
576 msgstr "erreur pendant la mise à jour des permissions"
577
578 #: rhodecode/controllers/admin/repos.py:392
530 579 msgid "An error occurred during deletion of repository stats"
531 580 msgstr "Une erreur est survenue durant la suppression des statistiques du dépôt."
532 581
533 #: rhodecode/controllers/admin/repos.py:438
582 #: rhodecode/controllers/admin/repos.py:409
534 583 msgid "An error occurred during cache invalidation"
535 584 msgstr "Une erreur est survenue durant l’invalidation du cache."
536 585
537 #: rhodecode/controllers/admin/repos.py:458
538 #: rhodecode/controllers/admin/repos.py:485
586 #: rhodecode/controllers/admin/repos.py:429
587 #: rhodecode/controllers/admin/repos.py:456
539 588 msgid "An error occurred during unlocking"
540 589 msgstr "Une erreur est survenue durant le déverrouillage."
541 590
542 #: rhodecode/controllers/admin/repos.py:476
591 #: rhodecode/controllers/admin/repos.py:447
543 592 #, fuzzy
544 593 msgid "Unlocked"
545 594 msgstr "déverrouillé"
546 595
547 #: rhodecode/controllers/admin/repos.py:479
596 #: rhodecode/controllers/admin/repos.py:450
548 597 #, fuzzy
549 598 msgid "Locked"
550 599 msgstr "verrouillé"
551 600
552 #: rhodecode/controllers/admin/repos.py:481
601 #: rhodecode/controllers/admin/repos.py:452
553 602 #, python-format
554 603 msgid "Repository has been %s"
555 604 msgstr "Le dépôt a été %s."
556 605
557 #: rhodecode/controllers/admin/repos.py:505
606 #: rhodecode/controllers/admin/repos.py:476
558 607 msgid "Updated repository visibility in public journal"
559 608 msgstr "La visibilité du dépôt dans le journal public a été mise à jour."
560 609
561 #: rhodecode/controllers/admin/repos.py:509
610 #: rhodecode/controllers/admin/repos.py:480
562 611 msgid "An error occurred during setting this repository in public journal"
563 612 msgstr ""
564 613 "Une erreur est survenue durant la configuration du journal public pour ce"
565 614 " dépôt."
566 615
567 #: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302
616 #: rhodecode/controllers/admin/repos.py:485 rhodecode/model/validators.py:302
568 617 msgid "Token mismatch"
569 618 msgstr "Jeton d’authentification incorrect."
570 619
571 #: rhodecode/controllers/admin/repos.py:527
620 #: rhodecode/controllers/admin/repos.py:498
572 621 msgid "Pulled from remote location"
573 622 msgstr "Les changements distants ont été récupérés."
574 623
575 #: rhodecode/controllers/admin/repos.py:529
624 #: rhodecode/controllers/admin/repos.py:501
576 625 msgid "An error occurred during pull from remote location"
577 626 msgstr "Une erreur est survenue durant le pull depuis la source distante."
578 627
579 #: rhodecode/controllers/admin/repos.py:545
628 #: rhodecode/controllers/admin/repos.py:517
580 629 msgid "Nothing"
581 630 msgstr "[Aucun dépôt]"
582 631
583 #: rhodecode/controllers/admin/repos.py:547
632 #: rhodecode/controllers/admin/repos.py:519
584 633 #, python-format
585 634 msgid "Marked repo %s as fork of %s"
586 635 msgstr "Le dépôt %s a été marké comme fork de %s"
587 636
588 #: rhodecode/controllers/admin/repos.py:551
637 #: rhodecode/controllers/admin/repos.py:523
589 638 msgid "An error occurred during this operation"
590 639 msgstr "Une erreur est survenue durant cette opération."
591 640
592 #: rhodecode/controllers/admin/repos.py:590
641 #: rhodecode/controllers/admin/repos.py:562
593 642 #, fuzzy
594 643 msgid "An error occurred during creation of field"
595 644 msgstr "Une erreur est survenue durant la création de l’utilisateur %s."
596 645
597 #: rhodecode/controllers/admin/repos.py:604
646 #: rhodecode/controllers/admin/repos.py:576
598 647 #, fuzzy
599 648 msgid "An error occurred during removal of field"
600 649 msgstr "Une erreur est survenue durant l’enregistrement de l’e-mail."
601 650
602 #: rhodecode/controllers/admin/repos_groups.py:145
651 #: rhodecode/controllers/admin/repos_groups.py:147
603 652 #, fuzzy, python-format
604 653 msgid "Created repository group %s"
605 654 msgstr "Le groupe de dépôts %s a été créé."
606 655
607 #: rhodecode/controllers/admin/repos_groups.py:157
656 #: rhodecode/controllers/admin/repos_groups.py:159
608 657 #, fuzzy, python-format
609 658 msgid "Error occurred during creation of repository group %s"
610 659 msgstr "Une erreur est survenue durant la création du groupe de dépôts %s."
611 660
612 #: rhodecode/controllers/admin/repos_groups.py:214
613 #: rhodecode/controllers/admin/repos_groups.py:286
614 msgid "Cannot revoke permission for yourself as admin"
615 msgstr ""
616
617 #: rhodecode/controllers/admin/repos_groups.py:220
661 #: rhodecode/controllers/admin/repos_groups.py:217
618 662 #, fuzzy, python-format
619 663 msgid "Updated repository group %s"
620 664 msgstr "Le groupe de dépôts %s a été mis à jour."
621 665
622 #: rhodecode/controllers/admin/repos_groups.py:235
666 #: rhodecode/controllers/admin/repos_groups.py:232
623 667 #, fuzzy, python-format
624 668 msgid "Error occurred during update of repository group %s"
625 669 msgstr "Une erreur est survenue durant la mise à jour du groupe de dépôts %s."
626 670
627 #: rhodecode/controllers/admin/repos_groups.py:253
671 #: rhodecode/controllers/admin/repos_groups.py:250
628 672 #, python-format
629 673 msgid "This group contains %s repositores and cannot be deleted"
630 674 msgstr "Ce groupe contient %s dépôts et ne peut être supprimé."
631 675
632 #: rhodecode/controllers/admin/repos_groups.py:260
676 #: rhodecode/controllers/admin/repos_groups.py:257
633 677 #, fuzzy, python-format
634 678 msgid "This group contains %s subgroups and cannot be deleted"
635 679 msgstr "Ce groupe contient %s dépôts et ne peut être supprimé."
636 680
637 #: rhodecode/controllers/admin/repos_groups.py:266
681 #: rhodecode/controllers/admin/repos_groups.py:263
638 682 #, fuzzy, python-format
639 683 msgid "Removed repository group %s"
640 684 msgstr "Le groupe de dépôts %s a été supprimé."
641 685
642 #: rhodecode/controllers/admin/repos_groups.py:271
686 #: rhodecode/controllers/admin/repos_groups.py:268
643 687 #, fuzzy, python-format
644 688 msgid "Error occurred during deletion of repos group %s"
645 689 msgstr "Une erreur est survenue durant la suppression du groupe de dépôts %s."
646 690
647 #: rhodecode/controllers/admin/repos_groups.py:297
648 msgid "An error occurred during deletion of group user"
691 #: rhodecode/controllers/admin/repos_groups.py:279
692 #: rhodecode/controllers/admin/repos_groups.py:314
693 #: rhodecode/controllers/admin/users_groups.py:300
694 msgid "Cannot revoke permission for yourself as admin"
649 695 msgstr ""
650 "Une erreur est survenue durant la suppression de l’utilisateur du groupe "
651 "de dépôts."
652
653 #: rhodecode/controllers/admin/repos_groups.py:318
654 #, fuzzy
655 msgid "An error occurred during deletion of group user groups"
656 msgstr ""
657 "Une erreur est survenue durant la suppression du groupe d’utilisateurs du"
658 " groupe de dépôts."
659
660 #: rhodecode/controllers/admin/settings.py:126
696
697 #: rhodecode/controllers/admin/repos_groups.py:294
698 #, fuzzy
699 msgid "Repository Group permissions updated"
700 msgstr "Création de dépôt désactivée"
701
702 #: rhodecode/controllers/admin/settings.py:123
661 703 #, fuzzy, python-format
662 704 msgid "Repositories successfully rescanned added: %s ; removed: %s"
663 705 msgstr "Après re-scan : %s ajouté(s), %s enlevé(s)"
664 706
665 #: rhodecode/controllers/admin/settings.py:135
707 #: rhodecode/controllers/admin/settings.py:132
666 708 msgid "Whoosh reindex task scheduled"
667 709 msgstr "La tâche de réindexation Whoosh a été planifiée."
668 710
669 #: rhodecode/controllers/admin/settings.py:166
711 #: rhodecode/controllers/admin/settings.py:163
670 712 msgid "Updated application settings"
671 713 msgstr "Réglages mis à jour"
672 714
673 #: rhodecode/controllers/admin/settings.py:170
674 #: rhodecode/controllers/admin/settings.py:301
715 #: rhodecode/controllers/admin/settings.py:167
716 #: rhodecode/controllers/admin/settings.py:304
675 717 #, fuzzy
676 718 msgid "Error occurred during updating application settings"
677 719 msgstr "Une erreur est survenue durant la mise à jour des options."
678 720
679 #: rhodecode/controllers/admin/settings.py:216
721 #: rhodecode/controllers/admin/settings.py:219
680 722 msgid "Updated visualisation settings"
681 723 msgstr "Réglages d’affichage mis à jour."
682 724
683 #: rhodecode/controllers/admin/settings.py:221
725 #: rhodecode/controllers/admin/settings.py:224
684 726 #, fuzzy
685 727 msgid "Error occurred during updating visualisation settings"
686 728 msgstr "Une erreur est survenue durant la mise à jour des réglages d’affichages."
687 729
688 #: rhodecode/controllers/admin/settings.py:297
730 #: rhodecode/controllers/admin/settings.py:300
689 731 msgid "Updated VCS settings"
690 732 msgstr "Réglages des gestionnaires de versions mis à jour."
691 733
692 #: rhodecode/controllers/admin/settings.py:311
734 #: rhodecode/controllers/admin/settings.py:314
693 735 msgid "Added new hook"
694 736 msgstr "Le nouveau hook a été ajouté."
695 737
696 #: rhodecode/controllers/admin/settings.py:323
738 #: rhodecode/controllers/admin/settings.py:326
697 739 msgid "Updated hooks"
698 740 msgstr "Hooks mis à jour"
699 741
700 #: rhodecode/controllers/admin/settings.py:327
742 #: rhodecode/controllers/admin/settings.py:330
701 743 #, fuzzy
702 744 msgid "Error occurred during hook creation"
703 745 msgstr "Une erreur est survenue durant la création du hook."
704 746
705 #: rhodecode/controllers/admin/settings.py:346
747 #: rhodecode/controllers/admin/settings.py:349
706 748 msgid "Email task created"
707 749 msgstr "La tâche d’e-mail a été créée."
708 750
709 #: rhodecode/controllers/admin/settings.py:410
751 #: rhodecode/controllers/admin/settings.py:413
710 752 msgid "You can't edit this user since it's crucial for entire application"
711 753 msgstr ""
712 754 "Vous ne pouvez pas éditer cet utilisateur ; il est nécessaire pour le bon"
713 755 " fonctionnement de l’application."
714 756
715 #: rhodecode/controllers/admin/settings.py:452
757 #: rhodecode/controllers/admin/settings.py:455
716 758 msgid "Your account was updated successfully"
717 759 msgstr "Votre compte a été mis à jour avec succès"
718 760
719 #: rhodecode/controllers/admin/settings.py:467
761 #: rhodecode/controllers/admin/settings.py:470
720 762 #: rhodecode/controllers/admin/users.py:198
721 763 #, fuzzy, python-format
722 764 msgid "Error occurred during update of user %s"
@@ -745,123 +787,98 b' msgstr "L\xe2\x80\x99utilisateur a \xc3\xa9t\xc3\xa9 supprim\xc3\xa9 avec succ\xc3\xa8s."'
745 787 msgid "An error occurred during deletion of user"
746 788 msgstr "Une erreur est survenue durant la suppression de l’utilisateur."
747 789
748 #: rhodecode/controllers/admin/users.py:233
790 #: rhodecode/controllers/admin/users.py:234
749 791 msgid "You can't edit this user"
750 792 msgstr "Vous ne pouvez pas éditer cet utilisateur"
751 793
752 #: rhodecode/controllers/admin/users.py:276
753 msgid "Granted 'repository create' permission to user"
754 msgstr "La permission de création de dépôts a été accordée à l’utilisateur."
755
756 #: rhodecode/controllers/admin/users.py:281
757 msgid "Revoked 'repository create' permission to user"
758 msgstr "La permission de création de dépôts a été révoquée à l’utilisateur."
759
760 #: rhodecode/controllers/admin/users.py:287
761 msgid "Granted 'repository fork' permission to user"
762 msgstr "La permission de fork de dépôts a été accordée à l’utilisateur."
763
764 #: rhodecode/controllers/admin/users.py:292
765 msgid "Revoked 'repository fork' permission to user"
766 msgstr "La permission de fork de dépôts a été révoquée à l’utilisateur."
767
768 #: rhodecode/controllers/admin/users.py:298
769 #: rhodecode/controllers/admin/users_groups.py:281
794 #: rhodecode/controllers/admin/users.py:293
795 #: rhodecode/controllers/admin/users_groups.py:372
796 #, fuzzy
797 msgid "Updated permissions"
798 msgstr "Copier les permissions"
799
800 #: rhodecode/controllers/admin/users.py:297
801 #: rhodecode/controllers/admin/users_groups.py:376
770 802 msgid "An error occurred during permissions saving"
771 803 msgstr "Une erreur est survenue durant l’enregistrement des permissions."
772 804
773 #: rhodecode/controllers/admin/users.py:312
805 #: rhodecode/controllers/admin/users.py:311
774 806 #, python-format
775 807 msgid "Added email %s to user"
776 808 msgstr "L’e-mail « %s » a été ajouté à l’utilisateur."
777 809
778 #: rhodecode/controllers/admin/users.py:318
810 #: rhodecode/controllers/admin/users.py:317
779 811 msgid "An error occurred during email saving"
780 812 msgstr "Une erreur est survenue durant l’enregistrement de l’e-mail."
781 813
782 #: rhodecode/controllers/admin/users.py:328
814 #: rhodecode/controllers/admin/users.py:327
783 815 msgid "Removed email from user"
784 816 msgstr "L’e-mail a été enlevé de l’utilisateur."
785 817
786 #: rhodecode/controllers/admin/users.py:341
818 #: rhodecode/controllers/admin/users.py:340
787 819 #, fuzzy, python-format
788 820 msgid "Added ip %s to user"
789 821 msgstr "L’e-mail « %s » a été ajouté à l’utilisateur."
790 822
791 #: rhodecode/controllers/admin/users.py:347
823 #: rhodecode/controllers/admin/users.py:346
792 824 #, fuzzy
793 825 msgid "An error occurred during ip saving"
794 826 msgstr "Une erreur est survenue durant l’enregistrement de l’e-mail."
795 827
796 #: rhodecode/controllers/admin/users.py:359
828 #: rhodecode/controllers/admin/users.py:358
797 829 #, fuzzy
798 830 msgid "Removed ip from user"
799 831 msgstr "L’e-mail a été enlevé de l’utilisateur."
800 832
801 #: rhodecode/controllers/admin/users_groups.py:86
833 #: rhodecode/controllers/admin/users_groups.py:162
802 834 #, fuzzy, python-format
803 835 msgid "Created user group %s"
804 836 msgstr "Le groupe d’utilisateurs %s a été créé."
805 837
806 #: rhodecode/controllers/admin/users_groups.py:97
838 #: rhodecode/controllers/admin/users_groups.py:173
807 839 #, fuzzy, python-format
808 840 msgid "Error occurred during creation of user group %s"
809 841 msgstr "Une erreur est survenue durant la création du groupe d’utilisateurs %s."
810 842
811 #: rhodecode/controllers/admin/users_groups.py:166
843 #: rhodecode/controllers/admin/users_groups.py:210
812 844 #, fuzzy, python-format
813 845 msgid "Updated user group %s"
814 846 msgstr "Le groupe d’utilisateurs %s a été mis à jour."
815 847
816 #: rhodecode/controllers/admin/users_groups.py:188
848 #: rhodecode/controllers/admin/users_groups.py:232
817 849 #, fuzzy, python-format
818 850 msgid "Error occurred during update of user group %s"
819 851 msgstr "Une erreur est survenue durant la mise à jour du groupe d’utilisateurs %s."
820 852
821 #: rhodecode/controllers/admin/users_groups.py:205
853 #: rhodecode/controllers/admin/users_groups.py:250
822 854 #, fuzzy
823 855 msgid "Successfully deleted user group"
824 856 msgstr "Le groupe d’utilisateurs a été supprimé avec succès."
825 857
826 #: rhodecode/controllers/admin/users_groups.py:210
858 #: rhodecode/controllers/admin/users_groups.py:255
827 859 #, fuzzy
828 860 msgid "An error occurred during deletion of user group"
829 861 msgstr "Une erreur est survenue lors de la suppression du groupe d’utilisateurs."
830 862
831 #: rhodecode/controllers/admin/users_groups.py:259
832 #, fuzzy
833 msgid "Granted 'repository create' permission to user group"
834 msgstr ""
835 "La permission de création de dépôts a été accordée au groupe "
836 "d’utilisateurs."
837
838 #: rhodecode/controllers/admin/users_groups.py:264
839 #, fuzzy
840 msgid "Revoked 'repository create' permission to user group"
863 #: rhodecode/controllers/admin/users_groups.py:274
864 msgid "Target group cannot be the same"
841 865 msgstr ""
842 "La permission de création de dépôts a été révoquée au groupe "
843 "d’utilisateurs."
844
845 #: rhodecode/controllers/admin/users_groups.py:270
846 #, fuzzy
847 msgid "Granted 'repository fork' permission to user group"
848 msgstr "La permission de fork de dépôts a été accordée au groupe d’utilisateur."
849
850 #: rhodecode/controllers/admin/users_groups.py:275
851 #, fuzzy
852 msgid "Revoked 'repository fork' permission to user group"
853 msgstr "La permission de fork de dépôts a été révoquée au groupe d’utilisateurs."
854
855 #: rhodecode/lib/auth.py:530
866
867 #: rhodecode/controllers/admin/users_groups.py:280
868 #, fuzzy
869 msgid "User Group permissions updated"
870 msgstr "Création de dépôt désactivée"
871
872 #: rhodecode/lib/auth.py:544
856 873 #, fuzzy, python-format
857 874 msgid "IP %s not allowed"
858 875 msgstr "Followers de %s"
859 876
860 #: rhodecode/lib/auth.py:579
877 #: rhodecode/lib/auth.py:593
861 878 msgid "You need to be a registered user to perform this action"
862 879 msgstr "Vous devez être un utilisateur enregistré pour effectuer cette action."
863 880
864 #: rhodecode/lib/auth.py:620
881 #: rhodecode/lib/auth.py:634
865 882 msgid "You need to be a signed in to view this page"
866 883 msgstr "Vous devez être connecté pour visualiser cette page."
867 884
@@ -880,154 +897,183 b' msgstr ""'
880 897 msgid "No changes detected"
881 898 msgstr "Aucun changement détecté."
882 899
883 #: rhodecode/lib/helpers.py:394
900 #: rhodecode/lib/helpers.py:428
884 901 #, python-format
885 902 msgid "%a, %d %b %Y %H:%M:%S"
886 903 msgstr "%d/%m/%Y à %H:%M:%S"
887 904
888 #: rhodecode/lib/helpers.py:506
905 #: rhodecode/lib/helpers.py:539
889 906 msgid "True"
890 907 msgstr "Vrai"
891 908
892 #: rhodecode/lib/helpers.py:509
909 #: rhodecode/lib/helpers.py:542
893 910 msgid "False"
894 911 msgstr "Faux"
895 912
896 #: rhodecode/lib/helpers.py:547
913 #: rhodecode/lib/helpers.py:580
897 914 #, fuzzy, python-format
898 915 msgid "Deleted branch: %s"
899 916 msgstr "Dépôt %s supprimé"
900 917
901 #: rhodecode/lib/helpers.py:550
918 #: rhodecode/lib/helpers.py:583
902 919 #, fuzzy, python-format
903 920 msgid "Created tag: %s"
904 921 msgstr "utilisateur %s créé"
905 922
906 #: rhodecode/lib/helpers.py:563
923 #: rhodecode/lib/helpers.py:596
907 924 msgid "Changeset not found"
908 925 msgstr "Ensemble de changements non trouvé"
909 926
910 #: rhodecode/lib/helpers.py:615
927 #: rhodecode/lib/helpers.py:646
911 928 #, python-format
912 929 msgid "Show all combined changesets %s->%s"
913 930 msgstr "Afficher les changements combinés %s->%s"
914 931
915 #: rhodecode/lib/helpers.py:621
932 #: rhodecode/lib/helpers.py:652
916 933 msgid "compare view"
917 934 msgstr "vue de comparaison"
918 935
919 #: rhodecode/lib/helpers.py:641
936 #: rhodecode/lib/helpers.py:672
920 937 msgid "and"
921 938 msgstr "et"
922 939
923 #: rhodecode/lib/helpers.py:642
940 #: rhodecode/lib/helpers.py:673
924 941 #, python-format
925 942 msgid "%s more"
926 943 msgstr "%s de plus"
927 944
928 #: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44
945 #: rhodecode/lib/helpers.py:674 rhodecode/templates/changelog/changelog.html:53
929 946 msgid "revisions"
930 947 msgstr "révisions"
931 948
932 #: rhodecode/lib/helpers.py:667
949 #: rhodecode/lib/helpers.py:698
933 950 #, fuzzy, python-format
934 951 msgid "fork name %s"
935 952 msgstr "Nom du fork %s"
936 953
937 #: rhodecode/lib/helpers.py:684
954 #: rhodecode/lib/helpers.py:715
938 955 #: rhodecode/templates/pullrequests/pullrequest_show.html:8
939 956 #, python-format
940 957 msgid "Pull request #%s"
941 958 msgstr "Requête de pull #%s"
942 959
943 #: rhodecode/lib/helpers.py:690
960 #: rhodecode/lib/helpers.py:725
944 961 msgid "[deleted] repository"
945 962 msgstr "[a supprimé] le dépôt"
946 963
947 #: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702
964 #: rhodecode/lib/helpers.py:727 rhodecode/lib/helpers.py:739
948 965 msgid "[created] repository"
949 966 msgstr "[a créé] le dépôt"
950 967
951 #: rhodecode/lib/helpers.py:694
968 #: rhodecode/lib/helpers.py:729
952 969 msgid "[created] repository as fork"
953 970 msgstr "[a créé] le dépôt en tant que fork"
954 971
955 #: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704
972 #: rhodecode/lib/helpers.py:731 rhodecode/lib/helpers.py:741
956 973 msgid "[forked] repository"
957 974 msgstr "[a forké] le dépôt"
958 975
959 #: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706
976 #: rhodecode/lib/helpers.py:733 rhodecode/lib/helpers.py:743
960 977 msgid "[updated] repository"
961 978 msgstr "[a mis à jour] le dépôt"
962 979
963 #: rhodecode/lib/helpers.py:700
980 #: rhodecode/lib/helpers.py:735
981 #, fuzzy
982 msgid "[downloaded] archive from repository"
983 msgstr "Les téléchargements sont désactivés pour ce dépôt."
984
985 #: rhodecode/lib/helpers.py:737
964 986 msgid "[delete] repository"
965 987 msgstr "[a supprimé] le dépôt"
966 988
967 #: rhodecode/lib/helpers.py:708
989 #: rhodecode/lib/helpers.py:745
968 990 msgid "[created] user"
969 991 msgstr "[a créé] l’utilisateur"
970 992
971 #: rhodecode/lib/helpers.py:710
993 #: rhodecode/lib/helpers.py:747
972 994 msgid "[updated] user"
973 995 msgstr "[a mis à jour] l’utilisateur"
974 996
975 #: rhodecode/lib/helpers.py:712
997 #: rhodecode/lib/helpers.py:749
976 998 #, fuzzy
977 999 msgid "[created] user group"
978 1000 msgstr "[a créé] le groupe d’utilisateurs"
979 1001
980 #: rhodecode/lib/helpers.py:714
1002 #: rhodecode/lib/helpers.py:751
981 1003 #, fuzzy
982 1004 msgid "[updated] user group"
983 1005 msgstr "[a mis à jour] le groupe d’utilisateurs"
984 1006
985 #: rhodecode/lib/helpers.py:716
1007 #: rhodecode/lib/helpers.py:753
986 1008 msgid "[commented] on revision in repository"
987 1009 msgstr "[a commenté] une révision du dépôt"
988 1010
989 #: rhodecode/lib/helpers.py:718
1011 #: rhodecode/lib/helpers.py:755
990 1012 msgid "[commented] on pull request for"
991 1013 msgstr "[a commenté] la requête de pull pour"
992 1014
993 #: rhodecode/lib/helpers.py:720
1015 #: rhodecode/lib/helpers.py:757
994 1016 msgid "[closed] pull request for"
995 1017 msgstr "[a fermé] la requête de pull de"
996 1018
997 #: rhodecode/lib/helpers.py:722
1019 #: rhodecode/lib/helpers.py:759
998 1020 msgid "[pushed] into"
999 1021 msgstr "[a pushé] dans"
1000 1022
1001 #: rhodecode/lib/helpers.py:724
1023 #: rhodecode/lib/helpers.py:761
1002 1024 msgid "[committed via RhodeCode] into repository"
1003 1025 msgstr "[a commité via RhodeCode] dans le dépôt"
1004 1026
1005 #: rhodecode/lib/helpers.py:726
1027 #: rhodecode/lib/helpers.py:763
1006 1028 msgid "[pulled from remote] into repository"
1007 1029 msgstr "[a pullé depuis un site distant] dans le dépôt"
1008 1030
1009 #: rhodecode/lib/helpers.py:728
1031 #: rhodecode/lib/helpers.py:765
1010 1032 msgid "[pulled] from"
1011 1033 msgstr "[a pullé] depuis"
1012 1034
1013 #: rhodecode/lib/helpers.py:730
1035 #: rhodecode/lib/helpers.py:767
1014 1036 msgid "[started following] repository"
1015 1037 msgstr "[suit maintenant] le dépôt"
1016 1038
1017 #: rhodecode/lib/helpers.py:732
1039 #: rhodecode/lib/helpers.py:769
1018 1040 msgid "[stopped following] repository"
1019 1041 msgstr "[ne suit plus] le dépôt"
1020 1042
1021 #: rhodecode/lib/helpers.py:910
1043 #: rhodecode/lib/helpers.py:1088
1022 1044 #, python-format
1023 1045 msgid " and %s more"
1024 1046 msgstr "et %s de plus"
1025 1047
1026 #: rhodecode/lib/helpers.py:914
1048 #: rhodecode/lib/helpers.py:1092
1027 1049 msgid "No Files"
1028 1050 msgstr "Aucun fichier"
1029 1051
1030 #: rhodecode/lib/helpers.py:1198
1052 #: rhodecode/lib/helpers.py:1158
1053 #, fuzzy
1054 msgid "new file"
1055 msgstr "Ajouter un nouveau fichier"
1056
1057 #: rhodecode/lib/helpers.py:1161
1058 #, fuzzy
1059 msgid "mod"
1060 msgstr "Supprimés"
1061
1062 #: rhodecode/lib/helpers.py:1164
1063 #, fuzzy
1064 msgid "del"
1065 msgstr "Supprimer"
1066
1067 #: rhodecode/lib/helpers.py:1167
1068 #, fuzzy
1069 msgid "rename"
1070 msgstr "Nom d’utilisateur"
1071
1072 #: rhodecode/lib/helpers.py:1172
1073 msgid "chmod"
1074 msgstr ""
1075
1076 #: rhodecode/lib/helpers.py:1404
1031 1077 #, python-format
1032 1078 msgid ""
1033 1079 "%s repository is not mapped to db perhaps it was created or renamed from "
@@ -1043,225 +1089,314 b' msgstr ""'
1043 1089 msgid "cannot create new union repository"
1044 1090 msgstr "[a créé] le dépôt"
1045 1091
1046 #: rhodecode/lib/utils2.py:411
1092 #: rhodecode/lib/utils2.py:410
1047 1093 #, python-format
1048 1094 msgid "%d year"
1049 1095 msgid_plural "%d years"
1050 1096 msgstr[0] "%d an"
1051 1097 msgstr[1] "%d ans"
1052 1098
1053 #: rhodecode/lib/utils2.py:412
1099 #: rhodecode/lib/utils2.py:411
1054 1100 #, python-format
1055 1101 msgid "%d month"
1056 1102 msgid_plural "%d months"
1057 1103 msgstr[0] "%d mois"
1058 1104 msgstr[1] "%d mois"
1059 1105
1060 #: rhodecode/lib/utils2.py:413
1106 #: rhodecode/lib/utils2.py:412
1061 1107 #, python-format
1062 1108 msgid "%d day"
1063 1109 msgid_plural "%d days"
1064 1110 msgstr[0] "%d jour"
1065 1111 msgstr[1] "%d jours"
1066 1112
1067 #: rhodecode/lib/utils2.py:414
1113 #: rhodecode/lib/utils2.py:413
1068 1114 #, python-format
1069 1115 msgid "%d hour"
1070 1116 msgid_plural "%d hours"
1071 1117 msgstr[0] "%d heure"
1072 1118 msgstr[1] "%d heures"
1073 1119
1074 #: rhodecode/lib/utils2.py:415
1120 #: rhodecode/lib/utils2.py:414
1075 1121 #, python-format
1076 1122 msgid "%d minute"
1077 1123 msgid_plural "%d minutes"
1078 1124 msgstr[0] "%d minute"
1079 1125 msgstr[1] "%d minutes"
1080 1126
1081 #: rhodecode/lib/utils2.py:416
1127 #: rhodecode/lib/utils2.py:415
1082 1128 #, python-format
1083 1129 msgid "%d second"
1084 1130 msgid_plural "%d seconds"
1085 1131 msgstr[0] "%d seconde"
1086 1132 msgstr[1] "%d secondes"
1087 1133
1088 #: rhodecode/lib/utils2.py:432
1134 #: rhodecode/lib/utils2.py:431
1089 1135 #, fuzzy, python-format
1090 1136 msgid "in %s"
1091 1137 msgstr "à la ligne %s"
1092 1138
1093 #: rhodecode/lib/utils2.py:434
1139 #: rhodecode/lib/utils2.py:433
1094 1140 #, python-format
1095 1141 msgid "%s ago"
1096 1142 msgstr "Il y a %s"
1097 1143
1098 #: rhodecode/lib/utils2.py:436
1144 #: rhodecode/lib/utils2.py:435
1099 1145 #, fuzzy, python-format
1100 1146 msgid "in %s and %s"
1101 1147 msgstr "Il y a %s et %s"
1102 1148
1103 #: rhodecode/lib/utils2.py:439
1149 #: rhodecode/lib/utils2.py:438
1104 1150 #, python-format
1105 1151 msgid "%s and %s ago"
1106 1152 msgstr "Il y a %s et %s"
1107 1153
1108 #: rhodecode/lib/utils2.py:442
1154 #: rhodecode/lib/utils2.py:441
1109 1155 msgid "just now"
1110 1156 msgstr "à l’instant"
1111 1157
1112 1158 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163
1113 1159 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183
1114 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388
1160 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303
1161 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1388
1162 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1408 rhodecode/model/db.py:1413
1115 1163 msgid "Repository no access"
1116 1164 msgstr "Aucun accès au dépôt"
1117 1165
1118 1166 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164
1119 1167 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184
1120 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389
1168 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304
1169 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1389
1170 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1409 rhodecode/model/db.py:1414
1121 1171 msgid "Repository read access"
1122 1172 msgstr "Accès en lecture au dépôt"
1123 1173
1124 1174 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165
1125 1175 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185
1126 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390
1176 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305
1177 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1390
1178 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1410 rhodecode/model/db.py:1415
1127 1179 msgid "Repository write access"
1128 1180 msgstr "Accès en écriture au dépôt"
1129 1181
1130 1182 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166
1131 1183 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186
1132 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391
1184 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1306
1185 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1391
1186 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1411 rhodecode/model/db.py:1416
1133 1187 msgid "Repository admin access"
1134 1188 msgstr "Accès administrateur au dépôt"
1135 1189
1136 1190 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168
1137 1191 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188
1138 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294
1192 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308
1139 1193 msgid "Repositories Group no access"
1140 1194 msgstr "Aucun accès au groupe de dépôts"
1141 1195
1142 1196 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169
1143 1197 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189
1144 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295
1198 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1309
1145 1199 msgid "Repositories Group read access"
1146 1200 msgstr "Accès en lecture au groupe de dépôts"
1147 1201
1148 1202 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170
1149 1203 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190
1150 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296
1204 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1310
1151 1205 msgid "Repositories Group write access"
1152 1206 msgstr "Accès en écriture au groupe de dépôts"
1153 1207
1154 1208 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171
1155 1209 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191
1156 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297
1210 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1311
1157 1211 msgid "Repositories Group admin access"
1158 1212 msgstr "Accès administrateur au groupe de dépôts"
1159 1213
1160 1214 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173
1161 1215 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193
1162 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398
1216 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1313
1217 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1398
1218 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1406 rhodecode/model/db.py:1411
1163 1219 msgid "RhodeCode Administrator"
1164 1220 msgstr "Administrateur RhodeCode"
1165 1221
1166 1222 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174
1167 1223 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194
1168 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399
1224 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1314
1225 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1399
1226 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1429 rhodecode/model/db.py:1434
1169 1227 msgid "Repository creation disabled"
1170 1228 msgstr "Création de dépôt désactivée"
1171 1229
1172 1230 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175
1173 1231 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195
1174 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400
1232 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1315
1233 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1400
1234 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1430 rhodecode/model/db.py:1435
1175 1235 msgid "Repository creation enabled"
1176 1236 msgstr "Création de dépôt activée"
1177 1237
1178 1238 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176
1179 1239 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196
1180 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401
1240 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1316
1241 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1401
1242 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1432 rhodecode/model/db.py:1437
1181 1243 msgid "Repository forking disabled"
1182 1244 msgstr "Fork de dépôt désactivé"
1183 1245
1184 1246 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177
1185 1247 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197
1186 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402
1248 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1317
1249 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1402
1250 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1433 rhodecode/model/db.py:1438
1187 1251 msgid "Repository forking enabled"
1188 1252 msgstr "Fork de dépôt activé"
1189 1253
1190 1254 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178
1191 1255 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198
1192 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403
1256 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1318
1257 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1403
1193 1258 msgid "Register disabled"
1194 1259 msgstr "Enregistrement désactivé"
1195 1260
1196 1261 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179
1197 1262 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199
1198 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404
1263 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1319
1264 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1404
1199 1265 msgid "Register new user with RhodeCode with manual activation"
1200 1266 msgstr "Enregistrer un nouvel utilisateur Rhodecode manuellement activé"
1201 1267
1202 1268 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182
1203 1269 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202
1204 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407
1270 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1322
1271 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1407
1205 1272 msgid "Register new user with RhodeCode with auto activation"
1206 1273 msgstr "Enregistrer un nouvel utilisateur Rhodecode auto-activé"
1207 1274
1208 1275 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623
1209 1276 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643
1210 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838
1277 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1763
1278 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1838
1279 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1934 rhodecode/model/db.py:1939
1211 1280 msgid "Not Reviewed"
1212 1281 msgstr "Pas encore relue"
1213 1282
1214 1283 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624
1215 1284 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644
1216 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839
1285 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1764
1286 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1839
1287 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1935 rhodecode/model/db.py:1940
1217 1288 msgid "Approved"
1218 1289 msgstr "Approuvée "
1219 1290
1220 1291 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625
1221 1292 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645
1222 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840
1293 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1765
1294 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1840
1295 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1936 rhodecode/model/db.py:1941
1223 1296 msgid "Rejected"
1224 1297 msgstr "Rejetée"
1225 1298
1226 1299 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626
1227 1300 #: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646
1228 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841
1301 #: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1766
1302 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1841
1303 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1937 rhodecode/model/db.py:1942
1229 1304 msgid "Under Review"
1230 1305 msgstr "En cours de relecture"
1231 1306
1307 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1252
1308 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1270 rhodecode/model/db.py:1275
1309 msgid "top level"
1310 msgstr ""
1311
1312 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1393
1313 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1413 rhodecode/model/db.py:1418
1314 #, fuzzy
1315 msgid "Repository group no access"
1316 msgstr "Aucun accès au groupe de dépôts"
1317
1318 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1394
1319 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1414 rhodecode/model/db.py:1419
1320 #, fuzzy
1321 msgid "Repository group read access"
1322 msgstr "Accès en lecture au groupe de dépôts"
1323
1324 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1395
1325 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1415 rhodecode/model/db.py:1420
1326 #, fuzzy
1327 msgid "Repository group write access"
1328 msgstr "Accès en écriture au groupe de dépôts"
1329
1330 #: rhodecode/lib/dbmigrate/schema/db_1_6_0.py:1396
1331 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1416 rhodecode/model/db.py:1421
1332 #, fuzzy
1333 msgid "Repository group admin access"
1334 msgstr "Accès administrateur au groupe de dépôts"
1335
1336 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1418 rhodecode/model/db.py:1423
1337 #, fuzzy
1338 msgid "User group no access"
1339 msgstr "Aucun accès au groupe de dépôts"
1340
1341 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1419 rhodecode/model/db.py:1424
1342 #, fuzzy
1343 msgid "User group read access"
1344 msgstr "Accès en lecture au groupe de dépôts"
1345
1346 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1420 rhodecode/model/db.py:1425
1347 #, fuzzy
1348 msgid "User group write access"
1349 msgstr "Accès en écriture au groupe de dépôts"
1350
1351 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1421 rhodecode/model/db.py:1426
1352 #, fuzzy
1353 msgid "User group admin access"
1354 msgstr "Accès administrateur au groupe de dépôts"
1355
1356 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1423 rhodecode/model/db.py:1428
1357 #, fuzzy
1358 msgid "Repository Group creation disabled"
1359 msgstr "Création de dépôt désactivée"
1360
1361 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1424 rhodecode/model/db.py:1429
1362 #, fuzzy
1363 msgid "Repository Group creation enabled"
1364 msgstr "Création de dépôt activée"
1365
1366 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1426 rhodecode/model/db.py:1431
1367 #, fuzzy
1368 msgid "User Group creation disabled"
1369 msgstr "Création de dépôt désactivée"
1370
1371 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1427 rhodecode/model/db.py:1432
1372 #, fuzzy
1373 msgid "User Group creation enabled"
1374 msgstr "Création de dépôt activée"
1375
1376 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1435 rhodecode/model/db.py:1440
1377 #, fuzzy
1378 msgid "Registration disabled"
1379 msgstr "Enregistrement désactivé"
1380
1381 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1436 rhodecode/model/db.py:1441
1382 #, fuzzy
1383 msgid "User Registration with manual account activation"
1384 msgstr "Autorisé avec activation manuelle du compte"
1385
1386 #: rhodecode/lib/dbmigrate/schema/db_1_7_0.py:1437 rhodecode/model/db.py:1442
1387 #, fuzzy
1388 msgid "User Registration with automatic account activation"
1389 msgstr "Autorisé avec activation automatique du compte"
1390
1232 1391 #: rhodecode/model/comment.py:75
1233 1392 #, python-format
1234 1393 msgid "on line %s"
1235 1394 msgstr "à la ligne %s"
1236 1395
1237 #: rhodecode/model/comment.py:219
1396 #: rhodecode/model/comment.py:220
1238 1397 msgid "[Mention]"
1239 1398 msgstr "[Mention]"
1240 1399
1241 #: rhodecode/model/db.py:1252
1242 msgid "top level"
1243 msgstr ""
1244
1245 #: rhodecode/model/db.py:1393
1246 #, fuzzy
1247 msgid "Repository group no access"
1248 msgstr "Aucun accès au groupe de dépôts"
1249
1250 #: rhodecode/model/db.py:1394
1251 #, fuzzy
1252 msgid "Repository group read access"
1253 msgstr "Accès en lecture au groupe de dépôts"
1254
1255 #: rhodecode/model/db.py:1395
1256 #, fuzzy
1257 msgid "Repository group write access"
1258 msgstr "Accès en écriture au groupe de dépôts"
1259
1260 #: rhodecode/model/db.py:1396
1261 #, fuzzy
1262 msgid "Repository group admin access"
1263 msgstr "Accès administrateur au groupe de dépôts"
1264
1265 1400 #: rhodecode/model/forms.py:43
1266 1401 msgid "Please enter a login"
1267 1402 msgstr "Veuillez entrer un identifiant"
@@ -1280,44 +1415,44 b' msgstr "Veuillez entrer un mot de passe"'
1280 1415 msgid "Enter %(min)i characters or more"
1281 1416 msgstr "Entrez au moins %(min)i caractères"
1282 1417
1283 #: rhodecode/model/notification.py:224
1418 #: rhodecode/model/notification.py:228
1284 1419 #, fuzzy, python-format
1285 1420 msgid "%(user)s commented on changeset at %(when)s"
1286 1421 msgstr "%(user)s a posté un commentaire sur le commit %(when)s"
1287 1422
1288 #: rhodecode/model/notification.py:225
1423 #: rhodecode/model/notification.py:229
1289 1424 #, fuzzy, python-format
1290 1425 msgid "%(user)s sent message at %(when)s"
1291 1426 msgstr "%(user)s a envoyé un message %(when)s"
1292 1427
1293 #: rhodecode/model/notification.py:226
1428 #: rhodecode/model/notification.py:230
1294 1429 #, fuzzy, python-format
1295 1430 msgid "%(user)s mentioned you at %(when)s"
1296 1431 msgstr "%(user)s vous a mentioné %(when)s"
1297 1432
1298 #: rhodecode/model/notification.py:227
1433 #: rhodecode/model/notification.py:231
1299 1434 #, fuzzy, python-format
1300 1435 msgid "%(user)s registered in RhodeCode at %(when)s"
1301 1436 msgstr "%(user)s s’est enregistré sur RhodeCode %(when)s"
1302 1437
1303 #: rhodecode/model/notification.py:228
1438 #: rhodecode/model/notification.py:232
1304 1439 #, fuzzy, python-format
1305 1440 msgid "%(user)s opened new pull request at %(when)s"
1306 1441 msgstr "%(user)s a ouvert une nouvelle requête de pull %(when)s"
1307 1442
1308 #: rhodecode/model/notification.py:229
1443 #: rhodecode/model/notification.py:233
1309 1444 #, fuzzy, python-format
1310 1445 msgid "%(user)s commented on pull request at %(when)s"
1311 1446 msgstr "%(user)s a commenté sur la requête de pull %(when)s"
1312 1447
1313 #: rhodecode/model/pull_request.py:104
1448 #: rhodecode/model/pull_request.py:98
1314 1449 #, fuzzy, python-format
1315 1450 msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s"
1316 1451 msgstr ""
1317 1452 "%(user)s voudrait que vous examiniez sa requête de pull nº%(pr_id)s: "
1318 1453 "%(pr_title)s"
1319 1454
1320 #: rhodecode/model/scm.py:598
1455 #: rhodecode/model/scm.py:674
1321 1456 msgid "latest tip"
1322 1457 msgstr "Dernier sommet"
1323 1458
@@ -1377,9 +1512,10 b' msgid "Username \\"%(username)s\\" is forb'
1377 1512 msgstr "Le nom d’utilisateur « %(username)s » n’est pas autorisé"
1378 1513
1379 1514 #: rhodecode/model/validators.py:89
1515 #, fuzzy
1380 1516 msgid ""
1381 1517 "Username may only contain alphanumeric characters underscores, periods or"
1382 " dashes and must begin with alphanumeric character"
1518 " dashes and must begin with alphanumeric character or underscore"
1383 1519 msgstr ""
1384 1520 "Le nom d’utilisateur peut contenir uniquement des caractères alpha-"
1385 1521 "numériques ainsi que les caractères suivants : « _ . - ». Il doit "
@@ -1492,25 +1628,25 b' msgstr "Vous n\xe2\x80\x99avez pas la permission de cr\xc3\xa9er un d\xc3\xa9p\xc3\xb4t dans ce groupe."'
1492 1628 msgid "You don't have permissions to create a group in this location"
1493 1629 msgstr "Vous n’avez pas la permission de créer un dépôt dans ce groupe."
1494 1630
1495 #: rhodecode/model/validators.py:557
1631 #: rhodecode/model/validators.py:559
1496 1632 #, fuzzy
1497 1633 msgid "This username or user group name is not valid"
1498 1634 msgstr "Ce nom d’utilisateur ou de groupe n’est pas valide."
1499 1635
1500 #: rhodecode/model/validators.py:650
1636 #: rhodecode/model/validators.py:652
1501 1637 msgid "This is not a valid path"
1502 1638 msgstr "Ceci n’est pas un chemin valide"
1503 1639
1504 #: rhodecode/model/validators.py:665
1640 #: rhodecode/model/validators.py:667
1505 1641 msgid "This e-mail address is already taken"
1506 1642 msgstr "Cette adresse e-mail est déjà enregistrée"
1507 1643
1508 #: rhodecode/model/validators.py:685
1644 #: rhodecode/model/validators.py:687
1509 1645 #, python-format
1510 1646 msgid "e-mail \"%(email)s\" does not exist."
1511 1647 msgstr "L’adresse e-mail « %(email)s » n’existe pas"
1512 1648
1513 #: rhodecode/model/validators.py:722
1649 #: rhodecode/model/validators.py:724
1514 1650 msgid ""
1515 1651 "The LDAP Login attribute of the CN must be specified - this is the name "
1516 1652 "of the attribute that is equivalent to \"username\""
@@ -1518,26 +1654,30 b' msgstr ""'
1518 1654 "L’attribut Login du CN doit être spécifié. Cet attribut correspond au nom"
1519 1655 " d’utilisateur."
1520 1656
1521 #: rhodecode/model/validators.py:735
1657 #: rhodecode/model/validators.py:737
1522 1658 #, python-format
1523 1659 msgid "Revisions %(revs)s are already part of pull request or have set status"
1524 1660 msgstr ""
1525 1661 "Les révisions %(revs)s font déjà partie de la requête de pull ou on des "
1526 1662 "statuts définis."
1527 1663
1528 #: rhodecode/model/validators.py:767
1664 #: rhodecode/model/validators.py:769
1529 1665 msgid "Please enter a valid IPv4 or IpV6 address"
1530 1666 msgstr ""
1531 1667
1532 #: rhodecode/model/validators.py:768
1668 #: rhodecode/model/validators.py:770
1533 1669 #, python-format
1534 1670 msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)"
1535 1671 msgstr ""
1536 1672
1537 #: rhodecode/model/validators.py:800
1673 #: rhodecode/model/validators.py:803
1538 1674 msgid "Key name can only consist of letters, underscore, dash or numbers"
1539 1675 msgstr ""
1540 1676
1677 #: rhodecode/model/validators.py:817
1678 msgid "Filename cannot be inside a directory"
1679 msgstr ""
1680
1541 1681 #: rhodecode/templates/index.html:5
1542 1682 msgid "Dashboard"
1543 1683 msgstr "Tableau de bord"
@@ -1585,29 +1725,28 b' msgid "You have admin right to this grou'
1585 1725 msgstr ""
1586 1726
1587 1727 #: rhodecode/templates/index_base.html:40
1588 #: rhodecode/templates/index_base.html:140
1589 1728 #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33
1590 1729 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38
1591 1730 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43
1592 1731 #: rhodecode/templates/admin/users_groups/users_group_add.html:32
1593 1732 #: rhodecode/templates/admin/users_groups/users_group_edit.html:33
1594 #: rhodecode/templates/admin/users_groups/users_groups.html:34
1733 #: rhodecode/templates/admin/users_groups/users_groups.html:37
1595 1734 msgid "Group name"
1596 1735 msgstr "Nom de groupe"
1597 1736
1598 1737 #: rhodecode/templates/index_base.html:41
1599 #: rhodecode/templates/index_base.html:83
1600 #: rhodecode/templates/index_base.html:142
1601 #: rhodecode/templates/index_base.html:180
1602 #: rhodecode/templates/index_base.html:270
1738 #: rhodecode/templates/index_base.html:123
1603 1739 #: rhodecode/templates/admin/repos/repo_add_base.html:56
1604 #: rhodecode/templates/admin/repos/repo_edit.html:75
1740 #: rhodecode/templates/admin/repos/repo_edit.html:68
1605 1741 #: rhodecode/templates/admin/repos/repos.html:73
1606 1742 #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42
1607 1743 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47
1608 1744 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44
1745 #: rhodecode/templates/email_templates/changeset_comment.html:9
1746 #: rhodecode/templates/email_templates/pull_request.html:9
1609 1747 #: rhodecode/templates/forks/fork.html:56
1610 #: rhodecode/templates/pullrequests/pullrequest.html:101
1748 #: rhodecode/templates/pullrequests/pullrequest.html:43
1749 #: rhodecode/templates/pullrequests/pullrequest_show.html:81
1611 1750 #: rhodecode/templates/summary/summary.html:106
1612 1751 msgid "Description"
1613 1752 msgstr "Description"
@@ -1615,27 +1754,25 b' msgstr "Description"'
1615 1754 #: rhodecode/templates/index_base.html:51
1616 1755 #: rhodecode/templates/admin/permissions/permissions.html:55
1617 1756 #: rhodecode/templates/admin/repos/repo_add_base.html:29
1618 #: rhodecode/templates/admin/repos/repo_edit.html:49
1757 #: rhodecode/templates/admin/repos/repo_edit.html:50
1619 1758 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:57
1620 1759 #: rhodecode/templates/forks/fork.html:47
1621 1760 msgid "Repository group"
1622 1761 msgstr "Groupe de dépôt"
1623 1762
1624 #: rhodecode/templates/index_base.html:82
1625 #: rhodecode/templates/index_base.html:178
1626 #: rhodecode/templates/index_base.html:268
1763 #: rhodecode/templates/index_base.html:121
1627 1764 #: rhodecode/templates/admin/repos/repo_add_base.html:9
1628 1765 #: rhodecode/templates/admin/repos/repo_edit.html:32
1629 1766 #: rhodecode/templates/admin/repos/repos.html:71
1630 1767 #: rhodecode/templates/admin/users/user_edit_my_account.html:172
1631 #: rhodecode/templates/base/perms_summary.html:14
1632 #: rhodecode/templates/bookmarks/bookmarks.html:34
1768 #: rhodecode/templates/base/perms_summary.html:37
1769 #: rhodecode/templates/bookmarks/bookmarks.html:48
1633 1770 #: rhodecode/templates/bookmarks/bookmarks_data.html:6
1634 1771 #: rhodecode/templates/branches/branches.html:47
1635 1772 #: rhodecode/templates/branches/branches_data.html:6
1636 1773 #: rhodecode/templates/files/files_browser.html:47
1637 1774 #: rhodecode/templates/journal/journal.html:193
1638 #: rhodecode/templates/journal/journal.html:296
1775 #: rhodecode/templates/journal/journal.html:283
1639 1776 #: rhodecode/templates/summary/summary.html:55
1640 1777 #: rhodecode/templates/summary/summary.html:124
1641 1778 #: rhodecode/templates/tags/tags.html:48
@@ -1643,110 +1780,79 b' msgstr "Groupe de d\xc3\xa9p\xc3\xb4t"'
1643 1780 msgid "Name"
1644 1781 msgstr "Nom"
1645 1782
1646 #: rhodecode/templates/index_base.html:84
1647 msgid "Last change"
1783 #: rhodecode/templates/index_base.html:124
1784 msgid "Last Change"
1648 1785 msgstr "Dernière modification"
1649 1786
1650 #: rhodecode/templates/index_base.html:85
1651 #: rhodecode/templates/index_base.html:183
1652 #: rhodecode/templates/index_base.html:273
1787 #: rhodecode/templates/index_base.html:126
1653 1788 #: rhodecode/templates/admin/repos/repos.html:74
1654 1789 #: rhodecode/templates/admin/users/user_edit_my_account.html:174
1655 1790 #: rhodecode/templates/journal/journal.html:195
1656 #: rhodecode/templates/journal/journal.html:298
1791 #: rhodecode/templates/journal/journal.html:285
1657 1792 msgid "Tip"
1658 1793 msgstr "Sommet"
1659 1794
1660 #: rhodecode/templates/index_base.html:86
1661 #: rhodecode/templates/index_base.html:185
1662 #: rhodecode/templates/index_base.html:275
1663 #: rhodecode/templates/admin/repos/repo_edit.html:121
1795 #: rhodecode/templates/index_base.html:128
1796 #: rhodecode/templates/admin/repos/repo_edit.html:114
1664 1797 #: rhodecode/templates/admin/repos/repos.html:76
1665 1798 msgid "Owner"
1666 1799 msgstr "Propriétaire"
1667 1800
1668 #: rhodecode/templates/index_base.html:87
1669 msgid "Atom"
1670 msgstr "Atom"
1671
1672 #: rhodecode/templates/index_base.html:171
1673 #: rhodecode/templates/index_base.html:209
1674 #: rhodecode/templates/index_base.html:296
1675 #: rhodecode/templates/admin/repos/repos.html:97
1676 #: rhodecode/templates/admin/users/user_edit_my_account.html:196
1801 #: rhodecode/templates/index_base.html:136
1802 #: rhodecode/templates/admin/repos/repos.html:84
1803 #: rhodecode/templates/admin/users/user_edit_my_account.html:183
1677 1804 #: rhodecode/templates/admin/users/users.html:107
1678 #: rhodecode/templates/bookmarks/bookmarks.html:58
1805 #: rhodecode/templates/bookmarks/bookmarks.html:74
1679 1806 #: rhodecode/templates/branches/branches.html:73
1680 #: rhodecode/templates/journal/journal.html:217
1681 #: rhodecode/templates/journal/journal.html:320
1807 #: rhodecode/templates/journal/journal.html:204
1808 #: rhodecode/templates/journal/journal.html:294
1682 1809 #: rhodecode/templates/tags/tags.html:74
1683 1810 msgid "Click to sort ascending"
1684 1811 msgstr "Tri ascendant"
1685 1812
1686 #: rhodecode/templates/index_base.html:172
1687 #: rhodecode/templates/index_base.html:210
1688 #: rhodecode/templates/index_base.html:297
1689 #: rhodecode/templates/admin/repos/repos.html:98
1690 #: rhodecode/templates/admin/users/user_edit_my_account.html:197
1813 #: rhodecode/templates/index_base.html:137
1814 #: rhodecode/templates/admin/repos/repos.html:85
1815 #: rhodecode/templates/admin/users/user_edit_my_account.html:184
1691 1816 #: rhodecode/templates/admin/users/users.html:108
1692 #: rhodecode/templates/bookmarks/bookmarks.html:59
1817 #: rhodecode/templates/bookmarks/bookmarks.html:75
1693 1818 #: rhodecode/templates/branches/branches.html:74
1694 #: rhodecode/templates/journal/journal.html:218
1695 #: rhodecode/templates/journal/journal.html:321
1819 #: rhodecode/templates/journal/journal.html:205
1820 #: rhodecode/templates/journal/journal.html:295
1696 1821 #: rhodecode/templates/tags/tags.html:75
1697 1822 msgid "Click to sort descending"
1698 1823 msgstr "Tri descendant"
1699 1824
1700 #: rhodecode/templates/index_base.html:181
1701 #: rhodecode/templates/index_base.html:271
1702 msgid "Last Change"
1703 msgstr "Dernière modification"
1704
1705 #: rhodecode/templates/index_base.html:211
1706 #: rhodecode/templates/admin/repos/repos.html:99
1707 #: rhodecode/templates/admin/users/user_edit_my_account.html:198
1708 #: rhodecode/templates/admin/users/users.html:109
1709 #: rhodecode/templates/bookmarks/bookmarks.html:60
1710 #: rhodecode/templates/branches/branches.html:75
1711 #: rhodecode/templates/journal/journal.html:219
1712 #: rhodecode/templates/journal/journal.html:322
1713 #: rhodecode/templates/tags/tags.html:76
1714 msgid "No records found."
1715 msgstr "Aucun élément n’a été trouvé."
1716
1717 #: rhodecode/templates/index_base.html:212
1718 #: rhodecode/templates/index_base.html:299
1719 #: rhodecode/templates/admin/repos/repos.html:100
1720 #: rhodecode/templates/admin/users/user_edit_my_account.html:199
1825 #: rhodecode/templates/index_base.html:138
1826 #, fuzzy
1827 msgid "No repositories found."
1828 msgstr "Groupes de dépôts"
1829
1830 #: rhodecode/templates/index_base.html:139
1831 #: rhodecode/templates/admin/repos/repos.html:87
1832 #: rhodecode/templates/admin/users/user_edit_my_account.html:186
1721 1833 #: rhodecode/templates/admin/users/users.html:110
1722 #: rhodecode/templates/bookmarks/bookmarks.html:61
1834 #: rhodecode/templates/bookmarks/bookmarks.html:77
1723 1835 #: rhodecode/templates/branches/branches.html:76
1724 #: rhodecode/templates/journal/journal.html:220
1725 #: rhodecode/templates/journal/journal.html:323
1836 #: rhodecode/templates/journal/journal.html:207
1837 #: rhodecode/templates/journal/journal.html:297
1726 1838 #: rhodecode/templates/tags/tags.html:77
1727 1839 msgid "Data error."
1728 1840 msgstr "Erreur d’intégrité des données."
1729 1841
1730 #: rhodecode/templates/index_base.html:213
1731 #: rhodecode/templates/index_base.html:300
1732 #: rhodecode/templates/admin/repos/repos.html:101
1842 #: rhodecode/templates/index_base.html:140
1843 #: rhodecode/templates/admin/repos/repos.html:88
1733 1844 #: rhodecode/templates/admin/users/user_edit_my_account.html:58
1734 #: rhodecode/templates/admin/users/user_edit_my_account.html:200
1845 #: rhodecode/templates/admin/users/user_edit_my_account.html:187
1735 1846 #: rhodecode/templates/admin/users/users.html:111
1736 #: rhodecode/templates/bookmarks/bookmarks.html:62
1847 #: rhodecode/templates/bookmarks/bookmarks.html:78
1737 1848 #: rhodecode/templates/branches/branches.html:77
1738 #: rhodecode/templates/journal/journal.html:221
1739 #: rhodecode/templates/journal/journal.html:324
1849 #: rhodecode/templates/journal/journal.html:208
1850 #: rhodecode/templates/journal/journal.html:298
1740 1851 #: rhodecode/templates/tags/tags.html:78
1741 1852 msgid "Loading..."
1742 1853 msgstr "Chargement…"
1743 1854
1744 #: rhodecode/templates/index_base.html:298
1745 #, fuzzy
1746 msgid "No repositories found."
1747 msgstr "Groupes de dépôts"
1748
1749 #: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227
1855 #: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:239
1750 1856 msgid "Log In"
1751 1857 msgstr "Connexion"
1752 1858
@@ -1761,7 +1867,7 b' msgstr ""'
1761 1867 #: rhodecode/templates/admin/users/user_edit.html:57
1762 1868 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:31
1763 1869 #: rhodecode/templates/admin/users/users.html:77
1764 #: rhodecode/templates/base/base.html:203
1870 #: rhodecode/templates/base/base.html:215
1765 1871 #: rhodecode/templates/summary/summary.html:123
1766 1872 msgid "Username"
1767 1873 msgstr "Nom d’utilisateur"
@@ -1769,7 +1875,7 b' msgstr "Nom d\xe2\x80\x99utilisateur"'
1769 1875 #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
1770 1876 #: rhodecode/templates/admin/ldap/ldap.html:46
1771 1877 #: rhodecode/templates/admin/users/user_add.html:41
1772 #: rhodecode/templates/base/base.html:212
1878 #: rhodecode/templates/base/base.html:224
1773 1879 msgid "Password"
1774 1880 msgstr "Mot de passe"
1775 1881
@@ -1785,7 +1891,7 b' msgstr "Connexion"'
1785 1891 msgid "Forgot your password ?"
1786 1892 msgstr "Mot de passe oublié ?"
1787 1893
1788 #: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223
1894 #: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:235
1789 1895 msgid "Don't have an account ?"
1790 1896 msgstr "Vous n’avez pas de compte ?"
1791 1897
@@ -1855,7 +1961,7 b' msgstr "Votre compte utilisateur devra \xc3\xaatre activ\xc3\xa9 par un administrateur."'
1855 1961 #: rhodecode/templates/repo_switcher_list.html:10
1856 1962 #: rhodecode/templates/admin/defaults/defaults.html:44
1857 1963 #: rhodecode/templates/admin/repos/repo_add_base.html:65
1858 #: rhodecode/templates/admin/repos/repo_edit.html:85
1964 #: rhodecode/templates/admin/repos/repo_edit.html:78
1859 1965 #: rhodecode/templates/data_table/_dt_elements.html:61
1860 1966 #: rhodecode/templates/summary/summary.html:77
1861 1967 msgid "Private repository"
@@ -1878,13 +1984,13 b' msgid "There are no tags yet"'
1878 1984 msgstr "Aucun tag n’a été créé pour le moment."
1879 1985
1880 1986 #: rhodecode/templates/switch_to_list.html:35
1881 #: rhodecode/templates/bookmarks/bookmarks_data.html:32
1987 #: rhodecode/templates/bookmarks/bookmarks_data.html:37
1882 1988 msgid "There are no bookmarks yet"
1883 1989 msgstr "Aucun signet n’a été créé."
1884 1990
1885 1991 #: rhodecode/templates/admin/admin.html:5
1886 1992 #: rhodecode/templates/admin/admin.html:13
1887 #: rhodecode/templates/base/base.html:68
1993 #: rhodecode/templates/base/base.html:73
1888 1994 msgid "Admin journal"
1889 1995 msgstr "Historique d’administration"
1890 1996
@@ -1912,9 +2018,9 b' msgstr[1] ""'
1912 2018 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
1913 2019 #: rhodecode/templates/admin/users/user_edit_my_account.html:176
1914 2020 #: rhodecode/templates/admin/users/users.html:87
1915 #: rhodecode/templates/admin/users_groups/users_groups.html:37
2021 #: rhodecode/templates/admin/users_groups/users_groups.html:40
1916 2022 #: rhodecode/templates/journal/journal.html:197
1917 #: rhodecode/templates/journal/journal.html:300
2023 #: rhodecode/templates/journal/journal.html:287
1918 2024 msgid "Action"
1919 2025 msgstr "Action"
1920 2026
@@ -1924,7 +2030,7 b' msgid "Repository"'
1924 2030 msgstr "Dépôt"
1925 2031
1926 2032 #: rhodecode/templates/admin/admin_log.html:8
1927 #: rhodecode/templates/bookmarks/bookmarks.html:35
2033 #: rhodecode/templates/bookmarks/bookmarks.html:49
1928 2034 #: rhodecode/templates/bookmarks/bookmarks_data.html:7
1929 2035 #: rhodecode/templates/branches/branches.html:48
1930 2036 #: rhodecode/templates/branches/branches_data.html:7
@@ -1948,20 +2054,19 b' msgid "Repositories defaults"'
1948 2054 msgstr "Groupes de dépôts"
1949 2055
1950 2056 #: rhodecode/templates/admin/defaults/defaults.html:11
1951 #: rhodecode/templates/base/base.html:75
2057 #: rhodecode/templates/base/base.html:80
1952 2058 #, fuzzy
1953 2059 msgid "Defaults"
1954 2060 msgstr "[Par défaut]"
1955 2061
1956 2062 #: rhodecode/templates/admin/defaults/defaults.html:35
1957 2063 #: rhodecode/templates/admin/repos/repo_add_base.html:38
1958 #: rhodecode/templates/admin/repos/repo_edit.html:58
1959 2064 msgid "Type"
1960 2065 msgstr "Type"
1961 2066
1962 2067 #: rhodecode/templates/admin/defaults/defaults.html:48
1963 2068 #: rhodecode/templates/admin/repos/repo_add_base.html:69
1964 #: rhodecode/templates/admin/repos/repo_edit.html:89
2069 #: rhodecode/templates/admin/repos/repo_edit.html:82
1965 2070 #: rhodecode/templates/forks/fork.html:69
1966 2071 msgid ""
1967 2072 "Private repositories are only visible to people explicitly added as "
@@ -1971,60 +2076,194 b' msgstr ""'
1971 2076 "comme collaborateurs."
1972 2077
1973 2078 #: rhodecode/templates/admin/defaults/defaults.html:55
1974 #: rhodecode/templates/admin/repos/repo_edit.html:94
2079 #: rhodecode/templates/admin/repos/repo_edit.html:87
1975 2080 msgid "Enable statistics"
1976 2081 msgstr "Activer les statistiques"
1977 2082
1978 2083 #: rhodecode/templates/admin/defaults/defaults.html:59
1979 #: rhodecode/templates/admin/repos/repo_edit.html:98
2084 #: rhodecode/templates/admin/repos/repo_edit.html:91
1980 2085 msgid "Enable statistics window on summary page."
1981 2086 msgstr "Afficher les statistiques sur la page du dépôt."
1982 2087
1983 2088 #: rhodecode/templates/admin/defaults/defaults.html:65
1984 #: rhodecode/templates/admin/repos/repo_edit.html:103
2089 #: rhodecode/templates/admin/repos/repo_edit.html:96
1985 2090 msgid "Enable downloads"
1986 2091 msgstr "Activer les téléchargements"
1987 2092
1988 2093 #: rhodecode/templates/admin/defaults/defaults.html:69
1989 #: rhodecode/templates/admin/repos/repo_edit.html:107
2094 #: rhodecode/templates/admin/repos/repo_edit.html:100
1990 2095 msgid "Enable download menu on summary page."
1991 2096 msgstr "Afficher le menu de téléchargements sur la page du dépôt."
1992 2097
1993 2098 #: rhodecode/templates/admin/defaults/defaults.html:75
1994 #: rhodecode/templates/admin/repos/repo_edit.html:112
1995 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72
2099 #: rhodecode/templates/admin/repos/repo_edit.html:105
2100 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64
1996 2101 msgid "Enable locking"
1997 2102 msgstr "Activer le verrouillage"
1998 2103
1999 2104 #: rhodecode/templates/admin/defaults/defaults.html:79
2000 #: rhodecode/templates/admin/repos/repo_edit.html:116
2105 #: rhodecode/templates/admin/repos/repo_edit.html:109
2001 2106 msgid "Enable lock-by-pulling on repository."
2002 2107 msgstr "Activer le verrouillage lors d’un pull sur le dépôt."
2003 2108
2004 2109 #: rhodecode/templates/admin/defaults/defaults.html:84
2005 2110 #: rhodecode/templates/admin/ldap/ldap.html:89
2006 #: rhodecode/templates/admin/permissions/permissions.html:92
2007 #: rhodecode/templates/admin/repos/repo_edit.html:148
2008 #: rhodecode/templates/admin/repos/repo_edit.html:173
2009 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80
2111 #: rhodecode/templates/admin/permissions/permissions.html:122
2112 #: rhodecode/templates/admin/repos/repo_edit.html:141
2113 #: rhodecode/templates/admin/repos/repo_edit.html:166
2114 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72
2115 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:96
2010 2116 #: rhodecode/templates/admin/settings/hooks.html:73
2011 2117 #: rhodecode/templates/admin/users/user_add.html:94
2012 2118 #: rhodecode/templates/admin/users/user_edit.html:140
2013 #: rhodecode/templates/admin/users/user_edit.html:185
2014 2119 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:88
2015 2120 #: rhodecode/templates/admin/users_groups/users_group_add.html:49
2016 2121 #: rhodecode/templates/admin/users_groups/users_group_edit.html:90
2017 #: rhodecode/templates/admin/users_groups/users_group_edit.html:135
2122 #: rhodecode/templates/admin/users_groups/users_group_edit.html:143
2123 #: rhodecode/templates/base/default_perms_box.html:53
2018 2124 msgid "Save"
2019 2125 msgstr "Enregistrer"
2020 2126
2127 #: rhodecode/templates/admin/gists/index.html:5
2128 #: rhodecode/templates/base/base.html:299
2129 msgid "Gists"
2130 msgstr ""
2131
2132 #: rhodecode/templates/admin/gists/index.html:10
2133 #, fuzzy, python-format
2134 msgid "Private Gists for user %s"
2135 msgstr "utilisateur %s créé"
2136
2137 #: rhodecode/templates/admin/gists/index.html:12
2138 #, python-format
2139 msgid "Public Gists for user %s"
2140 msgstr ""
2141
2142 #: rhodecode/templates/admin/gists/index.html:14
2143 msgid "Public Gists"
2144 msgstr ""
2145
2146 #: rhodecode/templates/admin/gists/index.html:31
2147 #: rhodecode/templates/admin/gists/show.html:24
2148 #: rhodecode/templates/base/base.html:302
2149 #, fuzzy
2150 msgid "Create new gist"
2151 msgstr "Créer un nouveau fichier"
2152
2153 #: rhodecode/templates/admin/gists/index.html:48
2154 #, fuzzy
2155 msgid "Created"
2156 msgstr "Lecture"
2157
2158 #: rhodecode/templates/admin/gists/index.html:51
2159 #: rhodecode/templates/admin/gists/index.html:53
2160 #: rhodecode/templates/admin/gists/show.html:43
2161 #: rhodecode/templates/admin/gists/show.html:45
2162 #, fuzzy
2163 msgid "Expires"
2164 msgstr "Dépôts"
2165
2166 #: rhodecode/templates/admin/gists/index.html:51
2167 #: rhodecode/templates/admin/gists/show.html:43
2168 #, fuzzy
2169 msgid "never"
2170 msgstr "%d relecteur"
2171
2172 #: rhodecode/templates/admin/gists/index.html:68
2173 #, fuzzy
2174 msgid "There are no gists yet"
2175 msgstr "Aucun tag n’a été créé pour le moment."
2176
2177 #: rhodecode/templates/admin/gists/new.html:5
2178 #: rhodecode/templates/admin/gists/new.html:16
2179 msgid "New gist"
2180 msgstr ""
2181
2182 #: rhodecode/templates/admin/gists/new.html:37
2183 #, fuzzy
2184 msgid "Gist description ..."
2185 msgstr "Description"
2186
2187 #: rhodecode/templates/admin/gists/new.html:52
2188 msgid "Create private gist"
2189 msgstr ""
2190
2191 #: rhodecode/templates/admin/gists/new.html:53
2192 msgid "Create public gist"
2193 msgstr ""
2194
2195 #: rhodecode/templates/admin/gists/new.html:54
2196 #: rhodecode/templates/admin/permissions/permissions.html:123
2197 #: rhodecode/templates/admin/permissions/permissions.html:185
2198 #: rhodecode/templates/admin/repos/repo_edit.html:142
2199 #: rhodecode/templates/admin/repos/repo_edit.html:167
2200 #: rhodecode/templates/admin/repos/repo_edit.html:381
2201 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:73
2202 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:97
2203 #: rhodecode/templates/admin/settings/settings.html:115
2204 #: rhodecode/templates/admin/settings/settings.html:196
2205 #: rhodecode/templates/admin/settings/settings.html:288
2206 #: rhodecode/templates/admin/users/user_edit.html:141
2207 #: rhodecode/templates/admin/users/user_edit.html:198
2208 #: rhodecode/templates/admin/users/user_edit.html:246
2209 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:89
2210 #: rhodecode/templates/admin/users_groups/users_group_edit.html:144
2211 #: rhodecode/templates/base/default_perms_box.html:54
2212 #: rhodecode/templates/files/files_add.html:80
2213 #: rhodecode/templates/files/files_edit.html:66
2214 #: rhodecode/templates/pullrequests/pullrequest.html:86
2215 msgid "Reset"
2216 msgstr "Réinitialiser"
2217
2218 #: rhodecode/templates/admin/gists/show.html:5
2219 msgid "gist"
2220 msgstr ""
2221
2222 #: rhodecode/templates/admin/gists/show.html:9
2223 msgid "Gist"
2224 msgstr ""
2225
2226 #: rhodecode/templates/admin/gists/show.html:36
2227 msgid "Public gist"
2228 msgstr ""
2229
2230 #: rhodecode/templates/admin/gists/show.html:38
2231 #, fuzzy
2232 msgid "Private gist"
2233 msgstr "Dépôt privé"
2234
2235 #: rhodecode/templates/admin/gists/show.html:54
2236 #: rhodecode/templates/admin/repos/repo_edit.html:299
2237 #: rhodecode/templates/changeset/changeset_file_comment.html:40
2238 msgid "Delete"
2239 msgstr "Supprimer"
2240
2241 #: rhodecode/templates/admin/gists/show.html:54
2242 #, fuzzy
2243 msgid "Confirm to delete this gist"
2244 msgstr "Veuillez confirmer la suppression de l’e-mail : %s"
2245
2246 #: rhodecode/templates/admin/gists/show.html:63
2247 #: rhodecode/templates/admin/gists/show.html:84
2248 #: rhodecode/templates/files/files_edit.html:48
2249 #: rhodecode/templates/files/files_source.html:25
2250 #: rhodecode/templates/files/files_source.html:55
2251 #, fuzzy
2252 msgid "Show as raw"
2253 msgstr "montrer le fichier brut"
2254
2255 #: rhodecode/templates/admin/gists/show.html:71
2256 #, fuzzy
2257 msgid "created"
2258 msgstr "Lecture"
2259
2021 2260 #: rhodecode/templates/admin/ldap/ldap.html:5
2022 2261 msgid "LDAP administration"
2023 2262 msgstr "Administration LDAP"
2024 2263
2025 2264 #: rhodecode/templates/admin/ldap/ldap.html:11
2026 2265 #: rhodecode/templates/admin/users/users.html:86
2027 #: rhodecode/templates/base/base.html:74
2266 #: rhodecode/templates/base/base.html:79
2028 2267 #, fuzzy
2029 2268 msgid "LDAP"
2030 2269 msgstr "LDAP"
@@ -2125,7 +2364,7 b' msgid "Show notification"'
2125 2364 msgstr "Notification"
2126 2365
2127 2366 #: rhodecode/templates/admin/notifications/show_notification.html:9
2128 #: rhodecode/templates/base/base.html:241
2367 #: rhodecode/templates/base/base.html:253
2129 2368 msgid "Notifications"
2130 2369 msgstr "Notifications"
2131 2370
@@ -2134,12 +2373,14 b' msgid "Permissions administration"'
2134 2373 msgstr "Gestion des permissions"
2135 2374
2136 2375 #: rhodecode/templates/admin/permissions/permissions.html:11
2376 #: rhodecode/templates/admin/repos/repo_edit.html:151
2137 2377 #: rhodecode/templates/admin/repos/repo_edit.html:158
2138 #: rhodecode/templates/admin/repos/repo_edit.html:165
2139 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64
2378 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81
2379 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:88
2140 2380 #: rhodecode/templates/admin/users/user_edit.html:150
2141 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100
2142 #: rhodecode/templates/base/base.html:73
2381 #: rhodecode/templates/admin/users_groups/users_group_edit.html:129
2382 #: rhodecode/templates/admin/users_groups/users_group_edit.html:136
2383 #: rhodecode/templates/base/base.html:78
2143 2384 msgid "Permissions"
2144 2385 msgstr "Permissions"
2145 2386
@@ -2164,6 +2405,7 b' msgstr ""'
2164 2405
2165 2406 #: rhodecode/templates/admin/permissions/permissions.html:50
2166 2407 #: rhodecode/templates/admin/permissions/permissions.html:63
2408 #: rhodecode/templates/admin/permissions/permissions.html:77
2167 2409 #, fuzzy
2168 2410 msgid "Overwrite existing settings"
2169 2411 msgstr "Écraser les permissions existantes"
@@ -2180,89 +2422,95 b' msgstr ""'
2180 2422 "perdues."
2181 2423
2182 2424 #: rhodecode/templates/admin/permissions/permissions.html:69
2183 msgid "Registration"
2184 msgstr "Enregistrement"
2185
2186 #: rhodecode/templates/admin/permissions/permissions.html:77
2425 #, fuzzy
2426 msgid "User group"
2427 msgstr "Groupes d’utilisateurs"
2428
2429 #: rhodecode/templates/admin/permissions/permissions.html:76
2430 #, fuzzy
2431 msgid ""
2432 "All default permissions on each user group will be reset to chosen "
2433 "permission, note that all custom default permission on repository groups "
2434 "will be lost"
2435 msgstr ""
2436 "Les permissions par défaut de chaque dépôt vont être remplacées par la "
2437 "permission choisie. Toutes les permissions par défaut des dépôts seront "
2438 "perdues."
2439
2440 #: rhodecode/templates/admin/permissions/permissions.html:83
2187 2441 msgid "Repository creation"
2188 2442 msgstr "Création de dépôt"
2189 2443
2190 #: rhodecode/templates/admin/permissions/permissions.html:85
2444 #: rhodecode/templates/admin/permissions/permissions.html:91
2445 #, fuzzy
2446 msgid "User group creation"
2447 msgstr "Gestion des groupes d’utilisateurs"
2448
2449 #: rhodecode/templates/admin/permissions/permissions.html:99
2191 2450 msgid "Repository forking"
2192 2451 msgstr "Fork de dépôt"
2193 2452
2194 #: rhodecode/templates/admin/permissions/permissions.html:93
2195 #: rhodecode/templates/admin/permissions/permissions.html:154
2196 #: rhodecode/templates/admin/repos/repo_edit.html:149
2197 #: rhodecode/templates/admin/repos/repo_edit.html:174
2198 #: rhodecode/templates/admin/repos/repo_edit.html:388
2199 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81
2200 #: rhodecode/templates/admin/settings/settings.html:115
2201 #: rhodecode/templates/admin/settings/settings.html:187
2202 #: rhodecode/templates/admin/settings/settings.html:278
2203 #: rhodecode/templates/admin/users/user_edit.html:141
2204 #: rhodecode/templates/admin/users/user_edit.html:186
2205 #: rhodecode/templates/admin/users/user_edit.html:235
2206 #: rhodecode/templates/admin/users/user_edit.html:283
2207 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:89
2208 #: rhodecode/templates/admin/users_groups/users_group_edit.html:136
2209 #: rhodecode/templates/files/files_add.html:80
2210 #: rhodecode/templates/files/files_edit.html:66
2211 #: rhodecode/templates/pullrequests/pullrequest.html:110
2212 msgid "Reset"
2213 msgstr "Réinitialiser"
2214
2215 #: rhodecode/templates/admin/permissions/permissions.html:103
2453 #: rhodecode/templates/admin/permissions/permissions.html:107
2454 msgid "Registration"
2455 msgstr "Enregistrement"
2456
2457 #: rhodecode/templates/admin/permissions/permissions.html:115
2458 #, fuzzy
2459 msgid "External auth account activation"
2460 msgstr "Autorisé avec activation automatique du compte"
2461
2462 #: rhodecode/templates/admin/permissions/permissions.html:133
2216 2463 #, fuzzy
2217 2464 msgid "Default User Permissions"
2218 2465 msgstr "Permissions par défaut"
2219 2466
2220 #: rhodecode/templates/admin/permissions/permissions.html:113
2221 #: rhodecode/templates/admin/users/user_edit.html:244
2467 #: rhodecode/templates/admin/permissions/permissions.html:144
2468 #: rhodecode/templates/admin/users/user_edit.html:207
2222 2469 #, fuzzy
2223 2470 msgid "Allowed IP addresses"
2224 2471 msgstr "Adresses e-mail"
2225 2472
2226 #: rhodecode/templates/admin/permissions/permissions.html:127
2227 #: rhodecode/templates/admin/repos/repo_edit.html:347
2473 #: rhodecode/templates/admin/permissions/permissions.html:158
2474 #: rhodecode/templates/admin/repos/repo_edit.html:340
2228 2475 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70
2229 #: rhodecode/templates/admin/users/user_edit.html:212
2230 #: rhodecode/templates/admin/users/user_edit.html:257
2231 #: rhodecode/templates/admin/users_groups/users_groups.html:46
2476 #: rhodecode/templates/admin/users/user_edit.html:175
2477 #: rhodecode/templates/admin/users/user_edit.html:220
2478 #: rhodecode/templates/admin/users_groups/users_groups.html:54
2232 2479 #: rhodecode/templates/data_table/_dt_elements.html:122
2233 #: rhodecode/templates/data_table/_dt_elements.html:130
2480 #: rhodecode/templates/data_table/_dt_elements.html:136
2234 2481 msgid "delete"
2235 2482 msgstr "Supprimer"
2236 2483
2237 #: rhodecode/templates/admin/permissions/permissions.html:128
2238 #: rhodecode/templates/admin/users/user_edit.html:258
2484 #: rhodecode/templates/admin/permissions/permissions.html:159
2485 #: rhodecode/templates/admin/users/user_edit.html:221
2239 2486 #, fuzzy, python-format
2240 2487 msgid "Confirm to delete this ip: %s"
2241 2488 msgstr "Veuillez confirmer la suppression de l’e-mail : %s"
2242 2489
2243 #: rhodecode/templates/admin/permissions/permissions.html:134
2244 #: rhodecode/templates/admin/users/user_edit.html:264
2490 #: rhodecode/templates/admin/permissions/permissions.html:165
2491 #: rhodecode/templates/admin/users/user_edit.html:227
2245 2492 msgid "All IP addresses are allowed"
2246 2493 msgstr ""
2247 2494
2248 #: rhodecode/templates/admin/permissions/permissions.html:145
2249 #: rhodecode/templates/admin/users/user_edit.html:275
2495 #: rhodecode/templates/admin/permissions/permissions.html:176
2496 #: rhodecode/templates/admin/users/user_edit.html:238
2250 2497 #, fuzzy
2251 2498 msgid "New ip address"
2252 2499 msgstr "Nouvelle adrese"
2253 2500
2254 #: rhodecode/templates/admin/permissions/permissions.html:153
2501 #: rhodecode/templates/admin/permissions/permissions.html:184
2255 2502 #: rhodecode/templates/admin/repos/repo_add_base.html:73
2256 #: rhodecode/templates/admin/repos/repo_edit.html:387
2257 #: rhodecode/templates/admin/users/user_edit.html:234
2258 #: rhodecode/templates/admin/users/user_edit.html:282
2503 #: rhodecode/templates/admin/repos/repo_edit.html:380
2504 #: rhodecode/templates/admin/users/user_edit.html:197
2505 #: rhodecode/templates/admin/users/user_edit.html:245
2259 2506 msgid "Add"
2260 2507 msgstr "Ajouter"
2261 2508
2262 2509 #: rhodecode/templates/admin/repos/repo_add.html:12
2263 2510 #: rhodecode/templates/admin/repos/repo_add.html:16
2264 #: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103
2265 #: rhodecode/templates/base/base.html:263
2511 #: rhodecode/templates/base/base.html:74 rhodecode/templates/base/base.html:88
2512 #: rhodecode/templates/base/base.html:116
2513 #: rhodecode/templates/base/base.html:275
2266 2514 msgid "Repositories"
2267 2515 msgstr "Dépôts"
2268 2516
@@ -2278,7 +2526,7 b' msgid "Clone from"'
2278 2526 msgstr "Cloner depuis"
2279 2527
2280 2528 #: rhodecode/templates/admin/repos/repo_add_base.html:24
2281 #: rhodecode/templates/admin/repos/repo_edit.html:44
2529 #: rhodecode/templates/admin/repos/repo_edit.html:45
2282 2530 msgid "Optional http[s] url from which repository should be cloned."
2283 2531 msgstr "URL http(s) depuis laquelle le dépôt doit être cloné."
2284 2532
@@ -2292,13 +2540,13 b' msgid "Type of repository to create."'
2292 2540 msgstr "Type de dépôt à créer."
2293 2541
2294 2542 #: rhodecode/templates/admin/repos/repo_add_base.html:47
2295 #: rhodecode/templates/admin/repos/repo_edit.html:66
2543 #: rhodecode/templates/admin/repos/repo_edit.html:59
2296 2544 #: rhodecode/templates/forks/fork.html:38
2297 2545 msgid "Landing revision"
2298 2546 msgstr "Révision d’arrivée"
2299 2547
2300 2548 #: rhodecode/templates/admin/repos/repo_add_base.html:51
2301 #: rhodecode/templates/admin/repos/repo_edit.html:70
2549 #: rhodecode/templates/admin/repos/repo_edit.html:63
2302 2550 #: rhodecode/templates/forks/fork.html:42
2303 2551 msgid "Default revision for files page, downloads, whoosh and readme"
2304 2552 msgstr ""
@@ -2306,7 +2554,7 b' msgstr ""'
2306 2554 "recherche et de documentation."
2307 2555
2308 2556 #: rhodecode/templates/admin/repos/repo_add_base.html:60
2309 #: rhodecode/templates/admin/repos/repo_edit.html:79
2557 #: rhodecode/templates/admin/repos/repo_edit.html:72
2310 2558 #: rhodecode/templates/forks/fork.html:60
2311 2559 msgid "Keep it short and to the point. Use a README file for longer descriptions."
2312 2560 msgstr ""
@@ -2320,73 +2568,78 b' msgstr "\xc3\x89diter le d\xc3\xa9p\xc3\xb4t"'
2320 2568 #: rhodecode/templates/admin/repos/repo_edit.html:12
2321 2569 #: rhodecode/templates/admin/settings/hooks.html:9
2322 2570 #: rhodecode/templates/admin/settings/settings.html:11
2323 #: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121
2571 #: rhodecode/templates/base/base.html:81 rhodecode/templates/base/base.html:134
2324 2572 #: rhodecode/templates/summary/summary.html:212
2325 2573 msgid "Settings"
2326 2574 msgstr "Options"
2327 2575
2328 #: rhodecode/templates/admin/repos/repo_edit.html:40
2576 #: rhodecode/templates/admin/repos/repo_edit.html:36
2577 #, fuzzy
2578 msgid "Non-changeable id"
2579 msgstr "Identifiant permanent : %s"
2580
2581 #: rhodecode/templates/admin/repos/repo_edit.html:41
2329 2582 msgid "Clone uri"
2330 2583 msgstr "URL de clone"
2331 2584
2332 #: rhodecode/templates/admin/repos/repo_edit.html:53
2585 #: rhodecode/templates/admin/repos/repo_edit.html:54
2333 2586 msgid "Optional select a group to put this repository into."
2334 2587 msgstr "Sélectionnez un groupe (optionel) dans lequel sera placé le dépôt."
2335 2588
2336 #: rhodecode/templates/admin/repos/repo_edit.html:126
2589 #: rhodecode/templates/admin/repos/repo_edit.html:119
2337 2590 msgid "Change owner of this repository."
2338 2591 msgstr "Changer le propriétaire de ce dépôt."
2339 2592
2340 #: rhodecode/templates/admin/repos/repo_edit.html:184
2593 #: rhodecode/templates/admin/repos/repo_edit.html:177
2341 2594 #, fuzzy
2342 2595 msgid "Advanced settings"
2343 2596 msgstr "Enregister les options"
2344 2597
2345 #: rhodecode/templates/admin/repos/repo_edit.html:187
2598 #: rhodecode/templates/admin/repos/repo_edit.html:180
2346 2599 msgid "Statistics"
2347 2600 msgstr "Statistiques"
2348 2601
2349 #: rhodecode/templates/admin/repos/repo_edit.html:191
2602 #: rhodecode/templates/admin/repos/repo_edit.html:184
2350 2603 msgid "Reset current statistics"
2351 2604 msgstr "Réinitialiser les statistiques"
2352 2605
2353 #: rhodecode/templates/admin/repos/repo_edit.html:191
2606 #: rhodecode/templates/admin/repos/repo_edit.html:184
2354 2607 msgid "Confirm to remove current statistics"
2355 2608 msgstr "Souhaitez-vous vraiment réinitialiser les statistiques de ce dépôt ?"
2356 2609
2357 #: rhodecode/templates/admin/repos/repo_edit.html:194
2610 #: rhodecode/templates/admin/repos/repo_edit.html:187
2358 2611 msgid "Fetched to rev"
2359 2612 msgstr "Parcouru jusqu’à la révision"
2360 2613
2361 #: rhodecode/templates/admin/repos/repo_edit.html:195
2614 #: rhodecode/templates/admin/repos/repo_edit.html:188
2362 2615 msgid "Stats gathered"
2363 2616 msgstr "Statistiques obtenues"
2364 2617
2365 #: rhodecode/templates/admin/repos/repo_edit.html:203
2618 #: rhodecode/templates/admin/repos/repo_edit.html:196
2366 2619 msgid "Remote"
2367 2620 msgstr "Dépôt distant"
2368 2621
2369 #: rhodecode/templates/admin/repos/repo_edit.html:207
2622 #: rhodecode/templates/admin/repos/repo_edit.html:200
2370 2623 msgid "Pull changes from remote location"
2371 2624 msgstr "Récupérer les changements depuis le site distant"
2372 2625
2373 #: rhodecode/templates/admin/repos/repo_edit.html:207
2626 #: rhodecode/templates/admin/repos/repo_edit.html:200
2374 2627 msgid "Confirm to pull changes from remote side"
2375 2628 msgstr "Voulez-vous vraiment récupérer les changements depuis le site distant ?"
2376 2629
2377 #: rhodecode/templates/admin/repos/repo_edit.html:218
2630 #: rhodecode/templates/admin/repos/repo_edit.html:211
2378 2631 msgid "Cache"
2379 2632 msgstr "Cache"
2380 2633
2381 #: rhodecode/templates/admin/repos/repo_edit.html:222
2634 #: rhodecode/templates/admin/repos/repo_edit.html:215
2382 2635 msgid "Invalidate repository cache"
2383 2636 msgstr "Invalider le cache du dépôt"
2384 2637
2385 #: rhodecode/templates/admin/repos/repo_edit.html:222
2638 #: rhodecode/templates/admin/repos/repo_edit.html:215
2386 2639 msgid "Confirm to invalidate repository cache"
2387 2640 msgstr "Voulez-vous vraiment invalider le cache du dépôt ?"
2388 2641
2389 #: rhodecode/templates/admin/repos/repo_edit.html:225
2642 #: rhodecode/templates/admin/repos/repo_edit.html:218
2390 2643 msgid ""
2391 2644 "Manually invalidate cache for this repository. On first access repository"
2392 2645 " will be cached again"
@@ -2394,44 +2647,44 b' msgstr ""'
2394 2647 "Invalide manuellement le cache de ce dépôt. Au prochain accès sur ce "
2395 2648 "dépôt, il sera à nouveau mis en cache."
2396 2649
2397 #: rhodecode/templates/admin/repos/repo_edit.html:230
2650 #: rhodecode/templates/admin/repos/repo_edit.html:223
2398 2651 msgid "List of cached values"
2399 2652 msgstr "Liste des valeurs en cache"
2400 2653
2401 #: rhodecode/templates/admin/repos/repo_edit.html:233
2654 #: rhodecode/templates/admin/repos/repo_edit.html:226
2402 2655 msgid "Prefix"
2403 2656 msgstr ""
2404 2657
2405 #: rhodecode/templates/admin/repos/repo_edit.html:234
2658 #: rhodecode/templates/admin/repos/repo_edit.html:227
2406 2659 #, fuzzy
2407 2660 msgid "Key"
2408 2661 msgstr "Clé d’API"
2409 2662
2410 #: rhodecode/templates/admin/repos/repo_edit.html:235
2663 #: rhodecode/templates/admin/repos/repo_edit.html:228
2411 2664 #: rhodecode/templates/admin/users/user_add.html:86
2412 2665 #: rhodecode/templates/admin/users/user_edit.html:124
2413 2666 #: rhodecode/templates/admin/users/users.html:84
2414 2667 #: rhodecode/templates/admin/users_groups/users_group_add.html:41
2415 2668 #: rhodecode/templates/admin/users_groups/users_group_edit.html:42
2416 #: rhodecode/templates/admin/users_groups/users_groups.html:36
2669 #: rhodecode/templates/admin/users_groups/users_groups.html:39
2417 2670 msgid "Active"
2418 2671 msgstr "Actif"
2419 2672
2420 #: rhodecode/templates/admin/repos/repo_edit.html:250
2421 #: rhodecode/templates/base/base.html:280
2422 #: rhodecode/templates/base/base.html:281
2673 #: rhodecode/templates/admin/repos/repo_edit.html:243
2674 #: rhodecode/templates/base/base.html:292
2675 #: rhodecode/templates/base/base.html:293
2423 2676 msgid "Public journal"
2424 2677 msgstr "Journal public"
2425 2678
2426 #: rhodecode/templates/admin/repos/repo_edit.html:256
2679 #: rhodecode/templates/admin/repos/repo_edit.html:249
2427 2680 msgid "Remove from public journal"
2428 2681 msgstr "Supprimer du journal public"
2429 2682
2430 #: rhodecode/templates/admin/repos/repo_edit.html:258
2683 #: rhodecode/templates/admin/repos/repo_edit.html:251
2431 2684 msgid "Add to public journal"
2432 2685 msgstr "Ajouter le dépôt au journal public"
2433 2686
2434 #: rhodecode/templates/admin/repos/repo_edit.html:263
2687 #: rhodecode/templates/admin/repos/repo_edit.html:256
2435 2688 msgid ""
2436 2689 "All actions made on this repository will be accessible to everyone in "
2437 2690 "public journal"
@@ -2439,79 +2692,76 b' msgstr ""'
2439 2692 "Le descriptif des actions réalisées sur ce dépôt sera visible à tous "
2440 2693 "depuis le journal public."
2441 2694
2442 #: rhodecode/templates/admin/repos/repo_edit.html:270
2695 #: rhodecode/templates/admin/repos/repo_edit.html:263
2443 2696 msgid "Locking"
2444 2697 msgstr "Verrouillage"
2445 2698
2446 #: rhodecode/templates/admin/repos/repo_edit.html:275
2699 #: rhodecode/templates/admin/repos/repo_edit.html:268
2447 2700 msgid "Unlock locked repo"
2448 2701 msgstr "Déverrouiller le dépôt"
2449 2702
2450 #: rhodecode/templates/admin/repos/repo_edit.html:275
2703 #: rhodecode/templates/admin/repos/repo_edit.html:268
2451 2704 msgid "Confirm to unlock repository"
2452 2705 msgstr "Veuillez confirmer le déverrouillage de ce dépôt."
2453 2706
2454 #: rhodecode/templates/admin/repos/repo_edit.html:278
2455 msgid "lock repo"
2707 #: rhodecode/templates/admin/repos/repo_edit.html:271
2708 #, fuzzy
2709 msgid "Lock repo"
2456 2710 msgstr "Verrouiller le dépôt"
2457 2711
2458 #: rhodecode/templates/admin/repos/repo_edit.html:278
2712 #: rhodecode/templates/admin/repos/repo_edit.html:271
2459 2713 msgid "Confirm to lock repository"
2460 2714 msgstr "Veuillez confirmer le verrouillage de ce dépôt."
2461 2715
2462 #: rhodecode/templates/admin/repos/repo_edit.html:279
2716 #: rhodecode/templates/admin/repos/repo_edit.html:272
2463 2717 msgid "Repository is not locked"
2464 2718 msgstr "Ce dépôt n’est pas verrouillé."
2465 2719
2466 #: rhodecode/templates/admin/repos/repo_edit.html:284
2720 #: rhodecode/templates/admin/repos/repo_edit.html:277
2467 2721 msgid "Force locking on repository. Works only when anonymous access is disabled"
2468 2722 msgstr ""
2469 2723 "Forcer le verrouillage du dépôt. Ce réglage fonctionne uniquement quand "
2470 2724 "l‘accès anonyme est désactivé."
2471 2725
2472 #: rhodecode/templates/admin/repos/repo_edit.html:291
2726 #: rhodecode/templates/admin/repos/repo_edit.html:284
2473 2727 msgid "Set as fork of"
2474 2728 msgstr "Indiquer comme fork"
2475 2729
2476 #: rhodecode/templates/admin/repos/repo_edit.html:296
2477 msgid "set"
2730 #: rhodecode/templates/admin/repos/repo_edit.html:289
2731 #, fuzzy
2732 msgid "Set"
2478 2733 msgstr "Définir"
2479 2734
2480 #: rhodecode/templates/admin/repos/repo_edit.html:300
2735 #: rhodecode/templates/admin/repos/repo_edit.html:293
2481 2736 msgid "Manually set this repository as a fork of another from the list"
2482 2737 msgstr "Marquer ce dépôt comme fork d’un autre dépôt de la liste."
2483 2738
2484 #: rhodecode/templates/admin/repos/repo_edit.html:306
2485 #: rhodecode/templates/changeset/changeset_file_comment.html:41
2486 msgid "Delete"
2487 msgstr "Supprimer"
2488
2489 #: rhodecode/templates/admin/repos/repo_edit.html:315
2739 #: rhodecode/templates/admin/repos/repo_edit.html:308
2490 2740 msgid "Remove this repository"
2491 2741 msgstr "Supprimer ce dépôt"
2492 2742
2493 #: rhodecode/templates/admin/repos/repo_edit.html:315
2743 #: rhodecode/templates/admin/repos/repo_edit.html:308
2494 2744 msgid "Confirm to delete this repository"
2495 2745 msgstr "Voulez-vous vraiment supprimer ce dépôt ?"
2496 2746
2497 #: rhodecode/templates/admin/repos/repo_edit.html:317
2747 #: rhodecode/templates/admin/repos/repo_edit.html:310
2498 2748 #, fuzzy, python-format
2499 2749 msgid "this repository has %s fork"
2500 2750 msgid_plural "this repository has %s forks"
2501 2751 msgstr[0] "[a créé] le dépôt en tant que %s fork"
2502 2752 msgstr[1] "[a créé] le dépôt en tant que %s fork"
2503 2753
2504 #: rhodecode/templates/admin/repos/repo_edit.html:318
2754 #: rhodecode/templates/admin/repos/repo_edit.html:311
2505 2755 #, fuzzy
2506 2756 msgid "Detach forks"
2507 2757 msgstr "Indiquer comme fork"
2508 2758
2509 #: rhodecode/templates/admin/repos/repo_edit.html:319
2759 #: rhodecode/templates/admin/repos/repo_edit.html:312
2510 2760 #, fuzzy
2511 2761 msgid "Delete forks"
2512 2762 msgstr "Supprimer"
2513 2763
2514 #: rhodecode/templates/admin/repos/repo_edit.html:322
2764 #: rhodecode/templates/admin/repos/repo_edit.html:315
2515 2765 #, fuzzy
2516 2766 msgid ""
2517 2767 "This repository will be renamed in a special way in order to be "
@@ -2526,59 +2776,64 b' msgstr ""'
2526 2776 "Si vous voulez le supprimer complètement, effectuez la suppression "
2527 2777 "manuellement."
2528 2778
2529 #: rhodecode/templates/admin/repos/repo_edit.html:336
2779 #: rhodecode/templates/admin/repos/repo_edit.html:329
2530 2780 msgid "Extra fields"
2531 2781 msgstr ""
2532 2782
2533 #: rhodecode/templates/admin/repos/repo_edit.html:348
2783 #: rhodecode/templates/admin/repos/repo_edit.html:341
2534 2784 #, fuzzy, python-format
2535 2785 msgid "Confirm to delete this field: %s"
2536 2786 msgstr "Veuillez confirmer la suppression de l’e-mail : %s"
2537 2787
2538 #: rhodecode/templates/admin/repos/repo_edit.html:362
2788 #: rhodecode/templates/admin/repos/repo_edit.html:355
2539 2789 #, fuzzy
2540 2790 msgid "New field key"
2541 2791 msgstr "Ajouter un fichier"
2542 2792
2543 #: rhodecode/templates/admin/repos/repo_edit.html:370
2793 #: rhodecode/templates/admin/repos/repo_edit.html:363
2544 2794 msgid "New field label"
2545 2795 msgstr ""
2546 2796
2547 #: rhodecode/templates/admin/repos/repo_edit.html:373
2797 #: rhodecode/templates/admin/repos/repo_edit.html:366
2548 2798 msgid "Enter short label"
2549 2799 msgstr ""
2550 2800
2551 #: rhodecode/templates/admin/repos/repo_edit.html:379
2801 #: rhodecode/templates/admin/repos/repo_edit.html:372
2552 2802 #, fuzzy
2553 2803 msgid "New field description"
2554 2804 msgstr "Description"
2555 2805
2556 #: rhodecode/templates/admin/repos/repo_edit.html:382
2806 #: rhodecode/templates/admin/repos/repo_edit.html:375
2557 2807 msgid "Enter description of a field"
2558 2808 msgstr ""
2559 2809
2560 2810 #: rhodecode/templates/admin/repos/repo_edit_perms.html:3
2561 2811 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
2812 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:3
2562 2813 msgid "none"
2563 2814 msgstr "Aucune"
2564 2815
2565 2816 #: rhodecode/templates/admin/repos/repo_edit_perms.html:4
2566 2817 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:4
2818 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:4
2567 2819 msgid "read"
2568 2820 msgstr "Lecture"
2569 2821
2570 2822 #: rhodecode/templates/admin/repos/repo_edit_perms.html:5
2571 2823 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:5
2824 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:5
2572 2825 msgid "write"
2573 2826 msgstr "Écriture"
2574 2827
2575 2828 #: rhodecode/templates/admin/repos/repo_edit_perms.html:6
2576 2829 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
2830 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:6
2577 2831 msgid "admin"
2578 2832 msgstr "Administration"
2579 2833
2580 2834 #: rhodecode/templates/admin/repos/repo_edit_perms.html:7
2581 2835 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:7
2836 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:7
2582 2837 msgid "member"
2583 2838 msgstr "Membre"
2584 2839
@@ -2590,6 +2845,8 b' msgstr "D\xc3\xa9p\xc3\xb4t priv\xc3\xa9"'
2590 2845 #: rhodecode/templates/admin/repos/repo_edit_perms.html:28
2591 2846 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20
2592 2847 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35
2848 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:20
2849 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:35
2593 2850 msgid "default"
2594 2851 msgstr "[Par défaut]"
2595 2852
@@ -2597,34 +2854,37 b' msgstr "[Par d\xc3\xa9faut]"'
2597 2854 #: rhodecode/templates/admin/repos/repo_edit_perms.html:58
2598 2855 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25
2599 2856 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55
2857 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:25
2858 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:55
2600 2859 msgid "revoke"
2601 2860 msgstr "Révoquer"
2602 2861
2603 2862 #: rhodecode/templates/admin/repos/repo_edit_perms.html:83
2604 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80
2863 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:81
2864 #: rhodecode/templates/admin/users_groups/user_group_edit_perms.html:81
2605 2865 msgid "Add another member"
2606 2866 msgstr "Ajouter un utilisateur"
2607 2867
2608 #: rhodecode/templates/admin/repos/repo_edit_perms.html:97
2609 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100
2610 msgid "Failed to remove user"
2611 msgstr "Échec de suppression de l’utilisateur"
2612
2613 #: rhodecode/templates/admin/repos/repo_edit_perms.html:112
2614 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116
2615 #, fuzzy
2616 msgid "Failed to remove user group"
2617 msgstr "Erreur lors de la suppression du groupe d’utilisateurs."
2618
2619 2868 #: rhodecode/templates/admin/repos/repos.html:5
2620 2869 msgid "Repositories administration"
2621 2870 msgstr "Administration des dépôts"
2622 2871
2623 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86
2872 #: rhodecode/templates/admin/repos/repos.html:86
2873 #: rhodecode/templates/admin/users/user_edit_my_account.html:185
2874 #: rhodecode/templates/admin/users/users.html:109
2875 #: rhodecode/templates/bookmarks/bookmarks.html:76
2876 #: rhodecode/templates/branches/branches.html:75
2877 #: rhodecode/templates/journal/journal.html:206
2878 #: rhodecode/templates/journal/journal.html:296
2879 #: rhodecode/templates/tags/tags.html:76
2880 msgid "No records found."
2881 msgstr "Aucun élément n’a été trouvé."
2882
2883 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
2624 2884 msgid "apply to children"
2625 2885 msgstr "Appliquer aux enfants"
2626 2886
2627 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
2887 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:88
2628 2888 #, fuzzy
2629 2889 msgid ""
2630 2890 "Set or revoke permission to all children of that group, including non-"
@@ -2654,7 +2914,7 b' msgstr "Groupe de d\xc3\xa9p\xc3\xb4t"'
2654 2914 #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11
2655 2915 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11
2656 2916 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16
2657 #: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82
2917 #: rhodecode/templates/base/base.html:75 rhodecode/templates/base/base.html:91
2658 2918 #, fuzzy
2659 2919 msgid "Repository groups"
2660 2920 msgstr "Groupe de dépôt"
@@ -2688,7 +2948,7 b' msgstr "\xc3\x89dition du groupe de d\xc3\xa9p\xc3\xb4t %s"'
2688 2948 msgid "Add child group"
2689 2949 msgstr "Ajouter un nouveau groupe"
2690 2950
2691 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76
2951 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:68
2692 2952 msgid ""
2693 2953 "Enable lock-by-pulling on group. This option will be applied to all other"
2694 2954 " groups and repositories inside"
@@ -2706,16 +2966,22 b' msgid "Number of toplevel repositories"'
2706 2966 msgstr "Nombre de sous-dépôts"
2707 2967
2708 2968 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64
2969 #: rhodecode/templates/admin/users_groups/users_groups.html:48
2970 #: rhodecode/templates/changeset/changeset_file_comment.html:73
2971 #: rhodecode/templates/changeset/changeset_file_comment.html:171
2709 2972 #, fuzzy
2710 2973 msgid "Edit"
2711 2974 msgstr "éditer"
2712 2975
2713 2976 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65
2977 #: rhodecode/templates/admin/users_groups/users_groups.html:49
2714 2978 #: rhodecode/templates/base/perms_summary.html:29
2715 #: rhodecode/templates/base/perms_summary.html:48
2716 #: rhodecode/templates/base/perms_summary.html:50
2979 #: rhodecode/templates/base/perms_summary.html:60
2980 #: rhodecode/templates/base/perms_summary.html:62
2717 2981 #: rhodecode/templates/data_table/_dt_elements.html:116
2718 2982 #: rhodecode/templates/data_table/_dt_elements.html:117
2983 #: rhodecode/templates/data_table/_dt_elements.html:130
2984 #: rhodecode/templates/data_table/_dt_elements.html:131
2719 2985 msgid "edit"
2720 2986 msgstr "éditer"
2721 2987
@@ -2823,8 +3089,8 b' msgid "Google Analytics code"'
2823 3089 msgstr ""
2824 3090
2825 3091 #: rhodecode/templates/admin/settings/settings.html:114
2826 #: rhodecode/templates/admin/settings/settings.html:186
2827 #: rhodecode/templates/admin/settings/settings.html:277
3092 #: rhodecode/templates/admin/settings/settings.html:195
3093 #: rhodecode/templates/admin/settings/settings.html:287
2828 3094 msgid "Save settings"
2829 3095 msgstr "Enregister les options"
2830 3096
@@ -2838,48 +3104,72 b' msgid "General"'
2838 3104 msgstr "Activer"
2839 3105
2840 3106 #: rhodecode/templates/admin/settings/settings.html:134
2841 msgid "Use lightweight dashboard"
2842 msgstr ""
2843
2844 #: rhodecode/templates/admin/settings/settings.html:140
2845 3107 #, fuzzy
2846 3108 msgid "Use repository extra fields"
2847 3109 msgstr "Dépôts"
2848 3110
2849 #: rhodecode/templates/admin/settings/settings.html:147
3111 #: rhodecode/templates/admin/settings/settings.html:136
3112 msgid "Allows storing additional customized fields per repository."
3113 msgstr ""
3114
3115 #: rhodecode/templates/admin/settings/settings.html:139
3116 msgid "Show RhodeCode version"
3117 msgstr ""
3118
3119 #: rhodecode/templates/admin/settings/settings.html:141
3120 msgid "Shows or hides displayed version of RhodeCode in the footer"
3121 msgstr ""
3122
3123 #: rhodecode/templates/admin/settings/settings.html:146
3124 #, fuzzy
3125 msgid "Dashboard items"
3126 msgstr "Tableau de bord"
3127
3128 #: rhodecode/templates/admin/settings/settings.html:150
3129 msgid ""
3130 "Number of items displayed in lightweight dashboard before pagination is "
3131 "shown."
3132 msgstr ""
3133
3134 #: rhodecode/templates/admin/settings/settings.html:155
2850 3135 msgid "Icons"
2851 3136 msgstr "Icônes"
2852 3137
2853 #: rhodecode/templates/admin/settings/settings.html:152
3138 #: rhodecode/templates/admin/settings/settings.html:160
2854 3139 msgid "Show public repo icon on repositories"
2855 3140 msgstr "Afficher l’icône de dépôt public sur les dépôts"
2856 3141
2857 #: rhodecode/templates/admin/settings/settings.html:156
3142 #: rhodecode/templates/admin/settings/settings.html:164
2858 3143 msgid "Show private repo icon on repositories"
2859 3144 msgstr "Afficher l’icône de dépôt privé sur les dépôts"
2860 3145
2861 #: rhodecode/templates/admin/settings/settings.html:163
3146 #: rhodecode/templates/admin/settings/settings.html:166
3147 #, fuzzy
3148 msgid "Show public/private icons next to repositories names"
3149 msgstr "Afficher l’icône de dépôt public sur les dépôts"
3150
3151 #: rhodecode/templates/admin/settings/settings.html:172
2862 3152 msgid "Meta-Tagging"
2863 3153 msgstr "Meta-Tagging"
2864 3154
2865 #: rhodecode/templates/admin/settings/settings.html:168
3155 #: rhodecode/templates/admin/settings/settings.html:177
2866 3156 msgid "Stylify recognised metatags:"
2867 3157 msgstr "Styliser les méta-tags reconnus :"
2868 3158
2869 #: rhodecode/templates/admin/settings/settings.html:195
3159 #: rhodecode/templates/admin/settings/settings.html:204
2870 3160 msgid "VCS settings"
2871 3161 msgstr "Réglages de gestionnaire de version"
2872 3162
2873 #: rhodecode/templates/admin/settings/settings.html:204
3163 #: rhodecode/templates/admin/settings/settings.html:213
2874 3164 msgid "Web"
2875 3165 msgstr "Web"
2876 3166
2877 #: rhodecode/templates/admin/settings/settings.html:209
3167 #: rhodecode/templates/admin/settings/settings.html:218
2878 3168 #, fuzzy
2879 3169 msgid "Require SSL for vcs operations"
2880 3170 msgstr "SSL requis pour les opérations de push/pull"
2881 3171
2882 #: rhodecode/templates/admin/settings/settings.html:211
3172 #: rhodecode/templates/admin/settings/settings.html:220
2883 3173 msgid ""
2884 3174 "RhodeCode will require SSL for pushing or pulling. If SSL is missing it "
2885 3175 "will return HTTP Error 406: Not Acceptable"
@@ -2887,46 +3177,46 b' msgstr ""'
2887 3177 "RhodeCode requièrera SSL pour les pushs et pulls. Si le SSL n’est pas "
2888 3178 "utilisé l’erreur HTTP 406 (Non Acceptable) sera renvoyée."
2889 3179
2890 #: rhodecode/templates/admin/settings/settings.html:217
3180 #: rhodecode/templates/admin/settings/settings.html:226
2891 3181 msgid "Hooks"
2892 3182 msgstr "Hooks"
2893 3183
2894 #: rhodecode/templates/admin/settings/settings.html:222
3184 #: rhodecode/templates/admin/settings/settings.html:231
2895 3185 msgid "Update repository after push (hg update)"
2896 3186 msgstr "Mettre à jour les dépôts après un push (hg update)"
2897 3187
2898 #: rhodecode/templates/admin/settings/settings.html:226
3188 #: rhodecode/templates/admin/settings/settings.html:235
2899 3189 msgid "Show repository size after push"
2900 3190 msgstr "Afficher la taille du dépôt après un push"
2901 3191
2902 #: rhodecode/templates/admin/settings/settings.html:230
3192 #: rhodecode/templates/admin/settings/settings.html:239
2903 3193 msgid "Log user push commands"
2904 3194 msgstr "Journaliser les commandes de push"
2905 3195
2906 #: rhodecode/templates/admin/settings/settings.html:234
3196 #: rhodecode/templates/admin/settings/settings.html:243
2907 3197 msgid "Log user pull commands"
2908 3198 msgstr "Journaliser les commandes de pull"
2909 3199
2910 #: rhodecode/templates/admin/settings/settings.html:238
3200 #: rhodecode/templates/admin/settings/settings.html:247
2911 3201 #, fuzzy
2912 3202 msgid "Advanced setup"
2913 3203 msgstr "Avancé"
2914 3204
2915 #: rhodecode/templates/admin/settings/settings.html:243
3205 #: rhodecode/templates/admin/settings/settings.html:252
2916 3206 msgid "Mercurial Extensions"
2917 3207 msgstr "Extensions Mercurial"
2918 3208
2919 #: rhodecode/templates/admin/settings/settings.html:248
3209 #: rhodecode/templates/admin/settings/settings.html:257
2920 3210 #, fuzzy
2921 3211 msgid "Enable largefiles extension"
2922 3212 msgstr "Extensions largefiles"
2923 3213
2924 #: rhodecode/templates/admin/settings/settings.html:252
3214 #: rhodecode/templates/admin/settings/settings.html:261
2925 3215 #, fuzzy
2926 3216 msgid "Enable hgsubversion extension"
2927 3217 msgstr "Extensions hgsubversion"
2928 3218
2929 #: rhodecode/templates/admin/settings/settings.html:254
3219 #: rhodecode/templates/admin/settings/settings.html:263
2930 3220 #, fuzzy
2931 3221 msgid ""
2932 3222 "Requires hgsubversion library installed. Allows cloning from svn remote "
@@ -2935,27 +3225,23 b' msgstr ""'
2935 3225 "Ceci nécessite l’installation de la bibliothèque hgsubversion. Permet de "
2936 3226 "clôner à partir de dépôts Suversion."
2937 3227
2938 #: rhodecode/templates/admin/settings/settings.html:264
3228 #: rhodecode/templates/admin/settings/settings.html:274
2939 3229 msgid "Repositories location"
2940 3230 msgstr "Emplacement des dépôts"
2941 3231
2942 #: rhodecode/templates/admin/settings/settings.html:269
3232 #: rhodecode/templates/admin/settings/settings.html:279
2943 3233 msgid ""
2944 "This a crucial application setting. If you are really sure you need to "
2945 "change this, you must restart application in order to make this setting "
2946 "take effect. Click this label to unlock."
3234 "Click to unlock. You must restart RhodeCode in order to make this setting"
3235 " take effect."
2947 3236 msgstr ""
2948 "Ce réglage ne devrait pas être modifié en temps normal. Si vous devez "
2949 "vraiment le faire, redémarrer l’application une fois le changement "
2950 "effectué. Cliquez sur ce texte pour déverrouiller."
2951
2952 #: rhodecode/templates/admin/settings/settings.html:270
2953 #: rhodecode/templates/base/base.html:131
3237
3238 #: rhodecode/templates/admin/settings/settings.html:280
3239 #: rhodecode/templates/base/base.html:143
2954 3240 #, fuzzy
2955 3241 msgid "Unlock"
2956 3242 msgstr "Déverrouiller"
2957 3243
2958 #: rhodecode/templates/admin/settings/settings.html:272
3244 #: rhodecode/templates/admin/settings/settings.html:282
2959 3245 msgid ""
2960 3246 "Location where repositories are stored. After changing this value a "
2961 3247 "restart, and rescan is required"
@@ -2963,24 +3249,24 b' msgstr ""'
2963 3249 "Emplacement de stockage des dépôts. Si cette valeur est changée, "
2964 3250 "Rhodecode devra être redémarré les les dépôts rescannés."
2965 3251
2966 #: rhodecode/templates/admin/settings/settings.html:292
3252 #: rhodecode/templates/admin/settings/settings.html:303
2967 3253 msgid "Test Email"
2968 3254 msgstr "E-mail de test"
2969 3255
2970 #: rhodecode/templates/admin/settings/settings.html:300
3256 #: rhodecode/templates/admin/settings/settings.html:311
2971 3257 msgid "Email to"
2972 3258 msgstr "Envoyer l’e-mail à"
2973 3259
2974 #: rhodecode/templates/admin/settings/settings.html:308
3260 #: rhodecode/templates/admin/settings/settings.html:319
2975 3261 msgid "Send"
2976 3262 msgstr "Envoyer"
2977 3263
2978 #: rhodecode/templates/admin/settings/settings.html:314
3264 #: rhodecode/templates/admin/settings/settings.html:325
2979 3265 msgid "System Info and Packages"
2980 3266 msgstr "Information système et paquets"
2981 3267
2982 #: rhodecode/templates/admin/settings/settings.html:317
2983 #: rhodecode/templates/changelog/changelog.html:42
3268 #: rhodecode/templates/admin/settings/settings.html:328
3269 #: rhodecode/templates/changelog/changelog.html:51
2984 3270 msgid "Show"
2985 3271 msgstr "Afficher"
2986 3272
@@ -2990,7 +3276,7 b' msgstr "Ajouter un utilisateur"'
2990 3276
2991 3277 #: rhodecode/templates/admin/users/user_add.html:10
2992 3278 #: rhodecode/templates/admin/users/user_edit.html:11
2993 #: rhodecode/templates/base/base.html:71
3279 #: rhodecode/templates/base/base.html:76
2994 3280 msgid "Users"
2995 3281 msgstr "Utilisateurs"
2996 3282
@@ -3048,46 +3334,21 b' msgstr "Nouveau mot de passe"'
3048 3334 msgid "New password confirmation"
3049 3335 msgstr "Confirmation du nouveau mot de passe"
3050 3336
3051 #: rhodecode/templates/admin/users/user_edit.html:158
3052 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108
3053 msgid "Inherit default permissions"
3054 msgstr "Utiliser les permissions par défaut"
3055
3056 3337 #: rhodecode/templates/admin/users/user_edit.html:163
3057 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113
3058 #, python-format
3059 msgid ""
3060 "Select to inherit permissions from %s settings. With this selected below "
3061 "options does not have any action"
3062 msgstr ""
3063 "Cochez pour utiliser les permissions des les réglages %s. Si cette option"
3064 " est activée, les réglages ci-dessous n’auront pas d’effet."
3065
3066 #: rhodecode/templates/admin/users/user_edit.html:169
3067 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119
3068 msgid "Create repositories"
3069 msgstr "Création de dépôts"
3070
3071 #: rhodecode/templates/admin/users/user_edit.html:177
3072 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127
3073 msgid "Fork repositories"
3074 msgstr "Forker les dépôts"
3075
3076 #: rhodecode/templates/admin/users/user_edit.html:200
3077 3338 msgid "Email addresses"
3078 3339 msgstr "Adresses e-mail"
3079 3340
3080 #: rhodecode/templates/admin/users/user_edit.html:213
3341 #: rhodecode/templates/admin/users/user_edit.html:176
3081 3342 #, python-format
3082 3343 msgid "Confirm to delete this email: %s"
3083 3344 msgstr "Veuillez confirmer la suppression de l’e-mail : %s"
3084 3345
3085 #: rhodecode/templates/admin/users/user_edit.html:227
3346 #: rhodecode/templates/admin/users/user_edit.html:190
3086 3347 msgid "New email address"
3087 3348 msgstr "Nouvelle adrese"
3088 3349
3089 3350 #: rhodecode/templates/admin/users/user_edit_my_account.html:5
3090 #: rhodecode/templates/base/base.html:242
3351 #: rhodecode/templates/base/base.html:254
3091 3352 msgid "My account"
3092 3353 msgstr "Mon compte"
3093 3354
@@ -3125,7 +3386,7 b' msgstr "Requ\xc3\xaate de pull n\xc2\xba%s ouverte le %s"'
3125 3386
3126 3387 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17
3127 3388 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45
3128 #: rhodecode/templates/pullrequests/pullrequest_data.html:7
3389 #: rhodecode/templates/pullrequests/pullrequest_data.html:11
3129 3390 #: rhodecode/templates/pullrequests/pullrequest_show.html:27
3130 3391 #: rhodecode/templates/pullrequests/pullrequest_show.html:42
3131 3392 msgid "Closed"
@@ -3145,7 +3406,7 b' msgid "I participate in"'
3145 3406 msgstr "Je participe à"
3146 3407
3147 3408 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42
3148 #: rhodecode/templates/pullrequests/pullrequest_data.html:11
3409 #: rhodecode/templates/pullrequests/pullrequest_data.html:8
3149 3410 #, python-format
3150 3411 msgid "Pull request #%s opened by %s on %s"
3151 3412 msgstr "Requête de pull nº%s ouverte par %s le %s"
@@ -3180,13 +3441,13 b' msgstr "Ajouter un groupe d\xe2\x80\x99utilisateur"'
3180 3441
3181 3442 #: rhodecode/templates/admin/users_groups/users_group_add.html:10
3182 3443 #: rhodecode/templates/admin/users_groups/users_groups.html:11
3183 #: rhodecode/templates/base/base.html:72
3444 #: rhodecode/templates/base/base.html:77 rhodecode/templates/base/base.html:94
3184 3445 #, fuzzy
3185 3446 msgid "User groups"
3186 3447 msgstr "Groupes d’utilisateurs"
3187 3448
3188 3449 #: rhodecode/templates/admin/users_groups/users_group_add.html:12
3189 #: rhodecode/templates/admin/users_groups/users_groups.html:25
3450 #: rhodecode/templates/admin/users_groups/users_groups.html:26
3190 3451 #, fuzzy
3191 3452 msgid "Add new user group"
3192 3453 msgstr "Ajouter un nouveau groupe"
@@ -3202,7 +3463,7 b' msgid "UserGroups"'
3202 3463 msgstr "Groupes d’utilisateurs"
3203 3464
3204 3465 #: rhodecode/templates/admin/users_groups/users_group_edit.html:50
3205 #: rhodecode/templates/admin/users_groups/users_groups.html:35
3466 #: rhodecode/templates/admin/users_groups/users_groups.html:38
3206 3467 msgid "Members"
3207 3468 msgstr "Membres"
3208 3469
@@ -3223,47 +3484,57 b' msgstr "Membres disponibles"'
3223 3484 msgid "Add all elements"
3224 3485 msgstr "Tout ajouter"
3225 3486
3226 #: rhodecode/templates/admin/users_groups/users_group_edit.html:150
3227 msgid "Group members"
3228 msgstr "Membres du groupe"
3229
3230 #: rhodecode/templates/admin/users_groups/users_group_edit.html:167
3487 #: rhodecode/templates/admin/users_groups/users_group_edit.html:109
3231 3488 #, fuzzy
3232 3489 msgid "No members yet"
3233 3490 msgstr "Membres"
3234 3491
3492 #: rhodecode/templates/admin/users_groups/users_group_edit.html:117
3493 #, fuzzy
3494 msgid "Global Permissions"
3495 msgstr "Copier les permissions"
3496
3235 3497 #: rhodecode/templates/admin/users_groups/users_groups.html:5
3236 3498 #, fuzzy
3237 3499 msgid "User groups administration"
3238 3500 msgstr "Gestion des groupes d’utilisateurs"
3239 3501
3240 #: rhodecode/templates/admin/users_groups/users_groups.html:47
3502 #: rhodecode/templates/admin/users_groups/users_groups.html:55
3241 3503 #, fuzzy, python-format
3242 3504 msgid "Confirm to delete this user group: %s"
3243 3505 msgstr "Voulez-vous vraiment supprimer le groupe d‘utilisateurs « %s » ?"
3244 3506
3507 #: rhodecode/templates/admin/users_groups/users_groups.html:62
3508 #, fuzzy
3509 msgid "There are no user groups yet"
3510 msgstr "Aucun groupe de dépôts n’a été créé pour le moment."
3511
3245 3512 #: rhodecode/templates/base/base.html:42
3246 msgid "Submit a bug"
3247 msgstr "Signaler un bogue"
3248
3249 #: rhodecode/templates/base/base.html:108
3513 #, python-format
3514 msgid "Server instance: %s"
3515 msgstr ""
3516
3517 #: rhodecode/templates/base/base.html:52
3518 msgid "Report a bug"
3519 msgstr ""
3520
3521 #: rhodecode/templates/base/base.html:121
3250 3522 #: rhodecode/templates/data_table/_dt_elements.html:9
3251 3523 #: rhodecode/templates/data_table/_dt_elements.html:11
3252 3524 #: rhodecode/templates/data_table/_dt_elements.html:13
3253 #: rhodecode/templates/pullrequests/pullrequest_show.html:81
3254 3525 #: rhodecode/templates/summary/summary.html:8
3255 3526 msgid "Summary"
3256 3527 msgstr "Résumé"
3257 3528
3258 #: rhodecode/templates/base/base.html:109
3259 #: rhodecode/templates/changelog/changelog.html:11
3529 #: rhodecode/templates/base/base.html:122
3530 #: rhodecode/templates/changelog/changelog.html:15
3260 3531 #: rhodecode/templates/data_table/_dt_elements.html:17
3261 3532 #: rhodecode/templates/data_table/_dt_elements.html:19
3262 3533 #: rhodecode/templates/data_table/_dt_elements.html:21
3263 3534 msgid "Changelog"
3264 3535 msgstr "Historique"
3265 3536
3266 #: rhodecode/templates/base/base.html:110
3537 #: rhodecode/templates/base/base.html:123
3267 3538 #: rhodecode/templates/data_table/_dt_elements.html:25
3268 3539 #: rhodecode/templates/data_table/_dt_elements.html:27
3269 3540 #: rhodecode/templates/data_table/_dt_elements.html:29
@@ -3271,52 +3542,48 b' msgstr "Historique"'
3271 3542 msgid "Files"
3272 3543 msgstr "Fichiers"
3273 3544
3274 #: rhodecode/templates/base/base.html:112
3545 #: rhodecode/templates/base/base.html:125
3275 3546 #, fuzzy
3276 3547 msgid "Switch To"
3277 3548 msgstr "Aller"
3278 3549
3279 #: rhodecode/templates/base/base.html:114
3280 #: rhodecode/templates/base/base.html:267
3550 #: rhodecode/templates/base/base.html:127
3551 #: rhodecode/templates/base/base.html:279
3281 3552 msgid "loading..."
3282 3553 msgstr "Chargement…"
3283 3554
3284 #: rhodecode/templates/base/base.html:118
3555 #: rhodecode/templates/base/base.html:131
3285 3556 msgid "Options"
3286 3557 msgstr "Options"
3287 3558
3288 #: rhodecode/templates/base/base.html:124
3559 #: rhodecode/templates/base/base.html:137
3289 3560 #: rhodecode/templates/forks/forks_data.html:21
3290 3561 msgid "Compare fork"
3291 3562 msgstr "Comparer le fork"
3292 3563
3293 #: rhodecode/templates/base/base.html:126
3294 msgid "Lightweight changelog"
3295 msgstr ""
3296
3297 #: rhodecode/templates/base/base.html:127
3298 #: rhodecode/templates/base/base.html:287
3564 #: rhodecode/templates/base/base.html:139
3565 #: rhodecode/templates/base/base.html:312
3299 3566 #: rhodecode/templates/search/search.html:14
3300 3567 #: rhodecode/templates/search/search.html:54
3301 3568 msgid "Search"
3302 3569 msgstr "Rechercher"
3303 3570
3304 #: rhodecode/templates/base/base.html:133
3571 #: rhodecode/templates/base/base.html:145
3305 3572 #, fuzzy
3306 3573 msgid "Lock"
3307 3574 msgstr "Verrouiller"
3308 3575
3309 #: rhodecode/templates/base/base.html:141
3576 #: rhodecode/templates/base/base.html:153
3310 3577 #, fuzzy
3311 3578 msgid "Follow"
3312 3579 msgstr "followers"
3313 3580
3314 #: rhodecode/templates/base/base.html:142
3581 #: rhodecode/templates/base/base.html:154
3315 3582 #, fuzzy
3316 3583 msgid "Unfollow"
3317 3584 msgstr "followers"
3318 3585
3319 #: rhodecode/templates/base/base.html:145
3586 #: rhodecode/templates/base/base.html:157
3320 3587 #: rhodecode/templates/data_table/_dt_elements.html:33
3321 3588 #: rhodecode/templates/data_table/_dt_elements.html:35
3322 3589 #: rhodecode/templates/data_table/_dt_elements.html:37
@@ -3325,66 +3592,122 b' msgstr "followers"'
3325 3592 msgid "Fork"
3326 3593 msgstr "Fork"
3327 3594
3328 #: rhodecode/templates/base/base.html:147
3595 #: rhodecode/templates/base/base.html:159
3329 3596 #, fuzzy
3330 3597 msgid "Create Pull Request"
3331 3598 msgstr "Nouvelle requête de pull"
3332 3599
3333 #: rhodecode/templates/base/base.html:153
3600 #: rhodecode/templates/base/base.html:165
3334 3601 #, fuzzy
3335 3602 msgid "Show Pull Requests"
3336 3603 msgstr "Nouvelle requête de pull"
3337 3604
3338 #: rhodecode/templates/base/base.html:153
3605 #: rhodecode/templates/base/base.html:165
3339 3606 #, fuzzy
3340 3607 msgid "Pull Requests"
3341 3608 msgstr "Requêtes de pull"
3342 3609
3343 #: rhodecode/templates/base/base.html:190
3610 #: rhodecode/templates/base/base.html:202
3344 3611 #, fuzzy
3345 3612 msgid "Not logged in"
3346 3613 msgstr "Dernière connexion"
3347 3614
3348 #: rhodecode/templates/base/base.html:197
3615 #: rhodecode/templates/base/base.html:209
3349 3616 msgid "Login to your account"
3350 3617 msgstr "Connexion à votre compte"
3351 3618
3352 #: rhodecode/templates/base/base.html:220
3619 #: rhodecode/templates/base/base.html:232
3353 3620 msgid "Forgot password ?"
3354 3621 msgstr "Mot de passe oublié ?"
3355 3622
3356 #: rhodecode/templates/base/base.html:243
3623 #: rhodecode/templates/base/base.html:255
3357 3624 msgid "Log Out"
3358 3625 msgstr "Se déconnecter"
3359 3626
3360 #: rhodecode/templates/base/base.html:262
3627 #: rhodecode/templates/base/base.html:274
3361 3628 msgid "Switch repository"
3362 3629 msgstr "Aller au dépôt"
3363 3630
3364 #: rhodecode/templates/base/base.html:274
3631 #: rhodecode/templates/base/base.html:286
3365 3632 msgid "Show recent activity"
3366 3633 msgstr ""
3367 3634
3368 #: rhodecode/templates/base/base.html:275
3635 #: rhodecode/templates/base/base.html:287
3369 3636 #: rhodecode/templates/journal/journal.html:4
3370 3637 msgid "Journal"
3371 3638 msgstr "Historique"
3372 3639
3373 #: rhodecode/templates/base/base.html:286
3640 #: rhodecode/templates/base/base.html:298
3641 msgid "Show public gists"
3642 msgstr ""
3643
3644 #: rhodecode/templates/base/base.html:303
3645 msgid "All public gists"
3646 msgstr ""
3647
3648 #: rhodecode/templates/base/base.html:305
3649 msgid "My public gists"
3650 msgstr ""
3651
3652 #: rhodecode/templates/base/base.html:306
3653 msgid "My private gists"
3654 msgstr ""
3655
3656 #: rhodecode/templates/base/base.html:311
3374 3657 #, fuzzy
3375 3658 msgid "Search in repositories"
3376 3659 msgstr "Rechercher dans tous les dépôts"
3377 3660
3378 #: rhodecode/templates/base/perms_summary.html:8
3661 #: rhodecode/templates/base/default_perms_box.html:14
3662 msgid "Inherit default permissions"
3663 msgstr "Utiliser les permissions par défaut"
3664
3665 #: rhodecode/templates/base/default_perms_box.html:18
3666 #, fuzzy, python-format
3667 msgid ""
3668 "Select to inherit permissions from %s settings. With this selected below "
3669 "options does not apply."
3670 msgstr ""
3671 "Cochez pour utiliser les permissions des les réglages %s. Si cette option"
3672 " est activée, les réglages ci-dessous n’auront pas d’effet."
3673
3674 #: rhodecode/templates/base/default_perms_box.html:26
3675 msgid "Create repositories"
3676 msgstr "Création de dépôts"
3677
3678 #: rhodecode/templates/base/default_perms_box.html:30
3679 msgid "Select this option to allow repository creation for this user"
3680 msgstr ""
3681
3682 #: rhodecode/templates/base/default_perms_box.html:35
3683 #, fuzzy
3684 msgid "Create user groups"
3685 msgstr "[a créé] le groupe d’utilisateurs"
3686
3687 #: rhodecode/templates/base/default_perms_box.html:39
3688 msgid "Select this option to allow user group creation for this user"
3689 msgstr ""
3690
3691 #: rhodecode/templates/base/default_perms_box.html:44
3692 msgid "Fork repositories"
3693 msgstr "Forker les dépôts"
3694
3695 #: rhodecode/templates/base/default_perms_box.html:48
3696 msgid "Select this option to allow repository forking for this user"
3697 msgstr ""
3698
3699 #: rhodecode/templates/base/perms_summary.html:11
3379 3700 #, fuzzy
3380 3701 msgid "No permissions defined yet"
3381 3702 msgstr "Copier les permissions"
3382 3703
3383 #: rhodecode/templates/base/perms_summary.html:15
3704 #: rhodecode/templates/base/perms_summary.html:19
3705 #: rhodecode/templates/base/perms_summary.html:38
3384 3706 msgid "Permission"
3385 3707 msgstr "Permission"
3386 3708
3387 #: rhodecode/templates/base/perms_summary.html:16
3709 #: rhodecode/templates/base/perms_summary.html:20
3710 #: rhodecode/templates/base/perms_summary.html:39
3388 3711 msgid "Edit Permission"
3389 3712 msgstr "Éditer"
3390 3713
@@ -3394,7 +3717,7 b' msgid "Add another comment"'
3394 3717 msgstr "Nouveau commentaire"
3395 3718
3396 3719 #: rhodecode/templates/base/root.html:44
3397 #: rhodecode/templates/data_table/_dt_elements.html:140
3720 #: rhodecode/templates/data_table/_dt_elements.html:147
3398 3721 msgid "Stop following this repository"
3399 3722 msgstr "Arrêter de suivre ce dépôt"
3400 3723
@@ -3411,7 +3734,7 b' msgid "members"'
3411 3734 msgstr "Membres"
3412 3735
3413 3736 #: rhodecode/templates/base/root.html:48
3414 #: rhodecode/templates/pullrequests/pullrequest.html:181
3737 #: rhodecode/templates/pullrequests/pullrequest.html:203
3415 3738 #, fuzzy
3416 3739 msgid "Loading ..."
3417 3740 msgstr "Chargement…"
@@ -3427,7 +3750,7 b' msgid "No matching files"'
3427 3750 msgstr "Aucun fichier ne correspond"
3428 3751
3429 3752 #: rhodecode/templates/base/root.html:51
3430 #: rhodecode/templates/changelog/changelog.html:36
3753 #: rhodecode/templates/changelog/changelog.html:45
3431 3754 msgid "Open new pull request"
3432 3755 msgstr "Nouvelle requête de pull"
3433 3756
@@ -3461,31 +3784,50 b' msgstr "Diff de fichier"'
3461 3784 msgid "Expand diff"
3462 3785 msgstr "Diff brut"
3463 3786
3787 #: rhodecode/templates/base/root.html:58
3788 #, fuzzy
3789 msgid "Failed to remoke permission"
3790 msgstr "Échec de suppression de l’utilisateur"
3791
3464 3792 #: rhodecode/templates/bookmarks/bookmarks.html:5
3465 3793 #, python-format
3466 3794 msgid "%s Bookmarks"
3467 3795 msgstr "Signets de %s"
3468 3796
3469 #: rhodecode/templates/bookmarks/bookmarks.html:37
3797 #: rhodecode/templates/bookmarks/bookmarks.html:26
3798 #, fuzzy
3799 msgid "Compare bookmarks"
3800 msgstr "Comparer le fork"
3801
3802 #: rhodecode/templates/bookmarks/bookmarks.html:51
3470 3803 #: rhodecode/templates/bookmarks/bookmarks_data.html:8
3471 3804 #: rhodecode/templates/branches/branches.html:50
3472 3805 #: rhodecode/templates/branches/branches_data.html:8
3473 #: rhodecode/templates/shortlog/shortlog_data.html:8
3806 #: rhodecode/templates/changelog/changelog_summary_data.html:8
3474 3807 #: rhodecode/templates/tags/tags.html:51
3475 3808 #: rhodecode/templates/tags/tags_data.html:8
3476 3809 msgid "Author"
3477 3810 msgstr "Auteur"
3478 3811
3479 #: rhodecode/templates/bookmarks/bookmarks.html:38
3812 #: rhodecode/templates/bookmarks/bookmarks.html:52
3480 3813 #: rhodecode/templates/bookmarks/bookmarks_data.html:9
3481 3814 #: rhodecode/templates/branches/branches.html:51
3482 3815 #: rhodecode/templates/branches/branches_data.html:9
3483 #: rhodecode/templates/shortlog/shortlog_data.html:5
3816 #: rhodecode/templates/changelog/changelog_summary_data.html:5
3484 3817 #: rhodecode/templates/tags/tags.html:52
3485 3818 #: rhodecode/templates/tags/tags_data.html:9
3486 3819 msgid "Revision"
3487 3820 msgstr "Révision"
3488 3821
3822 #: rhodecode/templates/bookmarks/bookmarks.html:54
3823 #: rhodecode/templates/bookmarks/bookmarks_data.html:10
3824 #: rhodecode/templates/branches/branches.html:53
3825 #: rhodecode/templates/branches/branches_data.html:10
3826 #: rhodecode/templates/tags/tags.html:54
3827 #: rhodecode/templates/tags/tags_data.html:10
3828 msgid "Compare"
3829 msgstr "Comparer"
3830
3489 3831 #: rhodecode/templates/branches/branches.html:5
3490 3832 #, python-format
3491 3833 msgid "%s Branches"
@@ -3495,68 +3837,71 b' msgstr "Branches de %s"'
3495 3837 msgid "Compare branches"
3496 3838 msgstr "Comparer les branches"
3497 3839
3498 #: rhodecode/templates/branches/branches.html:53
3499 #: rhodecode/templates/branches/branches_data.html:10
3500 #: rhodecode/templates/tags/tags.html:54
3501 #: rhodecode/templates/tags/tags_data.html:10
3502 msgid "Compare"
3503 msgstr "Comparer"
3504
3505 3840 #: rhodecode/templates/changelog/changelog.html:6
3506 3841 #, python-format
3507 3842 msgid "%s Changelog"
3508 3843 msgstr "Historique de %s"
3509 3844
3510 #: rhodecode/templates/changelog/changelog.html:11
3845 #: rhodecode/templates/changelog/changelog.html:19
3511 3846 #, python-format
3512 3847 msgid "showing %d out of %d revision"
3513 3848 msgid_plural "showing %d out of %d revisions"
3514 3849 msgstr[0] "Affichage de %d révision sur %d"
3515 3850 msgstr[1] "Affichage de %d révisions sur %d"
3516 3851
3517 #: rhodecode/templates/changelog/changelog.html:30
3852 #: rhodecode/templates/changelog/changelog.html:39
3518 3853 #, fuzzy
3519 3854 msgid "Clear selection"
3520 3855 msgstr "Réglages de recherche"
3521 3856
3522 #: rhodecode/templates/changelog/changelog.html:33
3857 #: rhodecode/templates/changelog/changelog.html:42
3523 3858 #: rhodecode/templates/forks/forks_data.html:19
3524 3859 #, fuzzy, python-format
3525 3860 msgid "Compare fork with %s"
3526 3861 msgstr "Comparer le fork avec %s"
3527 3862
3528 #: rhodecode/templates/changelog/changelog.html:33
3863 #: rhodecode/templates/changelog/changelog.html:42
3529 3864 #, fuzzy
3530 3865 msgid "Compare fork with parent"
3531 3866 msgstr "Comparer le fork avec %s"
3532 3867
3533 #: rhodecode/templates/changelog/changelog.html:76
3534 #: rhodecode/templates/summary/summary.html:404
3868 #: rhodecode/templates/changelog/changelog.html:78
3869 #: rhodecode/templates/changelog/changelog_summary_data.html:28
3870 #, python-format
3871 msgid "Click to open associated pull request #%s"
3872 msgstr "Cliquez ici pour ouvrir la requête de pull associée #%s."
3873
3874 #: rhodecode/templates/changelog/changelog.html:102
3875 #: rhodecode/templates/summary/summary.html:403
3535 3876 #, fuzzy
3536 3877 msgid "Show more"
3537 3878 msgstr "montrer plus"
3538 3879
3539 #: rhodecode/templates/changelog/changelog.html:89
3880 #: rhodecode/templates/changelog/changelog.html:115
3881 #: rhodecode/templates/changelog/changelog_summary_data.html:50
3882 #: rhodecode/templates/changeset/changeset.html:107
3540 3883 #: rhodecode/templates/changeset/changeset_range.html:86
3541 3884 #, fuzzy, python-format
3542 3885 msgid "Bookmark %s"
3543 3886 msgstr "Signets %s"
3544 3887
3545 #: rhodecode/templates/changelog/changelog.html:95
3546 #: rhodecode/templates/changeset/changeset.html:111
3888 #: rhodecode/templates/changelog/changelog.html:121
3889 #: rhodecode/templates/changelog/changelog_summary_data.html:56
3890 #: rhodecode/templates/changeset/changeset.html:113
3547 3891 #: rhodecode/templates/changeset/changeset_range.html:92
3548 3892 #, fuzzy, python-format
3549 3893 msgid "Tag %s"
3550 3894 msgstr "Tags %s"
3551 3895
3552 #: rhodecode/templates/changelog/changelog.html:100
3553 #: rhodecode/templates/changeset/changeset.html:106
3554 #: rhodecode/templates/changeset/changeset_range.html:80
3896 #: rhodecode/templates/changelog/changelog.html:126
3897 #: rhodecode/templates/changelog/changelog_summary_data.html:61
3898 #: rhodecode/templates/changeset/changeset.html:117
3899 #: rhodecode/templates/changeset/changeset_range.html:96
3555 3900 #, fuzzy, python-format
3556 3901 msgid "Branch %s"
3557 3902 msgstr "Branches %s"
3558 3903
3559 #: rhodecode/templates/changelog/changelog.html:258
3904 #: rhodecode/templates/changelog/changelog.html:286
3560 3905 msgid "There are no changes yet"
3561 3906 msgstr "Il n’y a aucun changement pour le moment"
3562 3907
@@ -3588,6 +3933,40 b' msgstr "Ajout\xc3\xa9s"'
3588 3933 msgid "Affected %s files"
3589 3934 msgstr "%s fichiers affectés"
3590 3935
3936 #: rhodecode/templates/changelog/changelog_summary_data.html:6
3937 #: rhodecode/templates/files/files_add.html:75
3938 #: rhodecode/templates/files/files_edit.html:61
3939 #, fuzzy
3940 msgid "Commit message"
3941 msgstr "Message de commit"
3942
3943 #: rhodecode/templates/changelog/changelog_summary_data.html:7
3944 #, fuzzy
3945 msgid "Age"
3946 msgstr "Âge"
3947
3948 #: rhodecode/templates/changelog/changelog_summary_data.html:9
3949 msgid "Refs"
3950 msgstr ""
3951
3952 #: rhodecode/templates/changelog/changelog_summary_data.html:86
3953 msgid "Add or upload files directly via RhodeCode"
3954 msgstr "Ajouter ou téléverser des fichiers directement via RhodeCode…"
3955
3956 #: rhodecode/templates/changelog/changelog_summary_data.html:89
3957 #: rhodecode/templates/files/files_add.html:38
3958 #: rhodecode/templates/files/files_browser.html:31
3959 msgid "Add new file"
3960 msgstr "Ajouter un nouveau fichier"
3961
3962 #: rhodecode/templates/changelog/changelog_summary_data.html:95
3963 msgid "Push new repo"
3964 msgstr "Pusher le nouveau dépôt"
3965
3966 #: rhodecode/templates/changelog/changelog_summary_data.html:103
3967 msgid "Existing repository?"
3968 msgstr "Le dépôt existe déjà ?"
3969
3591 3970 #: rhodecode/templates/changeset/changeset.html:6
3592 3971 #, python-format
3593 3972 msgid "%s Changeset"
@@ -3609,7 +3988,7 b' msgid "Changeset status"'
3609 3988 msgstr "Statut du changeset"
3610 3989
3611 3990 #: rhodecode/templates/changeset/changeset.html:67
3612 #: rhodecode/templates/changeset/diff_block.html:23
3991 #: rhodecode/templates/changeset/diff_block.html:22
3613 3992 #, fuzzy
3614 3993 msgid "Raw diff"
3615 3994 msgstr "Diff brut"
@@ -3620,13 +3999,13 b' msgid "Patch diff"'
3620 3999 msgstr "Diff brut"
3621 4000
3622 4001 #: rhodecode/templates/changeset/changeset.html:69
3623 #: rhodecode/templates/changeset/diff_block.html:24
4002 #: rhodecode/templates/changeset/diff_block.html:23
3624 4003 #, fuzzy
3625 4004 msgid "Download diff"
3626 4005 msgstr "Télécharger le diff"
3627 4006
3628 4007 #: rhodecode/templates/changeset/changeset.html:73
3629 #: rhodecode/templates/changeset/changeset_file_comment.html:97
4008 #: rhodecode/templates/changeset/changeset_file_comment.html:103
3630 4009 #, python-format
3631 4010 msgid "%d comment"
3632 4011 msgid_plural "%d comments"
@@ -3634,7 +4013,7 b' msgstr[0] "%d commentaire"'
3634 4013 msgstr[1] "%d commentaires"
3635 4014
3636 4015 #: rhodecode/templates/changeset/changeset.html:73
3637 #: rhodecode/templates/changeset/changeset_file_comment.html:97
4016 #: rhodecode/templates/changeset/changeset_file_comment.html:103
3638 4017 #, python-format
3639 4018 msgid "(%d inline)"
3640 4019 msgid_plural "(%d inline)"
@@ -3642,11 +4021,11 b' msgstr[0] "(et %d en ligne)"'
3642 4021 msgstr[1] "(et %d en ligne)"
3643 4022
3644 4023 #: rhodecode/templates/changeset/changeset.html:103
3645 #: rhodecode/templates/changeset/changeset_range.html:77
4024 #: rhodecode/templates/changeset/changeset_range.html:82
3646 4025 msgid "merge"
3647 4026 msgstr "Fusion"
3648 4027
3649 #: rhodecode/templates/changeset/changeset.html:119
4028 #: rhodecode/templates/changeset/changeset.html:126
3650 4029 #: rhodecode/templates/compare/compare_diff.html:40
3651 4030 #: rhodecode/templates/pullrequests/pullrequest_show.html:113
3652 4031 #, fuzzy, python-format
@@ -3655,7 +4034,7 b' msgid_plural "%s files changed"'
3655 4034 msgstr[0] "%s fichié modifié"
3656 4035 msgstr[1] "%s fichié modifié"
3657 4036
3658 #: rhodecode/templates/changeset/changeset.html:121
4037 #: rhodecode/templates/changeset/changeset.html:128
3659 4038 #: rhodecode/templates/compare/compare_diff.html:42
3660 4039 #: rhodecode/templates/pullrequests/pullrequest_show.html:115
3661 4040 #, fuzzy, python-format
@@ -3664,15 +4043,15 b' msgid_plural "%s files changed with %s i'
3664 4043 msgstr[0] "%s fichiers affectés avec %s insertions et %s suppressions"
3665 4044 msgstr[1] "%s fichiers affectés avec %s insertions et %s suppressions"
3666 4045
3667 #: rhodecode/templates/changeset/changeset.html:134
3668 #: rhodecode/templates/changeset/changeset.html:146
4046 #: rhodecode/templates/changeset/changeset.html:141
4047 #: rhodecode/templates/changeset/changeset.html:153
3669 4048 #: rhodecode/templates/pullrequests/pullrequest_show.html:131
3670 4049 #: rhodecode/templates/pullrequests/pullrequest_show.html:195
3671 4050 msgid "Showing a huge diff might take some time and resources"
3672 4051 msgstr ""
3673 4052
3674 #: rhodecode/templates/changeset/changeset.html:134
3675 #: rhodecode/templates/changeset/changeset.html:146
4053 #: rhodecode/templates/changeset/changeset.html:141
4054 #: rhodecode/templates/changeset/changeset.html:153
3676 4055 #: rhodecode/templates/compare/compare_diff.html:58
3677 4056 #: rhodecode/templates/compare/compare_diff.html:69
3678 4057 #: rhodecode/templates/pullrequests/pullrequest_show.html:131
@@ -3691,57 +4070,71 b' msgstr "Requ\xc3\xaates de pull %s"'
3691 4070 msgid "Comment on pull request #%s"
3692 4071 msgstr "[a commenté] la requête de pull pour %s"
3693 4072
3694 #: rhodecode/templates/changeset/changeset_file_comment.html:57
4073 #: rhodecode/templates/changeset/changeset_file_comment.html:55
3695 4074 msgid "Submitting..."
3696 4075 msgstr "Envoi…"
3697 4076
3698 #: rhodecode/templates/changeset/changeset_file_comment.html:60
4077 #: rhodecode/templates/changeset/changeset_file_comment.html:58
3699 4078 msgid "Commenting on line {1}."
3700 4079 msgstr "Commentaire sur la ligne {1}."
3701 4080
3702 #: rhodecode/templates/changeset/changeset_file_comment.html:61
3703 #: rhodecode/templates/changeset/changeset_file_comment.html:139
4081 #: rhodecode/templates/changeset/changeset_file_comment.html:59
4082 #: rhodecode/templates/changeset/changeset_file_comment.html:145
3704 4083 #, python-format
3705 4084 msgid "Comments parsed using %s syntax with %s support."
3706 4085 msgstr ""
3707 4086 "Les commentaires sont analysés avec la syntaxe %s, avec le support de la "
3708 4087 "commande %s."
3709 4088
3710 #: rhodecode/templates/changeset/changeset_file_comment.html:63
3711 #: rhodecode/templates/changeset/changeset_file_comment.html:141
4089 #: rhodecode/templates/changeset/changeset_file_comment.html:61
4090 #: rhodecode/templates/changeset/changeset_file_comment.html:147
3712 4091 msgid "Use @username inside this text to send notification to this RhodeCode user"
3713 4092 msgstr ""
3714 4093 "Utilisez @nomutilisateur dans ce texte pour envoyer une notification à "
3715 4094 "l’utilisateur RhodeCode en question."
3716 4095
3717 #: rhodecode/templates/changeset/changeset_file_comment.html:74
3718 #: rhodecode/templates/changeset/changeset_file_comment.html:161
4096 #: rhodecode/templates/changeset/changeset_file_comment.html:65
4097 #: rhodecode/templates/changeset/changeset_file_comment.html:152
4098 #, fuzzy
4099 msgid "Preview"
4100 msgstr "%d relecteur"
4101
4102 #: rhodecode/templates/changeset/changeset_file_comment.html:72
4103 #: rhodecode/templates/changeset/changeset_file_comment.html:170
4104 #, fuzzy
4105 msgid "Comment preview"
4106 msgstr "vue de comparaison"
4107
4108 #: rhodecode/templates/changeset/changeset_file_comment.html:80
4109 #: rhodecode/templates/changeset/changeset_file_comment.html:177
4110 #: rhodecode/templates/email_templates/changeset_comment.html:16
4111 #: rhodecode/templates/email_templates/pull_request_comment.html:16
3719 4112 msgid "Comment"
3720 4113 msgstr "Commentaire"
3721 4114
3722 #: rhodecode/templates/changeset/changeset_file_comment.html:75
4115 #: rhodecode/templates/changeset/changeset_file_comment.html:81
3723 4116 #, fuzzy
3724 4117 msgid "Cancel"
3725 4118 msgstr "Modifiés"
3726 4119
3727 #: rhodecode/templates/changeset/changeset_file_comment.html:82
4120 #: rhodecode/templates/changeset/changeset_file_comment.html:88
3728 4121 msgid "You need to be logged in to comment."
3729 4122 msgstr "Vous devez être connecté pour poster des commentaires."
3730 4123
3731 #: rhodecode/templates/changeset/changeset_file_comment.html:82
4124 #: rhodecode/templates/changeset/changeset_file_comment.html:88
3732 4125 msgid "Login now"
3733 4126 msgstr "Se connecter maintenant"
3734 4127
3735 #: rhodecode/templates/changeset/changeset_file_comment.html:86
4128 #: rhodecode/templates/changeset/changeset_file_comment.html:92
3736 4129 msgid "Hide"
3737 4130 msgstr "Masquer"
3738 4131
3739 #: rhodecode/templates/changeset/changeset_file_comment.html:143
4132 #: rhodecode/templates/changeset/changeset_file_comment.html:149
3740 4133 #, fuzzy
3741 4134 msgid "Change status"
3742 4135 msgstr "Modifier le statut"
3743 4136
3744 #: rhodecode/templates/changeset/changeset_file_comment.html:163
4137 #: rhodecode/templates/changeset/changeset_file_comment.html:179
3745 4138 msgid "Comment and close"
3746 4139 msgstr "Commenter et fermer"
3747 4140
@@ -3754,20 +4147,20 b' msgstr "Changesets de %s"'
3754 4147 msgid "Files affected"
3755 4148 msgstr "Fichiers affectés"
3756 4149
3757 #: rhodecode/templates/changeset/diff_block.html:22
4150 #: rhodecode/templates/changeset/diff_block.html:21
3758 4151 msgid "Show full diff for this file"
3759 4152 msgstr ""
3760 4153
3761 #: rhodecode/templates/changeset/diff_block.html:30
4154 #: rhodecode/templates/changeset/diff_block.html:29
3762 4155 #, fuzzy
3763 4156 msgid "Show inline comments"
3764 4157 msgstr "Afficher les commentaires"
3765 4158
3766 #: rhodecode/templates/changeset/diff_block.html:55
4159 #: rhodecode/templates/changeset/diff_block.html:53
3767 4160 msgid "Show file at latest version in this repo"
3768 4161 msgstr ""
3769 4162
3770 #: rhodecode/templates/changeset/diff_block.html:56
4163 #: rhodecode/templates/changeset/diff_block.html:54
3771 4164 msgid "Show file at initial version in this repo"
3772 4165 msgstr ""
3773 4166
@@ -3845,29 +4238,25 b' msgstr "S\xe2\x80\x99abonner au flux ATOM de %s"'
3845 4238 msgid "Confirm to delete this repository: %s"
3846 4239 msgstr "Voulez-vous vraiment supprimer le dépôt %s ?"
3847 4240
3848 #: rhodecode/templates/data_table/_dt_elements.html:131
4241 #: rhodecode/templates/data_table/_dt_elements.html:137
3849 4242 #, python-format
3850 4243 msgid "Confirm to delete this user: %s"
3851 4244 msgstr "Voulez-vous vraiment supprimer l’utilisateur « %s » ?"
3852 4245
3853 #: rhodecode/templates/email_templates/changeset_comment.html:9
3854 #: rhodecode/templates/email_templates/pull_request_comment.html:15
3855 #, fuzzy
3856 msgid "New status"
3857 msgstr "Modifier le statut"
3858
3859 #: rhodecode/templates/email_templates/changeset_comment.html:11
3860 #: rhodecode/templates/email_templates/pull_request_comment.html:9
3861 msgid "View this comment here"
3862 msgstr ""
4246 #: rhodecode/templates/email_templates/changeset_comment.html:4
4247 #: rhodecode/templates/email_templates/pull_request.html:4
4248 #: rhodecode/templates/email_templates/pull_request_comment.html:4
4249 #, fuzzy
4250 msgid "URL"
4251 msgstr "Journal"
4252
4253 #: rhodecode/templates/email_templates/changeset_comment.html:6
4254 #, fuzzy, python-format
4255 msgid "%s commented on a %s changeset."
4256 msgstr "%s a posté un commentaire sur le commit %s"
3863 4257
3864 4258 #: rhodecode/templates/email_templates/changeset_comment.html:14
3865 #, fuzzy
3866 msgid "Repo"
3867 msgstr "Mes dépôts"
3868
3869 #: rhodecode/templates/email_templates/changeset_comment.html:16
3870 msgid "desc"
4259 msgid "The changeset status was changed to"
3871 4260 msgstr ""
3872 4261
3873 4262 #: rhodecode/templates/email_templates/main.html:8
@@ -3888,51 +4277,40 b' msgstr ""'
3888 4277 msgid "You can generate it by clicking following URL"
3889 4278 msgstr ""
3890 4279
3891 #: rhodecode/templates/email_templates/password_reset.html:11
3892 msgid "If you did not request new password please ignore this email."
4280 #: rhodecode/templates/email_templates/password_reset.html:10
4281 msgid "Please ignore this email if you did not request a new password ."
3893 4282 msgstr ""
3894 4283
3895 #: rhodecode/templates/email_templates/pull_request.html:4
3896 #, python-format
3897 msgid ""
3898 "User %s opened pull request for repository %s and wants you to review "
3899 "changes."
3900 msgstr ""
3901
3902 #: rhodecode/templates/email_templates/pull_request.html:5
3903 #, fuzzy
3904 msgid "View this pull request here"
3905 msgstr "Ajouter un relecteur à cette requête de pull."
3906
3907 4284 #: rhodecode/templates/email_templates/pull_request.html:6
3908 #, fuzzy
3909 msgid "title"
4285 #, python-format
4286 msgid ""
4287 "%s opened a pull request for repository %s and wants you to review "
4288 "changes."
4289 msgstr ""
4290
4291 #: rhodecode/templates/email_templates/pull_request.html:8
4292 #: rhodecode/templates/pullrequests/pullrequest.html:34
4293 #: rhodecode/templates/pullrequests/pullrequest_data.html:14
4294 #: rhodecode/templates/pullrequests/pullrequest_show.html:25
4295 msgid "Title"
3910 4296 msgstr "Titre"
3911 4297
3912 #: rhodecode/templates/email_templates/pull_request.html:7
3913 msgid "description"
3914 msgstr "Description"
3915
3916 #: rhodecode/templates/email_templates/pull_request.html:12
3917 msgid "revisions for reviewing"
3918 msgstr ""
3919
3920 #: rhodecode/templates/email_templates/pull_request_comment.html:3
4298 #: rhodecode/templates/email_templates/pull_request_comment.html:6
3921 4299 #, fuzzy, python-format
3922 msgid "Pull request #%s for repository %s"
3923 msgstr "Requête de pull nº%s ouverte le %s"
3924
3925 #: rhodecode/templates/email_templates/pull_request_comment.html:13
3926 #, fuzzy
3927 msgid "Closing pull request with status"
4300 msgid "%s commented on pull request \"%s\""
4301 msgstr "%s [a commenté] la requête de pull pour %s"
4302
4303 #: rhodecode/templates/email_templates/pull_request_comment.html:10
4304 #, fuzzy
4305 msgid "Pull request was closed with status"
3928 4306 msgstr "Statut de la requête de pull"
3929 4307
3930 #: rhodecode/templates/email_templates/registration.html:4
3931 #, fuzzy
3932 msgid "A new user have registered in RhodeCode"
3933 msgstr "Vous vous êtes inscrits avec succès à RhodeCode"
3934
3935 #: rhodecode/templates/email_templates/registration.html:9
4308 #: rhodecode/templates/email_templates/pull_request_comment.html:12
4309 #, fuzzy
4310 msgid "Pull request changed status"
4311 msgstr "Statut de la requête de pull"
4312
4313 #: rhodecode/templates/email_templates/registration.html:6
3936 4314 msgid "View this user here"
3937 4315 msgstr ""
3938 4316
@@ -3959,7 +4337,6 b' msgstr "Fichiers de %s"'
3959 4337 #: rhodecode/templates/files/files.html:30
3960 4338 #: rhodecode/templates/files/files_add.html:31
3961 4339 #: rhodecode/templates/files/files_edit.html:31
3962 #: rhodecode/templates/shortlog/shortlog_data.html:9
3963 4340 #, fuzzy
3964 4341 msgid "Branch"
3965 4342 msgstr "Branche"
@@ -3974,12 +4351,6 b' msgstr "Fichiers de %s"'
3974 4351 msgid "Add file"
3975 4352 msgstr "Ajouter un fichier"
3976 4353
3977 #: rhodecode/templates/files/files_add.html:38
3978 #: rhodecode/templates/files/files_browser.html:31
3979 #: rhodecode/templates/shortlog/shortlog_data.html:78
3980 msgid "Add new file"
3981 msgstr "Ajouter un nouveau fichier"
3982
3983 4354 #: rhodecode/templates/files/files_add.html:43
3984 4355 msgid "File Name"
3985 4356 msgstr "Nom de fichier"
@@ -4008,13 +4379,6 b' msgstr "Emplacement"'
4008 4379 msgid "use / to separate directories"
4009 4380 msgstr "Utilisez / pour séparer les répertoires"
4010 4381
4011 #: rhodecode/templates/files/files_add.html:75
4012 #: rhodecode/templates/files/files_edit.html:61
4013 #: rhodecode/templates/shortlog/shortlog_data.html:6
4014 #, fuzzy
4015 msgid "Commit message"
4016 msgstr "Message de commit"
4017
4018 4382 #: rhodecode/templates/files/files_add.html:79
4019 4383 #: rhodecode/templates/files/files_edit.html:65
4020 4384 msgid "Commit changes"
@@ -4085,13 +4449,6 b' msgstr "\xc3\x89diter le fichier"'
4085 4449 msgid "Show annotation"
4086 4450 msgstr "Afficher les annotations"
4087 4451
4088 #: rhodecode/templates/files/files_edit.html:48
4089 #: rhodecode/templates/files/files_source.html:25
4090 #: rhodecode/templates/files/files_source.html:55
4091 #, fuzzy
4092 msgid "Show as raw"
4093 msgstr "montrer le fichier brut"
4094
4095 4452 #: rhodecode/templates/files/files_edit.html:49
4096 4453 #: rhodecode/templates/files/files_source.html:26
4097 4454 #, fuzzy
@@ -4290,37 +4647,52 b' msgstr "Flux RSS du journal public"'
4290 4647 msgid "New pull request"
4291 4648 msgstr "Nouvelle requête de pull"
4292 4649
4293 #: rhodecode/templates/pullrequests/pullrequest.html:52
4294 msgid "Detailed compare view"
4295 msgstr "Comparaison détaillée"
4296
4297 #: rhodecode/templates/pullrequests/pullrequest.html:56
4650 #: rhodecode/templates/pullrequests/pullrequest.html:25
4651 msgid "Create new pull request"
4652 msgstr "Nouvelle requête de pull"
4653
4654 #: rhodecode/templates/pullrequests/pullrequest.html:47
4655 #, fuzzy
4656 msgid "Write a short description on this pull request"
4657 msgstr "Veuillez confirmer la suppression de cette requête de pull."
4658
4659 #: rhodecode/templates/pullrequests/pullrequest.html:53
4660 #, fuzzy
4661 msgid "Changeset flow"
4662 msgstr "Changements"
4663
4664 #: rhodecode/templates/pullrequests/pullrequest.html:60
4665 #: rhodecode/templates/pullrequests/pullrequest_show.html:65
4666 #, fuzzy
4667 msgid "Origin repository"
4668 msgstr "Dépôt Git"
4669
4670 #: rhodecode/templates/pullrequests/pullrequest.html:85
4671 msgid "Send pull request"
4672 msgstr "Envoyer la requête de pull"
4673
4674 #: rhodecode/templates/pullrequests/pullrequest.html:94
4298 4675 #: rhodecode/templates/pullrequests/pullrequest_show.html:137
4299 4676 msgid "Pull request reviewers"
4300 4677 msgstr "Relecteurs de la requête de pull"
4301 4678
4302 #: rhodecode/templates/pullrequests/pullrequest.html:65
4679 #: rhodecode/templates/pullrequests/pullrequest.html:103
4303 4680 #: rhodecode/templates/pullrequests/pullrequest_show.html:149
4304 4681 msgid "owner"
4305 4682 msgstr "Propriétaire"
4306 4683
4307 #: rhodecode/templates/pullrequests/pullrequest.html:77
4684 #: rhodecode/templates/pullrequests/pullrequest.html:115
4308 4685 msgid "Add reviewer to this pull request."
4309 4686 msgstr "Ajouter un relecteur à cette requête de pull."
4310 4687
4311 #: rhodecode/templates/pullrequests/pullrequest.html:83
4312 msgid "Create new pull request"
4313 msgstr "Nouvelle requête de pull"
4314
4315 #: rhodecode/templates/pullrequests/pullrequest.html:92
4316 #: rhodecode/templates/pullrequests/pullrequest_data.html:14
4317 #: rhodecode/templates/pullrequests/pullrequest_show.html:25
4318 msgid "Title"
4319 msgstr "Titre"
4320
4321 #: rhodecode/templates/pullrequests/pullrequest.html:109
4322 msgid "Send pull request"
4323 msgstr "Envoyer la requête de pull"
4688 #: rhodecode/templates/pullrequests/pullrequest.html:129
4689 msgid "Detailed compare view"
4690 msgstr "Comparaison détaillée"
4691
4692 #: rhodecode/templates/pullrequests/pullrequest.html:150
4693 #, fuzzy
4694 msgid "Destination repository"
4695 msgstr "Éditer le dépôt"
4324 4696
4325 4697 #: rhodecode/templates/pullrequests/pullrequest_show.html:4
4326 4698 #, fuzzy, python-format
@@ -4352,11 +4724,6 b' msgstr[1] "%d relecteurs"'
4352 4724 msgid "Pull request was reviewed by all reviewers"
4353 4725 msgstr "La requête de pull a été relue par tous les relecteurs."
4354 4726
4355 #: rhodecode/templates/pullrequests/pullrequest_show.html:65
4356 #, fuzzy
4357 msgid "Origin repository"
4358 msgstr "Dépôt Git"
4359
4360 4727 #: rhodecode/templates/pullrequests/pullrequest_show.html:89
4361 4728 msgid "Created on"
4362 4729 msgstr "Créé le"
@@ -4421,38 +4788,6 b' msgstr "Les noms de fichiers"'
4421 4788 msgid "Permission denied"
4422 4789 msgstr "Permission refusée"
4423 4790
4424 #: rhodecode/templates/shortlog/shortlog.html:5
4425 #, fuzzy, python-format
4426 msgid "%s Lightweight Changelog"
4427 msgstr "%s fichié modifié"
4428
4429 #: rhodecode/templates/shortlog/shortlog.html:11
4430 #: rhodecode/templates/shortlog/shortlog.html:15
4431 msgid "Lightweight Changelog"
4432 msgstr ""
4433
4434 #: rhodecode/templates/shortlog/shortlog_data.html:7
4435 #, fuzzy
4436 msgid "Age"
4437 msgstr "Âge"
4438
4439 #: rhodecode/templates/shortlog/shortlog_data.html:20
4440 #, python-format
4441 msgid "Click to open associated pull request #%s"
4442 msgstr "Cliquez ici pour ouvrir la requête de pull associée #%s."
4443
4444 #: rhodecode/templates/shortlog/shortlog_data.html:75
4445 msgid "Add or upload files directly via RhodeCode"
4446 msgstr "Ajouter ou téléverser des fichiers directement via RhodeCode…"
4447
4448 #: rhodecode/templates/shortlog/shortlog_data.html:84
4449 msgid "Push new repo"
4450 msgstr "Pusher le nouveau dépôt"
4451
4452 #: rhodecode/templates/shortlog/shortlog_data.html:92
4453 msgid "Existing repository?"
4454 msgstr "Le dépôt existe déjà ?"
4455
4456 4791 #: rhodecode/templates/summary/summary.html:4
4457 4792 #, python-format
4458 4793 msgid "%s Summary"
@@ -4493,7 +4828,7 b' msgstr "publique"'
4493 4828 msgid "Fork of"
4494 4829 msgstr "Fork de"
4495 4830
4496 #: rhodecode/templates/summary/summary.html:96
4831 #: rhodecode/templates/summary/summary.html:97
4497 4832 #, fuzzy
4498 4833 msgid "Remote clone"
4499 4834 msgstr "Clone distant"
@@ -4520,8 +4855,8 b' msgstr "Populaires"'
4520 4855
4521 4856 #: rhodecode/templates/summary/summary.html:151
4522 4857 #: rhodecode/templates/summary/summary.html:167
4523 #: rhodecode/templates/summary/summary.html:232
4524 msgid "enable"
4858 #, fuzzy
4859 msgid "Enable"
4525 4860 msgstr "Activer"
4526 4861
4527 4862 #: rhodecode/templates/summary/summary.html:159
@@ -4536,7 +4871,7 b' msgstr "Il n\xe2\x80\x99y a pas encore de t\xc3\xa9l\xc3\xa9chargements propos\xc3\xa9s."'
4536 4871 msgid "Downloads are disabled for this repository"
4537 4872 msgstr "Les téléchargements sont désactivés pour ce dépôt."
4538 4873
4539 #: rhodecode/templates/summary/summary.html:171
4874 #: rhodecode/templates/summary/summary.html:170
4540 4875 msgid "Download as zip"
4541 4876 msgstr "Télécharger en ZIP"
4542 4877
@@ -4563,6 +4898,10 b' msgstr "Flux RSS"'
4563 4898 msgid "Commit activity by day / author"
4564 4899 msgstr "Activité de commit par jour et par auteur"
4565 4900
4901 #: rhodecode/templates/summary/summary.html:232
4902 msgid "enable"
4903 msgstr "Activer"
4904
4566 4905 #: rhodecode/templates/summary/summary.html:235
4567 4906 msgid "Stats gathered: "
4568 4907 msgstr "Statistiques obtenues :"
@@ -4577,52 +4916,48 b' msgid "Quick start"'
4577 4916 msgstr "Démarrage rapide"
4578 4917
4579 4918 #: rhodecode/templates/summary/summary.html:272
4580 #, python-format
4581 msgid "Readme file at revision '%s'"
4919 #, fuzzy, python-format
4920 msgid "Readme file from revision %s"
4582 4921 msgstr "Fichier « Lisez-moi » à la révision « %s »"
4583 4922
4584 #: rhodecode/templates/summary/summary.html:275
4585 msgid "Permalink to this readme"
4586 msgstr "Lien permanent vers ce fichier « Lisez-moi »"
4587
4588 #: rhodecode/templates/summary/summary.html:333
4923 #: rhodecode/templates/summary/summary.html:332
4589 4924 #, python-format
4590 4925 msgid "Download %s as %s"
4591 4926 msgstr "Télécharger %s comme archive %s"
4592 4927
4593 #: rhodecode/templates/summary/summary.html:380
4928 #: rhodecode/templates/summary/summary.html:379
4594 4929 msgid "files"
4595 4930 msgstr "Fichiers"
4596 4931
4597 #: rhodecode/templates/summary/summary.html:690
4932 #: rhodecode/templates/summary/summary.html:689
4598 4933 msgid "commits"
4599 4934 msgstr "commits"
4600 4935
4601 #: rhodecode/templates/summary/summary.html:691
4936 #: rhodecode/templates/summary/summary.html:690
4602 4937 msgid "files added"
4603 4938 msgstr "fichiers ajoutés"
4604 4939
4605 #: rhodecode/templates/summary/summary.html:692
4940 #: rhodecode/templates/summary/summary.html:691
4606 4941 msgid "files changed"
4607 4942 msgstr "fichiers modifiés"
4608 4943
4609 #: rhodecode/templates/summary/summary.html:693
4944 #: rhodecode/templates/summary/summary.html:692
4610 4945 msgid "files removed"
4611 4946 msgstr "fichiers supprimés"
4612 4947
4613 #: rhodecode/templates/summary/summary.html:695
4948 #: rhodecode/templates/summary/summary.html:694
4614 4949 msgid "commit"
4615 4950 msgstr "commit"
4616 4951
4952 #: rhodecode/templates/summary/summary.html:695
4953 msgid "file added"
4954 msgstr "fichier ajouté"
4955
4617 4956 #: rhodecode/templates/summary/summary.html:696
4618 msgid "file added"
4619 msgstr "fichier ajouté"
4957 msgid "file changed"
4958 msgstr "fichié modifié"
4620 4959
4621 4960 #: rhodecode/templates/summary/summary.html:697
4622 msgid "file changed"
4623 msgstr "fichié modifié"
4624
4625 #: rhodecode/templates/summary/summary.html:698
4626 4961 msgid "file removed"
4627 4962 msgstr "fichier supprimé"
4628 4963
@@ -2,29 +2,66 b''
2 2 # to create new language #
3 3 ##########################
4 4
5 #this needs to be done on source codes, preferable default/stable branches
6
7 python setup.py extract_messages <- get messages from project
8 python setup.py init_catalog -l pl <- create a language directory for <pl> lang
9 #edit the new po file with poedit or any other editor
10 msgfmt -f -c <updated_file.po> <- check format and errors
11 python setup.py compile_catalog -l pl <- create translation files
5 Translations are available on transifex under::
6
7 https://www.transifex.com/projects/p/RhodeCode/
8
9 Preferred method is to register on transifex and request new language translation.
12 10
13 #############
14 # to update #
15 #############
11 manual creation of new language
12 +++++++++++++++++++++++++++++++
13
14 Dowload sources of RhodeCode. Run::
16 15
17 python setup.py extract_messages <- get messages from project
18 python setup.py update_catalog -l pl<- to update the translations
19 #edit the new updated po file with poedit
20 msgfmt -f -c <updated_file.po> <- check format and errors
21 python setup.py compile_catalog -l pl <- create translation files
16 python setup.py develop
17
18 To prepare the enviroment
22 19
23 20
24 ###################
25 # change language #
26 ###################
21 Make sure all translation strings are extracted by running::
22
23 python setup.py extract_messages
24
25 Create new language by executing following command::
26 python setup.py init_catalog -l <new_language_code>
27
28 This creates a new language under directory rhodecode/i18n/<new_language_code>
29 Be sure to update transifex mapping under .tx/config for new language
30
31 Edit the new PO file located in LC_MESSAGES directory with poedit or your
32 favorite PO files editor. Do translations and at the end verify the translation
33 file for any errors. This can be done by executing::
34
35 msgfmt -f -c rhodecode/i18n/<new_language_code>/LC_MESSAGES/<updated_file.po>
36
37 finally compile the translations::
38
39 python setup.py compile_catalog -l <new_language_code>
40
41 ##########################
42 # to update translations #
43 ##########################
27 44
28 `lang=pl`
45 Fetch latest version of strings for translation by running::
46
47 python setup.py extract_messages
48
49 Update PO file by doing::
50
51 python setup.py update_catalog -l <new_language_code><- to update the translations
52
53 Edit the new updated po file. Repeat all steps after `init_catalog` step from
54 new translation instructions
55
29 56
30 in the .ini file No newline at end of file
57 ########################
58 # testing translations #
59 ########################
60
61 Edit test.ini file and set lang attribute to::
62
63 lang=<new_language_code>
64
65 Run RhodeCode tests by executing::
66
67 nosetests
1 NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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/vcs_test_git.tar.gz to rhodecode/tests/fixtures/vcs_test_git.tar.gz
1 NO CONTENT: file renamed from rhodecode/tests/vcs_test_hg.tar.gz to rhodecode/tests/fixtures/vcs_test_hg.tar.gz, binary diff hidden
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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_libs.py to rhodecode/tests/other/test_libs.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/tests/test_validators.py to rhodecode/tests/other/test_validators.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from rhodecode/tests/scripts/test_vcs_operations.py to rhodecode/tests/other/test_vcs_operations.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
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