##// END OF EJS Templates
merge with beta
marcink -
r2430:9f372811 merge codereview
parent child Browse files
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, controller='journal')
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 == 'changegroup.update').one()
191 .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_UPDATE)\
191 hgsettings3.ui_active = \
192 .one()
192 bool(form_result['hooks_changegroup_update'])
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 'changegroup.repo_size').one()
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 'preoutgoing.pull_logger').one()
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 journal = self._get_journal_data(c.following)
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 journal = self._get_journal_data(c.following)
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-03 01:06+0200\n"
10 "POT-Creation-Date: 2012-06-05 20:42+0200\n"
11 "PO-Revision-Date: 2012-05-20 11:36+0100\n"
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:95
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:48
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:49
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:415
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:419
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:463
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:486
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:492
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:512
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:513
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:514 rhodecode/templates/changelog/changelog.html:40
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:537
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:550
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:552 rhodecode/lib/helpers.py:562
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:554
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:556 rhodecode/lib/helpers.py:564
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:558 rhodecode/lib/helpers.py:566
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 "[pushed] into"
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:586
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:588
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:752
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:756
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:113
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:175
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:176
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:177
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:178
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 "filtre rapide"
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é des changements"
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-03 01:06+0200\n"
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:95
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:48
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:49
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:415
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:419
632 #: rhodecode/lib/helpers.py:427
627 msgid "False"
633 msgid "False"
628 msgstr ""
634 msgstr ""
629
635
630 #: rhodecode/lib/helpers.py:463
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:486
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:492
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:512
649 #: rhodecode/lib/helpers.py:520
644 msgid "and"
650 msgid "and"
645 msgstr ""
651 msgstr ""
646
652
647 #: rhodecode/lib/helpers.py:513
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:514 rhodecode/templates/changelog/changelog.html:40
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:537
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:550
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:552 rhodecode/lib/helpers.py:562
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:554
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:556 rhodecode/lib/helpers.py:564
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:558 rhodecode/lib/helpers.py:566
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 "[pushed] into"
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:752
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:756
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:113
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:175
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:176
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:177
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:178
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 rhodecode/templates/files/files.html:40
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.has_key(field_name):
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 return escape(tooltip_title)
127 tooltip_title = escape(tooltip_title)
128 tooltip_title = tooltip_title.replace('<', '&lt;').replace('>', '&gt;')
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 = (h(repo[r].node()) for r in xrange(start, stop + 1))
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(os.path.join(content_path, '.git'))
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.web import make_wsgi_chain
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 == 'push' and _hooks.get(push_hook):
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 = 'pretxnchangegroup.push_logger'
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_pretxnchangegroup_push_logger = OneOf(['True', 'False'], if_missing=False)
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).all():
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_lbl));
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(nomatch_lbl));
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')}"/>${r2p.user.username}</td>
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_pretxnchangegroup_push_logger','True')}
151 ${h.checkbox('hooks_changegroup_push_logger','True')}
152 <label for="hooks_pretxnchangegroup_push_logger">${_('Log user push commands')}</label>
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 ${c.repo_name} ${_('Bookmarks')} - ${c.rhodecode_name}
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 ${c.repo_name} ${_('Branches')} - ${c.rhodecode_name}
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 ${c.repo_name} ${_('Changelog')} - ${c.rhodecode_name}
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(h.wrap_paragraphs(cs.message),c.repo_name,h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</div>
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">&darr; ${_('show more')} &darr;</span></div>
70 <div class="expand"><span class="expandtext">&darr; ${_('show more')} &darr;</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 ${c.repo_name} ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} - ${c.rhodecode_name}
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')}" class="tooltip"><img class="icon" src="${h.url('/images/icons/page_white.png')}"/></a>
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')}" class="tooltip"><img class="icon" src="${h.url('/images/icons/page_white_get.png')}"/></a>
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(h.wrap_paragraphs(c.changeset.message),c.repo_name)}</div>
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.') % (('<a href="%s">RST</a>' % h.url('rst_help')),
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')))|n}
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 ${c.repo_name} ${_('Changesets')} - 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}
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)}" title="${_('diff')}" class="tooltip"><img class="icon" src="${h.url('/images/icons/page_white_go.png')}"/></a>
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')}" title="${_('raw diff')}" class="tooltip"><img class="icon" src="${h.url('/images/icons/page_white.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')}" 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')}" title="${_('download diff')}" class="tooltip"><img class="icon" src="${h.url('/images/icons/page_white_get.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')}" 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 ${c.repo_name} ${_('File diff')} - ${c.rhodecode_name}
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} ${_('Files')} - ${c.rhodecode_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 ${c.repo_name} ${_('Edit file')} - ${c.rhodecode_name}
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 ${c.repo_name} ${_('Edit file')} - ${c.rhodecode_name}
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 ${c.repo_name} ${_('Followers')} - ${c.rhodecode_name}
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} ${_('Fork')} - ${c.rhodecode_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} ${_('Forks')} - ${c.rhodecode_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 </a></span>
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 <div class="box">
18 <div class="box">
15 <!-- box / title -->
19 <!-- box / title -->
16 <div class="title">
20 <div class="title">
17 <h5>${_('Public Journal')}</h5>
21 <h5>${_('Public Journal')}</h5>
18 <ul class="links">
22 <ul class="links">
19 <li>
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 </li>
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 </li>
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="25" id="q_filter_rs" />
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 ${c.repo_name} ${_('Settings')} - ${c.rhodecode_name}
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 ${c.repo_name} ${_('Shortlog')} - ${c.rhodecode_name}
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 ${c.repo_name} ${_('Summary')} - ${c.rhodecode_name}
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} ${_('Tags')} - ${c.rhodecode_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 &lt;marcin@python-works.com&gt;:\n
21 """<a title="Marcin Kuzminski &amp;lt;marcin@python-works.com&amp;gt;:\n
22 merge" class="tooltip" href="/vcs_test_hg/changeset/27cd5cce30c96924232dffcd24178a07ffeb5dfc">r173:27cd5cce30c9</a>""")
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