Show More
@@ -0,0 +1,29 b'' | |||||
|
1 | #!/usr/bin/env python | |||
|
2 | import os | |||
|
3 | import sys | |||
|
4 | ||||
|
5 | try: | |||
|
6 | import rhodecode | |||
|
7 | from rhodecode.lib.hooks import handle_git_post_receive | |||
|
8 | except ImportError: | |||
|
9 | rhodecode = None | |||
|
10 | ||||
|
11 | ||||
|
12 | def main(): | |||
|
13 | if rhodecode is None: | |||
|
14 | # exit with success if we cannot import rhodecode !! | |||
|
15 | # this allows simply push to this repo even without | |||
|
16 | # rhodecode | |||
|
17 | sys.exit(0) | |||
|
18 | ||||
|
19 | repo_path = os.path.abspath('.') | |||
|
20 | push_data = sys.stdin.read().strip().split(' ') | |||
|
21 | # os.environ is modified here by a subprocess call that | |||
|
22 | # runs git and later git executes this hook. | |||
|
23 | # Environ get's some additional info from rhodecode system | |||
|
24 | # like IP or username from basic-auth | |||
|
25 | handle_git_post_receive(repo_path, push_data, os.environ) | |||
|
26 | sys.exit(0) | |||
|
27 | ||||
|
28 | if __name__ == '__main__': | |||
|
29 | main() |
@@ -16,6 +16,8 b' news' | |||||
16 | - new codereview system |
|
16 | - new codereview system | |
17 | - email map, allowing users to have multiple email addresses mapped into |
|
17 | - email map, allowing users to have multiple email addresses mapped into | |
18 | their accounts |
|
18 | their accounts | |
|
19 | - improved git-hook system. Now all actions for git are logged into journal | |||
|
20 | including pushed revisions, user and IP address | |||
19 | - changed setup-app into setup-rhodecode and added default options to it. |
|
21 | - changed setup-app into setup-rhodecode and added default options to it. | |
20 | - new git repos are created as bare now by default |
|
22 | - new git repos are created as bare now by default | |
21 | - #464 added links to groups in permission box |
|
23 | - #464 added links to groups in permission box | |
@@ -25,6 +27,10 b' news' | |||||
25 | - rhodecode-api CLI client |
|
27 | - rhodecode-api CLI client | |
26 | - new git http protocol replaced buggy dulwich implementation. |
|
28 | - new git http protocol replaced buggy dulwich implementation. | |
27 | Now based on pygrack & gitweb |
|
29 | Now based on pygrack & gitweb | |
|
30 | - Improved RSS/ATOM feeds. Discoverable by browsers using proper headers, and | |||
|
31 | reformated based on user suggestions. Additional rss/atom feeds for user | |||
|
32 | journal | |||
|
33 | - various i18n improvements | |||
28 |
|
34 | |||
29 | fixes |
|
35 | fixes | |
30 | +++++ |
|
36 | +++++ | |
@@ -41,6 +47,8 b' fixes' | |||||
41 | commands. |
|
47 | commands. | |
42 | - fixed #413. Don't disable .git directory for bare repos on deleting |
|
48 | - fixed #413. Don't disable .git directory for bare repos on deleting | |
43 | - fixed issue #459. Changed the way of obtaining logger in reindex task. |
|
49 | - fixed issue #459. Changed the way of obtaining logger in reindex task. | |
|
50 | - fixed #453 added ID field in whoosh SCHEMA that solves the issue of | |||
|
51 | reindexing modified files | |||
44 |
|
52 | |||
45 | 1.3.6 (**2012-05-17**) |
|
53 | 1.3.6 (**2012-05-17**) | |
46 | ---------------------- |
|
54 | ---------------------- |
@@ -1,6 +1,7 b'' | |||||
1 | # Additional mappings that are not present in the pygments lexers |
|
1 | # Additional mappings that are not present in the pygments lexers | |
2 | # used for building stats |
|
2 | # used for building stats | |
3 | # format is {'ext':'Name'} eg. {'py':'Python'} |
|
3 | # format is {'ext':['Names']} eg. {'py':['Python']} note: there can be | |
|
4 | # more than one name for extension | |||
4 | # NOTE: that this will overide any mappings in LANGUAGES_EXTENSIONS_MAP |
|
5 | # NOTE: that this will overide any mappings in LANGUAGES_EXTENSIONS_MAP | |
5 | # build by pygments |
|
6 | # build by pygments | |
6 | EXTRA_MAPPINGS = {} |
|
7 | EXTRA_MAPPINGS = {} | |
@@ -39,6 +40,7 b' def _crhook(*args, **kwargs):' | |||||
39 | :param group_id: |
|
40 | :param group_id: | |
40 | :param created_by: |
|
41 | :param created_by: | |
41 | """ |
|
42 | """ | |
|
43 | ||||
42 | return 0 |
|
44 | return 0 | |
43 | CREATE_REPO_HOOK = _crhook |
|
45 | CREATE_REPO_HOOK = _crhook | |
44 |
|
46 |
@@ -54,7 +54,7 b' class MakeRcExt(BasePasterCommand):' | |||||
54 | logging.config.fileConfig(self.path_to_ini_file) |
|
54 | logging.config.fileConfig(self.path_to_ini_file) | |
55 | from pylons import config |
|
55 | from pylons import config | |
56 |
|
56 | |||
57 | def _make_file(ext_file): |
|
57 | def _make_file(ext_file, tmpl): | |
58 | bdir = os.path.split(ext_file)[0] |
|
58 | bdir = os.path.split(ext_file)[0] | |
59 | if not os.path.isdir(bdir): |
|
59 | if not os.path.isdir(bdir): | |
60 | os.makedirs(bdir) |
|
60 | os.makedirs(bdir) | |
@@ -71,11 +71,11 b' class MakeRcExt(BasePasterCommand):' | |||||
71 | msg = ('Extension file already exists, do you want ' |
|
71 | msg = ('Extension file already exists, do you want ' | |
72 | 'to overwrite it ? [y/n]') |
|
72 | 'to overwrite it ? [y/n]') | |
73 | if ask_ok(msg): |
|
73 | if ask_ok(msg): | |
74 | _make_file(ext_file) |
|
74 | _make_file(ext_file, tmpl) | |
75 | else: |
|
75 | else: | |
76 | log.info('nothing done...') |
|
76 | log.info('nothing done...') | |
77 | else: |
|
77 | else: | |
78 | _make_file(ext_file) |
|
78 | _make_file(ext_file, tmpl) | |
79 |
|
79 | |||
80 | def update_parser(self): |
|
80 | def update_parser(self): | |
81 | pass |
|
81 | pass |
@@ -341,7 +341,12 b' def make_map(config):' | |||||
341 | m.connect('api', '/api') |
|
341 | m.connect('api', '/api') | |
342 |
|
342 | |||
343 | #USER JOURNAL |
|
343 | #USER JOURNAL | |
344 |
rmap.connect('journal', '%s/journal' % ADMIN_PREFIX, |
|
344 | rmap.connect('journal', '%s/journal' % ADMIN_PREFIX, | |
|
345 | controller='journal', action='index') | |||
|
346 | rmap.connect('journal_rss', '%s/journal/rss' % ADMIN_PREFIX, | |||
|
347 | controller='journal', action='journal_rss') | |||
|
348 | rmap.connect('journal_atom', '%s/journal/atom' % ADMIN_PREFIX, | |||
|
349 | controller='journal', action='journal_atom') | |||
345 |
|
350 | |||
346 | rmap.connect('public_journal', '%s/public_journal' % ADMIN_PREFIX, |
|
351 | rmap.connect('public_journal', '%s/public_journal' % ADMIN_PREFIX, | |
347 | controller='journal', action="public_journal") |
|
352 | controller='journal', action="public_journal") |
@@ -174,7 +174,8 b' class SettingsController(BaseController)' | |||||
174 | application_form = ApplicationUiSettingsForm()() |
|
174 | application_form = ApplicationUiSettingsForm()() | |
175 | try: |
|
175 | try: | |
176 | form_result = application_form.to_python(dict(request.POST)) |
|
176 | form_result = application_form.to_python(dict(request.POST)) | |
177 |
|
177 | # fix namespaces for hooks | ||
|
178 | _f = lambda s: s.replace('.', '_') | |||
178 | try: |
|
179 | try: | |
179 |
|
180 | |||
180 | hgsettings1 = self.sa.query(RhodeCodeUi)\ |
|
181 | hgsettings1 = self.sa.query(RhodeCodeUi)\ | |
@@ -187,28 +188,28 b' class SettingsController(BaseController)' | |||||
187 |
|
188 | |||
188 | #HOOKS |
|
189 | #HOOKS | |
189 | hgsettings3 = self.sa.query(RhodeCodeUi)\ |
|
190 | hgsettings3 = self.sa.query(RhodeCodeUi)\ | |
190 |
.filter(RhodeCodeUi.ui_key == |
|
191 | .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_UPDATE)\ | |
191 | hgsettings3.ui_active = \ |
|
192 | .one() | |
192 |
|
|
193 | hgsettings3.ui_active = bool(form_result[_f('hooks_%s' % | |
|
194 | RhodeCodeUi.HOOK_UPDATE)]) | |||
193 |
|
195 | |||
194 | hgsettings4 = self.sa.query(RhodeCodeUi)\ |
|
196 | hgsettings4 = self.sa.query(RhodeCodeUi)\ | |
195 | .filter(RhodeCodeUi.ui_key == |
|
197 | .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_REPO_SIZE)\ | |
196 |
|
|
198 | .one() | |
197 |
hgsettings4.ui_active = |
|
199 | hgsettings4.ui_active = bool(form_result[_f('hooks_%s' % | |
198 | bool(form_result['hooks_changegroup_repo_size']) |
|
200 | RhodeCodeUi.HOOK_REPO_SIZE)]) | |
199 |
|
201 | |||
200 | hgsettings5 = self.sa.query(RhodeCodeUi)\ |
|
202 | hgsettings5 = self.sa.query(RhodeCodeUi)\ | |
201 | .filter(RhodeCodeUi.ui_key == |
|
203 | .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_PUSH)\ | |
202 | 'pretxnchangegroup.push_logger').one() |
|
204 | .one() | |
203 |
hgsettings5.ui_active = |
|
205 | hgsettings5.ui_active = bool(form_result[_f('hooks_%s' % | |
204 | bool(form_result['hooks_pretxnchangegroup' |
|
206 | RhodeCodeUi.HOOK_PUSH)]) | |
205 | '_push_logger']) |
|
|||
206 |
|
207 | |||
207 | hgsettings6 = self.sa.query(RhodeCodeUi)\ |
|
208 | hgsettings6 = self.sa.query(RhodeCodeUi)\ | |
208 | .filter(RhodeCodeUi.ui_key == |
|
209 | .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_PULL)\ | |
209 |
|
|
210 | .one() | |
210 |
hgsettings6.ui_active = |
|
211 | hgsettings6.ui_active = bool(form_result[_f('hooks_%s' % | |
211 | bool(form_result['hooks_preoutgoing_pull_logger']) |
|
212 | RhodeCodeUi.HOOK_PULL)]) | |
212 |
|
213 | |||
213 | self.sa.add(hgsettings1) |
|
214 | self.sa.add(hgsettings1) | |
214 | self.sa.add(hgsettings2) |
|
215 | self.sa.add(hgsettings2) |
@@ -73,7 +73,7 b' class FeedController(BaseRepoController)' | |||||
73 | def __get_desc(self, cs): |
|
73 | def __get_desc(self, cs): | |
74 | desc_msg = [] |
|
74 | desc_msg = [] | |
75 | desc_msg.append('%s %s %s:<br/>' % (cs.author, _('commited on'), |
|
75 | desc_msg.append('%s %s %s:<br/>' % (cs.author, _('commited on'), | |
76 | cs.date)) |
|
76 | h.fmt_date(cs.date))) | |
77 | desc_msg.append('<pre>') |
|
77 | desc_msg.append('<pre>') | |
78 | desc_msg.append(cs.message) |
|
78 | desc_msg.append(cs.message) | |
79 | desc_msg.append('\n') |
|
79 | desc_msg.append('\n') |
@@ -487,4 +487,4 b' class FilesController(BaseRepoController' | |||||
487 | cs = self.__get_cs_or_redirect(revision, repo_name) |
|
487 | cs = self.__get_cs_or_redirect(revision, repo_name) | |
488 | _d, _f = ScmModel().get_nodes(repo_name, cs.raw_id, f_path, |
|
488 | _d, _f = ScmModel().get_nodes(repo_name, cs.raw_id, f_path, | |
489 | flat=False) |
|
489 | flat=False) | |
490 | return _d + _f |
|
490 | return {'nodes': _d + _f} |
@@ -49,8 +49,6 b' class JournalController(BaseController):' | |||||
49 |
|
49 | |||
50 | def __before__(self): |
|
50 | def __before__(self): | |
51 | super(JournalController, self).__before__() |
|
51 | super(JournalController, self).__before__() | |
52 | self.rhodecode_user = self.rhodecode_user |
|
|||
53 | self.title = _('%s public journal %s feed') % (c.rhodecode_name, '%s') |
|
|||
54 | self.language = 'en-us' |
|
52 | self.language = 'en-us' | |
55 | self.ttl = "5" |
|
53 | self.ttl = "5" | |
56 | self.feed_nr = 20 |
|
54 | self.feed_nr = 20 | |
@@ -84,6 +82,30 b' class JournalController(BaseController):' | |||||
84 | return c.journal_data |
|
82 | return c.journal_data | |
85 | return render('journal/journal.html') |
|
83 | return render('journal/journal.html') | |
86 |
|
84 | |||
|
85 | @LoginRequired(api_access=True) | |||
|
86 | @NotAnonymous() | |||
|
87 | def journal_atom(self): | |||
|
88 | """ | |||
|
89 | Produce an atom-1.0 feed via feedgenerator module | |||
|
90 | """ | |||
|
91 | following = self.sa.query(UserFollowing)\ | |||
|
92 | .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\ | |||
|
93 | .options(joinedload(UserFollowing.follows_repository))\ | |||
|
94 | .all() | |||
|
95 | return self._atom_feed(following, public=False) | |||
|
96 | ||||
|
97 | @LoginRequired(api_access=True) | |||
|
98 | @NotAnonymous() | |||
|
99 | def journal_rss(self): | |||
|
100 | """ | |||
|
101 | Produce an rss feed via feedgenerator module | |||
|
102 | """ | |||
|
103 | following = self.sa.query(UserFollowing)\ | |||
|
104 | .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\ | |||
|
105 | .options(joinedload(UserFollowing.follows_repository))\ | |||
|
106 | .all() | |||
|
107 | return self._rss_feed(following, public=False) | |||
|
108 | ||||
87 | def _get_daily_aggregate(self, journal): |
|
109 | def _get_daily_aggregate(self, journal): | |
88 | groups = [] |
|
110 | groups = [] | |
89 | for k, g in groupby(journal, lambda x: x.action_as_day): |
|
111 | for k, g in groupby(journal, lambda x: x.action_as_day): | |
@@ -173,6 +195,80 b' class JournalController(BaseController):' | |||||
173 | return c.journal_data |
|
195 | return c.journal_data | |
174 | return render('journal/public_journal.html') |
|
196 | return render('journal/public_journal.html') | |
175 |
|
197 | |||
|
198 | def _atom_feed(self, repos, public=True): | |||
|
199 | journal = self._get_journal_data(repos) | |||
|
200 | if public: | |||
|
201 | _link = url('public_journal_atom', qualified=True) | |||
|
202 | _desc = '%s %s %s' % (c.rhodecode_name, _('public journal'), | |||
|
203 | 'atom feed') | |||
|
204 | else: | |||
|
205 | _link = url('journal_atom', qualified=True) | |||
|
206 | _desc = '%s %s %s' % (c.rhodecode_name, _('journal'), 'atom feed') | |||
|
207 | ||||
|
208 | feed = Atom1Feed(title=_desc, | |||
|
209 | link=_link, | |||
|
210 | description=_desc, | |||
|
211 | language=self.language, | |||
|
212 | ttl=self.ttl) | |||
|
213 | ||||
|
214 | for entry in journal[:self.feed_nr]: | |||
|
215 | action, action_extra, ico = h.action_parser(entry, feed=True) | |||
|
216 | title = "%s - %s %s" % (entry.user.short_contact, action(), | |||
|
217 | entry.repository.repo_name) | |||
|
218 | desc = action_extra() | |||
|
219 | _url = None | |||
|
220 | if entry.repository is not None: | |||
|
221 | _url = url('changelog_home', | |||
|
222 | repo_name=entry.repository.repo_name, | |||
|
223 | qualified=True) | |||
|
224 | ||||
|
225 | feed.add_item(title=title, | |||
|
226 | pubdate=entry.action_date, | |||
|
227 | link=_url or url('', qualified=True), | |||
|
228 | author_email=entry.user.email, | |||
|
229 | author_name=entry.user.full_contact, | |||
|
230 | description=desc) | |||
|
231 | ||||
|
232 | response.content_type = feed.mime_type | |||
|
233 | return feed.writeString('utf-8') | |||
|
234 | ||||
|
235 | def _rss_feed(self, repos, public=True): | |||
|
236 | journal = self._get_journal_data(repos) | |||
|
237 | if public: | |||
|
238 | _link = url('public_journal_atom', qualified=True) | |||
|
239 | _desc = '%s %s %s' % (c.rhodecode_name, _('public journal'), | |||
|
240 | 'rss feed') | |||
|
241 | else: | |||
|
242 | _link = url('journal_atom', qualified=True) | |||
|
243 | _desc = '%s %s %s' % (c.rhodecode_name, _('journal'), 'rss feed') | |||
|
244 | ||||
|
245 | feed = Rss201rev2Feed(title=_desc, | |||
|
246 | link=_link, | |||
|
247 | description=_desc, | |||
|
248 | language=self.language, | |||
|
249 | ttl=self.ttl) | |||
|
250 | ||||
|
251 | for entry in journal[:self.feed_nr]: | |||
|
252 | action, action_extra, ico = h.action_parser(entry, feed=True) | |||
|
253 | title = "%s - %s %s" % (entry.user.short_contact, action(), | |||
|
254 | entry.repository.repo_name) | |||
|
255 | desc = action_extra() | |||
|
256 | _url = None | |||
|
257 | if entry.repository is not None: | |||
|
258 | _url = url('changelog_home', | |||
|
259 | repo_name=entry.repository.repo_name, | |||
|
260 | qualified=True) | |||
|
261 | ||||
|
262 | feed.add_item(title=title, | |||
|
263 | pubdate=entry.action_date, | |||
|
264 | link=_url or url('', qualified=True), | |||
|
265 | author_email=entry.user.email, | |||
|
266 | author_name=entry.user.full_contact, | |||
|
267 | description=desc) | |||
|
268 | ||||
|
269 | response.content_type = feed.mime_type | |||
|
270 | return feed.writeString('utf-8') | |||
|
271 | ||||
176 | @LoginRequired(api_access=True) |
|
272 | @LoginRequired(api_access=True) | |
177 | def public_journal_atom(self): |
|
273 | def public_journal_atom(self): | |
178 | """ |
|
274 | """ | |
@@ -183,28 +279,7 b' class JournalController(BaseController):' | |||||
183 | .options(joinedload(UserFollowing.follows_repository))\ |
|
279 | .options(joinedload(UserFollowing.follows_repository))\ | |
184 | .all() |
|
280 | .all() | |
185 |
|
281 | |||
186 |
|
|
282 | return self._atom_feed(c.following) | |
187 |
|
||||
188 | feed = Atom1Feed(title=self.title % 'atom', |
|
|||
189 | link=url('public_journal_atom', qualified=True), |
|
|||
190 | description=_('Public journal'), |
|
|||
191 | language=self.language, |
|
|||
192 | ttl=self.ttl) |
|
|||
193 |
|
||||
194 | for entry in journal[:self.feed_nr]: |
|
|||
195 | action, action_extra, ico = h.action_parser(entry, feed=True) |
|
|||
196 | title = "%s - %s %s" % (entry.user.short_contact, action(), |
|
|||
197 | entry.repository.repo_name) |
|
|||
198 | desc = action_extra() |
|
|||
199 | feed.add_item(title=title, |
|
|||
200 | pubdate=entry.action_date, |
|
|||
201 | link=url('', qualified=True), |
|
|||
202 | author_email=entry.user.email, |
|
|||
203 | author_name=entry.user.full_contact, |
|
|||
204 | description=desc) |
|
|||
205 |
|
||||
206 | response.content_type = feed.mime_type |
|
|||
207 | return feed.writeString('utf-8') |
|
|||
208 |
|
283 | |||
209 | @LoginRequired(api_access=True) |
|
284 | @LoginRequired(api_access=True) | |
210 | def public_journal_rss(self): |
|
285 | def public_journal_rss(self): | |
@@ -216,25 +291,4 b' class JournalController(BaseController):' | |||||
216 | .options(joinedload(UserFollowing.follows_repository))\ |
|
291 | .options(joinedload(UserFollowing.follows_repository))\ | |
217 | .all() |
|
292 | .all() | |
218 |
|
293 | |||
219 |
|
|
294 | return self._rss_feed(c.following) | |
220 |
|
||||
221 | feed = Rss201rev2Feed(title=self.title % 'rss', |
|
|||
222 | link=url('public_journal_rss', qualified=True), |
|
|||
223 | description=_('Public journal'), |
|
|||
224 | language=self.language, |
|
|||
225 | ttl=self.ttl) |
|
|||
226 |
|
||||
227 | for entry in journal[:self.feed_nr]: |
|
|||
228 | action, action_extra, ico = h.action_parser(entry, feed=True) |
|
|||
229 | title = "%s - %s %s" % (entry.user.short_contact, action(), |
|
|||
230 | entry.repository.repo_name) |
|
|||
231 | desc = action_extra() |
|
|||
232 | feed.add_item(title=title, |
|
|||
233 | pubdate=entry.action_date, |
|
|||
234 | link=url('', qualified=True), |
|
|||
235 | author_email=entry.user.email, |
|
|||
236 | author_name=entry.user.full_contact, |
|
|||
237 | description=desc) |
|
|||
238 |
|
||||
239 | response.content_type = feed.mime_type |
|
|||
240 | return feed.writeString('utf-8') |
|
1 | NO CONTENT: modified file, binary diff hidden |
|
NO CONTENT: modified file, binary diff hidden |
@@ -7,8 +7,8 b' msgid ""' | |||||
7 | msgstr "" |
|
7 | msgstr "" | |
8 | "Project-Id-Version: RhodeCode 1.1.5\n" |
|
8 | "Project-Id-Version: RhodeCode 1.1.5\n" | |
9 | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" |
|
9 | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | |
10 |
"POT-Creation-Date: 2012-06-0 |
|
10 | "POT-Creation-Date: 2012-06-05 20:42+0200\n" | |
11 |
"PO-Revision-Date: 2012-0 |
|
11 | "PO-Revision-Date: 2012-06-05 20:07+0100\n" | |
12 | "Last-Translator: Vincent Duvert <vincent@duvert.net>\n" |
|
12 | "Last-Translator: Vincent Duvert <vincent@duvert.net>\n" | |
13 | "Language-Team: fr <LL@li.org>\n" |
|
13 | "Language-Team: fr <LL@li.org>\n" | |
14 | "Plural-Forms: nplurals=2; plural=(n > 1)\n" |
|
14 | "Plural-Forms: nplurals=2; plural=(n > 1)\n" | |
@@ -17,7 +17,7 b' msgstr ""' | |||||
17 | "Content-Transfer-Encoding: 8bit\n" |
|
17 | "Content-Transfer-Encoding: 8bit\n" | |
18 | "Generated-By: Babel 0.9.6\n" |
|
18 | "Generated-By: Babel 0.9.6\n" | |
19 |
|
19 | |||
20 |
#: rhodecode/controllers/changelog.py:9 |
|
20 | #: rhodecode/controllers/changelog.py:94 | |
21 | msgid "All Branches" |
|
21 | msgid "All Branches" | |
22 | msgstr "Toutes les branches" |
|
22 | msgstr "Toutes les branches" | |
23 |
|
23 | |||
@@ -69,16 +69,20 b' msgstr ""' | |||||
69 | "La requête n’a pu être traitée en raison d’une erreur survenue sur le " |
|
69 | "La requête n’a pu être traitée en raison d’une erreur survenue sur le " | |
70 | "serveur." |
|
70 | "serveur." | |
71 |
|
71 | |||
72 |
#: rhodecode/controllers/feed.py:4 |
|
72 | #: rhodecode/controllers/feed.py:49 | |
73 | #, python-format |
|
73 | #, python-format | |
74 | msgid "Changes on %s repository" |
|
74 | msgid "Changes on %s repository" | |
75 | msgstr "Changements sur le dépôt %s" |
|
75 | msgstr "Changements sur le dépôt %s" | |
76 |
|
76 | |||
77 |
#: rhodecode/controllers/feed.py: |
|
77 | #: rhodecode/controllers/feed.py:50 | |
78 | #, python-format |
|
78 | #, python-format | |
79 | msgid "%s %s feed" |
|
79 | msgid "%s %s feed" | |
80 | msgstr "Flux %s de %s" |
|
80 | msgstr "Flux %s de %s" | |
81 |
|
81 | |||
|
82 | #: rhodecode/controllers/feed.py:75 | |||
|
83 | msgid "commited on" | |||
|
84 | msgstr "a commité, le" | |||
|
85 | ||||
82 | #: rhodecode/controllers/files.py:86 |
|
86 | #: rhodecode/controllers/files.py:86 | |
83 | #: rhodecode/templates/admin/repos/repo_add.html:13 |
|
87 | #: rhodecode/templates/admin/repos/repo_add.html:13 | |
84 | msgid "add new" |
|
88 | msgid "add new" | |
@@ -138,19 +142,16 b' msgid "Unknown archive type"' | |||||
138 | msgstr "Type d’archive inconnu" |
|
142 | msgstr "Type d’archive inconnu" | |
139 |
|
143 | |||
140 | #: rhodecode/controllers/files.py:461 |
|
144 | #: rhodecode/controllers/files.py:461 | |
141 | #: rhodecode/templates/changeset/changeset_range.html:5 |
|
|||
142 | #: rhodecode/templates/changeset/changeset_range.html:13 |
|
145 | #: rhodecode/templates/changeset/changeset_range.html:13 | |
143 | #: rhodecode/templates/changeset/changeset_range.html:31 |
|
146 | #: rhodecode/templates/changeset/changeset_range.html:31 | |
144 | msgid "Changesets" |
|
147 | msgid "Changesets" | |
145 | msgstr "Changesets" |
|
148 | msgstr "Changesets" | |
146 |
|
149 | |||
147 | #: rhodecode/controllers/files.py:462 rhodecode/controllers/summary.py:230 |
|
150 | #: rhodecode/controllers/files.py:462 rhodecode/controllers/summary.py:230 | |
148 | #: rhodecode/templates/branches/branches.html:5 |
|
|||
149 | msgid "Branches" |
|
151 | msgid "Branches" | |
150 | msgstr "Branches" |
|
152 | msgstr "Branches" | |
151 |
|
153 | |||
152 | #: rhodecode/controllers/files.py:463 rhodecode/controllers/summary.py:231 |
|
154 | #: rhodecode/controllers/files.py:463 rhodecode/controllers/summary.py:231 | |
153 | #: rhodecode/templates/tags/tags.html:5 |
|
|||
154 | msgid "Tags" |
|
155 | msgid "Tags" | |
155 | msgstr "Tags" |
|
156 | msgstr "Tags" | |
156 |
|
157 | |||
@@ -661,133 +662,123 b' msgstr ""' | |||||
661 | msgid "No changes detected" |
|
662 | msgid "No changes detected" | |
662 | msgstr "Aucun changement détecté." |
|
663 | msgstr "Aucun changement détecté." | |
663 |
|
664 | |||
664 |
#: rhodecode/lib/helpers.py: |
|
665 | #: rhodecode/lib/helpers.py:350 | |
|
666 | #, python-format | |||
|
667 | msgid "%a, %d %b %Y %H:%M:%S" | |||
|
668 | msgstr "%d/%m/%Y à %H:%M:%S" | |||
|
669 | ||||
|
670 | #: rhodecode/lib/helpers.py:423 | |||
665 | msgid "True" |
|
671 | msgid "True" | |
666 | msgstr "Vrai" |
|
672 | msgstr "Vrai" | |
667 |
|
673 | |||
668 |
#: rhodecode/lib/helpers.py:4 |
|
674 | #: rhodecode/lib/helpers.py:427 | |
669 | msgid "False" |
|
675 | msgid "False" | |
670 | msgstr "Faux" |
|
676 | msgstr "Faux" | |
671 |
|
677 | |||
672 |
#: rhodecode/lib/helpers.py:4 |
|
678 | #: rhodecode/lib/helpers.py:471 | |
673 | #, fuzzy |
|
|||
674 | msgid "Changeset not found" |
|
679 | msgid "Changeset not found" | |
675 | msgstr "Dépôt vide" |
|
680 | msgstr "Ensemble de changements non trouvé" | |
676 |
|
681 | |||
677 |
#: rhodecode/lib/helpers.py:4 |
|
682 | #: rhodecode/lib/helpers.py:494 | |
678 | #, python-format |
|
683 | #, python-format | |
679 | msgid "Show all combined changesets %s->%s" |
|
684 | msgid "Show all combined changesets %s->%s" | |
680 | msgstr "Afficher les changements combinés %s->%s" |
|
685 | msgstr "Afficher les changements combinés %s->%s" | |
681 |
|
686 | |||
682 |
#: rhodecode/lib/helpers.py: |
|
687 | #: rhodecode/lib/helpers.py:500 | |
683 | msgid "compare view" |
|
688 | msgid "compare view" | |
684 | msgstr "vue de comparaison" |
|
689 | msgstr "vue de comparaison" | |
685 |
|
690 | |||
686 |
#: rhodecode/lib/helpers.py:5 |
|
691 | #: rhodecode/lib/helpers.py:520 | |
687 | msgid "and" |
|
692 | msgid "and" | |
688 | msgstr "et" |
|
693 | msgstr "et" | |
689 |
|
694 | |||
690 |
#: rhodecode/lib/helpers.py:51 |
|
695 | #: rhodecode/lib/helpers.py:521 | |
691 | #, python-format |
|
696 | #, python-format | |
692 | msgid "%s more" |
|
697 | msgid "%s more" | |
693 | msgstr "%s de plus" |
|
698 | msgstr "%s de plus" | |
694 |
|
699 | |||
695 |
#: rhodecode/lib/helpers.py:5 |
|
700 | #: rhodecode/lib/helpers.py:522 rhodecode/templates/changelog/changelog.html:40 | |
696 | msgid "revisions" |
|
701 | msgid "revisions" | |
697 | msgstr "révisions" |
|
702 | msgstr "révisions" | |
698 |
|
703 | |||
699 |
#: rhodecode/lib/helpers.py:5 |
|
704 | #: rhodecode/lib/helpers.py:545 | |
700 | msgid "fork name " |
|
705 | msgid "fork name " | |
701 | msgstr "Nom du fork" |
|
706 | msgstr "Nom du fork" | |
702 |
|
707 | |||
703 |
#: rhodecode/lib/helpers.py:55 |
|
708 | #: rhodecode/lib/helpers.py:558 | |
704 | msgid "[deleted] repository" |
|
709 | msgid "[deleted] repository" | |
705 | msgstr "[a supprimé] le dépôt" |
|
710 | msgstr "[a supprimé] le dépôt" | |
706 |
|
711 | |||
707 |
#: rhodecode/lib/helpers.py:5 |
|
712 | #: rhodecode/lib/helpers.py:560 rhodecode/lib/helpers.py:570 | |
708 | msgid "[created] repository" |
|
713 | msgid "[created] repository" | |
709 | msgstr "[a créé] le dépôt" |
|
714 | msgstr "[a créé] le dépôt" | |
710 |
|
715 | |||
711 |
#: rhodecode/lib/helpers.py:5 |
|
716 | #: rhodecode/lib/helpers.py:562 | |
712 | msgid "[created] repository as fork" |
|
717 | msgid "[created] repository as fork" | |
713 | msgstr "[a créé] le dépôt en tant que fork" |
|
718 | msgstr "[a créé] le dépôt en tant que fork" | |
714 |
|
719 | |||
715 |
#: rhodecode/lib/helpers.py:5 |
|
720 | #: rhodecode/lib/helpers.py:564 rhodecode/lib/helpers.py:572 | |
716 | msgid "[forked] repository" |
|
721 | msgid "[forked] repository" | |
717 | msgstr "[a forké] le dépôt" |
|
722 | msgstr "[a forké] le dépôt" | |
718 |
|
723 | |||
719 |
#: rhodecode/lib/helpers.py:5 |
|
724 | #: rhodecode/lib/helpers.py:566 rhodecode/lib/helpers.py:574 | |
720 | msgid "[updated] repository" |
|
725 | msgid "[updated] repository" | |
721 | msgstr "[a mis à jour] le dépôt" |
|
726 | msgstr "[a mis à jour] le dépôt" | |
722 |
|
727 | |||
723 | #: rhodecode/lib/helpers.py:560 |
|
|||
724 | msgid "[delete] repository" |
|
|||
725 | msgstr "[a supprimé] le dépôt" |
|
|||
726 |
|
||||
727 | #: rhodecode/lib/helpers.py:568 |
|
728 | #: rhodecode/lib/helpers.py:568 | |
728 | #, fuzzy, python-format |
|
729 | msgid "[delete] repository" | |
729 | #| msgid "created user %s" |
|
730 | msgstr "[a supprimé] le dépôt" | |
730 | msgid "[created] user" |
|
|||
731 | msgstr "utilisateur %s créé" |
|
|||
732 |
|
||||
733 | #: rhodecode/lib/helpers.py:570 |
|
|||
734 | #, fuzzy, python-format |
|
|||
735 | #| msgid "updated users group %s" |
|
|||
736 | msgid "[updated] user" |
|
|||
737 | msgstr "Le groupe d’utilisateurs %s a été mis à jour." |
|
|||
738 |
|
||||
739 | #: rhodecode/lib/helpers.py:572 |
|
|||
740 | #, fuzzy, python-format |
|
|||
741 | #| msgid "created users group %s" |
|
|||
742 | msgid "[created] users group" |
|
|||
743 | msgstr "Le groupe d’utilisateurs %s a été créé." |
|
|||
744 |
|
||||
745 | #: rhodecode/lib/helpers.py:574 |
|
|||
746 | #, fuzzy, python-format |
|
|||
747 | #| msgid "updated users group %s" |
|
|||
748 | msgid "[updated] users group" |
|
|||
749 | msgstr "Le groupe d’utilisateurs %s a été mis à jour." |
|
|||
750 |
|
731 | |||
751 | #: rhodecode/lib/helpers.py:576 |
|
732 | #: rhodecode/lib/helpers.py:576 | |
752 | #, fuzzy |
|
733 | msgid "[created] user" | |
753 | #| msgid "[created] repository" |
|
734 | msgstr "[a créé] l’utilisateur" | |
754 | msgid "[commented] on revision in repository" |
|
|||
755 | msgstr "[a créé] le dépôt" |
|
|||
756 |
|
735 | |||
757 | #: rhodecode/lib/helpers.py:578 |
|
736 | #: rhodecode/lib/helpers.py:578 | |
758 |
msgid "[ |
|
737 | msgid "[updated] user" | |
759 | msgstr "[a pushé] dans" |
|
738 | msgstr "[a mis à jour] l’utilisateur" | |
760 |
|
739 | |||
761 | #: rhodecode/lib/helpers.py:580 |
|
740 | #: rhodecode/lib/helpers.py:580 | |
762 | #, fuzzy |
|
741 | msgid "[created] users group" | |
763 | #| msgid "[committed via RhodeCode] into" |
|
742 | msgstr "[a créé] le groupe d’utilisateurs" | |
764 | msgid "[committed via RhodeCode] into repository" |
|
|||
765 | msgstr "[a commité via RhodeCode] dans" |
|
|||
766 |
|
743 | |||
767 | #: rhodecode/lib/helpers.py:582 |
|
744 | #: rhodecode/lib/helpers.py:582 | |
768 | #, fuzzy |
|
745 | msgid "[updated] users group" | |
769 | #| msgid "[pulled from remote] into" |
|
746 | msgstr "[a mis à jour] le groupe d’utilisateurs" | |
770 | msgid "[pulled from remote] into repository" |
|
|||
771 | msgstr "[a pullé depuis un site distant] dans" |
|
|||
772 |
|
747 | |||
773 | #: rhodecode/lib/helpers.py:584 |
|
748 | #: rhodecode/lib/helpers.py:584 | |
|
749 | msgid "[commented] on revision in repository" | |||
|
750 | msgstr "[a commenté] une révision du dépôt" | |||
|
751 | ||||
|
752 | #: rhodecode/lib/helpers.py:586 | |||
|
753 | msgid "[pushed] into" | |||
|
754 | msgstr "[a pushé] dans" | |||
|
755 | ||||
|
756 | #: rhodecode/lib/helpers.py:588 | |||
|
757 | msgid "[committed via RhodeCode] into repository" | |||
|
758 | msgstr "[a commité via RhodeCode] dans le dépôt" | |||
|
759 | ||||
|
760 | #: rhodecode/lib/helpers.py:590 | |||
|
761 | msgid "[pulled from remote] into repository" | |||
|
762 | msgstr "[a pullé depuis un site distant] dans le dépôt" | |||
|
763 | ||||
|
764 | #: rhodecode/lib/helpers.py:592 | |||
774 | msgid "[pulled] from" |
|
765 | msgid "[pulled] from" | |
775 | msgstr "[a pullé] depuis" |
|
766 | msgstr "[a pullé] depuis" | |
776 |
|
767 | |||
777 |
#: rhodecode/lib/helpers.py:5 |
|
768 | #: rhodecode/lib/helpers.py:594 | |
778 | msgid "[started following] repository" |
|
769 | msgid "[started following] repository" | |
779 | msgstr "[suit maintenant] le dépôt" |
|
770 | msgstr "[suit maintenant] le dépôt" | |
780 |
|
771 | |||
781 |
#: rhodecode/lib/helpers.py:5 |
|
772 | #: rhodecode/lib/helpers.py:596 | |
782 | msgid "[stopped following] repository" |
|
773 | msgid "[stopped following] repository" | |
783 | msgstr "[ne suit plus] le dépôt" |
|
774 | msgstr "[ne suit plus] le dépôt" | |
784 |
|
775 | |||
785 |
#: rhodecode/lib/helpers.py:7 |
|
776 | #: rhodecode/lib/helpers.py:760 | |
786 | #, python-format |
|
777 | #, python-format | |
787 | msgid " and %s more" |
|
778 | msgid " and %s more" | |
788 | msgstr "et %s de plus" |
|
779 | msgstr "et %s de plus" | |
789 |
|
780 | |||
790 |
#: rhodecode/lib/helpers.py:7 |
|
781 | #: rhodecode/lib/helpers.py:764 | |
791 | msgid "No Files" |
|
782 | msgid "No Files" | |
792 | msgstr "Aucun fichier" |
|
783 | msgstr "Aucun fichier" | |
793 |
|
784 | |||
@@ -856,7 +847,7 b' msgstr "R\xc3\xa9initialisation du mot de passe"' | |||||
856 | msgid "on line %s" |
|
847 | msgid "on line %s" | |
857 | msgstr "à la ligne %s" |
|
848 | msgstr "à la ligne %s" | |
858 |
|
849 | |||
859 |
#: rhodecode/model/comment.py:11 |
|
850 | #: rhodecode/model/comment.py:114 | |
860 | msgid "[Mention]" |
|
851 | msgid "[Mention]" | |
861 | msgstr "[Mention]" |
|
852 | msgstr "[Mention]" | |
862 |
|
853 | |||
@@ -1005,19 +996,19 b' msgstr "Veuillez entrer un mot de passe"' | |||||
1005 | msgid "Enter %(min)i characters or more" |
|
996 | msgid "Enter %(min)i characters or more" | |
1006 | msgstr "Entrez au moins %(min)i caractères" |
|
997 | msgstr "Entrez au moins %(min)i caractères" | |
1007 |
|
998 | |||
1008 |
#: rhodecode/model/notification.py:17 |
|
999 | #: rhodecode/model/notification.py:178 | |
1009 | msgid "commented on commit" |
|
1000 | msgid "commented on commit" | |
1010 | msgstr "a posté un commentaire sur le commit" |
|
1001 | msgstr "a posté un commentaire sur le commit" | |
1011 |
|
1002 | |||
1012 |
#: rhodecode/model/notification.py:17 |
|
1003 | #: rhodecode/model/notification.py:179 | |
1013 | msgid "sent message" |
|
1004 | msgid "sent message" | |
1014 | msgstr "a envoyé un message" |
|
1005 | msgstr "a envoyé un message" | |
1015 |
|
1006 | |||
1016 |
#: rhodecode/model/notification.py:1 |
|
1007 | #: rhodecode/model/notification.py:180 | |
1017 | msgid "mentioned you" |
|
1008 | msgid "mentioned you" | |
1018 | msgstr "vous a mentioné" |
|
1009 | msgstr "vous a mentioné" | |
1019 |
|
1010 | |||
1020 |
#: rhodecode/model/notification.py:1 |
|
1011 | #: rhodecode/model/notification.py:181 | |
1021 | msgid "registered in RhodeCode" |
|
1012 | msgid "registered in RhodeCode" | |
1022 | msgstr "s’est enregistré sur RhodeCode" |
|
1013 | msgstr "s’est enregistré sur RhodeCode" | |
1023 |
|
1014 | |||
@@ -1051,13 +1042,14 b' msgid "Dashboard"' | |||||
1051 | msgstr "Tableau de bord" |
|
1042 | msgstr "Tableau de bord" | |
1052 |
|
1043 | |||
1053 | #: rhodecode/templates/index_base.html:6 |
|
1044 | #: rhodecode/templates/index_base.html:6 | |
|
1045 | #: rhodecode/templates/repo_switcher_list.html:4 | |||
1054 | #: rhodecode/templates/admin/users/user_edit_my_account.html:31 |
|
1046 | #: rhodecode/templates/admin/users/user_edit_my_account.html:31 | |
1055 | #: rhodecode/templates/bookmarks/bookmarks.html:10 |
|
1047 | #: rhodecode/templates/bookmarks/bookmarks.html:10 | |
1056 | #: rhodecode/templates/branches/branches.html:9 |
|
1048 | #: rhodecode/templates/branches/branches.html:9 | |
1057 | #: rhodecode/templates/journal/journal.html:31 |
|
1049 | #: rhodecode/templates/journal/journal.html:31 | |
1058 | #: rhodecode/templates/tags/tags.html:10 |
|
1050 | #: rhodecode/templates/tags/tags.html:10 | |
1059 | msgid "quick filter..." |
|
1051 | msgid "quick filter..." | |
1060 |
msgstr " |
|
1052 | msgstr "Filtre rapide…" | |
1061 |
|
1053 | |||
1062 | #: rhodecode/templates/index_base.html:6 rhodecode/templates/base/base.html:218 |
|
1054 | #: rhodecode/templates/index_base.html:6 rhodecode/templates/base/base.html:218 | |
1063 | msgid "repositories" |
|
1055 | msgid "repositories" | |
@@ -1807,6 +1799,12 b' msgstr "Membre"' | |||||
1807 | msgid "private repository" |
|
1799 | msgid "private repository" | |
1808 | msgstr "Dépôt privé" |
|
1800 | msgstr "Dépôt privé" | |
1809 |
|
1801 | |||
|
1802 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:19 | |||
|
1803 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:28 | |||
|
1804 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:18 | |||
|
1805 | msgid "default" | |||
|
1806 | msgstr "[Par défaut]" | |||
|
1807 | ||||
1810 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:33 |
|
1808 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:33 | |
1811 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:58 |
|
1809 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:58 | |
1812 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23 |
|
1810 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23 | |
@@ -1857,7 +1855,7 b' msgstr "Groupes"' | |||||
1857 |
|
1855 | |||
1858 | #: rhodecode/templates/admin/repos_groups/repos_groups.html:12 |
|
1856 | #: rhodecode/templates/admin/repos_groups/repos_groups.html:12 | |
1859 | msgid "with" |
|
1857 | msgid "with" | |
1860 | msgstr "avec support de" |
|
1858 | msgstr "comprenant" | |
1861 |
|
1859 | |||
1862 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 |
|
1860 | #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 | |
1863 | msgid "Add repos group" |
|
1861 | msgid "Add repos group" | |
@@ -1939,7 +1937,6 b' msgstr "Administration g\xc3\xa9n\xc3\xa9rale"' | |||||
1939 |
|
1937 | |||
1940 | #: rhodecode/templates/admin/settings/hooks.html:9 |
|
1938 | #: rhodecode/templates/admin/settings/hooks.html:9 | |
1941 | #: rhodecode/templates/admin/settings/settings.html:9 |
|
1939 | #: rhodecode/templates/admin/settings/settings.html:9 | |
1942 | #: rhodecode/templates/settings/repo_settings.html:5 |
|
|||
1943 | #: rhodecode/templates/settings/repo_settings.html:13 |
|
1940 | #: rhodecode/templates/settings/repo_settings.html:13 | |
1944 | msgid "Settings" |
|
1941 | msgid "Settings" | |
1945 | msgstr "Options" |
|
1942 | msgstr "Options" | |
@@ -2379,14 +2376,12 b' msgstr "Chargement\xe2\x80\xa6"' | |||||
2379 | #: rhodecode/templates/data_table/_dt_elements.html:9 |
|
2376 | #: rhodecode/templates/data_table/_dt_elements.html:9 | |
2380 | #: rhodecode/templates/data_table/_dt_elements.html:11 |
|
2377 | #: rhodecode/templates/data_table/_dt_elements.html:11 | |
2381 | #: rhodecode/templates/data_table/_dt_elements.html:13 |
|
2378 | #: rhodecode/templates/data_table/_dt_elements.html:13 | |
2382 | #: rhodecode/templates/summary/summary.html:4 |
|
|||
2383 | msgid "Summary" |
|
2379 | msgid "Summary" | |
2384 | msgstr "Résumé" |
|
2380 | msgstr "Résumé" | |
2385 |
|
2381 | |||
2386 | #: rhodecode/templates/base/base.html:166 |
|
2382 | #: rhodecode/templates/base/base.html:166 | |
2387 | #: rhodecode/templates/base/base.html:168 |
|
2383 | #: rhodecode/templates/base/base.html:168 | |
2388 | #: rhodecode/templates/base/base.html:170 |
|
2384 | #: rhodecode/templates/base/base.html:170 | |
2389 | #: rhodecode/templates/changelog/changelog.html:6 |
|
|||
2390 | #: rhodecode/templates/changelog/changelog.html:15 |
|
2385 | #: rhodecode/templates/changelog/changelog.html:15 | |
2391 | #: rhodecode/templates/data_table/_dt_elements.html:17 |
|
2386 | #: rhodecode/templates/data_table/_dt_elements.html:17 | |
2392 | #: rhodecode/templates/data_table/_dt_elements.html:19 |
|
2387 | #: rhodecode/templates/data_table/_dt_elements.html:19 | |
@@ -2406,7 +2401,6 b' msgstr "Aller"' | |||||
2406 | #: rhodecode/templates/data_table/_dt_elements.html:25 |
|
2401 | #: rhodecode/templates/data_table/_dt_elements.html:25 | |
2407 | #: rhodecode/templates/data_table/_dt_elements.html:27 |
|
2402 | #: rhodecode/templates/data_table/_dt_elements.html:27 | |
2408 | #: rhodecode/templates/data_table/_dt_elements.html:29 |
|
2403 | #: rhodecode/templates/data_table/_dt_elements.html:29 | |
2409 | #: rhodecode/templates/files/files.html:4 |
|
|||
2410 | #: rhodecode/templates/files/files.html:40 |
|
2404 | #: rhodecode/templates/files/files.html:40 | |
2411 | msgid "Files" |
|
2405 | msgid "Files" | |
2412 | msgstr "Fichiers" |
|
2406 | msgstr "Fichiers" | |
@@ -2454,13 +2448,11 b' msgstr "Permissions"' | |||||
2454 |
|
2448 | |||
2455 | #: rhodecode/templates/base/base.html:235 |
|
2449 | #: rhodecode/templates/base/base.html:235 | |
2456 | #: rhodecode/templates/base/base.html:237 |
|
2450 | #: rhodecode/templates/base/base.html:237 | |
2457 | #: rhodecode/templates/followers/followers.html:5 |
|
|||
2458 | msgid "Followers" |
|
2451 | msgid "Followers" | |
2459 | msgstr "Followers" |
|
2452 | msgstr "Followers" | |
2460 |
|
2453 | |||
2461 | #: rhodecode/templates/base/base.html:243 |
|
2454 | #: rhodecode/templates/base/base.html:243 | |
2462 | #: rhodecode/templates/base/base.html:245 |
|
2455 | #: rhodecode/templates/base/base.html:245 | |
2463 | #: rhodecode/templates/forks/forks.html:5 |
|
|||
2464 | msgid "Forks" |
|
2456 | msgid "Forks" | |
2465 | msgstr "Forks" |
|
2457 | msgstr "Forks" | |
2466 |
|
2458 | |||
@@ -2493,8 +2485,9 b' msgid "Group"' | |||||
2493 | msgstr "Groupe" |
|
2485 | msgstr "Groupe" | |
2494 |
|
2486 | |||
2495 | #: rhodecode/templates/bookmarks/bookmarks.html:5 |
|
2487 | #: rhodecode/templates/bookmarks/bookmarks.html:5 | |
2496 | msgid "Bookmarks" |
|
2488 | #, python-format | |
2497 | msgstr "Signets" |
|
2489 | msgid "%s Bookmarks" | |
|
2490 | msgstr "Signets de %s" | |||
2498 |
|
2491 | |||
2499 | #: rhodecode/templates/bookmarks/bookmarks.html:39 |
|
2492 | #: rhodecode/templates/bookmarks/bookmarks.html:39 | |
2500 | #: rhodecode/templates/bookmarks/bookmarks_data.html:8 |
|
2493 | #: rhodecode/templates/bookmarks/bookmarks_data.html:8 | |
@@ -2504,6 +2497,11 b' msgstr "Signets"' | |||||
2504 | msgid "Author" |
|
2497 | msgid "Author" | |
2505 | msgstr "Auteur" |
|
2498 | msgstr "Auteur" | |
2506 |
|
2499 | |||
|
2500 | #: rhodecode/templates/branches/branches.html:5 | |||
|
2501 | #, python-format | |||
|
2502 | msgid "%s Branches" | |||
|
2503 | msgstr "Branches de %s" | |||
|
2504 | ||||
2507 | #: rhodecode/templates/branches/branches_data.html:7 |
|
2505 | #: rhodecode/templates/branches/branches_data.html:7 | |
2508 | msgid "date" |
|
2506 | msgid "date" | |
2509 | msgstr "Date" |
|
2507 | msgstr "Date" | |
@@ -2518,6 +2516,11 b' msgstr "Auteur"' | |||||
2518 | msgid "revision" |
|
2516 | msgid "revision" | |
2519 | msgstr "Révision" |
|
2517 | msgstr "Révision" | |
2520 |
|
2518 | |||
|
2519 | #: rhodecode/templates/changelog/changelog.html:6 | |||
|
2520 | #, python-format | |||
|
2521 | msgid "%s Changelog" | |||
|
2522 | msgstr "Historique de %s" | |||
|
2523 | ||||
2521 | #: rhodecode/templates/changelog/changelog.html:15 |
|
2524 | #: rhodecode/templates/changelog/changelog.html:15 | |
2522 | #, python-format |
|
2525 | #, python-format | |
2523 | msgid "showing %d out of %d revision" |
|
2526 | msgid "showing %d out of %d revision" | |
@@ -2605,6 +2608,10 b' msgid "affected %s files"' | |||||
2605 | msgstr "%s fichiers affectés" |
|
2608 | msgstr "%s fichiers affectés" | |
2606 |
|
2609 | |||
2607 | #: rhodecode/templates/changeset/changeset.html:6 |
|
2610 | #: rhodecode/templates/changeset/changeset.html:6 | |
|
2611 | #, python-format | |||
|
2612 | msgid "%s Changeset" | |||
|
2613 | msgstr "Changeset de %s" | |||
|
2614 | ||||
2608 | #: rhodecode/templates/changeset/changeset.html:14 |
|
2615 | #: rhodecode/templates/changeset/changeset.html:14 | |
2609 | msgid "Changeset" |
|
2616 | msgid "Changeset" | |
2610 | msgstr "Changements" |
|
2617 | msgstr "Changements" | |
@@ -2689,6 +2696,11 b' msgstr "Se connecter maintenant"' | |||||
2689 | msgid "Leave a comment" |
|
2696 | msgid "Leave a comment" | |
2690 | msgstr "Laisser un commentaire" |
|
2697 | msgstr "Laisser un commentaire" | |
2691 |
|
2698 | |||
|
2699 | #: rhodecode/templates/changeset/changeset_range.html:5 | |||
|
2700 | #, python-format | |||
|
2701 | msgid "%s Changesets" | |||
|
2702 | msgstr "Changesets de %s" | |||
|
2703 | ||||
2692 | #: rhodecode/templates/changeset/changeset_range.html:29 |
|
2704 | #: rhodecode/templates/changeset/changeset_range.html:29 | |
2693 | msgid "Compare View" |
|
2705 | msgid "Compare View" | |
2694 | msgstr "Comparaison" |
|
2706 | msgstr "Comparaison" | |
@@ -2708,7 +2720,6 b' msgstr "Afficher les commentaires"' | |||||
2708 | #: rhodecode/templates/data_table/_dt_elements.html:33 |
|
2720 | #: rhodecode/templates/data_table/_dt_elements.html:33 | |
2709 | #: rhodecode/templates/data_table/_dt_elements.html:35 |
|
2721 | #: rhodecode/templates/data_table/_dt_elements.html:35 | |
2710 | #: rhodecode/templates/data_table/_dt_elements.html:37 |
|
2722 | #: rhodecode/templates/data_table/_dt_elements.html:37 | |
2711 | #: rhodecode/templates/forks/fork.html:5 |
|
|||
2712 | msgid "Fork" |
|
2723 | msgid "Fork" | |
2713 | msgstr "Fork" |
|
2724 | msgstr "Fork" | |
2714 |
|
2725 | |||
@@ -2750,10 +2761,19 b' msgid "You will be redirected to %s in %' | |||||
2750 | msgstr "Vous serez redirigé vers %s dans %s secondes." |
|
2761 | msgstr "Vous serez redirigé vers %s dans %s secondes." | |
2751 |
|
2762 | |||
2752 | #: rhodecode/templates/files/file_diff.html:4 |
|
2763 | #: rhodecode/templates/files/file_diff.html:4 | |
|
2764 | #, python-format | |||
|
2765 | msgid "%s File diff" | |||
|
2766 | msgstr "Diff de fichier de %s" | |||
|
2767 | ||||
2753 | #: rhodecode/templates/files/file_diff.html:12 |
|
2768 | #: rhodecode/templates/files/file_diff.html:12 | |
2754 | msgid "File diff" |
|
2769 | msgid "File diff" | |
2755 | msgstr "Diff de fichier" |
|
2770 | msgstr "Diff de fichier" | |
2756 |
|
2771 | |||
|
2772 | #: rhodecode/templates/files/files.html:4 | |||
|
2773 | #, python-format | |||
|
2774 | msgid "%s Files" | |||
|
2775 | msgstr "Fichiers de %s" | |||
|
2776 | ||||
2757 | #: rhodecode/templates/files/files.html:12 |
|
2777 | #: rhodecode/templates/files/files.html:12 | |
2758 | #: rhodecode/templates/summary/summary.html:328 |
|
2778 | #: rhodecode/templates/summary/summary.html:328 | |
2759 | msgid "files" |
|
2779 | msgid "files" | |
@@ -2769,8 +2789,9 b' msgstr "Aucun fichier ne correspond"' | |||||
2769 |
|
2789 | |||
2770 | #: rhodecode/templates/files/files_add.html:4 |
|
2790 | #: rhodecode/templates/files/files_add.html:4 | |
2771 | #: rhodecode/templates/files/files_edit.html:4 |
|
2791 | #: rhodecode/templates/files/files_edit.html:4 | |
2772 | msgid "Edit file" |
|
2792 | #, python-format | |
2773 | msgstr "Éditer un fichier" |
|
2793 | msgid "%s Edit file" | |
|
2794 | msgstr "Edition de fichier de %s" | |||
2774 |
|
2795 | |||
2775 | #: rhodecode/templates/files/files_add.html:19 |
|
2796 | #: rhodecode/templates/files/files_add.html:19 | |
2776 | msgid "add file" |
|
2797 | msgid "add file" | |
@@ -2929,13 +2950,23 b' msgstr "Revenir en arri\xc3\xa8re"' | |||||
2929 | msgid "No files at given path" |
|
2950 | msgid "No files at given path" | |
2930 | msgstr "Aucun fichier à cet endroit" |
|
2951 | msgstr "Aucun fichier à cet endroit" | |
2931 |
|
2952 | |||
|
2953 | #: rhodecode/templates/followers/followers.html:5 | |||
|
2954 | #, python-format | |||
|
2955 | msgid "%s Followers" | |||
|
2956 | msgstr "Followers de %s" | |||
|
2957 | ||||
2932 | #: rhodecode/templates/followers/followers.html:13 |
|
2958 | #: rhodecode/templates/followers/followers.html:13 | |
2933 | msgid "followers" |
|
2959 | msgid "followers" | |
2934 | msgstr "followers" |
|
2960 | msgstr "followers" | |
2935 |
|
2961 | |||
2936 | #: rhodecode/templates/followers/followers_data.html:12 |
|
2962 | #: rhodecode/templates/followers/followers_data.html:12 | |
2937 | msgid "Started following" |
|
2963 | msgid "Started following -" | |
2938 | msgstr "Date de début" |
|
2964 | msgstr "A commencé à suivre le dépôt :" | |
|
2965 | ||||
|
2966 | #: rhodecode/templates/forks/fork.html:5 | |||
|
2967 | #, python-format | |||
|
2968 | msgid "%s Fork" | |||
|
2969 | msgstr "Fork de %s" | |||
2939 |
|
2970 | |||
2940 | #: rhodecode/templates/forks/fork.html:31 |
|
2971 | #: rhodecode/templates/forks/fork.html:31 | |
2941 | msgid "Fork name" |
|
2972 | msgid "Fork name" | |
@@ -2957,6 +2988,11 b' msgstr "M\xc3\x80J apr\xc3\xa8s le clonage"' | |||||
2957 | msgid "fork this repository" |
|
2988 | msgid "fork this repository" | |
2958 | msgstr "Forker ce dépôt" |
|
2989 | msgstr "Forker ce dépôt" | |
2959 |
|
2990 | |||
|
2991 | #: rhodecode/templates/forks/forks.html:5 | |||
|
2992 | #, python-format | |||
|
2993 | msgid "%s Forks" | |||
|
2994 | msgstr "Forks de %s" | |||
|
2995 | ||||
2960 | #: rhodecode/templates/forks/forks.html:13 |
|
2996 | #: rhodecode/templates/forks/forks.html:13 | |
2961 | msgid "forks" |
|
2997 | msgid "forks" | |
2962 | msgstr "forks" |
|
2998 | msgstr "forks" | |
@@ -3028,10 +3064,15 b' msgstr "Les noms de fichiers"' | |||||
3028 | msgid "Permission denied" |
|
3064 | msgid "Permission denied" | |
3029 | msgstr "Permission refusée" |
|
3065 | msgstr "Permission refusée" | |
3030 |
|
3066 | |||
|
3067 | #: rhodecode/templates/settings/repo_settings.html:5 | |||
|
3068 | #, python-format | |||
|
3069 | msgid "%s Settings" | |||
|
3070 | msgstr "Réglages de %s" | |||
|
3071 | ||||
3031 | #: rhodecode/templates/shortlog/shortlog.html:5 |
|
3072 | #: rhodecode/templates/shortlog/shortlog.html:5 | |
3032 | #: rhodecode/templates/summary/summary.html:209 |
|
3073 | #, python-format | |
3033 | msgid "Shortlog" |
|
3074 | msgid "%s Shortlog" | |
3034 |
msgstr "Résumé de |
|
3075 | msgstr "Résumé de %s" | |
3035 |
|
3076 | |||
3036 | #: rhodecode/templates/shortlog/shortlog.html:14 |
|
3077 | #: rhodecode/templates/shortlog/shortlog.html:14 | |
3037 | msgid "shortlog" |
|
3078 | msgid "shortlog" | |
@@ -3057,6 +3098,11 b' msgstr "Pusher le nouveau d\xc3\xa9p\xc3\xb4t"' | |||||
3057 | msgid "Existing repository?" |
|
3098 | msgid "Existing repository?" | |
3058 | msgstr "Le dépôt existe déjà ?" |
|
3099 | msgstr "Le dépôt existe déjà ?" | |
3059 |
|
3100 | |||
|
3101 | #: rhodecode/templates/summary/summary.html:4 | |||
|
3102 | #, python-format | |||
|
3103 | msgid "%s Summary" | |||
|
3104 | msgstr "Résumé de %s" | |||
|
3105 | ||||
3060 | #: rhodecode/templates/summary/summary.html:12 |
|
3106 | #: rhodecode/templates/summary/summary.html:12 | |
3061 | msgid "summary" |
|
3107 | msgid "summary" | |
3062 | msgstr "résumé" |
|
3108 | msgstr "résumé" | |
@@ -3113,6 +3159,10 b' msgstr "Il n\xe2\x80\x99y a pas encore de t\xc3\xa9l\xc3\xa9chargements propos\xc3\xa9s."' | |||||
3113 | msgid "Downloads are disabled for this repository" |
|
3159 | msgid "Downloads are disabled for this repository" | |
3114 | msgstr "Les téléchargements sont désactivés pour ce dépôt." |
|
3160 | msgstr "Les téléchargements sont désactivés pour ce dépôt." | |
3115 |
|
3161 | |||
|
3162 | #: rhodecode/templates/summary/summary.html:161 | |||
|
3163 | msgid "Download as zip" | |||
|
3164 | msgstr "Télécharger en ZIP" | |||
|
3165 | ||||
3116 | #: rhodecode/templates/summary/summary.html:164 |
|
3166 | #: rhodecode/templates/summary/summary.html:164 | |
3117 | msgid "Check this to download archive with subrepos" |
|
3167 | msgid "Check this to download archive with subrepos" | |
3118 | msgstr "Télécharger une archive contenant également les sous-dépôts éventuels" |
|
3168 | msgstr "Télécharger une archive contenant également les sous-dépôts éventuels" | |
@@ -3129,6 +3179,10 b' msgstr "Activit\xc3\xa9 de commit par jour et par auteur"' | |||||
3129 | msgid "Stats gathered: " |
|
3179 | msgid "Stats gathered: " | |
3130 | msgstr "Statistiques obtenues :" |
|
3180 | msgstr "Statistiques obtenues :" | |
3131 |
|
3181 | |||
|
3182 | #: rhodecode/templates/summary/summary.html:209 | |||
|
3183 | msgid "Shortlog" | |||
|
3184 | msgstr "Résumé des changements" | |||
|
3185 | ||||
3132 | #: rhodecode/templates/summary/summary.html:211 |
|
3186 | #: rhodecode/templates/summary/summary.html:211 | |
3133 | msgid "Quick start" |
|
3187 | msgid "Quick start" | |
3134 | msgstr "Démarrage rapide" |
|
3188 | msgstr "Démarrage rapide" | |
@@ -3170,3 +3224,8 b' msgstr "fichi\xc3\xa9 modifi\xc3\xa9"' | |||||
3170 | msgid "file removed" |
|
3224 | msgid "file removed" | |
3171 | msgstr "fichier supprimé" |
|
3225 | msgstr "fichier supprimé" | |
3172 |
|
3226 | |||
|
3227 | #: rhodecode/templates/tags/tags.html:5 | |||
|
3228 | #, python-format | |||
|
3229 | msgid "%s Tags" | |||
|
3230 | msgstr "Tags de %s" | |||
|
3231 |
@@ -8,7 +8,7 b' msgid ""' | |||||
8 | msgstr "" |
|
8 | msgstr "" | |
9 | "Project-Id-Version: RhodeCode 1.4.0\n" |
|
9 | "Project-Id-Version: RhodeCode 1.4.0\n" | |
10 | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" |
|
10 | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | |
11 |
"POT-Creation-Date: 2012-06-0 |
|
11 | "POT-Creation-Date: 2012-06-05 20:42+0200\n" | |
12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
|
12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
13 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
|
13 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
14 | "Language-Team: LANGUAGE <LL@li.org>\n" |
|
14 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
@@ -17,7 +17,7 b' msgstr ""' | |||||
17 | "Content-Transfer-Encoding: 8bit\n" |
|
17 | "Content-Transfer-Encoding: 8bit\n" | |
18 | "Generated-By: Babel 0.9.6\n" |
|
18 | "Generated-By: Babel 0.9.6\n" | |
19 |
|
19 | |||
20 |
#: rhodecode/controllers/changelog.py:9 |
|
20 | #: rhodecode/controllers/changelog.py:94 | |
21 | msgid "All Branches" |
|
21 | msgid "All Branches" | |
22 | msgstr "" |
|
22 | msgstr "" | |
23 |
|
23 | |||
@@ -65,16 +65,20 b' msgid ""' | |||||
65 | "fulfilling the request." |
|
65 | "fulfilling the request." | |
66 | msgstr "" |
|
66 | msgstr "" | |
67 |
|
67 | |||
68 |
#: rhodecode/controllers/feed.py:4 |
|
68 | #: rhodecode/controllers/feed.py:49 | |
69 | #, python-format |
|
69 | #, python-format | |
70 | msgid "Changes on %s repository" |
|
70 | msgid "Changes on %s repository" | |
71 | msgstr "" |
|
71 | msgstr "" | |
72 |
|
72 | |||
73 |
#: rhodecode/controllers/feed.py: |
|
73 | #: rhodecode/controllers/feed.py:50 | |
74 | #, python-format |
|
74 | #, python-format | |
75 | msgid "%s %s feed" |
|
75 | msgid "%s %s feed" | |
76 | msgstr "" |
|
76 | msgstr "" | |
77 |
|
77 | |||
|
78 | #: rhodecode/controllers/feed.py:75 | |||
|
79 | msgid "commited on" | |||
|
80 | msgstr "" | |||
|
81 | ||||
78 | #: rhodecode/controllers/files.py:86 |
|
82 | #: rhodecode/controllers/files.py:86 | |
79 | #: rhodecode/templates/admin/repos/repo_add.html:13 |
|
83 | #: rhodecode/templates/admin/repos/repo_add.html:13 | |
80 | msgid "add new" |
|
84 | msgid "add new" | |
@@ -134,19 +138,16 b' msgid "Unknown archive type"' | |||||
134 | msgstr "" |
|
138 | msgstr "" | |
135 |
|
139 | |||
136 | #: rhodecode/controllers/files.py:461 |
|
140 | #: rhodecode/controllers/files.py:461 | |
137 | #: rhodecode/templates/changeset/changeset_range.html:5 |
|
|||
138 | #: rhodecode/templates/changeset/changeset_range.html:13 |
|
141 | #: rhodecode/templates/changeset/changeset_range.html:13 | |
139 | #: rhodecode/templates/changeset/changeset_range.html:31 |
|
142 | #: rhodecode/templates/changeset/changeset_range.html:31 | |
140 | msgid "Changesets" |
|
143 | msgid "Changesets" | |
141 | msgstr "" |
|
144 | msgstr "" | |
142 |
|
145 | |||
143 | #: rhodecode/controllers/files.py:462 rhodecode/controllers/summary.py:230 |
|
146 | #: rhodecode/controllers/files.py:462 rhodecode/controllers/summary.py:230 | |
144 | #: rhodecode/templates/branches/branches.html:5 |
|
|||
145 | msgid "Branches" |
|
147 | msgid "Branches" | |
146 | msgstr "" |
|
148 | msgstr "" | |
147 |
|
149 | |||
148 | #: rhodecode/controllers/files.py:463 rhodecode/controllers/summary.py:231 |
|
150 | #: rhodecode/controllers/files.py:463 rhodecode/controllers/summary.py:231 | |
149 | #: rhodecode/templates/tags/tags.html:5 |
|
|||
150 | msgid "Tags" |
|
151 | msgid "Tags" | |
151 | msgstr "" |
|
152 | msgstr "" | |
152 |
|
153 | |||
@@ -619,118 +620,123 b' msgstr ""' | |||||
619 | msgid "No changes detected" |
|
620 | msgid "No changes detected" | |
620 | msgstr "" |
|
621 | msgstr "" | |
621 |
|
622 | |||
622 |
#: rhodecode/lib/helpers.py: |
|
623 | #: rhodecode/lib/helpers.py:350 | |
|
624 | #, python-format | |||
|
625 | msgid "%a, %d %b %Y %H:%M:%S" | |||
|
626 | msgstr "" | |||
|
627 | ||||
|
628 | #: rhodecode/lib/helpers.py:423 | |||
623 | msgid "True" |
|
629 | msgid "True" | |
624 | msgstr "" |
|
630 | msgstr "" | |
625 |
|
631 | |||
626 |
#: rhodecode/lib/helpers.py:4 |
|
632 | #: rhodecode/lib/helpers.py:427 | |
627 | msgid "False" |
|
633 | msgid "False" | |
628 | msgstr "" |
|
634 | msgstr "" | |
629 |
|
635 | |||
630 |
#: rhodecode/lib/helpers.py:4 |
|
636 | #: rhodecode/lib/helpers.py:471 | |
631 | msgid "Changeset not found" |
|
637 | msgid "Changeset not found" | |
632 | msgstr "" |
|
638 | msgstr "" | |
633 |
|
639 | |||
634 |
#: rhodecode/lib/helpers.py:4 |
|
640 | #: rhodecode/lib/helpers.py:494 | |
635 | #, python-format |
|
641 | #, python-format | |
636 | msgid "Show all combined changesets %s->%s" |
|
642 | msgid "Show all combined changesets %s->%s" | |
637 | msgstr "" |
|
643 | msgstr "" | |
638 |
|
644 | |||
639 |
#: rhodecode/lib/helpers.py: |
|
645 | #: rhodecode/lib/helpers.py:500 | |
640 | msgid "compare view" |
|
646 | msgid "compare view" | |
641 | msgstr "" |
|
647 | msgstr "" | |
642 |
|
648 | |||
643 |
#: rhodecode/lib/helpers.py:5 |
|
649 | #: rhodecode/lib/helpers.py:520 | |
644 | msgid "and" |
|
650 | msgid "and" | |
645 | msgstr "" |
|
651 | msgstr "" | |
646 |
|
652 | |||
647 |
#: rhodecode/lib/helpers.py:51 |
|
653 | #: rhodecode/lib/helpers.py:521 | |
648 | #, python-format |
|
654 | #, python-format | |
649 | msgid "%s more" |
|
655 | msgid "%s more" | |
650 | msgstr "" |
|
656 | msgstr "" | |
651 |
|
657 | |||
652 |
#: rhodecode/lib/helpers.py:5 |
|
658 | #: rhodecode/lib/helpers.py:522 rhodecode/templates/changelog/changelog.html:40 | |
653 | msgid "revisions" |
|
659 | msgid "revisions" | |
654 | msgstr "" |
|
660 | msgstr "" | |
655 |
|
661 | |||
656 |
#: rhodecode/lib/helpers.py:5 |
|
662 | #: rhodecode/lib/helpers.py:545 | |
657 | msgid "fork name " |
|
663 | msgid "fork name " | |
658 | msgstr "" |
|
664 | msgstr "" | |
659 |
|
665 | |||
660 |
#: rhodecode/lib/helpers.py:55 |
|
666 | #: rhodecode/lib/helpers.py:558 | |
661 | msgid "[deleted] repository" |
|
667 | msgid "[deleted] repository" | |
662 | msgstr "" |
|
668 | msgstr "" | |
663 |
|
669 | |||
664 |
#: rhodecode/lib/helpers.py:5 |
|
670 | #: rhodecode/lib/helpers.py:560 rhodecode/lib/helpers.py:570 | |
665 | msgid "[created] repository" |
|
671 | msgid "[created] repository" | |
666 | msgstr "" |
|
672 | msgstr "" | |
667 |
|
673 | |||
668 |
#: rhodecode/lib/helpers.py:5 |
|
674 | #: rhodecode/lib/helpers.py:562 | |
669 | msgid "[created] repository as fork" |
|
675 | msgid "[created] repository as fork" | |
670 | msgstr "" |
|
676 | msgstr "" | |
671 |
|
677 | |||
672 |
#: rhodecode/lib/helpers.py:5 |
|
678 | #: rhodecode/lib/helpers.py:564 rhodecode/lib/helpers.py:572 | |
673 | msgid "[forked] repository" |
|
679 | msgid "[forked] repository" | |
674 | msgstr "" |
|
680 | msgstr "" | |
675 |
|
681 | |||
676 |
#: rhodecode/lib/helpers.py:5 |
|
682 | #: rhodecode/lib/helpers.py:566 rhodecode/lib/helpers.py:574 | |
677 | msgid "[updated] repository" |
|
683 | msgid "[updated] repository" | |
678 | msgstr "" |
|
684 | msgstr "" | |
679 |
|
685 | |||
680 | #: rhodecode/lib/helpers.py:560 |
|
|||
681 | msgid "[delete] repository" |
|
|||
682 | msgstr "" |
|
|||
683 |
|
||||
684 | #: rhodecode/lib/helpers.py:568 |
|
686 | #: rhodecode/lib/helpers.py:568 | |
685 | msgid "[created] user" |
|
687 | msgid "[delete] repository" | |
686 | msgstr "" |
|
|||
687 |
|
||||
688 | #: rhodecode/lib/helpers.py:570 |
|
|||
689 | msgid "[updated] user" |
|
|||
690 | msgstr "" |
|
|||
691 |
|
||||
692 | #: rhodecode/lib/helpers.py:572 |
|
|||
693 | msgid "[created] users group" |
|
|||
694 | msgstr "" |
|
|||
695 |
|
||||
696 | #: rhodecode/lib/helpers.py:574 |
|
|||
697 | msgid "[updated] users group" |
|
|||
698 | msgstr "" |
|
688 | msgstr "" | |
699 |
|
689 | |||
700 | #: rhodecode/lib/helpers.py:576 |
|
690 | #: rhodecode/lib/helpers.py:576 | |
701 | msgid "[commented] on revision in repository" |
|
691 | msgid "[created] user" | |
702 | msgstr "" |
|
692 | msgstr "" | |
703 |
|
693 | |||
704 | #: rhodecode/lib/helpers.py:578 |
|
694 | #: rhodecode/lib/helpers.py:578 | |
705 |
msgid "[ |
|
695 | msgid "[updated] user" | |
706 | msgstr "" |
|
696 | msgstr "" | |
707 |
|
697 | |||
708 | #: rhodecode/lib/helpers.py:580 |
|
698 | #: rhodecode/lib/helpers.py:580 | |
709 | msgid "[committed via RhodeCode] into repository" |
|
699 | msgid "[created] users group" | |
710 | msgstr "" |
|
700 | msgstr "" | |
711 |
|
701 | |||
712 | #: rhodecode/lib/helpers.py:582 |
|
702 | #: rhodecode/lib/helpers.py:582 | |
713 | msgid "[pulled from remote] into repository" |
|
703 | msgid "[updated] users group" | |
714 | msgstr "" |
|
704 | msgstr "" | |
715 |
|
705 | |||
716 | #: rhodecode/lib/helpers.py:584 |
|
706 | #: rhodecode/lib/helpers.py:584 | |
717 | msgid "[pulled] from" |
|
707 | msgid "[commented] on revision in repository" | |
718 | msgstr "" |
|
708 | msgstr "" | |
719 |
|
709 | |||
720 | #: rhodecode/lib/helpers.py:586 |
|
710 | #: rhodecode/lib/helpers.py:586 | |
721 | msgid "[started following] repository" |
|
711 | msgid "[pushed] into" | |
722 | msgstr "" |
|
712 | msgstr "" | |
723 |
|
713 | |||
724 | #: rhodecode/lib/helpers.py:588 |
|
714 | #: rhodecode/lib/helpers.py:588 | |
|
715 | msgid "[committed via RhodeCode] into repository" | |||
|
716 | msgstr "" | |||
|
717 | ||||
|
718 | #: rhodecode/lib/helpers.py:590 | |||
|
719 | msgid "[pulled from remote] into repository" | |||
|
720 | msgstr "" | |||
|
721 | ||||
|
722 | #: rhodecode/lib/helpers.py:592 | |||
|
723 | msgid "[pulled] from" | |||
|
724 | msgstr "" | |||
|
725 | ||||
|
726 | #: rhodecode/lib/helpers.py:594 | |||
|
727 | msgid "[started following] repository" | |||
|
728 | msgstr "" | |||
|
729 | ||||
|
730 | #: rhodecode/lib/helpers.py:596 | |||
725 | msgid "[stopped following] repository" |
|
731 | msgid "[stopped following] repository" | |
726 | msgstr "" |
|
732 | msgstr "" | |
727 |
|
733 | |||
728 |
#: rhodecode/lib/helpers.py:7 |
|
734 | #: rhodecode/lib/helpers.py:760 | |
729 | #, python-format |
|
735 | #, python-format | |
730 | msgid " and %s more" |
|
736 | msgid " and %s more" | |
731 | msgstr "" |
|
737 | msgstr "" | |
732 |
|
738 | |||
733 |
#: rhodecode/lib/helpers.py:7 |
|
739 | #: rhodecode/lib/helpers.py:764 | |
734 | msgid "No Files" |
|
740 | msgid "No Files" | |
735 | msgstr "" |
|
741 | msgstr "" | |
736 |
|
742 | |||
@@ -799,7 +805,7 b' msgstr ""' | |||||
799 | msgid "on line %s" |
|
805 | msgid "on line %s" | |
800 | msgstr "" |
|
806 | msgstr "" | |
801 |
|
807 | |||
802 |
#: rhodecode/model/comment.py:11 |
|
808 | #: rhodecode/model/comment.py:114 | |
803 | msgid "[Mention]" |
|
809 | msgid "[Mention]" | |
804 | msgstr "" |
|
810 | msgstr "" | |
805 |
|
811 | |||
@@ -938,19 +944,19 b' msgstr ""' | |||||
938 | msgid "Enter %(min)i characters or more" |
|
944 | msgid "Enter %(min)i characters or more" | |
939 | msgstr "" |
|
945 | msgstr "" | |
940 |
|
946 | |||
941 |
#: rhodecode/model/notification.py:17 |
|
947 | #: rhodecode/model/notification.py:178 | |
942 | msgid "commented on commit" |
|
948 | msgid "commented on commit" | |
943 | msgstr "" |
|
949 | msgstr "" | |
944 |
|
950 | |||
945 |
#: rhodecode/model/notification.py:17 |
|
951 | #: rhodecode/model/notification.py:179 | |
946 | msgid "sent message" |
|
952 | msgid "sent message" | |
947 | msgstr "" |
|
953 | msgstr "" | |
948 |
|
954 | |||
949 |
#: rhodecode/model/notification.py:1 |
|
955 | #: rhodecode/model/notification.py:180 | |
950 | msgid "mentioned you" |
|
956 | msgid "mentioned you" | |
951 | msgstr "" |
|
957 | msgstr "" | |
952 |
|
958 | |||
953 |
#: rhodecode/model/notification.py:1 |
|
959 | #: rhodecode/model/notification.py:181 | |
954 | msgid "registered in RhodeCode" |
|
960 | msgid "registered in RhodeCode" | |
955 | msgstr "" |
|
961 | msgstr "" | |
956 |
|
962 | |||
@@ -978,6 +984,7 b' msgid "Dashboard"' | |||||
978 | msgstr "" |
|
984 | msgstr "" | |
979 |
|
985 | |||
980 | #: rhodecode/templates/index_base.html:6 |
|
986 | #: rhodecode/templates/index_base.html:6 | |
|
987 | #: rhodecode/templates/repo_switcher_list.html:4 | |||
981 | #: rhodecode/templates/admin/users/user_edit_my_account.html:31 |
|
988 | #: rhodecode/templates/admin/users/user_edit_my_account.html:31 | |
982 | #: rhodecode/templates/bookmarks/bookmarks.html:10 |
|
989 | #: rhodecode/templates/bookmarks/bookmarks.html:10 | |
983 | #: rhodecode/templates/branches/branches.html:9 |
|
990 | #: rhodecode/templates/branches/branches.html:9 | |
@@ -1708,6 +1715,12 b' msgstr ""' | |||||
1708 | msgid "private repository" |
|
1715 | msgid "private repository" | |
1709 | msgstr "" |
|
1716 | msgstr "" | |
1710 |
|
1717 | |||
|
1718 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:19 | |||
|
1719 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:28 | |||
|
1720 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:18 | |||
|
1721 | msgid "default" | |||
|
1722 | msgstr "" | |||
|
1723 | ||||
1711 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:33 |
|
1724 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:33 | |
1712 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:58 |
|
1725 | #: rhodecode/templates/admin/repos/repo_edit_perms.html:58 | |
1713 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23 |
|
1726 | #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23 | |
@@ -1840,7 +1853,6 b' msgstr ""' | |||||
1840 |
|
1853 | |||
1841 | #: rhodecode/templates/admin/settings/hooks.html:9 |
|
1854 | #: rhodecode/templates/admin/settings/hooks.html:9 | |
1842 | #: rhodecode/templates/admin/settings/settings.html:9 |
|
1855 | #: rhodecode/templates/admin/settings/settings.html:9 | |
1843 | #: rhodecode/templates/settings/repo_settings.html:5 |
|
|||
1844 | #: rhodecode/templates/settings/repo_settings.html:13 |
|
1856 | #: rhodecode/templates/settings/repo_settings.html:13 | |
1845 | msgid "Settings" |
|
1857 | msgid "Settings" | |
1846 | msgstr "" |
|
1858 | msgstr "" | |
@@ -2268,13 +2280,11 b' msgstr ""' | |||||
2268 | #: rhodecode/templates/data_table/_dt_elements.html:9 |
|
2280 | #: rhodecode/templates/data_table/_dt_elements.html:9 | |
2269 | #: rhodecode/templates/data_table/_dt_elements.html:11 |
|
2281 | #: rhodecode/templates/data_table/_dt_elements.html:11 | |
2270 | #: rhodecode/templates/data_table/_dt_elements.html:13 |
|
2282 | #: rhodecode/templates/data_table/_dt_elements.html:13 | |
2271 | #: rhodecode/templates/summary/summary.html:4 |
|
|||
2272 | msgid "Summary" |
|
2283 | msgid "Summary" | |
2273 | msgstr "" |
|
2284 | msgstr "" | |
2274 |
|
2285 | |||
2275 | #: rhodecode/templates/base/base.html:166 rhodecode/templates/base/base.html:168 |
|
2286 | #: rhodecode/templates/base/base.html:166 rhodecode/templates/base/base.html:168 | |
2276 | #: rhodecode/templates/base/base.html:170 |
|
2287 | #: rhodecode/templates/base/base.html:170 | |
2277 | #: rhodecode/templates/changelog/changelog.html:6 |
|
|||
2278 | #: rhodecode/templates/changelog/changelog.html:15 |
|
2288 | #: rhodecode/templates/changelog/changelog.html:15 | |
2279 | #: rhodecode/templates/data_table/_dt_elements.html:17 |
|
2289 | #: rhodecode/templates/data_table/_dt_elements.html:17 | |
2280 | #: rhodecode/templates/data_table/_dt_elements.html:19 |
|
2290 | #: rhodecode/templates/data_table/_dt_elements.html:19 | |
@@ -2292,7 +2302,7 b' msgstr ""' | |||||
2292 | #: rhodecode/templates/data_table/_dt_elements.html:25 |
|
2302 | #: rhodecode/templates/data_table/_dt_elements.html:25 | |
2293 | #: rhodecode/templates/data_table/_dt_elements.html:27 |
|
2303 | #: rhodecode/templates/data_table/_dt_elements.html:27 | |
2294 | #: rhodecode/templates/data_table/_dt_elements.html:29 |
|
2304 | #: rhodecode/templates/data_table/_dt_elements.html:29 | |
2295 |
#: rhodecode/templates/files/files.html:4 |
|
2305 | #: rhodecode/templates/files/files.html:40 | |
2296 | msgid "Files" |
|
2306 | msgid "Files" | |
2297 | msgstr "" |
|
2307 | msgstr "" | |
2298 |
|
2308 | |||
@@ -2336,12 +2346,10 b' msgid "permissions"' | |||||
2336 | msgstr "" |
|
2346 | msgstr "" | |
2337 |
|
2347 | |||
2338 | #: rhodecode/templates/base/base.html:235 rhodecode/templates/base/base.html:237 |
|
2348 | #: rhodecode/templates/base/base.html:235 rhodecode/templates/base/base.html:237 | |
2339 | #: rhodecode/templates/followers/followers.html:5 |
|
|||
2340 | msgid "Followers" |
|
2349 | msgid "Followers" | |
2341 | msgstr "" |
|
2350 | msgstr "" | |
2342 |
|
2351 | |||
2343 | #: rhodecode/templates/base/base.html:243 rhodecode/templates/base/base.html:245 |
|
2352 | #: rhodecode/templates/base/base.html:243 rhodecode/templates/base/base.html:245 | |
2344 | #: rhodecode/templates/forks/forks.html:5 |
|
|||
2345 | msgid "Forks" |
|
2353 | msgid "Forks" | |
2346 | msgstr "" |
|
2354 | msgstr "" | |
2347 |
|
2355 | |||
@@ -2372,7 +2380,8 b' msgid "Group"' | |||||
2372 | msgstr "" |
|
2380 | msgstr "" | |
2373 |
|
2381 | |||
2374 | #: rhodecode/templates/bookmarks/bookmarks.html:5 |
|
2382 | #: rhodecode/templates/bookmarks/bookmarks.html:5 | |
2375 | msgid "Bookmarks" |
|
2383 | #, python-format | |
|
2384 | msgid "%s Bookmarks" | |||
2376 | msgstr "" |
|
2385 | msgstr "" | |
2377 |
|
2386 | |||
2378 | #: rhodecode/templates/bookmarks/bookmarks.html:39 |
|
2387 | #: rhodecode/templates/bookmarks/bookmarks.html:39 | |
@@ -2382,6 +2391,11 b' msgstr ""' | |||||
2382 | msgid "Author" |
|
2391 | msgid "Author" | |
2383 | msgstr "" |
|
2392 | msgstr "" | |
2384 |
|
2393 | |||
|
2394 | #: rhodecode/templates/branches/branches.html:5 | |||
|
2395 | #, python-format | |||
|
2396 | msgid "%s Branches" | |||
|
2397 | msgstr "" | |||
|
2398 | ||||
2385 | #: rhodecode/templates/branches/branches_data.html:7 |
|
2399 | #: rhodecode/templates/branches/branches_data.html:7 | |
2386 | msgid "date" |
|
2400 | msgid "date" | |
2387 | msgstr "" |
|
2401 | msgstr "" | |
@@ -2396,6 +2410,11 b' msgstr ""' | |||||
2396 | msgid "revision" |
|
2410 | msgid "revision" | |
2397 | msgstr "" |
|
2411 | msgstr "" | |
2398 |
|
2412 | |||
|
2413 | #: rhodecode/templates/changelog/changelog.html:6 | |||
|
2414 | #, python-format | |||
|
2415 | msgid "%s Changelog" | |||
|
2416 | msgstr "" | |||
|
2417 | ||||
2399 | #: rhodecode/templates/changelog/changelog.html:15 |
|
2418 | #: rhodecode/templates/changelog/changelog.html:15 | |
2400 | #, python-format |
|
2419 | #, python-format | |
2401 | msgid "showing %d out of %d revision" |
|
2420 | msgid "showing %d out of %d revision" | |
@@ -2483,6 +2502,10 b' msgid "affected %s files"' | |||||
2483 | msgstr "" |
|
2502 | msgstr "" | |
2484 |
|
2503 | |||
2485 | #: rhodecode/templates/changeset/changeset.html:6 |
|
2504 | #: rhodecode/templates/changeset/changeset.html:6 | |
|
2505 | #, python-format | |||
|
2506 | msgid "%s Changeset" | |||
|
2507 | msgstr "" | |||
|
2508 | ||||
2486 | #: rhodecode/templates/changeset/changeset.html:14 |
|
2509 | #: rhodecode/templates/changeset/changeset.html:14 | |
2487 | msgid "Changeset" |
|
2510 | msgid "Changeset" | |
2488 | msgstr "" |
|
2511 | msgstr "" | |
@@ -2563,6 +2586,11 b' msgstr ""' | |||||
2563 | msgid "Leave a comment" |
|
2586 | msgid "Leave a comment" | |
2564 | msgstr "" |
|
2587 | msgstr "" | |
2565 |
|
2588 | |||
|
2589 | #: rhodecode/templates/changeset/changeset_range.html:5 | |||
|
2590 | #, python-format | |||
|
2591 | msgid "%s Changesets" | |||
|
2592 | msgstr "" | |||
|
2593 | ||||
2566 | #: rhodecode/templates/changeset/changeset_range.html:29 |
|
2594 | #: rhodecode/templates/changeset/changeset_range.html:29 | |
2567 | msgid "Compare View" |
|
2595 | msgid "Compare View" | |
2568 | msgstr "" |
|
2596 | msgstr "" | |
@@ -2582,7 +2610,6 b' msgstr ""' | |||||
2582 | #: rhodecode/templates/data_table/_dt_elements.html:33 |
|
2610 | #: rhodecode/templates/data_table/_dt_elements.html:33 | |
2583 | #: rhodecode/templates/data_table/_dt_elements.html:35 |
|
2611 | #: rhodecode/templates/data_table/_dt_elements.html:35 | |
2584 | #: rhodecode/templates/data_table/_dt_elements.html:37 |
|
2612 | #: rhodecode/templates/data_table/_dt_elements.html:37 | |
2585 | #: rhodecode/templates/forks/fork.html:5 |
|
|||
2586 | msgid "Fork" |
|
2613 | msgid "Fork" | |
2587 | msgstr "" |
|
2614 | msgstr "" | |
2588 |
|
2615 | |||
@@ -2624,10 +2651,19 b' msgid "You will be redirected to %s in %' | |||||
2624 | msgstr "" |
|
2651 | msgstr "" | |
2625 |
|
2652 | |||
2626 | #: rhodecode/templates/files/file_diff.html:4 |
|
2653 | #: rhodecode/templates/files/file_diff.html:4 | |
|
2654 | #, python-format | |||
|
2655 | msgid "%s File diff" | |||
|
2656 | msgstr "" | |||
|
2657 | ||||
2627 | #: rhodecode/templates/files/file_diff.html:12 |
|
2658 | #: rhodecode/templates/files/file_diff.html:12 | |
2628 | msgid "File diff" |
|
2659 | msgid "File diff" | |
2629 | msgstr "" |
|
2660 | msgstr "" | |
2630 |
|
2661 | |||
|
2662 | #: rhodecode/templates/files/files.html:4 | |||
|
2663 | #, python-format | |||
|
2664 | msgid "%s Files" | |||
|
2665 | msgstr "" | |||
|
2666 | ||||
2631 | #: rhodecode/templates/files/files.html:12 |
|
2667 | #: rhodecode/templates/files/files.html:12 | |
2632 | #: rhodecode/templates/summary/summary.html:328 |
|
2668 | #: rhodecode/templates/summary/summary.html:328 | |
2633 | msgid "files" |
|
2669 | msgid "files" | |
@@ -2643,7 +2679,8 b' msgstr ""' | |||||
2643 |
|
2679 | |||
2644 | #: rhodecode/templates/files/files_add.html:4 |
|
2680 | #: rhodecode/templates/files/files_add.html:4 | |
2645 | #: rhodecode/templates/files/files_edit.html:4 |
|
2681 | #: rhodecode/templates/files/files_edit.html:4 | |
2646 | msgid "Edit file" |
|
2682 | #, python-format | |
|
2683 | msgid "%s Edit file" | |||
2647 | msgstr "" |
|
2684 | msgstr "" | |
2648 |
|
2685 | |||
2649 | #: rhodecode/templates/files/files_add.html:19 |
|
2686 | #: rhodecode/templates/files/files_add.html:19 | |
@@ -2803,12 +2840,22 b' msgstr ""' | |||||
2803 | msgid "No files at given path" |
|
2840 | msgid "No files at given path" | |
2804 | msgstr "" |
|
2841 | msgstr "" | |
2805 |
|
2842 | |||
|
2843 | #: rhodecode/templates/followers/followers.html:5 | |||
|
2844 | #, python-format | |||
|
2845 | msgid "%s Followers" | |||
|
2846 | msgstr "" | |||
|
2847 | ||||
2806 | #: rhodecode/templates/followers/followers.html:13 |
|
2848 | #: rhodecode/templates/followers/followers.html:13 | |
2807 | msgid "followers" |
|
2849 | msgid "followers" | |
2808 | msgstr "" |
|
2850 | msgstr "" | |
2809 |
|
2851 | |||
2810 | #: rhodecode/templates/followers/followers_data.html:12 |
|
2852 | #: rhodecode/templates/followers/followers_data.html:12 | |
2811 | msgid "Started following" |
|
2853 | msgid "Started following -" | |
|
2854 | msgstr "" | |||
|
2855 | ||||
|
2856 | #: rhodecode/templates/forks/fork.html:5 | |||
|
2857 | #, python-format | |||
|
2858 | msgid "%s Fork" | |||
2812 | msgstr "" |
|
2859 | msgstr "" | |
2813 |
|
2860 | |||
2814 | #: rhodecode/templates/forks/fork.html:31 |
|
2861 | #: rhodecode/templates/forks/fork.html:31 | |
@@ -2831,6 +2878,11 b' msgstr ""' | |||||
2831 | msgid "fork this repository" |
|
2878 | msgid "fork this repository" | |
2832 | msgstr "" |
|
2879 | msgstr "" | |
2833 |
|
2880 | |||
|
2881 | #: rhodecode/templates/forks/forks.html:5 | |||
|
2882 | #, python-format | |||
|
2883 | msgid "%s Forks" | |||
|
2884 | msgstr "" | |||
|
2885 | ||||
2834 | #: rhodecode/templates/forks/forks.html:13 |
|
2886 | #: rhodecode/templates/forks/forks.html:13 | |
2835 | msgid "forks" |
|
2887 | msgid "forks" | |
2836 | msgstr "" |
|
2888 | msgstr "" | |
@@ -2902,9 +2954,14 b' msgstr ""' | |||||
2902 | msgid "Permission denied" |
|
2954 | msgid "Permission denied" | |
2903 | msgstr "" |
|
2955 | msgstr "" | |
2904 |
|
2956 | |||
|
2957 | #: rhodecode/templates/settings/repo_settings.html:5 | |||
|
2958 | #, python-format | |||
|
2959 | msgid "%s Settings" | |||
|
2960 | msgstr "" | |||
|
2961 | ||||
2905 | #: rhodecode/templates/shortlog/shortlog.html:5 |
|
2962 | #: rhodecode/templates/shortlog/shortlog.html:5 | |
2906 | #: rhodecode/templates/summary/summary.html:209 |
|
2963 | #, python-format | |
2907 | msgid "Shortlog" |
|
2964 | msgid "%s Shortlog" | |
2908 | msgstr "" |
|
2965 | msgstr "" | |
2909 |
|
2966 | |||
2910 | #: rhodecode/templates/shortlog/shortlog.html:14 |
|
2967 | #: rhodecode/templates/shortlog/shortlog.html:14 | |
@@ -2931,6 +2988,11 b' msgstr ""' | |||||
2931 | msgid "Existing repository?" |
|
2988 | msgid "Existing repository?" | |
2932 | msgstr "" |
|
2989 | msgstr "" | |
2933 |
|
2990 | |||
|
2991 | #: rhodecode/templates/summary/summary.html:4 | |||
|
2992 | #, python-format | |||
|
2993 | msgid "%s Summary" | |||
|
2994 | msgstr "" | |||
|
2995 | ||||
2934 | #: rhodecode/templates/summary/summary.html:12 |
|
2996 | #: rhodecode/templates/summary/summary.html:12 | |
2935 | msgid "summary" |
|
2997 | msgid "summary" | |
2936 | msgstr "" |
|
2998 | msgstr "" | |
@@ -2987,6 +3049,10 b' msgstr ""' | |||||
2987 | msgid "Downloads are disabled for this repository" |
|
3049 | msgid "Downloads are disabled for this repository" | |
2988 | msgstr "" |
|
3050 | msgstr "" | |
2989 |
|
3051 | |||
|
3052 | #: rhodecode/templates/summary/summary.html:161 | |||
|
3053 | msgid "Download as zip" | |||
|
3054 | msgstr "" | |||
|
3055 | ||||
2990 | #: rhodecode/templates/summary/summary.html:164 |
|
3056 | #: rhodecode/templates/summary/summary.html:164 | |
2991 | msgid "Check this to download archive with subrepos" |
|
3057 | msgid "Check this to download archive with subrepos" | |
2992 | msgstr "" |
|
3058 | msgstr "" | |
@@ -3003,6 +3069,10 b' msgstr ""' | |||||
3003 | msgid "Stats gathered: " |
|
3069 | msgid "Stats gathered: " | |
3004 | msgstr "" |
|
3070 | msgstr "" | |
3005 |
|
3071 | |||
|
3072 | #: rhodecode/templates/summary/summary.html:209 | |||
|
3073 | msgid "Shortlog" | |||
|
3074 | msgstr "" | |||
|
3075 | ||||
3006 | #: rhodecode/templates/summary/summary.html:211 |
|
3076 | #: rhodecode/templates/summary/summary.html:211 | |
3007 | msgid "Quick start" |
|
3077 | msgid "Quick start" | |
3008 | msgstr "" |
|
3078 | msgstr "" | |
@@ -3044,3 +3114,8 b' msgstr ""' | |||||
3044 | msgid "file removed" |
|
3114 | msgid "file removed" | |
3045 | msgstr "" |
|
3115 | msgstr "" | |
3046 |
|
3116 | |||
|
3117 | #: rhodecode/templates/tags/tags.html:5 | |||
|
3118 | #, python-format | |||
|
3119 | msgid "%s Tags" | |||
|
3120 | msgstr "" | |||
|
3121 |
@@ -109,7 +109,7 b' class _GetError(object):' | |||||
109 |
|
109 | |||
110 | def __call__(self, field_name, form_errors): |
|
110 | def __call__(self, field_name, form_errors): | |
111 | tmpl = """<span class="error_msg">%s</span>""" |
|
111 | tmpl = """<span class="error_msg">%s</span>""" | |
112 |
if form_errors and form_errors |
|
112 | if form_errors and field_name in form_errors: | |
113 | return literal(tmpl % form_errors.get(field_name)) |
|
113 | return literal(tmpl % form_errors.get(field_name)) | |
114 |
|
114 | |||
115 | get_error = _GetError() |
|
115 | get_error = _GetError() | |
@@ -118,12 +118,15 b' get_error = _GetError()' | |||||
118 | class _ToolTip(object): |
|
118 | class _ToolTip(object): | |
119 |
|
119 | |||
120 | def __call__(self, tooltip_title, trim_at=50): |
|
120 | def __call__(self, tooltip_title, trim_at=50): | |
121 | """Special function just to wrap our text into nice formatted |
|
121 | """ | |
|
122 | Special function just to wrap our text into nice formatted | |||
122 | autowrapped text |
|
123 | autowrapped text | |
123 |
|
124 | |||
124 | :param tooltip_title: |
|
125 | :param tooltip_title: | |
125 | """ |
|
126 | """ | |
126 |
|
|
127 | tooltip_title = escape(tooltip_title) | |
|
128 | tooltip_title = tooltip_title.replace('<', '<').replace('>', '>') | |||
|
129 | return tooltip_title | |||
127 | tooltip = _ToolTip() |
|
130 | tooltip = _ToolTip() | |
128 |
|
131 | |||
129 |
|
132 | |||
@@ -346,6 +349,14 b' short_id = lambda x: x[:12]' | |||||
346 | hide_credentials = lambda x: ''.join(credentials_filter(x)) |
|
349 | hide_credentials = lambda x: ''.join(credentials_filter(x)) | |
347 |
|
350 | |||
348 |
|
351 | |||
|
352 | def fmt_date(date): | |||
|
353 | if date: | |||
|
354 | return (date.strftime(_(u"%a, %d %b %Y %H:%M:%S").encode('utf8')) | |||
|
355 | .decode('utf8')) | |||
|
356 | ||||
|
357 | return "" | |||
|
358 | ||||
|
359 | ||||
349 | def is_git(repository): |
|
360 | def is_git(repository): | |
350 | if hasattr(repository, 'alias'): |
|
361 | if hasattr(repository, 'alias'): | |
351 | _type = repository.alias |
|
362 | _type = repository.alias |
@@ -30,9 +30,9 b' from inspect import isfunction' | |||||
30 | from mercurial.scmutil import revrange |
|
30 | from mercurial.scmutil import revrange | |
31 | from mercurial.node import nullrev |
|
31 | from mercurial.node import nullrev | |
32 |
|
32 | |||
33 | from rhodecode import EXTENSIONS |
|
|||
34 | from rhodecode.lib import helpers as h |
|
33 | from rhodecode.lib import helpers as h | |
35 | from rhodecode.lib.utils import action_logger |
|
34 | from rhodecode.lib.utils import action_logger | |
|
35 | from rhodecode.lib.vcs.backends.base import EmptyChangeset | |||
36 |
|
36 | |||
37 |
|
37 | |||
38 | def _get_scm_size(alias, root_path): |
|
38 | def _get_scm_size(alias, root_path): | |
@@ -99,6 +99,7 b' def log_pull_action(ui, repo, **kwargs):' | |||||
99 |
|
99 | |||
100 | action_logger(username, action, repository, extras['ip'], commit=True) |
|
100 | action_logger(username, action, repository, extras['ip'], commit=True) | |
101 | # extension hook call |
|
101 | # extension hook call | |
|
102 | from rhodecode import EXTENSIONS | |||
102 | callback = getattr(EXTENSIONS, 'PULL_HOOK', None) |
|
103 | callback = getattr(EXTENSIONS, 'PULL_HOOK', None) | |
103 |
|
104 | |||
104 | if isfunction(callback): |
|
105 | if isfunction(callback): | |
@@ -137,15 +138,18 b' def log_push_action(ui, repo, **kwargs):' | |||||
137 |
|
138 | |||
138 | stop, start = get_revs(repo, [node + ':']) |
|
139 | stop, start = get_revs(repo, [node + ':']) | |
139 | h = binascii.hexlify |
|
140 | h = binascii.hexlify | |
140 |
revs = |
|
141 | revs = [h(repo[r].node()) for r in xrange(start, stop + 1)] | |
141 | elif scm == 'git': |
|
142 | elif scm == 'git': | |
142 | revs = [] |
|
143 | revs = kwargs.get('_git_revs', []) | |
|
144 | if '_git_revs' in kwargs: | |||
|
145 | kwargs.pop('_git_revs') | |||
143 |
|
146 | |||
144 | action = action % ','.join(revs) |
|
147 | action = action % ','.join(revs) | |
145 |
|
148 | |||
146 | action_logger(username, action, repository, extras['ip'], commit=True) |
|
149 | action_logger(username, action, repository, extras['ip'], commit=True) | |
147 |
|
150 | |||
148 | # extension hook call |
|
151 | # extension hook call | |
|
152 | from rhodecode import EXTENSIONS | |||
149 | callback = getattr(EXTENSIONS, 'PUSH_HOOK', None) |
|
153 | callback = getattr(EXTENSIONS, 'PUSH_HOOK', None) | |
150 | if isfunction(callback): |
|
154 | if isfunction(callback): | |
151 | kw = {'pushed_revs': revs} |
|
155 | kw = {'pushed_revs': revs} | |
@@ -180,7 +184,7 b' def log_create_repository(repository_dic' | |||||
180 | 'repo_name' |
|
184 | 'repo_name' | |
181 |
|
185 | |||
182 | """ |
|
186 | """ | |
183 |
|
187 | from rhodecode import EXTENSIONS | ||
184 | callback = getattr(EXTENSIONS, 'CREATE_REPO_HOOK', None) |
|
188 | callback = getattr(EXTENSIONS, 'CREATE_REPO_HOOK', None) | |
185 | if isfunction(callback): |
|
189 | if isfunction(callback): | |
186 | kw = {} |
|
190 | kw = {} | |
@@ -190,3 +194,67 b' def log_create_repository(repository_dic' | |||||
190 | return callback(**kw) |
|
194 | return callback(**kw) | |
191 |
|
195 | |||
192 | return 0 |
|
196 | return 0 | |
|
197 | ||||
|
198 | ||||
|
199 | def handle_git_post_receive(repo_path, revs, env): | |||
|
200 | """ | |||
|
201 | A really hacky method that is runned by git post-receive hook and logs | |||
|
202 | an push action together with pushed revisions. It's executed by subprocess | |||
|
203 | thus needs all info to be able to create a on the fly pylons enviroment, | |||
|
204 | connect to database and run the logging code. Hacky as sh*t but works. | |||
|
205 | ||||
|
206 | :param repo_path: | |||
|
207 | :type repo_path: | |||
|
208 | :param revs: | |||
|
209 | :type revs: | |||
|
210 | :param env: | |||
|
211 | :type env: | |||
|
212 | """ | |||
|
213 | from paste.deploy import appconfig | |||
|
214 | from sqlalchemy import engine_from_config | |||
|
215 | from rhodecode.config.environment import load_environment | |||
|
216 | from rhodecode.model import init_model | |||
|
217 | from rhodecode.model.db import RhodeCodeUi | |||
|
218 | from rhodecode.lib.utils import make_ui | |||
|
219 | from rhodecode.model.db import Repository | |||
|
220 | ||||
|
221 | path, ini_name = os.path.split(env['RHODECODE_CONFIG_FILE']) | |||
|
222 | conf = appconfig('config:%s' % ini_name, relative_to=path) | |||
|
223 | load_environment(conf.global_conf, conf.local_conf) | |||
|
224 | ||||
|
225 | engine = engine_from_config(conf, 'sqlalchemy.db1.') | |||
|
226 | init_model(engine) | |||
|
227 | ||||
|
228 | baseui = make_ui('db') | |||
|
229 | repo = Repository.get_by_full_path(repo_path) | |||
|
230 | ||||
|
231 | _hooks = dict(baseui.configitems('hooks')) or {} | |||
|
232 | # if push hook is enabled via web interface | |||
|
233 | if _hooks.get(RhodeCodeUi.HOOK_PUSH): | |||
|
234 | ||||
|
235 | extras = { | |||
|
236 | 'username': env['RHODECODE_USER'], | |||
|
237 | 'repository': repo.repo_name, | |||
|
238 | 'scm': 'git', | |||
|
239 | 'action': 'push', | |||
|
240 | 'ip': env['RHODECODE_CONFIG_IP'], | |||
|
241 | } | |||
|
242 | for k, v in extras.items(): | |||
|
243 | baseui.setconfig('rhodecode_extras', k, v) | |||
|
244 | repo = repo.scm_instance | |||
|
245 | repo.ui = baseui | |||
|
246 | old_rev, new_rev, ref = revs | |||
|
247 | if old_rev == EmptyChangeset().raw_id: | |||
|
248 | cmd = "for-each-ref --format='%(refname)' 'refs/heads/*'" | |||
|
249 | heads = repo.run_git_command(cmd)[0] | |||
|
250 | heads = heads.replace(ref, '') | |||
|
251 | heads = ' '.join(map(lambda c: c.strip('\n').strip(), | |||
|
252 | heads.splitlines())) | |||
|
253 | cmd = ('log ' + new_rev + | |||
|
254 | ' --reverse --pretty=format:"%H" --not ' + heads) | |||
|
255 | else: | |||
|
256 | cmd = ('log ' + old_rev + '..' + new_rev + | |||
|
257 | ' --reverse --pretty=format:"%H"') | |||
|
258 | git_revs = repo.run_git_command(cmd)[0].splitlines() | |||
|
259 | ||||
|
260 | log_push_action(baseui, repo, _git_revs=git_revs) |
@@ -41,7 +41,7 b' class GitRepository(object):' | |||||
41 | git_folder_signature = set(['config', 'head', 'info', 'objects', 'refs']) |
|
41 | git_folder_signature = set(['config', 'head', 'info', 'objects', 'refs']) | |
42 | commands = ['git-upload-pack', 'git-receive-pack'] |
|
42 | commands = ['git-upload-pack', 'git-receive-pack'] | |
43 |
|
43 | |||
44 | def __init__(self, repo_name, content_path): |
|
44 | def __init__(self, repo_name, content_path, username): | |
45 | files = set([f.lower() for f in os.listdir(content_path)]) |
|
45 | files = set([f.lower() for f in os.listdir(content_path)]) | |
46 | if not (self.git_folder_signature.intersection(files) |
|
46 | if not (self.git_folder_signature.intersection(files) | |
47 | == self.git_folder_signature): |
|
47 | == self.git_folder_signature): | |
@@ -50,6 +50,7 b' class GitRepository(object):' | |||||
50 | self.valid_accepts = ['application/x-%s-result' % |
|
50 | self.valid_accepts = ['application/x-%s-result' % | |
51 | c for c in self.commands] |
|
51 | c for c in self.commands] | |
52 | self.repo_name = repo_name |
|
52 | self.repo_name = repo_name | |
|
53 | self.username = username | |||
53 |
|
54 | |||
54 | def _get_fixedpath(self, path): |
|
55 | def _get_fixedpath(self, path): | |
55 | """ |
|
56 | """ | |
@@ -115,11 +116,26 b' class GitRepository(object):' | |||||
115 | inputstream = environ['wsgi.input'] |
|
116 | inputstream = environ['wsgi.input'] | |
116 |
|
117 | |||
117 | try: |
|
118 | try: | |
|
119 | gitenv = os.environ | |||
|
120 | from rhodecode import CONFIG | |||
|
121 | from rhodecode.lib.base import _get_ip_addr | |||
|
122 | gitenv['RHODECODE_USER'] = self.username | |||
|
123 | gitenv['RHODECODE_CONFIG_IP'] = _get_ip_addr(environ) | |||
|
124 | # forget all configs | |||
|
125 | gitenv['GIT_CONFIG_NOGLOBAL'] = '1' | |||
|
126 | # we need current .ini file used to later initialize rhodecode | |||
|
127 | # env and connect to db | |||
|
128 | gitenv['RHODECODE_CONFIG_FILE'] = CONFIG['__file__'] | |||
|
129 | opts = dict( | |||
|
130 | env=gitenv, | |||
|
131 | cwd=os.getcwd() | |||
|
132 | ) | |||
118 | out = subprocessio.SubprocessIOChunker( |
|
133 | out = subprocessio.SubprocessIOChunker( | |
119 | r'git %s --stateless-rpc "%s"' % (git_command[4:], |
|
134 | r'git %s --stateless-rpc "%s"' % (git_command[4:], | |
120 | self.content_path), |
|
135 | self.content_path), | |
121 | inputstream=inputstream |
|
136 | inputstream=inputstream, | |
122 |
|
|
137 | **opts | |
|
138 | ) | |||
123 | except EnvironmentError, e: |
|
139 | except EnvironmentError, e: | |
124 | log.exception(e) |
|
140 | log.exception(e) | |
125 | raise exc.HTTPExpectationFailed() |
|
141 | raise exc.HTTPExpectationFailed() | |
@@ -156,7 +172,7 b' class GitRepository(object):' | |||||
156 |
|
172 | |||
157 | class GitDirectory(object): |
|
173 | class GitDirectory(object): | |
158 |
|
174 | |||
159 | def __init__(self, repo_root, repo_name): |
|
175 | def __init__(self, repo_root, repo_name, username): | |
160 | repo_location = os.path.join(repo_root, repo_name) |
|
176 | repo_location = os.path.join(repo_root, repo_name) | |
161 | if not os.path.isdir(repo_location): |
|
177 | if not os.path.isdir(repo_location): | |
162 | raise OSError(repo_location) |
|
178 | raise OSError(repo_location) | |
@@ -164,18 +180,20 b' class GitDirectory(object):' | |||||
164 | self.content_path = repo_location |
|
180 | self.content_path = repo_location | |
165 | self.repo_name = repo_name |
|
181 | self.repo_name = repo_name | |
166 | self.repo_location = repo_location |
|
182 | self.repo_location = repo_location | |
|
183 | self.username = username | |||
167 |
|
184 | |||
168 | def __call__(self, environ, start_response): |
|
185 | def __call__(self, environ, start_response): | |
169 | content_path = self.content_path |
|
186 | content_path = self.content_path | |
170 | try: |
|
187 | try: | |
171 | app = GitRepository(self.repo_name, content_path) |
|
188 | app = GitRepository(self.repo_name, content_path, self.username) | |
172 | except (AssertionError, OSError): |
|
189 | except (AssertionError, OSError): | |
173 | if os.path.isdir(os.path.join(content_path, '.git')): |
|
190 | if os.path.isdir(os.path.join(content_path, '.git')): | |
174 |
app = GitRepository( |
|
191 | app = GitRepository(self.repo_name, | |
|
192 | os.path.join(content_path, '.git')) | |||
175 | else: |
|
193 | else: | |
176 | return exc.HTTPNotFound()(environ, start_response) |
|
194 | return exc.HTTPNotFound()(environ, start_response, self.username) | |
177 | return app(environ, start_response) |
|
195 | return app(environ, start_response) | |
178 |
|
196 | |||
179 |
|
197 | |||
180 | def make_wsgi_app(repo_name, repo_root): |
|
198 | def make_wsgi_app(repo_name, repo_root, username): | |
181 | return GitDirectory(repo_root, repo_name) |
|
199 | return GitDirectory(repo_root, repo_name, username) |
@@ -68,8 +68,9 b' dulserver.DEFAULT_HANDLERS = {' | |||||
68 | 'git-receive-pack': dulserver.ReceivePackHandler, |
|
68 | 'git-receive-pack': dulserver.ReceivePackHandler, | |
69 | } |
|
69 | } | |
70 |
|
70 | |||
71 | from dulwich.repo import Repo |
|
71 | # not used for now until dulwich get's fixed | |
72 |
from dulwich. |
|
72 | #from dulwich.repo import Repo | |
|
73 | #from dulwich.web import make_wsgi_chain | |||
73 |
|
74 | |||
74 | from paste.httpheaders import REMOTE_USER, AUTH_TYPE |
|
75 | from paste.httpheaders import REMOTE_USER, AUTH_TYPE | |
75 |
|
76 | |||
@@ -77,7 +78,7 b' from rhodecode.lib.utils2 import safe_st' | |||||
77 | from rhodecode.lib.base import BaseVCSController |
|
78 | from rhodecode.lib.base import BaseVCSController | |
78 | from rhodecode.lib.auth import get_container_username |
|
79 | from rhodecode.lib.auth import get_container_username | |
79 | from rhodecode.lib.utils import is_valid_repo, make_ui |
|
80 | from rhodecode.lib.utils import is_valid_repo, make_ui | |
80 | from rhodecode.model.db import User |
|
81 | from rhodecode.model.db import User, RhodeCodeUi | |
81 |
|
82 | |||
82 | from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError |
|
83 | from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError | |
83 |
|
84 | |||
@@ -205,13 +206,13 b' class SimpleGit(BaseVCSController):' | |||||
205 | self._handle_githooks(repo_name, action, baseui, environ) |
|
206 | self._handle_githooks(repo_name, action, baseui, environ) | |
206 |
|
207 | |||
207 | log.info('%s action on GIT repo "%s"' % (action, repo_name)) |
|
208 | log.info('%s action on GIT repo "%s"' % (action, repo_name)) | |
208 | app = self.__make_app(repo_name, repo_path) |
|
209 | app = self.__make_app(repo_name, repo_path, username) | |
209 | return app(environ, start_response) |
|
210 | return app(environ, start_response) | |
210 | except Exception: |
|
211 | except Exception: | |
211 | log.error(traceback.format_exc()) |
|
212 | log.error(traceback.format_exc()) | |
212 | return HTTPInternalServerError()(environ, start_response) |
|
213 | return HTTPInternalServerError()(environ, start_response) | |
213 |
|
214 | |||
214 | def __make_app(self, repo_name, repo_path): |
|
215 | def __make_app(self, repo_name, repo_path, username): | |
215 | """ |
|
216 | """ | |
216 | Make an wsgi application using dulserver |
|
217 | Make an wsgi application using dulserver | |
217 |
|
218 | |||
@@ -223,6 +224,7 b' class SimpleGit(BaseVCSController):' | |||||
223 | app = make_wsgi_app( |
|
224 | app = make_wsgi_app( | |
224 | repo_root=os.path.dirname(repo_path), |
|
225 | repo_root=os.path.dirname(repo_path), | |
225 | repo_name=repo_name, |
|
226 | repo_name=repo_name, | |
|
227 | username=username, | |||
226 | ) |
|
228 | ) | |
227 | return app |
|
229 | return app | |
228 |
|
230 | |||
@@ -268,7 +270,10 b' class SimpleGit(BaseVCSController):' | |||||
268 | return op |
|
270 | return op | |
269 |
|
271 | |||
270 | def _handle_githooks(self, repo_name, action, baseui, environ): |
|
272 | def _handle_githooks(self, repo_name, action, baseui, environ): | |
271 | from rhodecode.lib.hooks import log_pull_action, log_push_action |
|
273 | """ | |
|
274 | Handles pull action, push is handled by post-receive hook | |||
|
275 | """ | |||
|
276 | from rhodecode.lib.hooks import log_pull_action | |||
272 | service = environ['QUERY_STRING'].split('=') |
|
277 | service = environ['QUERY_STRING'].split('=') | |
273 | if len(service) < 2: |
|
278 | if len(service) < 2: | |
274 | return |
|
279 | return | |
@@ -278,12 +283,8 b' class SimpleGit(BaseVCSController):' | |||||
278 | _repo = _repo.scm_instance |
|
283 | _repo = _repo.scm_instance | |
279 | _repo._repo.ui = baseui |
|
284 | _repo._repo.ui = baseui | |
280 |
|
285 | |||
281 | push_hook = 'pretxnchangegroup.push_logger' |
|
|||
282 | pull_hook = 'preoutgoing.pull_logger' |
|
|||
283 | _hooks = dict(baseui.configitems('hooks')) or {} |
|
286 | _hooks = dict(baseui.configitems('hooks')) or {} | |
284 |
if action == 'pu |
|
287 | if action == 'pull' and _hooks.get(RhodeCodeUi.HOOK_PULL): | |
285 | log_push_action(ui=baseui, repo=_repo._repo) |
|
|||
286 | elif action == 'pull' and _hooks.get(pull_hook): |
|
|||
287 | log_pull_action(ui=baseui, repo=_repo._repo) |
|
288 | log_pull_action(ui=baseui, repo=_repo._repo) | |
288 |
|
289 | |||
289 | def __inject_extras(self, repo_path, baseui, extras={}): |
|
290 | def __inject_extras(self, repo_path, baseui, extras={}): |
@@ -276,7 +276,7 b' class BufferedGenerator():' | |||||
276 | return self.data[i] |
|
276 | return self.data[i] | |
277 |
|
277 | |||
278 |
|
278 | |||
279 | class SubprocessIOChunker(): |
|
279 | class SubprocessIOChunker(object): | |
280 | ''' |
|
280 | ''' | |
281 | Processor class wrapping handling of subprocess IO. |
|
281 | Processor class wrapping handling of subprocess IO. | |
282 |
|
282 | |||
@@ -321,7 +321,7 b' class SubprocessIOChunker():' | |||||
321 |
|
321 | |||
322 | ''' |
|
322 | ''' | |
323 | def __init__(self, cmd, inputstream=None, buffer_size=65536, |
|
323 | def __init__(self, cmd, inputstream=None, buffer_size=65536, | |
324 | chunk_size=4096, starting_values=[]): |
|
324 | chunk_size=4096, starting_values=[], **kwargs): | |
325 | ''' |
|
325 | ''' | |
326 | Initializes SubprocessIOChunker |
|
326 | Initializes SubprocessIOChunker | |
327 |
|
327 | |||
@@ -342,7 +342,8 b' class SubprocessIOChunker():' | |||||
342 | shell=True, |
|
342 | shell=True, | |
343 | stdin=inputstream, |
|
343 | stdin=inputstream, | |
344 | stdout=subprocess.PIPE, |
|
344 | stdout=subprocess.PIPE, | |
345 | stderr=subprocess.PIPE |
|
345 | stderr=subprocess.PIPE, | |
|
346 | **kwargs | |||
346 | ) |
|
347 | ) | |
347 |
|
348 | |||
348 | bg_out = BufferedGenerator(_p.stdout, buffer_size, chunk_size, starting_values) |
|
349 | bg_out = BufferedGenerator(_p.stdout, buffer_size, chunk_size, starting_values) |
@@ -242,7 +242,7 b' class RhodeCodeUi(Base, BaseModel):' | |||||
242 |
|
242 | |||
243 | HOOK_UPDATE = 'changegroup.update' |
|
243 | HOOK_UPDATE = 'changegroup.update' | |
244 | HOOK_REPO_SIZE = 'changegroup.repo_size' |
|
244 | HOOK_REPO_SIZE = 'changegroup.repo_size' | |
245 |
HOOK_PUSH = ' |
|
245 | HOOK_PUSH = 'changegroup.push_logger' | |
246 | HOOK_PULL = 'preoutgoing.pull_logger' |
|
246 | HOOK_PULL = 'preoutgoing.pull_logger' | |
247 |
|
247 | |||
248 | ui_id = Column("ui_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
|
248 | ui_id = Column("ui_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) | |
@@ -273,6 +273,10 b' class RhodeCodeUi(Base, BaseModel):' | |||||
273 | return q.all() |
|
273 | return q.all() | |
274 |
|
274 | |||
275 | @classmethod |
|
275 | @classmethod | |
|
276 | def get_repos_location(cls): | |||
|
277 | return cls.get_by_key('/').one().ui_value | |||
|
278 | ||||
|
279 | @classmethod | |||
276 | def create_or_update_hook(cls, key, val): |
|
280 | def create_or_update_hook(cls, key, val): | |
277 | new_ui = cls.get_by_key(key).scalar() or cls() |
|
281 | new_ui = cls.get_by_key(key).scalar() or cls() | |
278 | new_ui.ui_section = 'hooks' |
|
282 | new_ui.ui_section = 'hooks' | |
@@ -587,6 +591,11 b' class Repository(Base, BaseModel):' | |||||
587 | return q.scalar() |
|
591 | return q.scalar() | |
588 |
|
592 | |||
589 | @classmethod |
|
593 | @classmethod | |
|
594 | def get_by_full_path(cls, repo_full_path): | |||
|
595 | repo_name = repo_full_path.split(cls.base_path(), 1)[-1] | |||
|
596 | return cls.get_by_repo_name(repo_name.strip(URL_SEP)) | |||
|
597 | ||||
|
598 | @classmethod | |||
590 | def get_repo_forks(cls, repo_id): |
|
599 | def get_repo_forks(cls, repo_id): | |
591 | return cls.query().filter(Repository.fork_id == repo_id) |
|
600 | return cls.query().filter(Repository.fork_id == repo_id) | |
592 |
|
601 |
@@ -731,7 +731,7 b' def ApplicationUiSettingsForm():' | |||||
731 | paths_root_path = All(ValidPath(), UnicodeString(strip=True, min=1, not_empty=True)) |
|
731 | paths_root_path = All(ValidPath(), UnicodeString(strip=True, min=1, not_empty=True)) | |
732 | hooks_changegroup_update = OneOf(['True', 'False'], if_missing=False) |
|
732 | hooks_changegroup_update = OneOf(['True', 'False'], if_missing=False) | |
733 | hooks_changegroup_repo_size = OneOf(['True', 'False'], if_missing=False) |
|
733 | hooks_changegroup_repo_size = OneOf(['True', 'False'], if_missing=False) | |
734 |
hooks_ |
|
734 | hooks_changegroup_push_logger = OneOf(['True', 'False'], if_missing=False) | |
735 | hooks_preoutgoing_pull_logger = OneOf(['True', 'False'], if_missing=False) |
|
735 | hooks_preoutgoing_pull_logger = OneOf(['True', 'False'], if_missing=False) | |
736 |
|
736 | |||
737 | return _ApplicationUiSettingsForm |
|
737 | return _ApplicationUiSettingsForm |
@@ -31,7 +31,8 b' from sqlalchemy.exc import DatabaseError' | |||||
31 | from rhodecode.lib.caching_query import FromCache |
|
31 | from rhodecode.lib.caching_query import FromCache | |
32 |
|
32 | |||
33 | from rhodecode.model import BaseModel |
|
33 | from rhodecode.model import BaseModel | |
34 | from rhodecode.model.db import User, Permission, UserToPerm, UserRepoToPerm |
|
34 | from rhodecode.model.db import User, Permission, UserToPerm, UserRepoToPerm,\ | |
|
35 | UserRepoGroupToPerm | |||
35 |
|
36 | |||
36 | log = logging.getLogger(__name__) |
|
37 | log = logging.getLogger(__name__) | |
37 |
|
38 | |||
@@ -87,23 +88,33 b' class PermissionModel(BaseModel):' | |||||
87 | form_result['default_perm']) |
|
88 | form_result['default_perm']) | |
88 | self.sa.add(p) |
|
89 | self.sa.add(p) | |
89 |
|
90 | |||
90 | if p.permission.permission_name.startswith('hg.register.'): |
|
91 | elif p.permission.permission_name.startswith('hg.register.'): | |
91 | p.permission = self.get_permission_by_name( |
|
92 | p.permission = self.get_permission_by_name( | |
92 | form_result['default_register']) |
|
93 | form_result['default_register']) | |
93 | self.sa.add(p) |
|
94 | self.sa.add(p) | |
94 |
|
95 | |||
95 | if p.permission.permission_name.startswith('hg.create.'): |
|
96 | elif p.permission.permission_name.startswith('hg.create.'): | |
96 | p.permission = self.get_permission_by_name( |
|
97 | p.permission = self.get_permission_by_name( | |
97 | form_result['default_create']) |
|
98 | form_result['default_create']) | |
98 | self.sa.add(p) |
|
99 | self.sa.add(p) | |
99 |
|
100 | |||
|
101 | _def_name = form_result['default_perm'].split('repository.')[-1] | |||
100 | #stage 2 update all default permissions for repos if checked |
|
102 | #stage 2 update all default permissions for repos if checked | |
101 | if form_result['overwrite_default'] == True: |
|
103 | if form_result['overwrite_default'] == True: | |
|
104 | _def = self.get_permission_by_name('repository.' + _def_name) | |||
|
105 | # repos | |||
102 | for r2p in self.sa.query(UserRepoToPerm)\ |
|
106 | for r2p in self.sa.query(UserRepoToPerm)\ | |
103 |
.filter(UserRepoToPerm.user == perm_user) |
|
107 | .filter(UserRepoToPerm.user == perm_user)\ | |
104 | r2p.permission = self.get_permission_by_name( |
|
108 | .all(): | |
105 | form_result['default_perm']) |
|
109 | r2p.permission = _def | |
106 | self.sa.add(r2p) |
|
110 | self.sa.add(r2p) | |
|
111 | # groups | |||
|
112 | _def = self.get_permission_by_name('group.' + _def_name) | |||
|
113 | for g2p in self.sa.query(UserRepoGroupToPerm)\ | |||
|
114 | .filter(UserRepoGroupToPerm.user == perm_user)\ | |||
|
115 | .all(): | |||
|
116 | g2p.permission = _def | |||
|
117 | self.sa.add(g2p) | |||
107 |
|
118 | |||
108 | # stage 3 set anonymous access |
|
119 | # stage 3 set anonymous access | |
109 | if perm_user.username == 'default': |
|
120 | if perm_user.username == 'default': |
@@ -22,10 +22,13 b'' | |||||
22 | # |
|
22 | # | |
23 | # You should have received a copy of the GNU General Public License |
|
23 | # You should have received a copy of the GNU General Public License | |
24 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
24 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
|
25 | from __future__ import with_statement | |||
25 | import os |
|
26 | import os | |
26 | import shutil |
|
27 | import shutil | |
27 | import logging |
|
28 | import logging | |
28 | import traceback |
|
29 | import traceback | |
|
30 | import pkg_resources | |||
|
31 | from os.path import dirname as dn, join as jn | |||
29 | from datetime import datetime |
|
32 | from datetime import datetime | |
30 |
|
33 | |||
31 | from rhodecode.lib.vcs.backends import get_backend |
|
34 | from rhodecode.lib.vcs.backends import get_backend | |
@@ -461,7 +464,23 b' class RepoModel(BaseModel):' | |||||
461 | if alias == 'hg': |
|
464 | if alias == 'hg': | |
462 | backend(repo_path, create=True, src_url=clone_uri) |
|
465 | backend(repo_path, create=True, src_url=clone_uri) | |
463 | elif alias == 'git': |
|
466 | elif alias == 'git': | |
464 | backend(repo_path, create=True, src_url=clone_uri, bare=True) |
|
467 | r = backend(repo_path, create=True, src_url=clone_uri, bare=True) | |
|
468 | # add rhodecode hook into this repo | |||
|
469 | ||||
|
470 | loc = jn(r.path, 'hooks') | |||
|
471 | if not r.bare: | |||
|
472 | loc = jn(r.path, '.git', 'hooks') | |||
|
473 | if not os.path.isdir(loc): | |||
|
474 | os.makedirs(loc) | |||
|
475 | ||||
|
476 | tmpl = pkg_resources.resource_string( | |||
|
477 | 'rhodecode', jn('config', 'post_receive_tmpl.py') | |||
|
478 | ) | |||
|
479 | _hook_file = jn(loc, 'post-receive') | |||
|
480 | with open(_hook_file, 'wb') as f: | |||
|
481 | f.write(tmpl) | |||
|
482 | os.chmod(_hook_file, 0755) | |||
|
483 | ||||
465 | else: |
|
484 | else: | |
466 | raise Exception('Undefined alias %s' % alias) |
|
485 | raise Exception('Undefined alias %s' % alias) | |
467 |
|
486 |
@@ -611,8 +611,8 b' var renderInlineComments = function(file' | |||||
611 | } |
|
611 | } | |
612 |
|
612 | |||
613 |
|
613 | |||
614 |
var fileBrowserListeners = function(current_url, node_list_url, url_base |
|
614 | var fileBrowserListeners = function(current_url, node_list_url, url_base){ | |
615 | truncated_lbl, nomatch_lbl){ |
|
615 | ||
616 | var current_url_branch = +"?branch=__BRANCH__"; |
|
616 | var current_url_branch = +"?branch=__BRANCH__"; | |
617 | var url = url_base; |
|
617 | var url = url_base; | |
618 | var node_url = node_list_url; |
|
618 | var node_url = node_list_url; | |
@@ -641,7 +641,7 b' var fileBrowserListeners = function(curr' | |||||
641 | YUC.initHeader('X-PARTIAL-XHR',true); |
|
641 | YUC.initHeader('X-PARTIAL-XHR',true); | |
642 | YUC.asyncRequest('GET',url,{ |
|
642 | YUC.asyncRequest('GET',url,{ | |
643 | success:function(o){ |
|
643 | success:function(o){ | |
644 | nodes = JSON.parse(o.responseText); |
|
644 | nodes = JSON.parse(o.responseText).nodes; | |
645 | YUD.setStyle('node_filter_box_loading','display','none'); |
|
645 | YUD.setStyle('node_filter_box_loading','display','none'); | |
646 | YUD.setStyle('node_filter_box','display',''); |
|
646 | YUD.setStyle('node_filter_box','display',''); | |
647 | n_filter.focus(); |
|
647 | n_filter.focus(); | |
@@ -685,9 +685,8 b' var fileBrowserListeners = function(curr' | |||||
685 | match.push('<tr><td><a class="browser-{0}" href="{1}">{2}</a></td><td colspan="5"></td></tr>'.format(t,node_url.replace('__FPATH__',n),n_hl)); |
|
685 | match.push('<tr><td><a class="browser-{0}" href="{1}">{2}</a></td><td colspan="5"></td></tr>'.format(t,node_url.replace('__FPATH__',n),n_hl)); | |
686 | } |
|
686 | } | |
687 | if(match.length >= matches_max){ |
|
687 | if(match.length >= matches_max){ | |
688 |
match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(truncated |
|
688 | match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(_TM['search truncated'])); | |
689 | } |
|
689 | } | |
690 |
|
||||
691 | } |
|
690 | } | |
692 | } |
|
691 | } | |
693 | if(query != ""){ |
|
692 | if(query != ""){ | |
@@ -695,7 +694,7 b' var fileBrowserListeners = function(curr' | |||||
695 | YUD.setStyle('tbody_filtered','display',''); |
|
694 | YUD.setStyle('tbody_filtered','display',''); | |
696 |
|
695 | |||
697 | if (match.length==0){ |
|
696 | if (match.length==0){ | |
698 |
match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format( |
|
697 | match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(_TM['no matching files'])); | |
699 | } |
|
698 | } | |
700 |
|
699 | |||
701 | YUD.get('tbody_filtered').innerHTML = match.join(""); |
|
700 | YUD.get('tbody_filtered').innerHTML = match.join(""); |
@@ -25,7 +25,7 b'' | |||||
25 | %endif |
|
25 | %endif | |
26 | </td> |
|
26 | </td> | |
27 |
|
27 | |||
28 | <td>${l.action_date}</td> |
|
28 | <td>${h.fmt_date(l.action_date)}</td> | |
29 | <td>${l.user_ip}</td> |
|
29 | <td>${l.user_ip}</td> | |
30 | </tr> |
|
30 | </tr> | |
31 | %endfor |
|
31 | %endfor |
@@ -16,7 +16,7 b'' | |||||
16 | ${_('private repository')} |
|
16 | ${_('private repository')} | |
17 | </span> |
|
17 | </span> | |
18 | </td> |
|
18 | </td> | |
19 |
<td class="private_repo_msg"><img style="vertical-align:bottom" src="${h.url('/images/icons/user.png')}"/>${ |
|
19 | <td class="private_repo_msg"><img style="vertical-align:bottom" src="${h.url('/images/icons/user.png')}"/>${_('default')}</td> | |
20 | </tr> |
|
20 | </tr> | |
21 | %else: |
|
21 | %else: | |
22 | <tr id="id${id(r2p.user.username)}"> |
|
22 | <tr id="id${id(r2p.user.username)}"> | |
@@ -25,7 +25,7 b'' | |||||
25 | <td>${h.radio('u_perm_%s' % r2p.user.username,'repository.write')}</td> |
|
25 | <td>${h.radio('u_perm_%s' % r2p.user.username,'repository.write')}</td> | |
26 | <td>${h.radio('u_perm_%s' % r2p.user.username,'repository.admin')}</td> |
|
26 | <td>${h.radio('u_perm_%s' % r2p.user.username,'repository.admin')}</td> | |
27 | <td style="white-space: nowrap;"> |
|
27 | <td style="white-space: nowrap;"> | |
28 | <img class="perm-gravatar" src="${h.gravatar_url(r2p.user.email,14)}"/>${r2p.user.username} |
|
28 | <img class="perm-gravatar" src="${h.gravatar_url(r2p.user.email,14)}"/>${r2p.user.username if r2p.user.username != 'default' else _('default')} | |
29 | </td> |
|
29 | </td> | |
30 | <td> |
|
30 | <td> | |
31 | %if r2p.user.username !='default': |
|
31 | %if r2p.user.username !='default': |
@@ -56,7 +56,7 b'' | |||||
56 | </td> |
|
56 | </td> | |
57 | ##LAST CHANGE |
|
57 | ##LAST CHANGE | |
58 | <td> |
|
58 | <td> | |
59 | <span class="tooltip" title="${repo['last_change']}">${h.age(repo['last_change'])}</span> |
|
59 | <span class="tooltip" title="${h.tooltip(repo['last_change'])}">${h.age(repo['last_change'])}</span> | |
60 | </td> |
|
60 | </td> | |
61 | ##LAST REVISION |
|
61 | ##LAST REVISION | |
62 | <td> |
|
62 | <td> |
@@ -15,7 +15,7 b'' | |||||
15 | <td>${h.radio('u_perm_%s' % r2p.user.username,'group.write')}</td> |
|
15 | <td>${h.radio('u_perm_%s' % r2p.user.username,'group.write')}</td> | |
16 | <td>${h.radio('u_perm_%s' % r2p.user.username,'group.admin')}</td> |
|
16 | <td>${h.radio('u_perm_%s' % r2p.user.username,'group.admin')}</td> | |
17 | <td style="white-space: nowrap;"> |
|
17 | <td style="white-space: nowrap;"> | |
18 | <img class="perm-gravatar" src="${h.gravatar_url(r2p.user.email,14)}"/>${r2p.user.username} |
|
18 | <img class="perm-gravatar" src="${h.gravatar_url(r2p.user.email,14)}"/>${r2p.user.username if r2p.user.username != 'default' else _('default')} | |
19 | </td> |
|
19 | </td> | |
20 | <td> |
|
20 | <td> | |
21 | %if r2p.user.username !='default': |
|
21 | %if r2p.user.username !='default': |
@@ -148,8 +148,8 b'' | |||||
148 | <label for="hooks_changegroup_repo_size">${_('Show repository size after push')}</label> |
|
148 | <label for="hooks_changegroup_repo_size">${_('Show repository size after push')}</label> | |
149 | </div> |
|
149 | </div> | |
150 | <div class="checkbox"> |
|
150 | <div class="checkbox"> | |
151 |
${h.checkbox('hooks_ |
|
151 | ${h.checkbox('hooks_changegroup_push_logger','True')} | |
152 |
<label for="hooks_ |
|
152 | <label for="hooks_changegroup_push_logger">${_('Log user push commands')}</label> | |
153 | </div> |
|
153 | </div> | |
154 | <div class="checkbox"> |
|
154 | <div class="checkbox"> | |
155 | ${h.checkbox('hooks_preoutgoing_pull_logger','True')} |
|
155 | ${h.checkbox('hooks_preoutgoing_pull_logger','True')} |
@@ -40,13 +40,13 b'' | |||||
40 | <th class="left">${_('action')}</th> |
|
40 | <th class="left">${_('action')}</th> | |
41 | </tr> |
|
41 | </tr> | |
42 | %for cnt,user in enumerate(c.users_list): |
|
42 | %for cnt,user in enumerate(c.users_list): | |
43 | %if user.name !='default': |
|
43 | %if user.username !='default': | |
44 | <tr class="parity${cnt%2}"> |
|
44 | <tr class="parity${cnt%2}"> | |
45 | <td><div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(user.email,24)}"/> </div></td> |
|
45 | <td><div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(user.email,24)}"/> </div></td> | |
46 | <td>${h.link_to(user.username,h.url('edit_user', id=user.user_id))}</td> |
|
46 | <td>${h.link_to(user.username,h.url('edit_user', id=user.user_id))}</td> | |
47 | <td>${user.name}</td> |
|
47 | <td>${user.name}</td> | |
48 | <td>${user.lastname}</td> |
|
48 | <td>${user.lastname}</td> | |
49 | <td>${user.last_login}</td> |
|
49 | <td>${h.fmt_date(user.last_login)}</td> | |
50 | <td>${h.bool2icon(user.active)}</td> |
|
50 | <td>${h.bool2icon(user.active)}</td> | |
51 | <td>${h.bool2icon(user.admin)}</td> |
|
51 | <td>${h.bool2icon(user.admin)}</td> | |
52 | <td>${h.bool2icon(bool(user.ldap_dn))}</td> |
|
52 | <td>${h.bool2icon(bool(user.ldap_dn))}</td> |
@@ -37,7 +37,7 b'' | |||||
37 | %for cnt,u_group in enumerate(c.users_groups_list): |
|
37 | %for cnt,u_group in enumerate(c.users_groups_list): | |
38 | <tr class="parity${cnt%2}"> |
|
38 | <tr class="parity${cnt%2}"> | |
39 | <td>${h.link_to(u_group.users_group_name,h.url('edit_users_group', id=u_group.users_group_id))}</td> |
|
39 | <td>${h.link_to(u_group.users_group_name,h.url('edit_users_group', id=u_group.users_group_id))}</td> | |
40 | <td><span class="tooltip" title="${', '.join(map(h.safe_unicode,[x.user.username for x in u_group.members[:50]]))}">${len(u_group.members)}</span></td> |
|
40 | <td><span class="tooltip" title="${h.tooltip(', '.join(map(h.safe_unicode,[x.user.username for x in u_group.members[:50]])))}">${len(u_group.members)}</span></td> | |
41 | <td>${h.bool2icon(u_group.users_group_active)}</td> |
|
41 | <td>${h.bool2icon(u_group.users_group_active)}</td> | |
42 | <td> |
|
42 | <td> | |
43 | ${h.form(url('users_group', id=u_group.users_group_id),method='delete')} |
|
43 | ${h.form(url('users_group', id=u_group.users_group_id),method='delete')} |
@@ -43,7 +43,9 b'' | |||||
43 | 'Stop following this repository':"${_('Stop following this repository')}", |
|
43 | 'Stop following this repository':"${_('Stop following this repository')}", | |
44 | 'Start following this repository':"${_('Start following this repository')}", |
|
44 | 'Start following this repository':"${_('Start following this repository')}", | |
45 | 'Group':"${_('Group')}", |
|
45 | 'Group':"${_('Group')}", | |
46 | 'members':"${_('members')}" |
|
46 | 'members':"${_('members')}", | |
|
47 | 'search truncated': "${_('search truncated')}", | |||
|
48 | 'no matching files': "${_('no matching files')}" | |||
47 |
|
49 | |||
48 | }; |
|
50 | }; | |
49 | var _TM = TRANSLATION_MAP; |
|
51 | var _TM = TRANSLATION_MAP; | |
@@ -137,6 +139,8 b'' | |||||
137 | </%def> |
|
139 | </%def> | |
138 | <%def name="js_extra()"></%def> |
|
140 | <%def name="js_extra()"></%def> | |
139 | ${self.js()} |
|
141 | ${self.js()} | |
|
142 | <%def name="head_extra()"></%def> | |||
|
143 | ${self.head_extra()} | |||
140 | </head> |
|
144 | </head> | |
141 | <body id="body"> |
|
145 | <body id="body"> | |
142 | ## IE hacks |
|
146 | ## IE hacks |
@@ -2,7 +2,7 b'' | |||||
2 | <%inherit file="/base/base.html"/> |
|
2 | <%inherit file="/base/base.html"/> | |
3 |
|
3 | |||
4 | <%def name="title()"> |
|
4 | <%def name="title()"> | |
5 |
${ |
|
5 | ${_('%s Bookmarks') % c.repo_name} - ${c.rhodecode_name} | |
6 | </%def> |
|
6 | </%def> | |
7 |
|
7 | |||
8 |
|
8 |
@@ -17,7 +17,7 b'' | |||||
17 | h.url('files_home',repo_name=c.repo_name,revision=book[1].raw_id))}</span> |
|
17 | h.url('files_home',repo_name=c.repo_name,revision=book[1].raw_id))}</span> | |
18 | </span> |
|
18 | </span> | |
19 | </td> |
|
19 | </td> | |
20 | <td><span class="tooltip" title="${h.age(book[1].date)}">${book[1].date}</span></td> |
|
20 | <td><span class="tooltip" title="${h.tooltip(h.age(book[1].date))}">${h.fmt_date(book[1].date)}</span></td> | |
21 | <td title="${book[1].author}">${h.person(book[1].author)}</td> |
|
21 | <td title="${book[1].author}">${h.person(book[1].author)}</td> | |
22 | <td> |
|
22 | <td> | |
23 | <div> |
|
23 | <div> |
@@ -2,7 +2,7 b'' | |||||
2 | <%inherit file="/base/base.html"/> |
|
2 | <%inherit file="/base/base.html"/> | |
3 |
|
3 | |||
4 | <%def name="title()"> |
|
4 | <%def name="title()"> | |
5 |
${ |
|
5 | ${_('%s Branches') % c.repo_name} - ${c.rhodecode_name} | |
6 | </%def> |
|
6 | </%def> | |
7 |
|
7 | |||
8 | <%def name="breadcrumbs_links()"> |
|
8 | <%def name="breadcrumbs_links()"> |
@@ -18,7 +18,7 b'' | |||||
18 | h.url('files_home',repo_name=c.repo_name,revision=branch[1].raw_id))}</span> |
|
18 | h.url('files_home',repo_name=c.repo_name,revision=branch[1].raw_id))}</span> | |
19 | </span> |
|
19 | </span> | |
20 | </td> |
|
20 | </td> | |
21 | <td><span class="tooltip" title="${h.age(branch[1].date)}">${branch[1].date}</span></td> |
|
21 | <td><span class="tooltip" title="${h.tooltip(h.age(branch[1].date))}">${h.fmt_date(branch[1].date)}</span></td> | |
22 | <td title="${branch[1].author}">${h.person(branch[1].author)}</td> |
|
22 | <td title="${branch[1].author}">${h.person(branch[1].author)}</td> | |
23 | <td> |
|
23 | <td> | |
24 | <div> |
|
24 | <div> | |
@@ -40,7 +40,7 b'' | |||||
40 | h.url('changeset_home',repo_name=c.repo_name,revision=branch[1].raw_id))}</span> |
|
40 | h.url('changeset_home',repo_name=c.repo_name,revision=branch[1].raw_id))}</span> | |
41 | </span> |
|
41 | </span> | |
42 | </td> |
|
42 | </td> | |
43 | <td><span class="tooltip" title="${h.age(branch[1].date)}">${branch[1].date}</span></td> |
|
43 | <td><span class="tooltip" title="${h.tooltip(h.age(branch[1].date))}">${h.fmt_date(branch[1].date)}</span></td> | |
44 | <td title="${branch[1].author}">${h.person(branch[1].author)}</td> |
|
44 | <td title="${branch[1].author}">${h.person(branch[1].author)}</td> | |
45 | <td> |
|
45 | <td> | |
46 | <div> |
|
46 | <div> |
@@ -3,7 +3,7 b'' | |||||
3 | <%inherit file="/base/base.html"/> |
|
3 | <%inherit file="/base/base.html"/> | |
4 |
|
4 | |||
5 | <%def name="title()"> |
|
5 | <%def name="title()"> | |
6 |
|
|
6 | ${_('%s Changelog') % c.repo_name} - ${c.rhodecode_name} | |
7 | </%def> |
|
7 | </%def> | |
8 |
|
8 | |||
9 | <%def name="breadcrumbs_links()"> |
|
9 | <%def name="breadcrumbs_links()"> | |
@@ -55,7 +55,7 b'' | |||||
55 | <div class="left"> |
|
55 | <div class="left"> | |
56 | <div> |
|
56 | <div> | |
57 | ${h.checkbox(cs.short_id,class_="changeset_range")} |
|
57 | ${h.checkbox(cs.short_id,class_="changeset_range")} | |
58 | <span class="tooltip" title="${h.age(cs.date)}"><a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id)}"><span class="changeset_id">${cs.revision}:<span class="changeset_hash">${h.short_id(cs.raw_id)}</span></span></a></span> |
|
58 | <span class="tooltip" title="${h.tooltip(h.age(cs.date))}"><a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id)}"><span class="changeset_id">${cs.revision}:<span class="changeset_hash">${h.short_id(cs.raw_id)}</span></span></a></span> | |
59 | </div> |
|
59 | </div> | |
60 | <div class="author"> |
|
60 | <div class="author"> | |
61 | <div class="gravatar"> |
|
61 | <div class="gravatar"> | |
@@ -63,15 +63,15 b'' | |||||
63 | </div> |
|
63 | </div> | |
64 | <div title="${cs.author}" class="user">${h.shorter(h.person(cs.author),22)}</div> |
|
64 | <div title="${cs.author}" class="user">${h.shorter(h.person(cs.author),22)}</div> | |
65 | </div> |
|
65 | </div> | |
66 | <div class="date">${cs.date}</div> |
|
66 | <div class="date">${h.fmt_date(cs.date)}</div> | |
67 | </div> |
|
67 | </div> | |
68 | <div class="mid"> |
|
68 | <div class="mid"> | |
69 |
<div class="message">${h.urlify_commit( |
|
69 | <div class="message">${h.urlify_commit(cs.message, c.repo_name,h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</div> | |
70 | <div class="expand"><span class="expandtext">↓ ${_('show more')} ↓</span></div> |
|
70 | <div class="expand"><span class="expandtext">↓ ${_('show more')} ↓</span></div> | |
71 | </div> |
|
71 | </div> | |
72 | <div class="right"> |
|
72 | <div class="right"> | |
73 | <div class="changes"> |
|
73 | <div class="changes"> | |
74 | <div id="${cs.raw_id}" style="float:right;" class="changed_total tooltip" title="${_('Affected number of files, click to show more details')}">${len(cs.affected_files)}</div> |
|
74 | <div id="${cs.raw_id}" style="float:right;" class="changed_total tooltip" title="${h.tooltip(_('Affected number of files, click to show more details'))}">${len(cs.affected_files)}</div> | |
75 | <div class="comments-container"> |
|
75 | <div class="comments-container"> | |
76 | %if len(c.comments.get(cs.raw_id,[])) > 0: |
|
76 | %if len(c.comments.get(cs.raw_id,[])) > 0: | |
77 | <div class="comments-cnt" title="${('comments')}"> |
|
77 | <div class="comments-cnt" title="${('comments')}"> |
@@ -1,11 +1,11 b'' | |||||
1 | ## small box that displays changed/added/removed details fetched by AJAX |
|
1 | ## small box that displays changed/added/removed details fetched by AJAX | |
2 |
|
2 | |||
3 | % if len(c.cs.affected_files) <= c.affected_files_cut_off: |
|
3 | % if len(c.cs.affected_files) <= c.affected_files_cut_off: | |
4 | <span class="removed tooltip" title="<b>${_('removed')}</b>${h.changed_tooltip(c.cs.removed)}">${len(c.cs.removed)}</span> |
|
4 | <span class="removed tooltip" title="<b>${h.tooltip(_('removed'))}</b>${h.changed_tooltip(c.cs.removed)}">${len(c.cs.removed)}</span> | |
5 | <span class="changed tooltip" title="<b>${_('changed')}</b>${h.changed_tooltip(c.cs.changed)}">${len(c.cs.changed)}</span> |
|
5 | <span class="changed tooltip" title="<b>${h.tooltip(_('changed'))}</b>${h.changed_tooltip(c.cs.changed)}">${len(c.cs.changed)}</span> | |
6 | <span class="added tooltip" title="<b>${_('added')}</b>${h.changed_tooltip(c.cs.added)}">${len(c.cs.added)}</span> |
|
6 | <span class="added tooltip" title="<b>${h.tooltip(_('added'))}</b>${h.changed_tooltip(c.cs.added)}">${len(c.cs.added)}</span> | |
7 | % else: |
|
7 | % else: | |
8 | <span class="removed tooltip" title="${_('affected %s files') % len(c.cs.affected_files)}">!</span> |
|
8 | <span class="removed tooltip" title="${h.tooltip(_('affected %s files') % len(c.cs.affected_files))}">!</span> | |
9 | <span class="changed tooltip" title="${_('affected %s files') % len(c.cs.affected_files)}">!</span> |
|
9 | <span class="changed tooltip" title="${h.tooltip(_('affected %s files') % len(c.cs.affected_files))}">!</span> | |
10 | <span class="added tooltip" title="${_('affected %s files') % len(c.cs.affected_files)}">!</span> |
|
10 | <span class="added tooltip" title="${h.tooltip(_('affected %s files') % len(c.cs.affected_files))}">!</span> | |
11 | % endif |
|
11 | % endif |
@@ -3,7 +3,7 b'' | |||||
3 | <%inherit file="/base/base.html"/> |
|
3 | <%inherit file="/base/base.html"/> | |
4 |
|
4 | |||
5 | <%def name="title()"> |
|
5 | <%def name="title()"> | |
6 |
${ |
|
6 | ${_('%s Changeset') % c.repo_name} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} - ${c.rhodecode_name} | |
7 | </%def> |
|
7 | </%def> | |
8 |
|
8 | |||
9 | <%def name="breadcrumbs_links()"> |
|
9 | <%def name="breadcrumbs_links()"> | |
@@ -31,7 +31,7 b'' | |||||
31 | r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} |
|
31 | r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} | |
32 | </div> |
|
32 | </div> | |
33 | <div class="date"> |
|
33 | <div class="date"> | |
34 | ${c.changeset.date} |
|
34 | ${h.fmt_date(c.changeset.date)} | |
35 | </div> |
|
35 | </div> | |
36 | <div class="changeset-status-container"> |
|
36 | <div class="changeset-status-container"> | |
37 | %if c.statuses: |
|
37 | %if c.statuses: | |
@@ -40,8 +40,8 b'' | |||||
40 | %endif |
|
40 | %endif | |
41 | </div> |
|
41 | </div> | |
42 | <div class="diff-actions"> |
|
42 | <div class="diff-actions"> | |
43 |
<a href="${h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='show')}" title="${_('raw diff')}" |
|
43 | <a href="${h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='show')}" class="tooltip" title="${h.tooltip(_('raw diff'))}"><img class="icon" src="${h.url('/images/icons/page_white.png')}"/></a> | |
44 |
<a href="${h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='download')}" title="${_('download diff')}" |
|
44 | <a href="${h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='download')}" class="tooltip" title="${h.tooltip(_('download diff'))}"><img class="icon" src="${h.url('/images/icons/page_white_get.png')}"/></a> | |
45 | ${c.ignorews_url(request.GET)} |
|
45 | ${c.ignorews_url(request.GET)} | |
46 | ${c.context_url(request.GET)} |
|
46 | ${c.context_url(request.GET)} | |
47 | </div> |
|
47 | </div> | |
@@ -58,7 +58,7 b'' | |||||
58 | <span>${h.person(c.changeset.author)}</span><br/> |
|
58 | <span>${h.person(c.changeset.author)}</span><br/> | |
59 | <span><a href="mailto:${h.email_or_none(c.changeset.author)}">${h.email_or_none(c.changeset.author)}</a></span><br/> |
|
59 | <span><a href="mailto:${h.email_or_none(c.changeset.author)}">${h.email_or_none(c.changeset.author)}</a></span><br/> | |
60 | </div> |
|
60 | </div> | |
61 |
<div class="message">${h.urlify_commit( |
|
61 | <div class="message">${h.urlify_commit(c.changeset.message, c.repo_name)}</div> | |
62 | </div> |
|
62 | </div> | |
63 | <div class="right"> |
|
63 | <div class="right"> | |
64 | <div class="changes"> |
|
64 | <div class="changes"> |
@@ -43,9 +43,12 b'' | |||||
43 | ${h.form(h.url('changeset_comment', repo_name=c.repo_name, revision=changeset.raw_id),class_='inline-form')} |
|
43 | ${h.form(h.url('changeset_comment', repo_name=c.repo_name, revision=changeset.raw_id),class_='inline-form')} | |
44 | <div class="clearfix"> |
|
44 | <div class="clearfix"> | |
45 | <div class="comment-help">${_('Commenting on line {1}.')} |
|
45 | <div class="comment-help">${_('Commenting on line {1}.')} | |
46 |
${(_('Comments parsed using %s syntax with %s support.') % ( |
|
46 | ${(_('Comments parsed using %s syntax with %s support.') % ( | |
47 | '<span style="color:#003367" class="tooltip" title="%s">@mention</span>' % |
|
47 | ('<a href="%s">RST</a>' % h.url('rst_help')), | |
48 |
_('Use @username inside this text to send notification to this RhodeCode user')) |
|
48 | ('<span style="color:#003367" class="tooltip" title="%s">@mention</span>' % _('Use @username inside this text to send notification to this RhodeCode user')) | |
|
49 | ) | |||
|
50 | )|n | |||
|
51 | } | |||
49 | </div> |
|
52 | </div> | |
50 | <div class="mentions-container" id="mentions_container_{1}"></div> |
|
53 | <div class="mentions-container" id="mentions_container_{1}"></div> | |
51 | <textarea id="text_{1}" name="text" class="yui-ac-input"></textarea> |
|
54 | <textarea id="text_{1}" name="text" class="yui-ac-input"></textarea> |
@@ -2,7 +2,7 b'' | |||||
2 | <%inherit file="/base/base.html"/> |
|
2 | <%inherit file="/base/base.html"/> | |
3 |
|
3 | |||
4 | <%def name="title()"> |
|
4 | <%def name="title()"> | |
5 |
${ |
|
5 | ${_('%s Changesets') % c.repo_name} - r${c.cs_ranges[0].revision}:${h.short_id(c.cs_ranges[0].raw_id)} -> r${c.cs_ranges[-1].revision}:${h.short_id(c.cs_ranges[-1].raw_id)} - ${c.rhodecode_name} | |
6 | </%def> |
|
6 | </%def> | |
7 |
|
7 | |||
8 | <%def name="breadcrumbs_links()"> |
|
8 | <%def name="breadcrumbs_links()"> | |
@@ -43,7 +43,7 b'' | |||||
43 | <td><span class="tooltip" title="${h.age(cs.date)}">${cs.date}</span></td> |
|
43 | <td><span class="tooltip" title="${h.age(cs.date)}">${cs.date}</span></td> | |
44 | <td> |
|
44 | <td> | |
45 | %if c.statuses: |
|
45 | %if c.statuses: | |
46 | <div title="${_('Changeset status')}" class="changeset-status-ico"><img src="${h.url('/images/icons/flag_status_%s.png' % c.statuses[cnt])}" /></div> |
|
46 | <div title="${h.tooltip(_('Changeset status'))}" class="changeset-status-ico"><img src="${h.url('/images/icons/flag_status_%s.png' % c.statuses[cnt])}" /></div> | |
47 | %endif |
|
47 | %endif | |
48 | </td> |
|
48 | </td> | |
49 | <td><div class="message">${h.urlify_commit(h.wrap_paragraphs(cs.message),c.repo_name)}</div></td> |
|
49 | <td><div class="message">${h.urlify_commit(h.wrap_paragraphs(cs.message),c.repo_name)}</div></td> |
@@ -16,9 +16,9 b'' | |||||
16 | revision=filenode.changeset.raw_id,f_path=h.safe_unicode(filenode.path)))} |
|
16 | revision=filenode.changeset.raw_id,f_path=h.safe_unicode(filenode.path)))} | |
17 | </div> |
|
17 | </div> | |
18 | <div class="diff-actions"> |
|
18 | <div class="diff-actions"> | |
19 |
<a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='diff',fulldiff=1)}" |
|
19 | <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='diff',fulldiff=1)}" class="tooltip" title="${h.tooltip(_('diff'))}"><img class="icon" src="${h.url('/images/icons/page_white_go.png')}"/></a> | |
20 |
<a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='raw')}" |
|
20 | <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='raw')}" class="tooltip" title="${h.tooltip(_('raw diff'))}"><img class="icon" src="${h.url('/images/icons/page_white.png')}"/></a> | |
21 |
<a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='download')}" |
|
21 | <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='download')}" class="tooltip" title="${h.tooltip(_('download diff'))}"><img class="icon" src="${h.url('/images/icons/page_white_get.png')}"/></a> | |
22 | ${c.ignorews_url(request.GET, h.FID(filenode.changeset.raw_id,filenode.path))} |
|
22 | ${c.ignorews_url(request.GET, h.FID(filenode.changeset.raw_id,filenode.path))} | |
23 | ${c.context_url(request.GET, h.FID(filenode.changeset.raw_id,filenode.path))} |
|
23 | ${c.context_url(request.GET, h.FID(filenode.changeset.raw_id,filenode.path))} | |
24 | </div> |
|
24 | </div> |
@@ -1,7 +1,7 b'' | |||||
1 | <%inherit file="/base/base.html"/> |
|
1 | <%inherit file="/base/base.html"/> | |
2 |
|
2 | |||
3 | <%def name="title()"> |
|
3 | <%def name="title()"> | |
4 |
${ |
|
4 | ${_('%s File diff') % c.repo_name} - ${c.rhodecode_name} | |
5 | </%def> |
|
5 | </%def> | |
6 |
|
6 | |||
7 | <%def name="breadcrumbs_links()"> |
|
7 | <%def name="breadcrumbs_links()"> |
@@ -1,7 +1,7 b'' | |||||
1 | <%inherit file="/base/base.html"/> |
|
1 | <%inherit file="/base/base.html"/> | |
2 |
|
2 | |||
3 | <%def name="title()"> |
|
3 | <%def name="title()"> | |
4 |
${c.repo_name |
|
4 | ${_('%s Files') % c.repo_name} - ${c.rhodecode_name} | |
5 | </%def> |
|
5 | </%def> | |
6 |
|
6 | |||
7 | <%def name="breadcrumbs_links()"> |
|
7 | <%def name="breadcrumbs_links()"> | |
@@ -41,8 +41,6 b' var YPJAX_TITLE = "${c.repo_name} ${_(\'F' | |||||
41 | var current_url = "${h.url.current()}"; |
|
41 | var current_url = "${h.url.current()}"; | |
42 | var node_list_url = '${h.url("files_home",repo_name=c.repo_name,revision=c.changeset.raw_id,f_path='__FPATH__')}'; |
|
42 | var node_list_url = '${h.url("files_home",repo_name=c.repo_name,revision=c.changeset.raw_id,f_path='__FPATH__')}'; | |
43 | var url_base = '${h.url("files_nodelist_home",repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.file.path)}'; |
|
43 | var url_base = '${h.url("files_nodelist_home",repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.file.path)}'; | |
44 | var truncated_lbl = "${_('search truncated')}"; |
|
44 | fileBrowserListeners(current_url, node_list_url, url_base); | |
45 | var nomatch_lbl = "${_('no matching files')}"; |
|
|||
46 | fileBrowserListeners(current_url, node_list_url, url_base, truncated_lbl, nomatch_lbl); |
|
|||
47 | </script> |
|
45 | </script> | |
48 | </%def> |
|
46 | </%def> |
@@ -1,7 +1,7 b'' | |||||
1 | <%inherit file="/base/base.html"/> |
|
1 | <%inherit file="/base/base.html"/> | |
2 |
|
2 | |||
3 | <%def name="title()"> |
|
3 | <%def name="title()"> | |
4 |
${ |
|
4 | ${_('%s Edit file') % c.repo_name} - ${c.rhodecode_name} | |
5 | </%def> |
|
5 | </%def> | |
6 |
|
6 | |||
7 | <%def name="js_extra()"> |
|
7 | <%def name="js_extra()"> |
@@ -88,14 +88,14 b'' | |||||
88 | </td> |
|
88 | </td> | |
89 | <td> |
|
89 | <td> | |
90 | %if node.is_file(): |
|
90 | %if node.is_file(): | |
91 | <div class="tooltip" title="${node.last_changeset.message}"> |
|
91 | <div class="tooltip" title="${h.tooltip(node.last_changeset.message)}"> | |
92 | <pre>${'r%s:%s' % (node.last_changeset.revision,node.last_changeset.short_id)}</pre> |
|
92 | <pre>${'r%s:%s' % (node.last_changeset.revision,node.last_changeset.short_id)}</pre> | |
93 | </div> |
|
93 | </div> | |
94 | %endif |
|
94 | %endif | |
95 | </td> |
|
95 | </td> | |
96 | <td> |
|
96 | <td> | |
97 | %if node.is_file(): |
|
97 | %if node.is_file(): | |
98 | <span class="tooltip" title="${node.last_changeset.date}"> |
|
98 | <span class="tooltip" title="${h.tooltip(h.fmt_date(node.last_changeset.date))}"> | |
99 | ${h.age(node.last_changeset.date)}</span> |
|
99 | ${h.age(node.last_changeset.date)}</span> | |
100 | %endif |
|
100 | %endif | |
101 | </td> |
|
101 | </td> |
@@ -1,7 +1,7 b'' | |||||
1 | <%inherit file="/base/base.html"/> |
|
1 | <%inherit file="/base/base.html"/> | |
2 |
|
2 | |||
3 | <%def name="title()"> |
|
3 | <%def name="title()"> | |
4 |
${ |
|
4 | ${_('%s Edit file') % c.repo_name} - ${c.rhodecode_name} | |
5 | </%def> |
|
5 | </%def> | |
6 |
|
6 | |||
7 | <%def name="js_extra()"> |
|
7 | <%def name="js_extra()"> |
@@ -16,7 +16,7 b'' | |||||
16 | <div class="code-header"> |
|
16 | <div class="code-header"> | |
17 | <div class="stats"> |
|
17 | <div class="stats"> | |
18 | <div class="left img"><img src="${h.url('/images/icons/file.png')}"/></div> |
|
18 | <div class="left img"><img src="${h.url('/images/icons/file.png')}"/></div> | |
19 | <div class="left item"><pre class="tooltip" title="${c.file.changeset.date}">${h.link_to("r%s:%s" % (c.file.changeset.revision,h.short_id(c.file.changeset.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id))}</pre></div> |
|
19 | <div class="left item"><pre class="tooltip" title="${h.tooltip(h.fmt_date(c.file.changeset.date))}">${h.link_to("r%s:%s" % (c.file.changeset.revision,h.short_id(c.file.changeset.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id))}</pre></div> | |
20 | <div class="left item"><pre>${h.format_byte_size(c.file.size,binary=True)}</pre></div> |
|
20 | <div class="left item"><pre>${h.format_byte_size(c.file.size,binary=True)}</pre></div> | |
21 | <div class="left item last"><pre>${c.file.mimetype}</pre></div> |
|
21 | <div class="left item last"><pre>${c.file.mimetype}</pre></div> | |
22 | <div class="buttons"> |
|
22 | <div class="buttons"> |
@@ -2,7 +2,7 b'' | |||||
2 | <%inherit file="/base/base.html"/> |
|
2 | <%inherit file="/base/base.html"/> | |
3 |
|
3 | |||
4 | <%def name="title()"> |
|
4 | <%def name="title()"> | |
5 |
${ |
|
5 | ${_('%s Followers') % c.repo_name} - ${c.rhodecode_name} | |
6 | </%def> |
|
6 | </%def> | |
7 |
|
7 | |||
8 | <%def name="breadcrumbs_links()"> |
|
8 | <%def name="breadcrumbs_links()"> |
@@ -9,8 +9,8 b'' | |||||
9 | <span style="font-size: 20px"> <b>${f.user.username}</b> (${f.user.name} ${f.user.lastname})</span> |
|
9 | <span style="font-size: 20px"> <b>${f.user.username}</b> (${f.user.name} ${f.user.lastname})</span> | |
10 | </div> |
|
10 | </div> | |
11 | <div style="clear:both;padding-top: 10px"></div> |
|
11 | <div style="clear:both;padding-top: 10px"></div> | |
12 |
<div class="follower_date">${_('Started following')} |
|
12 | <div class="follower_date">${_('Started following -')} | |
13 | <span class="tooltip" title="${f.follows_from}"> ${h.age(f.follows_from)}</span></div> |
|
13 | <span class="tooltip" title="${h.tooltip(f.follows_from)}"> ${h.age(f.follows_from)}</span></div> | |
14 | <div style="border-bottom: 1px solid #DDD;margin:10px 0px 10px 0px"></div> |
|
14 | <div style="border-bottom: 1px solid #DDD;margin:10px 0px 10px 0px"></div> | |
15 | </div> |
|
15 | </div> | |
16 | % endfor |
|
16 | % endfor |
@@ -2,7 +2,7 b'' | |||||
2 | <%inherit file="/base/base.html"/> |
|
2 | <%inherit file="/base/base.html"/> | |
3 |
|
3 | |||
4 | <%def name="title()"> |
|
4 | <%def name="title()"> | |
5 |
${c.repo_name |
|
5 | ${_('%s Fork') % c.repo_name} - ${c.rhodecode_name} | |
6 | </%def> |
|
6 | </%def> | |
7 |
|
7 | |||
8 | <%def name="breadcrumbs_links()"> |
|
8 | <%def name="breadcrumbs_links()"> |
@@ -2,7 +2,7 b'' | |||||
2 | <%inherit file="/base/base.html"/> |
|
2 | <%inherit file="/base/base.html"/> | |
3 |
|
3 | |||
4 | <%def name="title()"> |
|
4 | <%def name="title()"> | |
5 |
${c.repo_name |
|
5 | ${_('%s Forks') % c.repo_name} - ${c.rhodecode_name} | |
6 | </%def> |
|
6 | </%def> | |
7 |
|
7 | |||
8 | <%def name="breadcrumbs_links()"> |
|
8 | <%def name="breadcrumbs_links()"> |
@@ -15,7 +15,7 b'' | |||||
15 | </div> |
|
15 | </div> | |
16 | <div style="clear:both;padding-top: 10px"></div> |
|
16 | <div style="clear:both;padding-top: 10px"></div> | |
17 | <div class="follower_date">${_('forked')} - |
|
17 | <div class="follower_date">${_('forked')} - | |
18 | <span class="tooltip" title="${f.created_on}"> ${h.age(f.created_on)}</span></div> |
|
18 | <span class="tooltip" title="${h.tooltip(h.fmt_date(f.created_on))}"> ${h.age(f.created_on)}</span></div> | |
19 | <div style="border-bottom: 1px solid #DDD;margin:10px 0px 10px 0px"></div> |
|
19 | <div style="border-bottom: 1px solid #DDD;margin:10px 0px 10px 0px"></div> | |
20 | </div> |
|
20 | </div> | |
21 | % endfor |
|
21 | % endfor |
@@ -89,7 +89,7 b'' | |||||
89 | </td> |
|
89 | </td> | |
90 | ##LAST CHANGE DATE |
|
90 | ##LAST CHANGE DATE | |
91 | <td> |
|
91 | <td> | |
92 | <span class="tooltip" title="${repo['last_change']}">${h.age(repo['last_change'])}</span> |
|
92 | <span class="tooltip" title="${h.tooltip(h.fmt_date(repo['last_change']))}">${h.age(repo['last_change'])}</span> | |
93 | </td> |
|
93 | </td> | |
94 | ##LAST REVISION |
|
94 | ##LAST REVISION | |
95 | <td> |
|
95 | <td> |
@@ -9,6 +9,10 b'' | |||||
9 | <%def name="page_nav()"> |
|
9 | <%def name="page_nav()"> | |
10 | ${self.menu('home')} |
|
10 | ${self.menu('home')} | |
11 | </%def> |
|
11 | </%def> | |
|
12 | <%def name="head_extra()"> | |||
|
13 | <link href="${h.url('journal_atom', api_key=c.rhodecode_user.api_key)}" rel="alternate" title="${_('ATOM journal feed')}" type="application/atom+xml" /> | |||
|
14 | <link href="${h.url('journal_rss', api_key=c.rhodecode_user.api_key)}" rel="alternate" title="${_('RSS journal feed')}" type="application/rss+xml" /> | |||
|
15 | </%def> | |||
12 | <%def name="main()"> |
|
16 | <%def name="main()"> | |
13 |
|
17 | |||
14 | <div class="box box-left"> |
|
18 | <div class="box box-left"> | |
@@ -17,8 +21,13 b'' | |||||
17 | <h5>${_('Journal')}</h5> |
|
21 | <h5>${_('Journal')}</h5> | |
18 | <ul class="links"> |
|
22 | <ul class="links"> | |
19 | <li> |
|
23 | <li> | |
20 | <span><a id="refresh" href="${h.url('journal')}"><img class="icon" title="${_('Refresh')}" alt="${_('Refresh')}" src="${h.url('/images/icons/arrow_refresh.png')}"/> |
|
24 | <span><a id="refresh" href="${h.url('journal')}"><img class="icon" title="${_('Refresh')}" alt="${_('Refresh')}" src="${h.url('/images/icons/arrow_refresh.png')}"/></a></span> | |
21 |
|
|
25 | </li> | |
|
26 | <li> | |||
|
27 | <span><a href="${h.url('journal_rss', api_key=c.rhodecode_user.api_key)}"><img class="icon" title="${_('RSS feed')}" alt="${_('RSS feed')}" src="${h.url('/images/icons/rss_16.png')}"/></a></span> | |||
|
28 | </li> | |||
|
29 | <li> | |||
|
30 | <span><a href="${h.url('journal_atom', api_key=c.rhodecode_user.api_key)}"><img class="icon" title="${_('ATOM feed')}" alt="${_('ATOM feed')}" src="${h.url('/images/icons/atom.png')}"/></a></span> | |||
22 | </li> |
|
31 | </li> | |
23 | </ul> |
|
32 | </ul> | |
24 | </div> |
|
33 | </div> |
@@ -24,7 +24,7 b'' | |||||
24 | </span> |
|
24 | </span> | |
25 | </div> |
|
25 | </div> | |
26 | <div class="journal_action_params">${h.literal(h.action_parser(entry)[1]())}</div> |
|
26 | <div class="journal_action_params">${h.literal(h.action_parser(entry)[1]())}</div> | |
27 | <div class="date"><span class="tooltip" title="${entry.action_date}">${h.age(entry.action_date)}</span></div> |
|
27 | <div class="date"><span class="tooltip" title="${h.tooltip(h.fmt_date(entry.action_date))}">${h.age(entry.action_date)}</span></div> | |
28 | %endfor |
|
28 | %endfor | |
29 | </div> |
|
29 | </div> | |
30 | </div> |
|
30 | </div> |
@@ -9,33 +9,35 b'' | |||||
9 | <%def name="page_nav()"> |
|
9 | <%def name="page_nav()"> | |
10 | ${self.menu('home')} |
|
10 | ${self.menu('home')} | |
11 | </%def> |
|
11 | </%def> | |
|
12 | <%def name="head_extra()"> | |||
|
13 | <link href="${h.url('public_journal_atom')}" rel="alternate" title="${_('ATOM public journal feed')}" type="application/atom+xml" /> | |||
|
14 | <link href="${h.url('public_journal_rss')}" rel="alternate" title="${_('RSS public journal feed')}" type="application/rss+xml" /> | |||
|
15 | </%def> | |||
12 | <%def name="main()"> |
|
16 | <%def name="main()"> | |
13 |
|
17 | |||
14 |
|
|
18 | <div class="box"> | |
15 |
|
|
19 | <!-- box / title --> | |
16 |
|
|
20 | <div class="title"> | |
17 |
|
|
21 | <h5>${_('Public Journal')}</h5> | |
18 |
|
|
22 | <ul class="links"> | |
19 |
|
|
23 | <li> | |
20 | <span>${h.link_to(_('RSS'),h.url('public_journal_rss'),class_='rss_icon')}</span> |
|
24 | <span><a href="${h.url('public_journal_rss')}"><img class="icon" title="${_('RSS feed')}" alt="${_('RSS feed')}" src="${h.url('/images/icons/atom.png')}"/></a></span> | |
21 |
|
|
25 | </li> | |
22 | <li> |
|
26 | <li> | |
23 | <span>${h.link_to(_('Atom'),h.url('public_journal_atom'),class_='atom_icon')}</span> |
|
27 | <span><a href="${h.url('public_journal_atom')}"><img class="icon" title="${_('ATOM feed')}" alt="${_('ATOM feed')}" src="${h.url('/images/icons/rss_16.png')}"/></a></span> | |
24 |
|
|
28 | </li> | |
25 |
|
29 | </ul> | ||
26 | </ul> |
|
30 | </div> | |
27 |
|
31 | <script type="text/javascript"> | ||
28 | </div> |
|
32 | function show_more_event(){ | |
29 | <script type="text/javascript"> |
|
33 | YUE.on(YUD.getElementsByClassName('show_more'),'click',function(e){ | |
30 | function show_more_event(){ |
|
34 | var el = e.target; | |
31 | YUE.on(YUD.getElementsByClassName('show_more'),'click',function(e){ |
|
35 | YUD.setStyle(YUD.get(el.id.substring(1)),'display',''); | |
32 | var el = e.target; |
|
36 | YUD.setStyle(el.parentNode,'display','none'); | |
33 | YUD.setStyle(YUD.get(el.id.substring(1)),'display',''); |
|
37 | }); | |
34 | YUD.setStyle(el.parentNode,'display','none'); |
|
38 | } | |
35 | }); |
|
39 | </script> | |
36 | } |
|
40 | <div id="journal">${c.journal_data}</div> | |
37 | </script> |
|
41 | </div> | |
38 | <div id="journal">${c.journal_data}</div> |
|
|||
39 | </div> |
|
|||
40 |
|
42 | |||
41 | </%def> |
|
43 | </%def> |
@@ -1,7 +1,7 b'' | |||||
1 | ## -*- coding: utf-8 -*- |
|
1 | ## -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 | <li class="qfilter_rs"> |
|
3 | <li class="qfilter_rs"> | |
4 |
<input type="text" style="border:0" value="quick filter..." name="filter" size="2 |
|
4 | <input type="text" style="border:0" value="${_('quick filter...')}" name="filter" size="20" id="q_filter_rs" /> | |
5 | </li> |
|
5 | </li> | |
6 |
|
6 | |||
7 | %for repo in c.repos_list: |
|
7 | %for repo in c.repos_list: |
@@ -2,7 +2,7 b'' | |||||
2 | <%inherit file="/base/base.html"/> |
|
2 | <%inherit file="/base/base.html"/> | |
3 |
|
3 | |||
4 | <%def name="title()"> |
|
4 | <%def name="title()"> | |
5 |
${ |
|
5 | ${_('%s Settings') % c.repo_name} - ${c.rhodecode_name} | |
6 | </%def> |
|
6 | </%def> | |
7 |
|
7 | |||
8 | <%def name="breadcrumbs_links()"> |
|
8 | <%def name="breadcrumbs_links()"> |
@@ -2,7 +2,7 b'' | |||||
2 | <%inherit file="/base/base.html"/> |
|
2 | <%inherit file="/base/base.html"/> | |
3 |
|
3 | |||
4 | <%def name="title()"> |
|
4 | <%def name="title()"> | |
5 |
${ |
|
5 | ${_('%s Shortlog') % c.repo_name} - ${c.rhodecode_name} | |
6 | </%def> |
|
6 | </%def> | |
7 |
|
7 | |||
8 |
|
8 |
@@ -19,7 +19,7 b'' | |||||
19 | h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id), |
|
19 | h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id), | |
20 | title=cs.message)} |
|
20 | title=cs.message)} | |
21 | </td> |
|
21 | </td> | |
22 | <td><span class="tooltip" title="${cs.date}"> |
|
22 | <td><span class="tooltip" title="${h.tooltip(h.fmt_date(cs.date))}"> | |
23 | ${h.age(cs.date)}</span> |
|
23 | ${h.age(cs.date)}</span> | |
24 | </td> |
|
24 | </td> | |
25 | <td title="${cs.author}">${h.person(cs.author)}</td> |
|
25 | <td title="${cs.author}">${h.person(cs.author)}</td> |
@@ -1,7 +1,7 b'' | |||||
1 | <%inherit file="/base/base.html"/> |
|
1 | <%inherit file="/base/base.html"/> | |
2 |
|
2 | |||
3 | <%def name="title()"> |
|
3 | <%def name="title()"> | |
4 |
${ |
|
4 | ${_('%s Summary') % c.repo_name} - ${c.rhodecode_name} | |
5 | </%def> |
|
5 | </%def> | |
6 |
|
6 | |||
7 | <%def name="breadcrumbs_links()"> |
|
7 | <%def name="breadcrumbs_links()"> | |
@@ -16,6 +16,11 b'' | |||||
16 | ${self.menu('summary')} |
|
16 | ${self.menu('summary')} | |
17 | </%def> |
|
17 | </%def> | |
18 |
|
18 | |||
|
19 | <%def name="head_extra()"> | |||
|
20 | <link href="${h.url('atom_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key)}" rel="alternate" title="${_('repo %s ATOM feed') % c.repo_name}" type="application/atom+xml" /> | |||
|
21 | <link href="${h.url('rss_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key)}" rel="alternate" title="${_('repo %s RSS feed') % c.repo_name}" type="application/rss+xml" /> | |||
|
22 | </%def> | |||
|
23 | ||||
19 | <%def name="main()"> |
|
24 | <%def name="main()"> | |
20 | <% |
|
25 | <% | |
21 | summary = lambda n:{False:'summary-short'}.get(n) |
|
26 | summary = lambda n:{False:'summary-short'}.get(n) | |
@@ -158,10 +163,10 b'' | |||||
158 | %endif |
|
163 | %endif | |
159 | %else: |
|
164 | %else: | |
160 | ${h.select('download_options',c.rhodecode_repo.get_changeset().raw_id,c.download_options)} |
|
165 | ${h.select('download_options',c.rhodecode_repo.get_changeset().raw_id,c.download_options)} | |
161 | <span id="${'zip_link'}">${h.link_to('Download as zip',h.url('files_archive_home',repo_name=c.dbrepo.repo_name,fname='tip.zip'),class_="archive_icon ui-btn")}</span> |
|
166 | <span id="${'zip_link'}">${h.link_to(_('Download as zip'), h.url('files_archive_home',repo_name=c.dbrepo.repo_name,fname='tip.zip'),class_="archive_icon ui-btn")}</span> | |
162 | <span style="vertical-align: bottom"> |
|
167 | <span style="vertical-align: bottom"> | |
163 | <input id="archive_subrepos" type="checkbox" name="subrepos" /> |
|
168 | <input id="archive_subrepos" type="checkbox" name="subrepos" /> | |
164 | <label for="archive_subrepos" class="tooltip" title="${_('Check this to download archive with subrepos')}" >${_('with subrepos')}</label> |
|
169 | <label for="archive_subrepos" class="tooltip" title="${h.tooltip(_('Check this to download archive with subrepos'))}" >${_('with subrepos')}</label> | |
165 | </span> |
|
170 | </span> | |
166 | %endif |
|
171 | %endif | |
167 | </div> |
|
172 | </div> |
@@ -2,7 +2,7 b'' | |||||
2 | <%inherit file="/base/base.html"/> |
|
2 | <%inherit file="/base/base.html"/> | |
3 |
|
3 | |||
4 | <%def name="title()"> |
|
4 | <%def name="title()"> | |
5 |
${c.repo_name |
|
5 | ${_('%s Tags') % c.repo_name} - ${c.rhodecode_name} | |
6 | </%def> |
|
6 | </%def> | |
7 |
|
7 | |||
8 |
|
8 |
@@ -18,7 +18,7 b'' | |||||
18 | </span> |
|
18 | </span> | |
19 | </span> |
|
19 | </span> | |
20 | </td> |
|
20 | </td> | |
21 | <td><span class="tooltip" title="${h.age(tag[1].date)}">${tag[1].date}</span></td> |
|
21 | <td><span class="tooltip" title="${h.tooltip(h.age(tag[1].date))}">${h.fmt_date(tag[1].date)}</span></td> | |
22 | <td title="${tag[1].author}">${h.person(tag[1].author)}</td> |
|
22 | <td title="${tag[1].author}">${h.person(tag[1].author)}</td> | |
23 | <td> |
|
23 | <td> | |
24 | <div> |
|
24 | <div> |
@@ -18,5 +18,7 b' class TestHomeController(TestController)' | |||||
18 | """open.png"/>""") |
|
18 | """open.png"/>""") | |
19 |
|
19 | |||
20 | response.mustcontain( |
|
20 | response.mustcontain( | |
21 | """<a title="Marcin Kuzminski <marcin@python-works.com>:\n |
|
21 | """<a title="Marcin Kuzminski &lt;marcin@python-works.com&gt;:\n | |
22 |
merge" class="tooltip" href="/vcs_test_hg/changeset/27cd5cce30c96924232 |
|
22 | merge" class="tooltip" href="/vcs_test_hg/changeset/27cd5cce30c96924232""" | |
|
23 | """dffcd24178a07ffeb5dfc">r173:27cd5cce30c9</a>""" | |||
|
24 | ) |
General Comments 0
You need to be logged in to leave comments.
Login now