Mercurial > kallithea
changeset 2430:9f37281195a2 codereview
merge with beta
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sat, 09 Jun 2012 15:30:22 +0200 |
parents | 51e3d60fed2f (current diff) d6efacde970f (diff) |
children | 60dfc369df1d |
files | rhodecode/config/routing.py rhodecode/controllers/journal.py rhodecode/lib/helpers.py rhodecode/model/db.py rhodecode/public/js/rhodecode.js rhodecode/templates/branches/branches.html rhodecode/templates/branches/branches_data.html rhodecode/templates/changelog/changelog.html rhodecode/templates/changelog/changelog_details.html rhodecode/templates/changeset/changeset.html rhodecode/templates/changeset/changeset_file_comment.html rhodecode/templates/changeset/changeset_range.html rhodecode/templates/changeset/diff_block.html rhodecode/templates/repo_switcher_list.html |
diffstat | 63 files changed, 760 insertions(+), 367 deletions(-) [+] |
line wrap: on
line diff
--- a/docs/changelog.rst Wed Jun 06 01:23:02 2012 +0200 +++ b/docs/changelog.rst Sat Jun 09 15:30:22 2012 +0200 @@ -16,6 +16,8 @@ - new codereview system - email map, allowing users to have multiple email addresses mapped into their accounts +- improved git-hook system. Now all actions for git are logged into journal + including pushed revisions, user and IP address - changed setup-app into setup-rhodecode and added default options to it. - new git repos are created as bare now by default - #464 added links to groups in permission box @@ -25,6 +27,10 @@ - rhodecode-api CLI client - new git http protocol replaced buggy dulwich implementation. Now based on pygrack & gitweb +- Improved RSS/ATOM feeds. Discoverable by browsers using proper headers, and + reformated based on user suggestions. Additional rss/atom feeds for user + journal +- various i18n improvements fixes +++++ @@ -41,6 +47,8 @@ commands. - fixed #413. Don't disable .git directory for bare repos on deleting - fixed issue #459. Changed the way of obtaining logger in reindex task. +- fixed #453 added ID field in whoosh SCHEMA that solves the issue of + reindexing modified files 1.3.6 (**2012-05-17**) ----------------------
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rhodecode/config/post_receive_tmpl.py Sat Jun 09 15:30:22 2012 +0200 @@ -0,0 +1,29 @@ +#!/usr/bin/env python +import os +import sys + +try: + import rhodecode + from rhodecode.lib.hooks import handle_git_post_receive +except ImportError: + rhodecode = None + + +def main(): + if rhodecode is None: + # exit with success if we cannot import rhodecode !! + # this allows simply push to this repo even without + # rhodecode + sys.exit(0) + + repo_path = os.path.abspath('.') + push_data = sys.stdin.read().strip().split(' ') + # os.environ is modified here by a subprocess call that + # runs git and later git executes this hook. + # Environ get's some additional info from rhodecode system + # like IP or username from basic-auth + handle_git_post_receive(repo_path, push_data, os.environ) + sys.exit(0) + +if __name__ == '__main__': + main()
--- a/rhodecode/config/rcextensions/__init__.py Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/config/rcextensions/__init__.py Sat Jun 09 15:30:22 2012 +0200 @@ -1,6 +1,7 @@ # Additional mappings that are not present in the pygments lexers # used for building stats -# format is {'ext':'Name'} eg. {'py':'Python'} +# format is {'ext':['Names']} eg. {'py':['Python']} note: there can be +# more than one name for extension # NOTE: that this will overide any mappings in LANGUAGES_EXTENSIONS_MAP # build by pygments EXTRA_MAPPINGS = {} @@ -39,6 +40,7 @@ :param group_id: :param created_by: """ + return 0 CREATE_REPO_HOOK = _crhook
--- a/rhodecode/config/rcextensions/make_rcextensions.py Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/config/rcextensions/make_rcextensions.py Sat Jun 09 15:30:22 2012 +0200 @@ -54,7 +54,7 @@ logging.config.fileConfig(self.path_to_ini_file) from pylons import config - def _make_file(ext_file): + def _make_file(ext_file, tmpl): bdir = os.path.split(ext_file)[0] if not os.path.isdir(bdir): os.makedirs(bdir) @@ -71,11 +71,11 @@ msg = ('Extension file already exists, do you want ' 'to overwrite it ? [y/n]') if ask_ok(msg): - _make_file(ext_file) + _make_file(ext_file, tmpl) else: log.info('nothing done...') else: - _make_file(ext_file) + _make_file(ext_file, tmpl) def update_parser(self): pass
--- a/rhodecode/config/routing.py Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/config/routing.py Sat Jun 09 15:30:22 2012 +0200 @@ -341,7 +341,12 @@ m.connect('api', '/api') #USER JOURNAL - rmap.connect('journal', '%s/journal' % ADMIN_PREFIX, controller='journal') + rmap.connect('journal', '%s/journal' % ADMIN_PREFIX, + controller='journal', action='index') + rmap.connect('journal_rss', '%s/journal/rss' % ADMIN_PREFIX, + controller='journal', action='journal_rss') + rmap.connect('journal_atom', '%s/journal/atom' % ADMIN_PREFIX, + controller='journal', action='journal_atom') rmap.connect('public_journal', '%s/public_journal' % ADMIN_PREFIX, controller='journal', action="public_journal")
--- a/rhodecode/controllers/admin/settings.py Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/controllers/admin/settings.py Sat Jun 09 15:30:22 2012 +0200 @@ -174,7 +174,8 @@ application_form = ApplicationUiSettingsForm()() try: form_result = application_form.to_python(dict(request.POST)) - + # fix namespaces for hooks + _f = lambda s: s.replace('.', '_') try: hgsettings1 = self.sa.query(RhodeCodeUi)\ @@ -187,28 +188,28 @@ #HOOKS hgsettings3 = self.sa.query(RhodeCodeUi)\ - .filter(RhodeCodeUi.ui_key == 'changegroup.update').one() - hgsettings3.ui_active = \ - bool(form_result['hooks_changegroup_update']) + .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_UPDATE)\ + .one() + hgsettings3.ui_active = bool(form_result[_f('hooks_%s' % + RhodeCodeUi.HOOK_UPDATE)]) hgsettings4 = self.sa.query(RhodeCodeUi)\ - .filter(RhodeCodeUi.ui_key == - 'changegroup.repo_size').one() - hgsettings4.ui_active = \ - bool(form_result['hooks_changegroup_repo_size']) + .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_REPO_SIZE)\ + .one() + hgsettings4.ui_active = bool(form_result[_f('hooks_%s' % + RhodeCodeUi.HOOK_REPO_SIZE)]) hgsettings5 = self.sa.query(RhodeCodeUi)\ - .filter(RhodeCodeUi.ui_key == - 'pretxnchangegroup.push_logger').one() - hgsettings5.ui_active = \ - bool(form_result['hooks_pretxnchangegroup' - '_push_logger']) + .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_PUSH)\ + .one() + hgsettings5.ui_active = bool(form_result[_f('hooks_%s' % + RhodeCodeUi.HOOK_PUSH)]) hgsettings6 = self.sa.query(RhodeCodeUi)\ - .filter(RhodeCodeUi.ui_key == - 'preoutgoing.pull_logger').one() - hgsettings6.ui_active = \ - bool(form_result['hooks_preoutgoing_pull_logger']) + .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_PULL)\ + .one() + hgsettings6.ui_active = bool(form_result[_f('hooks_%s' % + RhodeCodeUi.HOOK_PULL)]) self.sa.add(hgsettings1) self.sa.add(hgsettings2)
--- a/rhodecode/controllers/feed.py Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/controllers/feed.py Sat Jun 09 15:30:22 2012 +0200 @@ -73,7 +73,7 @@ def __get_desc(self, cs): desc_msg = [] desc_msg.append('%s %s %s:<br/>' % (cs.author, _('commited on'), - cs.date)) + h.fmt_date(cs.date))) desc_msg.append('<pre>') desc_msg.append(cs.message) desc_msg.append('\n')
--- a/rhodecode/controllers/files.py Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/controllers/files.py Sat Jun 09 15:30:22 2012 +0200 @@ -487,4 +487,4 @@ cs = self.__get_cs_or_redirect(revision, repo_name) _d, _f = ScmModel().get_nodes(repo_name, cs.raw_id, f_path, flat=False) - return _d + _f + return {'nodes': _d + _f}
--- a/rhodecode/controllers/journal.py Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/controllers/journal.py Sat Jun 09 15:30:22 2012 +0200 @@ -49,8 +49,6 @@ def __before__(self): super(JournalController, self).__before__() - self.rhodecode_user = self.rhodecode_user - self.title = _('%s public journal %s feed') % (c.rhodecode_name, '%s') self.language = 'en-us' self.ttl = "5" self.feed_nr = 20 @@ -84,6 +82,30 @@ return c.journal_data return render('journal/journal.html') + @LoginRequired(api_access=True) + @NotAnonymous() + def journal_atom(self): + """ + Produce an atom-1.0 feed via feedgenerator module + """ + following = self.sa.query(UserFollowing)\ + .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\ + .options(joinedload(UserFollowing.follows_repository))\ + .all() + return self._atom_feed(following, public=False) + + @LoginRequired(api_access=True) + @NotAnonymous() + def journal_rss(self): + """ + Produce an rss feed via feedgenerator module + """ + following = self.sa.query(UserFollowing)\ + .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\ + .options(joinedload(UserFollowing.follows_repository))\ + .all() + return self._rss_feed(following, public=False) + def _get_daily_aggregate(self, journal): groups = [] for k, g in groupby(journal, lambda x: x.action_as_day): @@ -173,6 +195,80 @@ return c.journal_data return render('journal/public_journal.html') + def _atom_feed(self, repos, public=True): + journal = self._get_journal_data(repos) + if public: + _link = url('public_journal_atom', qualified=True) + _desc = '%s %s %s' % (c.rhodecode_name, _('public journal'), + 'atom feed') + else: + _link = url('journal_atom', qualified=True) + _desc = '%s %s %s' % (c.rhodecode_name, _('journal'), 'atom feed') + + feed = Atom1Feed(title=_desc, + link=_link, + description=_desc, + language=self.language, + ttl=self.ttl) + + for entry in journal[:self.feed_nr]: + action, action_extra, ico = h.action_parser(entry, feed=True) + title = "%s - %s %s" % (entry.user.short_contact, action(), + entry.repository.repo_name) + desc = action_extra() + _url = None + if entry.repository is not None: + _url = url('changelog_home', + repo_name=entry.repository.repo_name, + qualified=True) + + feed.add_item(title=title, + pubdate=entry.action_date, + link=_url or url('', qualified=True), + author_email=entry.user.email, + author_name=entry.user.full_contact, + description=desc) + + response.content_type = feed.mime_type + return feed.writeString('utf-8') + + def _rss_feed(self, repos, public=True): + journal = self._get_journal_data(repos) + if public: + _link = url('public_journal_atom', qualified=True) + _desc = '%s %s %s' % (c.rhodecode_name, _('public journal'), + 'rss feed') + else: + _link = url('journal_atom', qualified=True) + _desc = '%s %s %s' % (c.rhodecode_name, _('journal'), 'rss feed') + + feed = Rss201rev2Feed(title=_desc, + link=_link, + description=_desc, + language=self.language, + ttl=self.ttl) + + for entry in journal[:self.feed_nr]: + action, action_extra, ico = h.action_parser(entry, feed=True) + title = "%s - %s %s" % (entry.user.short_contact, action(), + entry.repository.repo_name) + desc = action_extra() + _url = None + if entry.repository is not None: + _url = url('changelog_home', + repo_name=entry.repository.repo_name, + qualified=True) + + feed.add_item(title=title, + pubdate=entry.action_date, + link=_url or url('', qualified=True), + author_email=entry.user.email, + author_name=entry.user.full_contact, + description=desc) + + response.content_type = feed.mime_type + return feed.writeString('utf-8') + @LoginRequired(api_access=True) def public_journal_atom(self): """ @@ -183,28 +279,7 @@ .options(joinedload(UserFollowing.follows_repository))\ .all() - journal = self._get_journal_data(c.following) - - feed = Atom1Feed(title=self.title % 'atom', - link=url('public_journal_atom', qualified=True), - description=_('Public journal'), - language=self.language, - ttl=self.ttl) - - for entry in journal[:self.feed_nr]: - action, action_extra, ico = h.action_parser(entry, feed=True) - title = "%s - %s %s" % (entry.user.short_contact, action(), - entry.repository.repo_name) - desc = action_extra() - feed.add_item(title=title, - pubdate=entry.action_date, - link=url('', qualified=True), - author_email=entry.user.email, - author_name=entry.user.full_contact, - description=desc) - - response.content_type = feed.mime_type - return feed.writeString('utf-8') + return self._atom_feed(c.following) @LoginRequired(api_access=True) def public_journal_rss(self): @@ -216,25 +291,4 @@ .options(joinedload(UserFollowing.follows_repository))\ .all() - journal = self._get_journal_data(c.following) - - feed = Rss201rev2Feed(title=self.title % 'rss', - link=url('public_journal_rss', qualified=True), - description=_('Public journal'), - language=self.language, - ttl=self.ttl) - - for entry in journal[:self.feed_nr]: - action, action_extra, ico = h.action_parser(entry, feed=True) - title = "%s - %s %s" % (entry.user.short_contact, action(), - entry.repository.repo_name) - desc = action_extra() - feed.add_item(title=title, - pubdate=entry.action_date, - link=url('', qualified=True), - author_email=entry.user.email, - author_name=entry.user.full_contact, - description=desc) - - response.content_type = feed.mime_type - return feed.writeString('utf-8') + return self._rss_feed(c.following)
--- a/rhodecode/i18n/fr/LC_MESSAGES/rhodecode.po Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/i18n/fr/LC_MESSAGES/rhodecode.po Sat Jun 09 15:30:22 2012 +0200 @@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: RhodeCode 1.1.5\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2012-06-03 01:06+0200\n" -"PO-Revision-Date: 2012-05-20 11:36+0100\n" +"POT-Creation-Date: 2012-06-05 20:42+0200\n" +"PO-Revision-Date: 2012-06-05 20:07+0100\n" "Last-Translator: Vincent Duvert <vincent@duvert.net>\n" "Language-Team: fr <LL@li.org>\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" @@ -17,7 +17,7 @@ "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 0.9.6\n" -#: rhodecode/controllers/changelog.py:95 +#: rhodecode/controllers/changelog.py:94 msgid "All Branches" msgstr "Toutes les branches" @@ -69,16 +69,20 @@ "La requête n’a pu être traitée en raison d’une erreur survenue sur le " "serveur." -#: rhodecode/controllers/feed.py:48 +#: rhodecode/controllers/feed.py:49 #, python-format msgid "Changes on %s repository" msgstr "Changements sur le dépôt %s" -#: rhodecode/controllers/feed.py:49 +#: rhodecode/controllers/feed.py:50 #, python-format msgid "%s %s feed" msgstr "Flux %s de %s" +#: rhodecode/controllers/feed.py:75 +msgid "commited on" +msgstr "a commité, le" + #: rhodecode/controllers/files.py:86 #: rhodecode/templates/admin/repos/repo_add.html:13 msgid "add new" @@ -138,19 +142,16 @@ msgstr "Type d’archive inconnu" #: rhodecode/controllers/files.py:461 -#: rhodecode/templates/changeset/changeset_range.html:5 #: rhodecode/templates/changeset/changeset_range.html:13 #: rhodecode/templates/changeset/changeset_range.html:31 msgid "Changesets" msgstr "Changesets" #: rhodecode/controllers/files.py:462 rhodecode/controllers/summary.py:230 -#: rhodecode/templates/branches/branches.html:5 msgid "Branches" msgstr "Branches" #: rhodecode/controllers/files.py:463 rhodecode/controllers/summary.py:231 -#: rhodecode/templates/tags/tags.html:5 msgid "Tags" msgstr "Tags" @@ -661,133 +662,123 @@ msgid "No changes detected" msgstr "Aucun changement détecté." -#: rhodecode/lib/helpers.py:415 +#: rhodecode/lib/helpers.py:350 +#, python-format +msgid "%a, %d %b %Y %H:%M:%S" +msgstr "%d/%m/%Y à %H:%M:%S" + +#: rhodecode/lib/helpers.py:423 msgid "True" msgstr "Vrai" -#: rhodecode/lib/helpers.py:419 +#: rhodecode/lib/helpers.py:427 msgid "False" msgstr "Faux" -#: rhodecode/lib/helpers.py:463 -#, fuzzy +#: rhodecode/lib/helpers.py:471 msgid "Changeset not found" -msgstr "Dépôt vide" - -#: rhodecode/lib/helpers.py:486 +msgstr "Ensemble de changements non trouvé" + +#: rhodecode/lib/helpers.py:494 #, python-format msgid "Show all combined changesets %s->%s" msgstr "Afficher les changements combinés %s->%s" -#: rhodecode/lib/helpers.py:492 +#: rhodecode/lib/helpers.py:500 msgid "compare view" msgstr "vue de comparaison" -#: rhodecode/lib/helpers.py:512 +#: rhodecode/lib/helpers.py:520 msgid "and" msgstr "et" -#: rhodecode/lib/helpers.py:513 +#: rhodecode/lib/helpers.py:521 #, python-format msgid "%s more" msgstr "%s de plus" -#: rhodecode/lib/helpers.py:514 rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/lib/helpers.py:522 rhodecode/templates/changelog/changelog.html:40 msgid "revisions" msgstr "révisions" -#: rhodecode/lib/helpers.py:537 +#: rhodecode/lib/helpers.py:545 msgid "fork name " msgstr "Nom du fork" -#: rhodecode/lib/helpers.py:550 +#: rhodecode/lib/helpers.py:558 msgid "[deleted] repository" msgstr "[a supprimé] le dépôt" -#: rhodecode/lib/helpers.py:552 rhodecode/lib/helpers.py:562 +#: rhodecode/lib/helpers.py:560 rhodecode/lib/helpers.py:570 msgid "[created] repository" msgstr "[a créé] le dépôt" -#: rhodecode/lib/helpers.py:554 +#: rhodecode/lib/helpers.py:562 msgid "[created] repository as fork" msgstr "[a créé] le dépôt en tant que fork" -#: rhodecode/lib/helpers.py:556 rhodecode/lib/helpers.py:564 +#: rhodecode/lib/helpers.py:564 rhodecode/lib/helpers.py:572 msgid "[forked] repository" msgstr "[a forké] le dépôt" -#: rhodecode/lib/helpers.py:558 rhodecode/lib/helpers.py:566 +#: rhodecode/lib/helpers.py:566 rhodecode/lib/helpers.py:574 msgid "[updated] repository" msgstr "[a mis à jour] le dépôt" -#: rhodecode/lib/helpers.py:560 -msgid "[delete] repository" -msgstr "[a supprimé] le dépôt" - #: rhodecode/lib/helpers.py:568 -#, fuzzy, python-format -#| msgid "created user %s" -msgid "[created] user" -msgstr "utilisateur %s créé" - -#: rhodecode/lib/helpers.py:570 -#, fuzzy, python-format -#| msgid "updated users group %s" -msgid "[updated] user" -msgstr "Le groupe d’utilisateurs %s a été mis à jour." - -#: rhodecode/lib/helpers.py:572 -#, fuzzy, python-format -#| msgid "created users group %s" -msgid "[created] users group" -msgstr "Le groupe d’utilisateurs %s a été créé." - -#: rhodecode/lib/helpers.py:574 -#, fuzzy, python-format -#| msgid "updated users group %s" -msgid "[updated] users group" -msgstr "Le groupe d’utilisateurs %s a été mis à jour." +msgid "[delete] repository" +msgstr "[a supprimé] le dépôt" #: rhodecode/lib/helpers.py:576 -#, fuzzy -#| msgid "[created] repository" -msgid "[commented] on revision in repository" -msgstr "[a créé] le dépôt" +msgid "[created] user" +msgstr "[a créé] l’utilisateur" #: rhodecode/lib/helpers.py:578 -msgid "[pushed] into" -msgstr "[a pushé] dans" +msgid "[updated] user" +msgstr "[a mis à jour] l’utilisateur" #: rhodecode/lib/helpers.py:580 -#, fuzzy -#| msgid "[committed via RhodeCode] into" -msgid "[committed via RhodeCode] into repository" -msgstr "[a commité via RhodeCode] dans" +msgid "[created] users group" +msgstr "[a créé] le groupe d’utilisateurs" #: rhodecode/lib/helpers.py:582 -#, fuzzy -#| msgid "[pulled from remote] into" -msgid "[pulled from remote] into repository" -msgstr "[a pullé depuis un site distant] dans" +msgid "[updated] users group" +msgstr "[a mis à jour] le groupe d’utilisateurs" #: rhodecode/lib/helpers.py:584 +msgid "[commented] on revision in repository" +msgstr "[a commenté] une révision du dépôt" + +#: rhodecode/lib/helpers.py:586 +msgid "[pushed] into" +msgstr "[a pushé] dans" + +#: rhodecode/lib/helpers.py:588 +msgid "[committed via RhodeCode] into repository" +msgstr "[a commité via RhodeCode] dans le dépôt" + +#: rhodecode/lib/helpers.py:590 +msgid "[pulled from remote] into repository" +msgstr "[a pullé depuis un site distant] dans le dépôt" + +#: rhodecode/lib/helpers.py:592 msgid "[pulled] from" msgstr "[a pullé] depuis" -#: rhodecode/lib/helpers.py:586 +#: rhodecode/lib/helpers.py:594 msgid "[started following] repository" msgstr "[suit maintenant] le dépôt" -#: rhodecode/lib/helpers.py:588 +#: rhodecode/lib/helpers.py:596 msgid "[stopped following] repository" msgstr "[ne suit plus] le dépôt" -#: rhodecode/lib/helpers.py:752 +#: rhodecode/lib/helpers.py:760 #, python-format msgid " and %s more" msgstr "et %s de plus" -#: rhodecode/lib/helpers.py:756 +#: rhodecode/lib/helpers.py:764 msgid "No Files" msgstr "Aucun fichier" @@ -856,7 +847,7 @@ msgid "on line %s" msgstr "à la ligne %s" -#: rhodecode/model/comment.py:113 +#: rhodecode/model/comment.py:114 msgid "[Mention]" msgstr "[Mention]" @@ -1005,19 +996,19 @@ msgid "Enter %(min)i characters or more" msgstr "Entrez au moins %(min)i caractères" -#: rhodecode/model/notification.py:175 +#: rhodecode/model/notification.py:178 msgid "commented on commit" msgstr "a posté un commentaire sur le commit" -#: rhodecode/model/notification.py:176 +#: rhodecode/model/notification.py:179 msgid "sent message" msgstr "a envoyé un message" -#: rhodecode/model/notification.py:177 +#: rhodecode/model/notification.py:180 msgid "mentioned you" msgstr "vous a mentioné" -#: rhodecode/model/notification.py:178 +#: rhodecode/model/notification.py:181 msgid "registered in RhodeCode" msgstr "s’est enregistré sur RhodeCode" @@ -1051,13 +1042,14 @@ msgstr "Tableau de bord" #: rhodecode/templates/index_base.html:6 +#: rhodecode/templates/repo_switcher_list.html:4 #: rhodecode/templates/admin/users/user_edit_my_account.html:31 #: rhodecode/templates/bookmarks/bookmarks.html:10 #: rhodecode/templates/branches/branches.html:9 #: rhodecode/templates/journal/journal.html:31 #: rhodecode/templates/tags/tags.html:10 msgid "quick filter..." -msgstr "filtre rapide" +msgstr "Filtre rapide…" #: rhodecode/templates/index_base.html:6 rhodecode/templates/base/base.html:218 msgid "repositories" @@ -1807,6 +1799,12 @@ msgid "private repository" msgstr "Dépôt privé" +#: rhodecode/templates/admin/repos/repo_edit_perms.html:19 +#: rhodecode/templates/admin/repos/repo_edit_perms.html:28 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:18 +msgid "default" +msgstr "[Par défaut]" + #: rhodecode/templates/admin/repos/repo_edit_perms.html:33 #: rhodecode/templates/admin/repos/repo_edit_perms.html:58 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23 @@ -1857,7 +1855,7 @@ #: rhodecode/templates/admin/repos_groups/repos_groups.html:12 msgid "with" -msgstr "avec support de" +msgstr "comprenant" #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 msgid "Add repos group" @@ -1939,7 +1937,6 @@ #: rhodecode/templates/admin/settings/hooks.html:9 #: rhodecode/templates/admin/settings/settings.html:9 -#: rhodecode/templates/settings/repo_settings.html:5 #: rhodecode/templates/settings/repo_settings.html:13 msgid "Settings" msgstr "Options" @@ -2379,14 +2376,12 @@ #: rhodecode/templates/data_table/_dt_elements.html:9 #: rhodecode/templates/data_table/_dt_elements.html:11 #: rhodecode/templates/data_table/_dt_elements.html:13 -#: rhodecode/templates/summary/summary.html:4 msgid "Summary" msgstr "Résumé" #: rhodecode/templates/base/base.html:166 #: rhodecode/templates/base/base.html:168 #: rhodecode/templates/base/base.html:170 -#: rhodecode/templates/changelog/changelog.html:6 #: rhodecode/templates/changelog/changelog.html:15 #: rhodecode/templates/data_table/_dt_elements.html:17 #: rhodecode/templates/data_table/_dt_elements.html:19 @@ -2406,7 +2401,6 @@ #: rhodecode/templates/data_table/_dt_elements.html:25 #: rhodecode/templates/data_table/_dt_elements.html:27 #: rhodecode/templates/data_table/_dt_elements.html:29 -#: rhodecode/templates/files/files.html:4 #: rhodecode/templates/files/files.html:40 msgid "Files" msgstr "Fichiers" @@ -2454,13 +2448,11 @@ #: rhodecode/templates/base/base.html:235 #: rhodecode/templates/base/base.html:237 -#: rhodecode/templates/followers/followers.html:5 msgid "Followers" msgstr "Followers" #: rhodecode/templates/base/base.html:243 #: rhodecode/templates/base/base.html:245 -#: rhodecode/templates/forks/forks.html:5 msgid "Forks" msgstr "Forks" @@ -2493,8 +2485,9 @@ msgstr "Groupe" #: rhodecode/templates/bookmarks/bookmarks.html:5 -msgid "Bookmarks" -msgstr "Signets" +#, python-format +msgid "%s Bookmarks" +msgstr "Signets de %s" #: rhodecode/templates/bookmarks/bookmarks.html:39 #: rhodecode/templates/bookmarks/bookmarks_data.html:8 @@ -2504,6 +2497,11 @@ msgid "Author" msgstr "Auteur" +#: rhodecode/templates/branches/branches.html:5 +#, python-format +msgid "%s Branches" +msgstr "Branches de %s" + #: rhodecode/templates/branches/branches_data.html:7 msgid "date" msgstr "Date" @@ -2518,6 +2516,11 @@ msgid "revision" msgstr "Révision" +#: rhodecode/templates/changelog/changelog.html:6 +#, python-format +msgid "%s Changelog" +msgstr "Historique de %s" + #: rhodecode/templates/changelog/changelog.html:15 #, python-format msgid "showing %d out of %d revision" @@ -2605,6 +2608,10 @@ msgstr "%s fichiers affectés" #: rhodecode/templates/changeset/changeset.html:6 +#, python-format +msgid "%s Changeset" +msgstr "Changeset de %s" + #: rhodecode/templates/changeset/changeset.html:14 msgid "Changeset" msgstr "Changements" @@ -2689,6 +2696,11 @@ msgid "Leave a comment" msgstr "Laisser un commentaire" +#: rhodecode/templates/changeset/changeset_range.html:5 +#, python-format +msgid "%s Changesets" +msgstr "Changesets de %s" + #: rhodecode/templates/changeset/changeset_range.html:29 msgid "Compare View" msgstr "Comparaison" @@ -2708,7 +2720,6 @@ #: rhodecode/templates/data_table/_dt_elements.html:33 #: rhodecode/templates/data_table/_dt_elements.html:35 #: rhodecode/templates/data_table/_dt_elements.html:37 -#: rhodecode/templates/forks/fork.html:5 msgid "Fork" msgstr "Fork" @@ -2750,10 +2761,19 @@ msgstr "Vous serez redirigé vers %s dans %s secondes." #: rhodecode/templates/files/file_diff.html:4 +#, python-format +msgid "%s File diff" +msgstr "Diff de fichier de %s" + #: rhodecode/templates/files/file_diff.html:12 msgid "File diff" msgstr "Diff de fichier" +#: rhodecode/templates/files/files.html:4 +#, python-format +msgid "%s Files" +msgstr "Fichiers de %s" + #: rhodecode/templates/files/files.html:12 #: rhodecode/templates/summary/summary.html:328 msgid "files" @@ -2769,8 +2789,9 @@ #: rhodecode/templates/files/files_add.html:4 #: rhodecode/templates/files/files_edit.html:4 -msgid "Edit file" -msgstr "Éditer un fichier" +#, python-format +msgid "%s Edit file" +msgstr "Edition de fichier de %s" #: rhodecode/templates/files/files_add.html:19 msgid "add file" @@ -2929,13 +2950,23 @@ msgid "No files at given path" msgstr "Aucun fichier à cet endroit" +#: rhodecode/templates/followers/followers.html:5 +#, python-format +msgid "%s Followers" +msgstr "Followers de %s" + #: rhodecode/templates/followers/followers.html:13 msgid "followers" msgstr "followers" #: rhodecode/templates/followers/followers_data.html:12 -msgid "Started following" -msgstr "Date de début" +msgid "Started following -" +msgstr "A commencé à suivre le dépôt :" + +#: rhodecode/templates/forks/fork.html:5 +#, python-format +msgid "%s Fork" +msgstr "Fork de %s" #: rhodecode/templates/forks/fork.html:31 msgid "Fork name" @@ -2957,6 +2988,11 @@ msgid "fork this repository" msgstr "Forker ce dépôt" +#: rhodecode/templates/forks/forks.html:5 +#, python-format +msgid "%s Forks" +msgstr "Forks de %s" + #: rhodecode/templates/forks/forks.html:13 msgid "forks" msgstr "forks" @@ -3028,10 +3064,15 @@ msgid "Permission denied" msgstr "Permission refusée" +#: rhodecode/templates/settings/repo_settings.html:5 +#, python-format +msgid "%s Settings" +msgstr "Réglages de %s" + #: rhodecode/templates/shortlog/shortlog.html:5 -#: rhodecode/templates/summary/summary.html:209 -msgid "Shortlog" -msgstr "Résumé des changements" +#, python-format +msgid "%s Shortlog" +msgstr "Résumé de %s" #: rhodecode/templates/shortlog/shortlog.html:14 msgid "shortlog" @@ -3057,6 +3098,11 @@ msgid "Existing repository?" msgstr "Le dépôt existe déjà  ?" +#: rhodecode/templates/summary/summary.html:4 +#, python-format +msgid "%s Summary" +msgstr "Résumé de %s" + #: rhodecode/templates/summary/summary.html:12 msgid "summary" msgstr "résumé" @@ -3113,6 +3159,10 @@ msgid "Downloads are disabled for this repository" msgstr "Les téléchargements sont désactivés pour ce dépôt." +#: rhodecode/templates/summary/summary.html:161 +msgid "Download as zip" +msgstr "Télécharger en ZIP" + #: rhodecode/templates/summary/summary.html:164 msgid "Check this to download archive with subrepos" msgstr "Télécharger une archive contenant également les sous-dépôts éventuels" @@ -3129,6 +3179,10 @@ msgid "Stats gathered: " msgstr "Statistiques obtenues :" +#: rhodecode/templates/summary/summary.html:209 +msgid "Shortlog" +msgstr "Résumé des changements" + #: rhodecode/templates/summary/summary.html:211 msgid "Quick start" msgstr "Démarrage rapide" @@ -3170,3 +3224,8 @@ msgid "file removed" msgstr "fichier supprimé" +#: rhodecode/templates/tags/tags.html:5 +#, python-format +msgid "%s Tags" +msgstr "Tags de %s" +
--- a/rhodecode/i18n/rhodecode.pot Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/i18n/rhodecode.pot Sat Jun 09 15:30:22 2012 +0200 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: RhodeCode 1.4.0\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2012-06-03 01:06+0200\n" +"POT-Creation-Date: 2012-06-05 20:42+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,7 +17,7 @@ "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 0.9.6\n" -#: rhodecode/controllers/changelog.py:95 +#: rhodecode/controllers/changelog.py:94 msgid "All Branches" msgstr "" @@ -65,16 +65,20 @@ "fulfilling the request." msgstr "" -#: rhodecode/controllers/feed.py:48 +#: rhodecode/controllers/feed.py:49 #, python-format msgid "Changes on %s repository" msgstr "" -#: rhodecode/controllers/feed.py:49 +#: rhodecode/controllers/feed.py:50 #, python-format msgid "%s %s feed" msgstr "" +#: rhodecode/controllers/feed.py:75 +msgid "commited on" +msgstr "" + #: rhodecode/controllers/files.py:86 #: rhodecode/templates/admin/repos/repo_add.html:13 msgid "add new" @@ -134,19 +138,16 @@ msgstr "" #: rhodecode/controllers/files.py:461 -#: rhodecode/templates/changeset/changeset_range.html:5 #: rhodecode/templates/changeset/changeset_range.html:13 #: rhodecode/templates/changeset/changeset_range.html:31 msgid "Changesets" msgstr "" #: rhodecode/controllers/files.py:462 rhodecode/controllers/summary.py:230 -#: rhodecode/templates/branches/branches.html:5 msgid "Branches" msgstr "" #: rhodecode/controllers/files.py:463 rhodecode/controllers/summary.py:231 -#: rhodecode/templates/tags/tags.html:5 msgid "Tags" msgstr "" @@ -619,118 +620,123 @@ msgid "No changes detected" msgstr "" -#: rhodecode/lib/helpers.py:415 +#: rhodecode/lib/helpers.py:350 +#, python-format +msgid "%a, %d %b %Y %H:%M:%S" +msgstr "" + +#: rhodecode/lib/helpers.py:423 msgid "True" msgstr "" -#: rhodecode/lib/helpers.py:419 +#: rhodecode/lib/helpers.py:427 msgid "False" msgstr "" -#: rhodecode/lib/helpers.py:463 +#: rhodecode/lib/helpers.py:471 msgid "Changeset not found" msgstr "" -#: rhodecode/lib/helpers.py:486 +#: rhodecode/lib/helpers.py:494 #, python-format msgid "Show all combined changesets %s->%s" msgstr "" -#: rhodecode/lib/helpers.py:492 +#: rhodecode/lib/helpers.py:500 msgid "compare view" msgstr "" -#: rhodecode/lib/helpers.py:512 +#: rhodecode/lib/helpers.py:520 msgid "and" msgstr "" -#: rhodecode/lib/helpers.py:513 +#: rhodecode/lib/helpers.py:521 #, python-format msgid "%s more" msgstr "" -#: rhodecode/lib/helpers.py:514 rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/lib/helpers.py:522 rhodecode/templates/changelog/changelog.html:40 msgid "revisions" msgstr "" -#: rhodecode/lib/helpers.py:537 +#: rhodecode/lib/helpers.py:545 msgid "fork name " msgstr "" -#: rhodecode/lib/helpers.py:550 +#: rhodecode/lib/helpers.py:558 msgid "[deleted] repository" msgstr "" -#: rhodecode/lib/helpers.py:552 rhodecode/lib/helpers.py:562 +#: rhodecode/lib/helpers.py:560 rhodecode/lib/helpers.py:570 msgid "[created] repository" msgstr "" -#: rhodecode/lib/helpers.py:554 +#: rhodecode/lib/helpers.py:562 msgid "[created] repository as fork" msgstr "" -#: rhodecode/lib/helpers.py:556 rhodecode/lib/helpers.py:564 +#: rhodecode/lib/helpers.py:564 rhodecode/lib/helpers.py:572 msgid "[forked] repository" msgstr "" -#: rhodecode/lib/helpers.py:558 rhodecode/lib/helpers.py:566 +#: rhodecode/lib/helpers.py:566 rhodecode/lib/helpers.py:574 msgid "[updated] repository" msgstr "" -#: rhodecode/lib/helpers.py:560 -msgid "[delete] repository" -msgstr "" - #: rhodecode/lib/helpers.py:568 -msgid "[created] user" -msgstr "" - -#: rhodecode/lib/helpers.py:570 -msgid "[updated] user" -msgstr "" - -#: rhodecode/lib/helpers.py:572 -msgid "[created] users group" -msgstr "" - -#: rhodecode/lib/helpers.py:574 -msgid "[updated] users group" +msgid "[delete] repository" msgstr "" #: rhodecode/lib/helpers.py:576 -msgid "[commented] on revision in repository" +msgid "[created] user" msgstr "" #: rhodecode/lib/helpers.py:578 -msgid "[pushed] into" +msgid "[updated] user" msgstr "" #: rhodecode/lib/helpers.py:580 -msgid "[committed via RhodeCode] into repository" +msgid "[created] users group" msgstr "" #: rhodecode/lib/helpers.py:582 -msgid "[pulled from remote] into repository" +msgid "[updated] users group" msgstr "" #: rhodecode/lib/helpers.py:584 -msgid "[pulled] from" +msgid "[commented] on revision in repository" msgstr "" #: rhodecode/lib/helpers.py:586 -msgid "[started following] repository" +msgid "[pushed] into" msgstr "" #: rhodecode/lib/helpers.py:588 +msgid "[committed via RhodeCode] into repository" +msgstr "" + +#: rhodecode/lib/helpers.py:590 +msgid "[pulled from remote] into repository" +msgstr "" + +#: rhodecode/lib/helpers.py:592 +msgid "[pulled] from" +msgstr "" + +#: rhodecode/lib/helpers.py:594 +msgid "[started following] repository" +msgstr "" + +#: rhodecode/lib/helpers.py:596 msgid "[stopped following] repository" msgstr "" -#: rhodecode/lib/helpers.py:752 +#: rhodecode/lib/helpers.py:760 #, python-format msgid " and %s more" msgstr "" -#: rhodecode/lib/helpers.py:756 +#: rhodecode/lib/helpers.py:764 msgid "No Files" msgstr "" @@ -799,7 +805,7 @@ msgid "on line %s" msgstr "" -#: rhodecode/model/comment.py:113 +#: rhodecode/model/comment.py:114 msgid "[Mention]" msgstr "" @@ -938,19 +944,19 @@ msgid "Enter %(min)i characters or more" msgstr "" -#: rhodecode/model/notification.py:175 +#: rhodecode/model/notification.py:178 msgid "commented on commit" msgstr "" -#: rhodecode/model/notification.py:176 +#: rhodecode/model/notification.py:179 msgid "sent message" msgstr "" -#: rhodecode/model/notification.py:177 +#: rhodecode/model/notification.py:180 msgid "mentioned you" msgstr "" -#: rhodecode/model/notification.py:178 +#: rhodecode/model/notification.py:181 msgid "registered in RhodeCode" msgstr "" @@ -978,6 +984,7 @@ msgstr "" #: rhodecode/templates/index_base.html:6 +#: rhodecode/templates/repo_switcher_list.html:4 #: rhodecode/templates/admin/users/user_edit_my_account.html:31 #: rhodecode/templates/bookmarks/bookmarks.html:10 #: rhodecode/templates/branches/branches.html:9 @@ -1708,6 +1715,12 @@ msgid "private repository" msgstr "" +#: rhodecode/templates/admin/repos/repo_edit_perms.html:19 +#: rhodecode/templates/admin/repos/repo_edit_perms.html:28 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:18 +msgid "default" +msgstr "" + #: rhodecode/templates/admin/repos/repo_edit_perms.html:33 #: rhodecode/templates/admin/repos/repo_edit_perms.html:58 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23 @@ -1840,7 +1853,6 @@ #: rhodecode/templates/admin/settings/hooks.html:9 #: rhodecode/templates/admin/settings/settings.html:9 -#: rhodecode/templates/settings/repo_settings.html:5 #: rhodecode/templates/settings/repo_settings.html:13 msgid "Settings" msgstr "" @@ -2268,13 +2280,11 @@ #: rhodecode/templates/data_table/_dt_elements.html:9 #: rhodecode/templates/data_table/_dt_elements.html:11 #: rhodecode/templates/data_table/_dt_elements.html:13 -#: rhodecode/templates/summary/summary.html:4 msgid "Summary" msgstr "" #: rhodecode/templates/base/base.html:166 rhodecode/templates/base/base.html:168 #: rhodecode/templates/base/base.html:170 -#: rhodecode/templates/changelog/changelog.html:6 #: rhodecode/templates/changelog/changelog.html:15 #: rhodecode/templates/data_table/_dt_elements.html:17 #: rhodecode/templates/data_table/_dt_elements.html:19 @@ -2292,7 +2302,7 @@ #: rhodecode/templates/data_table/_dt_elements.html:25 #: rhodecode/templates/data_table/_dt_elements.html:27 #: rhodecode/templates/data_table/_dt_elements.html:29 -#: rhodecode/templates/files/files.html:4 rhodecode/templates/files/files.html:40 +#: rhodecode/templates/files/files.html:40 msgid "Files" msgstr "" @@ -2336,12 +2346,10 @@ msgstr "" #: rhodecode/templates/base/base.html:235 rhodecode/templates/base/base.html:237 -#: rhodecode/templates/followers/followers.html:5 msgid "Followers" msgstr "" #: rhodecode/templates/base/base.html:243 rhodecode/templates/base/base.html:245 -#: rhodecode/templates/forks/forks.html:5 msgid "Forks" msgstr "" @@ -2372,7 +2380,8 @@ msgstr "" #: rhodecode/templates/bookmarks/bookmarks.html:5 -msgid "Bookmarks" +#, python-format +msgid "%s Bookmarks" msgstr "" #: rhodecode/templates/bookmarks/bookmarks.html:39 @@ -2382,6 +2391,11 @@ msgid "Author" msgstr "" +#: rhodecode/templates/branches/branches.html:5 +#, python-format +msgid "%s Branches" +msgstr "" + #: rhodecode/templates/branches/branches_data.html:7 msgid "date" msgstr "" @@ -2396,6 +2410,11 @@ msgid "revision" msgstr "" +#: rhodecode/templates/changelog/changelog.html:6 +#, python-format +msgid "%s Changelog" +msgstr "" + #: rhodecode/templates/changelog/changelog.html:15 #, python-format msgid "showing %d out of %d revision" @@ -2483,6 +2502,10 @@ msgstr "" #: rhodecode/templates/changeset/changeset.html:6 +#, python-format +msgid "%s Changeset" +msgstr "" + #: rhodecode/templates/changeset/changeset.html:14 msgid "Changeset" msgstr "" @@ -2563,6 +2586,11 @@ msgid "Leave a comment" msgstr "" +#: rhodecode/templates/changeset/changeset_range.html:5 +#, python-format +msgid "%s Changesets" +msgstr "" + #: rhodecode/templates/changeset/changeset_range.html:29 msgid "Compare View" msgstr "" @@ -2582,7 +2610,6 @@ #: rhodecode/templates/data_table/_dt_elements.html:33 #: rhodecode/templates/data_table/_dt_elements.html:35 #: rhodecode/templates/data_table/_dt_elements.html:37 -#: rhodecode/templates/forks/fork.html:5 msgid "Fork" msgstr "" @@ -2624,10 +2651,19 @@ msgstr "" #: rhodecode/templates/files/file_diff.html:4 +#, python-format +msgid "%s File diff" +msgstr "" + #: rhodecode/templates/files/file_diff.html:12 msgid "File diff" msgstr "" +#: rhodecode/templates/files/files.html:4 +#, python-format +msgid "%s Files" +msgstr "" + #: rhodecode/templates/files/files.html:12 #: rhodecode/templates/summary/summary.html:328 msgid "files" @@ -2643,7 +2679,8 @@ #: rhodecode/templates/files/files_add.html:4 #: rhodecode/templates/files/files_edit.html:4 -msgid "Edit file" +#, python-format +msgid "%s Edit file" msgstr "" #: rhodecode/templates/files/files_add.html:19 @@ -2803,12 +2840,22 @@ msgid "No files at given path" msgstr "" +#: rhodecode/templates/followers/followers.html:5 +#, python-format +msgid "%s Followers" +msgstr "" + #: rhodecode/templates/followers/followers.html:13 msgid "followers" msgstr "" #: rhodecode/templates/followers/followers_data.html:12 -msgid "Started following" +msgid "Started following -" +msgstr "" + +#: rhodecode/templates/forks/fork.html:5 +#, python-format +msgid "%s Fork" msgstr "" #: rhodecode/templates/forks/fork.html:31 @@ -2831,6 +2878,11 @@ msgid "fork this repository" msgstr "" +#: rhodecode/templates/forks/forks.html:5 +#, python-format +msgid "%s Forks" +msgstr "" + #: rhodecode/templates/forks/forks.html:13 msgid "forks" msgstr "" @@ -2902,9 +2954,14 @@ msgid "Permission denied" msgstr "" +#: rhodecode/templates/settings/repo_settings.html:5 +#, python-format +msgid "%s Settings" +msgstr "" + #: rhodecode/templates/shortlog/shortlog.html:5 -#: rhodecode/templates/summary/summary.html:209 -msgid "Shortlog" +#, python-format +msgid "%s Shortlog" msgstr "" #: rhodecode/templates/shortlog/shortlog.html:14 @@ -2931,6 +2988,11 @@ msgid "Existing repository?" msgstr "" +#: rhodecode/templates/summary/summary.html:4 +#, python-format +msgid "%s Summary" +msgstr "" + #: rhodecode/templates/summary/summary.html:12 msgid "summary" msgstr "" @@ -2987,6 +3049,10 @@ msgid "Downloads are disabled for this repository" msgstr "" +#: rhodecode/templates/summary/summary.html:161 +msgid "Download as zip" +msgstr "" + #: rhodecode/templates/summary/summary.html:164 msgid "Check this to download archive with subrepos" msgstr "" @@ -3003,6 +3069,10 @@ msgid "Stats gathered: " msgstr "" +#: rhodecode/templates/summary/summary.html:209 +msgid "Shortlog" +msgstr "" + #: rhodecode/templates/summary/summary.html:211 msgid "Quick start" msgstr "" @@ -3044,3 +3114,8 @@ msgid "file removed" msgstr "" +#: rhodecode/templates/tags/tags.html:5 +#, python-format +msgid "%s Tags" +msgstr "" +
--- a/rhodecode/lib/helpers.py Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/lib/helpers.py Sat Jun 09 15:30:22 2012 +0200 @@ -109,7 +109,7 @@ def __call__(self, field_name, form_errors): tmpl = """<span class="error_msg">%s</span>""" - if form_errors and form_errors.has_key(field_name): + if form_errors and field_name in form_errors: return literal(tmpl % form_errors.get(field_name)) get_error = _GetError() @@ -118,12 +118,15 @@ class _ToolTip(object): def __call__(self, tooltip_title, trim_at=50): - """Special function just to wrap our text into nice formatted + """ + Special function just to wrap our text into nice formatted autowrapped text :param tooltip_title: """ - return escape(tooltip_title) + tooltip_title = escape(tooltip_title) + tooltip_title = tooltip_title.replace('<', '<').replace('>', '>') + return tooltip_title tooltip = _ToolTip() @@ -346,6 +349,14 @@ hide_credentials = lambda x: ''.join(credentials_filter(x)) +def fmt_date(date): + if date: + return (date.strftime(_(u"%a, %d %b %Y %H:%M:%S").encode('utf8')) + .decode('utf8')) + + return "" + + def is_git(repository): if hasattr(repository, 'alias'): _type = repository.alias
--- a/rhodecode/lib/hooks.py Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/lib/hooks.py Sat Jun 09 15:30:22 2012 +0200 @@ -30,9 +30,9 @@ from mercurial.scmutil import revrange from mercurial.node import nullrev -from rhodecode import EXTENSIONS from rhodecode.lib import helpers as h from rhodecode.lib.utils import action_logger +from rhodecode.lib.vcs.backends.base import EmptyChangeset def _get_scm_size(alias, root_path): @@ -99,6 +99,7 @@ action_logger(username, action, repository, extras['ip'], commit=True) # extension hook call + from rhodecode import EXTENSIONS callback = getattr(EXTENSIONS, 'PULL_HOOK', None) if isfunction(callback): @@ -137,15 +138,18 @@ stop, start = get_revs(repo, [node + ':']) h = binascii.hexlify - revs = (h(repo[r].node()) for r in xrange(start, stop + 1)) + revs = [h(repo[r].node()) for r in xrange(start, stop + 1)] elif scm == 'git': - revs = [] + revs = kwargs.get('_git_revs', []) + if '_git_revs' in kwargs: + kwargs.pop('_git_revs') action = action % ','.join(revs) action_logger(username, action, repository, extras['ip'], commit=True) # extension hook call + from rhodecode import EXTENSIONS callback = getattr(EXTENSIONS, 'PUSH_HOOK', None) if isfunction(callback): kw = {'pushed_revs': revs} @@ -180,7 +184,7 @@ 'repo_name' """ - + from rhodecode import EXTENSIONS callback = getattr(EXTENSIONS, 'CREATE_REPO_HOOK', None) if isfunction(callback): kw = {} @@ -190,3 +194,67 @@ return callback(**kw) return 0 + + +def handle_git_post_receive(repo_path, revs, env): + """ + A really hacky method that is runned by git post-receive hook and logs + an push action together with pushed revisions. It's executed by subprocess + thus needs all info to be able to create a on the fly pylons enviroment, + connect to database and run the logging code. Hacky as sh*t but works. + + :param repo_path: + :type repo_path: + :param revs: + :type revs: + :param env: + :type env: + """ + from paste.deploy import appconfig + from sqlalchemy import engine_from_config + from rhodecode.config.environment import load_environment + from rhodecode.model import init_model + from rhodecode.model.db import RhodeCodeUi + from rhodecode.lib.utils import make_ui + from rhodecode.model.db import Repository + + path, ini_name = os.path.split(env['RHODECODE_CONFIG_FILE']) + conf = appconfig('config:%s' % ini_name, relative_to=path) + load_environment(conf.global_conf, conf.local_conf) + + engine = engine_from_config(conf, 'sqlalchemy.db1.') + init_model(engine) + + baseui = make_ui('db') + repo = Repository.get_by_full_path(repo_path) + + _hooks = dict(baseui.configitems('hooks')) or {} + # if push hook is enabled via web interface + if _hooks.get(RhodeCodeUi.HOOK_PUSH): + + extras = { + 'username': env['RHODECODE_USER'], + 'repository': repo.repo_name, + 'scm': 'git', + 'action': 'push', + 'ip': env['RHODECODE_CONFIG_IP'], + } + for k, v in extras.items(): + baseui.setconfig('rhodecode_extras', k, v) + repo = repo.scm_instance + repo.ui = baseui + old_rev, new_rev, ref = revs + if old_rev == EmptyChangeset().raw_id: + cmd = "for-each-ref --format='%(refname)' 'refs/heads/*'" + heads = repo.run_git_command(cmd)[0] + heads = heads.replace(ref, '') + heads = ' '.join(map(lambda c: c.strip('\n').strip(), + heads.splitlines())) + cmd = ('log ' + new_rev + + ' --reverse --pretty=format:"%H" --not ' + heads) + else: + cmd = ('log ' + old_rev + '..' + new_rev + + ' --reverse --pretty=format:"%H"') + git_revs = repo.run_git_command(cmd)[0].splitlines() + + log_push_action(baseui, repo, _git_revs=git_revs)
--- a/rhodecode/lib/middleware/pygrack.py Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/lib/middleware/pygrack.py Sat Jun 09 15:30:22 2012 +0200 @@ -41,7 +41,7 @@ git_folder_signature = set(['config', 'head', 'info', 'objects', 'refs']) commands = ['git-upload-pack', 'git-receive-pack'] - def __init__(self, repo_name, content_path): + def __init__(self, repo_name, content_path, username): files = set([f.lower() for f in os.listdir(content_path)]) if not (self.git_folder_signature.intersection(files) == self.git_folder_signature): @@ -50,6 +50,7 @@ self.valid_accepts = ['application/x-%s-result' % c for c in self.commands] self.repo_name = repo_name + self.username = username def _get_fixedpath(self, path): """ @@ -115,11 +116,26 @@ inputstream = environ['wsgi.input'] try: + gitenv = os.environ + from rhodecode import CONFIG + from rhodecode.lib.base import _get_ip_addr + gitenv['RHODECODE_USER'] = self.username + gitenv['RHODECODE_CONFIG_IP'] = _get_ip_addr(environ) + # forget all configs + gitenv['GIT_CONFIG_NOGLOBAL'] = '1' + # we need current .ini file used to later initialize rhodecode + # env and connect to db + gitenv['RHODECODE_CONFIG_FILE'] = CONFIG['__file__'] + opts = dict( + env=gitenv, + cwd=os.getcwd() + ) out = subprocessio.SubprocessIOChunker( r'git %s --stateless-rpc "%s"' % (git_command[4:], self.content_path), - inputstream=inputstream - ) + inputstream=inputstream, + **opts + ) except EnvironmentError, e: log.exception(e) raise exc.HTTPExpectationFailed() @@ -156,7 +172,7 @@ class GitDirectory(object): - def __init__(self, repo_root, repo_name): + def __init__(self, repo_root, repo_name, username): repo_location = os.path.join(repo_root, repo_name) if not os.path.isdir(repo_location): raise OSError(repo_location) @@ -164,18 +180,20 @@ self.content_path = repo_location self.repo_name = repo_name self.repo_location = repo_location + self.username = username def __call__(self, environ, start_response): content_path = self.content_path try: - app = GitRepository(self.repo_name, content_path) + app = GitRepository(self.repo_name, content_path, self.username) except (AssertionError, OSError): if os.path.isdir(os.path.join(content_path, '.git')): - app = GitRepository(os.path.join(content_path, '.git')) + app = GitRepository(self.repo_name, + os.path.join(content_path, '.git')) else: - return exc.HTTPNotFound()(environ, start_response) + return exc.HTTPNotFound()(environ, start_response, self.username) return app(environ, start_response) -def make_wsgi_app(repo_name, repo_root): - return GitDirectory(repo_root, repo_name) +def make_wsgi_app(repo_name, repo_root, username): + return GitDirectory(repo_root, repo_name, username)
--- a/rhodecode/lib/middleware/simplegit.py Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/lib/middleware/simplegit.py Sat Jun 09 15:30:22 2012 +0200 @@ -68,8 +68,9 @@ 'git-receive-pack': dulserver.ReceivePackHandler, } -from dulwich.repo import Repo -from dulwich.web import make_wsgi_chain +# not used for now until dulwich get's fixed +#from dulwich.repo import Repo +#from dulwich.web import make_wsgi_chain from paste.httpheaders import REMOTE_USER, AUTH_TYPE @@ -77,7 +78,7 @@ from rhodecode.lib.base import BaseVCSController from rhodecode.lib.auth import get_container_username from rhodecode.lib.utils import is_valid_repo, make_ui -from rhodecode.model.db import User +from rhodecode.model.db import User, RhodeCodeUi from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError @@ -205,13 +206,13 @@ self._handle_githooks(repo_name, action, baseui, environ) log.info('%s action on GIT repo "%s"' % (action, repo_name)) - app = self.__make_app(repo_name, repo_path) + app = self.__make_app(repo_name, repo_path, username) return app(environ, start_response) except Exception: log.error(traceback.format_exc()) return HTTPInternalServerError()(environ, start_response) - def __make_app(self, repo_name, repo_path): + def __make_app(self, repo_name, repo_path, username): """ Make an wsgi application using dulserver @@ -223,6 +224,7 @@ app = make_wsgi_app( repo_root=os.path.dirname(repo_path), repo_name=repo_name, + username=username, ) return app @@ -268,7 +270,10 @@ return op def _handle_githooks(self, repo_name, action, baseui, environ): - from rhodecode.lib.hooks import log_pull_action, log_push_action + """ + Handles pull action, push is handled by post-receive hook + """ + from rhodecode.lib.hooks import log_pull_action service = environ['QUERY_STRING'].split('=') if len(service) < 2: return @@ -278,12 +283,8 @@ _repo = _repo.scm_instance _repo._repo.ui = baseui - push_hook = 'pretxnchangegroup.push_logger' - pull_hook = 'preoutgoing.pull_logger' _hooks = dict(baseui.configitems('hooks')) or {} - if action == 'push' and _hooks.get(push_hook): - log_push_action(ui=baseui, repo=_repo._repo) - elif action == 'pull' and _hooks.get(pull_hook): + if action == 'pull' and _hooks.get(RhodeCodeUi.HOOK_PULL): log_pull_action(ui=baseui, repo=_repo._repo) def __inject_extras(self, repo_path, baseui, extras={}):
--- a/rhodecode/lib/subprocessio.py Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/lib/subprocessio.py Sat Jun 09 15:30:22 2012 +0200 @@ -276,7 +276,7 @@ return self.data[i] -class SubprocessIOChunker(): +class SubprocessIOChunker(object): ''' Processor class wrapping handling of subprocess IO. @@ -321,7 +321,7 @@ ''' def __init__(self, cmd, inputstream=None, buffer_size=65536, - chunk_size=4096, starting_values=[]): + chunk_size=4096, starting_values=[], **kwargs): ''' Initializes SubprocessIOChunker @@ -342,7 +342,8 @@ shell=True, stdin=inputstream, stdout=subprocess.PIPE, - stderr=subprocess.PIPE + stderr=subprocess.PIPE, + **kwargs ) bg_out = BufferedGenerator(_p.stdout, buffer_size, chunk_size, starting_values)
--- a/rhodecode/model/db.py Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/model/db.py Sat Jun 09 15:30:22 2012 +0200 @@ -242,7 +242,7 @@ HOOK_UPDATE = 'changegroup.update' HOOK_REPO_SIZE = 'changegroup.repo_size' - HOOK_PUSH = 'pretxnchangegroup.push_logger' + HOOK_PUSH = 'changegroup.push_logger' HOOK_PULL = 'preoutgoing.pull_logger' ui_id = Column("ui_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) @@ -273,6 +273,10 @@ return q.all() @classmethod + def get_repos_location(cls): + return cls.get_by_key('/').one().ui_value + + @classmethod def create_or_update_hook(cls, key, val): new_ui = cls.get_by_key(key).scalar() or cls() new_ui.ui_section = 'hooks' @@ -587,6 +591,11 @@ return q.scalar() @classmethod + def get_by_full_path(cls, repo_full_path): + repo_name = repo_full_path.split(cls.base_path(), 1)[-1] + return cls.get_by_repo_name(repo_name.strip(URL_SEP)) + + @classmethod def get_repo_forks(cls, repo_id): return cls.query().filter(Repository.fork_id == repo_id)
--- a/rhodecode/model/forms.py Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/model/forms.py Sat Jun 09 15:30:22 2012 +0200 @@ -731,7 +731,7 @@ paths_root_path = All(ValidPath(), UnicodeString(strip=True, min=1, not_empty=True)) hooks_changegroup_update = OneOf(['True', 'False'], if_missing=False) hooks_changegroup_repo_size = OneOf(['True', 'False'], if_missing=False) - hooks_pretxnchangegroup_push_logger = OneOf(['True', 'False'], if_missing=False) + hooks_changegroup_push_logger = OneOf(['True', 'False'], if_missing=False) hooks_preoutgoing_pull_logger = OneOf(['True', 'False'], if_missing=False) return _ApplicationUiSettingsForm
--- a/rhodecode/model/permission.py Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/model/permission.py Sat Jun 09 15:30:22 2012 +0200 @@ -31,7 +31,8 @@ from rhodecode.lib.caching_query import FromCache from rhodecode.model import BaseModel -from rhodecode.model.db import User, Permission, UserToPerm, UserRepoToPerm +from rhodecode.model.db import User, Permission, UserToPerm, UserRepoToPerm,\ + UserRepoGroupToPerm log = logging.getLogger(__name__) @@ -87,23 +88,33 @@ form_result['default_perm']) self.sa.add(p) - if p.permission.permission_name.startswith('hg.register.'): + elif p.permission.permission_name.startswith('hg.register.'): p.permission = self.get_permission_by_name( form_result['default_register']) self.sa.add(p) - if p.permission.permission_name.startswith('hg.create.'): + elif p.permission.permission_name.startswith('hg.create.'): p.permission = self.get_permission_by_name( form_result['default_create']) self.sa.add(p) + _def_name = form_result['default_perm'].split('repository.')[-1] #stage 2 update all default permissions for repos if checked if form_result['overwrite_default'] == True: + _def = self.get_permission_by_name('repository.' + _def_name) + # repos for r2p in self.sa.query(UserRepoToPerm)\ - .filter(UserRepoToPerm.user == perm_user).all(): - r2p.permission = self.get_permission_by_name( - form_result['default_perm']) + .filter(UserRepoToPerm.user == perm_user)\ + .all(): + r2p.permission = _def self.sa.add(r2p) + # groups + _def = self.get_permission_by_name('group.' + _def_name) + for g2p in self.sa.query(UserRepoGroupToPerm)\ + .filter(UserRepoGroupToPerm.user == perm_user)\ + .all(): + g2p.permission = _def + self.sa.add(g2p) # stage 3 set anonymous access if perm_user.username == 'default':
--- a/rhodecode/model/repo.py Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/model/repo.py Sat Jun 09 15:30:22 2012 +0200 @@ -22,10 +22,13 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. +from __future__ import with_statement import os import shutil import logging import traceback +import pkg_resources +from os.path import dirname as dn, join as jn from datetime import datetime from rhodecode.lib.vcs.backends import get_backend @@ -461,7 +464,23 @@ if alias == 'hg': backend(repo_path, create=True, src_url=clone_uri) elif alias == 'git': - backend(repo_path, create=True, src_url=clone_uri, bare=True) + r = backend(repo_path, create=True, src_url=clone_uri, bare=True) + # add rhodecode hook into this repo + + loc = jn(r.path, 'hooks') + if not r.bare: + loc = jn(r.path, '.git', 'hooks') + if not os.path.isdir(loc): + os.makedirs(loc) + + tmpl = pkg_resources.resource_string( + 'rhodecode', jn('config', 'post_receive_tmpl.py') + ) + _hook_file = jn(loc, 'post-receive') + with open(_hook_file, 'wb') as f: + f.write(tmpl) + os.chmod(_hook_file, 0755) + else: raise Exception('Undefined alias %s' % alias)
--- a/rhodecode/public/js/rhodecode.js Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/public/js/rhodecode.js Sat Jun 09 15:30:22 2012 +0200 @@ -611,8 +611,8 @@ } -var fileBrowserListeners = function(current_url, node_list_url, url_base, - truncated_lbl, nomatch_lbl){ +var fileBrowserListeners = function(current_url, node_list_url, url_base){ + var current_url_branch = +"?branch=__BRANCH__"; var url = url_base; var node_url = node_list_url; @@ -641,7 +641,7 @@ YUC.initHeader('X-PARTIAL-XHR',true); YUC.asyncRequest('GET',url,{ success:function(o){ - nodes = JSON.parse(o.responseText); + nodes = JSON.parse(o.responseText).nodes; YUD.setStyle('node_filter_box_loading','display','none'); YUD.setStyle('node_filter_box','display',''); n_filter.focus(); @@ -685,9 +685,8 @@ 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)); } if(match.length >= matches_max){ - match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(truncated_lbl)); + match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(_TM['search truncated'])); } - } } if(query != ""){ @@ -695,7 +694,7 @@ YUD.setStyle('tbody_filtered','display',''); if (match.length==0){ - match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(nomatch_lbl)); + match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(_TM['no matching files'])); } YUD.get('tbody_filtered').innerHTML = match.join("");
--- a/rhodecode/templates/admin/admin_log.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/admin/admin_log.html Sat Jun 09 15:30:22 2012 +0200 @@ -25,7 +25,7 @@ %endif </td> - <td>${l.action_date}</td> + <td>${h.fmt_date(l.action_date)}</td> <td>${l.user_ip}</td> </tr> %endfor
--- a/rhodecode/templates/admin/repos/repo_edit_perms.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/admin/repos/repo_edit_perms.html Sat Jun 09 15:30:22 2012 +0200 @@ -16,7 +16,7 @@ ${_('private repository')} </span> </td> - <td class="private_repo_msg"><img style="vertical-align:bottom" src="${h.url('/images/icons/user.png')}"/>${r2p.user.username}</td> + <td class="private_repo_msg"><img style="vertical-align:bottom" src="${h.url('/images/icons/user.png')}"/>${_('default')}</td> </tr> %else: <tr id="id${id(r2p.user.username)}"> @@ -25,7 +25,7 @@ <td>${h.radio('u_perm_%s' % r2p.user.username,'repository.write')}</td> <td>${h.radio('u_perm_%s' % r2p.user.username,'repository.admin')}</td> <td style="white-space: nowrap;"> - <img class="perm-gravatar" src="${h.gravatar_url(r2p.user.email,14)}"/>${r2p.user.username} + <img class="perm-gravatar" src="${h.gravatar_url(r2p.user.email,14)}"/>${r2p.user.username if r2p.user.username != 'default' else _('default')} </td> <td> %if r2p.user.username !='default':
--- a/rhodecode/templates/admin/repos/repos.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/admin/repos/repos.html Sat Jun 09 15:30:22 2012 +0200 @@ -56,7 +56,7 @@ </td> ##LAST CHANGE <td> - <span class="tooltip" title="${repo['last_change']}">${h.age(repo['last_change'])}</span> + <span class="tooltip" title="${h.tooltip(repo['last_change'])}">${h.age(repo['last_change'])}</span> </td> ##LAST REVISION <td>
--- a/rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html Sat Jun 09 15:30:22 2012 +0200 @@ -15,7 +15,7 @@ <td>${h.radio('u_perm_%s' % r2p.user.username,'group.write')}</td> <td>${h.radio('u_perm_%s' % r2p.user.username,'group.admin')}</td> <td style="white-space: nowrap;"> - <img class="perm-gravatar" src="${h.gravatar_url(r2p.user.email,14)}"/>${r2p.user.username} + <img class="perm-gravatar" src="${h.gravatar_url(r2p.user.email,14)}"/>${r2p.user.username if r2p.user.username != 'default' else _('default')} </td> <td> %if r2p.user.username !='default':
--- a/rhodecode/templates/admin/settings/settings.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/admin/settings/settings.html Sat Jun 09 15:30:22 2012 +0200 @@ -148,8 +148,8 @@ <label for="hooks_changegroup_repo_size">${_('Show repository size after push')}</label> </div> <div class="checkbox"> - ${h.checkbox('hooks_pretxnchangegroup_push_logger','True')} - <label for="hooks_pretxnchangegroup_push_logger">${_('Log user push commands')}</label> + ${h.checkbox('hooks_changegroup_push_logger','True')} + <label for="hooks_changegroup_push_logger">${_('Log user push commands')}</label> </div> <div class="checkbox"> ${h.checkbox('hooks_preoutgoing_pull_logger','True')}
--- a/rhodecode/templates/admin/users/users.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/admin/users/users.html Sat Jun 09 15:30:22 2012 +0200 @@ -40,13 +40,13 @@ <th class="left">${_('action')}</th> </tr> %for cnt,user in enumerate(c.users_list): - %if user.name !='default': + %if user.username !='default': <tr class="parity${cnt%2}"> <td><div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(user.email,24)}"/> </div></td> <td>${h.link_to(user.username,h.url('edit_user', id=user.user_id))}</td> <td>${user.name}</td> <td>${user.lastname}</td> - <td>${user.last_login}</td> + <td>${h.fmt_date(user.last_login)}</td> <td>${h.bool2icon(user.active)}</td> <td>${h.bool2icon(user.admin)}</td> <td>${h.bool2icon(bool(user.ldap_dn))}</td>
--- a/rhodecode/templates/admin/users_groups/users_groups.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/admin/users_groups/users_groups.html Sat Jun 09 15:30:22 2012 +0200 @@ -37,7 +37,7 @@ %for cnt,u_group in enumerate(c.users_groups_list): <tr class="parity${cnt%2}"> <td>${h.link_to(u_group.users_group_name,h.url('edit_users_group', id=u_group.users_group_id))}</td> - <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> + <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> <td>${h.bool2icon(u_group.users_group_active)}</td> <td> ${h.form(url('users_group', id=u_group.users_group_id),method='delete')}
--- a/rhodecode/templates/base/root.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/base/root.html Sat Jun 09 15:30:22 2012 +0200 @@ -43,7 +43,9 @@ 'Stop following this repository':"${_('Stop following this repository')}", 'Start following this repository':"${_('Start following this repository')}", 'Group':"${_('Group')}", - 'members':"${_('members')}" + 'members':"${_('members')}", + 'search truncated': "${_('search truncated')}", + 'no matching files': "${_('no matching files')}" }; var _TM = TRANSLATION_MAP; @@ -137,6 +139,8 @@ </%def> <%def name="js_extra()"></%def> ${self.js()} + <%def name="head_extra()"></%def> + ${self.head_extra()} </head> <body id="body"> ## IE hacks
--- a/rhodecode/templates/bookmarks/bookmarks.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/bookmarks/bookmarks.html Sat Jun 09 15:30:22 2012 +0200 @@ -2,7 +2,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${c.repo_name} ${_('Bookmarks')} - ${c.rhodecode_name} + ${_('%s Bookmarks') % c.repo_name} - ${c.rhodecode_name} </%def>
--- a/rhodecode/templates/bookmarks/bookmarks_data.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/bookmarks/bookmarks_data.html Sat Jun 09 15:30:22 2012 +0200 @@ -17,7 +17,7 @@ h.url('files_home',repo_name=c.repo_name,revision=book[1].raw_id))}</span> </span> </td> - <td><span class="tooltip" title="${h.age(book[1].date)}">${book[1].date}</span></td> + <td><span class="tooltip" title="${h.tooltip(h.age(book[1].date))}">${h.fmt_date(book[1].date)}</span></td> <td title="${book[1].author}">${h.person(book[1].author)}</td> <td> <div>
--- a/rhodecode/templates/branches/branches.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/branches/branches.html Sat Jun 09 15:30:22 2012 +0200 @@ -2,7 +2,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${c.repo_name} ${_('Branches')} - ${c.rhodecode_name} + ${_('%s Branches') % c.repo_name} - ${c.rhodecode_name} </%def> <%def name="breadcrumbs_links()">
--- a/rhodecode/templates/branches/branches_data.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/branches/branches_data.html Sat Jun 09 15:30:22 2012 +0200 @@ -18,7 +18,7 @@ h.url('files_home',repo_name=c.repo_name,revision=branch[1].raw_id))}</span> </span> </td> - <td><span class="tooltip" title="${h.age(branch[1].date)}">${branch[1].date}</span></td> + <td><span class="tooltip" title="${h.tooltip(h.age(branch[1].date))}">${h.fmt_date(branch[1].date)}</span></td> <td title="${branch[1].author}">${h.person(branch[1].author)}</td> <td> <div> @@ -40,7 +40,7 @@ h.url('changeset_home',repo_name=c.repo_name,revision=branch[1].raw_id))}</span> </span> </td> - <td><span class="tooltip" title="${h.age(branch[1].date)}">${branch[1].date}</span></td> + <td><span class="tooltip" title="${h.tooltip(h.age(branch[1].date))}">${h.fmt_date(branch[1].date)}</span></td> <td title="${branch[1].author}">${h.person(branch[1].author)}</td> <td> <div>
--- a/rhodecode/templates/changelog/changelog.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/changelog/changelog.html Sat Jun 09 15:30:22 2012 +0200 @@ -3,7 +3,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> -${c.repo_name} ${_('Changelog')} - ${c.rhodecode_name} +${_('%s Changelog') % c.repo_name} - ${c.rhodecode_name} </%def> <%def name="breadcrumbs_links()"> @@ -55,7 +55,7 @@ <div class="left"> <div> ${h.checkbox(cs.short_id,class_="changeset_range")} - <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> + <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> </div> <div class="author"> <div class="gravatar"> @@ -63,15 +63,15 @@ </div> <div title="${cs.author}" class="user">${h.shorter(h.person(cs.author),22)}</div> </div> - <div class="date">${cs.date}</div> + <div class="date">${h.fmt_date(cs.date)}</div> </div> <div class="mid"> - <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> + <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> <div class="expand"><span class="expandtext">↓ ${_('show more')} ↓</span></div> </div> <div class="right"> <div class="changes"> - <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> + <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> <div class="comments-container"> %if len(c.comments.get(cs.raw_id,[])) > 0: <div class="comments-cnt" title="${('comments')}">
--- a/rhodecode/templates/changelog/changelog_details.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/changelog/changelog_details.html Sat Jun 09 15:30:22 2012 +0200 @@ -1,11 +1,11 @@ ## small box that displays changed/added/removed details fetched by AJAX % if len(c.cs.affected_files) <= c.affected_files_cut_off: -<span class="removed tooltip" title="<b>${_('removed')}</b>${h.changed_tooltip(c.cs.removed)}">${len(c.cs.removed)}</span> -<span class="changed tooltip" title="<b>${_('changed')}</b>${h.changed_tooltip(c.cs.changed)}">${len(c.cs.changed)}</span> -<span class="added tooltip" title="<b>${_('added')}</b>${h.changed_tooltip(c.cs.added)}">${len(c.cs.added)}</span> +<span class="removed tooltip" title="<b>${h.tooltip(_('removed'))}</b>${h.changed_tooltip(c.cs.removed)}">${len(c.cs.removed)}</span> +<span class="changed tooltip" title="<b>${h.tooltip(_('changed'))}</b>${h.changed_tooltip(c.cs.changed)}">${len(c.cs.changed)}</span> +<span class="added tooltip" title="<b>${h.tooltip(_('added'))}</b>${h.changed_tooltip(c.cs.added)}">${len(c.cs.added)}</span> % else: - <span class="removed tooltip" title="${_('affected %s files') % len(c.cs.affected_files)}">!</span> - <span class="changed tooltip" title="${_('affected %s files') % len(c.cs.affected_files)}">!</span> - <span class="added tooltip" title="${_('affected %s files') % len(c.cs.affected_files)}">!</span> + <span class="removed tooltip" title="${h.tooltip(_('affected %s files') % len(c.cs.affected_files))}">!</span> + <span class="changed tooltip" title="${h.tooltip(_('affected %s files') % len(c.cs.affected_files))}">!</span> + <span class="added tooltip" title="${h.tooltip(_('affected %s files') % len(c.cs.affected_files))}">!</span> % endif
--- a/rhodecode/templates/changeset/changeset.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/changeset/changeset.html Sat Jun 09 15:30:22 2012 +0200 @@ -3,7 +3,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${c.repo_name} ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} - ${c.rhodecode_name} + ${_('%s Changeset') % c.repo_name} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} - ${c.rhodecode_name} </%def> <%def name="breadcrumbs_links()"> @@ -31,7 +31,7 @@ r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} </div> <div class="date"> - ${c.changeset.date} + ${h.fmt_date(c.changeset.date)} </div> <div class="changeset-status-container"> %if c.statuses: @@ -40,8 +40,8 @@ %endif </div> <div class="diff-actions"> - <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> - <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> + <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> + <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> ${c.ignorews_url(request.GET)} ${c.context_url(request.GET)} </div> @@ -58,7 +58,7 @@ <span>${h.person(c.changeset.author)}</span><br/> <span><a href="mailto:${h.email_or_none(c.changeset.author)}">${h.email_or_none(c.changeset.author)}</a></span><br/> </div> - <div class="message">${h.urlify_commit(h.wrap_paragraphs(c.changeset.message),c.repo_name)}</div> + <div class="message">${h.urlify_commit(c.changeset.message, c.repo_name)}</div> </div> <div class="right"> <div class="changes">
--- a/rhodecode/templates/changeset/changeset_file_comment.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/changeset/changeset_file_comment.html Sat Jun 09 15:30:22 2012 +0200 @@ -43,9 +43,12 @@ ${h.form(h.url('changeset_comment', repo_name=c.repo_name, revision=changeset.raw_id),class_='inline-form')} <div class="clearfix"> <div class="comment-help">${_('Commenting on line {1}.')} - ${(_('Comments parsed using %s syntax with %s support.') % (('<a href="%s">RST</a>' % h.url('rst_help')), - '<span style="color:#003367" class="tooltip" title="%s">@mention</span>' % - _('Use @username inside this text to send notification to this RhodeCode user')))|n} + ${(_('Comments parsed using %s syntax with %s support.') % ( + ('<a href="%s">RST</a>' % h.url('rst_help')), + ('<span style="color:#003367" class="tooltip" title="%s">@mention</span>' % _('Use @username inside this text to send notification to this RhodeCode user')) + ) + )|n + } </div> <div class="mentions-container" id="mentions_container_{1}"></div> <textarea id="text_{1}" name="text" class="yui-ac-input"></textarea>
--- a/rhodecode/templates/changeset/changeset_range.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/changeset/changeset_range.html Sat Jun 09 15:30:22 2012 +0200 @@ -2,7 +2,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${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} + ${_('%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} </%def> <%def name="breadcrumbs_links()"> @@ -43,7 +43,7 @@ <td><span class="tooltip" title="${h.age(cs.date)}">${cs.date}</span></td> <td> %if c.statuses: - <div title="${_('Changeset status')}" class="changeset-status-ico"><img src="${h.url('/images/icons/flag_status_%s.png' % c.statuses[cnt])}" /></div> + <div title="${h.tooltip(_('Changeset status'))}" class="changeset-status-ico"><img src="${h.url('/images/icons/flag_status_%s.png' % c.statuses[cnt])}" /></div> %endif </td> <td><div class="message">${h.urlify_commit(h.wrap_paragraphs(cs.message),c.repo_name)}</div></td>
--- a/rhodecode/templates/changeset/diff_block.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/changeset/diff_block.html Sat Jun 09 15:30:22 2012 +0200 @@ -16,9 +16,9 @@ revision=filenode.changeset.raw_id,f_path=h.safe_unicode(filenode.path)))} </div> <div class="diff-actions"> - <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> - <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> - <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> + <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> + <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> + <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> ${c.ignorews_url(request.GET, h.FID(filenode.changeset.raw_id,filenode.path))} ${c.context_url(request.GET, h.FID(filenode.changeset.raw_id,filenode.path))} </div>
--- a/rhodecode/templates/files/file_diff.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/files/file_diff.html Sat Jun 09 15:30:22 2012 +0200 @@ -1,7 +1,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${c.repo_name} ${_('File diff')} - ${c.rhodecode_name} + ${_('%s File diff') % c.repo_name} - ${c.rhodecode_name} </%def> <%def name="breadcrumbs_links()">
--- a/rhodecode/templates/files/files.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/files/files.html Sat Jun 09 15:30:22 2012 +0200 @@ -1,7 +1,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${c.repo_name} ${_('Files')} - ${c.rhodecode_name} + ${_('%s Files') % c.repo_name} - ${c.rhodecode_name} </%def> <%def name="breadcrumbs_links()"> @@ -41,8 +41,6 @@ var current_url = "${h.url.current()}"; var node_list_url = '${h.url("files_home",repo_name=c.repo_name,revision=c.changeset.raw_id,f_path='__FPATH__')}'; var url_base = '${h.url("files_nodelist_home",repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.file.path)}'; -var truncated_lbl = "${_('search truncated')}"; -var nomatch_lbl = "${_('no matching files')}"; -fileBrowserListeners(current_url, node_list_url, url_base, truncated_lbl, nomatch_lbl); +fileBrowserListeners(current_url, node_list_url, url_base); </script> </%def>
--- a/rhodecode/templates/files/files_add.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/files/files_add.html Sat Jun 09 15:30:22 2012 +0200 @@ -1,7 +1,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${c.repo_name} ${_('Edit file')} - ${c.rhodecode_name} + ${_('%s Edit file') % c.repo_name} - ${c.rhodecode_name} </%def> <%def name="js_extra()">
--- a/rhodecode/templates/files/files_browser.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/files/files_browser.html Sat Jun 09 15:30:22 2012 +0200 @@ -88,14 +88,14 @@ </td> <td> %if node.is_file(): - <div class="tooltip" title="${node.last_changeset.message}"> + <div class="tooltip" title="${h.tooltip(node.last_changeset.message)}"> <pre>${'r%s:%s' % (node.last_changeset.revision,node.last_changeset.short_id)}</pre> </div> %endif </td> <td> %if node.is_file(): - <span class="tooltip" title="${node.last_changeset.date}"> + <span class="tooltip" title="${h.tooltip(h.fmt_date(node.last_changeset.date))}"> ${h.age(node.last_changeset.date)}</span> %endif </td>
--- a/rhodecode/templates/files/files_edit.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/files/files_edit.html Sat Jun 09 15:30:22 2012 +0200 @@ -1,7 +1,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${c.repo_name} ${_('Edit file')} - ${c.rhodecode_name} + ${_('%s Edit file') % c.repo_name} - ${c.rhodecode_name} </%def> <%def name="js_extra()">
--- a/rhodecode/templates/files/files_source.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/files/files_source.html Sat Jun 09 15:30:22 2012 +0200 @@ -16,7 +16,7 @@ <div class="code-header"> <div class="stats"> <div class="left img"><img src="${h.url('/images/icons/file.png')}"/></div> - <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> + <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> <div class="left item"><pre>${h.format_byte_size(c.file.size,binary=True)}</pre></div> <div class="left item last"><pre>${c.file.mimetype}</pre></div> <div class="buttons">
--- a/rhodecode/templates/followers/followers.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/followers/followers.html Sat Jun 09 15:30:22 2012 +0200 @@ -2,7 +2,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${c.repo_name} ${_('Followers')} - ${c.rhodecode_name} + ${_('%s Followers') % c.repo_name} - ${c.rhodecode_name} </%def> <%def name="breadcrumbs_links()">
--- a/rhodecode/templates/followers/followers_data.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/followers/followers_data.html Sat Jun 09 15:30:22 2012 +0200 @@ -9,8 +9,8 @@ <span style="font-size: 20px"> <b>${f.user.username}</b> (${f.user.name} ${f.user.lastname})</span> </div> <div style="clear:both;padding-top: 10px"></div> - <div class="follower_date">${_('Started following')} - - <span class="tooltip" title="${f.follows_from}"> ${h.age(f.follows_from)}</span></div> + <div class="follower_date">${_('Started following -')} + <span class="tooltip" title="${h.tooltip(f.follows_from)}"> ${h.age(f.follows_from)}</span></div> <div style="border-bottom: 1px solid #DDD;margin:10px 0px 10px 0px"></div> </div> % endfor
--- a/rhodecode/templates/forks/fork.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/forks/fork.html Sat Jun 09 15:30:22 2012 +0200 @@ -2,7 +2,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${c.repo_name} ${_('Fork')} - ${c.rhodecode_name} + ${_('%s Fork') % c.repo_name} - ${c.rhodecode_name} </%def> <%def name="breadcrumbs_links()">
--- a/rhodecode/templates/forks/forks.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/forks/forks.html Sat Jun 09 15:30:22 2012 +0200 @@ -2,7 +2,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${c.repo_name} ${_('Forks')} - ${c.rhodecode_name} + ${_('%s Forks') % c.repo_name} - ${c.rhodecode_name} </%def> <%def name="breadcrumbs_links()">
--- a/rhodecode/templates/forks/forks_data.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/forks/forks_data.html Sat Jun 09 15:30:22 2012 +0200 @@ -15,7 +15,7 @@ </div> <div style="clear:both;padding-top: 10px"></div> <div class="follower_date">${_('forked')} - - <span class="tooltip" title="${f.created_on}"> ${h.age(f.created_on)}</span></div> + <span class="tooltip" title="${h.tooltip(h.fmt_date(f.created_on))}"> ${h.age(f.created_on)}</span></div> <div style="border-bottom: 1px solid #DDD;margin:10px 0px 10px 0px"></div> </div> % endfor
--- a/rhodecode/templates/index_base.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/index_base.html Sat Jun 09 15:30:22 2012 +0200 @@ -89,7 +89,7 @@ </td> ##LAST CHANGE DATE <td> - <span class="tooltip" title="${repo['last_change']}">${h.age(repo['last_change'])}</span> + <span class="tooltip" title="${h.tooltip(h.fmt_date(repo['last_change']))}">${h.age(repo['last_change'])}</span> </td> ##LAST REVISION <td>
--- a/rhodecode/templates/journal/journal.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/journal/journal.html Sat Jun 09 15:30:22 2012 +0200 @@ -9,6 +9,10 @@ <%def name="page_nav()"> ${self.menu('home')} </%def> +<%def name="head_extra()"> +<link href="${h.url('journal_atom', api_key=c.rhodecode_user.api_key)}" rel="alternate" title="${_('ATOM journal feed')}" type="application/atom+xml" /> +<link href="${h.url('journal_rss', api_key=c.rhodecode_user.api_key)}" rel="alternate" title="${_('RSS journal feed')}" type="application/rss+xml" /> +</%def> <%def name="main()"> <div class="box box-left"> @@ -17,8 +21,13 @@ <h5>${_('Journal')}</h5> <ul class="links"> <li> - <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> + <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> + </li> + <li> + <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> + </li> + <li> + <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> </li> </ul> </div>
--- a/rhodecode/templates/journal/journal_data.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/journal/journal_data.html Sat Jun 09 15:30:22 2012 +0200 @@ -24,7 +24,7 @@ </span> </div> <div class="journal_action_params">${h.literal(h.action_parser(entry)[1]())}</div> - <div class="date"><span class="tooltip" title="${entry.action_date}">${h.age(entry.action_date)}</span></div> + <div class="date"><span class="tooltip" title="${h.tooltip(h.fmt_date(entry.action_date))}">${h.age(entry.action_date)}</span></div> %endfor </div> </div>
--- a/rhodecode/templates/journal/public_journal.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/journal/public_journal.html Sat Jun 09 15:30:22 2012 +0200 @@ -9,33 +9,35 @@ <%def name="page_nav()"> ${self.menu('home')} </%def> +<%def name="head_extra()"> +<link href="${h.url('public_journal_atom')}" rel="alternate" title="${_('ATOM public journal feed')}" type="application/atom+xml" /> +<link href="${h.url('public_journal_rss')}" rel="alternate" title="${_('RSS public journal feed')}" type="application/rss+xml" /> +</%def> <%def name="main()"> - <div class="box"> - <!-- box / title --> - <div class="title"> - <h5>${_('Public Journal')}</h5> - <ul class="links"> - <li> - <span>${h.link_to(_('RSS'),h.url('public_journal_rss'),class_='rss_icon')}</span> - </li> - <li> - <span>${h.link_to(_('Atom'),h.url('public_journal_atom'),class_='atom_icon')}</span> - </li> - - </ul> - - </div> - <script type="text/javascript"> - function show_more_event(){ - YUE.on(YUD.getElementsByClassName('show_more'),'click',function(e){ - var el = e.target; - YUD.setStyle(YUD.get(el.id.substring(1)),'display',''); - YUD.setStyle(el.parentNode,'display','none'); - }); - } - </script> - <div id="journal">${c.journal_data}</div> - </div> +<div class="box"> + <!-- box / title --> + <div class="title"> + <h5>${_('Public Journal')}</h5> + <ul class="links"> + <li> + <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> + </li> + <li> + <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> + </li> + </ul> + </div> + <script type="text/javascript"> + function show_more_event(){ + YUE.on(YUD.getElementsByClassName('show_more'),'click',function(e){ + var el = e.target; + YUD.setStyle(YUD.get(el.id.substring(1)),'display',''); + YUD.setStyle(el.parentNode,'display','none'); + }); + } + </script> + <div id="journal">${c.journal_data}</div> +</div> </%def>
--- a/rhodecode/templates/repo_switcher_list.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/repo_switcher_list.html Sat Jun 09 15:30:22 2012 +0200 @@ -1,7 +1,7 @@ ## -*- coding: utf-8 -*- <li class="qfilter_rs"> - <input type="text" style="border:0" value="quick filter..." name="filter" size="25" id="q_filter_rs" /> + <input type="text" style="border:0" value="${_('quick filter...')}" name="filter" size="20" id="q_filter_rs" /> </li> %for repo in c.repos_list:
--- a/rhodecode/templates/settings/repo_settings.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/settings/repo_settings.html Sat Jun 09 15:30:22 2012 +0200 @@ -2,7 +2,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${c.repo_name} ${_('Settings')} - ${c.rhodecode_name} + ${_('%s Settings') % c.repo_name} - ${c.rhodecode_name} </%def> <%def name="breadcrumbs_links()">
--- a/rhodecode/templates/shortlog/shortlog.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/shortlog/shortlog.html Sat Jun 09 15:30:22 2012 +0200 @@ -2,7 +2,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${c.repo_name} ${_('Shortlog')} - ${c.rhodecode_name} + ${_('%s Shortlog') % c.repo_name} - ${c.rhodecode_name} </%def>
--- a/rhodecode/templates/shortlog/shortlog_data.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/shortlog/shortlog_data.html Sat Jun 09 15:30:22 2012 +0200 @@ -19,7 +19,7 @@ h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id), title=cs.message)} </td> - <td><span class="tooltip" title="${cs.date}"> + <td><span class="tooltip" title="${h.tooltip(h.fmt_date(cs.date))}"> ${h.age(cs.date)}</span> </td> <td title="${cs.author}">${h.person(cs.author)}</td>
--- a/rhodecode/templates/summary/summary.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/summary/summary.html Sat Jun 09 15:30:22 2012 +0200 @@ -1,7 +1,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${c.repo_name} ${_('Summary')} - ${c.rhodecode_name} + ${_('%s Summary') % c.repo_name} - ${c.rhodecode_name} </%def> <%def name="breadcrumbs_links()"> @@ -16,6 +16,11 @@ ${self.menu('summary')} </%def> +<%def name="head_extra()"> +<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" /> +<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" /> +</%def> + <%def name="main()"> <% summary = lambda n:{False:'summary-short'}.get(n) @@ -158,10 +163,10 @@ %endif %else: ${h.select('download_options',c.rhodecode_repo.get_changeset().raw_id,c.download_options)} - <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> + <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> <span style="vertical-align: bottom"> <input id="archive_subrepos" type="checkbox" name="subrepos" /> - <label for="archive_subrepos" class="tooltip" title="${_('Check this to download archive with subrepos')}" >${_('with subrepos')}</label> + <label for="archive_subrepos" class="tooltip" title="${h.tooltip(_('Check this to download archive with subrepos'))}" >${_('with subrepos')}</label> </span> %endif </div>
--- a/rhodecode/templates/tags/tags.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/tags/tags.html Sat Jun 09 15:30:22 2012 +0200 @@ -2,7 +2,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${c.repo_name} ${_('Tags')} - ${c.rhodecode_name} + ${_('%s Tags') % c.repo_name} - ${c.rhodecode_name} </%def>
--- a/rhodecode/templates/tags/tags_data.html Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/templates/tags/tags_data.html Sat Jun 09 15:30:22 2012 +0200 @@ -18,7 +18,7 @@ </span> </span> </td> - <td><span class="tooltip" title="${h.age(tag[1].date)}">${tag[1].date}</span></td> + <td><span class="tooltip" title="${h.tooltip(h.age(tag[1].date))}">${h.fmt_date(tag[1].date)}</span></td> <td title="${tag[1].author}">${h.person(tag[1].author)}</td> <td> <div>
--- a/rhodecode/tests/functional/test_home.py Wed Jun 06 01:23:02 2012 +0200 +++ b/rhodecode/tests/functional/test_home.py Sat Jun 09 15:30:22 2012 +0200 @@ -18,5 +18,7 @@ """open.png"/>""") response.mustcontain( -"""<a title="Marcin Kuzminski <marcin@python-works.com>:\n -merge" class="tooltip" href="/vcs_test_hg/changeset/27cd5cce30c96924232dffcd24178a07ffeb5dfc">r173:27cd5cce30c9</a>""") +"""<a title="Marcin Kuzminski &lt;marcin@python-works.com&gt;:\n +merge" class="tooltip" href="/vcs_test_hg/changeset/27cd5cce30c96924232""" +"""dffcd24178a07ffeb5dfc">r173:27cd5cce30c9</a>""" +)